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