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