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

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

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