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

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

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

Powered by Google App Engine
This is Rietveld 408576698