sha1-armv8.S revision 1.2 1 #include "arm_asm.h"
2 #include "arm_arch.h"
3 #ifndef __KERNEL__
4
5 .hidden OPENSSL_armcap_P
6 #endif
7
8 .text
9
10 .globl sha1_block_data_order
11 .type sha1_block_data_order,%function
12 .align 6
13 sha1_block_data_order:
14 AARCH64_VALID_CALL_TARGET
15 adrp x16,OPENSSL_armcap_P
16 ldr w16,[x16,#:lo12:OPENSSL_armcap_P]
17 tst w16,#ARMV8_SHA1
18 b.ne .Lv8_entry
19
20 // Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.
21 stp x29,x30,[sp,#-96]!
22 add x29,sp,#0
23 stp x19,x20,[sp,#16]
24 stp x21,x22,[sp,#32]
25 stp x23,x24,[sp,#48]
26 stp x25,x26,[sp,#64]
27 stp x27,x28,[sp,#80]
28
29 ldp w20,w21,[x0]
30 ldp w22,w23,[x0,#8]
31 ldr w24,[x0,#16]
32
33 .Loop:
34 ldr x3,[x1],#64
35 movz w28,#0x7999
36 sub x2,x2,#1
37 movk w28,#0x5a82,lsl#16
38 #ifdef __AARCH64EB__
39 ror x3,x3,#32
40 #else
41 rev32 x3,x3
42 #endif
43 add w24,w24,w28 // warm it up
44 add w24,w24,w3
45 lsr x4,x3,#32
46 ldur x5,[x1,#-56]
47 bic w25,w23,w21
48 and w26,w22,w21
49 ror w27,w20,#27
50 add w23,w23,w28 // future e+=K
51 orr w25,w25,w26
52 add w24,w24,w27 // e+=rot(a,5)
53 ror w21,w21,#2
54 add w23,w23,w4 // future e+=X[i]
55 add w24,w24,w25 // e+=F(b,c,d)
56 #ifdef __AARCH64EB__
57 ror x5,x5,#32
58 #else
59 rev32 x5,x5
60 #endif
61 bic w25,w22,w20
62 and w26,w21,w20
63 ror w27,w24,#27
64 add w22,w22,w28 // future e+=K
65 orr w25,w25,w26
66 add w23,w23,w27 // e+=rot(a,5)
67 ror w20,w20,#2
68 add w22,w22,w5 // future e+=X[i]
69 add w23,w23,w25 // e+=F(b,c,d)
70 lsr x6,x5,#32
71 ldur x7,[x1,#-48]
72 bic w25,w21,w24
73 and w26,w20,w24
74 ror w27,w23,#27
75 add w21,w21,w28 // future e+=K
76 orr w25,w25,w26
77 add w22,w22,w27 // e+=rot(a,5)
78 ror w24,w24,#2
79 add w21,w21,w6 // future e+=X[i]
80 add w22,w22,w25 // e+=F(b,c,d)
81 #ifdef __AARCH64EB__
82 ror x7,x7,#32
83 #else
84 rev32 x7,x7
85 #endif
86 bic w25,w20,w23
87 and w26,w24,w23
88 ror w27,w22,#27
89 add w20,w20,w28 // future e+=K
90 orr w25,w25,w26
91 add w21,w21,w27 // e+=rot(a,5)
92 ror w23,w23,#2
93 add w20,w20,w7 // future e+=X[i]
94 add w21,w21,w25 // e+=F(b,c,d)
95 lsr x8,x7,#32
96 ldur x9,[x1,#-40]
97 bic w25,w24,w22
98 and w26,w23,w22
99 ror w27,w21,#27
100 add w24,w24,w28 // future e+=K
101 orr w25,w25,w26
102 add w20,w20,w27 // e+=rot(a,5)
103 ror w22,w22,#2
104 add w24,w24,w8 // future e+=X[i]
105 add w20,w20,w25 // e+=F(b,c,d)
106 #ifdef __AARCH64EB__
107 ror x9,x9,#32
108 #else
109 rev32 x9,x9
110 #endif
111 bic w25,w23,w21
112 and w26,w22,w21
113 ror w27,w20,#27
114 add w23,w23,w28 // future e+=K
115 orr w25,w25,w26
116 add w24,w24,w27 // e+=rot(a,5)
117 ror w21,w21,#2
118 add w23,w23,w9 // future e+=X[i]
119 add w24,w24,w25 // e+=F(b,c,d)
120 lsr x10,x9,#32
121 ldur x11,[x1,#-32]
122 bic w25,w22,w20
123 and w26,w21,w20
124 ror w27,w24,#27
125 add w22,w22,w28 // future e+=K
126 orr w25,w25,w26
127 add w23,w23,w27 // e+=rot(a,5)
128 ror w20,w20,#2
129 add w22,w22,w10 // future e+=X[i]
130 add w23,w23,w25 // e+=F(b,c,d)
131 #ifdef __AARCH64EB__
132 ror x11,x11,#32
133 #else
134 rev32 x11,x11
135 #endif
136 bic w25,w21,w24
137 and w26,w20,w24
138 ror w27,w23,#27
139 add w21,w21,w28 // future e+=K
140 orr w25,w25,w26
141 add w22,w22,w27 // e+=rot(a,5)
142 ror w24,w24,#2
143 add w21,w21,w11 // future e+=X[i]
144 add w22,w22,w25 // e+=F(b,c,d)
145 lsr x12,x11,#32
146 ldur x13,[x1,#-24]
147 bic w25,w20,w23
148 and w26,w24,w23
149 ror w27,w22,#27
150 add w20,w20,w28 // future e+=K
151 orr w25,w25,w26
152 add w21,w21,w27 // e+=rot(a,5)
153 ror w23,w23,#2
154 add w20,w20,w12 // future e+=X[i]
155 add w21,w21,w25 // e+=F(b,c,d)
156 #ifdef __AARCH64EB__
157 ror x13,x13,#32
158 #else
159 rev32 x13,x13
160 #endif
161 bic w25,w24,w22
162 and w26,w23,w22
163 ror w27,w21,#27
164 add w24,w24,w28 // future e+=K
165 orr w25,w25,w26
166 add w20,w20,w27 // e+=rot(a,5)
167 ror w22,w22,#2
168 add w24,w24,w13 // future e+=X[i]
169 add w20,w20,w25 // e+=F(b,c,d)
170 lsr x14,x13,#32
171 ldur x15,[x1,#-16]
172 bic w25,w23,w21
173 and w26,w22,w21
174 ror w27,w20,#27
175 add w23,w23,w28 // future e+=K
176 orr w25,w25,w26
177 add w24,w24,w27 // e+=rot(a,5)
178 ror w21,w21,#2
179 add w23,w23,w14 // future e+=X[i]
180 add w24,w24,w25 // e+=F(b,c,d)
181 #ifdef __AARCH64EB__
182 ror x15,x15,#32
183 #else
184 rev32 x15,x15
185 #endif
186 bic w25,w22,w20
187 and w26,w21,w20
188 ror w27,w24,#27
189 add w22,w22,w28 // future e+=K
190 orr w25,w25,w26
191 add w23,w23,w27 // e+=rot(a,5)
192 ror w20,w20,#2
193 add w22,w22,w15 // future e+=X[i]
194 add w23,w23,w25 // e+=F(b,c,d)
195 lsr x16,x15,#32
196 ldur x17,[x1,#-8]
197 bic w25,w21,w24
198 and w26,w20,w24
199 ror w27,w23,#27
200 add w21,w21,w28 // future e+=K
201 orr w25,w25,w26
202 add w22,w22,w27 // e+=rot(a,5)
203 ror w24,w24,#2
204 add w21,w21,w16 // future e+=X[i]
205 add w22,w22,w25 // e+=F(b,c,d)
206 #ifdef __AARCH64EB__
207 ror x17,x17,#32
208 #else
209 rev32 x17,x17
210 #endif
211 bic w25,w20,w23
212 and w26,w24,w23
213 ror w27,w22,#27
214 add w20,w20,w28 // future e+=K
215 orr w25,w25,w26
216 add w21,w21,w27 // e+=rot(a,5)
217 ror w23,w23,#2
218 add w20,w20,w17 // future e+=X[i]
219 add w21,w21,w25 // e+=F(b,c,d)
220 lsr x19,x17,#32
221 eor w3,w3,w5
222 bic w25,w24,w22
223 and w26,w23,w22
224 ror w27,w21,#27
225 eor w3,w3,w11
226 add w24,w24,w28 // future e+=K
227 orr w25,w25,w26
228 add w20,w20,w27 // e+=rot(a,5)
229 eor w3,w3,w16
230 ror w22,w22,#2
231 add w24,w24,w19 // future e+=X[i]
232 add w20,w20,w25 // e+=F(b,c,d)
233 ror w3,w3,#31
234 eor w4,w4,w6
235 bic w25,w23,w21
236 and w26,w22,w21
237 ror w27,w20,#27
238 eor w4,w4,w12
239 add w23,w23,w28 // future e+=K
240 orr w25,w25,w26
241 add w24,w24,w27 // e+=rot(a,5)
242 eor w4,w4,w17
243 ror w21,w21,#2
244 add w23,w23,w3 // future e+=X[i]
245 add w24,w24,w25 // e+=F(b,c,d)
246 ror w4,w4,#31
247 eor w5,w5,w7
248 bic w25,w22,w20
249 and w26,w21,w20
250 ror w27,w24,#27
251 eor w5,w5,w13
252 add w22,w22,w28 // future e+=K
253 orr w25,w25,w26
254 add w23,w23,w27 // e+=rot(a,5)
255 eor w5,w5,w19
256 ror w20,w20,#2
257 add w22,w22,w4 // future e+=X[i]
258 add w23,w23,w25 // e+=F(b,c,d)
259 ror w5,w5,#31
260 eor w6,w6,w8
261 bic w25,w21,w24
262 and w26,w20,w24
263 ror w27,w23,#27
264 eor w6,w6,w14
265 add w21,w21,w28 // future e+=K
266 orr w25,w25,w26
267 add w22,w22,w27 // e+=rot(a,5)
268 eor w6,w6,w3
269 ror w24,w24,#2
270 add w21,w21,w5 // future e+=X[i]
271 add w22,w22,w25 // e+=F(b,c,d)
272 ror w6,w6,#31
273 eor w7,w7,w9
274 bic w25,w20,w23
275 and w26,w24,w23
276 ror w27,w22,#27
277 eor w7,w7,w15
278 add w20,w20,w28 // future e+=K
279 orr w25,w25,w26
280 add w21,w21,w27 // e+=rot(a,5)
281 eor w7,w7,w4
282 ror w23,w23,#2
283 add w20,w20,w6 // future e+=X[i]
284 add w21,w21,w25 // e+=F(b,c,d)
285 ror w7,w7,#31
286 movz w28,#0xeba1
287 movk w28,#0x6ed9,lsl#16
288 eor w8,w8,w10
289 bic w25,w24,w22
290 and w26,w23,w22
291 ror w27,w21,#27
292 eor w8,w8,w16
293 add w24,w24,w28 // future e+=K
294 orr w25,w25,w26
295 add w20,w20,w27 // e+=rot(a,5)
296 eor w8,w8,w5
297 ror w22,w22,#2
298 add w24,w24,w7 // future e+=X[i]
299 add w20,w20,w25 // e+=F(b,c,d)
300 ror w8,w8,#31
301 eor w9,w9,w11
302 eor w25,w23,w21
303 ror w27,w20,#27
304 add w23,w23,w28 // future e+=K
305 eor w9,w9,w17
306 eor w25,w25,w22
307 add w24,w24,w27 // e+=rot(a,5)
308 ror w21,w21,#2
309 eor w9,w9,w6
310 add w23,w23,w8 // future e+=X[i]
311 add w24,w24,w25 // e+=F(b,c,d)
312 ror w9,w9,#31
313 eor w10,w10,w12
314 eor w25,w22,w20
315 ror w27,w24,#27
316 add w22,w22,w28 // future e+=K
317 eor w10,w10,w19
318 eor w25,w25,w21
319 add w23,w23,w27 // e+=rot(a,5)
320 ror w20,w20,#2
321 eor w10,w10,w7
322 add w22,w22,w9 // future e+=X[i]
323 add w23,w23,w25 // e+=F(b,c,d)
324 ror w10,w10,#31
325 eor w11,w11,w13
326 eor w25,w21,w24
327 ror w27,w23,#27
328 add w21,w21,w28 // future e+=K
329 eor w11,w11,w3
330 eor w25,w25,w20
331 add w22,w22,w27 // e+=rot(a,5)
332 ror w24,w24,#2
333 eor w11,w11,w8
334 add w21,w21,w10 // future e+=X[i]
335 add w22,w22,w25 // e+=F(b,c,d)
336 ror w11,w11,#31
337 eor w12,w12,w14
338 eor w25,w20,w23
339 ror w27,w22,#27
340 add w20,w20,w28 // future e+=K
341 eor w12,w12,w4
342 eor w25,w25,w24
343 add w21,w21,w27 // e+=rot(a,5)
344 ror w23,w23,#2
345 eor w12,w12,w9
346 add w20,w20,w11 // future e+=X[i]
347 add w21,w21,w25 // e+=F(b,c,d)
348 ror w12,w12,#31
349 eor w13,w13,w15
350 eor w25,w24,w22
351 ror w27,w21,#27
352 add w24,w24,w28 // future e+=K
353 eor w13,w13,w5
354 eor w25,w25,w23
355 add w20,w20,w27 // e+=rot(a,5)
356 ror w22,w22,#2
357 eor w13,w13,w10
358 add w24,w24,w12 // future e+=X[i]
359 add w20,w20,w25 // e+=F(b,c,d)
360 ror w13,w13,#31
361 eor w14,w14,w16
362 eor w25,w23,w21
363 ror w27,w20,#27
364 add w23,w23,w28 // future e+=K
365 eor w14,w14,w6
366 eor w25,w25,w22
367 add w24,w24,w27 // e+=rot(a,5)
368 ror w21,w21,#2
369 eor w14,w14,w11
370 add w23,w23,w13 // future e+=X[i]
371 add w24,w24,w25 // e+=F(b,c,d)
372 ror w14,w14,#31
373 eor w15,w15,w17
374 eor w25,w22,w20
375 ror w27,w24,#27
376 add w22,w22,w28 // future e+=K
377 eor w15,w15,w7
378 eor w25,w25,w21
379 add w23,w23,w27 // e+=rot(a,5)
380 ror w20,w20,#2
381 eor w15,w15,w12
382 add w22,w22,w14 // future e+=X[i]
383 add w23,w23,w25 // e+=F(b,c,d)
384 ror w15,w15,#31
385 eor w16,w16,w19
386 eor w25,w21,w24
387 ror w27,w23,#27
388 add w21,w21,w28 // future e+=K
389 eor w16,w16,w8
390 eor w25,w25,w20
391 add w22,w22,w27 // e+=rot(a,5)
392 ror w24,w24,#2
393 eor w16,w16,w13
394 add w21,w21,w15 // future e+=X[i]
395 add w22,w22,w25 // e+=F(b,c,d)
396 ror w16,w16,#31
397 eor w17,w17,w3
398 eor w25,w20,w23
399 ror w27,w22,#27
400 add w20,w20,w28 // future e+=K
401 eor w17,w17,w9
402 eor w25,w25,w24
403 add w21,w21,w27 // e+=rot(a,5)
404 ror w23,w23,#2
405 eor w17,w17,w14
406 add w20,w20,w16 // future e+=X[i]
407 add w21,w21,w25 // e+=F(b,c,d)
408 ror w17,w17,#31
409 eor w19,w19,w4
410 eor w25,w24,w22
411 ror w27,w21,#27
412 add w24,w24,w28 // future e+=K
413 eor w19,w19,w10
414 eor w25,w25,w23
415 add w20,w20,w27 // e+=rot(a,5)
416 ror w22,w22,#2
417 eor w19,w19,w15
418 add w24,w24,w17 // future e+=X[i]
419 add w20,w20,w25 // e+=F(b,c,d)
420 ror w19,w19,#31
421 eor w3,w3,w5
422 eor w25,w23,w21
423 ror w27,w20,#27
424 add w23,w23,w28 // future e+=K
425 eor w3,w3,w11
426 eor w25,w25,w22
427 add w24,w24,w27 // e+=rot(a,5)
428 ror w21,w21,#2
429 eor w3,w3,w16
430 add w23,w23,w19 // future e+=X[i]
431 add w24,w24,w25 // e+=F(b,c,d)
432 ror w3,w3,#31
433 eor w4,w4,w6
434 eor w25,w22,w20
435 ror w27,w24,#27
436 add w22,w22,w28 // future e+=K
437 eor w4,w4,w12
438 eor w25,w25,w21
439 add w23,w23,w27 // e+=rot(a,5)
440 ror w20,w20,#2
441 eor w4,w4,w17
442 add w22,w22,w3 // future e+=X[i]
443 add w23,w23,w25 // e+=F(b,c,d)
444 ror w4,w4,#31
445 eor w5,w5,w7
446 eor w25,w21,w24
447 ror w27,w23,#27
448 add w21,w21,w28 // future e+=K
449 eor w5,w5,w13
450 eor w25,w25,w20
451 add w22,w22,w27 // e+=rot(a,5)
452 ror w24,w24,#2
453 eor w5,w5,w19
454 add w21,w21,w4 // future e+=X[i]
455 add w22,w22,w25 // e+=F(b,c,d)
456 ror w5,w5,#31
457 eor w6,w6,w8
458 eor w25,w20,w23
459 ror w27,w22,#27
460 add w20,w20,w28 // future e+=K
461 eor w6,w6,w14
462 eor w25,w25,w24
463 add w21,w21,w27 // e+=rot(a,5)
464 ror w23,w23,#2
465 eor w6,w6,w3
466 add w20,w20,w5 // future e+=X[i]
467 add w21,w21,w25 // e+=F(b,c,d)
468 ror w6,w6,#31
469 eor w7,w7,w9
470 eor w25,w24,w22
471 ror w27,w21,#27
472 add w24,w24,w28 // future e+=K
473 eor w7,w7,w15
474 eor w25,w25,w23
475 add w20,w20,w27 // e+=rot(a,5)
476 ror w22,w22,#2
477 eor w7,w7,w4
478 add w24,w24,w6 // future e+=X[i]
479 add w20,w20,w25 // e+=F(b,c,d)
480 ror w7,w7,#31
481 eor w8,w8,w10
482 eor w25,w23,w21
483 ror w27,w20,#27
484 add w23,w23,w28 // future e+=K
485 eor w8,w8,w16
486 eor w25,w25,w22
487 add w24,w24,w27 // e+=rot(a,5)
488 ror w21,w21,#2
489 eor w8,w8,w5
490 add w23,w23,w7 // future e+=X[i]
491 add w24,w24,w25 // e+=F(b,c,d)
492 ror w8,w8,#31
493 eor w9,w9,w11
494 eor w25,w22,w20
495 ror w27,w24,#27
496 add w22,w22,w28 // future e+=K
497 eor w9,w9,w17
498 eor w25,w25,w21
499 add w23,w23,w27 // e+=rot(a,5)
500 ror w20,w20,#2
501 eor w9,w9,w6
502 add w22,w22,w8 // future e+=X[i]
503 add w23,w23,w25 // e+=F(b,c,d)
504 ror w9,w9,#31
505 eor w10,w10,w12
506 eor w25,w21,w24
507 ror w27,w23,#27
508 add w21,w21,w28 // future e+=K
509 eor w10,w10,w19
510 eor w25,w25,w20
511 add w22,w22,w27 // e+=rot(a,5)
512 ror w24,w24,#2
513 eor w10,w10,w7
514 add w21,w21,w9 // future e+=X[i]
515 add w22,w22,w25 // e+=F(b,c,d)
516 ror w10,w10,#31
517 eor w11,w11,w13
518 eor w25,w20,w23
519 ror w27,w22,#27
520 add w20,w20,w28 // future e+=K
521 eor w11,w11,w3
522 eor w25,w25,w24
523 add w21,w21,w27 // e+=rot(a,5)
524 ror w23,w23,#2
525 eor w11,w11,w8
526 add w20,w20,w10 // future e+=X[i]
527 add w21,w21,w25 // e+=F(b,c,d)
528 ror w11,w11,#31
529 movz w28,#0xbcdc
530 movk w28,#0x8f1b,lsl#16
531 eor w12,w12,w14
532 eor w25,w24,w22
533 ror w27,w21,#27
534 add w24,w24,w28 // future e+=K
535 eor w12,w12,w4
536 eor w25,w25,w23
537 add w20,w20,w27 // e+=rot(a,5)
538 ror w22,w22,#2
539 eor w12,w12,w9
540 add w24,w24,w11 // future e+=X[i]
541 add w20,w20,w25 // e+=F(b,c,d)
542 ror w12,w12,#31
543 orr w25,w21,w22
544 and w26,w21,w22
545 eor w13,w13,w15
546 ror w27,w20,#27
547 and w25,w25,w23
548 add w23,w23,w28 // future e+=K
549 eor w13,w13,w5
550 add w24,w24,w27 // e+=rot(a,5)
551 orr w25,w25,w26
552 ror w21,w21,#2
553 eor w13,w13,w10
554 add w23,w23,w12 // future e+=X[i]
555 add w24,w24,w25 // e+=F(b,c,d)
556 ror w13,w13,#31
557 orr w25,w20,w21
558 and w26,w20,w21
559 eor w14,w14,w16
560 ror w27,w24,#27
561 and w25,w25,w22
562 add w22,w22,w28 // future e+=K
563 eor w14,w14,w6
564 add w23,w23,w27 // e+=rot(a,5)
565 orr w25,w25,w26
566 ror w20,w20,#2
567 eor w14,w14,w11
568 add w22,w22,w13 // future e+=X[i]
569 add w23,w23,w25 // e+=F(b,c,d)
570 ror w14,w14,#31
571 orr w25,w24,w20
572 and w26,w24,w20
573 eor w15,w15,w17
574 ror w27,w23,#27
575 and w25,w25,w21
576 add w21,w21,w28 // future e+=K
577 eor w15,w15,w7
578 add w22,w22,w27 // e+=rot(a,5)
579 orr w25,w25,w26
580 ror w24,w24,#2
581 eor w15,w15,w12
582 add w21,w21,w14 // future e+=X[i]
583 add w22,w22,w25 // e+=F(b,c,d)
584 ror w15,w15,#31
585 orr w25,w23,w24
586 and w26,w23,w24
587 eor w16,w16,w19
588 ror w27,w22,#27
589 and w25,w25,w20
590 add w20,w20,w28 // future e+=K
591 eor w16,w16,w8
592 add w21,w21,w27 // e+=rot(a,5)
593 orr w25,w25,w26
594 ror w23,w23,#2
595 eor w16,w16,w13
596 add w20,w20,w15 // future e+=X[i]
597 add w21,w21,w25 // e+=F(b,c,d)
598 ror w16,w16,#31
599 orr w25,w22,w23
600 and w26,w22,w23
601 eor w17,w17,w3
602 ror w27,w21,#27
603 and w25,w25,w24
604 add w24,w24,w28 // future e+=K
605 eor w17,w17,w9
606 add w20,w20,w27 // e+=rot(a,5)
607 orr w25,w25,w26
608 ror w22,w22,#2
609 eor w17,w17,w14
610 add w24,w24,w16 // future e+=X[i]
611 add w20,w20,w25 // e+=F(b,c,d)
612 ror w17,w17,#31
613 orr w25,w21,w22
614 and w26,w21,w22
615 eor w19,w19,w4
616 ror w27,w20,#27
617 and w25,w25,w23
618 add w23,w23,w28 // future e+=K
619 eor w19,w19,w10
620 add w24,w24,w27 // e+=rot(a,5)
621 orr w25,w25,w26
622 ror w21,w21,#2
623 eor w19,w19,w15
624 add w23,w23,w17 // future e+=X[i]
625 add w24,w24,w25 // e+=F(b,c,d)
626 ror w19,w19,#31
627 orr w25,w20,w21
628 and w26,w20,w21
629 eor w3,w3,w5
630 ror w27,w24,#27
631 and w25,w25,w22
632 add w22,w22,w28 // future e+=K
633 eor w3,w3,w11
634 add w23,w23,w27 // e+=rot(a,5)
635 orr w25,w25,w26
636 ror w20,w20,#2
637 eor w3,w3,w16
638 add w22,w22,w19 // future e+=X[i]
639 add w23,w23,w25 // e+=F(b,c,d)
640 ror w3,w3,#31
641 orr w25,w24,w20
642 and w26,w24,w20
643 eor w4,w4,w6
644 ror w27,w23,#27
645 and w25,w25,w21
646 add w21,w21,w28 // future e+=K
647 eor w4,w4,w12
648 add w22,w22,w27 // e+=rot(a,5)
649 orr w25,w25,w26
650 ror w24,w24,#2
651 eor w4,w4,w17
652 add w21,w21,w3 // future e+=X[i]
653 add w22,w22,w25 // e+=F(b,c,d)
654 ror w4,w4,#31
655 orr w25,w23,w24
656 and w26,w23,w24
657 eor w5,w5,w7
658 ror w27,w22,#27
659 and w25,w25,w20
660 add w20,w20,w28 // future e+=K
661 eor w5,w5,w13
662 add w21,w21,w27 // e+=rot(a,5)
663 orr w25,w25,w26
664 ror w23,w23,#2
665 eor w5,w5,w19
666 add w20,w20,w4 // future e+=X[i]
667 add w21,w21,w25 // e+=F(b,c,d)
668 ror w5,w5,#31
669 orr w25,w22,w23
670 and w26,w22,w23
671 eor w6,w6,w8
672 ror w27,w21,#27
673 and w25,w25,w24
674 add w24,w24,w28 // future e+=K
675 eor w6,w6,w14
676 add w20,w20,w27 // e+=rot(a,5)
677 orr w25,w25,w26
678 ror w22,w22,#2
679 eor w6,w6,w3
680 add w24,w24,w5 // future e+=X[i]
681 add w20,w20,w25 // e+=F(b,c,d)
682 ror w6,w6,#31
683 orr w25,w21,w22
684 and w26,w21,w22
685 eor w7,w7,w9
686 ror w27,w20,#27
687 and w25,w25,w23
688 add w23,w23,w28 // future e+=K
689 eor w7,w7,w15
690 add w24,w24,w27 // e+=rot(a,5)
691 orr w25,w25,w26
692 ror w21,w21,#2
693 eor w7,w7,w4
694 add w23,w23,w6 // future e+=X[i]
695 add w24,w24,w25 // e+=F(b,c,d)
696 ror w7,w7,#31
697 orr w25,w20,w21
698 and w26,w20,w21
699 eor w8,w8,w10
700 ror w27,w24,#27
701 and w25,w25,w22
702 add w22,w22,w28 // future e+=K
703 eor w8,w8,w16
704 add w23,w23,w27 // e+=rot(a,5)
705 orr w25,w25,w26
706 ror w20,w20,#2
707 eor w8,w8,w5
708 add w22,w22,w7 // future e+=X[i]
709 add w23,w23,w25 // e+=F(b,c,d)
710 ror w8,w8,#31
711 orr w25,w24,w20
712 and w26,w24,w20
713 eor w9,w9,w11
714 ror w27,w23,#27
715 and w25,w25,w21
716 add w21,w21,w28 // future e+=K
717 eor w9,w9,w17
718 add w22,w22,w27 // e+=rot(a,5)
719 orr w25,w25,w26
720 ror w24,w24,#2
721 eor w9,w9,w6
722 add w21,w21,w8 // future e+=X[i]
723 add w22,w22,w25 // e+=F(b,c,d)
724 ror w9,w9,#31
725 orr w25,w23,w24
726 and w26,w23,w24
727 eor w10,w10,w12
728 ror w27,w22,#27
729 and w25,w25,w20
730 add w20,w20,w28 // future e+=K
731 eor w10,w10,w19
732 add w21,w21,w27 // e+=rot(a,5)
733 orr w25,w25,w26
734 ror w23,w23,#2
735 eor w10,w10,w7
736 add w20,w20,w9 // future e+=X[i]
737 add w21,w21,w25 // e+=F(b,c,d)
738 ror w10,w10,#31
739 orr w25,w22,w23
740 and w26,w22,w23
741 eor w11,w11,w13
742 ror w27,w21,#27
743 and w25,w25,w24
744 add w24,w24,w28 // future e+=K
745 eor w11,w11,w3
746 add w20,w20,w27 // e+=rot(a,5)
747 orr w25,w25,w26
748 ror w22,w22,#2
749 eor w11,w11,w8
750 add w24,w24,w10 // future e+=X[i]
751 add w20,w20,w25 // e+=F(b,c,d)
752 ror w11,w11,#31
753 orr w25,w21,w22
754 and w26,w21,w22
755 eor w12,w12,w14
756 ror w27,w20,#27
757 and w25,w25,w23
758 add w23,w23,w28 // future e+=K
759 eor w12,w12,w4
760 add w24,w24,w27 // e+=rot(a,5)
761 orr w25,w25,w26
762 ror w21,w21,#2
763 eor w12,w12,w9
764 add w23,w23,w11 // future e+=X[i]
765 add w24,w24,w25 // e+=F(b,c,d)
766 ror w12,w12,#31
767 orr w25,w20,w21
768 and w26,w20,w21
769 eor w13,w13,w15
770 ror w27,w24,#27
771 and w25,w25,w22
772 add w22,w22,w28 // future e+=K
773 eor w13,w13,w5
774 add w23,w23,w27 // e+=rot(a,5)
775 orr w25,w25,w26
776 ror w20,w20,#2
777 eor w13,w13,w10
778 add w22,w22,w12 // future e+=X[i]
779 add w23,w23,w25 // e+=F(b,c,d)
780 ror w13,w13,#31
781 orr w25,w24,w20
782 and w26,w24,w20
783 eor w14,w14,w16
784 ror w27,w23,#27
785 and w25,w25,w21
786 add w21,w21,w28 // future e+=K
787 eor w14,w14,w6
788 add w22,w22,w27 // e+=rot(a,5)
789 orr w25,w25,w26
790 ror w24,w24,#2
791 eor w14,w14,w11
792 add w21,w21,w13 // future e+=X[i]
793 add w22,w22,w25 // e+=F(b,c,d)
794 ror w14,w14,#31
795 orr w25,w23,w24
796 and w26,w23,w24
797 eor w15,w15,w17
798 ror w27,w22,#27
799 and w25,w25,w20
800 add w20,w20,w28 // future e+=K
801 eor w15,w15,w7
802 add w21,w21,w27 // e+=rot(a,5)
803 orr w25,w25,w26
804 ror w23,w23,#2
805 eor w15,w15,w12
806 add w20,w20,w14 // future e+=X[i]
807 add w21,w21,w25 // e+=F(b,c,d)
808 ror w15,w15,#31
809 movz w28,#0xc1d6
810 movk w28,#0xca62,lsl#16
811 orr w25,w22,w23
812 and w26,w22,w23
813 eor w16,w16,w19
814 ror w27,w21,#27
815 and w25,w25,w24
816 add w24,w24,w28 // future e+=K
817 eor w16,w16,w8
818 add w20,w20,w27 // e+=rot(a,5)
819 orr w25,w25,w26
820 ror w22,w22,#2
821 eor w16,w16,w13
822 add w24,w24,w15 // future e+=X[i]
823 add w20,w20,w25 // e+=F(b,c,d)
824 ror w16,w16,#31
825 eor w17,w17,w3
826 eor w25,w23,w21
827 ror w27,w20,#27
828 add w23,w23,w28 // future e+=K
829 eor w17,w17,w9
830 eor w25,w25,w22
831 add w24,w24,w27 // e+=rot(a,5)
832 ror w21,w21,#2
833 eor w17,w17,w14
834 add w23,w23,w16 // future e+=X[i]
835 add w24,w24,w25 // e+=F(b,c,d)
836 ror w17,w17,#31
837 eor w19,w19,w4
838 eor w25,w22,w20
839 ror w27,w24,#27
840 add w22,w22,w28 // future e+=K
841 eor w19,w19,w10
842 eor w25,w25,w21
843 add w23,w23,w27 // e+=rot(a,5)
844 ror w20,w20,#2
845 eor w19,w19,w15
846 add w22,w22,w17 // future e+=X[i]
847 add w23,w23,w25 // e+=F(b,c,d)
848 ror w19,w19,#31
849 eor w3,w3,w5
850 eor w25,w21,w24
851 ror w27,w23,#27
852 add w21,w21,w28 // future e+=K
853 eor w3,w3,w11
854 eor w25,w25,w20
855 add w22,w22,w27 // e+=rot(a,5)
856 ror w24,w24,#2
857 eor w3,w3,w16
858 add w21,w21,w19 // future e+=X[i]
859 add w22,w22,w25 // e+=F(b,c,d)
860 ror w3,w3,#31
861 eor w4,w4,w6
862 eor w25,w20,w23
863 ror w27,w22,#27
864 add w20,w20,w28 // future e+=K
865 eor w4,w4,w12
866 eor w25,w25,w24
867 add w21,w21,w27 // e+=rot(a,5)
868 ror w23,w23,#2
869 eor w4,w4,w17
870 add w20,w20,w3 // future e+=X[i]
871 add w21,w21,w25 // e+=F(b,c,d)
872 ror w4,w4,#31
873 eor w5,w5,w7
874 eor w25,w24,w22
875 ror w27,w21,#27
876 add w24,w24,w28 // future e+=K
877 eor w5,w5,w13
878 eor w25,w25,w23
879 add w20,w20,w27 // e+=rot(a,5)
880 ror w22,w22,#2
881 eor w5,w5,w19
882 add w24,w24,w4 // future e+=X[i]
883 add w20,w20,w25 // e+=F(b,c,d)
884 ror w5,w5,#31
885 eor w6,w6,w8
886 eor w25,w23,w21
887 ror w27,w20,#27
888 add w23,w23,w28 // future e+=K
889 eor w6,w6,w14
890 eor w25,w25,w22
891 add w24,w24,w27 // e+=rot(a,5)
892 ror w21,w21,#2
893 eor w6,w6,w3
894 add w23,w23,w5 // future e+=X[i]
895 add w24,w24,w25 // e+=F(b,c,d)
896 ror w6,w6,#31
897 eor w7,w7,w9
898 eor w25,w22,w20
899 ror w27,w24,#27
900 add w22,w22,w28 // future e+=K
901 eor w7,w7,w15
902 eor w25,w25,w21
903 add w23,w23,w27 // e+=rot(a,5)
904 ror w20,w20,#2
905 eor w7,w7,w4
906 add w22,w22,w6 // future e+=X[i]
907 add w23,w23,w25 // e+=F(b,c,d)
908 ror w7,w7,#31
909 eor w8,w8,w10
910 eor w25,w21,w24
911 ror w27,w23,#27
912 add w21,w21,w28 // future e+=K
913 eor w8,w8,w16
914 eor w25,w25,w20
915 add w22,w22,w27 // e+=rot(a,5)
916 ror w24,w24,#2
917 eor w8,w8,w5
918 add w21,w21,w7 // future e+=X[i]
919 add w22,w22,w25 // e+=F(b,c,d)
920 ror w8,w8,#31
921 eor w9,w9,w11
922 eor w25,w20,w23
923 ror w27,w22,#27
924 add w20,w20,w28 // future e+=K
925 eor w9,w9,w17
926 eor w25,w25,w24
927 add w21,w21,w27 // e+=rot(a,5)
928 ror w23,w23,#2
929 eor w9,w9,w6
930 add w20,w20,w8 // future e+=X[i]
931 add w21,w21,w25 // e+=F(b,c,d)
932 ror w9,w9,#31
933 eor w10,w10,w12
934 eor w25,w24,w22
935 ror w27,w21,#27
936 add w24,w24,w28 // future e+=K
937 eor w10,w10,w19
938 eor w25,w25,w23
939 add w20,w20,w27 // e+=rot(a,5)
940 ror w22,w22,#2
941 eor w10,w10,w7
942 add w24,w24,w9 // future e+=X[i]
943 add w20,w20,w25 // e+=F(b,c,d)
944 ror w10,w10,#31
945 eor w11,w11,w13
946 eor w25,w23,w21
947 ror w27,w20,#27
948 add w23,w23,w28 // future e+=K
949 eor w11,w11,w3
950 eor w25,w25,w22
951 add w24,w24,w27 // e+=rot(a,5)
952 ror w21,w21,#2
953 eor w11,w11,w8
954 add w23,w23,w10 // future e+=X[i]
955 add w24,w24,w25 // e+=F(b,c,d)
956 ror w11,w11,#31
957 eor w12,w12,w14
958 eor w25,w22,w20
959 ror w27,w24,#27
960 add w22,w22,w28 // future e+=K
961 eor w12,w12,w4
962 eor w25,w25,w21
963 add w23,w23,w27 // e+=rot(a,5)
964 ror w20,w20,#2
965 eor w12,w12,w9
966 add w22,w22,w11 // future e+=X[i]
967 add w23,w23,w25 // e+=F(b,c,d)
968 ror w12,w12,#31
969 eor w13,w13,w15
970 eor w25,w21,w24
971 ror w27,w23,#27
972 add w21,w21,w28 // future e+=K
973 eor w13,w13,w5
974 eor w25,w25,w20
975 add w22,w22,w27 // e+=rot(a,5)
976 ror w24,w24,#2
977 eor w13,w13,w10
978 add w21,w21,w12 // future e+=X[i]
979 add w22,w22,w25 // e+=F(b,c,d)
980 ror w13,w13,#31
981 eor w14,w14,w16
982 eor w25,w20,w23
983 ror w27,w22,#27
984 add w20,w20,w28 // future e+=K
985 eor w14,w14,w6
986 eor w25,w25,w24
987 add w21,w21,w27 // e+=rot(a,5)
988 ror w23,w23,#2
989 eor w14,w14,w11
990 add w20,w20,w13 // future e+=X[i]
991 add w21,w21,w25 // e+=F(b,c,d)
992 ror w14,w14,#31
993 eor w15,w15,w17
994 eor w25,w24,w22
995 ror w27,w21,#27
996 add w24,w24,w28 // future e+=K
997 eor w15,w15,w7
998 eor w25,w25,w23
999 add w20,w20,w27 // e+=rot(a,5)
1000 ror w22,w22,#2
1001 eor w15,w15,w12
1002 add w24,w24,w14 // future e+=X[i]
1003 add w20,w20,w25 // e+=F(b,c,d)
1004 ror w15,w15,#31
1005 eor w16,w16,w19
1006 eor w25,w23,w21
1007 ror w27,w20,#27
1008 add w23,w23,w28 // future e+=K
1009 eor w16,w16,w8
1010 eor w25,w25,w22
1011 add w24,w24,w27 // e+=rot(a,5)
1012 ror w21,w21,#2
1013 eor w16,w16,w13
1014 add w23,w23,w15 // future e+=X[i]
1015 add w24,w24,w25 // e+=F(b,c,d)
1016 ror w16,w16,#31
1017 eor w17,w17,w3
1018 eor w25,w22,w20
1019 ror w27,w24,#27
1020 add w22,w22,w28 // future e+=K
1021 eor w17,w17,w9
1022 eor w25,w25,w21
1023 add w23,w23,w27 // e+=rot(a,5)
1024 ror w20,w20,#2
1025 eor w17,w17,w14
1026 add w22,w22,w16 // future e+=X[i]
1027 add w23,w23,w25 // e+=F(b,c,d)
1028 ror w17,w17,#31
1029 eor w19,w19,w4
1030 eor w25,w21,w24
1031 ror w27,w23,#27
1032 add w21,w21,w28 // future e+=K
1033 eor w19,w19,w10
1034 eor w25,w25,w20
1035 add w22,w22,w27 // e+=rot(a,5)
1036 ror w24,w24,#2
1037 eor w19,w19,w15
1038 add w21,w21,w17 // future e+=X[i]
1039 add w22,w22,w25 // e+=F(b,c,d)
1040 ror w19,w19,#31
1041 ldp w4,w5,[x0]
1042 eor w25,w20,w23
1043 ror w27,w22,#27
1044 add w20,w20,w28 // future e+=K
1045 eor w25,w25,w24
1046 add w21,w21,w27 // e+=rot(a,5)
1047 ror w23,w23,#2
1048 add w20,w20,w19 // future e+=X[i]
1049 add w21,w21,w25 // e+=F(b,c,d)
1050 ldp w6,w7,[x0,#8]
1051 eor w25,w24,w22
1052 ror w27,w21,#27
1053 eor w25,w25,w23
1054 add w20,w20,w27 // e+=rot(a,5)
1055 ror w22,w22,#2
1056 ldr w8,[x0,#16]
1057 add w20,w20,w25 // e+=F(b,c,d)
1058 add w21,w21,w5
1059 add w22,w22,w6
1060 add w20,w20,w4
1061 add w23,w23,w7
1062 add w24,w24,w8
1063 stp w20,w21,[x0]
1064 stp w22,w23,[x0,#8]
1065 str w24,[x0,#16]
1066 cbnz x2,.Loop
1067
1068 ldp x19,x20,[sp,#16]
1069 ldp x21,x22,[sp,#32]
1070 ldp x23,x24,[sp,#48]
1071 ldp x25,x26,[sp,#64]
1072 ldp x27,x28,[sp,#80]
1073 ldr x29,[sp],#96
1074 ret
1075 .size sha1_block_data_order,.-sha1_block_data_order
1076 .type sha1_block_armv8,%function
1077 .align 6
1078 sha1_block_armv8:
1079 .Lv8_entry:
1080 // Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.
1081 stp x29,x30,[sp,#-16]!
1082 add x29,sp,#0
1083
1084 adrp x4,.Lconst
1085 add x4,x4,#:lo12:.Lconst
1086 eor v1.16b,v1.16b,v1.16b
1087 ld1 {v0.4s},[x0],#16
1088 ld1 {v1.s}[0],[x0]
1089 sub x0,x0,#16
1090 ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x4]
1091
1092 .Loop_hw:
1093 ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
1094 sub x2,x2,#1
1095 rev32 v4.16b,v4.16b
1096 rev32 v5.16b,v5.16b
1097
1098 add v20.4s,v16.4s,v4.4s
1099 rev32 v6.16b,v6.16b
1100 orr v22.16b,v0.16b,v0.16b // offload
1101
1102 add v21.4s,v16.4s,v5.4s
1103 rev32 v7.16b,v7.16b
1104 .inst 0x5e280803 //sha1h v3.16b,v0.16b
1105 .inst 0x5e140020 //sha1c v0.16b,v1.16b,v20.4s // 0
1106 add v20.4s,v16.4s,v6.4s
1107 .inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1108 .inst 0x5e280802 //sha1h v2.16b,v0.16b // 1
1109 .inst 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s
1110 add v21.4s,v16.4s,v7.4s
1111 .inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1112 .inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1113 .inst 0x5e280803 //sha1h v3.16b,v0.16b // 2
1114 .inst 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s
1115 add v20.4s,v16.4s,v4.4s
1116 .inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1117 .inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1118 .inst 0x5e280802 //sha1h v2.16b,v0.16b // 3
1119 .inst 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s
1120 add v21.4s,v17.4s,v5.4s
1121 .inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1122 .inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1123 .inst 0x5e280803 //sha1h v3.16b,v0.16b // 4
1124 .inst 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s
1125 add v20.4s,v17.4s,v6.4s
1126 .inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1127 .inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1128 .inst 0x5e280802 //sha1h v2.16b,v0.16b // 5
1129 .inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
1130 add v21.4s,v17.4s,v7.4s
1131 .inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1132 .inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1133 .inst 0x5e280803 //sha1h v3.16b,v0.16b // 6
1134 .inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
1135 add v20.4s,v17.4s,v4.4s
1136 .inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1137 .inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1138 .inst 0x5e280802 //sha1h v2.16b,v0.16b // 7
1139 .inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
1140 add v21.4s,v17.4s,v5.4s
1141 .inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1142 .inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1143 .inst 0x5e280803 //sha1h v3.16b,v0.16b // 8
1144 .inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
1145 add v20.4s,v18.4s,v6.4s
1146 .inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1147 .inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1148 .inst 0x5e280802 //sha1h v2.16b,v0.16b // 9
1149 .inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
1150 add v21.4s,v18.4s,v7.4s
1151 .inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1152 .inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1153 .inst 0x5e280803 //sha1h v3.16b,v0.16b // 10
1154 .inst 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
1155 add v20.4s,v18.4s,v4.4s
1156 .inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1157 .inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1158 .inst 0x5e280802 //sha1h v2.16b,v0.16b // 11
1159 .inst 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s
1160 add v21.4s,v18.4s,v5.4s
1161 .inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1162 .inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1163 .inst 0x5e280803 //sha1h v3.16b,v0.16b // 12
1164 .inst 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
1165 add v20.4s,v18.4s,v6.4s
1166 .inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1167 .inst 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1168 .inst 0x5e280802 //sha1h v2.16b,v0.16b // 13
1169 .inst 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s
1170 add v21.4s,v19.4s,v7.4s
1171 .inst 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1172 .inst 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1173 .inst 0x5e280803 //sha1h v3.16b,v0.16b // 14
1174 .inst 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
1175 add v20.4s,v19.4s,v4.4s
1176 .inst 0x5e281885 //sha1su1 v5.16b,v4.16b
1177 .inst 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1178 .inst 0x5e280802 //sha1h v2.16b,v0.16b // 15
1179 .inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
1180 add v21.4s,v19.4s,v5.4s
1181 .inst 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1182 .inst 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1183 .inst 0x5e280803 //sha1h v3.16b,v0.16b // 16
1184 .inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
1185 add v20.4s,v19.4s,v6.4s
1186 .inst 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1187 .inst 0x5e280802 //sha1h v2.16b,v0.16b // 17
1188 .inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
1189 add v21.4s,v19.4s,v7.4s
1190
1191 .inst 0x5e280803 //sha1h v3.16b,v0.16b // 18
1192 .inst 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
1193
1194 .inst 0x5e280802 //sha1h v2.16b,v0.16b // 19
1195 .inst 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
1196
1197 add v1.4s,v1.4s,v2.4s
1198 add v0.4s,v0.4s,v22.4s
1199
1200 cbnz x2,.Loop_hw
1201
1202 st1 {v0.4s},[x0],#16
1203 st1 {v1.s}[0],[x0]
1204
1205 ldr x29,[sp],#16
1206 ret
1207 .size sha1_block_armv8,.-sha1_block_armv8
1208
1209 .section .rodata
1210
1211 .align 6
1212 .Lconst:
1213 .long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 //K_00_19
1214 .long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 //K_20_39
1215 .long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc //K_40_59
1216 .long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 //K_60_79
1217 .byte 83,72,65,49,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
1218 .align 2
1219 .align 2
1220