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