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