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