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