Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/openzfs/module/icp/asm-aarch64/sha2/sha256-armv8.S
48775 views
1
// SPDX-License-Identifier: Apache-2.0
2
/*
3
* Copyright 2004-2022 The OpenSSL Project Authors. All Rights Reserved.
4
*
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
* you may not use this file except in compliance with the License.
7
* You may obtain a copy of the License at
8
*
9
* https://www.apache.org/licenses/LICENSE-2.0
10
*
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
16
*/
17
18
/*
19
* Portions Copyright (c) 2022 Tino Reichardt <[email protected]>
20
* - modified assembly to fit into OpenZFS
21
*/
22
23
#if defined(__aarch64__)
24
25
.section .note.gnu.property,"a",@note
26
.p2align 3
27
.word 4
28
.word 16
29
.word 5
30
.asciz "GNU"
31
.word 3221225472
32
.word 4
33
.word 3
34
.word 0
35
.text
36
37
.align 6
38
.type .LK256,%object
39
.LK256:
40
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
41
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
42
.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
43
.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
44
.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
45
.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
46
.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
47
.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
48
.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
49
.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
50
.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
51
.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
52
.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
53
.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
54
.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
55
.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
56
.long 0 //terminator
57
.size .LK256,.-.LK256
58
59
.globl zfs_sha256_block_armv7
60
.type zfs_sha256_block_armv7,%function
61
.align 6
62
zfs_sha256_block_armv7:
63
hint #34 // bti c
64
stp x29,x30,[sp,#-128]!
65
add x29,sp,#0
66
67
stp x19,x20,[sp,#16]
68
stp x21,x22,[sp,#32]
69
stp x23,x24,[sp,#48]
70
stp x25,x26,[sp,#64]
71
stp x27,x28,[sp,#80]
72
sub sp,sp,#4*4
73
74
ldp w20,w21,[x0] // load context
75
ldp w22,w23,[x0,#2*4]
76
ldp w24,w25,[x0,#4*4]
77
add x2,x1,x2,lsl#6 // end of input
78
ldp w26,w27,[x0,#6*4]
79
adr x30,.LK256
80
stp x0,x2,[x29,#96]
81
82
.Loop:
83
ldp w3,w4,[x1],#2*4
84
ldr w19,[x30],#4 // *K++
85
eor w28,w21,w22 // magic seed
86
str x1,[x29,#112]
87
#ifndef __AARCH64EB__
88
rev w3,w3 // 0
89
#endif
90
ror w16,w24,#6
91
add w27,w27,w19 // h+=K[i]
92
eor w6,w24,w24,ror#14
93
and w17,w25,w24
94
bic w19,w26,w24
95
add w27,w27,w3 // h+=X[i]
96
orr w17,w17,w19 // Ch(e,f,g)
97
eor w19,w20,w21 // a^b, b^c in next round
98
eor w16,w16,w6,ror#11 // Sigma1(e)
99
ror w6,w20,#2
100
add w27,w27,w17 // h+=Ch(e,f,g)
101
eor w17,w20,w20,ror#9
102
add w27,w27,w16 // h+=Sigma1(e)
103
and w28,w28,w19 // (b^c)&=(a^b)
104
add w23,w23,w27 // d+=h
105
eor w28,w28,w21 // Maj(a,b,c)
106
eor w17,w6,w17,ror#13 // Sigma0(a)
107
add w27,w27,w28 // h+=Maj(a,b,c)
108
ldr w28,[x30],#4 // *K++, w19 in next round
109
//add w27,w27,w17 // h+=Sigma0(a)
110
#ifndef __AARCH64EB__
111
rev w4,w4 // 1
112
#endif
113
ldp w5,w6,[x1],#2*4
114
add w27,w27,w17 // h+=Sigma0(a)
115
ror w16,w23,#6
116
add w26,w26,w28 // h+=K[i]
117
eor w7,w23,w23,ror#14
118
and w17,w24,w23
119
bic w28,w25,w23
120
add w26,w26,w4 // h+=X[i]
121
orr w17,w17,w28 // Ch(e,f,g)
122
eor w28,w27,w20 // a^b, b^c in next round
123
eor w16,w16,w7,ror#11 // Sigma1(e)
124
ror w7,w27,#2
125
add w26,w26,w17 // h+=Ch(e,f,g)
126
eor w17,w27,w27,ror#9
127
add w26,w26,w16 // h+=Sigma1(e)
128
and w19,w19,w28 // (b^c)&=(a^b)
129
add w22,w22,w26 // d+=h
130
eor w19,w19,w20 // Maj(a,b,c)
131
eor w17,w7,w17,ror#13 // Sigma0(a)
132
add w26,w26,w19 // h+=Maj(a,b,c)
133
ldr w19,[x30],#4 // *K++, w28 in next round
134
//add w26,w26,w17 // h+=Sigma0(a)
135
#ifndef __AARCH64EB__
136
rev w5,w5 // 2
137
#endif
138
add w26,w26,w17 // h+=Sigma0(a)
139
ror w16,w22,#6
140
add w25,w25,w19 // h+=K[i]
141
eor w8,w22,w22,ror#14
142
and w17,w23,w22
143
bic w19,w24,w22
144
add w25,w25,w5 // h+=X[i]
145
orr w17,w17,w19 // Ch(e,f,g)
146
eor w19,w26,w27 // a^b, b^c in next round
147
eor w16,w16,w8,ror#11 // Sigma1(e)
148
ror w8,w26,#2
149
add w25,w25,w17 // h+=Ch(e,f,g)
150
eor w17,w26,w26,ror#9
151
add w25,w25,w16 // h+=Sigma1(e)
152
and w28,w28,w19 // (b^c)&=(a^b)
153
add w21,w21,w25 // d+=h
154
eor w28,w28,w27 // Maj(a,b,c)
155
eor w17,w8,w17,ror#13 // Sigma0(a)
156
add w25,w25,w28 // h+=Maj(a,b,c)
157
ldr w28,[x30],#4 // *K++, w19 in next round
158
//add w25,w25,w17 // h+=Sigma0(a)
159
#ifndef __AARCH64EB__
160
rev w6,w6 // 3
161
#endif
162
ldp w7,w8,[x1],#2*4
163
add w25,w25,w17 // h+=Sigma0(a)
164
ror w16,w21,#6
165
add w24,w24,w28 // h+=K[i]
166
eor w9,w21,w21,ror#14
167
and w17,w22,w21
168
bic w28,w23,w21
169
add w24,w24,w6 // h+=X[i]
170
orr w17,w17,w28 // Ch(e,f,g)
171
eor w28,w25,w26 // a^b, b^c in next round
172
eor w16,w16,w9,ror#11 // Sigma1(e)
173
ror w9,w25,#2
174
add w24,w24,w17 // h+=Ch(e,f,g)
175
eor w17,w25,w25,ror#9
176
add w24,w24,w16 // h+=Sigma1(e)
177
and w19,w19,w28 // (b^c)&=(a^b)
178
add w20,w20,w24 // d+=h
179
eor w19,w19,w26 // Maj(a,b,c)
180
eor w17,w9,w17,ror#13 // Sigma0(a)
181
add w24,w24,w19 // h+=Maj(a,b,c)
182
ldr w19,[x30],#4 // *K++, w28 in next round
183
//add w24,w24,w17 // h+=Sigma0(a)
184
#ifndef __AARCH64EB__
185
rev w7,w7 // 4
186
#endif
187
add w24,w24,w17 // h+=Sigma0(a)
188
ror w16,w20,#6
189
add w23,w23,w19 // h+=K[i]
190
eor w10,w20,w20,ror#14
191
and w17,w21,w20
192
bic w19,w22,w20
193
add w23,w23,w7 // h+=X[i]
194
orr w17,w17,w19 // Ch(e,f,g)
195
eor w19,w24,w25 // a^b, b^c in next round
196
eor w16,w16,w10,ror#11 // Sigma1(e)
197
ror w10,w24,#2
198
add w23,w23,w17 // h+=Ch(e,f,g)
199
eor w17,w24,w24,ror#9
200
add w23,w23,w16 // h+=Sigma1(e)
201
and w28,w28,w19 // (b^c)&=(a^b)
202
add w27,w27,w23 // d+=h
203
eor w28,w28,w25 // Maj(a,b,c)
204
eor w17,w10,w17,ror#13 // Sigma0(a)
205
add w23,w23,w28 // h+=Maj(a,b,c)
206
ldr w28,[x30],#4 // *K++, w19 in next round
207
//add w23,w23,w17 // h+=Sigma0(a)
208
#ifndef __AARCH64EB__
209
rev w8,w8 // 5
210
#endif
211
ldp w9,w10,[x1],#2*4
212
add w23,w23,w17 // h+=Sigma0(a)
213
ror w16,w27,#6
214
add w22,w22,w28 // h+=K[i]
215
eor w11,w27,w27,ror#14
216
and w17,w20,w27
217
bic w28,w21,w27
218
add w22,w22,w8 // h+=X[i]
219
orr w17,w17,w28 // Ch(e,f,g)
220
eor w28,w23,w24 // a^b, b^c in next round
221
eor w16,w16,w11,ror#11 // Sigma1(e)
222
ror w11,w23,#2
223
add w22,w22,w17 // h+=Ch(e,f,g)
224
eor w17,w23,w23,ror#9
225
add w22,w22,w16 // h+=Sigma1(e)
226
and w19,w19,w28 // (b^c)&=(a^b)
227
add w26,w26,w22 // d+=h
228
eor w19,w19,w24 // Maj(a,b,c)
229
eor w17,w11,w17,ror#13 // Sigma0(a)
230
add w22,w22,w19 // h+=Maj(a,b,c)
231
ldr w19,[x30],#4 // *K++, w28 in next round
232
//add w22,w22,w17 // h+=Sigma0(a)
233
#ifndef __AARCH64EB__
234
rev w9,w9 // 6
235
#endif
236
add w22,w22,w17 // h+=Sigma0(a)
237
ror w16,w26,#6
238
add w21,w21,w19 // h+=K[i]
239
eor w12,w26,w26,ror#14
240
and w17,w27,w26
241
bic w19,w20,w26
242
add w21,w21,w9 // h+=X[i]
243
orr w17,w17,w19 // Ch(e,f,g)
244
eor w19,w22,w23 // a^b, b^c in next round
245
eor w16,w16,w12,ror#11 // Sigma1(e)
246
ror w12,w22,#2
247
add w21,w21,w17 // h+=Ch(e,f,g)
248
eor w17,w22,w22,ror#9
249
add w21,w21,w16 // h+=Sigma1(e)
250
and w28,w28,w19 // (b^c)&=(a^b)
251
add w25,w25,w21 // d+=h
252
eor w28,w28,w23 // Maj(a,b,c)
253
eor w17,w12,w17,ror#13 // Sigma0(a)
254
add w21,w21,w28 // h+=Maj(a,b,c)
255
ldr w28,[x30],#4 // *K++, w19 in next round
256
//add w21,w21,w17 // h+=Sigma0(a)
257
#ifndef __AARCH64EB__
258
rev w10,w10 // 7
259
#endif
260
ldp w11,w12,[x1],#2*4
261
add w21,w21,w17 // h+=Sigma0(a)
262
ror w16,w25,#6
263
add w20,w20,w28 // h+=K[i]
264
eor w13,w25,w25,ror#14
265
and w17,w26,w25
266
bic w28,w27,w25
267
add w20,w20,w10 // h+=X[i]
268
orr w17,w17,w28 // Ch(e,f,g)
269
eor w28,w21,w22 // a^b, b^c in next round
270
eor w16,w16,w13,ror#11 // Sigma1(e)
271
ror w13,w21,#2
272
add w20,w20,w17 // h+=Ch(e,f,g)
273
eor w17,w21,w21,ror#9
274
add w20,w20,w16 // h+=Sigma1(e)
275
and w19,w19,w28 // (b^c)&=(a^b)
276
add w24,w24,w20 // d+=h
277
eor w19,w19,w22 // Maj(a,b,c)
278
eor w17,w13,w17,ror#13 // Sigma0(a)
279
add w20,w20,w19 // h+=Maj(a,b,c)
280
ldr w19,[x30],#4 // *K++, w28 in next round
281
//add w20,w20,w17 // h+=Sigma0(a)
282
#ifndef __AARCH64EB__
283
rev w11,w11 // 8
284
#endif
285
add w20,w20,w17 // h+=Sigma0(a)
286
ror w16,w24,#6
287
add w27,w27,w19 // h+=K[i]
288
eor w14,w24,w24,ror#14
289
and w17,w25,w24
290
bic w19,w26,w24
291
add w27,w27,w11 // h+=X[i]
292
orr w17,w17,w19 // Ch(e,f,g)
293
eor w19,w20,w21 // a^b, b^c in next round
294
eor w16,w16,w14,ror#11 // Sigma1(e)
295
ror w14,w20,#2
296
add w27,w27,w17 // h+=Ch(e,f,g)
297
eor w17,w20,w20,ror#9
298
add w27,w27,w16 // h+=Sigma1(e)
299
and w28,w28,w19 // (b^c)&=(a^b)
300
add w23,w23,w27 // d+=h
301
eor w28,w28,w21 // Maj(a,b,c)
302
eor w17,w14,w17,ror#13 // Sigma0(a)
303
add w27,w27,w28 // h+=Maj(a,b,c)
304
ldr w28,[x30],#4 // *K++, w19 in next round
305
//add w27,w27,w17 // h+=Sigma0(a)
306
#ifndef __AARCH64EB__
307
rev w12,w12 // 9
308
#endif
309
ldp w13,w14,[x1],#2*4
310
add w27,w27,w17 // h+=Sigma0(a)
311
ror w16,w23,#6
312
add w26,w26,w28 // h+=K[i]
313
eor w15,w23,w23,ror#14
314
and w17,w24,w23
315
bic w28,w25,w23
316
add w26,w26,w12 // h+=X[i]
317
orr w17,w17,w28 // Ch(e,f,g)
318
eor w28,w27,w20 // a^b, b^c in next round
319
eor w16,w16,w15,ror#11 // Sigma1(e)
320
ror w15,w27,#2
321
add w26,w26,w17 // h+=Ch(e,f,g)
322
eor w17,w27,w27,ror#9
323
add w26,w26,w16 // h+=Sigma1(e)
324
and w19,w19,w28 // (b^c)&=(a^b)
325
add w22,w22,w26 // d+=h
326
eor w19,w19,w20 // Maj(a,b,c)
327
eor w17,w15,w17,ror#13 // Sigma0(a)
328
add w26,w26,w19 // h+=Maj(a,b,c)
329
ldr w19,[x30],#4 // *K++, w28 in next round
330
//add w26,w26,w17 // h+=Sigma0(a)
331
#ifndef __AARCH64EB__
332
rev w13,w13 // 10
333
#endif
334
add w26,w26,w17 // h+=Sigma0(a)
335
ror w16,w22,#6
336
add w25,w25,w19 // h+=K[i]
337
eor w0,w22,w22,ror#14
338
and w17,w23,w22
339
bic w19,w24,w22
340
add w25,w25,w13 // h+=X[i]
341
orr w17,w17,w19 // Ch(e,f,g)
342
eor w19,w26,w27 // a^b, b^c in next round
343
eor w16,w16,w0,ror#11 // Sigma1(e)
344
ror w0,w26,#2
345
add w25,w25,w17 // h+=Ch(e,f,g)
346
eor w17,w26,w26,ror#9
347
add w25,w25,w16 // h+=Sigma1(e)
348
and w28,w28,w19 // (b^c)&=(a^b)
349
add w21,w21,w25 // d+=h
350
eor w28,w28,w27 // Maj(a,b,c)
351
eor w17,w0,w17,ror#13 // Sigma0(a)
352
add w25,w25,w28 // h+=Maj(a,b,c)
353
ldr w28,[x30],#4 // *K++, w19 in next round
354
//add w25,w25,w17 // h+=Sigma0(a)
355
#ifndef __AARCH64EB__
356
rev w14,w14 // 11
357
#endif
358
ldp w15,w0,[x1],#2*4
359
add w25,w25,w17 // h+=Sigma0(a)
360
str w6,[sp,#12]
361
ror w16,w21,#6
362
add w24,w24,w28 // h+=K[i]
363
eor w6,w21,w21,ror#14
364
and w17,w22,w21
365
bic w28,w23,w21
366
add w24,w24,w14 // h+=X[i]
367
orr w17,w17,w28 // Ch(e,f,g)
368
eor w28,w25,w26 // a^b, b^c in next round
369
eor w16,w16,w6,ror#11 // Sigma1(e)
370
ror w6,w25,#2
371
add w24,w24,w17 // h+=Ch(e,f,g)
372
eor w17,w25,w25,ror#9
373
add w24,w24,w16 // h+=Sigma1(e)
374
and w19,w19,w28 // (b^c)&=(a^b)
375
add w20,w20,w24 // d+=h
376
eor w19,w19,w26 // Maj(a,b,c)
377
eor w17,w6,w17,ror#13 // Sigma0(a)
378
add w24,w24,w19 // h+=Maj(a,b,c)
379
ldr w19,[x30],#4 // *K++, w28 in next round
380
//add w24,w24,w17 // h+=Sigma0(a)
381
#ifndef __AARCH64EB__
382
rev w15,w15 // 12
383
#endif
384
add w24,w24,w17 // h+=Sigma0(a)
385
str w7,[sp,#0]
386
ror w16,w20,#6
387
add w23,w23,w19 // h+=K[i]
388
eor w7,w20,w20,ror#14
389
and w17,w21,w20
390
bic w19,w22,w20
391
add w23,w23,w15 // h+=X[i]
392
orr w17,w17,w19 // Ch(e,f,g)
393
eor w19,w24,w25 // a^b, b^c in next round
394
eor w16,w16,w7,ror#11 // Sigma1(e)
395
ror w7,w24,#2
396
add w23,w23,w17 // h+=Ch(e,f,g)
397
eor w17,w24,w24,ror#9
398
add w23,w23,w16 // h+=Sigma1(e)
399
and w28,w28,w19 // (b^c)&=(a^b)
400
add w27,w27,w23 // d+=h
401
eor w28,w28,w25 // Maj(a,b,c)
402
eor w17,w7,w17,ror#13 // Sigma0(a)
403
add w23,w23,w28 // h+=Maj(a,b,c)
404
ldr w28,[x30],#4 // *K++, w19 in next round
405
//add w23,w23,w17 // h+=Sigma0(a)
406
#ifndef __AARCH64EB__
407
rev w0,w0 // 13
408
#endif
409
ldp w1,w2,[x1]
410
add w23,w23,w17 // h+=Sigma0(a)
411
str w8,[sp,#4]
412
ror w16,w27,#6
413
add w22,w22,w28 // h+=K[i]
414
eor w8,w27,w27,ror#14
415
and w17,w20,w27
416
bic w28,w21,w27
417
add w22,w22,w0 // h+=X[i]
418
orr w17,w17,w28 // Ch(e,f,g)
419
eor w28,w23,w24 // a^b, b^c in next round
420
eor w16,w16,w8,ror#11 // Sigma1(e)
421
ror w8,w23,#2
422
add w22,w22,w17 // h+=Ch(e,f,g)
423
eor w17,w23,w23,ror#9
424
add w22,w22,w16 // h+=Sigma1(e)
425
and w19,w19,w28 // (b^c)&=(a^b)
426
add w26,w26,w22 // d+=h
427
eor w19,w19,w24 // Maj(a,b,c)
428
eor w17,w8,w17,ror#13 // Sigma0(a)
429
add w22,w22,w19 // h+=Maj(a,b,c)
430
ldr w19,[x30],#4 // *K++, w28 in next round
431
//add w22,w22,w17 // h+=Sigma0(a)
432
#ifndef __AARCH64EB__
433
rev w1,w1 // 14
434
#endif
435
ldr w6,[sp,#12]
436
add w22,w22,w17 // h+=Sigma0(a)
437
str w9,[sp,#8]
438
ror w16,w26,#6
439
add w21,w21,w19 // h+=K[i]
440
eor w9,w26,w26,ror#14
441
and w17,w27,w26
442
bic w19,w20,w26
443
add w21,w21,w1 // h+=X[i]
444
orr w17,w17,w19 // Ch(e,f,g)
445
eor w19,w22,w23 // a^b, b^c in next round
446
eor w16,w16,w9,ror#11 // Sigma1(e)
447
ror w9,w22,#2
448
add w21,w21,w17 // h+=Ch(e,f,g)
449
eor w17,w22,w22,ror#9
450
add w21,w21,w16 // h+=Sigma1(e)
451
and w28,w28,w19 // (b^c)&=(a^b)
452
add w25,w25,w21 // d+=h
453
eor w28,w28,w23 // Maj(a,b,c)
454
eor w17,w9,w17,ror#13 // Sigma0(a)
455
add w21,w21,w28 // h+=Maj(a,b,c)
456
ldr w28,[x30],#4 // *K++, w19 in next round
457
//add w21,w21,w17 // h+=Sigma0(a)
458
#ifndef __AARCH64EB__
459
rev w2,w2 // 15
460
#endif
461
ldr w7,[sp,#0]
462
add w21,w21,w17 // h+=Sigma0(a)
463
str w10,[sp,#12]
464
ror w16,w25,#6
465
add w20,w20,w28 // h+=K[i]
466
ror w9,w4,#7
467
and w17,w26,w25
468
ror w8,w1,#17
469
bic w28,w27,w25
470
ror w10,w21,#2
471
add w20,w20,w2 // h+=X[i]
472
eor w16,w16,w25,ror#11
473
eor w9,w9,w4,ror#18
474
orr w17,w17,w28 // Ch(e,f,g)
475
eor w28,w21,w22 // a^b, b^c in next round
476
eor w16,w16,w25,ror#25 // Sigma1(e)
477
eor w10,w10,w21,ror#13
478
add w20,w20,w17 // h+=Ch(e,f,g)
479
and w19,w19,w28 // (b^c)&=(a^b)
480
eor w8,w8,w1,ror#19
481
eor w9,w9,w4,lsr#3 // sigma0(X[i+1])
482
add w20,w20,w16 // h+=Sigma1(e)
483
eor w19,w19,w22 // Maj(a,b,c)
484
eor w17,w10,w21,ror#22 // Sigma0(a)
485
eor w8,w8,w1,lsr#10 // sigma1(X[i+14])
486
add w3,w3,w12
487
add w24,w24,w20 // d+=h
488
add w20,w20,w19 // h+=Maj(a,b,c)
489
ldr w19,[x30],#4 // *K++, w28 in next round
490
add w3,w3,w9
491
add w20,w20,w17 // h+=Sigma0(a)
492
add w3,w3,w8
493
.Loop_16_xx:
494
ldr w8,[sp,#4]
495
str w11,[sp,#0]
496
ror w16,w24,#6
497
add w27,w27,w19 // h+=K[i]
498
ror w10,w5,#7
499
and w17,w25,w24
500
ror w9,w2,#17
501
bic w19,w26,w24
502
ror w11,w20,#2
503
add w27,w27,w3 // h+=X[i]
504
eor w16,w16,w24,ror#11
505
eor w10,w10,w5,ror#18
506
orr w17,w17,w19 // Ch(e,f,g)
507
eor w19,w20,w21 // a^b, b^c in next round
508
eor w16,w16,w24,ror#25 // Sigma1(e)
509
eor w11,w11,w20,ror#13
510
add w27,w27,w17 // h+=Ch(e,f,g)
511
and w28,w28,w19 // (b^c)&=(a^b)
512
eor w9,w9,w2,ror#19
513
eor w10,w10,w5,lsr#3 // sigma0(X[i+1])
514
add w27,w27,w16 // h+=Sigma1(e)
515
eor w28,w28,w21 // Maj(a,b,c)
516
eor w17,w11,w20,ror#22 // Sigma0(a)
517
eor w9,w9,w2,lsr#10 // sigma1(X[i+14])
518
add w4,w4,w13
519
add w23,w23,w27 // d+=h
520
add w27,w27,w28 // h+=Maj(a,b,c)
521
ldr w28,[x30],#4 // *K++, w19 in next round
522
add w4,w4,w10
523
add w27,w27,w17 // h+=Sigma0(a)
524
add w4,w4,w9
525
ldr w9,[sp,#8]
526
str w12,[sp,#4]
527
ror w16,w23,#6
528
add w26,w26,w28 // h+=K[i]
529
ror w11,w6,#7
530
and w17,w24,w23
531
ror w10,w3,#17
532
bic w28,w25,w23
533
ror w12,w27,#2
534
add w26,w26,w4 // h+=X[i]
535
eor w16,w16,w23,ror#11
536
eor w11,w11,w6,ror#18
537
orr w17,w17,w28 // Ch(e,f,g)
538
eor w28,w27,w20 // a^b, b^c in next round
539
eor w16,w16,w23,ror#25 // Sigma1(e)
540
eor w12,w12,w27,ror#13
541
add w26,w26,w17 // h+=Ch(e,f,g)
542
and w19,w19,w28 // (b^c)&=(a^b)
543
eor w10,w10,w3,ror#19
544
eor w11,w11,w6,lsr#3 // sigma0(X[i+1])
545
add w26,w26,w16 // h+=Sigma1(e)
546
eor w19,w19,w20 // Maj(a,b,c)
547
eor w17,w12,w27,ror#22 // Sigma0(a)
548
eor w10,w10,w3,lsr#10 // sigma1(X[i+14])
549
add w5,w5,w14
550
add w22,w22,w26 // d+=h
551
add w26,w26,w19 // h+=Maj(a,b,c)
552
ldr w19,[x30],#4 // *K++, w28 in next round
553
add w5,w5,w11
554
add w26,w26,w17 // h+=Sigma0(a)
555
add w5,w5,w10
556
ldr w10,[sp,#12]
557
str w13,[sp,#8]
558
ror w16,w22,#6
559
add w25,w25,w19 // h+=K[i]
560
ror w12,w7,#7
561
and w17,w23,w22
562
ror w11,w4,#17
563
bic w19,w24,w22
564
ror w13,w26,#2
565
add w25,w25,w5 // h+=X[i]
566
eor w16,w16,w22,ror#11
567
eor w12,w12,w7,ror#18
568
orr w17,w17,w19 // Ch(e,f,g)
569
eor w19,w26,w27 // a^b, b^c in next round
570
eor w16,w16,w22,ror#25 // Sigma1(e)
571
eor w13,w13,w26,ror#13
572
add w25,w25,w17 // h+=Ch(e,f,g)
573
and w28,w28,w19 // (b^c)&=(a^b)
574
eor w11,w11,w4,ror#19
575
eor w12,w12,w7,lsr#3 // sigma0(X[i+1])
576
add w25,w25,w16 // h+=Sigma1(e)
577
eor w28,w28,w27 // Maj(a,b,c)
578
eor w17,w13,w26,ror#22 // Sigma0(a)
579
eor w11,w11,w4,lsr#10 // sigma1(X[i+14])
580
add w6,w6,w15
581
add w21,w21,w25 // d+=h
582
add w25,w25,w28 // h+=Maj(a,b,c)
583
ldr w28,[x30],#4 // *K++, w19 in next round
584
add w6,w6,w12
585
add w25,w25,w17 // h+=Sigma0(a)
586
add w6,w6,w11
587
ldr w11,[sp,#0]
588
str w14,[sp,#12]
589
ror w16,w21,#6
590
add w24,w24,w28 // h+=K[i]
591
ror w13,w8,#7
592
and w17,w22,w21
593
ror w12,w5,#17
594
bic w28,w23,w21
595
ror w14,w25,#2
596
add w24,w24,w6 // h+=X[i]
597
eor w16,w16,w21,ror#11
598
eor w13,w13,w8,ror#18
599
orr w17,w17,w28 // Ch(e,f,g)
600
eor w28,w25,w26 // a^b, b^c in next round
601
eor w16,w16,w21,ror#25 // Sigma1(e)
602
eor w14,w14,w25,ror#13
603
add w24,w24,w17 // h+=Ch(e,f,g)
604
and w19,w19,w28 // (b^c)&=(a^b)
605
eor w12,w12,w5,ror#19
606
eor w13,w13,w8,lsr#3 // sigma0(X[i+1])
607
add w24,w24,w16 // h+=Sigma1(e)
608
eor w19,w19,w26 // Maj(a,b,c)
609
eor w17,w14,w25,ror#22 // Sigma0(a)
610
eor w12,w12,w5,lsr#10 // sigma1(X[i+14])
611
add w7,w7,w0
612
add w20,w20,w24 // d+=h
613
add w24,w24,w19 // h+=Maj(a,b,c)
614
ldr w19,[x30],#4 // *K++, w28 in next round
615
add w7,w7,w13
616
add w24,w24,w17 // h+=Sigma0(a)
617
add w7,w7,w12
618
ldr w12,[sp,#4]
619
str w15,[sp,#0]
620
ror w16,w20,#6
621
add w23,w23,w19 // h+=K[i]
622
ror w14,w9,#7
623
and w17,w21,w20
624
ror w13,w6,#17
625
bic w19,w22,w20
626
ror w15,w24,#2
627
add w23,w23,w7 // h+=X[i]
628
eor w16,w16,w20,ror#11
629
eor w14,w14,w9,ror#18
630
orr w17,w17,w19 // Ch(e,f,g)
631
eor w19,w24,w25 // a^b, b^c in next round
632
eor w16,w16,w20,ror#25 // Sigma1(e)
633
eor w15,w15,w24,ror#13
634
add w23,w23,w17 // h+=Ch(e,f,g)
635
and w28,w28,w19 // (b^c)&=(a^b)
636
eor w13,w13,w6,ror#19
637
eor w14,w14,w9,lsr#3 // sigma0(X[i+1])
638
add w23,w23,w16 // h+=Sigma1(e)
639
eor w28,w28,w25 // Maj(a,b,c)
640
eor w17,w15,w24,ror#22 // Sigma0(a)
641
eor w13,w13,w6,lsr#10 // sigma1(X[i+14])
642
add w8,w8,w1
643
add w27,w27,w23 // d+=h
644
add w23,w23,w28 // h+=Maj(a,b,c)
645
ldr w28,[x30],#4 // *K++, w19 in next round
646
add w8,w8,w14
647
add w23,w23,w17 // h+=Sigma0(a)
648
add w8,w8,w13
649
ldr w13,[sp,#8]
650
str w0,[sp,#4]
651
ror w16,w27,#6
652
add w22,w22,w28 // h+=K[i]
653
ror w15,w10,#7
654
and w17,w20,w27
655
ror w14,w7,#17
656
bic w28,w21,w27
657
ror w0,w23,#2
658
add w22,w22,w8 // h+=X[i]
659
eor w16,w16,w27,ror#11
660
eor w15,w15,w10,ror#18
661
orr w17,w17,w28 // Ch(e,f,g)
662
eor w28,w23,w24 // a^b, b^c in next round
663
eor w16,w16,w27,ror#25 // Sigma1(e)
664
eor w0,w0,w23,ror#13
665
add w22,w22,w17 // h+=Ch(e,f,g)
666
and w19,w19,w28 // (b^c)&=(a^b)
667
eor w14,w14,w7,ror#19
668
eor w15,w15,w10,lsr#3 // sigma0(X[i+1])
669
add w22,w22,w16 // h+=Sigma1(e)
670
eor w19,w19,w24 // Maj(a,b,c)
671
eor w17,w0,w23,ror#22 // Sigma0(a)
672
eor w14,w14,w7,lsr#10 // sigma1(X[i+14])
673
add w9,w9,w2
674
add w26,w26,w22 // d+=h
675
add w22,w22,w19 // h+=Maj(a,b,c)
676
ldr w19,[x30],#4 // *K++, w28 in next round
677
add w9,w9,w15
678
add w22,w22,w17 // h+=Sigma0(a)
679
add w9,w9,w14
680
ldr w14,[sp,#12]
681
str w1,[sp,#8]
682
ror w16,w26,#6
683
add w21,w21,w19 // h+=K[i]
684
ror w0,w11,#7
685
and w17,w27,w26
686
ror w15,w8,#17
687
bic w19,w20,w26
688
ror w1,w22,#2
689
add w21,w21,w9 // h+=X[i]
690
eor w16,w16,w26,ror#11
691
eor w0,w0,w11,ror#18
692
orr w17,w17,w19 // Ch(e,f,g)
693
eor w19,w22,w23 // a^b, b^c in next round
694
eor w16,w16,w26,ror#25 // Sigma1(e)
695
eor w1,w1,w22,ror#13
696
add w21,w21,w17 // h+=Ch(e,f,g)
697
and w28,w28,w19 // (b^c)&=(a^b)
698
eor w15,w15,w8,ror#19
699
eor w0,w0,w11,lsr#3 // sigma0(X[i+1])
700
add w21,w21,w16 // h+=Sigma1(e)
701
eor w28,w28,w23 // Maj(a,b,c)
702
eor w17,w1,w22,ror#22 // Sigma0(a)
703
eor w15,w15,w8,lsr#10 // sigma1(X[i+14])
704
add w10,w10,w3
705
add w25,w25,w21 // d+=h
706
add w21,w21,w28 // h+=Maj(a,b,c)
707
ldr w28,[x30],#4 // *K++, w19 in next round
708
add w10,w10,w0
709
add w21,w21,w17 // h+=Sigma0(a)
710
add w10,w10,w15
711
ldr w15,[sp,#0]
712
str w2,[sp,#12]
713
ror w16,w25,#6
714
add w20,w20,w28 // h+=K[i]
715
ror w1,w12,#7
716
and w17,w26,w25
717
ror w0,w9,#17
718
bic w28,w27,w25
719
ror w2,w21,#2
720
add w20,w20,w10 // h+=X[i]
721
eor w16,w16,w25,ror#11
722
eor w1,w1,w12,ror#18
723
orr w17,w17,w28 // Ch(e,f,g)
724
eor w28,w21,w22 // a^b, b^c in next round
725
eor w16,w16,w25,ror#25 // Sigma1(e)
726
eor w2,w2,w21,ror#13
727
add w20,w20,w17 // h+=Ch(e,f,g)
728
and w19,w19,w28 // (b^c)&=(a^b)
729
eor w0,w0,w9,ror#19
730
eor w1,w1,w12,lsr#3 // sigma0(X[i+1])
731
add w20,w20,w16 // h+=Sigma1(e)
732
eor w19,w19,w22 // Maj(a,b,c)
733
eor w17,w2,w21,ror#22 // Sigma0(a)
734
eor w0,w0,w9,lsr#10 // sigma1(X[i+14])
735
add w11,w11,w4
736
add w24,w24,w20 // d+=h
737
add w20,w20,w19 // h+=Maj(a,b,c)
738
ldr w19,[x30],#4 // *K++, w28 in next round
739
add w11,w11,w1
740
add w20,w20,w17 // h+=Sigma0(a)
741
add w11,w11,w0
742
ldr w0,[sp,#4]
743
str w3,[sp,#0]
744
ror w16,w24,#6
745
add w27,w27,w19 // h+=K[i]
746
ror w2,w13,#7
747
and w17,w25,w24
748
ror w1,w10,#17
749
bic w19,w26,w24
750
ror w3,w20,#2
751
add w27,w27,w11 // h+=X[i]
752
eor w16,w16,w24,ror#11
753
eor w2,w2,w13,ror#18
754
orr w17,w17,w19 // Ch(e,f,g)
755
eor w19,w20,w21 // a^b, b^c in next round
756
eor w16,w16,w24,ror#25 // Sigma1(e)
757
eor w3,w3,w20,ror#13
758
add w27,w27,w17 // h+=Ch(e,f,g)
759
and w28,w28,w19 // (b^c)&=(a^b)
760
eor w1,w1,w10,ror#19
761
eor w2,w2,w13,lsr#3 // sigma0(X[i+1])
762
add w27,w27,w16 // h+=Sigma1(e)
763
eor w28,w28,w21 // Maj(a,b,c)
764
eor w17,w3,w20,ror#22 // Sigma0(a)
765
eor w1,w1,w10,lsr#10 // sigma1(X[i+14])
766
add w12,w12,w5
767
add w23,w23,w27 // d+=h
768
add w27,w27,w28 // h+=Maj(a,b,c)
769
ldr w28,[x30],#4 // *K++, w19 in next round
770
add w12,w12,w2
771
add w27,w27,w17 // h+=Sigma0(a)
772
add w12,w12,w1
773
ldr w1,[sp,#8]
774
str w4,[sp,#4]
775
ror w16,w23,#6
776
add w26,w26,w28 // h+=K[i]
777
ror w3,w14,#7
778
and w17,w24,w23
779
ror w2,w11,#17
780
bic w28,w25,w23
781
ror w4,w27,#2
782
add w26,w26,w12 // h+=X[i]
783
eor w16,w16,w23,ror#11
784
eor w3,w3,w14,ror#18
785
orr w17,w17,w28 // Ch(e,f,g)
786
eor w28,w27,w20 // a^b, b^c in next round
787
eor w16,w16,w23,ror#25 // Sigma1(e)
788
eor w4,w4,w27,ror#13
789
add w26,w26,w17 // h+=Ch(e,f,g)
790
and w19,w19,w28 // (b^c)&=(a^b)
791
eor w2,w2,w11,ror#19
792
eor w3,w3,w14,lsr#3 // sigma0(X[i+1])
793
add w26,w26,w16 // h+=Sigma1(e)
794
eor w19,w19,w20 // Maj(a,b,c)
795
eor w17,w4,w27,ror#22 // Sigma0(a)
796
eor w2,w2,w11,lsr#10 // sigma1(X[i+14])
797
add w13,w13,w6
798
add w22,w22,w26 // d+=h
799
add w26,w26,w19 // h+=Maj(a,b,c)
800
ldr w19,[x30],#4 // *K++, w28 in next round
801
add w13,w13,w3
802
add w26,w26,w17 // h+=Sigma0(a)
803
add w13,w13,w2
804
ldr w2,[sp,#12]
805
str w5,[sp,#8]
806
ror w16,w22,#6
807
add w25,w25,w19 // h+=K[i]
808
ror w4,w15,#7
809
and w17,w23,w22
810
ror w3,w12,#17
811
bic w19,w24,w22
812
ror w5,w26,#2
813
add w25,w25,w13 // h+=X[i]
814
eor w16,w16,w22,ror#11
815
eor w4,w4,w15,ror#18
816
orr w17,w17,w19 // Ch(e,f,g)
817
eor w19,w26,w27 // a^b, b^c in next round
818
eor w16,w16,w22,ror#25 // Sigma1(e)
819
eor w5,w5,w26,ror#13
820
add w25,w25,w17 // h+=Ch(e,f,g)
821
and w28,w28,w19 // (b^c)&=(a^b)
822
eor w3,w3,w12,ror#19
823
eor w4,w4,w15,lsr#3 // sigma0(X[i+1])
824
add w25,w25,w16 // h+=Sigma1(e)
825
eor w28,w28,w27 // Maj(a,b,c)
826
eor w17,w5,w26,ror#22 // Sigma0(a)
827
eor w3,w3,w12,lsr#10 // sigma1(X[i+14])
828
add w14,w14,w7
829
add w21,w21,w25 // d+=h
830
add w25,w25,w28 // h+=Maj(a,b,c)
831
ldr w28,[x30],#4 // *K++, w19 in next round
832
add w14,w14,w4
833
add w25,w25,w17 // h+=Sigma0(a)
834
add w14,w14,w3
835
ldr w3,[sp,#0]
836
str w6,[sp,#12]
837
ror w16,w21,#6
838
add w24,w24,w28 // h+=K[i]
839
ror w5,w0,#7
840
and w17,w22,w21
841
ror w4,w13,#17
842
bic w28,w23,w21
843
ror w6,w25,#2
844
add w24,w24,w14 // h+=X[i]
845
eor w16,w16,w21,ror#11
846
eor w5,w5,w0,ror#18
847
orr w17,w17,w28 // Ch(e,f,g)
848
eor w28,w25,w26 // a^b, b^c in next round
849
eor w16,w16,w21,ror#25 // Sigma1(e)
850
eor w6,w6,w25,ror#13
851
add w24,w24,w17 // h+=Ch(e,f,g)
852
and w19,w19,w28 // (b^c)&=(a^b)
853
eor w4,w4,w13,ror#19
854
eor w5,w5,w0,lsr#3 // sigma0(X[i+1])
855
add w24,w24,w16 // h+=Sigma1(e)
856
eor w19,w19,w26 // Maj(a,b,c)
857
eor w17,w6,w25,ror#22 // Sigma0(a)
858
eor w4,w4,w13,lsr#10 // sigma1(X[i+14])
859
add w15,w15,w8
860
add w20,w20,w24 // d+=h
861
add w24,w24,w19 // h+=Maj(a,b,c)
862
ldr w19,[x30],#4 // *K++, w28 in next round
863
add w15,w15,w5
864
add w24,w24,w17 // h+=Sigma0(a)
865
add w15,w15,w4
866
ldr w4,[sp,#4]
867
str w7,[sp,#0]
868
ror w16,w20,#6
869
add w23,w23,w19 // h+=K[i]
870
ror w6,w1,#7
871
and w17,w21,w20
872
ror w5,w14,#17
873
bic w19,w22,w20
874
ror w7,w24,#2
875
add w23,w23,w15 // h+=X[i]
876
eor w16,w16,w20,ror#11
877
eor w6,w6,w1,ror#18
878
orr w17,w17,w19 // Ch(e,f,g)
879
eor w19,w24,w25 // a^b, b^c in next round
880
eor w16,w16,w20,ror#25 // Sigma1(e)
881
eor w7,w7,w24,ror#13
882
add w23,w23,w17 // h+=Ch(e,f,g)
883
and w28,w28,w19 // (b^c)&=(a^b)
884
eor w5,w5,w14,ror#19
885
eor w6,w6,w1,lsr#3 // sigma0(X[i+1])
886
add w23,w23,w16 // h+=Sigma1(e)
887
eor w28,w28,w25 // Maj(a,b,c)
888
eor w17,w7,w24,ror#22 // Sigma0(a)
889
eor w5,w5,w14,lsr#10 // sigma1(X[i+14])
890
add w0,w0,w9
891
add w27,w27,w23 // d+=h
892
add w23,w23,w28 // h+=Maj(a,b,c)
893
ldr w28,[x30],#4 // *K++, w19 in next round
894
add w0,w0,w6
895
add w23,w23,w17 // h+=Sigma0(a)
896
add w0,w0,w5
897
ldr w5,[sp,#8]
898
str w8,[sp,#4]
899
ror w16,w27,#6
900
add w22,w22,w28 // h+=K[i]
901
ror w7,w2,#7
902
and w17,w20,w27
903
ror w6,w15,#17
904
bic w28,w21,w27
905
ror w8,w23,#2
906
add w22,w22,w0 // h+=X[i]
907
eor w16,w16,w27,ror#11
908
eor w7,w7,w2,ror#18
909
orr w17,w17,w28 // Ch(e,f,g)
910
eor w28,w23,w24 // a^b, b^c in next round
911
eor w16,w16,w27,ror#25 // Sigma1(e)
912
eor w8,w8,w23,ror#13
913
add w22,w22,w17 // h+=Ch(e,f,g)
914
and w19,w19,w28 // (b^c)&=(a^b)
915
eor w6,w6,w15,ror#19
916
eor w7,w7,w2,lsr#3 // sigma0(X[i+1])
917
add w22,w22,w16 // h+=Sigma1(e)
918
eor w19,w19,w24 // Maj(a,b,c)
919
eor w17,w8,w23,ror#22 // Sigma0(a)
920
eor w6,w6,w15,lsr#10 // sigma1(X[i+14])
921
add w1,w1,w10
922
add w26,w26,w22 // d+=h
923
add w22,w22,w19 // h+=Maj(a,b,c)
924
ldr w19,[x30],#4 // *K++, w28 in next round
925
add w1,w1,w7
926
add w22,w22,w17 // h+=Sigma0(a)
927
add w1,w1,w6
928
ldr w6,[sp,#12]
929
str w9,[sp,#8]
930
ror w16,w26,#6
931
add w21,w21,w19 // h+=K[i]
932
ror w8,w3,#7
933
and w17,w27,w26
934
ror w7,w0,#17
935
bic w19,w20,w26
936
ror w9,w22,#2
937
add w21,w21,w1 // h+=X[i]
938
eor w16,w16,w26,ror#11
939
eor w8,w8,w3,ror#18
940
orr w17,w17,w19 // Ch(e,f,g)
941
eor w19,w22,w23 // a^b, b^c in next round
942
eor w16,w16,w26,ror#25 // Sigma1(e)
943
eor w9,w9,w22,ror#13
944
add w21,w21,w17 // h+=Ch(e,f,g)
945
and w28,w28,w19 // (b^c)&=(a^b)
946
eor w7,w7,w0,ror#19
947
eor w8,w8,w3,lsr#3 // sigma0(X[i+1])
948
add w21,w21,w16 // h+=Sigma1(e)
949
eor w28,w28,w23 // Maj(a,b,c)
950
eor w17,w9,w22,ror#22 // Sigma0(a)
951
eor w7,w7,w0,lsr#10 // sigma1(X[i+14])
952
add w2,w2,w11
953
add w25,w25,w21 // d+=h
954
add w21,w21,w28 // h+=Maj(a,b,c)
955
ldr w28,[x30],#4 // *K++, w19 in next round
956
add w2,w2,w8
957
add w21,w21,w17 // h+=Sigma0(a)
958
add w2,w2,w7
959
ldr w7,[sp,#0]
960
str w10,[sp,#12]
961
ror w16,w25,#6
962
add w20,w20,w28 // h+=K[i]
963
ror w9,w4,#7
964
and w17,w26,w25
965
ror w8,w1,#17
966
bic w28,w27,w25
967
ror w10,w21,#2
968
add w20,w20,w2 // h+=X[i]
969
eor w16,w16,w25,ror#11
970
eor w9,w9,w4,ror#18
971
orr w17,w17,w28 // Ch(e,f,g)
972
eor w28,w21,w22 // a^b, b^c in next round
973
eor w16,w16,w25,ror#25 // Sigma1(e)
974
eor w10,w10,w21,ror#13
975
add w20,w20,w17 // h+=Ch(e,f,g)
976
and w19,w19,w28 // (b^c)&=(a^b)
977
eor w8,w8,w1,ror#19
978
eor w9,w9,w4,lsr#3 // sigma0(X[i+1])
979
add w20,w20,w16 // h+=Sigma1(e)
980
eor w19,w19,w22 // Maj(a,b,c)
981
eor w17,w10,w21,ror#22 // Sigma0(a)
982
eor w8,w8,w1,lsr#10 // sigma1(X[i+14])
983
add w3,w3,w12
984
add w24,w24,w20 // d+=h
985
add w20,w20,w19 // h+=Maj(a,b,c)
986
ldr w19,[x30],#4 // *K++, w28 in next round
987
add w3,w3,w9
988
add w20,w20,w17 // h+=Sigma0(a)
989
add w3,w3,w8
990
cbnz w19,.Loop_16_xx
991
992
ldp x0,x2,[x29,#96]
993
ldr x1,[x29,#112]
994
sub x30,x30,#260 // rewind
995
996
ldp w3,w4,[x0]
997
ldp w5,w6,[x0,#2*4]
998
add x1,x1,#14*4 // advance input pointer
999
ldp w7,w8,[x0,#4*4]
1000
add w20,w20,w3
1001
ldp w9,w10,[x0,#6*4]
1002
add w21,w21,w4
1003
add w22,w22,w5
1004
add w23,w23,w6
1005
stp w20,w21,[x0]
1006
add w24,w24,w7
1007
add w25,w25,w8
1008
stp w22,w23,[x0,#2*4]
1009
add w26,w26,w9
1010
add w27,w27,w10
1011
cmp x1,x2
1012
stp w24,w25,[x0,#4*4]
1013
stp w26,w27,[x0,#6*4]
1014
b.ne .Loop
1015
1016
ldp x19,x20,[x29,#16]
1017
add sp,sp,#4*4
1018
ldp x21,x22,[x29,#32]
1019
ldp x23,x24,[x29,#48]
1020
ldp x25,x26,[x29,#64]
1021
ldp x27,x28,[x29,#80]
1022
ldp x29,x30,[sp],#128
1023
ret
1024
.size zfs_sha256_block_armv7,.-zfs_sha256_block_armv7
1025
1026
.globl zfs_sha256_block_armv8
1027
.type zfs_sha256_block_armv8,%function
1028
.align 6
1029
zfs_sha256_block_armv8:
1030
hint #34 // bti c
1031
.Lv8_entry:
1032
stp x29,x30,[sp,#-16]!
1033
add x29,sp,#0
1034
1035
ld1 {v0.4s,v1.4s},[x0]
1036
adr x3,.LK256
1037
1038
.Loop_hw:
1039
ld1 {v4.16b-v7.16b},[x1],#64
1040
sub x2,x2,#1
1041
ld1 {v16.4s},[x3],#16
1042
rev32 v4.16b,v4.16b
1043
rev32 v5.16b,v5.16b
1044
rev32 v6.16b,v6.16b
1045
rev32 v7.16b,v7.16b
1046
orr v18.16b,v0.16b,v0.16b // offload
1047
orr v19.16b,v1.16b,v1.16b
1048
ld1 {v17.4s},[x3],#16
1049
add v16.4s,v16.4s,v4.4s
1050
.inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b
1051
orr v2.16b,v0.16b,v0.16b
1052
.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1053
.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1054
.inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b
1055
ld1 {v16.4s},[x3],#16
1056
add v17.4s,v17.4s,v5.4s
1057
.inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b
1058
orr v2.16b,v0.16b,v0.16b
1059
.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1060
.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1061
.inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b
1062
ld1 {v17.4s},[x3],#16
1063
add v16.4s,v16.4s,v6.4s
1064
.inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b
1065
orr v2.16b,v0.16b,v0.16b
1066
.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1067
.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1068
.inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b
1069
ld1 {v16.4s},[x3],#16
1070
add v17.4s,v17.4s,v7.4s
1071
.inst 0x5e282887 //sha256su0 v7.16b,v4.16b
1072
orr v2.16b,v0.16b,v0.16b
1073
.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1074
.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1075
.inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b
1076
ld1 {v17.4s},[x3],#16
1077
add v16.4s,v16.4s,v4.4s
1078
.inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b
1079
orr v2.16b,v0.16b,v0.16b
1080
.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1081
.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1082
.inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b
1083
ld1 {v16.4s},[x3],#16
1084
add v17.4s,v17.4s,v5.4s
1085
.inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b
1086
orr v2.16b,v0.16b,v0.16b
1087
.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1088
.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1089
.inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b
1090
ld1 {v17.4s},[x3],#16
1091
add v16.4s,v16.4s,v6.4s
1092
.inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b
1093
orr v2.16b,v0.16b,v0.16b
1094
.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1095
.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1096
.inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b
1097
ld1 {v16.4s},[x3],#16
1098
add v17.4s,v17.4s,v7.4s
1099
.inst 0x5e282887 //sha256su0 v7.16b,v4.16b
1100
orr v2.16b,v0.16b,v0.16b
1101
.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1102
.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1103
.inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b
1104
ld1 {v17.4s},[x3],#16
1105
add v16.4s,v16.4s,v4.4s
1106
.inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b
1107
orr v2.16b,v0.16b,v0.16b
1108
.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1109
.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1110
.inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b
1111
ld1 {v16.4s},[x3],#16
1112
add v17.4s,v17.4s,v5.4s
1113
.inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b
1114
orr v2.16b,v0.16b,v0.16b
1115
.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1116
.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1117
.inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b
1118
ld1 {v17.4s},[x3],#16
1119
add v16.4s,v16.4s,v6.4s
1120
.inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b
1121
orr v2.16b,v0.16b,v0.16b
1122
.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1123
.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1124
.inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b
1125
ld1 {v16.4s},[x3],#16
1126
add v17.4s,v17.4s,v7.4s
1127
.inst 0x5e282887 //sha256su0 v7.16b,v4.16b
1128
orr v2.16b,v0.16b,v0.16b
1129
.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1130
.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1131
.inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b
1132
ld1 {v17.4s},[x3],#16
1133
add v16.4s,v16.4s,v4.4s
1134
orr v2.16b,v0.16b,v0.16b
1135
.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1136
.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1137
1138
ld1 {v16.4s},[x3],#16
1139
add v17.4s,v17.4s,v5.4s
1140
orr v2.16b,v0.16b,v0.16b
1141
.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1142
.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1143
1144
ld1 {v17.4s},[x3]
1145
add v16.4s,v16.4s,v6.4s
1146
sub x3,x3,#64*4-16 // rewind
1147
orr v2.16b,v0.16b,v0.16b
1148
.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1149
.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1150
1151
add v17.4s,v17.4s,v7.4s
1152
orr v2.16b,v0.16b,v0.16b
1153
.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1154
.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1155
1156
add v0.4s,v0.4s,v18.4s
1157
add v1.4s,v1.4s,v19.4s
1158
1159
cbnz x2,.Loop_hw
1160
1161
st1 {v0.4s,v1.4s},[x0]
1162
1163
ldr x29,[sp],#16
1164
ret
1165
.size zfs_sha256_block_armv8,.-zfs_sha256_block_armv8
1166
1167
.globl zfs_sha256_block_neon
1168
.type zfs_sha256_block_neon,%function
1169
.align 4
1170
zfs_sha256_block_neon:
1171
hint #34 // bti c
1172
.Lneon_entry:
1173
stp x29, x30, [sp, #-16]!
1174
mov x29, sp
1175
sub sp,sp,#16*4
1176
1177
adr x16,.LK256
1178
add x2,x1,x2,lsl#6 // len to point at the end of inp
1179
1180
ld1 {v0.16b},[x1], #16
1181
ld1 {v1.16b},[x1], #16
1182
ld1 {v2.16b},[x1], #16
1183
ld1 {v3.16b},[x1], #16
1184
ld1 {v4.4s},[x16], #16
1185
ld1 {v5.4s},[x16], #16
1186
ld1 {v6.4s},[x16], #16
1187
ld1 {v7.4s},[x16], #16
1188
rev32 v0.16b,v0.16b // yes, even on
1189
rev32 v1.16b,v1.16b // big-endian
1190
rev32 v2.16b,v2.16b
1191
rev32 v3.16b,v3.16b
1192
mov x17,sp
1193
add v4.4s,v4.4s,v0.4s
1194
add v5.4s,v5.4s,v1.4s
1195
add v6.4s,v6.4s,v2.4s
1196
st1 {v4.4s-v5.4s},[x17], #32
1197
add v7.4s,v7.4s,v3.4s
1198
st1 {v6.4s-v7.4s},[x17]
1199
sub x17,x17,#32
1200
1201
ldp w3,w4,[x0]
1202
ldp w5,w6,[x0,#8]
1203
ldp w7,w8,[x0,#16]
1204
ldp w9,w10,[x0,#24]
1205
ldr w12,[sp,#0]
1206
mov w13,wzr
1207
eor w14,w4,w5
1208
mov w15,wzr
1209
b .L_00_48
1210
1211
.align 4
1212
.L_00_48:
1213
ext v4.16b,v0.16b,v1.16b,#4
1214
add w10,w10,w12
1215
add w3,w3,w15
1216
and w12,w8,w7
1217
bic w15,w9,w7
1218
ext v7.16b,v2.16b,v3.16b,#4
1219
eor w11,w7,w7,ror#5
1220
add w3,w3,w13
1221
mov d19,v3.d[1]
1222
orr w12,w12,w15
1223
eor w11,w11,w7,ror#19
1224
ushr v6.4s,v4.4s,#7
1225
eor w15,w3,w3,ror#11
1226
ushr v5.4s,v4.4s,#3
1227
add w10,w10,w12
1228
add v0.4s,v0.4s,v7.4s
1229
ror w11,w11,#6
1230
sli v6.4s,v4.4s,#25
1231
eor w13,w3,w4
1232
eor w15,w15,w3,ror#20
1233
ushr v7.4s,v4.4s,#18
1234
add w10,w10,w11
1235
ldr w12,[sp,#4]
1236
and w14,w14,w13
1237
eor v5.16b,v5.16b,v6.16b
1238
ror w15,w15,#2
1239
add w6,w6,w10
1240
sli v7.4s,v4.4s,#14
1241
eor w14,w14,w4
1242
ushr v16.4s,v19.4s,#17
1243
add w9,w9,w12
1244
add w10,w10,w15
1245
and w12,w7,w6
1246
eor v5.16b,v5.16b,v7.16b
1247
bic w15,w8,w6
1248
eor w11,w6,w6,ror#5
1249
sli v16.4s,v19.4s,#15
1250
add w10,w10,w14
1251
orr w12,w12,w15
1252
ushr v17.4s,v19.4s,#10
1253
eor w11,w11,w6,ror#19
1254
eor w15,w10,w10,ror#11
1255
ushr v7.4s,v19.4s,#19
1256
add w9,w9,w12
1257
ror w11,w11,#6
1258
add v0.4s,v0.4s,v5.4s
1259
eor w14,w10,w3
1260
eor w15,w15,w10,ror#20
1261
sli v7.4s,v19.4s,#13
1262
add w9,w9,w11
1263
ldr w12,[sp,#8]
1264
and w13,w13,w14
1265
eor v17.16b,v17.16b,v16.16b
1266
ror w15,w15,#2
1267
add w5,w5,w9
1268
eor w13,w13,w3
1269
eor v17.16b,v17.16b,v7.16b
1270
add w8,w8,w12
1271
add w9,w9,w15
1272
and w12,w6,w5
1273
add v0.4s,v0.4s,v17.4s
1274
bic w15,w7,w5
1275
eor w11,w5,w5,ror#5
1276
add w9,w9,w13
1277
ushr v18.4s,v0.4s,#17
1278
orr w12,w12,w15
1279
ushr v19.4s,v0.4s,#10
1280
eor w11,w11,w5,ror#19
1281
eor w15,w9,w9,ror#11
1282
sli v18.4s,v0.4s,#15
1283
add w8,w8,w12
1284
ushr v17.4s,v0.4s,#19
1285
ror w11,w11,#6
1286
eor w13,w9,w10
1287
eor v19.16b,v19.16b,v18.16b
1288
eor w15,w15,w9,ror#20
1289
add w8,w8,w11
1290
sli v17.4s,v0.4s,#13
1291
ldr w12,[sp,#12]
1292
and w14,w14,w13
1293
ror w15,w15,#2
1294
ld1 {v4.4s},[x16], #16
1295
add w4,w4,w8
1296
eor v19.16b,v19.16b,v17.16b
1297
eor w14,w14,w10
1298
eor v17.16b,v17.16b,v17.16b
1299
add w7,w7,w12
1300
add w8,w8,w15
1301
and w12,w5,w4
1302
mov v17.d[1],v19.d[0]
1303
bic w15,w6,w4
1304
eor w11,w4,w4,ror#5
1305
add w8,w8,w14
1306
add v0.4s,v0.4s,v17.4s
1307
orr w12,w12,w15
1308
eor w11,w11,w4,ror#19
1309
eor w15,w8,w8,ror#11
1310
add v4.4s,v4.4s,v0.4s
1311
add w7,w7,w12
1312
ror w11,w11,#6
1313
eor w14,w8,w9
1314
eor w15,w15,w8,ror#20
1315
add w7,w7,w11
1316
ldr w12,[sp,#16]
1317
and w13,w13,w14
1318
ror w15,w15,#2
1319
add w3,w3,w7
1320
eor w13,w13,w9
1321
st1 {v4.4s},[x17], #16
1322
ext v4.16b,v1.16b,v2.16b,#4
1323
add w6,w6,w12
1324
add w7,w7,w15
1325
and w12,w4,w3
1326
bic w15,w5,w3
1327
ext v7.16b,v3.16b,v0.16b,#4
1328
eor w11,w3,w3,ror#5
1329
add w7,w7,w13
1330
mov d19,v0.d[1]
1331
orr w12,w12,w15
1332
eor w11,w11,w3,ror#19
1333
ushr v6.4s,v4.4s,#7
1334
eor w15,w7,w7,ror#11
1335
ushr v5.4s,v4.4s,#3
1336
add w6,w6,w12
1337
add v1.4s,v1.4s,v7.4s
1338
ror w11,w11,#6
1339
sli v6.4s,v4.4s,#25
1340
eor w13,w7,w8
1341
eor w15,w15,w7,ror#20
1342
ushr v7.4s,v4.4s,#18
1343
add w6,w6,w11
1344
ldr w12,[sp,#20]
1345
and w14,w14,w13
1346
eor v5.16b,v5.16b,v6.16b
1347
ror w15,w15,#2
1348
add w10,w10,w6
1349
sli v7.4s,v4.4s,#14
1350
eor w14,w14,w8
1351
ushr v16.4s,v19.4s,#17
1352
add w5,w5,w12
1353
add w6,w6,w15
1354
and w12,w3,w10
1355
eor v5.16b,v5.16b,v7.16b
1356
bic w15,w4,w10
1357
eor w11,w10,w10,ror#5
1358
sli v16.4s,v19.4s,#15
1359
add w6,w6,w14
1360
orr w12,w12,w15
1361
ushr v17.4s,v19.4s,#10
1362
eor w11,w11,w10,ror#19
1363
eor w15,w6,w6,ror#11
1364
ushr v7.4s,v19.4s,#19
1365
add w5,w5,w12
1366
ror w11,w11,#6
1367
add v1.4s,v1.4s,v5.4s
1368
eor w14,w6,w7
1369
eor w15,w15,w6,ror#20
1370
sli v7.4s,v19.4s,#13
1371
add w5,w5,w11
1372
ldr w12,[sp,#24]
1373
and w13,w13,w14
1374
eor v17.16b,v17.16b,v16.16b
1375
ror w15,w15,#2
1376
add w9,w9,w5
1377
eor w13,w13,w7
1378
eor v17.16b,v17.16b,v7.16b
1379
add w4,w4,w12
1380
add w5,w5,w15
1381
and w12,w10,w9
1382
add v1.4s,v1.4s,v17.4s
1383
bic w15,w3,w9
1384
eor w11,w9,w9,ror#5
1385
add w5,w5,w13
1386
ushr v18.4s,v1.4s,#17
1387
orr w12,w12,w15
1388
ushr v19.4s,v1.4s,#10
1389
eor w11,w11,w9,ror#19
1390
eor w15,w5,w5,ror#11
1391
sli v18.4s,v1.4s,#15
1392
add w4,w4,w12
1393
ushr v17.4s,v1.4s,#19
1394
ror w11,w11,#6
1395
eor w13,w5,w6
1396
eor v19.16b,v19.16b,v18.16b
1397
eor w15,w15,w5,ror#20
1398
add w4,w4,w11
1399
sli v17.4s,v1.4s,#13
1400
ldr w12,[sp,#28]
1401
and w14,w14,w13
1402
ror w15,w15,#2
1403
ld1 {v4.4s},[x16], #16
1404
add w8,w8,w4
1405
eor v19.16b,v19.16b,v17.16b
1406
eor w14,w14,w6
1407
eor v17.16b,v17.16b,v17.16b
1408
add w3,w3,w12
1409
add w4,w4,w15
1410
and w12,w9,w8
1411
mov v17.d[1],v19.d[0]
1412
bic w15,w10,w8
1413
eor w11,w8,w8,ror#5
1414
add w4,w4,w14
1415
add v1.4s,v1.4s,v17.4s
1416
orr w12,w12,w15
1417
eor w11,w11,w8,ror#19
1418
eor w15,w4,w4,ror#11
1419
add v4.4s,v4.4s,v1.4s
1420
add w3,w3,w12
1421
ror w11,w11,#6
1422
eor w14,w4,w5
1423
eor w15,w15,w4,ror#20
1424
add w3,w3,w11
1425
ldr w12,[sp,#32]
1426
and w13,w13,w14
1427
ror w15,w15,#2
1428
add w7,w7,w3
1429
eor w13,w13,w5
1430
st1 {v4.4s},[x17], #16
1431
ext v4.16b,v2.16b,v3.16b,#4
1432
add w10,w10,w12
1433
add w3,w3,w15
1434
and w12,w8,w7
1435
bic w15,w9,w7
1436
ext v7.16b,v0.16b,v1.16b,#4
1437
eor w11,w7,w7,ror#5
1438
add w3,w3,w13
1439
mov d19,v1.d[1]
1440
orr w12,w12,w15
1441
eor w11,w11,w7,ror#19
1442
ushr v6.4s,v4.4s,#7
1443
eor w15,w3,w3,ror#11
1444
ushr v5.4s,v4.4s,#3
1445
add w10,w10,w12
1446
add v2.4s,v2.4s,v7.4s
1447
ror w11,w11,#6
1448
sli v6.4s,v4.4s,#25
1449
eor w13,w3,w4
1450
eor w15,w15,w3,ror#20
1451
ushr v7.4s,v4.4s,#18
1452
add w10,w10,w11
1453
ldr w12,[sp,#36]
1454
and w14,w14,w13
1455
eor v5.16b,v5.16b,v6.16b
1456
ror w15,w15,#2
1457
add w6,w6,w10
1458
sli v7.4s,v4.4s,#14
1459
eor w14,w14,w4
1460
ushr v16.4s,v19.4s,#17
1461
add w9,w9,w12
1462
add w10,w10,w15
1463
and w12,w7,w6
1464
eor v5.16b,v5.16b,v7.16b
1465
bic w15,w8,w6
1466
eor w11,w6,w6,ror#5
1467
sli v16.4s,v19.4s,#15
1468
add w10,w10,w14
1469
orr w12,w12,w15
1470
ushr v17.4s,v19.4s,#10
1471
eor w11,w11,w6,ror#19
1472
eor w15,w10,w10,ror#11
1473
ushr v7.4s,v19.4s,#19
1474
add w9,w9,w12
1475
ror w11,w11,#6
1476
add v2.4s,v2.4s,v5.4s
1477
eor w14,w10,w3
1478
eor w15,w15,w10,ror#20
1479
sli v7.4s,v19.4s,#13
1480
add w9,w9,w11
1481
ldr w12,[sp,#40]
1482
and w13,w13,w14
1483
eor v17.16b,v17.16b,v16.16b
1484
ror w15,w15,#2
1485
add w5,w5,w9
1486
eor w13,w13,w3
1487
eor v17.16b,v17.16b,v7.16b
1488
add w8,w8,w12
1489
add w9,w9,w15
1490
and w12,w6,w5
1491
add v2.4s,v2.4s,v17.4s
1492
bic w15,w7,w5
1493
eor w11,w5,w5,ror#5
1494
add w9,w9,w13
1495
ushr v18.4s,v2.4s,#17
1496
orr w12,w12,w15
1497
ushr v19.4s,v2.4s,#10
1498
eor w11,w11,w5,ror#19
1499
eor w15,w9,w9,ror#11
1500
sli v18.4s,v2.4s,#15
1501
add w8,w8,w12
1502
ushr v17.4s,v2.4s,#19
1503
ror w11,w11,#6
1504
eor w13,w9,w10
1505
eor v19.16b,v19.16b,v18.16b
1506
eor w15,w15,w9,ror#20
1507
add w8,w8,w11
1508
sli v17.4s,v2.4s,#13
1509
ldr w12,[sp,#44]
1510
and w14,w14,w13
1511
ror w15,w15,#2
1512
ld1 {v4.4s},[x16], #16
1513
add w4,w4,w8
1514
eor v19.16b,v19.16b,v17.16b
1515
eor w14,w14,w10
1516
eor v17.16b,v17.16b,v17.16b
1517
add w7,w7,w12
1518
add w8,w8,w15
1519
and w12,w5,w4
1520
mov v17.d[1],v19.d[0]
1521
bic w15,w6,w4
1522
eor w11,w4,w4,ror#5
1523
add w8,w8,w14
1524
add v2.4s,v2.4s,v17.4s
1525
orr w12,w12,w15
1526
eor w11,w11,w4,ror#19
1527
eor w15,w8,w8,ror#11
1528
add v4.4s,v4.4s,v2.4s
1529
add w7,w7,w12
1530
ror w11,w11,#6
1531
eor w14,w8,w9
1532
eor w15,w15,w8,ror#20
1533
add w7,w7,w11
1534
ldr w12,[sp,#48]
1535
and w13,w13,w14
1536
ror w15,w15,#2
1537
add w3,w3,w7
1538
eor w13,w13,w9
1539
st1 {v4.4s},[x17], #16
1540
ext v4.16b,v3.16b,v0.16b,#4
1541
add w6,w6,w12
1542
add w7,w7,w15
1543
and w12,w4,w3
1544
bic w15,w5,w3
1545
ext v7.16b,v1.16b,v2.16b,#4
1546
eor w11,w3,w3,ror#5
1547
add w7,w7,w13
1548
mov d19,v2.d[1]
1549
orr w12,w12,w15
1550
eor w11,w11,w3,ror#19
1551
ushr v6.4s,v4.4s,#7
1552
eor w15,w7,w7,ror#11
1553
ushr v5.4s,v4.4s,#3
1554
add w6,w6,w12
1555
add v3.4s,v3.4s,v7.4s
1556
ror w11,w11,#6
1557
sli v6.4s,v4.4s,#25
1558
eor w13,w7,w8
1559
eor w15,w15,w7,ror#20
1560
ushr v7.4s,v4.4s,#18
1561
add w6,w6,w11
1562
ldr w12,[sp,#52]
1563
and w14,w14,w13
1564
eor v5.16b,v5.16b,v6.16b
1565
ror w15,w15,#2
1566
add w10,w10,w6
1567
sli v7.4s,v4.4s,#14
1568
eor w14,w14,w8
1569
ushr v16.4s,v19.4s,#17
1570
add w5,w5,w12
1571
add w6,w6,w15
1572
and w12,w3,w10
1573
eor v5.16b,v5.16b,v7.16b
1574
bic w15,w4,w10
1575
eor w11,w10,w10,ror#5
1576
sli v16.4s,v19.4s,#15
1577
add w6,w6,w14
1578
orr w12,w12,w15
1579
ushr v17.4s,v19.4s,#10
1580
eor w11,w11,w10,ror#19
1581
eor w15,w6,w6,ror#11
1582
ushr v7.4s,v19.4s,#19
1583
add w5,w5,w12
1584
ror w11,w11,#6
1585
add v3.4s,v3.4s,v5.4s
1586
eor w14,w6,w7
1587
eor w15,w15,w6,ror#20
1588
sli v7.4s,v19.4s,#13
1589
add w5,w5,w11
1590
ldr w12,[sp,#56]
1591
and w13,w13,w14
1592
eor v17.16b,v17.16b,v16.16b
1593
ror w15,w15,#2
1594
add w9,w9,w5
1595
eor w13,w13,w7
1596
eor v17.16b,v17.16b,v7.16b
1597
add w4,w4,w12
1598
add w5,w5,w15
1599
and w12,w10,w9
1600
add v3.4s,v3.4s,v17.4s
1601
bic w15,w3,w9
1602
eor w11,w9,w9,ror#5
1603
add w5,w5,w13
1604
ushr v18.4s,v3.4s,#17
1605
orr w12,w12,w15
1606
ushr v19.4s,v3.4s,#10
1607
eor w11,w11,w9,ror#19
1608
eor w15,w5,w5,ror#11
1609
sli v18.4s,v3.4s,#15
1610
add w4,w4,w12
1611
ushr v17.4s,v3.4s,#19
1612
ror w11,w11,#6
1613
eor w13,w5,w6
1614
eor v19.16b,v19.16b,v18.16b
1615
eor w15,w15,w5,ror#20
1616
add w4,w4,w11
1617
sli v17.4s,v3.4s,#13
1618
ldr w12,[sp,#60]
1619
and w14,w14,w13
1620
ror w15,w15,#2
1621
ld1 {v4.4s},[x16], #16
1622
add w8,w8,w4
1623
eor v19.16b,v19.16b,v17.16b
1624
eor w14,w14,w6
1625
eor v17.16b,v17.16b,v17.16b
1626
add w3,w3,w12
1627
add w4,w4,w15
1628
and w12,w9,w8
1629
mov v17.d[1],v19.d[0]
1630
bic w15,w10,w8
1631
eor w11,w8,w8,ror#5
1632
add w4,w4,w14
1633
add v3.4s,v3.4s,v17.4s
1634
orr w12,w12,w15
1635
eor w11,w11,w8,ror#19
1636
eor w15,w4,w4,ror#11
1637
add v4.4s,v4.4s,v3.4s
1638
add w3,w3,w12
1639
ror w11,w11,#6
1640
eor w14,w4,w5
1641
eor w15,w15,w4,ror#20
1642
add w3,w3,w11
1643
ldr w12,[x16]
1644
and w13,w13,w14
1645
ror w15,w15,#2
1646
add w7,w7,w3
1647
eor w13,w13,w5
1648
st1 {v4.4s},[x17], #16
1649
cmp w12,#0 // check for K256 terminator
1650
ldr w12,[sp,#0]
1651
sub x17,x17,#64
1652
bne .L_00_48
1653
1654
sub x16,x16,#256 // rewind x16
1655
cmp x1,x2
1656
mov x17, #64
1657
csel x17, x17, xzr, eq
1658
sub x1,x1,x17 // avoid SEGV
1659
mov x17,sp
1660
add w10,w10,w12
1661
add w3,w3,w15
1662
and w12,w8,w7
1663
ld1 {v0.16b},[x1],#16
1664
bic w15,w9,w7
1665
eor w11,w7,w7,ror#5
1666
ld1 {v4.4s},[x16],#16
1667
add w3,w3,w13
1668
orr w12,w12,w15
1669
eor w11,w11,w7,ror#19
1670
eor w15,w3,w3,ror#11
1671
rev32 v0.16b,v0.16b
1672
add w10,w10,w12
1673
ror w11,w11,#6
1674
eor w13,w3,w4
1675
eor w15,w15,w3,ror#20
1676
add v4.4s,v4.4s,v0.4s
1677
add w10,w10,w11
1678
ldr w12,[sp,#4]
1679
and w14,w14,w13
1680
ror w15,w15,#2
1681
add w6,w6,w10
1682
eor w14,w14,w4
1683
add w9,w9,w12
1684
add w10,w10,w15
1685
and w12,w7,w6
1686
bic w15,w8,w6
1687
eor w11,w6,w6,ror#5
1688
add w10,w10,w14
1689
orr w12,w12,w15
1690
eor w11,w11,w6,ror#19
1691
eor w15,w10,w10,ror#11
1692
add w9,w9,w12
1693
ror w11,w11,#6
1694
eor w14,w10,w3
1695
eor w15,w15,w10,ror#20
1696
add w9,w9,w11
1697
ldr w12,[sp,#8]
1698
and w13,w13,w14
1699
ror w15,w15,#2
1700
add w5,w5,w9
1701
eor w13,w13,w3
1702
add w8,w8,w12
1703
add w9,w9,w15
1704
and w12,w6,w5
1705
bic w15,w7,w5
1706
eor w11,w5,w5,ror#5
1707
add w9,w9,w13
1708
orr w12,w12,w15
1709
eor w11,w11,w5,ror#19
1710
eor w15,w9,w9,ror#11
1711
add w8,w8,w12
1712
ror w11,w11,#6
1713
eor w13,w9,w10
1714
eor w15,w15,w9,ror#20
1715
add w8,w8,w11
1716
ldr w12,[sp,#12]
1717
and w14,w14,w13
1718
ror w15,w15,#2
1719
add w4,w4,w8
1720
eor w14,w14,w10
1721
add w7,w7,w12
1722
add w8,w8,w15
1723
and w12,w5,w4
1724
bic w15,w6,w4
1725
eor w11,w4,w4,ror#5
1726
add w8,w8,w14
1727
orr w12,w12,w15
1728
eor w11,w11,w4,ror#19
1729
eor w15,w8,w8,ror#11
1730
add w7,w7,w12
1731
ror w11,w11,#6
1732
eor w14,w8,w9
1733
eor w15,w15,w8,ror#20
1734
add w7,w7,w11
1735
ldr w12,[sp,#16]
1736
and w13,w13,w14
1737
ror w15,w15,#2
1738
add w3,w3,w7
1739
eor w13,w13,w9
1740
st1 {v4.4s},[x17], #16
1741
add w6,w6,w12
1742
add w7,w7,w15
1743
and w12,w4,w3
1744
ld1 {v1.16b},[x1],#16
1745
bic w15,w5,w3
1746
eor w11,w3,w3,ror#5
1747
ld1 {v4.4s},[x16],#16
1748
add w7,w7,w13
1749
orr w12,w12,w15
1750
eor w11,w11,w3,ror#19
1751
eor w15,w7,w7,ror#11
1752
rev32 v1.16b,v1.16b
1753
add w6,w6,w12
1754
ror w11,w11,#6
1755
eor w13,w7,w8
1756
eor w15,w15,w7,ror#20
1757
add v4.4s,v4.4s,v1.4s
1758
add w6,w6,w11
1759
ldr w12,[sp,#20]
1760
and w14,w14,w13
1761
ror w15,w15,#2
1762
add w10,w10,w6
1763
eor w14,w14,w8
1764
add w5,w5,w12
1765
add w6,w6,w15
1766
and w12,w3,w10
1767
bic w15,w4,w10
1768
eor w11,w10,w10,ror#5
1769
add w6,w6,w14
1770
orr w12,w12,w15
1771
eor w11,w11,w10,ror#19
1772
eor w15,w6,w6,ror#11
1773
add w5,w5,w12
1774
ror w11,w11,#6
1775
eor w14,w6,w7
1776
eor w15,w15,w6,ror#20
1777
add w5,w5,w11
1778
ldr w12,[sp,#24]
1779
and w13,w13,w14
1780
ror w15,w15,#2
1781
add w9,w9,w5
1782
eor w13,w13,w7
1783
add w4,w4,w12
1784
add w5,w5,w15
1785
and w12,w10,w9
1786
bic w15,w3,w9
1787
eor w11,w9,w9,ror#5
1788
add w5,w5,w13
1789
orr w12,w12,w15
1790
eor w11,w11,w9,ror#19
1791
eor w15,w5,w5,ror#11
1792
add w4,w4,w12
1793
ror w11,w11,#6
1794
eor w13,w5,w6
1795
eor w15,w15,w5,ror#20
1796
add w4,w4,w11
1797
ldr w12,[sp,#28]
1798
and w14,w14,w13
1799
ror w15,w15,#2
1800
add w8,w8,w4
1801
eor w14,w14,w6
1802
add w3,w3,w12
1803
add w4,w4,w15
1804
and w12,w9,w8
1805
bic w15,w10,w8
1806
eor w11,w8,w8,ror#5
1807
add w4,w4,w14
1808
orr w12,w12,w15
1809
eor w11,w11,w8,ror#19
1810
eor w15,w4,w4,ror#11
1811
add w3,w3,w12
1812
ror w11,w11,#6
1813
eor w14,w4,w5
1814
eor w15,w15,w4,ror#20
1815
add w3,w3,w11
1816
ldr w12,[sp,#32]
1817
and w13,w13,w14
1818
ror w15,w15,#2
1819
add w7,w7,w3
1820
eor w13,w13,w5
1821
st1 {v4.4s},[x17], #16
1822
add w10,w10,w12
1823
add w3,w3,w15
1824
and w12,w8,w7
1825
ld1 {v2.16b},[x1],#16
1826
bic w15,w9,w7
1827
eor w11,w7,w7,ror#5
1828
ld1 {v4.4s},[x16],#16
1829
add w3,w3,w13
1830
orr w12,w12,w15
1831
eor w11,w11,w7,ror#19
1832
eor w15,w3,w3,ror#11
1833
rev32 v2.16b,v2.16b
1834
add w10,w10,w12
1835
ror w11,w11,#6
1836
eor w13,w3,w4
1837
eor w15,w15,w3,ror#20
1838
add v4.4s,v4.4s,v2.4s
1839
add w10,w10,w11
1840
ldr w12,[sp,#36]
1841
and w14,w14,w13
1842
ror w15,w15,#2
1843
add w6,w6,w10
1844
eor w14,w14,w4
1845
add w9,w9,w12
1846
add w10,w10,w15
1847
and w12,w7,w6
1848
bic w15,w8,w6
1849
eor w11,w6,w6,ror#5
1850
add w10,w10,w14
1851
orr w12,w12,w15
1852
eor w11,w11,w6,ror#19
1853
eor w15,w10,w10,ror#11
1854
add w9,w9,w12
1855
ror w11,w11,#6
1856
eor w14,w10,w3
1857
eor w15,w15,w10,ror#20
1858
add w9,w9,w11
1859
ldr w12,[sp,#40]
1860
and w13,w13,w14
1861
ror w15,w15,#2
1862
add w5,w5,w9
1863
eor w13,w13,w3
1864
add w8,w8,w12
1865
add w9,w9,w15
1866
and w12,w6,w5
1867
bic w15,w7,w5
1868
eor w11,w5,w5,ror#5
1869
add w9,w9,w13
1870
orr w12,w12,w15
1871
eor w11,w11,w5,ror#19
1872
eor w15,w9,w9,ror#11
1873
add w8,w8,w12
1874
ror w11,w11,#6
1875
eor w13,w9,w10
1876
eor w15,w15,w9,ror#20
1877
add w8,w8,w11
1878
ldr w12,[sp,#44]
1879
and w14,w14,w13
1880
ror w15,w15,#2
1881
add w4,w4,w8
1882
eor w14,w14,w10
1883
add w7,w7,w12
1884
add w8,w8,w15
1885
and w12,w5,w4
1886
bic w15,w6,w4
1887
eor w11,w4,w4,ror#5
1888
add w8,w8,w14
1889
orr w12,w12,w15
1890
eor w11,w11,w4,ror#19
1891
eor w15,w8,w8,ror#11
1892
add w7,w7,w12
1893
ror w11,w11,#6
1894
eor w14,w8,w9
1895
eor w15,w15,w8,ror#20
1896
add w7,w7,w11
1897
ldr w12,[sp,#48]
1898
and w13,w13,w14
1899
ror w15,w15,#2
1900
add w3,w3,w7
1901
eor w13,w13,w9
1902
st1 {v4.4s},[x17], #16
1903
add w6,w6,w12
1904
add w7,w7,w15
1905
and w12,w4,w3
1906
ld1 {v3.16b},[x1],#16
1907
bic w15,w5,w3
1908
eor w11,w3,w3,ror#5
1909
ld1 {v4.4s},[x16],#16
1910
add w7,w7,w13
1911
orr w12,w12,w15
1912
eor w11,w11,w3,ror#19
1913
eor w15,w7,w7,ror#11
1914
rev32 v3.16b,v3.16b
1915
add w6,w6,w12
1916
ror w11,w11,#6
1917
eor w13,w7,w8
1918
eor w15,w15,w7,ror#20
1919
add v4.4s,v4.4s,v3.4s
1920
add w6,w6,w11
1921
ldr w12,[sp,#52]
1922
and w14,w14,w13
1923
ror w15,w15,#2
1924
add w10,w10,w6
1925
eor w14,w14,w8
1926
add w5,w5,w12
1927
add w6,w6,w15
1928
and w12,w3,w10
1929
bic w15,w4,w10
1930
eor w11,w10,w10,ror#5
1931
add w6,w6,w14
1932
orr w12,w12,w15
1933
eor w11,w11,w10,ror#19
1934
eor w15,w6,w6,ror#11
1935
add w5,w5,w12
1936
ror w11,w11,#6
1937
eor w14,w6,w7
1938
eor w15,w15,w6,ror#20
1939
add w5,w5,w11
1940
ldr w12,[sp,#56]
1941
and w13,w13,w14
1942
ror w15,w15,#2
1943
add w9,w9,w5
1944
eor w13,w13,w7
1945
add w4,w4,w12
1946
add w5,w5,w15
1947
and w12,w10,w9
1948
bic w15,w3,w9
1949
eor w11,w9,w9,ror#5
1950
add w5,w5,w13
1951
orr w12,w12,w15
1952
eor w11,w11,w9,ror#19
1953
eor w15,w5,w5,ror#11
1954
add w4,w4,w12
1955
ror w11,w11,#6
1956
eor w13,w5,w6
1957
eor w15,w15,w5,ror#20
1958
add w4,w4,w11
1959
ldr w12,[sp,#60]
1960
and w14,w14,w13
1961
ror w15,w15,#2
1962
add w8,w8,w4
1963
eor w14,w14,w6
1964
add w3,w3,w12
1965
add w4,w4,w15
1966
and w12,w9,w8
1967
bic w15,w10,w8
1968
eor w11,w8,w8,ror#5
1969
add w4,w4,w14
1970
orr w12,w12,w15
1971
eor w11,w11,w8,ror#19
1972
eor w15,w4,w4,ror#11
1973
add w3,w3,w12
1974
ror w11,w11,#6
1975
eor w14,w4,w5
1976
eor w15,w15,w4,ror#20
1977
add w3,w3,w11
1978
and w13,w13,w14
1979
ror w15,w15,#2
1980
add w7,w7,w3
1981
eor w13,w13,w5
1982
st1 {v4.4s},[x17], #16
1983
add w3,w3,w15 // h+=Sigma0(a) from the past
1984
ldp w11,w12,[x0,#0]
1985
add w3,w3,w13 // h+=Maj(a,b,c) from the past
1986
ldp w13,w14,[x0,#8]
1987
add w3,w3,w11 // accumulate
1988
add w4,w4,w12
1989
ldp w11,w12,[x0,#16]
1990
add w5,w5,w13
1991
add w6,w6,w14
1992
ldp w13,w14,[x0,#24]
1993
add w7,w7,w11
1994
add w8,w8,w12
1995
ldr w12,[sp,#0]
1996
stp w3,w4,[x0,#0]
1997
add w9,w9,w13
1998
mov w13,wzr
1999
stp w5,w6,[x0,#8]
2000
add w10,w10,w14
2001
stp w7,w8,[x0,#16]
2002
eor w14,w4,w5
2003
stp w9,w10,[x0,#24]
2004
mov w15,wzr
2005
mov x17,sp
2006
b.ne .L_00_48
2007
2008
ldr x29,[x29]
2009
add sp,sp,#16*4+16
2010
ret
2011
.size zfs_sha256_block_neon,.-zfs_sha256_block_neon
2012
2013
#endif
2014
2015