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