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