• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// This file is generated from a similarly-named Perl script in the BoringSSL
2// source tree. Do not edit by hand.
3
4#include <openssl/asm_base.h>
5
6#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_ARM) && defined(__ELF__)
7#include <openssl/arm_arch.h>
8
9.text
10#if defined(__thumb2__)
11.syntax	unified
12.thumb
13#else
14.code	32
15#endif
16
17.globl	sha1_block_data_order
18.hidden	sha1_block_data_order
19.type	sha1_block_data_order,%function
20
21.align	5
22sha1_block_data_order:
23#if __ARM_MAX_ARCH__>=7
24.Lsha1_block:
25	adr	r3,.Lsha1_block
26	ldr	r12,.LOPENSSL_armcap
27	ldr	r12,[r3,r12]		@ OPENSSL_armcap_P
28#ifdef	__APPLE__
29	ldr	r12,[r12]
30#endif
31	tst	r12,#ARMV8_SHA1
32	bne	.LARMv8
33	tst	r12,#ARMV7_NEON
34	bne	.LNEON
35#endif
36	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
37	add	r2,r1,r2,lsl#6	@ r2 to point at the end of r1
38	ldmia	r0,{r3,r4,r5,r6,r7}
39.Lloop:
40	ldr	r8,.LK_00_19
41	mov	r14,sp
42	sub	sp,sp,#15*4
43	mov	r5,r5,ror#30
44	mov	r6,r6,ror#30
45	mov	r7,r7,ror#30		@ [6]
46.L_00_15:
47#if __ARM_ARCH<7
48	ldrb	r10,[r1,#2]
49	ldrb	r9,[r1,#3]
50	ldrb	r11,[r1,#1]
51	add	r7,r8,r7,ror#2			@ E+=K_00_19
52	ldrb	r12,[r1],#4
53	orr	r9,r9,r10,lsl#8
54	eor	r10,r5,r6			@ F_xx_xx
55	orr	r9,r9,r11,lsl#16
56	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
57	orr	r9,r9,r12,lsl#24
58#else
59	ldr	r9,[r1],#4			@ handles unaligned
60	add	r7,r8,r7,ror#2			@ E+=K_00_19
61	eor	r10,r5,r6			@ F_xx_xx
62	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
63#ifdef __ARMEL__
64	rev	r9,r9				@ byte swap
65#endif
66#endif
67	and	r10,r4,r10,ror#2
68	add	r7,r7,r9			@ E+=X[i]
69	eor	r10,r10,r6,ror#2		@ F_00_19(B,C,D)
70	str	r9,[r14,#-4]!
71	add	r7,r7,r10			@ E+=F_00_19(B,C,D)
72#if __ARM_ARCH<7
73	ldrb	r10,[r1,#2]
74	ldrb	r9,[r1,#3]
75	ldrb	r11,[r1,#1]
76	add	r6,r8,r6,ror#2			@ E+=K_00_19
77	ldrb	r12,[r1],#4
78	orr	r9,r9,r10,lsl#8
79	eor	r10,r4,r5			@ F_xx_xx
80	orr	r9,r9,r11,lsl#16
81	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
82	orr	r9,r9,r12,lsl#24
83#else
84	ldr	r9,[r1],#4			@ handles unaligned
85	add	r6,r8,r6,ror#2			@ E+=K_00_19
86	eor	r10,r4,r5			@ F_xx_xx
87	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
88#ifdef __ARMEL__
89	rev	r9,r9				@ byte swap
90#endif
91#endif
92	and	r10,r3,r10,ror#2
93	add	r6,r6,r9			@ E+=X[i]
94	eor	r10,r10,r5,ror#2		@ F_00_19(B,C,D)
95	str	r9,[r14,#-4]!
96	add	r6,r6,r10			@ E+=F_00_19(B,C,D)
97#if __ARM_ARCH<7
98	ldrb	r10,[r1,#2]
99	ldrb	r9,[r1,#3]
100	ldrb	r11,[r1,#1]
101	add	r5,r8,r5,ror#2			@ E+=K_00_19
102	ldrb	r12,[r1],#4
103	orr	r9,r9,r10,lsl#8
104	eor	r10,r3,r4			@ F_xx_xx
105	orr	r9,r9,r11,lsl#16
106	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
107	orr	r9,r9,r12,lsl#24
108#else
109	ldr	r9,[r1],#4			@ handles unaligned
110	add	r5,r8,r5,ror#2			@ E+=K_00_19
111	eor	r10,r3,r4			@ F_xx_xx
112	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
113#ifdef __ARMEL__
114	rev	r9,r9				@ byte swap
115#endif
116#endif
117	and	r10,r7,r10,ror#2
118	add	r5,r5,r9			@ E+=X[i]
119	eor	r10,r10,r4,ror#2		@ F_00_19(B,C,D)
120	str	r9,[r14,#-4]!
121	add	r5,r5,r10			@ E+=F_00_19(B,C,D)
122#if __ARM_ARCH<7
123	ldrb	r10,[r1,#2]
124	ldrb	r9,[r1,#3]
125	ldrb	r11,[r1,#1]
126	add	r4,r8,r4,ror#2			@ E+=K_00_19
127	ldrb	r12,[r1],#4
128	orr	r9,r9,r10,lsl#8
129	eor	r10,r7,r3			@ F_xx_xx
130	orr	r9,r9,r11,lsl#16
131	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
132	orr	r9,r9,r12,lsl#24
133#else
134	ldr	r9,[r1],#4			@ handles unaligned
135	add	r4,r8,r4,ror#2			@ E+=K_00_19
136	eor	r10,r7,r3			@ F_xx_xx
137	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
138#ifdef __ARMEL__
139	rev	r9,r9				@ byte swap
140#endif
141#endif
142	and	r10,r6,r10,ror#2
143	add	r4,r4,r9			@ E+=X[i]
144	eor	r10,r10,r3,ror#2		@ F_00_19(B,C,D)
145	str	r9,[r14,#-4]!
146	add	r4,r4,r10			@ E+=F_00_19(B,C,D)
147#if __ARM_ARCH<7
148	ldrb	r10,[r1,#2]
149	ldrb	r9,[r1,#3]
150	ldrb	r11,[r1,#1]
151	add	r3,r8,r3,ror#2			@ E+=K_00_19
152	ldrb	r12,[r1],#4
153	orr	r9,r9,r10,lsl#8
154	eor	r10,r6,r7			@ F_xx_xx
155	orr	r9,r9,r11,lsl#16
156	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
157	orr	r9,r9,r12,lsl#24
158#else
159	ldr	r9,[r1],#4			@ handles unaligned
160	add	r3,r8,r3,ror#2			@ E+=K_00_19
161	eor	r10,r6,r7			@ F_xx_xx
162	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
163#ifdef __ARMEL__
164	rev	r9,r9				@ byte swap
165#endif
166#endif
167	and	r10,r5,r10,ror#2
168	add	r3,r3,r9			@ E+=X[i]
169	eor	r10,r10,r7,ror#2		@ F_00_19(B,C,D)
170	str	r9,[r14,#-4]!
171	add	r3,r3,r10			@ E+=F_00_19(B,C,D)
172#if defined(__thumb2__)
173	mov	r12,sp
174	teq	r14,r12
175#else
176	teq	r14,sp
177#endif
178	bne	.L_00_15		@ [((11+4)*5+2)*3]
179	sub	sp,sp,#25*4
180#if __ARM_ARCH<7
181	ldrb	r10,[r1,#2]
182	ldrb	r9,[r1,#3]
183	ldrb	r11,[r1,#1]
184	add	r7,r8,r7,ror#2			@ E+=K_00_19
185	ldrb	r12,[r1],#4
186	orr	r9,r9,r10,lsl#8
187	eor	r10,r5,r6			@ F_xx_xx
188	orr	r9,r9,r11,lsl#16
189	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
190	orr	r9,r9,r12,lsl#24
191#else
192	ldr	r9,[r1],#4			@ handles unaligned
193	add	r7,r8,r7,ror#2			@ E+=K_00_19
194	eor	r10,r5,r6			@ F_xx_xx
195	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
196#ifdef __ARMEL__
197	rev	r9,r9				@ byte swap
198#endif
199#endif
200	and	r10,r4,r10,ror#2
201	add	r7,r7,r9			@ E+=X[i]
202	eor	r10,r10,r6,ror#2		@ F_00_19(B,C,D)
203	str	r9,[r14,#-4]!
204	add	r7,r7,r10			@ E+=F_00_19(B,C,D)
205	ldr	r9,[r14,#15*4]
206	ldr	r10,[r14,#13*4]
207	ldr	r11,[r14,#7*4]
208	add	r6,r8,r6,ror#2			@ E+=K_xx_xx
209	ldr	r12,[r14,#2*4]
210	eor	r9,r9,r10
211	eor	r11,r11,r12			@ 1 cycle stall
212	eor	r10,r4,r5			@ F_xx_xx
213	mov	r9,r9,ror#31
214	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
215	eor	r9,r9,r11,ror#31
216	str	r9,[r14,#-4]!
217	and	r10,r3,r10,ror#2					@ F_xx_xx
218						@ F_xx_xx
219	add	r6,r6,r9			@ E+=X[i]
220	eor	r10,r10,r5,ror#2		@ F_00_19(B,C,D)
221	add	r6,r6,r10			@ E+=F_00_19(B,C,D)
222	ldr	r9,[r14,#15*4]
223	ldr	r10,[r14,#13*4]
224	ldr	r11,[r14,#7*4]
225	add	r5,r8,r5,ror#2			@ E+=K_xx_xx
226	ldr	r12,[r14,#2*4]
227	eor	r9,r9,r10
228	eor	r11,r11,r12			@ 1 cycle stall
229	eor	r10,r3,r4			@ F_xx_xx
230	mov	r9,r9,ror#31
231	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
232	eor	r9,r9,r11,ror#31
233	str	r9,[r14,#-4]!
234	and	r10,r7,r10,ror#2					@ F_xx_xx
235						@ F_xx_xx
236	add	r5,r5,r9			@ E+=X[i]
237	eor	r10,r10,r4,ror#2		@ F_00_19(B,C,D)
238	add	r5,r5,r10			@ E+=F_00_19(B,C,D)
239	ldr	r9,[r14,#15*4]
240	ldr	r10,[r14,#13*4]
241	ldr	r11,[r14,#7*4]
242	add	r4,r8,r4,ror#2			@ E+=K_xx_xx
243	ldr	r12,[r14,#2*4]
244	eor	r9,r9,r10
245	eor	r11,r11,r12			@ 1 cycle stall
246	eor	r10,r7,r3			@ F_xx_xx
247	mov	r9,r9,ror#31
248	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
249	eor	r9,r9,r11,ror#31
250	str	r9,[r14,#-4]!
251	and	r10,r6,r10,ror#2					@ F_xx_xx
252						@ F_xx_xx
253	add	r4,r4,r9			@ E+=X[i]
254	eor	r10,r10,r3,ror#2		@ F_00_19(B,C,D)
255	add	r4,r4,r10			@ E+=F_00_19(B,C,D)
256	ldr	r9,[r14,#15*4]
257	ldr	r10,[r14,#13*4]
258	ldr	r11,[r14,#7*4]
259	add	r3,r8,r3,ror#2			@ E+=K_xx_xx
260	ldr	r12,[r14,#2*4]
261	eor	r9,r9,r10
262	eor	r11,r11,r12			@ 1 cycle stall
263	eor	r10,r6,r7			@ F_xx_xx
264	mov	r9,r9,ror#31
265	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
266	eor	r9,r9,r11,ror#31
267	str	r9,[r14,#-4]!
268	and	r10,r5,r10,ror#2					@ F_xx_xx
269						@ F_xx_xx
270	add	r3,r3,r9			@ E+=X[i]
271	eor	r10,r10,r7,ror#2		@ F_00_19(B,C,D)
272	add	r3,r3,r10			@ E+=F_00_19(B,C,D)
273
274	ldr	r8,.LK_20_39		@ [+15+16*4]
275	cmn	sp,#0			@ [+3], clear carry to denote 20_39
276.L_20_39_or_60_79:
277	ldr	r9,[r14,#15*4]
278	ldr	r10,[r14,#13*4]
279	ldr	r11,[r14,#7*4]
280	add	r7,r8,r7,ror#2			@ E+=K_xx_xx
281	ldr	r12,[r14,#2*4]
282	eor	r9,r9,r10
283	eor	r11,r11,r12			@ 1 cycle stall
284	eor	r10,r5,r6			@ F_xx_xx
285	mov	r9,r9,ror#31
286	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
287	eor	r9,r9,r11,ror#31
288	str	r9,[r14,#-4]!
289	eor	r10,r4,r10,ror#2					@ F_xx_xx
290						@ F_xx_xx
291	add	r7,r7,r9			@ E+=X[i]
292	add	r7,r7,r10			@ E+=F_20_39(B,C,D)
293	ldr	r9,[r14,#15*4]
294	ldr	r10,[r14,#13*4]
295	ldr	r11,[r14,#7*4]
296	add	r6,r8,r6,ror#2			@ E+=K_xx_xx
297	ldr	r12,[r14,#2*4]
298	eor	r9,r9,r10
299	eor	r11,r11,r12			@ 1 cycle stall
300	eor	r10,r4,r5			@ F_xx_xx
301	mov	r9,r9,ror#31
302	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
303	eor	r9,r9,r11,ror#31
304	str	r9,[r14,#-4]!
305	eor	r10,r3,r10,ror#2					@ F_xx_xx
306						@ F_xx_xx
307	add	r6,r6,r9			@ E+=X[i]
308	add	r6,r6,r10			@ E+=F_20_39(B,C,D)
309	ldr	r9,[r14,#15*4]
310	ldr	r10,[r14,#13*4]
311	ldr	r11,[r14,#7*4]
312	add	r5,r8,r5,ror#2			@ E+=K_xx_xx
313	ldr	r12,[r14,#2*4]
314	eor	r9,r9,r10
315	eor	r11,r11,r12			@ 1 cycle stall
316	eor	r10,r3,r4			@ F_xx_xx
317	mov	r9,r9,ror#31
318	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
319	eor	r9,r9,r11,ror#31
320	str	r9,[r14,#-4]!
321	eor	r10,r7,r10,ror#2					@ F_xx_xx
322						@ F_xx_xx
323	add	r5,r5,r9			@ E+=X[i]
324	add	r5,r5,r10			@ E+=F_20_39(B,C,D)
325	ldr	r9,[r14,#15*4]
326	ldr	r10,[r14,#13*4]
327	ldr	r11,[r14,#7*4]
328	add	r4,r8,r4,ror#2			@ E+=K_xx_xx
329	ldr	r12,[r14,#2*4]
330	eor	r9,r9,r10
331	eor	r11,r11,r12			@ 1 cycle stall
332	eor	r10,r7,r3			@ F_xx_xx
333	mov	r9,r9,ror#31
334	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
335	eor	r9,r9,r11,ror#31
336	str	r9,[r14,#-4]!
337	eor	r10,r6,r10,ror#2					@ F_xx_xx
338						@ F_xx_xx
339	add	r4,r4,r9			@ E+=X[i]
340	add	r4,r4,r10			@ E+=F_20_39(B,C,D)
341	ldr	r9,[r14,#15*4]
342	ldr	r10,[r14,#13*4]
343	ldr	r11,[r14,#7*4]
344	add	r3,r8,r3,ror#2			@ E+=K_xx_xx
345	ldr	r12,[r14,#2*4]
346	eor	r9,r9,r10
347	eor	r11,r11,r12			@ 1 cycle stall
348	eor	r10,r6,r7			@ F_xx_xx
349	mov	r9,r9,ror#31
350	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
351	eor	r9,r9,r11,ror#31
352	str	r9,[r14,#-4]!
353	eor	r10,r5,r10,ror#2					@ F_xx_xx
354						@ F_xx_xx
355	add	r3,r3,r9			@ E+=X[i]
356	add	r3,r3,r10			@ E+=F_20_39(B,C,D)
357#if defined(__thumb2__)
358	mov	r12,sp
359	teq	r14,r12
360#else
361	teq	r14,sp			@ preserve carry
362#endif
363	bne	.L_20_39_or_60_79	@ [+((12+3)*5+2)*4]
364	bcs	.L_done			@ [+((12+3)*5+2)*4], spare 300 bytes
365
366	ldr	r8,.LK_40_59
367	sub	sp,sp,#20*4		@ [+2]
368.L_40_59:
369	ldr	r9,[r14,#15*4]
370	ldr	r10,[r14,#13*4]
371	ldr	r11,[r14,#7*4]
372	add	r7,r8,r7,ror#2			@ E+=K_xx_xx
373	ldr	r12,[r14,#2*4]
374	eor	r9,r9,r10
375	eor	r11,r11,r12			@ 1 cycle stall
376	eor	r10,r5,r6			@ F_xx_xx
377	mov	r9,r9,ror#31
378	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
379	eor	r9,r9,r11,ror#31
380	str	r9,[r14,#-4]!
381	and	r10,r4,r10,ror#2					@ F_xx_xx
382	and	r11,r5,r6					@ F_xx_xx
383	add	r7,r7,r9			@ E+=X[i]
384	add	r7,r7,r10			@ E+=F_40_59(B,C,D)
385	add	r7,r7,r11,ror#2
386	ldr	r9,[r14,#15*4]
387	ldr	r10,[r14,#13*4]
388	ldr	r11,[r14,#7*4]
389	add	r6,r8,r6,ror#2			@ E+=K_xx_xx
390	ldr	r12,[r14,#2*4]
391	eor	r9,r9,r10
392	eor	r11,r11,r12			@ 1 cycle stall
393	eor	r10,r4,r5			@ F_xx_xx
394	mov	r9,r9,ror#31
395	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
396	eor	r9,r9,r11,ror#31
397	str	r9,[r14,#-4]!
398	and	r10,r3,r10,ror#2					@ F_xx_xx
399	and	r11,r4,r5					@ F_xx_xx
400	add	r6,r6,r9			@ E+=X[i]
401	add	r6,r6,r10			@ E+=F_40_59(B,C,D)
402	add	r6,r6,r11,ror#2
403	ldr	r9,[r14,#15*4]
404	ldr	r10,[r14,#13*4]
405	ldr	r11,[r14,#7*4]
406	add	r5,r8,r5,ror#2			@ E+=K_xx_xx
407	ldr	r12,[r14,#2*4]
408	eor	r9,r9,r10
409	eor	r11,r11,r12			@ 1 cycle stall
410	eor	r10,r3,r4			@ F_xx_xx
411	mov	r9,r9,ror#31
412	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
413	eor	r9,r9,r11,ror#31
414	str	r9,[r14,#-4]!
415	and	r10,r7,r10,ror#2					@ F_xx_xx
416	and	r11,r3,r4					@ F_xx_xx
417	add	r5,r5,r9			@ E+=X[i]
418	add	r5,r5,r10			@ E+=F_40_59(B,C,D)
419	add	r5,r5,r11,ror#2
420	ldr	r9,[r14,#15*4]
421	ldr	r10,[r14,#13*4]
422	ldr	r11,[r14,#7*4]
423	add	r4,r8,r4,ror#2			@ E+=K_xx_xx
424	ldr	r12,[r14,#2*4]
425	eor	r9,r9,r10
426	eor	r11,r11,r12			@ 1 cycle stall
427	eor	r10,r7,r3			@ F_xx_xx
428	mov	r9,r9,ror#31
429	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
430	eor	r9,r9,r11,ror#31
431	str	r9,[r14,#-4]!
432	and	r10,r6,r10,ror#2					@ F_xx_xx
433	and	r11,r7,r3					@ F_xx_xx
434	add	r4,r4,r9			@ E+=X[i]
435	add	r4,r4,r10			@ E+=F_40_59(B,C,D)
436	add	r4,r4,r11,ror#2
437	ldr	r9,[r14,#15*4]
438	ldr	r10,[r14,#13*4]
439	ldr	r11,[r14,#7*4]
440	add	r3,r8,r3,ror#2			@ E+=K_xx_xx
441	ldr	r12,[r14,#2*4]
442	eor	r9,r9,r10
443	eor	r11,r11,r12			@ 1 cycle stall
444	eor	r10,r6,r7			@ F_xx_xx
445	mov	r9,r9,ror#31
446	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
447	eor	r9,r9,r11,ror#31
448	str	r9,[r14,#-4]!
449	and	r10,r5,r10,ror#2					@ F_xx_xx
450	and	r11,r6,r7					@ F_xx_xx
451	add	r3,r3,r9			@ E+=X[i]
452	add	r3,r3,r10			@ E+=F_40_59(B,C,D)
453	add	r3,r3,r11,ror#2
454#if defined(__thumb2__)
455	mov	r12,sp
456	teq	r14,r12
457#else
458	teq	r14,sp
459#endif
460	bne	.L_40_59		@ [+((12+5)*5+2)*4]
461
462	ldr	r8,.LK_60_79
463	sub	sp,sp,#20*4
464	cmp	sp,#0			@ set carry to denote 60_79
465	b	.L_20_39_or_60_79	@ [+4], spare 300 bytes
466.L_done:
467	add	sp,sp,#80*4		@ "deallocate" stack frame
468	ldmia	r0,{r8,r9,r10,r11,r12}
469	add	r3,r8,r3
470	add	r4,r9,r4
471	add	r5,r10,r5,ror#2
472	add	r6,r11,r6,ror#2
473	add	r7,r12,r7,ror#2
474	stmia	r0,{r3,r4,r5,r6,r7}
475	teq	r1,r2
476	bne	.Lloop			@ [+18], total 1307
477
478#if __ARM_ARCH>=5
479	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
480#else
481	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
482	tst	lr,#1
483	moveq	pc,lr			@ be binary compatible with V4, yet
484.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
485#endif
486.size	sha1_block_data_order,.-sha1_block_data_order
487
488.align	5
489.LK_00_19:.word	0x5a827999
490.LK_20_39:.word	0x6ed9eba1
491.LK_40_59:.word	0x8f1bbcdc
492.LK_60_79:.word	0xca62c1d6
493#if __ARM_MAX_ARCH__>=7
494.LOPENSSL_armcap:
495.word	OPENSSL_armcap_P-.Lsha1_block
496#endif
497.byte	83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,47,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
498.align	2
499.align	5
500#if __ARM_MAX_ARCH__>=7
501.arch	armv7-a
502.fpu	neon
503
504.type	sha1_block_data_order_neon,%function
505.align	4
506sha1_block_data_order_neon:
507.LNEON:
508	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
509	add	r2,r1,r2,lsl#6	@ r2 to point at the end of r1
510	@ dmb				@ errata #451034 on early Cortex A8
511	@ vstmdb	sp!,{d8-d15}	@ ABI specification says so
512	mov	r14,sp
513	sub	r12,sp,#64
514	adr	r8,.LK_00_19
515	bic	r12,r12,#15		@ align for 128-bit stores
516
517	ldmia	r0,{r3,r4,r5,r6,r7}	@ load context
518	mov	sp,r12		@ alloca
519
520	vld1.8	{q0,q1},[r1]!	@ handles unaligned
521	veor	q15,q15,q15
522	vld1.8	{q2,q3},[r1]!
523	vld1.32	{d28[],d29[]},[r8,:32]!	@ load K_00_19
524	vrev32.8	q0,q0		@ yes, even on
525	vrev32.8	q1,q1		@ big-endian...
526	vrev32.8	q2,q2
527	vadd.i32	q8,q0,q14
528	vrev32.8	q3,q3
529	vadd.i32	q9,q1,q14
530	vst1.32	{q8},[r12,:128]!
531	vadd.i32	q10,q2,q14
532	vst1.32	{q9},[r12,:128]!
533	vst1.32	{q10},[r12,:128]!
534	ldr	r9,[sp]			@ big RAW stall
535
536.Loop_neon:
537	vext.8	q8,q0,q1,#8
538	bic	r10,r6,r4
539	add	r7,r7,r9
540	and	r11,r5,r4
541	vadd.i32	q13,q3,q14
542	ldr	r9,[sp,#4]
543	add	r7,r7,r3,ror#27
544	vext.8	q12,q3,q15,#4
545	eor	r11,r11,r10
546	mov	r4,r4,ror#2
547	add	r7,r7,r11
548	veor	q8,q8,q0
549	bic	r10,r5,r3
550	add	r6,r6,r9
551	veor	q12,q12,q2
552	and	r11,r4,r3
553	ldr	r9,[sp,#8]
554	veor	q12,q12,q8
555	add	r6,r6,r7,ror#27
556	eor	r11,r11,r10
557	vst1.32	{q13},[r12,:128]!
558	sub	r12,r12,#64
559	mov	r3,r3,ror#2
560	add	r6,r6,r11
561	vext.8	q13,q15,q12,#4
562	bic	r10,r4,r7
563	add	r5,r5,r9
564	vadd.i32	q8,q12,q12
565	and	r11,r3,r7
566	ldr	r9,[sp,#12]
567	vsri.32	q8,q12,#31
568	add	r5,r5,r6,ror#27
569	eor	r11,r11,r10
570	mov	r7,r7,ror#2
571	vshr.u32	q12,q13,#30
572	add	r5,r5,r11
573	bic	r10,r3,r6
574	vshl.u32	q13,q13,#2
575	add	r4,r4,r9
576	and	r11,r7,r6
577	veor	q8,q8,q12
578	ldr	r9,[sp,#16]
579	add	r4,r4,r5,ror#27
580	veor	q8,q8,q13
581	eor	r11,r11,r10
582	mov	r6,r6,ror#2
583	add	r4,r4,r11
584	vext.8	q9,q1,q2,#8
585	bic	r10,r7,r5
586	add	r3,r3,r9
587	and	r11,r6,r5
588	vadd.i32	q13,q8,q14
589	ldr	r9,[sp,#20]
590	vld1.32	{d28[],d29[]},[r8,:32]!
591	add	r3,r3,r4,ror#27
592	vext.8	q12,q8,q15,#4
593	eor	r11,r11,r10
594	mov	r5,r5,ror#2
595	add	r3,r3,r11
596	veor	q9,q9,q1
597	bic	r10,r6,r4
598	add	r7,r7,r9
599	veor	q12,q12,q3
600	and	r11,r5,r4
601	ldr	r9,[sp,#24]
602	veor	q12,q12,q9
603	add	r7,r7,r3,ror#27
604	eor	r11,r11,r10
605	vst1.32	{q13},[r12,:128]!
606	mov	r4,r4,ror#2
607	add	r7,r7,r11
608	vext.8	q13,q15,q12,#4
609	bic	r10,r5,r3
610	add	r6,r6,r9
611	vadd.i32	q9,q12,q12
612	and	r11,r4,r3
613	ldr	r9,[sp,#28]
614	vsri.32	q9,q12,#31
615	add	r6,r6,r7,ror#27
616	eor	r11,r11,r10
617	mov	r3,r3,ror#2
618	vshr.u32	q12,q13,#30
619	add	r6,r6,r11
620	bic	r10,r4,r7
621	vshl.u32	q13,q13,#2
622	add	r5,r5,r9
623	and	r11,r3,r7
624	veor	q9,q9,q12
625	ldr	r9,[sp,#32]
626	add	r5,r5,r6,ror#27
627	veor	q9,q9,q13
628	eor	r11,r11,r10
629	mov	r7,r7,ror#2
630	add	r5,r5,r11
631	vext.8	q10,q2,q3,#8
632	bic	r10,r3,r6
633	add	r4,r4,r9
634	and	r11,r7,r6
635	vadd.i32	q13,q9,q14
636	ldr	r9,[sp,#36]
637	add	r4,r4,r5,ror#27
638	vext.8	q12,q9,q15,#4
639	eor	r11,r11,r10
640	mov	r6,r6,ror#2
641	add	r4,r4,r11
642	veor	q10,q10,q2
643	bic	r10,r7,r5
644	add	r3,r3,r9
645	veor	q12,q12,q8
646	and	r11,r6,r5
647	ldr	r9,[sp,#40]
648	veor	q12,q12,q10
649	add	r3,r3,r4,ror#27
650	eor	r11,r11,r10
651	vst1.32	{q13},[r12,:128]!
652	mov	r5,r5,ror#2
653	add	r3,r3,r11
654	vext.8	q13,q15,q12,#4
655	bic	r10,r6,r4
656	add	r7,r7,r9
657	vadd.i32	q10,q12,q12
658	and	r11,r5,r4
659	ldr	r9,[sp,#44]
660	vsri.32	q10,q12,#31
661	add	r7,r7,r3,ror#27
662	eor	r11,r11,r10
663	mov	r4,r4,ror#2
664	vshr.u32	q12,q13,#30
665	add	r7,r7,r11
666	bic	r10,r5,r3
667	vshl.u32	q13,q13,#2
668	add	r6,r6,r9
669	and	r11,r4,r3
670	veor	q10,q10,q12
671	ldr	r9,[sp,#48]
672	add	r6,r6,r7,ror#27
673	veor	q10,q10,q13
674	eor	r11,r11,r10
675	mov	r3,r3,ror#2
676	add	r6,r6,r11
677	vext.8	q11,q3,q8,#8
678	bic	r10,r4,r7
679	add	r5,r5,r9
680	and	r11,r3,r7
681	vadd.i32	q13,q10,q14
682	ldr	r9,[sp,#52]
683	add	r5,r5,r6,ror#27
684	vext.8	q12,q10,q15,#4
685	eor	r11,r11,r10
686	mov	r7,r7,ror#2
687	add	r5,r5,r11
688	veor	q11,q11,q3
689	bic	r10,r3,r6
690	add	r4,r4,r9
691	veor	q12,q12,q9
692	and	r11,r7,r6
693	ldr	r9,[sp,#56]
694	veor	q12,q12,q11
695	add	r4,r4,r5,ror#27
696	eor	r11,r11,r10
697	vst1.32	{q13},[r12,:128]!
698	mov	r6,r6,ror#2
699	add	r4,r4,r11
700	vext.8	q13,q15,q12,#4
701	bic	r10,r7,r5
702	add	r3,r3,r9
703	vadd.i32	q11,q12,q12
704	and	r11,r6,r5
705	ldr	r9,[sp,#60]
706	vsri.32	q11,q12,#31
707	add	r3,r3,r4,ror#27
708	eor	r11,r11,r10
709	mov	r5,r5,ror#2
710	vshr.u32	q12,q13,#30
711	add	r3,r3,r11
712	bic	r10,r6,r4
713	vshl.u32	q13,q13,#2
714	add	r7,r7,r9
715	and	r11,r5,r4
716	veor	q11,q11,q12
717	ldr	r9,[sp,#0]
718	add	r7,r7,r3,ror#27
719	veor	q11,q11,q13
720	eor	r11,r11,r10
721	mov	r4,r4,ror#2
722	add	r7,r7,r11
723	vext.8	q12,q10,q11,#8
724	bic	r10,r5,r3
725	add	r6,r6,r9
726	and	r11,r4,r3
727	veor	q0,q0,q8
728	ldr	r9,[sp,#4]
729	add	r6,r6,r7,ror#27
730	veor	q0,q0,q1
731	eor	r11,r11,r10
732	mov	r3,r3,ror#2
733	vadd.i32	q13,q11,q14
734	add	r6,r6,r11
735	bic	r10,r4,r7
736	veor	q12,q12,q0
737	add	r5,r5,r9
738	and	r11,r3,r7
739	vshr.u32	q0,q12,#30
740	ldr	r9,[sp,#8]
741	add	r5,r5,r6,ror#27
742	vst1.32	{q13},[r12,:128]!
743	sub	r12,r12,#64
744	eor	r11,r11,r10
745	mov	r7,r7,ror#2
746	vsli.32	q0,q12,#2
747	add	r5,r5,r11
748	bic	r10,r3,r6
749	add	r4,r4,r9
750	and	r11,r7,r6
751	ldr	r9,[sp,#12]
752	add	r4,r4,r5,ror#27
753	eor	r11,r11,r10
754	mov	r6,r6,ror#2
755	add	r4,r4,r11
756	bic	r10,r7,r5
757	add	r3,r3,r9
758	and	r11,r6,r5
759	ldr	r9,[sp,#16]
760	add	r3,r3,r4,ror#27
761	eor	r11,r11,r10
762	mov	r5,r5,ror#2
763	add	r3,r3,r11
764	vext.8	q12,q11,q0,#8
765	eor	r10,r4,r6
766	add	r7,r7,r9
767	ldr	r9,[sp,#20]
768	veor	q1,q1,q9
769	eor	r11,r10,r5
770	add	r7,r7,r3,ror#27
771	veor	q1,q1,q2
772	mov	r4,r4,ror#2
773	add	r7,r7,r11
774	vadd.i32	q13,q0,q14
775	eor	r10,r3,r5
776	add	r6,r6,r9
777	veor	q12,q12,q1
778	ldr	r9,[sp,#24]
779	eor	r11,r10,r4
780	vshr.u32	q1,q12,#30
781	add	r6,r6,r7,ror#27
782	mov	r3,r3,ror#2
783	vst1.32	{q13},[r12,:128]!
784	add	r6,r6,r11
785	eor	r10,r7,r4
786	vsli.32	q1,q12,#2
787	add	r5,r5,r9
788	ldr	r9,[sp,#28]
789	eor	r11,r10,r3
790	add	r5,r5,r6,ror#27
791	mov	r7,r7,ror#2
792	add	r5,r5,r11
793	eor	r10,r6,r3
794	add	r4,r4,r9
795	ldr	r9,[sp,#32]
796	eor	r11,r10,r7
797	add	r4,r4,r5,ror#27
798	mov	r6,r6,ror#2
799	add	r4,r4,r11
800	vext.8	q12,q0,q1,#8
801	eor	r10,r5,r7
802	add	r3,r3,r9
803	ldr	r9,[sp,#36]
804	veor	q2,q2,q10
805	eor	r11,r10,r6
806	add	r3,r3,r4,ror#27
807	veor	q2,q2,q3
808	mov	r5,r5,ror#2
809	add	r3,r3,r11
810	vadd.i32	q13,q1,q14
811	eor	r10,r4,r6
812	vld1.32	{d28[],d29[]},[r8,:32]!
813	add	r7,r7,r9
814	veor	q12,q12,q2
815	ldr	r9,[sp,#40]
816	eor	r11,r10,r5
817	vshr.u32	q2,q12,#30
818	add	r7,r7,r3,ror#27
819	mov	r4,r4,ror#2
820	vst1.32	{q13},[r12,:128]!
821	add	r7,r7,r11
822	eor	r10,r3,r5
823	vsli.32	q2,q12,#2
824	add	r6,r6,r9
825	ldr	r9,[sp,#44]
826	eor	r11,r10,r4
827	add	r6,r6,r7,ror#27
828	mov	r3,r3,ror#2
829	add	r6,r6,r11
830	eor	r10,r7,r4
831	add	r5,r5,r9
832	ldr	r9,[sp,#48]
833	eor	r11,r10,r3
834	add	r5,r5,r6,ror#27
835	mov	r7,r7,ror#2
836	add	r5,r5,r11
837	vext.8	q12,q1,q2,#8
838	eor	r10,r6,r3
839	add	r4,r4,r9
840	ldr	r9,[sp,#52]
841	veor	q3,q3,q11
842	eor	r11,r10,r7
843	add	r4,r4,r5,ror#27
844	veor	q3,q3,q8
845	mov	r6,r6,ror#2
846	add	r4,r4,r11
847	vadd.i32	q13,q2,q14
848	eor	r10,r5,r7
849	add	r3,r3,r9
850	veor	q12,q12,q3
851	ldr	r9,[sp,#56]
852	eor	r11,r10,r6
853	vshr.u32	q3,q12,#30
854	add	r3,r3,r4,ror#27
855	mov	r5,r5,ror#2
856	vst1.32	{q13},[r12,:128]!
857	add	r3,r3,r11
858	eor	r10,r4,r6
859	vsli.32	q3,q12,#2
860	add	r7,r7,r9
861	ldr	r9,[sp,#60]
862	eor	r11,r10,r5
863	add	r7,r7,r3,ror#27
864	mov	r4,r4,ror#2
865	add	r7,r7,r11
866	eor	r10,r3,r5
867	add	r6,r6,r9
868	ldr	r9,[sp,#0]
869	eor	r11,r10,r4
870	add	r6,r6,r7,ror#27
871	mov	r3,r3,ror#2
872	add	r6,r6,r11
873	vext.8	q12,q2,q3,#8
874	eor	r10,r7,r4
875	add	r5,r5,r9
876	ldr	r9,[sp,#4]
877	veor	q8,q8,q0
878	eor	r11,r10,r3
879	add	r5,r5,r6,ror#27
880	veor	q8,q8,q9
881	mov	r7,r7,ror#2
882	add	r5,r5,r11
883	vadd.i32	q13,q3,q14
884	eor	r10,r6,r3
885	add	r4,r4,r9
886	veor	q12,q12,q8
887	ldr	r9,[sp,#8]
888	eor	r11,r10,r7
889	vshr.u32	q8,q12,#30
890	add	r4,r4,r5,ror#27
891	mov	r6,r6,ror#2
892	vst1.32	{q13},[r12,:128]!
893	sub	r12,r12,#64
894	add	r4,r4,r11
895	eor	r10,r5,r7
896	vsli.32	q8,q12,#2
897	add	r3,r3,r9
898	ldr	r9,[sp,#12]
899	eor	r11,r10,r6
900	add	r3,r3,r4,ror#27
901	mov	r5,r5,ror#2
902	add	r3,r3,r11
903	eor	r10,r4,r6
904	add	r7,r7,r9
905	ldr	r9,[sp,#16]
906	eor	r11,r10,r5
907	add	r7,r7,r3,ror#27
908	mov	r4,r4,ror#2
909	add	r7,r7,r11
910	vext.8	q12,q3,q8,#8
911	eor	r10,r3,r5
912	add	r6,r6,r9
913	ldr	r9,[sp,#20]
914	veor	q9,q9,q1
915	eor	r11,r10,r4
916	add	r6,r6,r7,ror#27
917	veor	q9,q9,q10
918	mov	r3,r3,ror#2
919	add	r6,r6,r11
920	vadd.i32	q13,q8,q14
921	eor	r10,r7,r4
922	add	r5,r5,r9
923	veor	q12,q12,q9
924	ldr	r9,[sp,#24]
925	eor	r11,r10,r3
926	vshr.u32	q9,q12,#30
927	add	r5,r5,r6,ror#27
928	mov	r7,r7,ror#2
929	vst1.32	{q13},[r12,:128]!
930	add	r5,r5,r11
931	eor	r10,r6,r3
932	vsli.32	q9,q12,#2
933	add	r4,r4,r9
934	ldr	r9,[sp,#28]
935	eor	r11,r10,r7
936	add	r4,r4,r5,ror#27
937	mov	r6,r6,ror#2
938	add	r4,r4,r11
939	eor	r10,r5,r7
940	add	r3,r3,r9
941	ldr	r9,[sp,#32]
942	eor	r11,r10,r6
943	add	r3,r3,r4,ror#27
944	mov	r5,r5,ror#2
945	add	r3,r3,r11
946	vext.8	q12,q8,q9,#8
947	add	r7,r7,r9
948	and	r10,r5,r6
949	ldr	r9,[sp,#36]
950	veor	q10,q10,q2
951	add	r7,r7,r3,ror#27
952	eor	r11,r5,r6
953	veor	q10,q10,q11
954	add	r7,r7,r10
955	and	r11,r11,r4
956	vadd.i32	q13,q9,q14
957	mov	r4,r4,ror#2
958	add	r7,r7,r11
959	veor	q12,q12,q10
960	add	r6,r6,r9
961	and	r10,r4,r5
962	vshr.u32	q10,q12,#30
963	ldr	r9,[sp,#40]
964	add	r6,r6,r7,ror#27
965	vst1.32	{q13},[r12,:128]!
966	eor	r11,r4,r5
967	add	r6,r6,r10
968	vsli.32	q10,q12,#2
969	and	r11,r11,r3
970	mov	r3,r3,ror#2
971	add	r6,r6,r11
972	add	r5,r5,r9
973	and	r10,r3,r4
974	ldr	r9,[sp,#44]
975	add	r5,r5,r6,ror#27
976	eor	r11,r3,r4
977	add	r5,r5,r10
978	and	r11,r11,r7
979	mov	r7,r7,ror#2
980	add	r5,r5,r11
981	add	r4,r4,r9
982	and	r10,r7,r3
983	ldr	r9,[sp,#48]
984	add	r4,r4,r5,ror#27
985	eor	r11,r7,r3
986	add	r4,r4,r10
987	and	r11,r11,r6
988	mov	r6,r6,ror#2
989	add	r4,r4,r11
990	vext.8	q12,q9,q10,#8
991	add	r3,r3,r9
992	and	r10,r6,r7
993	ldr	r9,[sp,#52]
994	veor	q11,q11,q3
995	add	r3,r3,r4,ror#27
996	eor	r11,r6,r7
997	veor	q11,q11,q0
998	add	r3,r3,r10
999	and	r11,r11,r5
1000	vadd.i32	q13,q10,q14
1001	mov	r5,r5,ror#2
1002	vld1.32	{d28[],d29[]},[r8,:32]!
1003	add	r3,r3,r11
1004	veor	q12,q12,q11
1005	add	r7,r7,r9
1006	and	r10,r5,r6
1007	vshr.u32	q11,q12,#30
1008	ldr	r9,[sp,#56]
1009	add	r7,r7,r3,ror#27
1010	vst1.32	{q13},[r12,:128]!
1011	eor	r11,r5,r6
1012	add	r7,r7,r10
1013	vsli.32	q11,q12,#2
1014	and	r11,r11,r4
1015	mov	r4,r4,ror#2
1016	add	r7,r7,r11
1017	add	r6,r6,r9
1018	and	r10,r4,r5
1019	ldr	r9,[sp,#60]
1020	add	r6,r6,r7,ror#27
1021	eor	r11,r4,r5
1022	add	r6,r6,r10
1023	and	r11,r11,r3
1024	mov	r3,r3,ror#2
1025	add	r6,r6,r11
1026	add	r5,r5,r9
1027	and	r10,r3,r4
1028	ldr	r9,[sp,#0]
1029	add	r5,r5,r6,ror#27
1030	eor	r11,r3,r4
1031	add	r5,r5,r10
1032	and	r11,r11,r7
1033	mov	r7,r7,ror#2
1034	add	r5,r5,r11
1035	vext.8	q12,q10,q11,#8
1036	add	r4,r4,r9
1037	and	r10,r7,r3
1038	ldr	r9,[sp,#4]
1039	veor	q0,q0,q8
1040	add	r4,r4,r5,ror#27
1041	eor	r11,r7,r3
1042	veor	q0,q0,q1
1043	add	r4,r4,r10
1044	and	r11,r11,r6
1045	vadd.i32	q13,q11,q14
1046	mov	r6,r6,ror#2
1047	add	r4,r4,r11
1048	veor	q12,q12,q0
1049	add	r3,r3,r9
1050	and	r10,r6,r7
1051	vshr.u32	q0,q12,#30
1052	ldr	r9,[sp,#8]
1053	add	r3,r3,r4,ror#27
1054	vst1.32	{q13},[r12,:128]!
1055	sub	r12,r12,#64
1056	eor	r11,r6,r7
1057	add	r3,r3,r10
1058	vsli.32	q0,q12,#2
1059	and	r11,r11,r5
1060	mov	r5,r5,ror#2
1061	add	r3,r3,r11
1062	add	r7,r7,r9
1063	and	r10,r5,r6
1064	ldr	r9,[sp,#12]
1065	add	r7,r7,r3,ror#27
1066	eor	r11,r5,r6
1067	add	r7,r7,r10
1068	and	r11,r11,r4
1069	mov	r4,r4,ror#2
1070	add	r7,r7,r11
1071	add	r6,r6,r9
1072	and	r10,r4,r5
1073	ldr	r9,[sp,#16]
1074	add	r6,r6,r7,ror#27
1075	eor	r11,r4,r5
1076	add	r6,r6,r10
1077	and	r11,r11,r3
1078	mov	r3,r3,ror#2
1079	add	r6,r6,r11
1080	vext.8	q12,q11,q0,#8
1081	add	r5,r5,r9
1082	and	r10,r3,r4
1083	ldr	r9,[sp,#20]
1084	veor	q1,q1,q9
1085	add	r5,r5,r6,ror#27
1086	eor	r11,r3,r4
1087	veor	q1,q1,q2
1088	add	r5,r5,r10
1089	and	r11,r11,r7
1090	vadd.i32	q13,q0,q14
1091	mov	r7,r7,ror#2
1092	add	r5,r5,r11
1093	veor	q12,q12,q1
1094	add	r4,r4,r9
1095	and	r10,r7,r3
1096	vshr.u32	q1,q12,#30
1097	ldr	r9,[sp,#24]
1098	add	r4,r4,r5,ror#27
1099	vst1.32	{q13},[r12,:128]!
1100	eor	r11,r7,r3
1101	add	r4,r4,r10
1102	vsli.32	q1,q12,#2
1103	and	r11,r11,r6
1104	mov	r6,r6,ror#2
1105	add	r4,r4,r11
1106	add	r3,r3,r9
1107	and	r10,r6,r7
1108	ldr	r9,[sp,#28]
1109	add	r3,r3,r4,ror#27
1110	eor	r11,r6,r7
1111	add	r3,r3,r10
1112	and	r11,r11,r5
1113	mov	r5,r5,ror#2
1114	add	r3,r3,r11
1115	add	r7,r7,r9
1116	and	r10,r5,r6
1117	ldr	r9,[sp,#32]
1118	add	r7,r7,r3,ror#27
1119	eor	r11,r5,r6
1120	add	r7,r7,r10
1121	and	r11,r11,r4
1122	mov	r4,r4,ror#2
1123	add	r7,r7,r11
1124	vext.8	q12,q0,q1,#8
1125	add	r6,r6,r9
1126	and	r10,r4,r5
1127	ldr	r9,[sp,#36]
1128	veor	q2,q2,q10
1129	add	r6,r6,r7,ror#27
1130	eor	r11,r4,r5
1131	veor	q2,q2,q3
1132	add	r6,r6,r10
1133	and	r11,r11,r3
1134	vadd.i32	q13,q1,q14
1135	mov	r3,r3,ror#2
1136	add	r6,r6,r11
1137	veor	q12,q12,q2
1138	add	r5,r5,r9
1139	and	r10,r3,r4
1140	vshr.u32	q2,q12,#30
1141	ldr	r9,[sp,#40]
1142	add	r5,r5,r6,ror#27
1143	vst1.32	{q13},[r12,:128]!
1144	eor	r11,r3,r4
1145	add	r5,r5,r10
1146	vsli.32	q2,q12,#2
1147	and	r11,r11,r7
1148	mov	r7,r7,ror#2
1149	add	r5,r5,r11
1150	add	r4,r4,r9
1151	and	r10,r7,r3
1152	ldr	r9,[sp,#44]
1153	add	r4,r4,r5,ror#27
1154	eor	r11,r7,r3
1155	add	r4,r4,r10
1156	and	r11,r11,r6
1157	mov	r6,r6,ror#2
1158	add	r4,r4,r11
1159	add	r3,r3,r9
1160	and	r10,r6,r7
1161	ldr	r9,[sp,#48]
1162	add	r3,r3,r4,ror#27
1163	eor	r11,r6,r7
1164	add	r3,r3,r10
1165	and	r11,r11,r5
1166	mov	r5,r5,ror#2
1167	add	r3,r3,r11
1168	vext.8	q12,q1,q2,#8
1169	eor	r10,r4,r6
1170	add	r7,r7,r9
1171	ldr	r9,[sp,#52]
1172	veor	q3,q3,q11
1173	eor	r11,r10,r5
1174	add	r7,r7,r3,ror#27
1175	veor	q3,q3,q8
1176	mov	r4,r4,ror#2
1177	add	r7,r7,r11
1178	vadd.i32	q13,q2,q14
1179	eor	r10,r3,r5
1180	add	r6,r6,r9
1181	veor	q12,q12,q3
1182	ldr	r9,[sp,#56]
1183	eor	r11,r10,r4
1184	vshr.u32	q3,q12,#30
1185	add	r6,r6,r7,ror#27
1186	mov	r3,r3,ror#2
1187	vst1.32	{q13},[r12,:128]!
1188	add	r6,r6,r11
1189	eor	r10,r7,r4
1190	vsli.32	q3,q12,#2
1191	add	r5,r5,r9
1192	ldr	r9,[sp,#60]
1193	eor	r11,r10,r3
1194	add	r5,r5,r6,ror#27
1195	mov	r7,r7,ror#2
1196	add	r5,r5,r11
1197	eor	r10,r6,r3
1198	add	r4,r4,r9
1199	ldr	r9,[sp,#0]
1200	eor	r11,r10,r7
1201	add	r4,r4,r5,ror#27
1202	mov	r6,r6,ror#2
1203	add	r4,r4,r11
1204	vadd.i32	q13,q3,q14
1205	eor	r10,r5,r7
1206	add	r3,r3,r9
1207	vst1.32	{q13},[r12,:128]!
1208	sub	r12,r12,#64
1209	teq	r1,r2
1210	sub	r8,r8,#16
1211	it	eq
1212	subeq	r1,r1,#64
1213	vld1.8	{q0,q1},[r1]!
1214	ldr	r9,[sp,#4]
1215	eor	r11,r10,r6
1216	vld1.8	{q2,q3},[r1]!
1217	add	r3,r3,r4,ror#27
1218	mov	r5,r5,ror#2
1219	vld1.32	{d28[],d29[]},[r8,:32]!
1220	add	r3,r3,r11
1221	eor	r10,r4,r6
1222	vrev32.8	q0,q0
1223	add	r7,r7,r9
1224	ldr	r9,[sp,#8]
1225	eor	r11,r10,r5
1226	add	r7,r7,r3,ror#27
1227	mov	r4,r4,ror#2
1228	add	r7,r7,r11
1229	eor	r10,r3,r5
1230	add	r6,r6,r9
1231	ldr	r9,[sp,#12]
1232	eor	r11,r10,r4
1233	add	r6,r6,r7,ror#27
1234	mov	r3,r3,ror#2
1235	add	r6,r6,r11
1236	eor	r10,r7,r4
1237	add	r5,r5,r9
1238	ldr	r9,[sp,#16]
1239	eor	r11,r10,r3
1240	add	r5,r5,r6,ror#27
1241	mov	r7,r7,ror#2
1242	add	r5,r5,r11
1243	vrev32.8	q1,q1
1244	eor	r10,r6,r3
1245	add	r4,r4,r9
1246	vadd.i32	q8,q0,q14
1247	ldr	r9,[sp,#20]
1248	eor	r11,r10,r7
1249	vst1.32	{q8},[r12,:128]!
1250	add	r4,r4,r5,ror#27
1251	mov	r6,r6,ror#2
1252	add	r4,r4,r11
1253	eor	r10,r5,r7
1254	add	r3,r3,r9
1255	ldr	r9,[sp,#24]
1256	eor	r11,r10,r6
1257	add	r3,r3,r4,ror#27
1258	mov	r5,r5,ror#2
1259	add	r3,r3,r11
1260	eor	r10,r4,r6
1261	add	r7,r7,r9
1262	ldr	r9,[sp,#28]
1263	eor	r11,r10,r5
1264	add	r7,r7,r3,ror#27
1265	mov	r4,r4,ror#2
1266	add	r7,r7,r11
1267	eor	r10,r3,r5
1268	add	r6,r6,r9
1269	ldr	r9,[sp,#32]
1270	eor	r11,r10,r4
1271	add	r6,r6,r7,ror#27
1272	mov	r3,r3,ror#2
1273	add	r6,r6,r11
1274	vrev32.8	q2,q2
1275	eor	r10,r7,r4
1276	add	r5,r5,r9
1277	vadd.i32	q9,q1,q14
1278	ldr	r9,[sp,#36]
1279	eor	r11,r10,r3
1280	vst1.32	{q9},[r12,:128]!
1281	add	r5,r5,r6,ror#27
1282	mov	r7,r7,ror#2
1283	add	r5,r5,r11
1284	eor	r10,r6,r3
1285	add	r4,r4,r9
1286	ldr	r9,[sp,#40]
1287	eor	r11,r10,r7
1288	add	r4,r4,r5,ror#27
1289	mov	r6,r6,ror#2
1290	add	r4,r4,r11
1291	eor	r10,r5,r7
1292	add	r3,r3,r9
1293	ldr	r9,[sp,#44]
1294	eor	r11,r10,r6
1295	add	r3,r3,r4,ror#27
1296	mov	r5,r5,ror#2
1297	add	r3,r3,r11
1298	eor	r10,r4,r6
1299	add	r7,r7,r9
1300	ldr	r9,[sp,#48]
1301	eor	r11,r10,r5
1302	add	r7,r7,r3,ror#27
1303	mov	r4,r4,ror#2
1304	add	r7,r7,r11
1305	vrev32.8	q3,q3
1306	eor	r10,r3,r5
1307	add	r6,r6,r9
1308	vadd.i32	q10,q2,q14
1309	ldr	r9,[sp,#52]
1310	eor	r11,r10,r4
1311	vst1.32	{q10},[r12,:128]!
1312	add	r6,r6,r7,ror#27
1313	mov	r3,r3,ror#2
1314	add	r6,r6,r11
1315	eor	r10,r7,r4
1316	add	r5,r5,r9
1317	ldr	r9,[sp,#56]
1318	eor	r11,r10,r3
1319	add	r5,r5,r6,ror#27
1320	mov	r7,r7,ror#2
1321	add	r5,r5,r11
1322	eor	r10,r6,r3
1323	add	r4,r4,r9
1324	ldr	r9,[sp,#60]
1325	eor	r11,r10,r7
1326	add	r4,r4,r5,ror#27
1327	mov	r6,r6,ror#2
1328	add	r4,r4,r11
1329	eor	r10,r5,r7
1330	add	r3,r3,r9
1331	eor	r11,r10,r6
1332	add	r3,r3,r4,ror#27
1333	mov	r5,r5,ror#2
1334	add	r3,r3,r11
1335	ldmia	r0,{r9,r10,r11,r12}	@ accumulate context
1336	add	r3,r3,r9
1337	ldr	r9,[r0,#16]
1338	add	r4,r4,r10
1339	add	r5,r5,r11
1340	add	r6,r6,r12
1341	it	eq
1342	moveq	sp,r14
1343	add	r7,r7,r9
1344	it	ne
1345	ldrne	r9,[sp]
1346	stmia	r0,{r3,r4,r5,r6,r7}
1347	itt	ne
1348	addne	r12,sp,#3*16
1349	bne	.Loop_neon
1350
1351	@ vldmia	sp!,{d8-d15}
1352	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
1353.size	sha1_block_data_order_neon,.-sha1_block_data_order_neon
1354#endif
1355#if __ARM_MAX_ARCH__>=7
1356
1357# if defined(__thumb2__)
1358#  define INST(a,b,c,d)	.byte	c,d|0xf,a,b
1359# else
1360#  define INST(a,b,c,d)	.byte	a,b,c,d|0x10
1361# endif
1362
1363.type	sha1_block_data_order_armv8,%function
1364.align	5
1365sha1_block_data_order_armv8:
1366.LARMv8:
1367	vstmdb	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}		@ ABI specification says so
1368
1369	veor	q1,q1,q1
1370	adr	r3,.LK_00_19
1371	vld1.32	{q0},[r0]!
1372	vld1.32	{d2[0]},[r0]
1373	sub	r0,r0,#16
1374	vld1.32	{d16[],d17[]},[r3,:32]!
1375	vld1.32	{d18[],d19[]},[r3,:32]!
1376	vld1.32	{d20[],d21[]},[r3,:32]!
1377	vld1.32	{d22[],d23[]},[r3,:32]
1378
1379.Loop_v8:
1380	vld1.8	{q4,q5},[r1]!
1381	vld1.8	{q6,q7},[r1]!
1382	vrev32.8	q4,q4
1383	vrev32.8	q5,q5
1384
1385	vadd.i32	q12,q8,q4
1386	vrev32.8	q6,q6
1387	vmov	q14,q0	@ offload
1388	subs	r2,r2,#1
1389
1390	vadd.i32	q13,q8,q5
1391	vrev32.8	q7,q7
1392	INST(0xc0,0x62,0xb9,0xf3)	@ sha1h q3,q0		@ 0
1393	INST(0x68,0x0c,0x02,0xe2)	@ sha1c q0,q1,q12
1394	vadd.i32	q12,q8,q6
1395	INST(0x4c,0x8c,0x3a,0xe2)	@ sha1su0 q4,q5,q6
1396	INST(0xc0,0x42,0xb9,0xf3)	@ sha1h q2,q0		@ 1
1397	INST(0x6a,0x0c,0x06,0xe2)	@ sha1c q0,q3,q13
1398	vadd.i32	q13,q8,q7
1399	INST(0x8e,0x83,0xba,0xf3)	@ sha1su1 q4,q7
1400	INST(0x4e,0xac,0x3c,0xe2)	@ sha1su0 q5,q6,q7
1401	INST(0xc0,0x62,0xb9,0xf3)	@ sha1h q3,q0		@ 2
1402	INST(0x68,0x0c,0x04,0xe2)	@ sha1c q0,q2,q12
1403	vadd.i32	q12,q8,q4
1404	INST(0x88,0xa3,0xba,0xf3)	@ sha1su1 q5,q4
1405	INST(0x48,0xcc,0x3e,0xe2)	@ sha1su0 q6,q7,q4
1406	INST(0xc0,0x42,0xb9,0xf3)	@ sha1h q2,q0		@ 3
1407	INST(0x6a,0x0c,0x06,0xe2)	@ sha1c q0,q3,q13
1408	vadd.i32	q13,q9,q5
1409	INST(0x8a,0xc3,0xba,0xf3)	@ sha1su1 q6,q5
1410	INST(0x4a,0xec,0x38,0xe2)	@ sha1su0 q7,q4,q5
1411	INST(0xc0,0x62,0xb9,0xf3)	@ sha1h q3,q0		@ 4
1412	INST(0x68,0x0c,0x04,0xe2)	@ sha1c q0,q2,q12
1413	vadd.i32	q12,q9,q6
1414	INST(0x8c,0xe3,0xba,0xf3)	@ sha1su1 q7,q6
1415	INST(0x4c,0x8c,0x3a,0xe2)	@ sha1su0 q4,q5,q6
1416	INST(0xc0,0x42,0xb9,0xf3)	@ sha1h q2,q0		@ 5
1417	INST(0x6a,0x0c,0x16,0xe2)	@ sha1p q0,q3,q13
1418	vadd.i32	q13,q9,q7
1419	INST(0x8e,0x83,0xba,0xf3)	@ sha1su1 q4,q7
1420	INST(0x4e,0xac,0x3c,0xe2)	@ sha1su0 q5,q6,q7
1421	INST(0xc0,0x62,0xb9,0xf3)	@ sha1h q3,q0		@ 6
1422	INST(0x68,0x0c,0x14,0xe2)	@ sha1p q0,q2,q12
1423	vadd.i32	q12,q9,q4
1424	INST(0x88,0xa3,0xba,0xf3)	@ sha1su1 q5,q4
1425	INST(0x48,0xcc,0x3e,0xe2)	@ sha1su0 q6,q7,q4
1426	INST(0xc0,0x42,0xb9,0xf3)	@ sha1h q2,q0		@ 7
1427	INST(0x6a,0x0c,0x16,0xe2)	@ sha1p q0,q3,q13
1428	vadd.i32	q13,q9,q5
1429	INST(0x8a,0xc3,0xba,0xf3)	@ sha1su1 q6,q5
1430	INST(0x4a,0xec,0x38,0xe2)	@ sha1su0 q7,q4,q5
1431	INST(0xc0,0x62,0xb9,0xf3)	@ sha1h q3,q0		@ 8
1432	INST(0x68,0x0c,0x14,0xe2)	@ sha1p q0,q2,q12
1433	vadd.i32	q12,q10,q6
1434	INST(0x8c,0xe3,0xba,0xf3)	@ sha1su1 q7,q6
1435	INST(0x4c,0x8c,0x3a,0xe2)	@ sha1su0 q4,q5,q6
1436	INST(0xc0,0x42,0xb9,0xf3)	@ sha1h q2,q0		@ 9
1437	INST(0x6a,0x0c,0x16,0xe2)	@ sha1p q0,q3,q13
1438	vadd.i32	q13,q10,q7
1439	INST(0x8e,0x83,0xba,0xf3)	@ sha1su1 q4,q7
1440	INST(0x4e,0xac,0x3c,0xe2)	@ sha1su0 q5,q6,q7
1441	INST(0xc0,0x62,0xb9,0xf3)	@ sha1h q3,q0		@ 10
1442	INST(0x68,0x0c,0x24,0xe2)	@ sha1m q0,q2,q12
1443	vadd.i32	q12,q10,q4
1444	INST(0x88,0xa3,0xba,0xf3)	@ sha1su1 q5,q4
1445	INST(0x48,0xcc,0x3e,0xe2)	@ sha1su0 q6,q7,q4
1446	INST(0xc0,0x42,0xb9,0xf3)	@ sha1h q2,q0		@ 11
1447	INST(0x6a,0x0c,0x26,0xe2)	@ sha1m q0,q3,q13
1448	vadd.i32	q13,q10,q5
1449	INST(0x8a,0xc3,0xba,0xf3)	@ sha1su1 q6,q5
1450	INST(0x4a,0xec,0x38,0xe2)	@ sha1su0 q7,q4,q5
1451	INST(0xc0,0x62,0xb9,0xf3)	@ sha1h q3,q0		@ 12
1452	INST(0x68,0x0c,0x24,0xe2)	@ sha1m q0,q2,q12
1453	vadd.i32	q12,q10,q6
1454	INST(0x8c,0xe3,0xba,0xf3)	@ sha1su1 q7,q6
1455	INST(0x4c,0x8c,0x3a,0xe2)	@ sha1su0 q4,q5,q6
1456	INST(0xc0,0x42,0xb9,0xf3)	@ sha1h q2,q0		@ 13
1457	INST(0x6a,0x0c,0x26,0xe2)	@ sha1m q0,q3,q13
1458	vadd.i32	q13,q11,q7
1459	INST(0x8e,0x83,0xba,0xf3)	@ sha1su1 q4,q7
1460	INST(0x4e,0xac,0x3c,0xe2)	@ sha1su0 q5,q6,q7
1461	INST(0xc0,0x62,0xb9,0xf3)	@ sha1h q3,q0		@ 14
1462	INST(0x68,0x0c,0x24,0xe2)	@ sha1m q0,q2,q12
1463	vadd.i32	q12,q11,q4
1464	INST(0x88,0xa3,0xba,0xf3)	@ sha1su1 q5,q4
1465	INST(0x48,0xcc,0x3e,0xe2)	@ sha1su0 q6,q7,q4
1466	INST(0xc0,0x42,0xb9,0xf3)	@ sha1h q2,q0		@ 15
1467	INST(0x6a,0x0c,0x16,0xe2)	@ sha1p q0,q3,q13
1468	vadd.i32	q13,q11,q5
1469	INST(0x8a,0xc3,0xba,0xf3)	@ sha1su1 q6,q5
1470	INST(0x4a,0xec,0x38,0xe2)	@ sha1su0 q7,q4,q5
1471	INST(0xc0,0x62,0xb9,0xf3)	@ sha1h q3,q0		@ 16
1472	INST(0x68,0x0c,0x14,0xe2)	@ sha1p q0,q2,q12
1473	vadd.i32	q12,q11,q6
1474	INST(0x8c,0xe3,0xba,0xf3)	@ sha1su1 q7,q6
1475	INST(0xc0,0x42,0xb9,0xf3)	@ sha1h q2,q0		@ 17
1476	INST(0x6a,0x0c,0x16,0xe2)	@ sha1p q0,q3,q13
1477	vadd.i32	q13,q11,q7
1478
1479	INST(0xc0,0x62,0xb9,0xf3)	@ sha1h q3,q0		@ 18
1480	INST(0x68,0x0c,0x14,0xe2)	@ sha1p q0,q2,q12
1481
1482	INST(0xc0,0x42,0xb9,0xf3)	@ sha1h q2,q0		@ 19
1483	INST(0x6a,0x0c,0x16,0xe2)	@ sha1p q0,q3,q13
1484
1485	vadd.i32	q1,q1,q2
1486	vadd.i32	q0,q0,q14
1487	bne	.Loop_v8
1488
1489	vst1.32	{q0},[r0]!
1490	vst1.32	{d2[0]},[r0]
1491
1492	vldmia	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}
1493	bx	lr					@ bx lr
1494.size	sha1_block_data_order_armv8,.-sha1_block_data_order_armv8
1495#endif
1496#if __ARM_MAX_ARCH__>=7
1497.comm	OPENSSL_armcap_P,4,4
1498.hidden	OPENSSL_armcap_P
1499#endif
1500#endif  // !OPENSSL_NO_ASM && defined(OPENSSL_ARM) && defined(__ELF__)
1501