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