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