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