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