xref: /freebsd/sys/crypto/openssl/aarch64/sha1-armv8.S (revision a64729f5077d77e13b9497cb33ecb3c82e606ee8)
1/* Do not modify. This file is auto-generated from sha1-armv8.pl. */
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
13sha1_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
1078sha1_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	adr	x4,.Lconst
1085	eor	v1.16b,v1.16b,v1.16b
1086	ld1	{v0.4s},[x0],#16
1087	ld1	{v1.s}[0],[x0]
1088	sub	x0,x0,#16
1089	ld1	{v16.4s,v17.4s,v18.4s,v19.4s},[x4]
1090
1091.Loop_hw:
1092	ld1	{v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
1093	sub	x2,x2,#1
1094	rev32	v4.16b,v4.16b
1095	rev32	v5.16b,v5.16b
1096
1097	add	v20.4s,v16.4s,v4.4s
1098	rev32	v6.16b,v6.16b
1099	orr	v22.16b,v0.16b,v0.16b	// offload
1100
1101	add	v21.4s,v16.4s,v5.4s
1102	rev32	v7.16b,v7.16b
1103.inst	0x5e280803	//sha1h v3.16b,v0.16b
1104.inst	0x5e140020	//sha1c v0.16b,v1.16b,v20.4s		// 0
1105	add	v20.4s,v16.4s,v6.4s
1106.inst	0x5e0630a4	//sha1su0 v4.16b,v5.16b,v6.16b
1107.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 1
1108.inst	0x5e150060	//sha1c v0.16b,v3.16b,v21.4s
1109	add	v21.4s,v16.4s,v7.4s
1110.inst	0x5e2818e4	//sha1su1 v4.16b,v7.16b
1111.inst	0x5e0730c5	//sha1su0 v5.16b,v6.16b,v7.16b
1112.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 2
1113.inst	0x5e140040	//sha1c v0.16b,v2.16b,v20.4s
1114	add	v20.4s,v16.4s,v4.4s
1115.inst	0x5e281885	//sha1su1 v5.16b,v4.16b
1116.inst	0x5e0430e6	//sha1su0 v6.16b,v7.16b,v4.16b
1117.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 3
1118.inst	0x5e150060	//sha1c v0.16b,v3.16b,v21.4s
1119	add	v21.4s,v17.4s,v5.4s
1120.inst	0x5e2818a6	//sha1su1 v6.16b,v5.16b
1121.inst	0x5e053087	//sha1su0 v7.16b,v4.16b,v5.16b
1122.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 4
1123.inst	0x5e140040	//sha1c v0.16b,v2.16b,v20.4s
1124	add	v20.4s,v17.4s,v6.4s
1125.inst	0x5e2818c7	//sha1su1 v7.16b,v6.16b
1126.inst	0x5e0630a4	//sha1su0 v4.16b,v5.16b,v6.16b
1127.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 5
1128.inst	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
1129	add	v21.4s,v17.4s,v7.4s
1130.inst	0x5e2818e4	//sha1su1 v4.16b,v7.16b
1131.inst	0x5e0730c5	//sha1su0 v5.16b,v6.16b,v7.16b
1132.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 6
1133.inst	0x5e141040	//sha1p v0.16b,v2.16b,v20.4s
1134	add	v20.4s,v17.4s,v4.4s
1135.inst	0x5e281885	//sha1su1 v5.16b,v4.16b
1136.inst	0x5e0430e6	//sha1su0 v6.16b,v7.16b,v4.16b
1137.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 7
1138.inst	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
1139	add	v21.4s,v17.4s,v5.4s
1140.inst	0x5e2818a6	//sha1su1 v6.16b,v5.16b
1141.inst	0x5e053087	//sha1su0 v7.16b,v4.16b,v5.16b
1142.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 8
1143.inst	0x5e141040	//sha1p v0.16b,v2.16b,v20.4s
1144	add	v20.4s,v18.4s,v6.4s
1145.inst	0x5e2818c7	//sha1su1 v7.16b,v6.16b
1146.inst	0x5e0630a4	//sha1su0 v4.16b,v5.16b,v6.16b
1147.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 9
1148.inst	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
1149	add	v21.4s,v18.4s,v7.4s
1150.inst	0x5e2818e4	//sha1su1 v4.16b,v7.16b
1151.inst	0x5e0730c5	//sha1su0 v5.16b,v6.16b,v7.16b
1152.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 10
1153.inst	0x5e142040	//sha1m v0.16b,v2.16b,v20.4s
1154	add	v20.4s,v18.4s,v4.4s
1155.inst	0x5e281885	//sha1su1 v5.16b,v4.16b
1156.inst	0x5e0430e6	//sha1su0 v6.16b,v7.16b,v4.16b
1157.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 11
1158.inst	0x5e152060	//sha1m v0.16b,v3.16b,v21.4s
1159	add	v21.4s,v18.4s,v5.4s
1160.inst	0x5e2818a6	//sha1su1 v6.16b,v5.16b
1161.inst	0x5e053087	//sha1su0 v7.16b,v4.16b,v5.16b
1162.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 12
1163.inst	0x5e142040	//sha1m v0.16b,v2.16b,v20.4s
1164	add	v20.4s,v18.4s,v6.4s
1165.inst	0x5e2818c7	//sha1su1 v7.16b,v6.16b
1166.inst	0x5e0630a4	//sha1su0 v4.16b,v5.16b,v6.16b
1167.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 13
1168.inst	0x5e152060	//sha1m v0.16b,v3.16b,v21.4s
1169	add	v21.4s,v19.4s,v7.4s
1170.inst	0x5e2818e4	//sha1su1 v4.16b,v7.16b
1171.inst	0x5e0730c5	//sha1su0 v5.16b,v6.16b,v7.16b
1172.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 14
1173.inst	0x5e142040	//sha1m v0.16b,v2.16b,v20.4s
1174	add	v20.4s,v19.4s,v4.4s
1175.inst	0x5e281885	//sha1su1 v5.16b,v4.16b
1176.inst	0x5e0430e6	//sha1su0 v6.16b,v7.16b,v4.16b
1177.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 15
1178.inst	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
1179	add	v21.4s,v19.4s,v5.4s
1180.inst	0x5e2818a6	//sha1su1 v6.16b,v5.16b
1181.inst	0x5e053087	//sha1su0 v7.16b,v4.16b,v5.16b
1182.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 16
1183.inst	0x5e141040	//sha1p v0.16b,v2.16b,v20.4s
1184	add	v20.4s,v19.4s,v6.4s
1185.inst	0x5e2818c7	//sha1su1 v7.16b,v6.16b
1186.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 17
1187.inst	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
1188	add	v21.4s,v19.4s,v7.4s
1189
1190.inst	0x5e280803	//sha1h v3.16b,v0.16b		// 18
1191.inst	0x5e141040	//sha1p v0.16b,v2.16b,v20.4s
1192
1193.inst	0x5e280802	//sha1h v2.16b,v0.16b		// 19
1194.inst	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
1195
1196	add	v1.4s,v1.4s,v2.4s
1197	add	v0.4s,v0.4s,v22.4s
1198
1199	cbnz	x2,.Loop_hw
1200
1201	st1	{v0.4s},[x0],#16
1202	st1	{v1.s}[0],[x0]
1203
1204	ldr	x29,[sp],#16
1205	ret
1206.size	sha1_block_armv8,.-sha1_block_armv8
1207.align	6
1208.Lconst:
1209.long	0x5a827999,0x5a827999,0x5a827999,0x5a827999	//K_00_19
1210.long	0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1	//K_20_39
1211.long	0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc	//K_40_59
1212.long	0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6	//K_60_79
1213.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
1214.align	2
1215.align	2
1216