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