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