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