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