1 #if defined(__aarch64__)
7 .globl sha256_block_data_order
8 .type sha256_block_data_order,%function
10 sha256_block_data_order:
11 ldr x16,.LOPENSSL_armcap_P
12 adr x17,.LOPENSSL_armcap_P
17 stp x29,x30,[sp,#-128]!
27 ldp w20,w21,[x0] // load context
30 add x2,x1,x2,lsl#6 // end of input
37 ldr w19,[x30],#4 // *K++
38 eor w28,w21,w22 // magic seed
44 add w27,w27,w19 // h+=K[i]
48 add w27,w27,w3 // h+=X[i]
49 orr w17,w17,w19 // Ch(e,f,g)
50 eor w19,w20,w21 // a^b, b^c in next round
51 eor w16,w16,w6,ror#11 // Sigma1(e)
53 add w27,w27,w17 // h+=Ch(e,f,g)
55 add w27,w27,w16 // h+=Sigma1(e)
56 and w28,w28,w19 // (b^c)&=(a^b)
57 add w23,w23,w27 // d+=h
58 eor w28,w28,w21 // Maj(a,b,c)
59 eor w17,w6,w17,ror#13 // Sigma0(a)
60 add w27,w27,w28 // h+=Maj(a,b,c)
61 ldr w28,[x30],#4 // *K++, w19 in next round
62 //add w27,w27,w17 // h+=Sigma0(a)
67 add w27,w27,w17 // h+=Sigma0(a)
69 add w26,w26,w28 // h+=K[i]
73 add w26,w26,w4 // h+=X[i]
74 orr w17,w17,w28 // Ch(e,f,g)
75 eor w28,w27,w20 // a^b, b^c in next round
76 eor w16,w16,w7,ror#11 // Sigma1(e)
78 add w26,w26,w17 // h+=Ch(e,f,g)
80 add w26,w26,w16 // h+=Sigma1(e)
81 and w19,w19,w28 // (b^c)&=(a^b)
82 add w22,w22,w26 // d+=h
83 eor w19,w19,w20 // Maj(a,b,c)
84 eor w17,w7,w17,ror#13 // Sigma0(a)
85 add w26,w26,w19 // h+=Maj(a,b,c)
86 ldr w19,[x30],#4 // *K++, w28 in next round
87 //add w26,w26,w17 // h+=Sigma0(a)
91 add w26,w26,w17 // h+=Sigma0(a)
93 add w25,w25,w19 // h+=K[i]
97 add w25,w25,w5 // h+=X[i]
98 orr w17,w17,w19 // Ch(e,f,g)
99 eor w19,w26,w27 // a^b, b^c in next round
100 eor w16,w16,w8,ror#11 // Sigma1(e)
102 add w25,w25,w17 // h+=Ch(e,f,g)
103 eor w17,w26,w26,ror#9
104 add w25,w25,w16 // h+=Sigma1(e)
105 and w28,w28,w19 // (b^c)&=(a^b)
106 add w21,w21,w25 // d+=h
107 eor w28,w28,w27 // Maj(a,b,c)
108 eor w17,w8,w17,ror#13 // Sigma0(a)
109 add w25,w25,w28 // h+=Maj(a,b,c)
110 ldr w28,[x30],#4 // *K++, w19 in next round
111 //add w25,w25,w17 // h+=Sigma0(a)
116 add w25,w25,w17 // h+=Sigma0(a)
118 add w24,w24,w28 // h+=K[i]
119 eor w9,w21,w21,ror#14
122 add w24,w24,w6 // h+=X[i]
123 orr w17,w17,w28 // Ch(e,f,g)
124 eor w28,w25,w26 // a^b, b^c in next round
125 eor w16,w16,w9,ror#11 // Sigma1(e)
127 add w24,w24,w17 // h+=Ch(e,f,g)
128 eor w17,w25,w25,ror#9
129 add w24,w24,w16 // h+=Sigma1(e)
130 and w19,w19,w28 // (b^c)&=(a^b)
131 add w20,w20,w24 // d+=h
132 eor w19,w19,w26 // Maj(a,b,c)
133 eor w17,w9,w17,ror#13 // Sigma0(a)
134 add w24,w24,w19 // h+=Maj(a,b,c)
135 ldr w19,[x30],#4 // *K++, w28 in next round
136 //add w24,w24,w17 // h+=Sigma0(a)
140 add w24,w24,w17 // h+=Sigma0(a)
142 add w23,w23,w19 // h+=K[i]
143 eor w10,w20,w20,ror#14
146 add w23,w23,w7 // h+=X[i]
147 orr w17,w17,w19 // Ch(e,f,g)
148 eor w19,w24,w25 // a^b, b^c in next round
149 eor w16,w16,w10,ror#11 // Sigma1(e)
151 add w23,w23,w17 // h+=Ch(e,f,g)
152 eor w17,w24,w24,ror#9
153 add w23,w23,w16 // h+=Sigma1(e)
154 and w28,w28,w19 // (b^c)&=(a^b)
155 add w27,w27,w23 // d+=h
156 eor w28,w28,w25 // Maj(a,b,c)
157 eor w17,w10,w17,ror#13 // Sigma0(a)
158 add w23,w23,w28 // h+=Maj(a,b,c)
159 ldr w28,[x30],#4 // *K++, w19 in next round
160 //add w23,w23,w17 // h+=Sigma0(a)
165 add w23,w23,w17 // h+=Sigma0(a)
167 add w22,w22,w28 // h+=K[i]
168 eor w11,w27,w27,ror#14
171 add w22,w22,w8 // h+=X[i]
172 orr w17,w17,w28 // Ch(e,f,g)
173 eor w28,w23,w24 // a^b, b^c in next round
174 eor w16,w16,w11,ror#11 // Sigma1(e)
176 add w22,w22,w17 // h+=Ch(e,f,g)
177 eor w17,w23,w23,ror#9
178 add w22,w22,w16 // h+=Sigma1(e)
179 and w19,w19,w28 // (b^c)&=(a^b)
180 add w26,w26,w22 // d+=h
181 eor w19,w19,w24 // Maj(a,b,c)
182 eor w17,w11,w17,ror#13 // Sigma0(a)
183 add w22,w22,w19 // h+=Maj(a,b,c)
184 ldr w19,[x30],#4 // *K++, w28 in next round
185 //add w22,w22,w17 // h+=Sigma0(a)
189 add w22,w22,w17 // h+=Sigma0(a)
191 add w21,w21,w19 // h+=K[i]
192 eor w12,w26,w26,ror#14
195 add w21,w21,w9 // h+=X[i]
196 orr w17,w17,w19 // Ch(e,f,g)
197 eor w19,w22,w23 // a^b, b^c in next round
198 eor w16,w16,w12,ror#11 // Sigma1(e)
200 add w21,w21,w17 // h+=Ch(e,f,g)
201 eor w17,w22,w22,ror#9
202 add w21,w21,w16 // h+=Sigma1(e)
203 and w28,w28,w19 // (b^c)&=(a^b)
204 add w25,w25,w21 // d+=h
205 eor w28,w28,w23 // Maj(a,b,c)
206 eor w17,w12,w17,ror#13 // Sigma0(a)
207 add w21,w21,w28 // h+=Maj(a,b,c)
208 ldr w28,[x30],#4 // *K++, w19 in next round
209 //add w21,w21,w17 // h+=Sigma0(a)
213 ldp w11,w12,[x1],#2*4
214 add w21,w21,w17 // h+=Sigma0(a)
216 add w20,w20,w28 // h+=K[i]
217 eor w13,w25,w25,ror#14
220 add w20,w20,w10 // h+=X[i]
221 orr w17,w17,w28 // Ch(e,f,g)
222 eor w28,w21,w22 // a^b, b^c in next round
223 eor w16,w16,w13,ror#11 // Sigma1(e)
225 add w20,w20,w17 // h+=Ch(e,f,g)
226 eor w17,w21,w21,ror#9
227 add w20,w20,w16 // h+=Sigma1(e)
228 and w19,w19,w28 // (b^c)&=(a^b)
229 add w24,w24,w20 // d+=h
230 eor w19,w19,w22 // Maj(a,b,c)
231 eor w17,w13,w17,ror#13 // Sigma0(a)
232 add w20,w20,w19 // h+=Maj(a,b,c)
233 ldr w19,[x30],#4 // *K++, w28 in next round
234 //add w20,w20,w17 // h+=Sigma0(a)
238 add w20,w20,w17 // h+=Sigma0(a)
240 add w27,w27,w19 // h+=K[i]
241 eor w14,w24,w24,ror#14
244 add w27,w27,w11 // h+=X[i]
245 orr w17,w17,w19 // Ch(e,f,g)
246 eor w19,w20,w21 // a^b, b^c in next round
247 eor w16,w16,w14,ror#11 // Sigma1(e)
249 add w27,w27,w17 // h+=Ch(e,f,g)
250 eor w17,w20,w20,ror#9
251 add w27,w27,w16 // h+=Sigma1(e)
252 and w28,w28,w19 // (b^c)&=(a^b)
253 add w23,w23,w27 // d+=h
254 eor w28,w28,w21 // Maj(a,b,c)
255 eor w17,w14,w17,ror#13 // Sigma0(a)
256 add w27,w27,w28 // h+=Maj(a,b,c)
257 ldr w28,[x30],#4 // *K++, w19 in next round
258 //add w27,w27,w17 // h+=Sigma0(a)
262 ldp w13,w14,[x1],#2*4
263 add w27,w27,w17 // h+=Sigma0(a)
265 add w26,w26,w28 // h+=K[i]
266 eor w15,w23,w23,ror#14
269 add w26,w26,w12 // h+=X[i]
270 orr w17,w17,w28 // Ch(e,f,g)
271 eor w28,w27,w20 // a^b, b^c in next round
272 eor w16,w16,w15,ror#11 // Sigma1(e)
274 add w26,w26,w17 // h+=Ch(e,f,g)
275 eor w17,w27,w27,ror#9
276 add w26,w26,w16 // h+=Sigma1(e)
277 and w19,w19,w28 // (b^c)&=(a^b)
278 add w22,w22,w26 // d+=h
279 eor w19,w19,w20 // Maj(a,b,c)
280 eor w17,w15,w17,ror#13 // Sigma0(a)
281 add w26,w26,w19 // h+=Maj(a,b,c)
282 ldr w19,[x30],#4 // *K++, w28 in next round
283 //add w26,w26,w17 // h+=Sigma0(a)
287 add w26,w26,w17 // h+=Sigma0(a)
289 add w25,w25,w19 // h+=K[i]
290 eor w0,w22,w22,ror#14
293 add w25,w25,w13 // h+=X[i]
294 orr w17,w17,w19 // Ch(e,f,g)
295 eor w19,w26,w27 // a^b, b^c in next round
296 eor w16,w16,w0,ror#11 // Sigma1(e)
298 add w25,w25,w17 // h+=Ch(e,f,g)
299 eor w17,w26,w26,ror#9
300 add w25,w25,w16 // h+=Sigma1(e)
301 and w28,w28,w19 // (b^c)&=(a^b)
302 add w21,w21,w25 // d+=h
303 eor w28,w28,w27 // Maj(a,b,c)
304 eor w17,w0,w17,ror#13 // Sigma0(a)
305 add w25,w25,w28 // h+=Maj(a,b,c)
306 ldr w28,[x30],#4 // *K++, w19 in next round
307 //add w25,w25,w17 // h+=Sigma0(a)
312 add w25,w25,w17 // h+=Sigma0(a)
315 add w24,w24,w28 // h+=K[i]
316 eor w6,w21,w21,ror#14
319 add w24,w24,w14 // h+=X[i]
320 orr w17,w17,w28 // Ch(e,f,g)
321 eor w28,w25,w26 // a^b, b^c in next round
322 eor w16,w16,w6,ror#11 // Sigma1(e)
324 add w24,w24,w17 // h+=Ch(e,f,g)
325 eor w17,w25,w25,ror#9
326 add w24,w24,w16 // h+=Sigma1(e)
327 and w19,w19,w28 // (b^c)&=(a^b)
328 add w20,w20,w24 // d+=h
329 eor w19,w19,w26 // Maj(a,b,c)
330 eor w17,w6,w17,ror#13 // Sigma0(a)
331 add w24,w24,w19 // h+=Maj(a,b,c)
332 ldr w19,[x30],#4 // *K++, w28 in next round
333 //add w24,w24,w17 // h+=Sigma0(a)
337 add w24,w24,w17 // h+=Sigma0(a)
340 add w23,w23,w19 // h+=K[i]
341 eor w7,w20,w20,ror#14
344 add w23,w23,w15 // h+=X[i]
345 orr w17,w17,w19 // Ch(e,f,g)
346 eor w19,w24,w25 // a^b, b^c in next round
347 eor w16,w16,w7,ror#11 // Sigma1(e)
349 add w23,w23,w17 // h+=Ch(e,f,g)
350 eor w17,w24,w24,ror#9
351 add w23,w23,w16 // h+=Sigma1(e)
352 and w28,w28,w19 // (b^c)&=(a^b)
353 add w27,w27,w23 // d+=h
354 eor w28,w28,w25 // Maj(a,b,c)
355 eor w17,w7,w17,ror#13 // Sigma0(a)
356 add w23,w23,w28 // h+=Maj(a,b,c)
357 ldr w28,[x30],#4 // *K++, w19 in next round
358 //add w23,w23,w17 // h+=Sigma0(a)
363 add w23,w23,w17 // h+=Sigma0(a)
366 add w22,w22,w28 // h+=K[i]
367 eor w8,w27,w27,ror#14
370 add w22,w22,w0 // h+=X[i]
371 orr w17,w17,w28 // Ch(e,f,g)
372 eor w28,w23,w24 // a^b, b^c in next round
373 eor w16,w16,w8,ror#11 // Sigma1(e)
375 add w22,w22,w17 // h+=Ch(e,f,g)
376 eor w17,w23,w23,ror#9
377 add w22,w22,w16 // h+=Sigma1(e)
378 and w19,w19,w28 // (b^c)&=(a^b)
379 add w26,w26,w22 // d+=h
380 eor w19,w19,w24 // Maj(a,b,c)
381 eor w17,w8,w17,ror#13 // Sigma0(a)
382 add w22,w22,w19 // h+=Maj(a,b,c)
383 ldr w19,[x30],#4 // *K++, w28 in next round
384 //add w22,w22,w17 // h+=Sigma0(a)
389 add w22,w22,w17 // h+=Sigma0(a)
392 add w21,w21,w19 // h+=K[i]
393 eor w9,w26,w26,ror#14
396 add w21,w21,w1 // h+=X[i]
397 orr w17,w17,w19 // Ch(e,f,g)
398 eor w19,w22,w23 // a^b, b^c in next round
399 eor w16,w16,w9,ror#11 // Sigma1(e)
401 add w21,w21,w17 // h+=Ch(e,f,g)
402 eor w17,w22,w22,ror#9
403 add w21,w21,w16 // h+=Sigma1(e)
404 and w28,w28,w19 // (b^c)&=(a^b)
405 add w25,w25,w21 // d+=h
406 eor w28,w28,w23 // Maj(a,b,c)
407 eor w17,w9,w17,ror#13 // Sigma0(a)
408 add w21,w21,w28 // h+=Maj(a,b,c)
409 ldr w28,[x30],#4 // *K++, w19 in next round
410 //add w21,w21,w17 // h+=Sigma0(a)
415 add w21,w21,w17 // h+=Sigma0(a)
418 add w20,w20,w28 // h+=K[i]
424 add w20,w20,w2 // h+=X[i]
425 eor w16,w16,w25,ror#11
427 orr w17,w17,w28 // Ch(e,f,g)
428 eor w28,w21,w22 // a^b, b^c in next round
429 eor w16,w16,w25,ror#25 // Sigma1(e)
430 eor w10,w10,w21,ror#13
431 add w20,w20,w17 // h+=Ch(e,f,g)
432 and w19,w19,w28 // (b^c)&=(a^b)
434 eor w9,w9,w4,lsr#3 // sigma0(X[i+1])
435 add w20,w20,w16 // h+=Sigma1(e)
436 eor w19,w19,w22 // Maj(a,b,c)
437 eor w17,w10,w21,ror#22 // Sigma0(a)
438 eor w8,w8,w1,lsr#10 // sigma1(X[i+14])
440 add w24,w24,w20 // d+=h
441 add w20,w20,w19 // h+=Maj(a,b,c)
442 ldr w19,[x30],#4 // *K++, w28 in next round
444 add w20,w20,w17 // h+=Sigma0(a)
450 add w27,w27,w19 // h+=K[i]
456 add w27,w27,w3 // h+=X[i]
457 eor w16,w16,w24,ror#11
458 eor w10,w10,w5,ror#18
459 orr w17,w17,w19 // Ch(e,f,g)
460 eor w19,w20,w21 // a^b, b^c in next round
461 eor w16,w16,w24,ror#25 // Sigma1(e)
462 eor w11,w11,w20,ror#13
463 add w27,w27,w17 // h+=Ch(e,f,g)
464 and w28,w28,w19 // (b^c)&=(a^b)
466 eor w10,w10,w5,lsr#3 // sigma0(X[i+1])
467 add w27,w27,w16 // h+=Sigma1(e)
468 eor w28,w28,w21 // Maj(a,b,c)
469 eor w17,w11,w20,ror#22 // Sigma0(a)
470 eor w9,w9,w2,lsr#10 // sigma1(X[i+14])
472 add w23,w23,w27 // d+=h
473 add w27,w27,w28 // h+=Maj(a,b,c)
474 ldr w28,[x30],#4 // *K++, w19 in next round
476 add w27,w27,w17 // h+=Sigma0(a)
481 add w26,w26,w28 // h+=K[i]
487 add w26,w26,w4 // h+=X[i]
488 eor w16,w16,w23,ror#11
489 eor w11,w11,w6,ror#18
490 orr w17,w17,w28 // Ch(e,f,g)
491 eor w28,w27,w20 // a^b, b^c in next round
492 eor w16,w16,w23,ror#25 // Sigma1(e)
493 eor w12,w12,w27,ror#13
494 add w26,w26,w17 // h+=Ch(e,f,g)
495 and w19,w19,w28 // (b^c)&=(a^b)
496 eor w10,w10,w3,ror#19
497 eor w11,w11,w6,lsr#3 // sigma0(X[i+1])
498 add w26,w26,w16 // h+=Sigma1(e)
499 eor w19,w19,w20 // Maj(a,b,c)
500 eor w17,w12,w27,ror#22 // Sigma0(a)
501 eor w10,w10,w3,lsr#10 // sigma1(X[i+14])
503 add w22,w22,w26 // d+=h
504 add w26,w26,w19 // h+=Maj(a,b,c)
505 ldr w19,[x30],#4 // *K++, w28 in next round
507 add w26,w26,w17 // h+=Sigma0(a)
512 add w25,w25,w19 // h+=K[i]
518 add w25,w25,w5 // h+=X[i]
519 eor w16,w16,w22,ror#11
520 eor w12,w12,w7,ror#18
521 orr w17,w17,w19 // Ch(e,f,g)
522 eor w19,w26,w27 // a^b, b^c in next round
523 eor w16,w16,w22,ror#25 // Sigma1(e)
524 eor w13,w13,w26,ror#13
525 add w25,w25,w17 // h+=Ch(e,f,g)
526 and w28,w28,w19 // (b^c)&=(a^b)
527 eor w11,w11,w4,ror#19
528 eor w12,w12,w7,lsr#3 // sigma0(X[i+1])
529 add w25,w25,w16 // h+=Sigma1(e)
530 eor w28,w28,w27 // Maj(a,b,c)
531 eor w17,w13,w26,ror#22 // Sigma0(a)
532 eor w11,w11,w4,lsr#10 // sigma1(X[i+14])
534 add w21,w21,w25 // d+=h
535 add w25,w25,w28 // h+=Maj(a,b,c)
536 ldr w28,[x30],#4 // *K++, w19 in next round
538 add w25,w25,w17 // h+=Sigma0(a)
543 add w24,w24,w28 // h+=K[i]
549 add w24,w24,w6 // h+=X[i]
550 eor w16,w16,w21,ror#11
551 eor w13,w13,w8,ror#18
552 orr w17,w17,w28 // Ch(e,f,g)
553 eor w28,w25,w26 // a^b, b^c in next round
554 eor w16,w16,w21,ror#25 // Sigma1(e)
555 eor w14,w14,w25,ror#13
556 add w24,w24,w17 // h+=Ch(e,f,g)
557 and w19,w19,w28 // (b^c)&=(a^b)
558 eor w12,w12,w5,ror#19
559 eor w13,w13,w8,lsr#3 // sigma0(X[i+1])
560 add w24,w24,w16 // h+=Sigma1(e)
561 eor w19,w19,w26 // Maj(a,b,c)
562 eor w17,w14,w25,ror#22 // Sigma0(a)
563 eor w12,w12,w5,lsr#10 // sigma1(X[i+14])
565 add w20,w20,w24 // d+=h
566 add w24,w24,w19 // h+=Maj(a,b,c)
567 ldr w19,[x30],#4 // *K++, w28 in next round
569 add w24,w24,w17 // h+=Sigma0(a)
574 add w23,w23,w19 // h+=K[i]
580 add w23,w23,w7 // h+=X[i]
581 eor w16,w16,w20,ror#11
582 eor w14,w14,w9,ror#18
583 orr w17,w17,w19 // Ch(e,f,g)
584 eor w19,w24,w25 // a^b, b^c in next round
585 eor w16,w16,w20,ror#25 // Sigma1(e)
586 eor w15,w15,w24,ror#13
587 add w23,w23,w17 // h+=Ch(e,f,g)
588 and w28,w28,w19 // (b^c)&=(a^b)
589 eor w13,w13,w6,ror#19
590 eor w14,w14,w9,lsr#3 // sigma0(X[i+1])
591 add w23,w23,w16 // h+=Sigma1(e)
592 eor w28,w28,w25 // Maj(a,b,c)
593 eor w17,w15,w24,ror#22 // Sigma0(a)
594 eor w13,w13,w6,lsr#10 // sigma1(X[i+14])
596 add w27,w27,w23 // d+=h
597 add w23,w23,w28 // h+=Maj(a,b,c)
598 ldr w28,[x30],#4 // *K++, w19 in next round
600 add w23,w23,w17 // h+=Sigma0(a)
605 add w22,w22,w28 // h+=K[i]
611 add w22,w22,w8 // h+=X[i]
612 eor w16,w16,w27,ror#11
613 eor w15,w15,w10,ror#18
614 orr w17,w17,w28 // Ch(e,f,g)
615 eor w28,w23,w24 // a^b, b^c in next round
616 eor w16,w16,w27,ror#25 // Sigma1(e)
618 add w22,w22,w17 // h+=Ch(e,f,g)
619 and w19,w19,w28 // (b^c)&=(a^b)
620 eor w14,w14,w7,ror#19
621 eor w15,w15,w10,lsr#3 // sigma0(X[i+1])
622 add w22,w22,w16 // h+=Sigma1(e)
623 eor w19,w19,w24 // Maj(a,b,c)
624 eor w17,w0,w23,ror#22 // Sigma0(a)
625 eor w14,w14,w7,lsr#10 // sigma1(X[i+14])
627 add w26,w26,w22 // d+=h
628 add w22,w22,w19 // h+=Maj(a,b,c)
629 ldr w19,[x30],#4 // *K++, w28 in next round
631 add w22,w22,w17 // h+=Sigma0(a)
636 add w21,w21,w19 // h+=K[i]
642 add w21,w21,w9 // h+=X[i]
643 eor w16,w16,w26,ror#11
645 orr w17,w17,w19 // Ch(e,f,g)
646 eor w19,w22,w23 // a^b, b^c in next round
647 eor w16,w16,w26,ror#25 // Sigma1(e)
649 add w21,w21,w17 // h+=Ch(e,f,g)
650 and w28,w28,w19 // (b^c)&=(a^b)
651 eor w15,w15,w8,ror#19
652 eor w0,w0,w11,lsr#3 // sigma0(X[i+1])
653 add w21,w21,w16 // h+=Sigma1(e)
654 eor w28,w28,w23 // Maj(a,b,c)
655 eor w17,w1,w22,ror#22 // Sigma0(a)
656 eor w15,w15,w8,lsr#10 // sigma1(X[i+14])
658 add w25,w25,w21 // d+=h
659 add w21,w21,w28 // h+=Maj(a,b,c)
660 ldr w28,[x30],#4 // *K++, w19 in next round
662 add w21,w21,w17 // h+=Sigma0(a)
667 add w20,w20,w28 // h+=K[i]
673 add w20,w20,w10 // h+=X[i]
674 eor w16,w16,w25,ror#11
676 orr w17,w17,w28 // Ch(e,f,g)
677 eor w28,w21,w22 // a^b, b^c in next round
678 eor w16,w16,w25,ror#25 // Sigma1(e)
680 add w20,w20,w17 // h+=Ch(e,f,g)
681 and w19,w19,w28 // (b^c)&=(a^b)
683 eor w1,w1,w12,lsr#3 // sigma0(X[i+1])
684 add w20,w20,w16 // h+=Sigma1(e)
685 eor w19,w19,w22 // Maj(a,b,c)
686 eor w17,w2,w21,ror#22 // Sigma0(a)
687 eor w0,w0,w9,lsr#10 // sigma1(X[i+14])
689 add w24,w24,w20 // d+=h
690 add w20,w20,w19 // h+=Maj(a,b,c)
691 ldr w19,[x30],#4 // *K++, w28 in next round
693 add w20,w20,w17 // h+=Sigma0(a)
698 add w27,w27,w19 // h+=K[i]
704 add w27,w27,w11 // h+=X[i]
705 eor w16,w16,w24,ror#11
707 orr w17,w17,w19 // Ch(e,f,g)
708 eor w19,w20,w21 // a^b, b^c in next round
709 eor w16,w16,w24,ror#25 // Sigma1(e)
711 add w27,w27,w17 // h+=Ch(e,f,g)
712 and w28,w28,w19 // (b^c)&=(a^b)
714 eor w2,w2,w13,lsr#3 // sigma0(X[i+1])
715 add w27,w27,w16 // h+=Sigma1(e)
716 eor w28,w28,w21 // Maj(a,b,c)
717 eor w17,w3,w20,ror#22 // Sigma0(a)
718 eor w1,w1,w10,lsr#10 // sigma1(X[i+14])
720 add w23,w23,w27 // d+=h
721 add w27,w27,w28 // h+=Maj(a,b,c)
722 ldr w28,[x30],#4 // *K++, w19 in next round
724 add w27,w27,w17 // h+=Sigma0(a)
729 add w26,w26,w28 // h+=K[i]
735 add w26,w26,w12 // h+=X[i]
736 eor w16,w16,w23,ror#11
738 orr w17,w17,w28 // Ch(e,f,g)
739 eor w28,w27,w20 // a^b, b^c in next round
740 eor w16,w16,w23,ror#25 // Sigma1(e)
742 add w26,w26,w17 // h+=Ch(e,f,g)
743 and w19,w19,w28 // (b^c)&=(a^b)
745 eor w3,w3,w14,lsr#3 // sigma0(X[i+1])
746 add w26,w26,w16 // h+=Sigma1(e)
747 eor w19,w19,w20 // Maj(a,b,c)
748 eor w17,w4,w27,ror#22 // Sigma0(a)
749 eor w2,w2,w11,lsr#10 // sigma1(X[i+14])
751 add w22,w22,w26 // d+=h
752 add w26,w26,w19 // h+=Maj(a,b,c)
753 ldr w19,[x30],#4 // *K++, w28 in next round
755 add w26,w26,w17 // h+=Sigma0(a)
760 add w25,w25,w19 // h+=K[i]
766 add w25,w25,w13 // h+=X[i]
767 eor w16,w16,w22,ror#11
769 orr w17,w17,w19 // Ch(e,f,g)
770 eor w19,w26,w27 // a^b, b^c in next round
771 eor w16,w16,w22,ror#25 // Sigma1(e)
773 add w25,w25,w17 // h+=Ch(e,f,g)
774 and w28,w28,w19 // (b^c)&=(a^b)
776 eor w4,w4,w15,lsr#3 // sigma0(X[i+1])
777 add w25,w25,w16 // h+=Sigma1(e)
778 eor w28,w28,w27 // Maj(a,b,c)
779 eor w17,w5,w26,ror#22 // Sigma0(a)
780 eor w3,w3,w12,lsr#10 // sigma1(X[i+14])
782 add w21,w21,w25 // d+=h
783 add w25,w25,w28 // h+=Maj(a,b,c)
784 ldr w28,[x30],#4 // *K++, w19 in next round
786 add w25,w25,w17 // h+=Sigma0(a)
791 add w24,w24,w28 // h+=K[i]
797 add w24,w24,w14 // h+=X[i]
798 eor w16,w16,w21,ror#11
800 orr w17,w17,w28 // Ch(e,f,g)
801 eor w28,w25,w26 // a^b, b^c in next round
802 eor w16,w16,w21,ror#25 // Sigma1(e)
804 add w24,w24,w17 // h+=Ch(e,f,g)
805 and w19,w19,w28 // (b^c)&=(a^b)
807 eor w5,w5,w0,lsr#3 // sigma0(X[i+1])
808 add w24,w24,w16 // h+=Sigma1(e)
809 eor w19,w19,w26 // Maj(a,b,c)
810 eor w17,w6,w25,ror#22 // Sigma0(a)
811 eor w4,w4,w13,lsr#10 // sigma1(X[i+14])
813 add w20,w20,w24 // d+=h
814 add w24,w24,w19 // h+=Maj(a,b,c)
815 ldr w19,[x30],#4 // *K++, w28 in next round
817 add w24,w24,w17 // h+=Sigma0(a)
822 add w23,w23,w19 // h+=K[i]
828 add w23,w23,w15 // h+=X[i]
829 eor w16,w16,w20,ror#11
831 orr w17,w17,w19 // Ch(e,f,g)
832 eor w19,w24,w25 // a^b, b^c in next round
833 eor w16,w16,w20,ror#25 // Sigma1(e)
835 add w23,w23,w17 // h+=Ch(e,f,g)
836 and w28,w28,w19 // (b^c)&=(a^b)
838 eor w6,w6,w1,lsr#3 // sigma0(X[i+1])
839 add w23,w23,w16 // h+=Sigma1(e)
840 eor w28,w28,w25 // Maj(a,b,c)
841 eor w17,w7,w24,ror#22 // Sigma0(a)
842 eor w5,w5,w14,lsr#10 // sigma1(X[i+14])
844 add w27,w27,w23 // d+=h
845 add w23,w23,w28 // h+=Maj(a,b,c)
846 ldr w28,[x30],#4 // *K++, w19 in next round
848 add w23,w23,w17 // h+=Sigma0(a)
853 add w22,w22,w28 // h+=K[i]
859 add w22,w22,w0 // h+=X[i]
860 eor w16,w16,w27,ror#11
862 orr w17,w17,w28 // Ch(e,f,g)
863 eor w28,w23,w24 // a^b, b^c in next round
864 eor w16,w16,w27,ror#25 // Sigma1(e)
866 add w22,w22,w17 // h+=Ch(e,f,g)
867 and w19,w19,w28 // (b^c)&=(a^b)
869 eor w7,w7,w2,lsr#3 // sigma0(X[i+1])
870 add w22,w22,w16 // h+=Sigma1(e)
871 eor w19,w19,w24 // Maj(a,b,c)
872 eor w17,w8,w23,ror#22 // Sigma0(a)
873 eor w6,w6,w15,lsr#10 // sigma1(X[i+14])
875 add w26,w26,w22 // d+=h
876 add w22,w22,w19 // h+=Maj(a,b,c)
877 ldr w19,[x30],#4 // *K++, w28 in next round
879 add w22,w22,w17 // h+=Sigma0(a)
884 add w21,w21,w19 // h+=K[i]
890 add w21,w21,w1 // h+=X[i]
891 eor w16,w16,w26,ror#11
893 orr w17,w17,w19 // Ch(e,f,g)
894 eor w19,w22,w23 // a^b, b^c in next round
895 eor w16,w16,w26,ror#25 // Sigma1(e)
897 add w21,w21,w17 // h+=Ch(e,f,g)
898 and w28,w28,w19 // (b^c)&=(a^b)
900 eor w8,w8,w3,lsr#3 // sigma0(X[i+1])
901 add w21,w21,w16 // h+=Sigma1(e)
902 eor w28,w28,w23 // Maj(a,b,c)
903 eor w17,w9,w22,ror#22 // Sigma0(a)
904 eor w7,w7,w0,lsr#10 // sigma1(X[i+14])
906 add w25,w25,w21 // d+=h
907 add w21,w21,w28 // h+=Maj(a,b,c)
908 ldr w28,[x30],#4 // *K++, w19 in next round
910 add w21,w21,w17 // h+=Sigma0(a)
915 add w20,w20,w28 // h+=K[i]
921 add w20,w20,w2 // h+=X[i]
922 eor w16,w16,w25,ror#11
924 orr w17,w17,w28 // Ch(e,f,g)
925 eor w28,w21,w22 // a^b, b^c in next round
926 eor w16,w16,w25,ror#25 // Sigma1(e)
927 eor w10,w10,w21,ror#13
928 add w20,w20,w17 // h+=Ch(e,f,g)
929 and w19,w19,w28 // (b^c)&=(a^b)
931 eor w9,w9,w4,lsr#3 // sigma0(X[i+1])
932 add w20,w20,w16 // h+=Sigma1(e)
933 eor w19,w19,w22 // Maj(a,b,c)
934 eor w17,w10,w21,ror#22 // Sigma0(a)
935 eor w8,w8,w1,lsr#10 // sigma1(X[i+14])
937 add w24,w24,w20 // d+=h
938 add w20,w20,w19 // h+=Maj(a,b,c)
939 ldr w19,[x30],#4 // *K++, w28 in next round
941 add w20,w20,w17 // h+=Sigma0(a)
947 sub x30,x30,#260 // rewind
951 add x1,x1,#14*4 // advance input pointer
961 stp w22,w23,[x0,#2*4]
965 stp w24,w25,[x0,#4*4]
966 stp w26,w27,[x0,#6*4]
969 ldp x19,x20,[x29,#16]
971 ldp x21,x22,[x29,#32]
972 ldp x23,x24,[x29,#48]
973 ldp x25,x26,[x29,#64]
974 ldp x27,x28,[x29,#80]
975 ldp x29,x30,[sp],#128
977 .size sha256_block_data_order,.-sha256_block_data_order
982 .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
983 .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
984 .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
985 .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
986 .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
987 .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
988 .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
989 .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
990 .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
991 .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
992 .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
993 .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
994 .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
995 .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
996 .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
997 .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
999 .size .LK256,.-.LK256
1002 .quad OPENSSL_armcap_P-.
1003 .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,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
1006 .type sha256_block_armv8,%function
1010 stp x29,x30,[sp,#-16]!
1013 ld1 {v0.4s,v1.4s},[x0]
1017 ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
1019 ld1 {v16.4s},[x3],#16
1024 orr v18.16b,v0.16b,v0.16b // offload
1025 orr v19.16b,v1.16b,v1.16b
1026 ld1 {v17.4s},[x3],#16
1027 add v16.4s,v16.4s,v4.4s
1028 .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b
1029 orr v2.16b,v0.16b,v0.16b
1030 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1031 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1032 .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b
1033 ld1 {v16.4s},[x3],#16
1034 add v17.4s,v17.4s,v5.4s
1035 .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b
1036 orr v2.16b,v0.16b,v0.16b
1037 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1038 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1039 .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b
1040 ld1 {v17.4s},[x3],#16
1041 add v16.4s,v16.4s,v6.4s
1042 .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b
1043 orr v2.16b,v0.16b,v0.16b
1044 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1045 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1046 .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b
1047 ld1 {v16.4s},[x3],#16
1048 add v17.4s,v17.4s,v7.4s
1049 .inst 0x5e282887 //sha256su0 v7.16b,v4.16b
1050 orr v2.16b,v0.16b,v0.16b
1051 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1052 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1053 .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b
1054 ld1 {v17.4s},[x3],#16
1055 add v16.4s,v16.4s,v4.4s
1056 .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b
1057 orr v2.16b,v0.16b,v0.16b
1058 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1059 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1060 .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b
1061 ld1 {v16.4s},[x3],#16
1062 add v17.4s,v17.4s,v5.4s
1063 .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b
1064 orr v2.16b,v0.16b,v0.16b
1065 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1066 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1067 .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b
1068 ld1 {v17.4s},[x3],#16
1069 add v16.4s,v16.4s,v6.4s
1070 .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b
1071 orr v2.16b,v0.16b,v0.16b
1072 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1073 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1074 .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b
1075 ld1 {v16.4s},[x3],#16
1076 add v17.4s,v17.4s,v7.4s
1077 .inst 0x5e282887 //sha256su0 v7.16b,v4.16b
1078 orr v2.16b,v0.16b,v0.16b
1079 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1080 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1081 .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b
1082 ld1 {v17.4s},[x3],#16
1083 add v16.4s,v16.4s,v4.4s
1084 .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b
1085 orr v2.16b,v0.16b,v0.16b
1086 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1087 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1088 .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b
1089 ld1 {v16.4s},[x3],#16
1090 add v17.4s,v17.4s,v5.4s
1091 .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b
1092 orr v2.16b,v0.16b,v0.16b
1093 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1094 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1095 .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b
1096 ld1 {v17.4s},[x3],#16
1097 add v16.4s,v16.4s,v6.4s
1098 .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b
1099 orr v2.16b,v0.16b,v0.16b
1100 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1101 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1102 .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b
1103 ld1 {v16.4s},[x3],#16
1104 add v17.4s,v17.4s,v7.4s
1105 .inst 0x5e282887 //sha256su0 v7.16b,v4.16b
1106 orr v2.16b,v0.16b,v0.16b
1107 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1108 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1109 .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b
1110 ld1 {v17.4s},[x3],#16
1111 add v16.4s,v16.4s,v4.4s
1112 orr v2.16b,v0.16b,v0.16b
1113 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1114 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1116 ld1 {v16.4s},[x3],#16
1117 add v17.4s,v17.4s,v5.4s
1118 orr v2.16b,v0.16b,v0.16b
1119 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1120 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1123 add v16.4s,v16.4s,v6.4s
1124 sub x3,x3,#64*4-16 // rewind
1125 orr v2.16b,v0.16b,v0.16b
1126 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1127 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1129 add v17.4s,v17.4s,v7.4s
1130 orr v2.16b,v0.16b,v0.16b
1131 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1132 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1134 add v0.4s,v0.4s,v18.4s
1135 add v1.4s,v1.4s,v19.4s
1139 st1 {v0.4s,v1.4s},[x0]
1143 .size sha256_block_armv8,.-sha256_block_armv8
1144 .comm OPENSSL_armcap_P,4,4