Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(164)

Side by Side Diff: third_party/boringssl/linux-arm/crypto/sha/sha256-armv4.S

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

Powered by Google App Engine
This is Rietveld 408576698