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