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