]> git.ipfire.org Git - thirdparty/kernel/stable.git/blob - arch/arm/crypto/sha256-core.S_shipped
crypto: sha256/arm - fix crash bug in Thumb2 build
[thirdparty/kernel/stable.git] / arch / arm / crypto / sha256-core.S_shipped
1
2 @ ====================================================================
3 @ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
4 @ project. The module is, however, dual licensed under OpenSSL and
5 @ CRYPTOGAMS licenses depending on where you obtain it. For further
6 @ details see http://www.openssl.org/~appro/cryptogams/.
7 @
8 @ Permission to use under GPL terms is granted.
9 @ ====================================================================
10
11 @ SHA256 block procedure for ARMv4. May 2007.
12
13 @ Performance is ~2x better than gcc 3.4 generated code and in "abso-
14 @ lute" terms is ~2250 cycles per 64-byte block or ~35 cycles per
15 @ byte [on single-issue Xscale PXA250 core].
16
17 @ July 2010.
18 @
19 @ Rescheduling for dual-issue pipeline resulted in 22% improvement on
20 @ Cortex A8 core and ~20 cycles per processed byte.
21
22 @ February 2011.
23 @
24 @ Profiler-assisted and platform-specific optimization resulted in 16%
25 @ improvement on Cortex A8 core and ~15.4 cycles per processed byte.
26
27 @ September 2013.
28 @
29 @ Add NEON implementation. On Cortex A8 it was measured to process one
30 @ byte in 12.5 cycles or 23% faster than integer-only code. Snapdragon
31 @ S4 does it in 12.5 cycles too, but it's 50% faster than integer-only
32 @ code (meaning that latter performs sub-optimally, nothing was done
33 @ about it).
34
35 @ May 2014.
36 @
37 @ Add ARMv8 code path performing at 2.0 cpb on Apple A7.
38
39 #ifndef __KERNEL__
40 # include "arm_arch.h"
41 #else
42 # define __ARM_ARCH__ __LINUX_ARM_ARCH__
43 # define __ARM_MAX_ARCH__ 7
44 #endif
45
46 .text
47 #if __ARM_ARCH__<7
48 .code 32
49 #else
50 .syntax unified
51 # ifdef __thumb2__
52 # define adrl adr
53 .thumb
54 # else
55 .code 32
56 # endif
57 #endif
58
59 .type K256,%object
60 .align 5
61 K256:
62 .word 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
63 .word 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
64 .word 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
65 .word 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
66 .word 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
67 .word 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
68 .word 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
69 .word 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
70 .word 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
71 .word 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
72 .word 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
73 .word 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
74 .word 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
75 .word 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
76 .word 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
77 .word 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
78 .size K256,.-K256
79 .word 0 @ terminator
80 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
81 .LOPENSSL_armcap:
82 .word OPENSSL_armcap_P-sha256_block_data_order
83 #endif
84 .align 5
85
86 .global sha256_block_data_order
87 .type sha256_block_data_order,%function
88 sha256_block_data_order:
89 .Lsha256_block_data_order:
90 #if __ARM_ARCH__<7
91 sub r3,pc,#8 @ sha256_block_data_order
92 #else
93 adr r3,.Lsha256_block_data_order
94 #endif
95 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
96 ldr r12,.LOPENSSL_armcap
97 ldr r12,[r3,r12] @ OPENSSL_armcap_P
98 tst r12,#ARMV8_SHA256
99 bne .LARMv8
100 tst r12,#ARMV7_NEON
101 bne .LNEON
102 #endif
103 add r2,r1,r2,lsl#6 @ len to point at the end of inp
104 stmdb sp!,{r0,r1,r2,r4-r11,lr}
105 ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11}
106 sub r14,r3,#256+32 @ K256
107 sub sp,sp,#16*4 @ alloca(X[16])
108 .Loop:
109 # if __ARM_ARCH__>=7
110 ldr r2,[r1],#4
111 # else
112 ldrb r2,[r1,#3]
113 # endif
114 eor r3,r5,r6 @ magic
115 eor r12,r12,r12
116 #if __ARM_ARCH__>=7
117 @ ldr r2,[r1],#4 @ 0
118 # if 0==15
119 str r1,[sp,#17*4] @ make room for r1
120 # endif
121 eor r0,r8,r8,ror#5
122 add r4,r4,r12 @ h+=Maj(a,b,c) from the past
123 eor r0,r0,r8,ror#19 @ Sigma1(e)
124 # ifndef __ARMEB__
125 rev r2,r2
126 # endif
127 #else
128 @ ldrb r2,[r1,#3] @ 0
129 add r4,r4,r12 @ h+=Maj(a,b,c) from the past
130 ldrb r12,[r1,#2]
131 ldrb r0,[r1,#1]
132 orr r2,r2,r12,lsl#8
133 ldrb r12,[r1],#4
134 orr r2,r2,r0,lsl#16
135 # if 0==15
136 str r1,[sp,#17*4] @ make room for r1
137 # endif
138 eor r0,r8,r8,ror#5
139 orr r2,r2,r12,lsl#24
140 eor r0,r0,r8,ror#19 @ Sigma1(e)
141 #endif
142 ldr r12,[r14],#4 @ *K256++
143 add r11,r11,r2 @ h+=X[i]
144 str r2,[sp,#0*4]
145 eor r2,r9,r10
146 add r11,r11,r0,ror#6 @ h+=Sigma1(e)
147 and r2,r2,r8
148 add r11,r11,r12 @ h+=K256[i]
149 eor r2,r2,r10 @ Ch(e,f,g)
150 eor r0,r4,r4,ror#11
151 add r11,r11,r2 @ h+=Ch(e,f,g)
152 #if 0==31
153 and r12,r12,#0xff
154 cmp r12,#0xf2 @ done?
155 #endif
156 #if 0<15
157 # if __ARM_ARCH__>=7
158 ldr r2,[r1],#4 @ prefetch
159 # else
160 ldrb r2,[r1,#3]
161 # endif
162 eor r12,r4,r5 @ a^b, b^c in next round
163 #else
164 ldr r2,[sp,#2*4] @ from future BODY_16_xx
165 eor r12,r4,r5 @ a^b, b^c in next round
166 ldr r1,[sp,#15*4] @ from future BODY_16_xx
167 #endif
168 eor r0,r0,r4,ror#20 @ Sigma0(a)
169 and r3,r3,r12 @ (b^c)&=(a^b)
170 add r7,r7,r11 @ d+=h
171 eor r3,r3,r5 @ Maj(a,b,c)
172 add r11,r11,r0,ror#2 @ h+=Sigma0(a)
173 @ add r11,r11,r3 @ h+=Maj(a,b,c)
174 #if __ARM_ARCH__>=7
175 @ ldr r2,[r1],#4 @ 1
176 # if 1==15
177 str r1,[sp,#17*4] @ make room for r1
178 # endif
179 eor r0,r7,r7,ror#5
180 add r11,r11,r3 @ h+=Maj(a,b,c) from the past
181 eor r0,r0,r7,ror#19 @ Sigma1(e)
182 # ifndef __ARMEB__
183 rev r2,r2
184 # endif
185 #else
186 @ ldrb r2,[r1,#3] @ 1
187 add r11,r11,r3 @ h+=Maj(a,b,c) from the past
188 ldrb r3,[r1,#2]
189 ldrb r0,[r1,#1]
190 orr r2,r2,r3,lsl#8
191 ldrb r3,[r1],#4
192 orr r2,r2,r0,lsl#16
193 # if 1==15
194 str r1,[sp,#17*4] @ make room for r1
195 # endif
196 eor r0,r7,r7,ror#5
197 orr r2,r2,r3,lsl#24
198 eor r0,r0,r7,ror#19 @ Sigma1(e)
199 #endif
200 ldr r3,[r14],#4 @ *K256++
201 add r10,r10,r2 @ h+=X[i]
202 str r2,[sp,#1*4]
203 eor r2,r8,r9
204 add r10,r10,r0,ror#6 @ h+=Sigma1(e)
205 and r2,r2,r7
206 add r10,r10,r3 @ h+=K256[i]
207 eor r2,r2,r9 @ Ch(e,f,g)
208 eor r0,r11,r11,ror#11
209 add r10,r10,r2 @ h+=Ch(e,f,g)
210 #if 1==31
211 and r3,r3,#0xff
212 cmp r3,#0xf2 @ done?
213 #endif
214 #if 1<15
215 # if __ARM_ARCH__>=7
216 ldr r2,[r1],#4 @ prefetch
217 # else
218 ldrb r2,[r1,#3]
219 # endif
220 eor r3,r11,r4 @ a^b, b^c in next round
221 #else
222 ldr r2,[sp,#3*4] @ from future BODY_16_xx
223 eor r3,r11,r4 @ a^b, b^c in next round
224 ldr r1,[sp,#0*4] @ from future BODY_16_xx
225 #endif
226 eor r0,r0,r11,ror#20 @ Sigma0(a)
227 and r12,r12,r3 @ (b^c)&=(a^b)
228 add r6,r6,r10 @ d+=h
229 eor r12,r12,r4 @ Maj(a,b,c)
230 add r10,r10,r0,ror#2 @ h+=Sigma0(a)
231 @ add r10,r10,r12 @ h+=Maj(a,b,c)
232 #if __ARM_ARCH__>=7
233 @ ldr r2,[r1],#4 @ 2
234 # if 2==15
235 str r1,[sp,#17*4] @ make room for r1
236 # endif
237 eor r0,r6,r6,ror#5
238 add r10,r10,r12 @ h+=Maj(a,b,c) from the past
239 eor r0,r0,r6,ror#19 @ Sigma1(e)
240 # ifndef __ARMEB__
241 rev r2,r2
242 # endif
243 #else
244 @ ldrb r2,[r1,#3] @ 2
245 add r10,r10,r12 @ h+=Maj(a,b,c) from the past
246 ldrb r12,[r1,#2]
247 ldrb r0,[r1,#1]
248 orr r2,r2,r12,lsl#8
249 ldrb r12,[r1],#4
250 orr r2,r2,r0,lsl#16
251 # if 2==15
252 str r1,[sp,#17*4] @ make room for r1
253 # endif
254 eor r0,r6,r6,ror#5
255 orr r2,r2,r12,lsl#24
256 eor r0,r0,r6,ror#19 @ Sigma1(e)
257 #endif
258 ldr r12,[r14],#4 @ *K256++
259 add r9,r9,r2 @ h+=X[i]
260 str r2,[sp,#2*4]
261 eor r2,r7,r8
262 add r9,r9,r0,ror#6 @ h+=Sigma1(e)
263 and r2,r2,r6
264 add r9,r9,r12 @ h+=K256[i]
265 eor r2,r2,r8 @ Ch(e,f,g)
266 eor r0,r10,r10,ror#11
267 add r9,r9,r2 @ h+=Ch(e,f,g)
268 #if 2==31
269 and r12,r12,#0xff
270 cmp r12,#0xf2 @ done?
271 #endif
272 #if 2<15
273 # if __ARM_ARCH__>=7
274 ldr r2,[r1],#4 @ prefetch
275 # else
276 ldrb r2,[r1,#3]
277 # endif
278 eor r12,r10,r11 @ a^b, b^c in next round
279 #else
280 ldr r2,[sp,#4*4] @ from future BODY_16_xx
281 eor r12,r10,r11 @ a^b, b^c in next round
282 ldr r1,[sp,#1*4] @ from future BODY_16_xx
283 #endif
284 eor r0,r0,r10,ror#20 @ Sigma0(a)
285 and r3,r3,r12 @ (b^c)&=(a^b)
286 add r5,r5,r9 @ d+=h
287 eor r3,r3,r11 @ Maj(a,b,c)
288 add r9,r9,r0,ror#2 @ h+=Sigma0(a)
289 @ add r9,r9,r3 @ h+=Maj(a,b,c)
290 #if __ARM_ARCH__>=7
291 @ ldr r2,[r1],#4 @ 3
292 # if 3==15
293 str r1,[sp,#17*4] @ make room for r1
294 # endif
295 eor r0,r5,r5,ror#5
296 add r9,r9,r3 @ h+=Maj(a,b,c) from the past
297 eor r0,r0,r5,ror#19 @ Sigma1(e)
298 # ifndef __ARMEB__
299 rev r2,r2
300 # endif
301 #else
302 @ ldrb r2,[r1,#3] @ 3
303 add r9,r9,r3 @ h+=Maj(a,b,c) from the past
304 ldrb r3,[r1,#2]
305 ldrb r0,[r1,#1]
306 orr r2,r2,r3,lsl#8
307 ldrb r3,[r1],#4
308 orr r2,r2,r0,lsl#16
309 # if 3==15
310 str r1,[sp,#17*4] @ make room for r1
311 # endif
312 eor r0,r5,r5,ror#5
313 orr r2,r2,r3,lsl#24
314 eor r0,r0,r5,ror#19 @ Sigma1(e)
315 #endif
316 ldr r3,[r14],#4 @ *K256++
317 add r8,r8,r2 @ h+=X[i]
318 str r2,[sp,#3*4]
319 eor r2,r6,r7
320 add r8,r8,r0,ror#6 @ h+=Sigma1(e)
321 and r2,r2,r5
322 add r8,r8,r3 @ h+=K256[i]
323 eor r2,r2,r7 @ Ch(e,f,g)
324 eor r0,r9,r9,ror#11
325 add r8,r8,r2 @ h+=Ch(e,f,g)
326 #if 3==31
327 and r3,r3,#0xff
328 cmp r3,#0xf2 @ done?
329 #endif
330 #if 3<15
331 # if __ARM_ARCH__>=7
332 ldr r2,[r1],#4 @ prefetch
333 # else
334 ldrb r2,[r1,#3]
335 # endif
336 eor r3,r9,r10 @ a^b, b^c in next round
337 #else
338 ldr r2,[sp,#5*4] @ from future BODY_16_xx
339 eor r3,r9,r10 @ a^b, b^c in next round
340 ldr r1,[sp,#2*4] @ from future BODY_16_xx
341 #endif
342 eor r0,r0,r9,ror#20 @ Sigma0(a)
343 and r12,r12,r3 @ (b^c)&=(a^b)
344 add r4,r4,r8 @ d+=h
345 eor r12,r12,r10 @ Maj(a,b,c)
346 add r8,r8,r0,ror#2 @ h+=Sigma0(a)
347 @ add r8,r8,r12 @ h+=Maj(a,b,c)
348 #if __ARM_ARCH__>=7
349 @ ldr r2,[r1],#4 @ 4
350 # if 4==15
351 str r1,[sp,#17*4] @ make room for r1
352 # endif
353 eor r0,r4,r4,ror#5
354 add r8,r8,r12 @ h+=Maj(a,b,c) from the past
355 eor r0,r0,r4,ror#19 @ Sigma1(e)
356 # ifndef __ARMEB__
357 rev r2,r2
358 # endif
359 #else
360 @ ldrb r2,[r1,#3] @ 4
361 add r8,r8,r12 @ h+=Maj(a,b,c) from the past
362 ldrb r12,[r1,#2]
363 ldrb r0,[r1,#1]
364 orr r2,r2,r12,lsl#8
365 ldrb r12,[r1],#4
366 orr r2,r2,r0,lsl#16
367 # if 4==15
368 str r1,[sp,#17*4] @ make room for r1
369 # endif
370 eor r0,r4,r4,ror#5
371 orr r2,r2,r12,lsl#24
372 eor r0,r0,r4,ror#19 @ Sigma1(e)
373 #endif
374 ldr r12,[r14],#4 @ *K256++
375 add r7,r7,r2 @ h+=X[i]
376 str r2,[sp,#4*4]
377 eor r2,r5,r6
378 add r7,r7,r0,ror#6 @ h+=Sigma1(e)
379 and r2,r2,r4
380 add r7,r7,r12 @ h+=K256[i]
381 eor r2,r2,r6 @ Ch(e,f,g)
382 eor r0,r8,r8,ror#11
383 add r7,r7,r2 @ h+=Ch(e,f,g)
384 #if 4==31
385 and r12,r12,#0xff
386 cmp r12,#0xf2 @ done?
387 #endif
388 #if 4<15
389 # if __ARM_ARCH__>=7
390 ldr r2,[r1],#4 @ prefetch
391 # else
392 ldrb r2,[r1,#3]
393 # endif
394 eor r12,r8,r9 @ a^b, b^c in next round
395 #else
396 ldr r2,[sp,#6*4] @ from future BODY_16_xx
397 eor r12,r8,r9 @ a^b, b^c in next round
398 ldr r1,[sp,#3*4] @ from future BODY_16_xx
399 #endif
400 eor r0,r0,r8,ror#20 @ Sigma0(a)
401 and r3,r3,r12 @ (b^c)&=(a^b)
402 add r11,r11,r7 @ d+=h
403 eor r3,r3,r9 @ Maj(a,b,c)
404 add r7,r7,r0,ror#2 @ h+=Sigma0(a)
405 @ add r7,r7,r3 @ h+=Maj(a,b,c)
406 #if __ARM_ARCH__>=7
407 @ ldr r2,[r1],#4 @ 5
408 # if 5==15
409 str r1,[sp,#17*4] @ make room for r1
410 # endif
411 eor r0,r11,r11,ror#5
412 add r7,r7,r3 @ h+=Maj(a,b,c) from the past
413 eor r0,r0,r11,ror#19 @ Sigma1(e)
414 # ifndef __ARMEB__
415 rev r2,r2
416 # endif
417 #else
418 @ ldrb r2,[r1,#3] @ 5
419 add r7,r7,r3 @ h+=Maj(a,b,c) from the past
420 ldrb r3,[r1,#2]
421 ldrb r0,[r1,#1]
422 orr r2,r2,r3,lsl#8
423 ldrb r3,[r1],#4
424 orr r2,r2,r0,lsl#16
425 # if 5==15
426 str r1,[sp,#17*4] @ make room for r1
427 # endif
428 eor r0,r11,r11,ror#5
429 orr r2,r2,r3,lsl#24
430 eor r0,r0,r11,ror#19 @ Sigma1(e)
431 #endif
432 ldr r3,[r14],#4 @ *K256++
433 add r6,r6,r2 @ h+=X[i]
434 str r2,[sp,#5*4]
435 eor r2,r4,r5
436 add r6,r6,r0,ror#6 @ h+=Sigma1(e)
437 and r2,r2,r11
438 add r6,r6,r3 @ h+=K256[i]
439 eor r2,r2,r5 @ Ch(e,f,g)
440 eor r0,r7,r7,ror#11
441 add r6,r6,r2 @ h+=Ch(e,f,g)
442 #if 5==31
443 and r3,r3,#0xff
444 cmp r3,#0xf2 @ done?
445 #endif
446 #if 5<15
447 # if __ARM_ARCH__>=7
448 ldr r2,[r1],#4 @ prefetch
449 # else
450 ldrb r2,[r1,#3]
451 # endif
452 eor r3,r7,r8 @ a^b, b^c in next round
453 #else
454 ldr r2,[sp,#7*4] @ from future BODY_16_xx
455 eor r3,r7,r8 @ a^b, b^c in next round
456 ldr r1,[sp,#4*4] @ from future BODY_16_xx
457 #endif
458 eor r0,r0,r7,ror#20 @ Sigma0(a)
459 and r12,r12,r3 @ (b^c)&=(a^b)
460 add r10,r10,r6 @ d+=h
461 eor r12,r12,r8 @ Maj(a,b,c)
462 add r6,r6,r0,ror#2 @ h+=Sigma0(a)
463 @ add r6,r6,r12 @ h+=Maj(a,b,c)
464 #if __ARM_ARCH__>=7
465 @ ldr r2,[r1],#4 @ 6
466 # if 6==15
467 str r1,[sp,#17*4] @ make room for r1
468 # endif
469 eor r0,r10,r10,ror#5
470 add r6,r6,r12 @ h+=Maj(a,b,c) from the past
471 eor r0,r0,r10,ror#19 @ Sigma1(e)
472 # ifndef __ARMEB__
473 rev r2,r2
474 # endif
475 #else
476 @ ldrb r2,[r1,#3] @ 6
477 add r6,r6,r12 @ h+=Maj(a,b,c) from the past
478 ldrb r12,[r1,#2]
479 ldrb r0,[r1,#1]
480 orr r2,r2,r12,lsl#8
481 ldrb r12,[r1],#4
482 orr r2,r2,r0,lsl#16
483 # if 6==15
484 str r1,[sp,#17*4] @ make room for r1
485 # endif
486 eor r0,r10,r10,ror#5
487 orr r2,r2,r12,lsl#24
488 eor r0,r0,r10,ror#19 @ Sigma1(e)
489 #endif
490 ldr r12,[r14],#4 @ *K256++
491 add r5,r5,r2 @ h+=X[i]
492 str r2,[sp,#6*4]
493 eor r2,r11,r4
494 add r5,r5,r0,ror#6 @ h+=Sigma1(e)
495 and r2,r2,r10
496 add r5,r5,r12 @ h+=K256[i]
497 eor r2,r2,r4 @ Ch(e,f,g)
498 eor r0,r6,r6,ror#11
499 add r5,r5,r2 @ h+=Ch(e,f,g)
500 #if 6==31
501 and r12,r12,#0xff
502 cmp r12,#0xf2 @ done?
503 #endif
504 #if 6<15
505 # if __ARM_ARCH__>=7
506 ldr r2,[r1],#4 @ prefetch
507 # else
508 ldrb r2,[r1,#3]
509 # endif
510 eor r12,r6,r7 @ a^b, b^c in next round
511 #else
512 ldr r2,[sp,#8*4] @ from future BODY_16_xx
513 eor r12,r6,r7 @ a^b, b^c in next round
514 ldr r1,[sp,#5*4] @ from future BODY_16_xx
515 #endif
516 eor r0,r0,r6,ror#20 @ Sigma0(a)
517 and r3,r3,r12 @ (b^c)&=(a^b)
518 add r9,r9,r5 @ d+=h
519 eor r3,r3,r7 @ Maj(a,b,c)
520 add r5,r5,r0,ror#2 @ h+=Sigma0(a)
521 @ add r5,r5,r3 @ h+=Maj(a,b,c)
522 #if __ARM_ARCH__>=7
523 @ ldr r2,[r1],#4 @ 7
524 # if 7==15
525 str r1,[sp,#17*4] @ make room for r1
526 # endif
527 eor r0,r9,r9,ror#5
528 add r5,r5,r3 @ h+=Maj(a,b,c) from the past
529 eor r0,r0,r9,ror#19 @ Sigma1(e)
530 # ifndef __ARMEB__
531 rev r2,r2
532 # endif
533 #else
534 @ ldrb r2,[r1,#3] @ 7
535 add r5,r5,r3 @ h+=Maj(a,b,c) from the past
536 ldrb r3,[r1,#2]
537 ldrb r0,[r1,#1]
538 orr r2,r2,r3,lsl#8
539 ldrb r3,[r1],#4
540 orr r2,r2,r0,lsl#16
541 # if 7==15
542 str r1,[sp,#17*4] @ make room for r1
543 # endif
544 eor r0,r9,r9,ror#5
545 orr r2,r2,r3,lsl#24
546 eor r0,r0,r9,ror#19 @ Sigma1(e)
547 #endif
548 ldr r3,[r14],#4 @ *K256++
549 add r4,r4,r2 @ h+=X[i]
550 str r2,[sp,#7*4]
551 eor r2,r10,r11
552 add r4,r4,r0,ror#6 @ h+=Sigma1(e)
553 and r2,r2,r9
554 add r4,r4,r3 @ h+=K256[i]
555 eor r2,r2,r11 @ Ch(e,f,g)
556 eor r0,r5,r5,ror#11
557 add r4,r4,r2 @ h+=Ch(e,f,g)
558 #if 7==31
559 and r3,r3,#0xff
560 cmp r3,#0xf2 @ done?
561 #endif
562 #if 7<15
563 # if __ARM_ARCH__>=7
564 ldr r2,[r1],#4 @ prefetch
565 # else
566 ldrb r2,[r1,#3]
567 # endif
568 eor r3,r5,r6 @ a^b, b^c in next round
569 #else
570 ldr r2,[sp,#9*4] @ from future BODY_16_xx
571 eor r3,r5,r6 @ a^b, b^c in next round
572 ldr r1,[sp,#6*4] @ from future BODY_16_xx
573 #endif
574 eor r0,r0,r5,ror#20 @ Sigma0(a)
575 and r12,r12,r3 @ (b^c)&=(a^b)
576 add r8,r8,r4 @ d+=h
577 eor r12,r12,r6 @ Maj(a,b,c)
578 add r4,r4,r0,ror#2 @ h+=Sigma0(a)
579 @ add r4,r4,r12 @ h+=Maj(a,b,c)
580 #if __ARM_ARCH__>=7
581 @ ldr r2,[r1],#4 @ 8
582 # if 8==15
583 str r1,[sp,#17*4] @ make room for r1
584 # endif
585 eor r0,r8,r8,ror#5
586 add r4,r4,r12 @ h+=Maj(a,b,c) from the past
587 eor r0,r0,r8,ror#19 @ Sigma1(e)
588 # ifndef __ARMEB__
589 rev r2,r2
590 # endif
591 #else
592 @ ldrb r2,[r1,#3] @ 8
593 add r4,r4,r12 @ h+=Maj(a,b,c) from the past
594 ldrb r12,[r1,#2]
595 ldrb r0,[r1,#1]
596 orr r2,r2,r12,lsl#8
597 ldrb r12,[r1],#4
598 orr r2,r2,r0,lsl#16
599 # if 8==15
600 str r1,[sp,#17*4] @ make room for r1
601 # endif
602 eor r0,r8,r8,ror#5
603 orr r2,r2,r12,lsl#24
604 eor r0,r0,r8,ror#19 @ Sigma1(e)
605 #endif
606 ldr r12,[r14],#4 @ *K256++
607 add r11,r11,r2 @ h+=X[i]
608 str r2,[sp,#8*4]
609 eor r2,r9,r10
610 add r11,r11,r0,ror#6 @ h+=Sigma1(e)
611 and r2,r2,r8
612 add r11,r11,r12 @ h+=K256[i]
613 eor r2,r2,r10 @ Ch(e,f,g)
614 eor r0,r4,r4,ror#11
615 add r11,r11,r2 @ h+=Ch(e,f,g)
616 #if 8==31
617 and r12,r12,#0xff
618 cmp r12,#0xf2 @ done?
619 #endif
620 #if 8<15
621 # if __ARM_ARCH__>=7
622 ldr r2,[r1],#4 @ prefetch
623 # else
624 ldrb r2,[r1,#3]
625 # endif
626 eor r12,r4,r5 @ a^b, b^c in next round
627 #else
628 ldr r2,[sp,#10*4] @ from future BODY_16_xx
629 eor r12,r4,r5 @ a^b, b^c in next round
630 ldr r1,[sp,#7*4] @ from future BODY_16_xx
631 #endif
632 eor r0,r0,r4,ror#20 @ Sigma0(a)
633 and r3,r3,r12 @ (b^c)&=(a^b)
634 add r7,r7,r11 @ d+=h
635 eor r3,r3,r5 @ Maj(a,b,c)
636 add r11,r11,r0,ror#2 @ h+=Sigma0(a)
637 @ add r11,r11,r3 @ h+=Maj(a,b,c)
638 #if __ARM_ARCH__>=7
639 @ ldr r2,[r1],#4 @ 9
640 # if 9==15
641 str r1,[sp,#17*4] @ make room for r1
642 # endif
643 eor r0,r7,r7,ror#5
644 add r11,r11,r3 @ h+=Maj(a,b,c) from the past
645 eor r0,r0,r7,ror#19 @ Sigma1(e)
646 # ifndef __ARMEB__
647 rev r2,r2
648 # endif
649 #else
650 @ ldrb r2,[r1,#3] @ 9
651 add r11,r11,r3 @ h+=Maj(a,b,c) from the past
652 ldrb r3,[r1,#2]
653 ldrb r0,[r1,#1]
654 orr r2,r2,r3,lsl#8
655 ldrb r3,[r1],#4
656 orr r2,r2,r0,lsl#16
657 # if 9==15
658 str r1,[sp,#17*4] @ make room for r1
659 # endif
660 eor r0,r7,r7,ror#5
661 orr r2,r2,r3,lsl#24
662 eor r0,r0,r7,ror#19 @ Sigma1(e)
663 #endif
664 ldr r3,[r14],#4 @ *K256++
665 add r10,r10,r2 @ h+=X[i]
666 str r2,[sp,#9*4]
667 eor r2,r8,r9
668 add r10,r10,r0,ror#6 @ h+=Sigma1(e)
669 and r2,r2,r7
670 add r10,r10,r3 @ h+=K256[i]
671 eor r2,r2,r9 @ Ch(e,f,g)
672 eor r0,r11,r11,ror#11
673 add r10,r10,r2 @ h+=Ch(e,f,g)
674 #if 9==31
675 and r3,r3,#0xff
676 cmp r3,#0xf2 @ done?
677 #endif
678 #if 9<15
679 # if __ARM_ARCH__>=7
680 ldr r2,[r1],#4 @ prefetch
681 # else
682 ldrb r2,[r1,#3]
683 # endif
684 eor r3,r11,r4 @ a^b, b^c in next round
685 #else
686 ldr r2,[sp,#11*4] @ from future BODY_16_xx
687 eor r3,r11,r4 @ a^b, b^c in next round
688 ldr r1,[sp,#8*4] @ from future BODY_16_xx
689 #endif
690 eor r0,r0,r11,ror#20 @ Sigma0(a)
691 and r12,r12,r3 @ (b^c)&=(a^b)
692 add r6,r6,r10 @ d+=h
693 eor r12,r12,r4 @ Maj(a,b,c)
694 add r10,r10,r0,ror#2 @ h+=Sigma0(a)
695 @ add r10,r10,r12 @ h+=Maj(a,b,c)
696 #if __ARM_ARCH__>=7
697 @ ldr r2,[r1],#4 @ 10
698 # if 10==15
699 str r1,[sp,#17*4] @ make room for r1
700 # endif
701 eor r0,r6,r6,ror#5
702 add r10,r10,r12 @ h+=Maj(a,b,c) from the past
703 eor r0,r0,r6,ror#19 @ Sigma1(e)
704 # ifndef __ARMEB__
705 rev r2,r2
706 # endif
707 #else
708 @ ldrb r2,[r1,#3] @ 10
709 add r10,r10,r12 @ h+=Maj(a,b,c) from the past
710 ldrb r12,[r1,#2]
711 ldrb r0,[r1,#1]
712 orr r2,r2,r12,lsl#8
713 ldrb r12,[r1],#4
714 orr r2,r2,r0,lsl#16
715 # if 10==15
716 str r1,[sp,#17*4] @ make room for r1
717 # endif
718 eor r0,r6,r6,ror#5
719 orr r2,r2,r12,lsl#24
720 eor r0,r0,r6,ror#19 @ Sigma1(e)
721 #endif
722 ldr r12,[r14],#4 @ *K256++
723 add r9,r9,r2 @ h+=X[i]
724 str r2,[sp,#10*4]
725 eor r2,r7,r8
726 add r9,r9,r0,ror#6 @ h+=Sigma1(e)
727 and r2,r2,r6
728 add r9,r9,r12 @ h+=K256[i]
729 eor r2,r2,r8 @ Ch(e,f,g)
730 eor r0,r10,r10,ror#11
731 add r9,r9,r2 @ h+=Ch(e,f,g)
732 #if 10==31
733 and r12,r12,#0xff
734 cmp r12,#0xf2 @ done?
735 #endif
736 #if 10<15
737 # if __ARM_ARCH__>=7
738 ldr r2,[r1],#4 @ prefetch
739 # else
740 ldrb r2,[r1,#3]
741 # endif
742 eor r12,r10,r11 @ a^b, b^c in next round
743 #else
744 ldr r2,[sp,#12*4] @ from future BODY_16_xx
745 eor r12,r10,r11 @ a^b, b^c in next round
746 ldr r1,[sp,#9*4] @ from future BODY_16_xx
747 #endif
748 eor r0,r0,r10,ror#20 @ Sigma0(a)
749 and r3,r3,r12 @ (b^c)&=(a^b)
750 add r5,r5,r9 @ d+=h
751 eor r3,r3,r11 @ Maj(a,b,c)
752 add r9,r9,r0,ror#2 @ h+=Sigma0(a)
753 @ add r9,r9,r3 @ h+=Maj(a,b,c)
754 #if __ARM_ARCH__>=7
755 @ ldr r2,[r1],#4 @ 11
756 # if 11==15
757 str r1,[sp,#17*4] @ make room for r1
758 # endif
759 eor r0,r5,r5,ror#5
760 add r9,r9,r3 @ h+=Maj(a,b,c) from the past
761 eor r0,r0,r5,ror#19 @ Sigma1(e)
762 # ifndef __ARMEB__
763 rev r2,r2
764 # endif
765 #else
766 @ ldrb r2,[r1,#3] @ 11
767 add r9,r9,r3 @ h+=Maj(a,b,c) from the past
768 ldrb r3,[r1,#2]
769 ldrb r0,[r1,#1]
770 orr r2,r2,r3,lsl#8
771 ldrb r3,[r1],#4
772 orr r2,r2,r0,lsl#16
773 # if 11==15
774 str r1,[sp,#17*4] @ make room for r1
775 # endif
776 eor r0,r5,r5,ror#5
777 orr r2,r2,r3,lsl#24
778 eor r0,r0,r5,ror#19 @ Sigma1(e)
779 #endif
780 ldr r3,[r14],#4 @ *K256++
781 add r8,r8,r2 @ h+=X[i]
782 str r2,[sp,#11*4]
783 eor r2,r6,r7
784 add r8,r8,r0,ror#6 @ h+=Sigma1(e)
785 and r2,r2,r5
786 add r8,r8,r3 @ h+=K256[i]
787 eor r2,r2,r7 @ Ch(e,f,g)
788 eor r0,r9,r9,ror#11
789 add r8,r8,r2 @ h+=Ch(e,f,g)
790 #if 11==31
791 and r3,r3,#0xff
792 cmp r3,#0xf2 @ done?
793 #endif
794 #if 11<15
795 # if __ARM_ARCH__>=7
796 ldr r2,[r1],#4 @ prefetch
797 # else
798 ldrb r2,[r1,#3]
799 # endif
800 eor r3,r9,r10 @ a^b, b^c in next round
801 #else
802 ldr r2,[sp,#13*4] @ from future BODY_16_xx
803 eor r3,r9,r10 @ a^b, b^c in next round
804 ldr r1,[sp,#10*4] @ from future BODY_16_xx
805 #endif
806 eor r0,r0,r9,ror#20 @ Sigma0(a)
807 and r12,r12,r3 @ (b^c)&=(a^b)
808 add r4,r4,r8 @ d+=h
809 eor r12,r12,r10 @ Maj(a,b,c)
810 add r8,r8,r0,ror#2 @ h+=Sigma0(a)
811 @ add r8,r8,r12 @ h+=Maj(a,b,c)
812 #if __ARM_ARCH__>=7
813 @ ldr r2,[r1],#4 @ 12
814 # if 12==15
815 str r1,[sp,#17*4] @ make room for r1
816 # endif
817 eor r0,r4,r4,ror#5
818 add r8,r8,r12 @ h+=Maj(a,b,c) from the past
819 eor r0,r0,r4,ror#19 @ Sigma1(e)
820 # ifndef __ARMEB__
821 rev r2,r2
822 # endif
823 #else
824 @ ldrb r2,[r1,#3] @ 12
825 add r8,r8,r12 @ h+=Maj(a,b,c) from the past
826 ldrb r12,[r1,#2]
827 ldrb r0,[r1,#1]
828 orr r2,r2,r12,lsl#8
829 ldrb r12,[r1],#4
830 orr r2,r2,r0,lsl#16
831 # if 12==15
832 str r1,[sp,#17*4] @ make room for r1
833 # endif
834 eor r0,r4,r4,ror#5
835 orr r2,r2,r12,lsl#24
836 eor r0,r0,r4,ror#19 @ Sigma1(e)
837 #endif
838 ldr r12,[r14],#4 @ *K256++
839 add r7,r7,r2 @ h+=X[i]
840 str r2,[sp,#12*4]
841 eor r2,r5,r6
842 add r7,r7,r0,ror#6 @ h+=Sigma1(e)
843 and r2,r2,r4
844 add r7,r7,r12 @ h+=K256[i]
845 eor r2,r2,r6 @ Ch(e,f,g)
846 eor r0,r8,r8,ror#11
847 add r7,r7,r2 @ h+=Ch(e,f,g)
848 #if 12==31
849 and r12,r12,#0xff
850 cmp r12,#0xf2 @ done?
851 #endif
852 #if 12<15
853 # if __ARM_ARCH__>=7
854 ldr r2,[r1],#4 @ prefetch
855 # else
856 ldrb r2,[r1,#3]
857 # endif
858 eor r12,r8,r9 @ a^b, b^c in next round
859 #else
860 ldr r2,[sp,#14*4] @ from future BODY_16_xx
861 eor r12,r8,r9 @ a^b, b^c in next round
862 ldr r1,[sp,#11*4] @ from future BODY_16_xx
863 #endif
864 eor r0,r0,r8,ror#20 @ Sigma0(a)
865 and r3,r3,r12 @ (b^c)&=(a^b)
866 add r11,r11,r7 @ d+=h
867 eor r3,r3,r9 @ Maj(a,b,c)
868 add r7,r7,r0,ror#2 @ h+=Sigma0(a)
869 @ add r7,r7,r3 @ h+=Maj(a,b,c)
870 #if __ARM_ARCH__>=7
871 @ ldr r2,[r1],#4 @ 13
872 # if 13==15
873 str r1,[sp,#17*4] @ make room for r1
874 # endif
875 eor r0,r11,r11,ror#5
876 add r7,r7,r3 @ h+=Maj(a,b,c) from the past
877 eor r0,r0,r11,ror#19 @ Sigma1(e)
878 # ifndef __ARMEB__
879 rev r2,r2
880 # endif
881 #else
882 @ ldrb r2,[r1,#3] @ 13
883 add r7,r7,r3 @ h+=Maj(a,b,c) from the past
884 ldrb r3,[r1,#2]
885 ldrb r0,[r1,#1]
886 orr r2,r2,r3,lsl#8
887 ldrb r3,[r1],#4
888 orr r2,r2,r0,lsl#16
889 # if 13==15
890 str r1,[sp,#17*4] @ make room for r1
891 # endif
892 eor r0,r11,r11,ror#5
893 orr r2,r2,r3,lsl#24
894 eor r0,r0,r11,ror#19 @ Sigma1(e)
895 #endif
896 ldr r3,[r14],#4 @ *K256++
897 add r6,r6,r2 @ h+=X[i]
898 str r2,[sp,#13*4]
899 eor r2,r4,r5
900 add r6,r6,r0,ror#6 @ h+=Sigma1(e)
901 and r2,r2,r11
902 add r6,r6,r3 @ h+=K256[i]
903 eor r2,r2,r5 @ Ch(e,f,g)
904 eor r0,r7,r7,ror#11
905 add r6,r6,r2 @ h+=Ch(e,f,g)
906 #if 13==31
907 and r3,r3,#0xff
908 cmp r3,#0xf2 @ done?
909 #endif
910 #if 13<15
911 # if __ARM_ARCH__>=7
912 ldr r2,[r1],#4 @ prefetch
913 # else
914 ldrb r2,[r1,#3]
915 # endif
916 eor r3,r7,r8 @ a^b, b^c in next round
917 #else
918 ldr r2,[sp,#15*4] @ from future BODY_16_xx
919 eor r3,r7,r8 @ a^b, b^c in next round
920 ldr r1,[sp,#12*4] @ from future BODY_16_xx
921 #endif
922 eor r0,r0,r7,ror#20 @ Sigma0(a)
923 and r12,r12,r3 @ (b^c)&=(a^b)
924 add r10,r10,r6 @ d+=h
925 eor r12,r12,r8 @ Maj(a,b,c)
926 add r6,r6,r0,ror#2 @ h+=Sigma0(a)
927 @ add r6,r6,r12 @ h+=Maj(a,b,c)
928 #if __ARM_ARCH__>=7
929 @ ldr r2,[r1],#4 @ 14
930 # if 14==15
931 str r1,[sp,#17*4] @ make room for r1
932 # endif
933 eor r0,r10,r10,ror#5
934 add r6,r6,r12 @ h+=Maj(a,b,c) from the past
935 eor r0,r0,r10,ror#19 @ Sigma1(e)
936 # ifndef __ARMEB__
937 rev r2,r2
938 # endif
939 #else
940 @ ldrb r2,[r1,#3] @ 14
941 add r6,r6,r12 @ h+=Maj(a,b,c) from the past
942 ldrb r12,[r1,#2]
943 ldrb r0,[r1,#1]
944 orr r2,r2,r12,lsl#8
945 ldrb r12,[r1],#4
946 orr r2,r2,r0,lsl#16
947 # if 14==15
948 str r1,[sp,#17*4] @ make room for r1
949 # endif
950 eor r0,r10,r10,ror#5
951 orr r2,r2,r12,lsl#24
952 eor r0,r0,r10,ror#19 @ Sigma1(e)
953 #endif
954 ldr r12,[r14],#4 @ *K256++
955 add r5,r5,r2 @ h+=X[i]
956 str r2,[sp,#14*4]
957 eor r2,r11,r4
958 add r5,r5,r0,ror#6 @ h+=Sigma1(e)
959 and r2,r2,r10
960 add r5,r5,r12 @ h+=K256[i]
961 eor r2,r2,r4 @ Ch(e,f,g)
962 eor r0,r6,r6,ror#11
963 add r5,r5,r2 @ h+=Ch(e,f,g)
964 #if 14==31
965 and r12,r12,#0xff
966 cmp r12,#0xf2 @ done?
967 #endif
968 #if 14<15
969 # if __ARM_ARCH__>=7
970 ldr r2,[r1],#4 @ prefetch
971 # else
972 ldrb r2,[r1,#3]
973 # endif
974 eor r12,r6,r7 @ a^b, b^c in next round
975 #else
976 ldr r2,[sp,#0*4] @ from future BODY_16_xx
977 eor r12,r6,r7 @ a^b, b^c in next round
978 ldr r1,[sp,#13*4] @ from future BODY_16_xx
979 #endif
980 eor r0,r0,r6,ror#20 @ Sigma0(a)
981 and r3,r3,r12 @ (b^c)&=(a^b)
982 add r9,r9,r5 @ d+=h
983 eor r3,r3,r7 @ Maj(a,b,c)
984 add r5,r5,r0,ror#2 @ h+=Sigma0(a)
985 @ add r5,r5,r3 @ h+=Maj(a,b,c)
986 #if __ARM_ARCH__>=7
987 @ ldr r2,[r1],#4 @ 15
988 # if 15==15
989 str r1,[sp,#17*4] @ make room for r1
990 # endif
991 eor r0,r9,r9,ror#5
992 add r5,r5,r3 @ h+=Maj(a,b,c) from the past
993 eor r0,r0,r9,ror#19 @ Sigma1(e)
994 # ifndef __ARMEB__
995 rev r2,r2
996 # endif
997 #else
998 @ ldrb r2,[r1,#3] @ 15
999 add r5,r5,r3 @ h+=Maj(a,b,c) from the past
1000 ldrb r3,[r1,#2]
1001 ldrb r0,[r1,#1]
1002 orr r2,r2,r3,lsl#8
1003 ldrb r3,[r1],#4
1004 orr r2,r2,r0,lsl#16
1005 # if 15==15
1006 str r1,[sp,#17*4] @ make room for r1
1007 # endif
1008 eor r0,r9,r9,ror#5
1009 orr r2,r2,r3,lsl#24
1010 eor r0,r0,r9,ror#19 @ Sigma1(e)
1011 #endif
1012 ldr r3,[r14],#4 @ *K256++
1013 add r4,r4,r2 @ h+=X[i]
1014 str r2,[sp,#15*4]
1015 eor r2,r10,r11
1016 add r4,r4,r0,ror#6 @ h+=Sigma1(e)
1017 and r2,r2,r9
1018 add r4,r4,r3 @ h+=K256[i]
1019 eor r2,r2,r11 @ Ch(e,f,g)
1020 eor r0,r5,r5,ror#11
1021 add r4,r4,r2 @ h+=Ch(e,f,g)
1022 #if 15==31
1023 and r3,r3,#0xff
1024 cmp r3,#0xf2 @ done?
1025 #endif
1026 #if 15<15
1027 # if __ARM_ARCH__>=7
1028 ldr r2,[r1],#4 @ prefetch
1029 # else
1030 ldrb r2,[r1,#3]
1031 # endif
1032 eor r3,r5,r6 @ a^b, b^c in next round
1033 #else
1034 ldr r2,[sp,#1*4] @ from future BODY_16_xx
1035 eor r3,r5,r6 @ a^b, b^c in next round
1036 ldr r1,[sp,#14*4] @ from future BODY_16_xx
1037 #endif
1038 eor r0,r0,r5,ror#20 @ Sigma0(a)
1039 and r12,r12,r3 @ (b^c)&=(a^b)
1040 add r8,r8,r4 @ d+=h
1041 eor r12,r12,r6 @ Maj(a,b,c)
1042 add r4,r4,r0,ror#2 @ h+=Sigma0(a)
1043 @ add r4,r4,r12 @ h+=Maj(a,b,c)
1044 .Lrounds_16_xx:
1045 @ ldr r2,[sp,#1*4] @ 16
1046 @ ldr r1,[sp,#14*4]
1047 mov r0,r2,ror#7
1048 add r4,r4,r12 @ h+=Maj(a,b,c) from the past
1049 mov r12,r1,ror#17
1050 eor r0,r0,r2,ror#18
1051 eor r12,r12,r1,ror#19
1052 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1053 ldr r2,[sp,#0*4]
1054 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
1055 ldr r1,[sp,#9*4]
1056
1057 add r12,r12,r0
1058 eor r0,r8,r8,ror#5 @ from BODY_00_15
1059 add r2,r2,r12
1060 eor r0,r0,r8,ror#19 @ Sigma1(e)
1061 add r2,r2,r1 @ X[i]
1062 ldr r12,[r14],#4 @ *K256++
1063 add r11,r11,r2 @ h+=X[i]
1064 str r2,[sp,#0*4]
1065 eor r2,r9,r10
1066 add r11,r11,r0,ror#6 @ h+=Sigma1(e)
1067 and r2,r2,r8
1068 add r11,r11,r12 @ h+=K256[i]
1069 eor r2,r2,r10 @ Ch(e,f,g)
1070 eor r0,r4,r4,ror#11
1071 add r11,r11,r2 @ h+=Ch(e,f,g)
1072 #if 16==31
1073 and r12,r12,#0xff
1074 cmp r12,#0xf2 @ done?
1075 #endif
1076 #if 16<15
1077 # if __ARM_ARCH__>=7
1078 ldr r2,[r1],#4 @ prefetch
1079 # else
1080 ldrb r2,[r1,#3]
1081 # endif
1082 eor r12,r4,r5 @ a^b, b^c in next round
1083 #else
1084 ldr r2,[sp,#2*4] @ from future BODY_16_xx
1085 eor r12,r4,r5 @ a^b, b^c in next round
1086 ldr r1,[sp,#15*4] @ from future BODY_16_xx
1087 #endif
1088 eor r0,r0,r4,ror#20 @ Sigma0(a)
1089 and r3,r3,r12 @ (b^c)&=(a^b)
1090 add r7,r7,r11 @ d+=h
1091 eor r3,r3,r5 @ Maj(a,b,c)
1092 add r11,r11,r0,ror#2 @ h+=Sigma0(a)
1093 @ add r11,r11,r3 @ h+=Maj(a,b,c)
1094 @ ldr r2,[sp,#2*4] @ 17
1095 @ ldr r1,[sp,#15*4]
1096 mov r0,r2,ror#7
1097 add r11,r11,r3 @ h+=Maj(a,b,c) from the past
1098 mov r3,r1,ror#17
1099 eor r0,r0,r2,ror#18
1100 eor r3,r3,r1,ror#19
1101 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1102 ldr r2,[sp,#1*4]
1103 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
1104 ldr r1,[sp,#10*4]
1105
1106 add r3,r3,r0
1107 eor r0,r7,r7,ror#5 @ from BODY_00_15
1108 add r2,r2,r3
1109 eor r0,r0,r7,ror#19 @ Sigma1(e)
1110 add r2,r2,r1 @ X[i]
1111 ldr r3,[r14],#4 @ *K256++
1112 add r10,r10,r2 @ h+=X[i]
1113 str r2,[sp,#1*4]
1114 eor r2,r8,r9
1115 add r10,r10,r0,ror#6 @ h+=Sigma1(e)
1116 and r2,r2,r7
1117 add r10,r10,r3 @ h+=K256[i]
1118 eor r2,r2,r9 @ Ch(e,f,g)
1119 eor r0,r11,r11,ror#11
1120 add r10,r10,r2 @ h+=Ch(e,f,g)
1121 #if 17==31
1122 and r3,r3,#0xff
1123 cmp r3,#0xf2 @ done?
1124 #endif
1125 #if 17<15
1126 # if __ARM_ARCH__>=7
1127 ldr r2,[r1],#4 @ prefetch
1128 # else
1129 ldrb r2,[r1,#3]
1130 # endif
1131 eor r3,r11,r4 @ a^b, b^c in next round
1132 #else
1133 ldr r2,[sp,#3*4] @ from future BODY_16_xx
1134 eor r3,r11,r4 @ a^b, b^c in next round
1135 ldr r1,[sp,#0*4] @ from future BODY_16_xx
1136 #endif
1137 eor r0,r0,r11,ror#20 @ Sigma0(a)
1138 and r12,r12,r3 @ (b^c)&=(a^b)
1139 add r6,r6,r10 @ d+=h
1140 eor r12,r12,r4 @ Maj(a,b,c)
1141 add r10,r10,r0,ror#2 @ h+=Sigma0(a)
1142 @ add r10,r10,r12 @ h+=Maj(a,b,c)
1143 @ ldr r2,[sp,#3*4] @ 18
1144 @ ldr r1,[sp,#0*4]
1145 mov r0,r2,ror#7
1146 add r10,r10,r12 @ h+=Maj(a,b,c) from the past
1147 mov r12,r1,ror#17
1148 eor r0,r0,r2,ror#18
1149 eor r12,r12,r1,ror#19
1150 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1151 ldr r2,[sp,#2*4]
1152 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
1153 ldr r1,[sp,#11*4]
1154
1155 add r12,r12,r0
1156 eor r0,r6,r6,ror#5 @ from BODY_00_15
1157 add r2,r2,r12
1158 eor r0,r0,r6,ror#19 @ Sigma1(e)
1159 add r2,r2,r1 @ X[i]
1160 ldr r12,[r14],#4 @ *K256++
1161 add r9,r9,r2 @ h+=X[i]
1162 str r2,[sp,#2*4]
1163 eor r2,r7,r8
1164 add r9,r9,r0,ror#6 @ h+=Sigma1(e)
1165 and r2,r2,r6
1166 add r9,r9,r12 @ h+=K256[i]
1167 eor r2,r2,r8 @ Ch(e,f,g)
1168 eor r0,r10,r10,ror#11
1169 add r9,r9,r2 @ h+=Ch(e,f,g)
1170 #if 18==31
1171 and r12,r12,#0xff
1172 cmp r12,#0xf2 @ done?
1173 #endif
1174 #if 18<15
1175 # if __ARM_ARCH__>=7
1176 ldr r2,[r1],#4 @ prefetch
1177 # else
1178 ldrb r2,[r1,#3]
1179 # endif
1180 eor r12,r10,r11 @ a^b, b^c in next round
1181 #else
1182 ldr r2,[sp,#4*4] @ from future BODY_16_xx
1183 eor r12,r10,r11 @ a^b, b^c in next round
1184 ldr r1,[sp,#1*4] @ from future BODY_16_xx
1185 #endif
1186 eor r0,r0,r10,ror#20 @ Sigma0(a)
1187 and r3,r3,r12 @ (b^c)&=(a^b)
1188 add r5,r5,r9 @ d+=h
1189 eor r3,r3,r11 @ Maj(a,b,c)
1190 add r9,r9,r0,ror#2 @ h+=Sigma0(a)
1191 @ add r9,r9,r3 @ h+=Maj(a,b,c)
1192 @ ldr r2,[sp,#4*4] @ 19
1193 @ ldr r1,[sp,#1*4]
1194 mov r0,r2,ror#7
1195 add r9,r9,r3 @ h+=Maj(a,b,c) from the past
1196 mov r3,r1,ror#17
1197 eor r0,r0,r2,ror#18
1198 eor r3,r3,r1,ror#19
1199 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1200 ldr r2,[sp,#3*4]
1201 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
1202 ldr r1,[sp,#12*4]
1203
1204 add r3,r3,r0
1205 eor r0,r5,r5,ror#5 @ from BODY_00_15
1206 add r2,r2,r3
1207 eor r0,r0,r5,ror#19 @ Sigma1(e)
1208 add r2,r2,r1 @ X[i]
1209 ldr r3,[r14],#4 @ *K256++
1210 add r8,r8,r2 @ h+=X[i]
1211 str r2,[sp,#3*4]
1212 eor r2,r6,r7
1213 add r8,r8,r0,ror#6 @ h+=Sigma1(e)
1214 and r2,r2,r5
1215 add r8,r8,r3 @ h+=K256[i]
1216 eor r2,r2,r7 @ Ch(e,f,g)
1217 eor r0,r9,r9,ror#11
1218 add r8,r8,r2 @ h+=Ch(e,f,g)
1219 #if 19==31
1220 and r3,r3,#0xff
1221 cmp r3,#0xf2 @ done?
1222 #endif
1223 #if 19<15
1224 # if __ARM_ARCH__>=7
1225 ldr r2,[r1],#4 @ prefetch
1226 # else
1227 ldrb r2,[r1,#3]
1228 # endif
1229 eor r3,r9,r10 @ a^b, b^c in next round
1230 #else
1231 ldr r2,[sp,#5*4] @ from future BODY_16_xx
1232 eor r3,r9,r10 @ a^b, b^c in next round
1233 ldr r1,[sp,#2*4] @ from future BODY_16_xx
1234 #endif
1235 eor r0,r0,r9,ror#20 @ Sigma0(a)
1236 and r12,r12,r3 @ (b^c)&=(a^b)
1237 add r4,r4,r8 @ d+=h
1238 eor r12,r12,r10 @ Maj(a,b,c)
1239 add r8,r8,r0,ror#2 @ h+=Sigma0(a)
1240 @ add r8,r8,r12 @ h+=Maj(a,b,c)
1241 @ ldr r2,[sp,#5*4] @ 20
1242 @ ldr r1,[sp,#2*4]
1243 mov r0,r2,ror#7
1244 add r8,r8,r12 @ h+=Maj(a,b,c) from the past
1245 mov r12,r1,ror#17
1246 eor r0,r0,r2,ror#18
1247 eor r12,r12,r1,ror#19
1248 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1249 ldr r2,[sp,#4*4]
1250 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
1251 ldr r1,[sp,#13*4]
1252
1253 add r12,r12,r0
1254 eor r0,r4,r4,ror#5 @ from BODY_00_15
1255 add r2,r2,r12
1256 eor r0,r0,r4,ror#19 @ Sigma1(e)
1257 add r2,r2,r1 @ X[i]
1258 ldr r12,[r14],#4 @ *K256++
1259 add r7,r7,r2 @ h+=X[i]
1260 str r2,[sp,#4*4]
1261 eor r2,r5,r6
1262 add r7,r7,r0,ror#6 @ h+=Sigma1(e)
1263 and r2,r2,r4
1264 add r7,r7,r12 @ h+=K256[i]
1265 eor r2,r2,r6 @ Ch(e,f,g)
1266 eor r0,r8,r8,ror#11
1267 add r7,r7,r2 @ h+=Ch(e,f,g)
1268 #if 20==31
1269 and r12,r12,#0xff
1270 cmp r12,#0xf2 @ done?
1271 #endif
1272 #if 20<15
1273 # if __ARM_ARCH__>=7
1274 ldr r2,[r1],#4 @ prefetch
1275 # else
1276 ldrb r2,[r1,#3]
1277 # endif
1278 eor r12,r8,r9 @ a^b, b^c in next round
1279 #else
1280 ldr r2,[sp,#6*4] @ from future BODY_16_xx
1281 eor r12,r8,r9 @ a^b, b^c in next round
1282 ldr r1,[sp,#3*4] @ from future BODY_16_xx
1283 #endif
1284 eor r0,r0,r8,ror#20 @ Sigma0(a)
1285 and r3,r3,r12 @ (b^c)&=(a^b)
1286 add r11,r11,r7 @ d+=h
1287 eor r3,r3,r9 @ Maj(a,b,c)
1288 add r7,r7,r0,ror#2 @ h+=Sigma0(a)
1289 @ add r7,r7,r3 @ h+=Maj(a,b,c)
1290 @ ldr r2,[sp,#6*4] @ 21
1291 @ ldr r1,[sp,#3*4]
1292 mov r0,r2,ror#7
1293 add r7,r7,r3 @ h+=Maj(a,b,c) from the past
1294 mov r3,r1,ror#17
1295 eor r0,r0,r2,ror#18
1296 eor r3,r3,r1,ror#19
1297 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1298 ldr r2,[sp,#5*4]
1299 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
1300 ldr r1,[sp,#14*4]
1301
1302 add r3,r3,r0
1303 eor r0,r11,r11,ror#5 @ from BODY_00_15
1304 add r2,r2,r3
1305 eor r0,r0,r11,ror#19 @ Sigma1(e)
1306 add r2,r2,r1 @ X[i]
1307 ldr r3,[r14],#4 @ *K256++
1308 add r6,r6,r2 @ h+=X[i]
1309 str r2,[sp,#5*4]
1310 eor r2,r4,r5
1311 add r6,r6,r0,ror#6 @ h+=Sigma1(e)
1312 and r2,r2,r11
1313 add r6,r6,r3 @ h+=K256[i]
1314 eor r2,r2,r5 @ Ch(e,f,g)
1315 eor r0,r7,r7,ror#11
1316 add r6,r6,r2 @ h+=Ch(e,f,g)
1317 #if 21==31
1318 and r3,r3,#0xff
1319 cmp r3,#0xf2 @ done?
1320 #endif
1321 #if 21<15
1322 # if __ARM_ARCH__>=7
1323 ldr r2,[r1],#4 @ prefetch
1324 # else
1325 ldrb r2,[r1,#3]
1326 # endif
1327 eor r3,r7,r8 @ a^b, b^c in next round
1328 #else
1329 ldr r2,[sp,#7*4] @ from future BODY_16_xx
1330 eor r3,r7,r8 @ a^b, b^c in next round
1331 ldr r1,[sp,#4*4] @ from future BODY_16_xx
1332 #endif
1333 eor r0,r0,r7,ror#20 @ Sigma0(a)
1334 and r12,r12,r3 @ (b^c)&=(a^b)
1335 add r10,r10,r6 @ d+=h
1336 eor r12,r12,r8 @ Maj(a,b,c)
1337 add r6,r6,r0,ror#2 @ h+=Sigma0(a)
1338 @ add r6,r6,r12 @ h+=Maj(a,b,c)
1339 @ ldr r2,[sp,#7*4] @ 22
1340 @ ldr r1,[sp,#4*4]
1341 mov r0,r2,ror#7
1342 add r6,r6,r12 @ h+=Maj(a,b,c) from the past
1343 mov r12,r1,ror#17
1344 eor r0,r0,r2,ror#18
1345 eor r12,r12,r1,ror#19
1346 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1347 ldr r2,[sp,#6*4]
1348 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
1349 ldr r1,[sp,#15*4]
1350
1351 add r12,r12,r0
1352 eor r0,r10,r10,ror#5 @ from BODY_00_15
1353 add r2,r2,r12
1354 eor r0,r0,r10,ror#19 @ Sigma1(e)
1355 add r2,r2,r1 @ X[i]
1356 ldr r12,[r14],#4 @ *K256++
1357 add r5,r5,r2 @ h+=X[i]
1358 str r2,[sp,#6*4]
1359 eor r2,r11,r4
1360 add r5,r5,r0,ror#6 @ h+=Sigma1(e)
1361 and r2,r2,r10
1362 add r5,r5,r12 @ h+=K256[i]
1363 eor r2,r2,r4 @ Ch(e,f,g)
1364 eor r0,r6,r6,ror#11
1365 add r5,r5,r2 @ h+=Ch(e,f,g)
1366 #if 22==31
1367 and r12,r12,#0xff
1368 cmp r12,#0xf2 @ done?
1369 #endif
1370 #if 22<15
1371 # if __ARM_ARCH__>=7
1372 ldr r2,[r1],#4 @ prefetch
1373 # else
1374 ldrb r2,[r1,#3]
1375 # endif
1376 eor r12,r6,r7 @ a^b, b^c in next round
1377 #else
1378 ldr r2,[sp,#8*4] @ from future BODY_16_xx
1379 eor r12,r6,r7 @ a^b, b^c in next round
1380 ldr r1,[sp,#5*4] @ from future BODY_16_xx
1381 #endif
1382 eor r0,r0,r6,ror#20 @ Sigma0(a)
1383 and r3,r3,r12 @ (b^c)&=(a^b)
1384 add r9,r9,r5 @ d+=h
1385 eor r3,r3,r7 @ Maj(a,b,c)
1386 add r5,r5,r0,ror#2 @ h+=Sigma0(a)
1387 @ add r5,r5,r3 @ h+=Maj(a,b,c)
1388 @ ldr r2,[sp,#8*4] @ 23
1389 @ ldr r1,[sp,#5*4]
1390 mov r0,r2,ror#7
1391 add r5,r5,r3 @ h+=Maj(a,b,c) from the past
1392 mov r3,r1,ror#17
1393 eor r0,r0,r2,ror#18
1394 eor r3,r3,r1,ror#19
1395 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1396 ldr r2,[sp,#7*4]
1397 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
1398 ldr r1,[sp,#0*4]
1399
1400 add r3,r3,r0
1401 eor r0,r9,r9,ror#5 @ from BODY_00_15
1402 add r2,r2,r3
1403 eor r0,r0,r9,ror#19 @ Sigma1(e)
1404 add r2,r2,r1 @ X[i]
1405 ldr r3,[r14],#4 @ *K256++
1406 add r4,r4,r2 @ h+=X[i]
1407 str r2,[sp,#7*4]
1408 eor r2,r10,r11
1409 add r4,r4,r0,ror#6 @ h+=Sigma1(e)
1410 and r2,r2,r9
1411 add r4,r4,r3 @ h+=K256[i]
1412 eor r2,r2,r11 @ Ch(e,f,g)
1413 eor r0,r5,r5,ror#11
1414 add r4,r4,r2 @ h+=Ch(e,f,g)
1415 #if 23==31
1416 and r3,r3,#0xff
1417 cmp r3,#0xf2 @ done?
1418 #endif
1419 #if 23<15
1420 # if __ARM_ARCH__>=7
1421 ldr r2,[r1],#4 @ prefetch
1422 # else
1423 ldrb r2,[r1,#3]
1424 # endif
1425 eor r3,r5,r6 @ a^b, b^c in next round
1426 #else
1427 ldr r2,[sp,#9*4] @ from future BODY_16_xx
1428 eor r3,r5,r6 @ a^b, b^c in next round
1429 ldr r1,[sp,#6*4] @ from future BODY_16_xx
1430 #endif
1431 eor r0,r0,r5,ror#20 @ Sigma0(a)
1432 and r12,r12,r3 @ (b^c)&=(a^b)
1433 add r8,r8,r4 @ d+=h
1434 eor r12,r12,r6 @ Maj(a,b,c)
1435 add r4,r4,r0,ror#2 @ h+=Sigma0(a)
1436 @ add r4,r4,r12 @ h+=Maj(a,b,c)
1437 @ ldr r2,[sp,#9*4] @ 24
1438 @ ldr r1,[sp,#6*4]
1439 mov r0,r2,ror#7
1440 add r4,r4,r12 @ h+=Maj(a,b,c) from the past
1441 mov r12,r1,ror#17
1442 eor r0,r0,r2,ror#18
1443 eor r12,r12,r1,ror#19
1444 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1445 ldr r2,[sp,#8*4]
1446 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
1447 ldr r1,[sp,#1*4]
1448
1449 add r12,r12,r0
1450 eor r0,r8,r8,ror#5 @ from BODY_00_15
1451 add r2,r2,r12
1452 eor r0,r0,r8,ror#19 @ Sigma1(e)
1453 add r2,r2,r1 @ X[i]
1454 ldr r12,[r14],#4 @ *K256++
1455 add r11,r11,r2 @ h+=X[i]
1456 str r2,[sp,#8*4]
1457 eor r2,r9,r10
1458 add r11,r11,r0,ror#6 @ h+=Sigma1(e)
1459 and r2,r2,r8
1460 add r11,r11,r12 @ h+=K256[i]
1461 eor r2,r2,r10 @ Ch(e,f,g)
1462 eor r0,r4,r4,ror#11
1463 add r11,r11,r2 @ h+=Ch(e,f,g)
1464 #if 24==31
1465 and r12,r12,#0xff
1466 cmp r12,#0xf2 @ done?
1467 #endif
1468 #if 24<15
1469 # if __ARM_ARCH__>=7
1470 ldr r2,[r1],#4 @ prefetch
1471 # else
1472 ldrb r2,[r1,#3]
1473 # endif
1474 eor r12,r4,r5 @ a^b, b^c in next round
1475 #else
1476 ldr r2,[sp,#10*4] @ from future BODY_16_xx
1477 eor r12,r4,r5 @ a^b, b^c in next round
1478 ldr r1,[sp,#7*4] @ from future BODY_16_xx
1479 #endif
1480 eor r0,r0,r4,ror#20 @ Sigma0(a)
1481 and r3,r3,r12 @ (b^c)&=(a^b)
1482 add r7,r7,r11 @ d+=h
1483 eor r3,r3,r5 @ Maj(a,b,c)
1484 add r11,r11,r0,ror#2 @ h+=Sigma0(a)
1485 @ add r11,r11,r3 @ h+=Maj(a,b,c)
1486 @ ldr r2,[sp,#10*4] @ 25
1487 @ ldr r1,[sp,#7*4]
1488 mov r0,r2,ror#7
1489 add r11,r11,r3 @ h+=Maj(a,b,c) from the past
1490 mov r3,r1,ror#17
1491 eor r0,r0,r2,ror#18
1492 eor r3,r3,r1,ror#19
1493 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1494 ldr r2,[sp,#9*4]
1495 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
1496 ldr r1,[sp,#2*4]
1497
1498 add r3,r3,r0
1499 eor r0,r7,r7,ror#5 @ from BODY_00_15
1500 add r2,r2,r3
1501 eor r0,r0,r7,ror#19 @ Sigma1(e)
1502 add r2,r2,r1 @ X[i]
1503 ldr r3,[r14],#4 @ *K256++
1504 add r10,r10,r2 @ h+=X[i]
1505 str r2,[sp,#9*4]
1506 eor r2,r8,r9
1507 add r10,r10,r0,ror#6 @ h+=Sigma1(e)
1508 and r2,r2,r7
1509 add r10,r10,r3 @ h+=K256[i]
1510 eor r2,r2,r9 @ Ch(e,f,g)
1511 eor r0,r11,r11,ror#11
1512 add r10,r10,r2 @ h+=Ch(e,f,g)
1513 #if 25==31
1514 and r3,r3,#0xff
1515 cmp r3,#0xf2 @ done?
1516 #endif
1517 #if 25<15
1518 # if __ARM_ARCH__>=7
1519 ldr r2,[r1],#4 @ prefetch
1520 # else
1521 ldrb r2,[r1,#3]
1522 # endif
1523 eor r3,r11,r4 @ a^b, b^c in next round
1524 #else
1525 ldr r2,[sp,#11*4] @ from future BODY_16_xx
1526 eor r3,r11,r4 @ a^b, b^c in next round
1527 ldr r1,[sp,#8*4] @ from future BODY_16_xx
1528 #endif
1529 eor r0,r0,r11,ror#20 @ Sigma0(a)
1530 and r12,r12,r3 @ (b^c)&=(a^b)
1531 add r6,r6,r10 @ d+=h
1532 eor r12,r12,r4 @ Maj(a,b,c)
1533 add r10,r10,r0,ror#2 @ h+=Sigma0(a)
1534 @ add r10,r10,r12 @ h+=Maj(a,b,c)
1535 @ ldr r2,[sp,#11*4] @ 26
1536 @ ldr r1,[sp,#8*4]
1537 mov r0,r2,ror#7
1538 add r10,r10,r12 @ h+=Maj(a,b,c) from the past
1539 mov r12,r1,ror#17
1540 eor r0,r0,r2,ror#18
1541 eor r12,r12,r1,ror#19
1542 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1543 ldr r2,[sp,#10*4]
1544 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
1545 ldr r1,[sp,#3*4]
1546
1547 add r12,r12,r0
1548 eor r0,r6,r6,ror#5 @ from BODY_00_15
1549 add r2,r2,r12
1550 eor r0,r0,r6,ror#19 @ Sigma1(e)
1551 add r2,r2,r1 @ X[i]
1552 ldr r12,[r14],#4 @ *K256++
1553 add r9,r9,r2 @ h+=X[i]
1554 str r2,[sp,#10*4]
1555 eor r2,r7,r8
1556 add r9,r9,r0,ror#6 @ h+=Sigma1(e)
1557 and r2,r2,r6
1558 add r9,r9,r12 @ h+=K256[i]
1559 eor r2,r2,r8 @ Ch(e,f,g)
1560 eor r0,r10,r10,ror#11
1561 add r9,r9,r2 @ h+=Ch(e,f,g)
1562 #if 26==31
1563 and r12,r12,#0xff
1564 cmp r12,#0xf2 @ done?
1565 #endif
1566 #if 26<15
1567 # if __ARM_ARCH__>=7
1568 ldr r2,[r1],#4 @ prefetch
1569 # else
1570 ldrb r2,[r1,#3]
1571 # endif
1572 eor r12,r10,r11 @ a^b, b^c in next round
1573 #else
1574 ldr r2,[sp,#12*4] @ from future BODY_16_xx
1575 eor r12,r10,r11 @ a^b, b^c in next round
1576 ldr r1,[sp,#9*4] @ from future BODY_16_xx
1577 #endif
1578 eor r0,r0,r10,ror#20 @ Sigma0(a)
1579 and r3,r3,r12 @ (b^c)&=(a^b)
1580 add r5,r5,r9 @ d+=h
1581 eor r3,r3,r11 @ Maj(a,b,c)
1582 add r9,r9,r0,ror#2 @ h+=Sigma0(a)
1583 @ add r9,r9,r3 @ h+=Maj(a,b,c)
1584 @ ldr r2,[sp,#12*4] @ 27
1585 @ ldr r1,[sp,#9*4]
1586 mov r0,r2,ror#7
1587 add r9,r9,r3 @ h+=Maj(a,b,c) from the past
1588 mov r3,r1,ror#17
1589 eor r0,r0,r2,ror#18
1590 eor r3,r3,r1,ror#19
1591 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1592 ldr r2,[sp,#11*4]
1593 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
1594 ldr r1,[sp,#4*4]
1595
1596 add r3,r3,r0
1597 eor r0,r5,r5,ror#5 @ from BODY_00_15
1598 add r2,r2,r3
1599 eor r0,r0,r5,ror#19 @ Sigma1(e)
1600 add r2,r2,r1 @ X[i]
1601 ldr r3,[r14],#4 @ *K256++
1602 add r8,r8,r2 @ h+=X[i]
1603 str r2,[sp,#11*4]
1604 eor r2,r6,r7
1605 add r8,r8,r0,ror#6 @ h+=Sigma1(e)
1606 and r2,r2,r5
1607 add r8,r8,r3 @ h+=K256[i]
1608 eor r2,r2,r7 @ Ch(e,f,g)
1609 eor r0,r9,r9,ror#11
1610 add r8,r8,r2 @ h+=Ch(e,f,g)
1611 #if 27==31
1612 and r3,r3,#0xff
1613 cmp r3,#0xf2 @ done?
1614 #endif
1615 #if 27<15
1616 # if __ARM_ARCH__>=7
1617 ldr r2,[r1],#4 @ prefetch
1618 # else
1619 ldrb r2,[r1,#3]
1620 # endif
1621 eor r3,r9,r10 @ a^b, b^c in next round
1622 #else
1623 ldr r2,[sp,#13*4] @ from future BODY_16_xx
1624 eor r3,r9,r10 @ a^b, b^c in next round
1625 ldr r1,[sp,#10*4] @ from future BODY_16_xx
1626 #endif
1627 eor r0,r0,r9,ror#20 @ Sigma0(a)
1628 and r12,r12,r3 @ (b^c)&=(a^b)
1629 add r4,r4,r8 @ d+=h
1630 eor r12,r12,r10 @ Maj(a,b,c)
1631 add r8,r8,r0,ror#2 @ h+=Sigma0(a)
1632 @ add r8,r8,r12 @ h+=Maj(a,b,c)
1633 @ ldr r2,[sp,#13*4] @ 28
1634 @ ldr r1,[sp,#10*4]
1635 mov r0,r2,ror#7
1636 add r8,r8,r12 @ h+=Maj(a,b,c) from the past
1637 mov r12,r1,ror#17
1638 eor r0,r0,r2,ror#18
1639 eor r12,r12,r1,ror#19
1640 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1641 ldr r2,[sp,#12*4]
1642 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
1643 ldr r1,[sp,#5*4]
1644
1645 add r12,r12,r0
1646 eor r0,r4,r4,ror#5 @ from BODY_00_15
1647 add r2,r2,r12
1648 eor r0,r0,r4,ror#19 @ Sigma1(e)
1649 add r2,r2,r1 @ X[i]
1650 ldr r12,[r14],#4 @ *K256++
1651 add r7,r7,r2 @ h+=X[i]
1652 str r2,[sp,#12*4]
1653 eor r2,r5,r6
1654 add r7,r7,r0,ror#6 @ h+=Sigma1(e)
1655 and r2,r2,r4
1656 add r7,r7,r12 @ h+=K256[i]
1657 eor r2,r2,r6 @ Ch(e,f,g)
1658 eor r0,r8,r8,ror#11
1659 add r7,r7,r2 @ h+=Ch(e,f,g)
1660 #if 28==31
1661 and r12,r12,#0xff
1662 cmp r12,#0xf2 @ done?
1663 #endif
1664 #if 28<15
1665 # if __ARM_ARCH__>=7
1666 ldr r2,[r1],#4 @ prefetch
1667 # else
1668 ldrb r2,[r1,#3]
1669 # endif
1670 eor r12,r8,r9 @ a^b, b^c in next round
1671 #else
1672 ldr r2,[sp,#14*4] @ from future BODY_16_xx
1673 eor r12,r8,r9 @ a^b, b^c in next round
1674 ldr r1,[sp,#11*4] @ from future BODY_16_xx
1675 #endif
1676 eor r0,r0,r8,ror#20 @ Sigma0(a)
1677 and r3,r3,r12 @ (b^c)&=(a^b)
1678 add r11,r11,r7 @ d+=h
1679 eor r3,r3,r9 @ Maj(a,b,c)
1680 add r7,r7,r0,ror#2 @ h+=Sigma0(a)
1681 @ add r7,r7,r3 @ h+=Maj(a,b,c)
1682 @ ldr r2,[sp,#14*4] @ 29
1683 @ ldr r1,[sp,#11*4]
1684 mov r0,r2,ror#7
1685 add r7,r7,r3 @ h+=Maj(a,b,c) from the past
1686 mov r3,r1,ror#17
1687 eor r0,r0,r2,ror#18
1688 eor r3,r3,r1,ror#19
1689 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1690 ldr r2,[sp,#13*4]
1691 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
1692 ldr r1,[sp,#6*4]
1693
1694 add r3,r3,r0
1695 eor r0,r11,r11,ror#5 @ from BODY_00_15
1696 add r2,r2,r3
1697 eor r0,r0,r11,ror#19 @ Sigma1(e)
1698 add r2,r2,r1 @ X[i]
1699 ldr r3,[r14],#4 @ *K256++
1700 add r6,r6,r2 @ h+=X[i]
1701 str r2,[sp,#13*4]
1702 eor r2,r4,r5
1703 add r6,r6,r0,ror#6 @ h+=Sigma1(e)
1704 and r2,r2,r11
1705 add r6,r6,r3 @ h+=K256[i]
1706 eor r2,r2,r5 @ Ch(e,f,g)
1707 eor r0,r7,r7,ror#11
1708 add r6,r6,r2 @ h+=Ch(e,f,g)
1709 #if 29==31
1710 and r3,r3,#0xff
1711 cmp r3,#0xf2 @ done?
1712 #endif
1713 #if 29<15
1714 # if __ARM_ARCH__>=7
1715 ldr r2,[r1],#4 @ prefetch
1716 # else
1717 ldrb r2,[r1,#3]
1718 # endif
1719 eor r3,r7,r8 @ a^b, b^c in next round
1720 #else
1721 ldr r2,[sp,#15*4] @ from future BODY_16_xx
1722 eor r3,r7,r8 @ a^b, b^c in next round
1723 ldr r1,[sp,#12*4] @ from future BODY_16_xx
1724 #endif
1725 eor r0,r0,r7,ror#20 @ Sigma0(a)
1726 and r12,r12,r3 @ (b^c)&=(a^b)
1727 add r10,r10,r6 @ d+=h
1728 eor r12,r12,r8 @ Maj(a,b,c)
1729 add r6,r6,r0,ror#2 @ h+=Sigma0(a)
1730 @ add r6,r6,r12 @ h+=Maj(a,b,c)
1731 @ ldr r2,[sp,#15*4] @ 30
1732 @ ldr r1,[sp,#12*4]
1733 mov r0,r2,ror#7
1734 add r6,r6,r12 @ h+=Maj(a,b,c) from the past
1735 mov r12,r1,ror#17
1736 eor r0,r0,r2,ror#18
1737 eor r12,r12,r1,ror#19
1738 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1739 ldr r2,[sp,#14*4]
1740 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
1741 ldr r1,[sp,#7*4]
1742
1743 add r12,r12,r0
1744 eor r0,r10,r10,ror#5 @ from BODY_00_15
1745 add r2,r2,r12
1746 eor r0,r0,r10,ror#19 @ Sigma1(e)
1747 add r2,r2,r1 @ X[i]
1748 ldr r12,[r14],#4 @ *K256++
1749 add r5,r5,r2 @ h+=X[i]
1750 str r2,[sp,#14*4]
1751 eor r2,r11,r4
1752 add r5,r5,r0,ror#6 @ h+=Sigma1(e)
1753 and r2,r2,r10
1754 add r5,r5,r12 @ h+=K256[i]
1755 eor r2,r2,r4 @ Ch(e,f,g)
1756 eor r0,r6,r6,ror#11
1757 add r5,r5,r2 @ h+=Ch(e,f,g)
1758 #if 30==31
1759 and r12,r12,#0xff
1760 cmp r12,#0xf2 @ done?
1761 #endif
1762 #if 30<15
1763 # if __ARM_ARCH__>=7
1764 ldr r2,[r1],#4 @ prefetch
1765 # else
1766 ldrb r2,[r1,#3]
1767 # endif
1768 eor r12,r6,r7 @ a^b, b^c in next round
1769 #else
1770 ldr r2,[sp,#0*4] @ from future BODY_16_xx
1771 eor r12,r6,r7 @ a^b, b^c in next round
1772 ldr r1,[sp,#13*4] @ from future BODY_16_xx
1773 #endif
1774 eor r0,r0,r6,ror#20 @ Sigma0(a)
1775 and r3,r3,r12 @ (b^c)&=(a^b)
1776 add r9,r9,r5 @ d+=h
1777 eor r3,r3,r7 @ Maj(a,b,c)
1778 add r5,r5,r0,ror#2 @ h+=Sigma0(a)
1779 @ add r5,r5,r3 @ h+=Maj(a,b,c)
1780 @ ldr r2,[sp,#0*4] @ 31
1781 @ ldr r1,[sp,#13*4]
1782 mov r0,r2,ror#7
1783 add r5,r5,r3 @ h+=Maj(a,b,c) from the past
1784 mov r3,r1,ror#17
1785 eor r0,r0,r2,ror#18
1786 eor r3,r3,r1,ror#19
1787 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1788 ldr r2,[sp,#15*4]
1789 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
1790 ldr r1,[sp,#8*4]
1791
1792 add r3,r3,r0
1793 eor r0,r9,r9,ror#5 @ from BODY_00_15
1794 add r2,r2,r3
1795 eor r0,r0,r9,ror#19 @ Sigma1(e)
1796 add r2,r2,r1 @ X[i]
1797 ldr r3,[r14],#4 @ *K256++
1798 add r4,r4,r2 @ h+=X[i]
1799 str r2,[sp,#15*4]
1800 eor r2,r10,r11
1801 add r4,r4,r0,ror#6 @ h+=Sigma1(e)
1802 and r2,r2,r9
1803 add r4,r4,r3 @ h+=K256[i]
1804 eor r2,r2,r11 @ Ch(e,f,g)
1805 eor r0,r5,r5,ror#11
1806 add r4,r4,r2 @ h+=Ch(e,f,g)
1807 #if 31==31
1808 and r3,r3,#0xff
1809 cmp r3,#0xf2 @ done?
1810 #endif
1811 #if 31<15
1812 # if __ARM_ARCH__>=7
1813 ldr r2,[r1],#4 @ prefetch
1814 # else
1815 ldrb r2,[r1,#3]
1816 # endif
1817 eor r3,r5,r6 @ a^b, b^c in next round
1818 #else
1819 ldr r2,[sp,#1*4] @ from future BODY_16_xx
1820 eor r3,r5,r6 @ a^b, b^c in next round
1821 ldr r1,[sp,#14*4] @ from future BODY_16_xx
1822 #endif
1823 eor r0,r0,r5,ror#20 @ Sigma0(a)
1824 and r12,r12,r3 @ (b^c)&=(a^b)
1825 add r8,r8,r4 @ d+=h
1826 eor r12,r12,r6 @ Maj(a,b,c)
1827 add r4,r4,r0,ror#2 @ h+=Sigma0(a)
1828 @ add r4,r4,r12 @ h+=Maj(a,b,c)
1829 #if __ARM_ARCH__>=7
1830 ite eq @ Thumb2 thing, sanity check in ARM
1831 #endif
1832 ldreq r3,[sp,#16*4] @ pull ctx
1833 bne .Lrounds_16_xx
1834
1835 add r4,r4,r12 @ h+=Maj(a,b,c) from the past
1836 ldr r0,[r3,#0]
1837 ldr r2,[r3,#4]
1838 ldr r12,[r3,#8]
1839 add r4,r4,r0
1840 ldr r0,[r3,#12]
1841 add r5,r5,r2
1842 ldr r2,[r3,#16]
1843 add r6,r6,r12
1844 ldr r12,[r3,#20]
1845 add r7,r7,r0
1846 ldr r0,[r3,#24]
1847 add r8,r8,r2
1848 ldr r2,[r3,#28]
1849 add r9,r9,r12
1850 ldr r1,[sp,#17*4] @ pull inp
1851 ldr r12,[sp,#18*4] @ pull inp+len
1852 add r10,r10,r0
1853 add r11,r11,r2
1854 stmia r3,{r4,r5,r6,r7,r8,r9,r10,r11}
1855 cmp r1,r12
1856 sub r14,r14,#256 @ rewind Ktbl
1857 bne .Loop
1858
1859 add sp,sp,#19*4 @ destroy frame
1860 #if __ARM_ARCH__>=5
1861 ldmia sp!,{r4-r11,pc}
1862 #else
1863 ldmia sp!,{r4-r11,lr}
1864 tst lr,#1
1865 moveq pc,lr @ be binary compatible with V4, yet
1866 .word 0xe12fff1e @ interoperable with Thumb ISA:-)
1867 #endif
1868 .size sha256_block_data_order,.-sha256_block_data_order
1869 #if __ARM_MAX_ARCH__>=7
1870 .arch armv7-a
1871 .fpu neon
1872
1873 .global sha256_block_data_order_neon
1874 .type sha256_block_data_order_neon,%function
1875 .align 4
1876 sha256_block_data_order_neon:
1877 .LNEON:
1878 stmdb sp!,{r4-r12,lr}
1879
1880 sub r11,sp,#16*4+16
1881 adrl r14,K256
1882 bic r11,r11,#15 @ align for 128-bit stores
1883 mov r12,sp
1884 mov sp,r11 @ alloca
1885 add r2,r1,r2,lsl#6 @ len to point at the end of inp
1886
1887 vld1.8 {q0},[r1]!
1888 vld1.8 {q1},[r1]!
1889 vld1.8 {q2},[r1]!
1890 vld1.8 {q3},[r1]!
1891 vld1.32 {q8},[r14,:128]!
1892 vld1.32 {q9},[r14,:128]!
1893 vld1.32 {q10},[r14,:128]!
1894 vld1.32 {q11},[r14,:128]!
1895 vrev32.8 q0,q0 @ yes, even on
1896 str r0,[sp,#64]
1897 vrev32.8 q1,q1 @ big-endian
1898 str r1,[sp,#68]
1899 mov r1,sp
1900 vrev32.8 q2,q2
1901 str r2,[sp,#72]
1902 vrev32.8 q3,q3
1903 str r12,[sp,#76] @ save original sp
1904 vadd.i32 q8,q8,q0
1905 vadd.i32 q9,q9,q1
1906 vst1.32 {q8},[r1,:128]!
1907 vadd.i32 q10,q10,q2
1908 vst1.32 {q9},[r1,:128]!
1909 vadd.i32 q11,q11,q3
1910 vst1.32 {q10},[r1,:128]!
1911 vst1.32 {q11},[r1,:128]!
1912
1913 ldmia r0,{r4-r11}
1914 sub r1,r1,#64
1915 ldr r2,[sp,#0]
1916 eor r12,r12,r12
1917 eor r3,r5,r6
1918 b .L_00_48
1919
1920 .align 4
1921 .L_00_48:
1922 vext.8 q8,q0,q1,#4
1923 add r11,r11,r2
1924 eor r2,r9,r10
1925 eor r0,r8,r8,ror#5
1926 vext.8 q9,q2,q3,#4
1927 add r4,r4,r12
1928 and r2,r2,r8
1929 eor r12,r0,r8,ror#19
1930 vshr.u32 q10,q8,#7
1931 eor r0,r4,r4,ror#11
1932 eor r2,r2,r10
1933 vadd.i32 q0,q0,q9
1934 add r11,r11,r12,ror#6
1935 eor r12,r4,r5
1936 vshr.u32 q9,q8,#3
1937 eor r0,r0,r4,ror#20
1938 add r11,r11,r2
1939 vsli.32 q10,q8,#25
1940 ldr r2,[sp,#4]
1941 and r3,r3,r12
1942 vshr.u32 q11,q8,#18
1943 add r7,r7,r11
1944 add r11,r11,r0,ror#2
1945 eor r3,r3,r5
1946 veor q9,q9,q10
1947 add r10,r10,r2
1948 vsli.32 q11,q8,#14
1949 eor r2,r8,r9
1950 eor r0,r7,r7,ror#5
1951 vshr.u32 d24,d7,#17
1952 add r11,r11,r3
1953 and r2,r2,r7
1954 veor q9,q9,q11
1955 eor r3,r0,r7,ror#19
1956 eor r0,r11,r11,ror#11
1957 vsli.32 d24,d7,#15
1958 eor r2,r2,r9
1959 add r10,r10,r3,ror#6
1960 vshr.u32 d25,d7,#10
1961 eor r3,r11,r4
1962 eor r0,r0,r11,ror#20
1963 vadd.i32 q0,q0,q9
1964 add r10,r10,r2
1965 ldr r2,[sp,#8]
1966 veor d25,d25,d24
1967 and r12,r12,r3
1968 add r6,r6,r10
1969 vshr.u32 d24,d7,#19
1970 add r10,r10,r0,ror#2
1971 eor r12,r12,r4
1972 vsli.32 d24,d7,#13
1973 add r9,r9,r2
1974 eor r2,r7,r8
1975 veor d25,d25,d24
1976 eor r0,r6,r6,ror#5
1977 add r10,r10,r12
1978 vadd.i32 d0,d0,d25
1979 and r2,r2,r6
1980 eor r12,r0,r6,ror#19
1981 vshr.u32 d24,d0,#17
1982 eor r0,r10,r10,ror#11
1983 eor r2,r2,r8
1984 vsli.32 d24,d0,#15
1985 add r9,r9,r12,ror#6
1986 eor r12,r10,r11
1987 vshr.u32 d25,d0,#10
1988 eor r0,r0,r10,ror#20
1989 add r9,r9,r2
1990 veor d25,d25,d24
1991 ldr r2,[sp,#12]
1992 and r3,r3,r12
1993 vshr.u32 d24,d0,#19
1994 add r5,r5,r9
1995 add r9,r9,r0,ror#2
1996 eor r3,r3,r11
1997 vld1.32 {q8},[r14,:128]!
1998 add r8,r8,r2
1999 vsli.32 d24,d0,#13
2000 eor r2,r6,r7
2001 eor r0,r5,r5,ror#5
2002 veor d25,d25,d24
2003 add r9,r9,r3
2004 and r2,r2,r5
2005 vadd.i32 d1,d1,d25
2006 eor r3,r0,r5,ror#19
2007 eor r0,r9,r9,ror#11
2008 vadd.i32 q8,q8,q0
2009 eor r2,r2,r7
2010 add r8,r8,r3,ror#6
2011 eor r3,r9,r10
2012 eor r0,r0,r9,ror#20
2013 add r8,r8,r2
2014 ldr r2,[sp,#16]
2015 and r12,r12,r3
2016 add r4,r4,r8
2017 vst1.32 {q8},[r1,:128]!
2018 add r8,r8,r0,ror#2
2019 eor r12,r12,r10
2020 vext.8 q8,q1,q2,#4
2021 add r7,r7,r2
2022 eor r2,r5,r6
2023 eor r0,r4,r4,ror#5
2024 vext.8 q9,q3,q0,#4
2025 add r8,r8,r12
2026 and r2,r2,r4
2027 eor r12,r0,r4,ror#19
2028 vshr.u32 q10,q8,#7
2029 eor r0,r8,r8,ror#11
2030 eor r2,r2,r6
2031 vadd.i32 q1,q1,q9
2032 add r7,r7,r12,ror#6
2033 eor r12,r8,r9
2034 vshr.u32 q9,q8,#3
2035 eor r0,r0,r8,ror#20
2036 add r7,r7,r2
2037 vsli.32 q10,q8,#25
2038 ldr r2,[sp,#20]
2039 and r3,r3,r12
2040 vshr.u32 q11,q8,#18
2041 add r11,r11,r7
2042 add r7,r7,r0,ror#2
2043 eor r3,r3,r9
2044 veor q9,q9,q10
2045 add r6,r6,r2
2046 vsli.32 q11,q8,#14
2047 eor r2,r4,r5
2048 eor r0,r11,r11,ror#5
2049 vshr.u32 d24,d1,#17
2050 add r7,r7,r3
2051 and r2,r2,r11
2052 veor q9,q9,q11
2053 eor r3,r0,r11,ror#19
2054 eor r0,r7,r7,ror#11
2055 vsli.32 d24,d1,#15
2056 eor r2,r2,r5
2057 add r6,r6,r3,ror#6
2058 vshr.u32 d25,d1,#10
2059 eor r3,r7,r8
2060 eor r0,r0,r7,ror#20
2061 vadd.i32 q1,q1,q9
2062 add r6,r6,r2
2063 ldr r2,[sp,#24]
2064 veor d25,d25,d24
2065 and r12,r12,r3
2066 add r10,r10,r6
2067 vshr.u32 d24,d1,#19
2068 add r6,r6,r0,ror#2
2069 eor r12,r12,r8
2070 vsli.32 d24,d1,#13
2071 add r5,r5,r2
2072 eor r2,r11,r4
2073 veor d25,d25,d24
2074 eor r0,r10,r10,ror#5
2075 add r6,r6,r12
2076 vadd.i32 d2,d2,d25
2077 and r2,r2,r10
2078 eor r12,r0,r10,ror#19
2079 vshr.u32 d24,d2,#17
2080 eor r0,r6,r6,ror#11
2081 eor r2,r2,r4
2082 vsli.32 d24,d2,#15
2083 add r5,r5,r12,ror#6
2084 eor r12,r6,r7
2085 vshr.u32 d25,d2,#10
2086 eor r0,r0,r6,ror#20
2087 add r5,r5,r2
2088 veor d25,d25,d24
2089 ldr r2,[sp,#28]
2090 and r3,r3,r12
2091 vshr.u32 d24,d2,#19
2092 add r9,r9,r5
2093 add r5,r5,r0,ror#2
2094 eor r3,r3,r7
2095 vld1.32 {q8},[r14,:128]!
2096 add r4,r4,r2
2097 vsli.32 d24,d2,#13
2098 eor r2,r10,r11
2099 eor r0,r9,r9,ror#5
2100 veor d25,d25,d24
2101 add r5,r5,r3
2102 and r2,r2,r9
2103 vadd.i32 d3,d3,d25
2104 eor r3,r0,r9,ror#19
2105 eor r0,r5,r5,ror#11
2106 vadd.i32 q8,q8,q1
2107 eor r2,r2,r11
2108 add r4,r4,r3,ror#6
2109 eor r3,r5,r6
2110 eor r0,r0,r5,ror#20
2111 add r4,r4,r2
2112 ldr r2,[sp,#32]
2113 and r12,r12,r3
2114 add r8,r8,r4
2115 vst1.32 {q8},[r1,:128]!
2116 add r4,r4,r0,ror#2
2117 eor r12,r12,r6
2118 vext.8 q8,q2,q3,#4
2119 add r11,r11,r2
2120 eor r2,r9,r10
2121 eor r0,r8,r8,ror#5
2122 vext.8 q9,q0,q1,#4
2123 add r4,r4,r12
2124 and r2,r2,r8
2125 eor r12,r0,r8,ror#19
2126 vshr.u32 q10,q8,#7
2127 eor r0,r4,r4,ror#11
2128 eor r2,r2,r10
2129 vadd.i32 q2,q2,q9
2130 add r11,r11,r12,ror#6
2131 eor r12,r4,r5
2132 vshr.u32 q9,q8,#3
2133 eor r0,r0,r4,ror#20
2134 add r11,r11,r2
2135 vsli.32 q10,q8,#25
2136 ldr r2,[sp,#36]
2137 and r3,r3,r12
2138 vshr.u32 q11,q8,#18
2139 add r7,r7,r11
2140 add r11,r11,r0,ror#2
2141 eor r3,r3,r5
2142 veor q9,q9,q10
2143 add r10,r10,r2
2144 vsli.32 q11,q8,#14
2145 eor r2,r8,r9
2146 eor r0,r7,r7,ror#5
2147 vshr.u32 d24,d3,#17
2148 add r11,r11,r3
2149 and r2,r2,r7
2150 veor q9,q9,q11
2151 eor r3,r0,r7,ror#19
2152 eor r0,r11,r11,ror#11
2153 vsli.32 d24,d3,#15
2154 eor r2,r2,r9
2155 add r10,r10,r3,ror#6
2156 vshr.u32 d25,d3,#10
2157 eor r3,r11,r4
2158 eor r0,r0,r11,ror#20
2159 vadd.i32 q2,q2,q9
2160 add r10,r10,r2
2161 ldr r2,[sp,#40]
2162 veor d25,d25,d24
2163 and r12,r12,r3
2164 add r6,r6,r10
2165 vshr.u32 d24,d3,#19
2166 add r10,r10,r0,ror#2
2167 eor r12,r12,r4
2168 vsli.32 d24,d3,#13
2169 add r9,r9,r2
2170 eor r2,r7,r8
2171 veor d25,d25,d24
2172 eor r0,r6,r6,ror#5
2173 add r10,r10,r12
2174 vadd.i32 d4,d4,d25
2175 and r2,r2,r6
2176 eor r12,r0,r6,ror#19
2177 vshr.u32 d24,d4,#17
2178 eor r0,r10,r10,ror#11
2179 eor r2,r2,r8
2180 vsli.32 d24,d4,#15
2181 add r9,r9,r12,ror#6
2182 eor r12,r10,r11
2183 vshr.u32 d25,d4,#10
2184 eor r0,r0,r10,ror#20
2185 add r9,r9,r2
2186 veor d25,d25,d24
2187 ldr r2,[sp,#44]
2188 and r3,r3,r12
2189 vshr.u32 d24,d4,#19
2190 add r5,r5,r9
2191 add r9,r9,r0,ror#2
2192 eor r3,r3,r11
2193 vld1.32 {q8},[r14,:128]!
2194 add r8,r8,r2
2195 vsli.32 d24,d4,#13
2196 eor r2,r6,r7
2197 eor r0,r5,r5,ror#5
2198 veor d25,d25,d24
2199 add r9,r9,r3
2200 and r2,r2,r5
2201 vadd.i32 d5,d5,d25
2202 eor r3,r0,r5,ror#19
2203 eor r0,r9,r9,ror#11
2204 vadd.i32 q8,q8,q2
2205 eor r2,r2,r7
2206 add r8,r8,r3,ror#6
2207 eor r3,r9,r10
2208 eor r0,r0,r9,ror#20
2209 add r8,r8,r2
2210 ldr r2,[sp,#48]
2211 and r12,r12,r3
2212 add r4,r4,r8
2213 vst1.32 {q8},[r1,:128]!
2214 add r8,r8,r0,ror#2
2215 eor r12,r12,r10
2216 vext.8 q8,q3,q0,#4
2217 add r7,r7,r2
2218 eor r2,r5,r6
2219 eor r0,r4,r4,ror#5
2220 vext.8 q9,q1,q2,#4
2221 add r8,r8,r12
2222 and r2,r2,r4
2223 eor r12,r0,r4,ror#19
2224 vshr.u32 q10,q8,#7
2225 eor r0,r8,r8,ror#11
2226 eor r2,r2,r6
2227 vadd.i32 q3,q3,q9
2228 add r7,r7,r12,ror#6
2229 eor r12,r8,r9
2230 vshr.u32 q9,q8,#3
2231 eor r0,r0,r8,ror#20
2232 add r7,r7,r2
2233 vsli.32 q10,q8,#25
2234 ldr r2,[sp,#52]
2235 and r3,r3,r12
2236 vshr.u32 q11,q8,#18
2237 add r11,r11,r7
2238 add r7,r7,r0,ror#2
2239 eor r3,r3,r9
2240 veor q9,q9,q10
2241 add r6,r6,r2
2242 vsli.32 q11,q8,#14
2243 eor r2,r4,r5
2244 eor r0,r11,r11,ror#5
2245 vshr.u32 d24,d5,#17
2246 add r7,r7,r3
2247 and r2,r2,r11
2248 veor q9,q9,q11
2249 eor r3,r0,r11,ror#19
2250 eor r0,r7,r7,ror#11
2251 vsli.32 d24,d5,#15
2252 eor r2,r2,r5
2253 add r6,r6,r3,ror#6
2254 vshr.u32 d25,d5,#10
2255 eor r3,r7,r8
2256 eor r0,r0,r7,ror#20
2257 vadd.i32 q3,q3,q9
2258 add r6,r6,r2
2259 ldr r2,[sp,#56]
2260 veor d25,d25,d24
2261 and r12,r12,r3
2262 add r10,r10,r6
2263 vshr.u32 d24,d5,#19
2264 add r6,r6,r0,ror#2
2265 eor r12,r12,r8
2266 vsli.32 d24,d5,#13
2267 add r5,r5,r2
2268 eor r2,r11,r4
2269 veor d25,d25,d24
2270 eor r0,r10,r10,ror#5
2271 add r6,r6,r12
2272 vadd.i32 d6,d6,d25
2273 and r2,r2,r10
2274 eor r12,r0,r10,ror#19
2275 vshr.u32 d24,d6,#17
2276 eor r0,r6,r6,ror#11
2277 eor r2,r2,r4
2278 vsli.32 d24,d6,#15
2279 add r5,r5,r12,ror#6
2280 eor r12,r6,r7
2281 vshr.u32 d25,d6,#10
2282 eor r0,r0,r6,ror#20
2283 add r5,r5,r2
2284 veor d25,d25,d24
2285 ldr r2,[sp,#60]
2286 and r3,r3,r12
2287 vshr.u32 d24,d6,#19
2288 add r9,r9,r5
2289 add r5,r5,r0,ror#2
2290 eor r3,r3,r7
2291 vld1.32 {q8},[r14,:128]!
2292 add r4,r4,r2
2293 vsli.32 d24,d6,#13
2294 eor r2,r10,r11
2295 eor r0,r9,r9,ror#5
2296 veor d25,d25,d24
2297 add r5,r5,r3
2298 and r2,r2,r9
2299 vadd.i32 d7,d7,d25
2300 eor r3,r0,r9,ror#19
2301 eor r0,r5,r5,ror#11
2302 vadd.i32 q8,q8,q3
2303 eor r2,r2,r11
2304 add r4,r4,r3,ror#6
2305 eor r3,r5,r6
2306 eor r0,r0,r5,ror#20
2307 add r4,r4,r2
2308 ldr r2,[r14]
2309 and r12,r12,r3
2310 add r8,r8,r4
2311 vst1.32 {q8},[r1,:128]!
2312 add r4,r4,r0,ror#2
2313 eor r12,r12,r6
2314 teq r2,#0 @ check for K256 terminator
2315 ldr r2,[sp,#0]
2316 sub r1,r1,#64
2317 bne .L_00_48
2318
2319 ldr r1,[sp,#68]
2320 ldr r0,[sp,#72]
2321 sub r14,r14,#256 @ rewind r14
2322 teq r1,r0
2323 it eq
2324 subeq r1,r1,#64 @ avoid SEGV
2325 vld1.8 {q0},[r1]! @ load next input block
2326 vld1.8 {q1},[r1]!
2327 vld1.8 {q2},[r1]!
2328 vld1.8 {q3},[r1]!
2329 it ne
2330 strne r1,[sp,#68]
2331 mov r1,sp
2332 add r11,r11,r2
2333 eor r2,r9,r10
2334 eor r0,r8,r8,ror#5
2335 add r4,r4,r12
2336 vld1.32 {q8},[r14,:128]!
2337 and r2,r2,r8
2338 eor r12,r0,r8,ror#19
2339 eor r0,r4,r4,ror#11
2340 eor r2,r2,r10
2341 vrev32.8 q0,q0
2342 add r11,r11,r12,ror#6
2343 eor r12,r4,r5
2344 eor r0,r0,r4,ror#20
2345 add r11,r11,r2
2346 vadd.i32 q8,q8,q0
2347 ldr r2,[sp,#4]
2348 and r3,r3,r12
2349 add r7,r7,r11
2350 add r11,r11,r0,ror#2
2351 eor r3,r3,r5
2352 add r10,r10,r2
2353 eor r2,r8,r9
2354 eor r0,r7,r7,ror#5
2355 add r11,r11,r3
2356 and r2,r2,r7
2357 eor r3,r0,r7,ror#19
2358 eor r0,r11,r11,ror#11
2359 eor r2,r2,r9
2360 add r10,r10,r3,ror#6
2361 eor r3,r11,r4
2362 eor r0,r0,r11,ror#20
2363 add r10,r10,r2
2364 ldr r2,[sp,#8]
2365 and r12,r12,r3
2366 add r6,r6,r10
2367 add r10,r10,r0,ror#2
2368 eor r12,r12,r4
2369 add r9,r9,r2
2370 eor r2,r7,r8
2371 eor r0,r6,r6,ror#5
2372 add r10,r10,r12
2373 and r2,r2,r6
2374 eor r12,r0,r6,ror#19
2375 eor r0,r10,r10,ror#11
2376 eor r2,r2,r8
2377 add r9,r9,r12,ror#6
2378 eor r12,r10,r11
2379 eor r0,r0,r10,ror#20
2380 add r9,r9,r2
2381 ldr r2,[sp,#12]
2382 and r3,r3,r12
2383 add r5,r5,r9
2384 add r9,r9,r0,ror#2
2385 eor r3,r3,r11
2386 add r8,r8,r2
2387 eor r2,r6,r7
2388 eor r0,r5,r5,ror#5
2389 add r9,r9,r3
2390 and r2,r2,r5
2391 eor r3,r0,r5,ror#19
2392 eor r0,r9,r9,ror#11
2393 eor r2,r2,r7
2394 add r8,r8,r3,ror#6
2395 eor r3,r9,r10
2396 eor r0,r0,r9,ror#20
2397 add r8,r8,r2
2398 ldr r2,[sp,#16]
2399 and r12,r12,r3
2400 add r4,r4,r8
2401 add r8,r8,r0,ror#2
2402 eor r12,r12,r10
2403 vst1.32 {q8},[r1,:128]!
2404 add r7,r7,r2
2405 eor r2,r5,r6
2406 eor r0,r4,r4,ror#5
2407 add r8,r8,r12
2408 vld1.32 {q8},[r14,:128]!
2409 and r2,r2,r4
2410 eor r12,r0,r4,ror#19
2411 eor r0,r8,r8,ror#11
2412 eor r2,r2,r6
2413 vrev32.8 q1,q1
2414 add r7,r7,r12,ror#6
2415 eor r12,r8,r9
2416 eor r0,r0,r8,ror#20
2417 add r7,r7,r2
2418 vadd.i32 q8,q8,q1
2419 ldr r2,[sp,#20]
2420 and r3,r3,r12
2421 add r11,r11,r7
2422 add r7,r7,r0,ror#2
2423 eor r3,r3,r9
2424 add r6,r6,r2
2425 eor r2,r4,r5
2426 eor r0,r11,r11,ror#5
2427 add r7,r7,r3
2428 and r2,r2,r11
2429 eor r3,r0,r11,ror#19
2430 eor r0,r7,r7,ror#11
2431 eor r2,r2,r5
2432 add r6,r6,r3,ror#6
2433 eor r3,r7,r8
2434 eor r0,r0,r7,ror#20
2435 add r6,r6,r2
2436 ldr r2,[sp,#24]
2437 and r12,r12,r3
2438 add r10,r10,r6
2439 add r6,r6,r0,ror#2
2440 eor r12,r12,r8
2441 add r5,r5,r2
2442 eor r2,r11,r4
2443 eor r0,r10,r10,ror#5
2444 add r6,r6,r12
2445 and r2,r2,r10
2446 eor r12,r0,r10,ror#19
2447 eor r0,r6,r6,ror#11
2448 eor r2,r2,r4
2449 add r5,r5,r12,ror#6
2450 eor r12,r6,r7
2451 eor r0,r0,r6,ror#20
2452 add r5,r5,r2
2453 ldr r2,[sp,#28]
2454 and r3,r3,r12
2455 add r9,r9,r5
2456 add r5,r5,r0,ror#2
2457 eor r3,r3,r7
2458 add r4,r4,r2
2459 eor r2,r10,r11
2460 eor r0,r9,r9,ror#5
2461 add r5,r5,r3
2462 and r2,r2,r9
2463 eor r3,r0,r9,ror#19
2464 eor r0,r5,r5,ror#11
2465 eor r2,r2,r11
2466 add r4,r4,r3,ror#6
2467 eor r3,r5,r6
2468 eor r0,r0,r5,ror#20
2469 add r4,r4,r2
2470 ldr r2,[sp,#32]
2471 and r12,r12,r3
2472 add r8,r8,r4
2473 add r4,r4,r0,ror#2
2474 eor r12,r12,r6
2475 vst1.32 {q8},[r1,:128]!
2476 add r11,r11,r2
2477 eor r2,r9,r10
2478 eor r0,r8,r8,ror#5
2479 add r4,r4,r12
2480 vld1.32 {q8},[r14,:128]!
2481 and r2,r2,r8
2482 eor r12,r0,r8,ror#19
2483 eor r0,r4,r4,ror#11
2484 eor r2,r2,r10
2485 vrev32.8 q2,q2
2486 add r11,r11,r12,ror#6
2487 eor r12,r4,r5
2488 eor r0,r0,r4,ror#20
2489 add r11,r11,r2
2490 vadd.i32 q8,q8,q2
2491 ldr r2,[sp,#36]
2492 and r3,r3,r12
2493 add r7,r7,r11
2494 add r11,r11,r0,ror#2
2495 eor r3,r3,r5
2496 add r10,r10,r2
2497 eor r2,r8,r9
2498 eor r0,r7,r7,ror#5
2499 add r11,r11,r3
2500 and r2,r2,r7
2501 eor r3,r0,r7,ror#19
2502 eor r0,r11,r11,ror#11
2503 eor r2,r2,r9
2504 add r10,r10,r3,ror#6
2505 eor r3,r11,r4
2506 eor r0,r0,r11,ror#20
2507 add r10,r10,r2
2508 ldr r2,[sp,#40]
2509 and r12,r12,r3
2510 add r6,r6,r10
2511 add r10,r10,r0,ror#2
2512 eor r12,r12,r4
2513 add r9,r9,r2
2514 eor r2,r7,r8
2515 eor r0,r6,r6,ror#5
2516 add r10,r10,r12
2517 and r2,r2,r6
2518 eor r12,r0,r6,ror#19
2519 eor r0,r10,r10,ror#11
2520 eor r2,r2,r8
2521 add r9,r9,r12,ror#6
2522 eor r12,r10,r11
2523 eor r0,r0,r10,ror#20
2524 add r9,r9,r2
2525 ldr r2,[sp,#44]
2526 and r3,r3,r12
2527 add r5,r5,r9
2528 add r9,r9,r0,ror#2
2529 eor r3,r3,r11
2530 add r8,r8,r2
2531 eor r2,r6,r7
2532 eor r0,r5,r5,ror#5
2533 add r9,r9,r3
2534 and r2,r2,r5
2535 eor r3,r0,r5,ror#19
2536 eor r0,r9,r9,ror#11
2537 eor r2,r2,r7
2538 add r8,r8,r3,ror#6
2539 eor r3,r9,r10
2540 eor r0,r0,r9,ror#20
2541 add r8,r8,r2
2542 ldr r2,[sp,#48]
2543 and r12,r12,r3
2544 add r4,r4,r8
2545 add r8,r8,r0,ror#2
2546 eor r12,r12,r10
2547 vst1.32 {q8},[r1,:128]!
2548 add r7,r7,r2
2549 eor r2,r5,r6
2550 eor r0,r4,r4,ror#5
2551 add r8,r8,r12
2552 vld1.32 {q8},[r14,:128]!
2553 and r2,r2,r4
2554 eor r12,r0,r4,ror#19
2555 eor r0,r8,r8,ror#11
2556 eor r2,r2,r6
2557 vrev32.8 q3,q3
2558 add r7,r7,r12,ror#6
2559 eor r12,r8,r9
2560 eor r0,r0,r8,ror#20
2561 add r7,r7,r2
2562 vadd.i32 q8,q8,q3
2563 ldr r2,[sp,#52]
2564 and r3,r3,r12
2565 add r11,r11,r7
2566 add r7,r7,r0,ror#2
2567 eor r3,r3,r9
2568 add r6,r6,r2
2569 eor r2,r4,r5
2570 eor r0,r11,r11,ror#5
2571 add r7,r7,r3
2572 and r2,r2,r11
2573 eor r3,r0,r11,ror#19
2574 eor r0,r7,r7,ror#11
2575 eor r2,r2,r5
2576 add r6,r6,r3,ror#6
2577 eor r3,r7,r8
2578 eor r0,r0,r7,ror#20
2579 add r6,r6,r2
2580 ldr r2,[sp,#56]
2581 and r12,r12,r3
2582 add r10,r10,r6
2583 add r6,r6,r0,ror#2
2584 eor r12,r12,r8
2585 add r5,r5,r2
2586 eor r2,r11,r4
2587 eor r0,r10,r10,ror#5
2588 add r6,r6,r12
2589 and r2,r2,r10
2590 eor r12,r0,r10,ror#19
2591 eor r0,r6,r6,ror#11
2592 eor r2,r2,r4
2593 add r5,r5,r12,ror#6
2594 eor r12,r6,r7
2595 eor r0,r0,r6,ror#20
2596 add r5,r5,r2
2597 ldr r2,[sp,#60]
2598 and r3,r3,r12
2599 add r9,r9,r5
2600 add r5,r5,r0,ror#2
2601 eor r3,r3,r7
2602 add r4,r4,r2
2603 eor r2,r10,r11
2604 eor r0,r9,r9,ror#5
2605 add r5,r5,r3
2606 and r2,r2,r9
2607 eor r3,r0,r9,ror#19
2608 eor r0,r5,r5,ror#11
2609 eor r2,r2,r11
2610 add r4,r4,r3,ror#6
2611 eor r3,r5,r6
2612 eor r0,r0,r5,ror#20
2613 add r4,r4,r2
2614 ldr r2,[sp,#64]
2615 and r12,r12,r3
2616 add r8,r8,r4
2617 add r4,r4,r0,ror#2
2618 eor r12,r12,r6
2619 vst1.32 {q8},[r1,:128]!
2620 ldr r0,[r2,#0]
2621 add r4,r4,r12 @ h+=Maj(a,b,c) from the past
2622 ldr r12,[r2,#4]
2623 ldr r3,[r2,#8]
2624 ldr r1,[r2,#12]
2625 add r4,r4,r0 @ accumulate
2626 ldr r0,[r2,#16]
2627 add r5,r5,r12
2628 ldr r12,[r2,#20]
2629 add r6,r6,r3
2630 ldr r3,[r2,#24]
2631 add r7,r7,r1
2632 ldr r1,[r2,#28]
2633 add r8,r8,r0
2634 str r4,[r2],#4
2635 add r9,r9,r12
2636 str r5,[r2],#4
2637 add r10,r10,r3
2638 str r6,[r2],#4
2639 add r11,r11,r1
2640 str r7,[r2],#4
2641 stmia r2,{r8-r11}
2642
2643 ittte ne
2644 movne r1,sp
2645 ldrne r2,[sp,#0]
2646 eorne r12,r12,r12
2647 ldreq sp,[sp,#76] @ restore original sp
2648 itt ne
2649 eorne r3,r5,r6
2650 bne .L_00_48
2651
2652 ldmia sp!,{r4-r12,pc}
2653 .size sha256_block_data_order_neon,.-sha256_block_data_order_neon
2654 #endif
2655 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
2656
2657 # ifdef __thumb2__
2658 # define INST(a,b,c,d) .byte c,d|0xc,a,b
2659 # else
2660 # define INST(a,b,c,d) .byte a,b,c,d
2661 # endif
2662
2663 .type sha256_block_data_order_armv8,%function
2664 .align 5
2665 sha256_block_data_order_armv8:
2666 .LARMv8:
2667 vld1.32 {q0,q1},[r0]
2668 # ifdef __thumb2__
2669 adr r3,.LARMv8
2670 sub r3,r3,#.LARMv8-K256
2671 # else
2672 adrl r3,K256
2673 # endif
2674 add r2,r1,r2,lsl#6 @ len to point at the end of inp
2675
2676 .Loop_v8:
2677 vld1.8 {q8-q9},[r1]!
2678 vld1.8 {q10-q11},[r1]!
2679 vld1.32 {q12},[r3]!
2680 vrev32.8 q8,q8
2681 vrev32.8 q9,q9
2682 vrev32.8 q10,q10
2683 vrev32.8 q11,q11
2684 vmov q14,q0 @ offload
2685 vmov q15,q1
2686 teq r1,r2
2687 vld1.32 {q13},[r3]!
2688 vadd.i32 q12,q12,q8
2689 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9
2690 vmov q2,q0
2691 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
2692 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
2693 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11
2694 vld1.32 {q12},[r3]!
2695 vadd.i32 q13,q13,q9
2696 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10
2697 vmov q2,q0
2698 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
2699 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
2700 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8
2701 vld1.32 {q13},[r3]!
2702 vadd.i32 q12,q12,q10
2703 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11
2704 vmov q2,q0
2705 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
2706 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
2707 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9
2708 vld1.32 {q12},[r3]!
2709 vadd.i32 q13,q13,q11
2710 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8
2711 vmov q2,q0
2712 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
2713 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
2714 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10
2715 vld1.32 {q13},[r3]!
2716 vadd.i32 q12,q12,q8
2717 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9
2718 vmov q2,q0
2719 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
2720 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
2721 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11
2722 vld1.32 {q12},[r3]!
2723 vadd.i32 q13,q13,q9
2724 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10
2725 vmov q2,q0
2726 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
2727 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
2728 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8
2729 vld1.32 {q13},[r3]!
2730 vadd.i32 q12,q12,q10
2731 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11
2732 vmov q2,q0
2733 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
2734 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
2735 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9
2736 vld1.32 {q12},[r3]!
2737 vadd.i32 q13,q13,q11
2738 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8
2739 vmov q2,q0
2740 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
2741 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
2742 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10
2743 vld1.32 {q13},[r3]!
2744 vadd.i32 q12,q12,q8
2745 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9
2746 vmov q2,q0
2747 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
2748 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
2749 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11
2750 vld1.32 {q12},[r3]!
2751 vadd.i32 q13,q13,q9
2752 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10
2753 vmov q2,q0
2754 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
2755 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
2756 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8
2757 vld1.32 {q13},[r3]!
2758 vadd.i32 q12,q12,q10
2759 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11
2760 vmov q2,q0
2761 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
2762 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
2763 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9
2764 vld1.32 {q12},[r3]!
2765 vadd.i32 q13,q13,q11
2766 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8
2767 vmov q2,q0
2768 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
2769 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
2770 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10
2771 vld1.32 {q13},[r3]!
2772 vadd.i32 q12,q12,q8
2773 vmov q2,q0
2774 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
2775 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
2776
2777 vld1.32 {q12},[r3]!
2778 vadd.i32 q13,q13,q9
2779 vmov q2,q0
2780 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
2781 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
2782
2783 vld1.32 {q13},[r3]
2784 vadd.i32 q12,q12,q10
2785 sub r3,r3,#256-16 @ rewind
2786 vmov q2,q0
2787 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
2788 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
2789
2790 vadd.i32 q13,q13,q11
2791 vmov q2,q0
2792 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
2793 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
2794
2795 vadd.i32 q0,q0,q14
2796 vadd.i32 q1,q1,q15
2797 it ne
2798 bne .Loop_v8
2799
2800 vst1.32 {q0,q1},[r0]
2801
2802 bx lr @ bx lr
2803 .size sha256_block_data_order_armv8,.-sha256_block_data_order_armv8
2804 #endif
2805 .asciz "SHA256 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro@openssl.org>"
2806 .align 2
2807 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
2808 .comm OPENSSL_armcap_P,4,4
2809 #endif