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