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