xref: /aosp_15_r20/external/boringssl/src/gen/bcm/sha1-x86_64-win.asm (revision 8fb009dc861624b67b6cdb62ea21f0f22d0c584b)
1; This file is generated from a similarly-named Perl script in the BoringSSL
2; source tree. Do not edit by hand.
3
4%ifidn __OUTPUT_FORMAT__, win64
5default	rel
6%define XMMWORD
7%define YMMWORD
8%define ZMMWORD
9%define _CET_ENDBR
10
11%ifdef BORINGSSL_PREFIX
12%include "boringssl_prefix_symbols_nasm.inc"
13%endif
14section	.text code align=64
15
16
17global	sha1_block_data_order_nohw
18
19ALIGN	16
20sha1_block_data_order_nohw:
21	mov	QWORD[8+rsp],rdi	;WIN64 prologue
22	mov	QWORD[16+rsp],rsi
23	mov	rax,rsp
24$L$SEH_begin_sha1_block_data_order_nohw:
25	mov	rdi,rcx
26	mov	rsi,rdx
27	mov	rdx,r8
28
29
30
31_CET_ENDBR
32	mov	rax,rsp
33
34	push	rbx
35
36	push	rbp
37
38	push	r12
39
40	push	r13
41
42	push	r14
43
44	mov	r8,rdi
45	sub	rsp,72
46	mov	r9,rsi
47	and	rsp,-64
48	mov	r10,rdx
49	mov	QWORD[64+rsp],rax
50
51$L$prologue:
52
53	mov	esi,DWORD[r8]
54	mov	edi,DWORD[4+r8]
55	mov	r11d,DWORD[8+r8]
56	mov	r12d,DWORD[12+r8]
57	mov	r13d,DWORD[16+r8]
58	jmp	NEAR $L$loop
59
60ALIGN	16
61$L$loop:
62	mov	edx,DWORD[r9]
63	bswap	edx
64	mov	ebp,DWORD[4+r9]
65	mov	eax,r12d
66	mov	DWORD[rsp],edx
67	mov	ecx,esi
68	bswap	ebp
69	xor	eax,r11d
70	rol	ecx,5
71	and	eax,edi
72	lea	r13d,[1518500249+r13*1+rdx]
73	add	r13d,ecx
74	xor	eax,r12d
75	rol	edi,30
76	add	r13d,eax
77	mov	r14d,DWORD[8+r9]
78	mov	eax,r11d
79	mov	DWORD[4+rsp],ebp
80	mov	ecx,r13d
81	bswap	r14d
82	xor	eax,edi
83	rol	ecx,5
84	and	eax,esi
85	lea	r12d,[1518500249+r12*1+rbp]
86	add	r12d,ecx
87	xor	eax,r11d
88	rol	esi,30
89	add	r12d,eax
90	mov	edx,DWORD[12+r9]
91	mov	eax,edi
92	mov	DWORD[8+rsp],r14d
93	mov	ecx,r12d
94	bswap	edx
95	xor	eax,esi
96	rol	ecx,5
97	and	eax,r13d
98	lea	r11d,[1518500249+r11*1+r14]
99	add	r11d,ecx
100	xor	eax,edi
101	rol	r13d,30
102	add	r11d,eax
103	mov	ebp,DWORD[16+r9]
104	mov	eax,esi
105	mov	DWORD[12+rsp],edx
106	mov	ecx,r11d
107	bswap	ebp
108	xor	eax,r13d
109	rol	ecx,5
110	and	eax,r12d
111	lea	edi,[1518500249+rdi*1+rdx]
112	add	edi,ecx
113	xor	eax,esi
114	rol	r12d,30
115	add	edi,eax
116	mov	r14d,DWORD[20+r9]
117	mov	eax,r13d
118	mov	DWORD[16+rsp],ebp
119	mov	ecx,edi
120	bswap	r14d
121	xor	eax,r12d
122	rol	ecx,5
123	and	eax,r11d
124	lea	esi,[1518500249+rsi*1+rbp]
125	add	esi,ecx
126	xor	eax,r13d
127	rol	r11d,30
128	add	esi,eax
129	mov	edx,DWORD[24+r9]
130	mov	eax,r12d
131	mov	DWORD[20+rsp],r14d
132	mov	ecx,esi
133	bswap	edx
134	xor	eax,r11d
135	rol	ecx,5
136	and	eax,edi
137	lea	r13d,[1518500249+r13*1+r14]
138	add	r13d,ecx
139	xor	eax,r12d
140	rol	edi,30
141	add	r13d,eax
142	mov	ebp,DWORD[28+r9]
143	mov	eax,r11d
144	mov	DWORD[24+rsp],edx
145	mov	ecx,r13d
146	bswap	ebp
147	xor	eax,edi
148	rol	ecx,5
149	and	eax,esi
150	lea	r12d,[1518500249+r12*1+rdx]
151	add	r12d,ecx
152	xor	eax,r11d
153	rol	esi,30
154	add	r12d,eax
155	mov	r14d,DWORD[32+r9]
156	mov	eax,edi
157	mov	DWORD[28+rsp],ebp
158	mov	ecx,r12d
159	bswap	r14d
160	xor	eax,esi
161	rol	ecx,5
162	and	eax,r13d
163	lea	r11d,[1518500249+r11*1+rbp]
164	add	r11d,ecx
165	xor	eax,edi
166	rol	r13d,30
167	add	r11d,eax
168	mov	edx,DWORD[36+r9]
169	mov	eax,esi
170	mov	DWORD[32+rsp],r14d
171	mov	ecx,r11d
172	bswap	edx
173	xor	eax,r13d
174	rol	ecx,5
175	and	eax,r12d
176	lea	edi,[1518500249+rdi*1+r14]
177	add	edi,ecx
178	xor	eax,esi
179	rol	r12d,30
180	add	edi,eax
181	mov	ebp,DWORD[40+r9]
182	mov	eax,r13d
183	mov	DWORD[36+rsp],edx
184	mov	ecx,edi
185	bswap	ebp
186	xor	eax,r12d
187	rol	ecx,5
188	and	eax,r11d
189	lea	esi,[1518500249+rsi*1+rdx]
190	add	esi,ecx
191	xor	eax,r13d
192	rol	r11d,30
193	add	esi,eax
194	mov	r14d,DWORD[44+r9]
195	mov	eax,r12d
196	mov	DWORD[40+rsp],ebp
197	mov	ecx,esi
198	bswap	r14d
199	xor	eax,r11d
200	rol	ecx,5
201	and	eax,edi
202	lea	r13d,[1518500249+r13*1+rbp]
203	add	r13d,ecx
204	xor	eax,r12d
205	rol	edi,30
206	add	r13d,eax
207	mov	edx,DWORD[48+r9]
208	mov	eax,r11d
209	mov	DWORD[44+rsp],r14d
210	mov	ecx,r13d
211	bswap	edx
212	xor	eax,edi
213	rol	ecx,5
214	and	eax,esi
215	lea	r12d,[1518500249+r12*1+r14]
216	add	r12d,ecx
217	xor	eax,r11d
218	rol	esi,30
219	add	r12d,eax
220	mov	ebp,DWORD[52+r9]
221	mov	eax,edi
222	mov	DWORD[48+rsp],edx
223	mov	ecx,r12d
224	bswap	ebp
225	xor	eax,esi
226	rol	ecx,5
227	and	eax,r13d
228	lea	r11d,[1518500249+r11*1+rdx]
229	add	r11d,ecx
230	xor	eax,edi
231	rol	r13d,30
232	add	r11d,eax
233	mov	r14d,DWORD[56+r9]
234	mov	eax,esi
235	mov	DWORD[52+rsp],ebp
236	mov	ecx,r11d
237	bswap	r14d
238	xor	eax,r13d
239	rol	ecx,5
240	and	eax,r12d
241	lea	edi,[1518500249+rdi*1+rbp]
242	add	edi,ecx
243	xor	eax,esi
244	rol	r12d,30
245	add	edi,eax
246	mov	edx,DWORD[60+r9]
247	mov	eax,r13d
248	mov	DWORD[56+rsp],r14d
249	mov	ecx,edi
250	bswap	edx
251	xor	eax,r12d
252	rol	ecx,5
253	and	eax,r11d
254	lea	esi,[1518500249+rsi*1+r14]
255	add	esi,ecx
256	xor	eax,r13d
257	rol	r11d,30
258	add	esi,eax
259	xor	ebp,DWORD[rsp]
260	mov	eax,r12d
261	mov	DWORD[60+rsp],edx
262	mov	ecx,esi
263	xor	ebp,DWORD[8+rsp]
264	xor	eax,r11d
265	rol	ecx,5
266	xor	ebp,DWORD[32+rsp]
267	and	eax,edi
268	lea	r13d,[1518500249+r13*1+rdx]
269	rol	edi,30
270	xor	eax,r12d
271	add	r13d,ecx
272	rol	ebp,1
273	add	r13d,eax
274	xor	r14d,DWORD[4+rsp]
275	mov	eax,r11d
276	mov	DWORD[rsp],ebp
277	mov	ecx,r13d
278	xor	r14d,DWORD[12+rsp]
279	xor	eax,edi
280	rol	ecx,5
281	xor	r14d,DWORD[36+rsp]
282	and	eax,esi
283	lea	r12d,[1518500249+r12*1+rbp]
284	rol	esi,30
285	xor	eax,r11d
286	add	r12d,ecx
287	rol	r14d,1
288	add	r12d,eax
289	xor	edx,DWORD[8+rsp]
290	mov	eax,edi
291	mov	DWORD[4+rsp],r14d
292	mov	ecx,r12d
293	xor	edx,DWORD[16+rsp]
294	xor	eax,esi
295	rol	ecx,5
296	xor	edx,DWORD[40+rsp]
297	and	eax,r13d
298	lea	r11d,[1518500249+r11*1+r14]
299	rol	r13d,30
300	xor	eax,edi
301	add	r11d,ecx
302	rol	edx,1
303	add	r11d,eax
304	xor	ebp,DWORD[12+rsp]
305	mov	eax,esi
306	mov	DWORD[8+rsp],edx
307	mov	ecx,r11d
308	xor	ebp,DWORD[20+rsp]
309	xor	eax,r13d
310	rol	ecx,5
311	xor	ebp,DWORD[44+rsp]
312	and	eax,r12d
313	lea	edi,[1518500249+rdi*1+rdx]
314	rol	r12d,30
315	xor	eax,esi
316	add	edi,ecx
317	rol	ebp,1
318	add	edi,eax
319	xor	r14d,DWORD[16+rsp]
320	mov	eax,r13d
321	mov	DWORD[12+rsp],ebp
322	mov	ecx,edi
323	xor	r14d,DWORD[24+rsp]
324	xor	eax,r12d
325	rol	ecx,5
326	xor	r14d,DWORD[48+rsp]
327	and	eax,r11d
328	lea	esi,[1518500249+rsi*1+rbp]
329	rol	r11d,30
330	xor	eax,r13d
331	add	esi,ecx
332	rol	r14d,1
333	add	esi,eax
334	xor	edx,DWORD[20+rsp]
335	mov	eax,edi
336	mov	DWORD[16+rsp],r14d
337	mov	ecx,esi
338	xor	edx,DWORD[28+rsp]
339	xor	eax,r12d
340	rol	ecx,5
341	xor	edx,DWORD[52+rsp]
342	lea	r13d,[1859775393+r13*1+r14]
343	xor	eax,r11d
344	add	r13d,ecx
345	rol	edi,30
346	add	r13d,eax
347	rol	edx,1
348	xor	ebp,DWORD[24+rsp]
349	mov	eax,esi
350	mov	DWORD[20+rsp],edx
351	mov	ecx,r13d
352	xor	ebp,DWORD[32+rsp]
353	xor	eax,r11d
354	rol	ecx,5
355	xor	ebp,DWORD[56+rsp]
356	lea	r12d,[1859775393+r12*1+rdx]
357	xor	eax,edi
358	add	r12d,ecx
359	rol	esi,30
360	add	r12d,eax
361	rol	ebp,1
362	xor	r14d,DWORD[28+rsp]
363	mov	eax,r13d
364	mov	DWORD[24+rsp],ebp
365	mov	ecx,r12d
366	xor	r14d,DWORD[36+rsp]
367	xor	eax,edi
368	rol	ecx,5
369	xor	r14d,DWORD[60+rsp]
370	lea	r11d,[1859775393+r11*1+rbp]
371	xor	eax,esi
372	add	r11d,ecx
373	rol	r13d,30
374	add	r11d,eax
375	rol	r14d,1
376	xor	edx,DWORD[32+rsp]
377	mov	eax,r12d
378	mov	DWORD[28+rsp],r14d
379	mov	ecx,r11d
380	xor	edx,DWORD[40+rsp]
381	xor	eax,esi
382	rol	ecx,5
383	xor	edx,DWORD[rsp]
384	lea	edi,[1859775393+rdi*1+r14]
385	xor	eax,r13d
386	add	edi,ecx
387	rol	r12d,30
388	add	edi,eax
389	rol	edx,1
390	xor	ebp,DWORD[36+rsp]
391	mov	eax,r11d
392	mov	DWORD[32+rsp],edx
393	mov	ecx,edi
394	xor	ebp,DWORD[44+rsp]
395	xor	eax,r13d
396	rol	ecx,5
397	xor	ebp,DWORD[4+rsp]
398	lea	esi,[1859775393+rsi*1+rdx]
399	xor	eax,r12d
400	add	esi,ecx
401	rol	r11d,30
402	add	esi,eax
403	rol	ebp,1
404	xor	r14d,DWORD[40+rsp]
405	mov	eax,edi
406	mov	DWORD[36+rsp],ebp
407	mov	ecx,esi
408	xor	r14d,DWORD[48+rsp]
409	xor	eax,r12d
410	rol	ecx,5
411	xor	r14d,DWORD[8+rsp]
412	lea	r13d,[1859775393+r13*1+rbp]
413	xor	eax,r11d
414	add	r13d,ecx
415	rol	edi,30
416	add	r13d,eax
417	rol	r14d,1
418	xor	edx,DWORD[44+rsp]
419	mov	eax,esi
420	mov	DWORD[40+rsp],r14d
421	mov	ecx,r13d
422	xor	edx,DWORD[52+rsp]
423	xor	eax,r11d
424	rol	ecx,5
425	xor	edx,DWORD[12+rsp]
426	lea	r12d,[1859775393+r12*1+r14]
427	xor	eax,edi
428	add	r12d,ecx
429	rol	esi,30
430	add	r12d,eax
431	rol	edx,1
432	xor	ebp,DWORD[48+rsp]
433	mov	eax,r13d
434	mov	DWORD[44+rsp],edx
435	mov	ecx,r12d
436	xor	ebp,DWORD[56+rsp]
437	xor	eax,edi
438	rol	ecx,5
439	xor	ebp,DWORD[16+rsp]
440	lea	r11d,[1859775393+r11*1+rdx]
441	xor	eax,esi
442	add	r11d,ecx
443	rol	r13d,30
444	add	r11d,eax
445	rol	ebp,1
446	xor	r14d,DWORD[52+rsp]
447	mov	eax,r12d
448	mov	DWORD[48+rsp],ebp
449	mov	ecx,r11d
450	xor	r14d,DWORD[60+rsp]
451	xor	eax,esi
452	rol	ecx,5
453	xor	r14d,DWORD[20+rsp]
454	lea	edi,[1859775393+rdi*1+rbp]
455	xor	eax,r13d
456	add	edi,ecx
457	rol	r12d,30
458	add	edi,eax
459	rol	r14d,1
460	xor	edx,DWORD[56+rsp]
461	mov	eax,r11d
462	mov	DWORD[52+rsp],r14d
463	mov	ecx,edi
464	xor	edx,DWORD[rsp]
465	xor	eax,r13d
466	rol	ecx,5
467	xor	edx,DWORD[24+rsp]
468	lea	esi,[1859775393+rsi*1+r14]
469	xor	eax,r12d
470	add	esi,ecx
471	rol	r11d,30
472	add	esi,eax
473	rol	edx,1
474	xor	ebp,DWORD[60+rsp]
475	mov	eax,edi
476	mov	DWORD[56+rsp],edx
477	mov	ecx,esi
478	xor	ebp,DWORD[4+rsp]
479	xor	eax,r12d
480	rol	ecx,5
481	xor	ebp,DWORD[28+rsp]
482	lea	r13d,[1859775393+r13*1+rdx]
483	xor	eax,r11d
484	add	r13d,ecx
485	rol	edi,30
486	add	r13d,eax
487	rol	ebp,1
488	xor	r14d,DWORD[rsp]
489	mov	eax,esi
490	mov	DWORD[60+rsp],ebp
491	mov	ecx,r13d
492	xor	r14d,DWORD[8+rsp]
493	xor	eax,r11d
494	rol	ecx,5
495	xor	r14d,DWORD[32+rsp]
496	lea	r12d,[1859775393+r12*1+rbp]
497	xor	eax,edi
498	add	r12d,ecx
499	rol	esi,30
500	add	r12d,eax
501	rol	r14d,1
502	xor	edx,DWORD[4+rsp]
503	mov	eax,r13d
504	mov	DWORD[rsp],r14d
505	mov	ecx,r12d
506	xor	edx,DWORD[12+rsp]
507	xor	eax,edi
508	rol	ecx,5
509	xor	edx,DWORD[36+rsp]
510	lea	r11d,[1859775393+r11*1+r14]
511	xor	eax,esi
512	add	r11d,ecx
513	rol	r13d,30
514	add	r11d,eax
515	rol	edx,1
516	xor	ebp,DWORD[8+rsp]
517	mov	eax,r12d
518	mov	DWORD[4+rsp],edx
519	mov	ecx,r11d
520	xor	ebp,DWORD[16+rsp]
521	xor	eax,esi
522	rol	ecx,5
523	xor	ebp,DWORD[40+rsp]
524	lea	edi,[1859775393+rdi*1+rdx]
525	xor	eax,r13d
526	add	edi,ecx
527	rol	r12d,30
528	add	edi,eax
529	rol	ebp,1
530	xor	r14d,DWORD[12+rsp]
531	mov	eax,r11d
532	mov	DWORD[8+rsp],ebp
533	mov	ecx,edi
534	xor	r14d,DWORD[20+rsp]
535	xor	eax,r13d
536	rol	ecx,5
537	xor	r14d,DWORD[44+rsp]
538	lea	esi,[1859775393+rsi*1+rbp]
539	xor	eax,r12d
540	add	esi,ecx
541	rol	r11d,30
542	add	esi,eax
543	rol	r14d,1
544	xor	edx,DWORD[16+rsp]
545	mov	eax,edi
546	mov	DWORD[12+rsp],r14d
547	mov	ecx,esi
548	xor	edx,DWORD[24+rsp]
549	xor	eax,r12d
550	rol	ecx,5
551	xor	edx,DWORD[48+rsp]
552	lea	r13d,[1859775393+r13*1+r14]
553	xor	eax,r11d
554	add	r13d,ecx
555	rol	edi,30
556	add	r13d,eax
557	rol	edx,1
558	xor	ebp,DWORD[20+rsp]
559	mov	eax,esi
560	mov	DWORD[16+rsp],edx
561	mov	ecx,r13d
562	xor	ebp,DWORD[28+rsp]
563	xor	eax,r11d
564	rol	ecx,5
565	xor	ebp,DWORD[52+rsp]
566	lea	r12d,[1859775393+r12*1+rdx]
567	xor	eax,edi
568	add	r12d,ecx
569	rol	esi,30
570	add	r12d,eax
571	rol	ebp,1
572	xor	r14d,DWORD[24+rsp]
573	mov	eax,r13d
574	mov	DWORD[20+rsp],ebp
575	mov	ecx,r12d
576	xor	r14d,DWORD[32+rsp]
577	xor	eax,edi
578	rol	ecx,5
579	xor	r14d,DWORD[56+rsp]
580	lea	r11d,[1859775393+r11*1+rbp]
581	xor	eax,esi
582	add	r11d,ecx
583	rol	r13d,30
584	add	r11d,eax
585	rol	r14d,1
586	xor	edx,DWORD[28+rsp]
587	mov	eax,r12d
588	mov	DWORD[24+rsp],r14d
589	mov	ecx,r11d
590	xor	edx,DWORD[36+rsp]
591	xor	eax,esi
592	rol	ecx,5
593	xor	edx,DWORD[60+rsp]
594	lea	edi,[1859775393+rdi*1+r14]
595	xor	eax,r13d
596	add	edi,ecx
597	rol	r12d,30
598	add	edi,eax
599	rol	edx,1
600	xor	ebp,DWORD[32+rsp]
601	mov	eax,r11d
602	mov	DWORD[28+rsp],edx
603	mov	ecx,edi
604	xor	ebp,DWORD[40+rsp]
605	xor	eax,r13d
606	rol	ecx,5
607	xor	ebp,DWORD[rsp]
608	lea	esi,[1859775393+rsi*1+rdx]
609	xor	eax,r12d
610	add	esi,ecx
611	rol	r11d,30
612	add	esi,eax
613	rol	ebp,1
614	xor	r14d,DWORD[36+rsp]
615	mov	eax,r12d
616	mov	DWORD[32+rsp],ebp
617	mov	ebx,r12d
618	xor	r14d,DWORD[44+rsp]
619	and	eax,r11d
620	mov	ecx,esi
621	xor	r14d,DWORD[4+rsp]
622	lea	r13d,[((-1894007588))+r13*1+rbp]
623	xor	ebx,r11d
624	rol	ecx,5
625	add	r13d,eax
626	rol	r14d,1
627	and	ebx,edi
628	add	r13d,ecx
629	rol	edi,30
630	add	r13d,ebx
631	xor	edx,DWORD[40+rsp]
632	mov	eax,r11d
633	mov	DWORD[36+rsp],r14d
634	mov	ebx,r11d
635	xor	edx,DWORD[48+rsp]
636	and	eax,edi
637	mov	ecx,r13d
638	xor	edx,DWORD[8+rsp]
639	lea	r12d,[((-1894007588))+r12*1+r14]
640	xor	ebx,edi
641	rol	ecx,5
642	add	r12d,eax
643	rol	edx,1
644	and	ebx,esi
645	add	r12d,ecx
646	rol	esi,30
647	add	r12d,ebx
648	xor	ebp,DWORD[44+rsp]
649	mov	eax,edi
650	mov	DWORD[40+rsp],edx
651	mov	ebx,edi
652	xor	ebp,DWORD[52+rsp]
653	and	eax,esi
654	mov	ecx,r12d
655	xor	ebp,DWORD[12+rsp]
656	lea	r11d,[((-1894007588))+r11*1+rdx]
657	xor	ebx,esi
658	rol	ecx,5
659	add	r11d,eax
660	rol	ebp,1
661	and	ebx,r13d
662	add	r11d,ecx
663	rol	r13d,30
664	add	r11d,ebx
665	xor	r14d,DWORD[48+rsp]
666	mov	eax,esi
667	mov	DWORD[44+rsp],ebp
668	mov	ebx,esi
669	xor	r14d,DWORD[56+rsp]
670	and	eax,r13d
671	mov	ecx,r11d
672	xor	r14d,DWORD[16+rsp]
673	lea	edi,[((-1894007588))+rdi*1+rbp]
674	xor	ebx,r13d
675	rol	ecx,5
676	add	edi,eax
677	rol	r14d,1
678	and	ebx,r12d
679	add	edi,ecx
680	rol	r12d,30
681	add	edi,ebx
682	xor	edx,DWORD[52+rsp]
683	mov	eax,r13d
684	mov	DWORD[48+rsp],r14d
685	mov	ebx,r13d
686	xor	edx,DWORD[60+rsp]
687	and	eax,r12d
688	mov	ecx,edi
689	xor	edx,DWORD[20+rsp]
690	lea	esi,[((-1894007588))+rsi*1+r14]
691	xor	ebx,r12d
692	rol	ecx,5
693	add	esi,eax
694	rol	edx,1
695	and	ebx,r11d
696	add	esi,ecx
697	rol	r11d,30
698	add	esi,ebx
699	xor	ebp,DWORD[56+rsp]
700	mov	eax,r12d
701	mov	DWORD[52+rsp],edx
702	mov	ebx,r12d
703	xor	ebp,DWORD[rsp]
704	and	eax,r11d
705	mov	ecx,esi
706	xor	ebp,DWORD[24+rsp]
707	lea	r13d,[((-1894007588))+r13*1+rdx]
708	xor	ebx,r11d
709	rol	ecx,5
710	add	r13d,eax
711	rol	ebp,1
712	and	ebx,edi
713	add	r13d,ecx
714	rol	edi,30
715	add	r13d,ebx
716	xor	r14d,DWORD[60+rsp]
717	mov	eax,r11d
718	mov	DWORD[56+rsp],ebp
719	mov	ebx,r11d
720	xor	r14d,DWORD[4+rsp]
721	and	eax,edi
722	mov	ecx,r13d
723	xor	r14d,DWORD[28+rsp]
724	lea	r12d,[((-1894007588))+r12*1+rbp]
725	xor	ebx,edi
726	rol	ecx,5
727	add	r12d,eax
728	rol	r14d,1
729	and	ebx,esi
730	add	r12d,ecx
731	rol	esi,30
732	add	r12d,ebx
733	xor	edx,DWORD[rsp]
734	mov	eax,edi
735	mov	DWORD[60+rsp],r14d
736	mov	ebx,edi
737	xor	edx,DWORD[8+rsp]
738	and	eax,esi
739	mov	ecx,r12d
740	xor	edx,DWORD[32+rsp]
741	lea	r11d,[((-1894007588))+r11*1+r14]
742	xor	ebx,esi
743	rol	ecx,5
744	add	r11d,eax
745	rol	edx,1
746	and	ebx,r13d
747	add	r11d,ecx
748	rol	r13d,30
749	add	r11d,ebx
750	xor	ebp,DWORD[4+rsp]
751	mov	eax,esi
752	mov	DWORD[rsp],edx
753	mov	ebx,esi
754	xor	ebp,DWORD[12+rsp]
755	and	eax,r13d
756	mov	ecx,r11d
757	xor	ebp,DWORD[36+rsp]
758	lea	edi,[((-1894007588))+rdi*1+rdx]
759	xor	ebx,r13d
760	rol	ecx,5
761	add	edi,eax
762	rol	ebp,1
763	and	ebx,r12d
764	add	edi,ecx
765	rol	r12d,30
766	add	edi,ebx
767	xor	r14d,DWORD[8+rsp]
768	mov	eax,r13d
769	mov	DWORD[4+rsp],ebp
770	mov	ebx,r13d
771	xor	r14d,DWORD[16+rsp]
772	and	eax,r12d
773	mov	ecx,edi
774	xor	r14d,DWORD[40+rsp]
775	lea	esi,[((-1894007588))+rsi*1+rbp]
776	xor	ebx,r12d
777	rol	ecx,5
778	add	esi,eax
779	rol	r14d,1
780	and	ebx,r11d
781	add	esi,ecx
782	rol	r11d,30
783	add	esi,ebx
784	xor	edx,DWORD[12+rsp]
785	mov	eax,r12d
786	mov	DWORD[8+rsp],r14d
787	mov	ebx,r12d
788	xor	edx,DWORD[20+rsp]
789	and	eax,r11d
790	mov	ecx,esi
791	xor	edx,DWORD[44+rsp]
792	lea	r13d,[((-1894007588))+r13*1+r14]
793	xor	ebx,r11d
794	rol	ecx,5
795	add	r13d,eax
796	rol	edx,1
797	and	ebx,edi
798	add	r13d,ecx
799	rol	edi,30
800	add	r13d,ebx
801	xor	ebp,DWORD[16+rsp]
802	mov	eax,r11d
803	mov	DWORD[12+rsp],edx
804	mov	ebx,r11d
805	xor	ebp,DWORD[24+rsp]
806	and	eax,edi
807	mov	ecx,r13d
808	xor	ebp,DWORD[48+rsp]
809	lea	r12d,[((-1894007588))+r12*1+rdx]
810	xor	ebx,edi
811	rol	ecx,5
812	add	r12d,eax
813	rol	ebp,1
814	and	ebx,esi
815	add	r12d,ecx
816	rol	esi,30
817	add	r12d,ebx
818	xor	r14d,DWORD[20+rsp]
819	mov	eax,edi
820	mov	DWORD[16+rsp],ebp
821	mov	ebx,edi
822	xor	r14d,DWORD[28+rsp]
823	and	eax,esi
824	mov	ecx,r12d
825	xor	r14d,DWORD[52+rsp]
826	lea	r11d,[((-1894007588))+r11*1+rbp]
827	xor	ebx,esi
828	rol	ecx,5
829	add	r11d,eax
830	rol	r14d,1
831	and	ebx,r13d
832	add	r11d,ecx
833	rol	r13d,30
834	add	r11d,ebx
835	xor	edx,DWORD[24+rsp]
836	mov	eax,esi
837	mov	DWORD[20+rsp],r14d
838	mov	ebx,esi
839	xor	edx,DWORD[32+rsp]
840	and	eax,r13d
841	mov	ecx,r11d
842	xor	edx,DWORD[56+rsp]
843	lea	edi,[((-1894007588))+rdi*1+r14]
844	xor	ebx,r13d
845	rol	ecx,5
846	add	edi,eax
847	rol	edx,1
848	and	ebx,r12d
849	add	edi,ecx
850	rol	r12d,30
851	add	edi,ebx
852	xor	ebp,DWORD[28+rsp]
853	mov	eax,r13d
854	mov	DWORD[24+rsp],edx
855	mov	ebx,r13d
856	xor	ebp,DWORD[36+rsp]
857	and	eax,r12d
858	mov	ecx,edi
859	xor	ebp,DWORD[60+rsp]
860	lea	esi,[((-1894007588))+rsi*1+rdx]
861	xor	ebx,r12d
862	rol	ecx,5
863	add	esi,eax
864	rol	ebp,1
865	and	ebx,r11d
866	add	esi,ecx
867	rol	r11d,30
868	add	esi,ebx
869	xor	r14d,DWORD[32+rsp]
870	mov	eax,r12d
871	mov	DWORD[28+rsp],ebp
872	mov	ebx,r12d
873	xor	r14d,DWORD[40+rsp]
874	and	eax,r11d
875	mov	ecx,esi
876	xor	r14d,DWORD[rsp]
877	lea	r13d,[((-1894007588))+r13*1+rbp]
878	xor	ebx,r11d
879	rol	ecx,5
880	add	r13d,eax
881	rol	r14d,1
882	and	ebx,edi
883	add	r13d,ecx
884	rol	edi,30
885	add	r13d,ebx
886	xor	edx,DWORD[36+rsp]
887	mov	eax,r11d
888	mov	DWORD[32+rsp],r14d
889	mov	ebx,r11d
890	xor	edx,DWORD[44+rsp]
891	and	eax,edi
892	mov	ecx,r13d
893	xor	edx,DWORD[4+rsp]
894	lea	r12d,[((-1894007588))+r12*1+r14]
895	xor	ebx,edi
896	rol	ecx,5
897	add	r12d,eax
898	rol	edx,1
899	and	ebx,esi
900	add	r12d,ecx
901	rol	esi,30
902	add	r12d,ebx
903	xor	ebp,DWORD[40+rsp]
904	mov	eax,edi
905	mov	DWORD[36+rsp],edx
906	mov	ebx,edi
907	xor	ebp,DWORD[48+rsp]
908	and	eax,esi
909	mov	ecx,r12d
910	xor	ebp,DWORD[8+rsp]
911	lea	r11d,[((-1894007588))+r11*1+rdx]
912	xor	ebx,esi
913	rol	ecx,5
914	add	r11d,eax
915	rol	ebp,1
916	and	ebx,r13d
917	add	r11d,ecx
918	rol	r13d,30
919	add	r11d,ebx
920	xor	r14d,DWORD[44+rsp]
921	mov	eax,esi
922	mov	DWORD[40+rsp],ebp
923	mov	ebx,esi
924	xor	r14d,DWORD[52+rsp]
925	and	eax,r13d
926	mov	ecx,r11d
927	xor	r14d,DWORD[12+rsp]
928	lea	edi,[((-1894007588))+rdi*1+rbp]
929	xor	ebx,r13d
930	rol	ecx,5
931	add	edi,eax
932	rol	r14d,1
933	and	ebx,r12d
934	add	edi,ecx
935	rol	r12d,30
936	add	edi,ebx
937	xor	edx,DWORD[48+rsp]
938	mov	eax,r13d
939	mov	DWORD[44+rsp],r14d
940	mov	ebx,r13d
941	xor	edx,DWORD[56+rsp]
942	and	eax,r12d
943	mov	ecx,edi
944	xor	edx,DWORD[16+rsp]
945	lea	esi,[((-1894007588))+rsi*1+r14]
946	xor	ebx,r12d
947	rol	ecx,5
948	add	esi,eax
949	rol	edx,1
950	and	ebx,r11d
951	add	esi,ecx
952	rol	r11d,30
953	add	esi,ebx
954	xor	ebp,DWORD[52+rsp]
955	mov	eax,edi
956	mov	DWORD[48+rsp],edx
957	mov	ecx,esi
958	xor	ebp,DWORD[60+rsp]
959	xor	eax,r12d
960	rol	ecx,5
961	xor	ebp,DWORD[20+rsp]
962	lea	r13d,[((-899497514))+r13*1+rdx]
963	xor	eax,r11d
964	add	r13d,ecx
965	rol	edi,30
966	add	r13d,eax
967	rol	ebp,1
968	xor	r14d,DWORD[56+rsp]
969	mov	eax,esi
970	mov	DWORD[52+rsp],ebp
971	mov	ecx,r13d
972	xor	r14d,DWORD[rsp]
973	xor	eax,r11d
974	rol	ecx,5
975	xor	r14d,DWORD[24+rsp]
976	lea	r12d,[((-899497514))+r12*1+rbp]
977	xor	eax,edi
978	add	r12d,ecx
979	rol	esi,30
980	add	r12d,eax
981	rol	r14d,1
982	xor	edx,DWORD[60+rsp]
983	mov	eax,r13d
984	mov	DWORD[56+rsp],r14d
985	mov	ecx,r12d
986	xor	edx,DWORD[4+rsp]
987	xor	eax,edi
988	rol	ecx,5
989	xor	edx,DWORD[28+rsp]
990	lea	r11d,[((-899497514))+r11*1+r14]
991	xor	eax,esi
992	add	r11d,ecx
993	rol	r13d,30
994	add	r11d,eax
995	rol	edx,1
996	xor	ebp,DWORD[rsp]
997	mov	eax,r12d
998	mov	DWORD[60+rsp],edx
999	mov	ecx,r11d
1000	xor	ebp,DWORD[8+rsp]
1001	xor	eax,esi
1002	rol	ecx,5
1003	xor	ebp,DWORD[32+rsp]
1004	lea	edi,[((-899497514))+rdi*1+rdx]
1005	xor	eax,r13d
1006	add	edi,ecx
1007	rol	r12d,30
1008	add	edi,eax
1009	rol	ebp,1
1010	xor	r14d,DWORD[4+rsp]
1011	mov	eax,r11d
1012	mov	DWORD[rsp],ebp
1013	mov	ecx,edi
1014	xor	r14d,DWORD[12+rsp]
1015	xor	eax,r13d
1016	rol	ecx,5
1017	xor	r14d,DWORD[36+rsp]
1018	lea	esi,[((-899497514))+rsi*1+rbp]
1019	xor	eax,r12d
1020	add	esi,ecx
1021	rol	r11d,30
1022	add	esi,eax
1023	rol	r14d,1
1024	xor	edx,DWORD[8+rsp]
1025	mov	eax,edi
1026	mov	DWORD[4+rsp],r14d
1027	mov	ecx,esi
1028	xor	edx,DWORD[16+rsp]
1029	xor	eax,r12d
1030	rol	ecx,5
1031	xor	edx,DWORD[40+rsp]
1032	lea	r13d,[((-899497514))+r13*1+r14]
1033	xor	eax,r11d
1034	add	r13d,ecx
1035	rol	edi,30
1036	add	r13d,eax
1037	rol	edx,1
1038	xor	ebp,DWORD[12+rsp]
1039	mov	eax,esi
1040	mov	DWORD[8+rsp],edx
1041	mov	ecx,r13d
1042	xor	ebp,DWORD[20+rsp]
1043	xor	eax,r11d
1044	rol	ecx,5
1045	xor	ebp,DWORD[44+rsp]
1046	lea	r12d,[((-899497514))+r12*1+rdx]
1047	xor	eax,edi
1048	add	r12d,ecx
1049	rol	esi,30
1050	add	r12d,eax
1051	rol	ebp,1
1052	xor	r14d,DWORD[16+rsp]
1053	mov	eax,r13d
1054	mov	DWORD[12+rsp],ebp
1055	mov	ecx,r12d
1056	xor	r14d,DWORD[24+rsp]
1057	xor	eax,edi
1058	rol	ecx,5
1059	xor	r14d,DWORD[48+rsp]
1060	lea	r11d,[((-899497514))+r11*1+rbp]
1061	xor	eax,esi
1062	add	r11d,ecx
1063	rol	r13d,30
1064	add	r11d,eax
1065	rol	r14d,1
1066	xor	edx,DWORD[20+rsp]
1067	mov	eax,r12d
1068	mov	DWORD[16+rsp],r14d
1069	mov	ecx,r11d
1070	xor	edx,DWORD[28+rsp]
1071	xor	eax,esi
1072	rol	ecx,5
1073	xor	edx,DWORD[52+rsp]
1074	lea	edi,[((-899497514))+rdi*1+r14]
1075	xor	eax,r13d
1076	add	edi,ecx
1077	rol	r12d,30
1078	add	edi,eax
1079	rol	edx,1
1080	xor	ebp,DWORD[24+rsp]
1081	mov	eax,r11d
1082	mov	DWORD[20+rsp],edx
1083	mov	ecx,edi
1084	xor	ebp,DWORD[32+rsp]
1085	xor	eax,r13d
1086	rol	ecx,5
1087	xor	ebp,DWORD[56+rsp]
1088	lea	esi,[((-899497514))+rsi*1+rdx]
1089	xor	eax,r12d
1090	add	esi,ecx
1091	rol	r11d,30
1092	add	esi,eax
1093	rol	ebp,1
1094	xor	r14d,DWORD[28+rsp]
1095	mov	eax,edi
1096	mov	DWORD[24+rsp],ebp
1097	mov	ecx,esi
1098	xor	r14d,DWORD[36+rsp]
1099	xor	eax,r12d
1100	rol	ecx,5
1101	xor	r14d,DWORD[60+rsp]
1102	lea	r13d,[((-899497514))+r13*1+rbp]
1103	xor	eax,r11d
1104	add	r13d,ecx
1105	rol	edi,30
1106	add	r13d,eax
1107	rol	r14d,1
1108	xor	edx,DWORD[32+rsp]
1109	mov	eax,esi
1110	mov	DWORD[28+rsp],r14d
1111	mov	ecx,r13d
1112	xor	edx,DWORD[40+rsp]
1113	xor	eax,r11d
1114	rol	ecx,5
1115	xor	edx,DWORD[rsp]
1116	lea	r12d,[((-899497514))+r12*1+r14]
1117	xor	eax,edi
1118	add	r12d,ecx
1119	rol	esi,30
1120	add	r12d,eax
1121	rol	edx,1
1122	xor	ebp,DWORD[36+rsp]
1123	mov	eax,r13d
1124
1125	mov	ecx,r12d
1126	xor	ebp,DWORD[44+rsp]
1127	xor	eax,edi
1128	rol	ecx,5
1129	xor	ebp,DWORD[4+rsp]
1130	lea	r11d,[((-899497514))+r11*1+rdx]
1131	xor	eax,esi
1132	add	r11d,ecx
1133	rol	r13d,30
1134	add	r11d,eax
1135	rol	ebp,1
1136	xor	r14d,DWORD[40+rsp]
1137	mov	eax,r12d
1138
1139	mov	ecx,r11d
1140	xor	r14d,DWORD[48+rsp]
1141	xor	eax,esi
1142	rol	ecx,5
1143	xor	r14d,DWORD[8+rsp]
1144	lea	edi,[((-899497514))+rdi*1+rbp]
1145	xor	eax,r13d
1146	add	edi,ecx
1147	rol	r12d,30
1148	add	edi,eax
1149	rol	r14d,1
1150	xor	edx,DWORD[44+rsp]
1151	mov	eax,r11d
1152
1153	mov	ecx,edi
1154	xor	edx,DWORD[52+rsp]
1155	xor	eax,r13d
1156	rol	ecx,5
1157	xor	edx,DWORD[12+rsp]
1158	lea	esi,[((-899497514))+rsi*1+r14]
1159	xor	eax,r12d
1160	add	esi,ecx
1161	rol	r11d,30
1162	add	esi,eax
1163	rol	edx,1
1164	xor	ebp,DWORD[48+rsp]
1165	mov	eax,edi
1166
1167	mov	ecx,esi
1168	xor	ebp,DWORD[56+rsp]
1169	xor	eax,r12d
1170	rol	ecx,5
1171	xor	ebp,DWORD[16+rsp]
1172	lea	r13d,[((-899497514))+r13*1+rdx]
1173	xor	eax,r11d
1174	add	r13d,ecx
1175	rol	edi,30
1176	add	r13d,eax
1177	rol	ebp,1
1178	xor	r14d,DWORD[52+rsp]
1179	mov	eax,esi
1180
1181	mov	ecx,r13d
1182	xor	r14d,DWORD[60+rsp]
1183	xor	eax,r11d
1184	rol	ecx,5
1185	xor	r14d,DWORD[20+rsp]
1186	lea	r12d,[((-899497514))+r12*1+rbp]
1187	xor	eax,edi
1188	add	r12d,ecx
1189	rol	esi,30
1190	add	r12d,eax
1191	rol	r14d,1
1192	xor	edx,DWORD[56+rsp]
1193	mov	eax,r13d
1194
1195	mov	ecx,r12d
1196	xor	edx,DWORD[rsp]
1197	xor	eax,edi
1198	rol	ecx,5
1199	xor	edx,DWORD[24+rsp]
1200	lea	r11d,[((-899497514))+r11*1+r14]
1201	xor	eax,esi
1202	add	r11d,ecx
1203	rol	r13d,30
1204	add	r11d,eax
1205	rol	edx,1
1206	xor	ebp,DWORD[60+rsp]
1207	mov	eax,r12d
1208
1209	mov	ecx,r11d
1210	xor	ebp,DWORD[4+rsp]
1211	xor	eax,esi
1212	rol	ecx,5
1213	xor	ebp,DWORD[28+rsp]
1214	lea	edi,[((-899497514))+rdi*1+rdx]
1215	xor	eax,r13d
1216	add	edi,ecx
1217	rol	r12d,30
1218	add	edi,eax
1219	rol	ebp,1
1220	mov	eax,r11d
1221	mov	ecx,edi
1222	xor	eax,r13d
1223	lea	esi,[((-899497514))+rsi*1+rbp]
1224	rol	ecx,5
1225	xor	eax,r12d
1226	add	esi,ecx
1227	rol	r11d,30
1228	add	esi,eax
1229	add	esi,DWORD[r8]
1230	add	edi,DWORD[4+r8]
1231	add	r11d,DWORD[8+r8]
1232	add	r12d,DWORD[12+r8]
1233	add	r13d,DWORD[16+r8]
1234	mov	DWORD[r8],esi
1235	mov	DWORD[4+r8],edi
1236	mov	DWORD[8+r8],r11d
1237	mov	DWORD[12+r8],r12d
1238	mov	DWORD[16+r8],r13d
1239
1240	sub	r10,1
1241	lea	r9,[64+r9]
1242	jnz	NEAR $L$loop
1243
1244	mov	rsi,QWORD[64+rsp]
1245
1246	mov	r14,QWORD[((-40))+rsi]
1247
1248	mov	r13,QWORD[((-32))+rsi]
1249
1250	mov	r12,QWORD[((-24))+rsi]
1251
1252	mov	rbp,QWORD[((-16))+rsi]
1253
1254	mov	rbx,QWORD[((-8))+rsi]
1255
1256	lea	rsp,[rsi]
1257
1258$L$epilogue:
1259	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
1260	mov	rsi,QWORD[16+rsp]
1261	ret
1262
1263$L$SEH_end_sha1_block_data_order_nohw:
1264global	sha1_block_data_order_hw
1265
1266ALIGN	32
1267sha1_block_data_order_hw:
1268	mov	QWORD[8+rsp],rdi	;WIN64 prologue
1269	mov	QWORD[16+rsp],rsi
1270	mov	rax,rsp
1271$L$SEH_begin_sha1_block_data_order_hw:
1272	mov	rdi,rcx
1273	mov	rsi,rdx
1274	mov	rdx,r8
1275
1276
1277
1278_CET_ENDBR
1279	lea	rsp,[((-72))+rsp]
1280	movaps	XMMWORD[(-8-64)+rax],xmm6
1281	movaps	XMMWORD[(-8-48)+rax],xmm7
1282	movaps	XMMWORD[(-8-32)+rax],xmm8
1283	movaps	XMMWORD[(-8-16)+rax],xmm9
1284$L$prologue_shaext:
1285	movdqu	xmm0,XMMWORD[rdi]
1286	movd	xmm1,DWORD[16+rdi]
1287	movdqa	xmm3,XMMWORD[((K_XX_XX+160))]
1288
1289	movdqu	xmm4,XMMWORD[rsi]
1290	pshufd	xmm0,xmm0,27
1291	movdqu	xmm5,XMMWORD[16+rsi]
1292	pshufd	xmm1,xmm1,27
1293	movdqu	xmm6,XMMWORD[32+rsi]
1294DB	102,15,56,0,227
1295	movdqu	xmm7,XMMWORD[48+rsi]
1296DB	102,15,56,0,235
1297DB	102,15,56,0,243
1298	movdqa	xmm9,xmm1
1299DB	102,15,56,0,251
1300	jmp	NEAR $L$oop_shaext
1301
1302ALIGN	16
1303$L$oop_shaext:
1304	dec	rdx
1305	lea	r8,[64+rsi]
1306	paddd	xmm1,xmm4
1307	cmovne	rsi,r8
1308	prefetcht0	[512+rsi]
1309	movdqa	xmm8,xmm0
1310	DB	15,56,201,229
1311	movdqa	xmm2,xmm0
1312	DB	15,58,204,193,0
1313	DB	15,56,200,213
1314	pxor	xmm4,xmm6
1315	DB	15,56,201,238
1316	DB	15,56,202,231
1317
1318	movdqa	xmm1,xmm0
1319	DB	15,58,204,194,0
1320	DB	15,56,200,206
1321	pxor	xmm5,xmm7
1322	DB	15,56,202,236
1323	DB	15,56,201,247
1324	movdqa	xmm2,xmm0
1325	DB	15,58,204,193,0
1326	DB	15,56,200,215
1327	pxor	xmm6,xmm4
1328	DB	15,56,201,252
1329	DB	15,56,202,245
1330
1331	movdqa	xmm1,xmm0
1332	DB	15,58,204,194,0
1333	DB	15,56,200,204
1334	pxor	xmm7,xmm5
1335	DB	15,56,202,254
1336	DB	15,56,201,229
1337	movdqa	xmm2,xmm0
1338	DB	15,58,204,193,0
1339	DB	15,56,200,213
1340	pxor	xmm4,xmm6
1341	DB	15,56,201,238
1342	DB	15,56,202,231
1343
1344	movdqa	xmm1,xmm0
1345	DB	15,58,204,194,1
1346	DB	15,56,200,206
1347	pxor	xmm5,xmm7
1348	DB	15,56,202,236
1349	DB	15,56,201,247
1350	movdqa	xmm2,xmm0
1351	DB	15,58,204,193,1
1352	DB	15,56,200,215
1353	pxor	xmm6,xmm4
1354	DB	15,56,201,252
1355	DB	15,56,202,245
1356
1357	movdqa	xmm1,xmm0
1358	DB	15,58,204,194,1
1359	DB	15,56,200,204
1360	pxor	xmm7,xmm5
1361	DB	15,56,202,254
1362	DB	15,56,201,229
1363	movdqa	xmm2,xmm0
1364	DB	15,58,204,193,1
1365	DB	15,56,200,213
1366	pxor	xmm4,xmm6
1367	DB	15,56,201,238
1368	DB	15,56,202,231
1369
1370	movdqa	xmm1,xmm0
1371	DB	15,58,204,194,1
1372	DB	15,56,200,206
1373	pxor	xmm5,xmm7
1374	DB	15,56,202,236
1375	DB	15,56,201,247
1376	movdqa	xmm2,xmm0
1377	DB	15,58,204,193,2
1378	DB	15,56,200,215
1379	pxor	xmm6,xmm4
1380	DB	15,56,201,252
1381	DB	15,56,202,245
1382
1383	movdqa	xmm1,xmm0
1384	DB	15,58,204,194,2
1385	DB	15,56,200,204
1386	pxor	xmm7,xmm5
1387	DB	15,56,202,254
1388	DB	15,56,201,229
1389	movdqa	xmm2,xmm0
1390	DB	15,58,204,193,2
1391	DB	15,56,200,213
1392	pxor	xmm4,xmm6
1393	DB	15,56,201,238
1394	DB	15,56,202,231
1395
1396	movdqa	xmm1,xmm0
1397	DB	15,58,204,194,2
1398	DB	15,56,200,206
1399	pxor	xmm5,xmm7
1400	DB	15,56,202,236
1401	DB	15,56,201,247
1402	movdqa	xmm2,xmm0
1403	DB	15,58,204,193,2
1404	DB	15,56,200,215
1405	pxor	xmm6,xmm4
1406	DB	15,56,201,252
1407	DB	15,56,202,245
1408
1409	movdqa	xmm1,xmm0
1410	DB	15,58,204,194,3
1411	DB	15,56,200,204
1412	pxor	xmm7,xmm5
1413	DB	15,56,202,254
1414	movdqu	xmm4,XMMWORD[rsi]
1415	movdqa	xmm2,xmm0
1416	DB	15,58,204,193,3
1417	DB	15,56,200,213
1418	movdqu	xmm5,XMMWORD[16+rsi]
1419DB	102,15,56,0,227
1420
1421	movdqa	xmm1,xmm0
1422	DB	15,58,204,194,3
1423	DB	15,56,200,206
1424	movdqu	xmm6,XMMWORD[32+rsi]
1425DB	102,15,56,0,235
1426
1427	movdqa	xmm2,xmm0
1428	DB	15,58,204,193,3
1429	DB	15,56,200,215
1430	movdqu	xmm7,XMMWORD[48+rsi]
1431DB	102,15,56,0,243
1432
1433	movdqa	xmm1,xmm0
1434	DB	15,58,204,194,3
1435	DB	65,15,56,200,201
1436DB	102,15,56,0,251
1437
1438	paddd	xmm0,xmm8
1439	movdqa	xmm9,xmm1
1440
1441	jnz	NEAR $L$oop_shaext
1442
1443	pshufd	xmm0,xmm0,27
1444	pshufd	xmm1,xmm1,27
1445	movdqu	XMMWORD[rdi],xmm0
1446	movd	DWORD[16+rdi],xmm1
1447	movaps	xmm6,XMMWORD[((-8-64))+rax]
1448	movaps	xmm7,XMMWORD[((-8-48))+rax]
1449	movaps	xmm8,XMMWORD[((-8-32))+rax]
1450	movaps	xmm9,XMMWORD[((-8-16))+rax]
1451	mov	rsp,rax
1452$L$epilogue_shaext:
1453	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
1454	mov	rsi,QWORD[16+rsp]
1455	ret
1456
1457$L$SEH_end_sha1_block_data_order_hw:
1458global	sha1_block_data_order_ssse3
1459
1460ALIGN	16
1461sha1_block_data_order_ssse3:
1462	mov	QWORD[8+rsp],rdi	;WIN64 prologue
1463	mov	QWORD[16+rsp],rsi
1464	mov	rax,rsp
1465$L$SEH_begin_sha1_block_data_order_ssse3:
1466	mov	rdi,rcx
1467	mov	rsi,rdx
1468	mov	rdx,r8
1469
1470
1471
1472_CET_ENDBR
1473	mov	r11,rsp
1474
1475	push	rbx
1476
1477	push	rbp
1478
1479	push	r12
1480
1481	push	r13
1482
1483	push	r14
1484
1485	lea	rsp,[((-160))+rsp]
1486	movaps	XMMWORD[(-40-96)+r11],xmm6
1487	movaps	XMMWORD[(-40-80)+r11],xmm7
1488	movaps	XMMWORD[(-40-64)+r11],xmm8
1489	movaps	XMMWORD[(-40-48)+r11],xmm9
1490	movaps	XMMWORD[(-40-32)+r11],xmm10
1491	movaps	XMMWORD[(-40-16)+r11],xmm11
1492$L$prologue_ssse3:
1493	and	rsp,-64
1494	mov	r8,rdi
1495	mov	r9,rsi
1496	mov	r10,rdx
1497
1498	shl	r10,6
1499	add	r10,r9
1500	lea	r14,[((K_XX_XX+64))]
1501
1502	mov	eax,DWORD[r8]
1503	mov	ebx,DWORD[4+r8]
1504	mov	ecx,DWORD[8+r8]
1505	mov	edx,DWORD[12+r8]
1506	mov	esi,ebx
1507	mov	ebp,DWORD[16+r8]
1508	mov	edi,ecx
1509	xor	edi,edx
1510	and	esi,edi
1511
1512	movdqa	xmm6,XMMWORD[64+r14]
1513	movdqa	xmm9,XMMWORD[((-64))+r14]
1514	movdqu	xmm0,XMMWORD[r9]
1515	movdqu	xmm1,XMMWORD[16+r9]
1516	movdqu	xmm2,XMMWORD[32+r9]
1517	movdqu	xmm3,XMMWORD[48+r9]
1518DB	102,15,56,0,198
1519DB	102,15,56,0,206
1520DB	102,15,56,0,214
1521	add	r9,64
1522	paddd	xmm0,xmm9
1523DB	102,15,56,0,222
1524	paddd	xmm1,xmm9
1525	paddd	xmm2,xmm9
1526	movdqa	XMMWORD[rsp],xmm0
1527	psubd	xmm0,xmm9
1528	movdqa	XMMWORD[16+rsp],xmm1
1529	psubd	xmm1,xmm9
1530	movdqa	XMMWORD[32+rsp],xmm2
1531	psubd	xmm2,xmm9
1532	jmp	NEAR $L$oop_ssse3
1533ALIGN	16
1534$L$oop_ssse3:
1535	ror	ebx,2
1536	pshufd	xmm4,xmm0,238
1537	xor	esi,edx
1538	movdqa	xmm8,xmm3
1539	paddd	xmm9,xmm3
1540	mov	edi,eax
1541	add	ebp,DWORD[rsp]
1542	punpcklqdq	xmm4,xmm1
1543	xor	ebx,ecx
1544	rol	eax,5
1545	add	ebp,esi
1546	psrldq	xmm8,4
1547	and	edi,ebx
1548	xor	ebx,ecx
1549	pxor	xmm4,xmm0
1550	add	ebp,eax
1551	ror	eax,7
1552	pxor	xmm8,xmm2
1553	xor	edi,ecx
1554	mov	esi,ebp
1555	add	edx,DWORD[4+rsp]
1556	pxor	xmm4,xmm8
1557	xor	eax,ebx
1558	rol	ebp,5
1559	movdqa	XMMWORD[48+rsp],xmm9
1560	add	edx,edi
1561	and	esi,eax
1562	movdqa	xmm10,xmm4
1563	xor	eax,ebx
1564	add	edx,ebp
1565	ror	ebp,7
1566	movdqa	xmm8,xmm4
1567	xor	esi,ebx
1568	pslldq	xmm10,12
1569	paddd	xmm4,xmm4
1570	mov	edi,edx
1571	add	ecx,DWORD[8+rsp]
1572	psrld	xmm8,31
1573	xor	ebp,eax
1574	rol	edx,5
1575	add	ecx,esi
1576	movdqa	xmm9,xmm10
1577	and	edi,ebp
1578	xor	ebp,eax
1579	psrld	xmm10,30
1580	add	ecx,edx
1581	ror	edx,7
1582	por	xmm4,xmm8
1583	xor	edi,eax
1584	mov	esi,ecx
1585	add	ebx,DWORD[12+rsp]
1586	pslld	xmm9,2
1587	pxor	xmm4,xmm10
1588	xor	edx,ebp
1589	movdqa	xmm10,XMMWORD[((-64))+r14]
1590	rol	ecx,5
1591	add	ebx,edi
1592	and	esi,edx
1593	pxor	xmm4,xmm9
1594	xor	edx,ebp
1595	add	ebx,ecx
1596	ror	ecx,7
1597	pshufd	xmm5,xmm1,238
1598	xor	esi,ebp
1599	movdqa	xmm9,xmm4
1600	paddd	xmm10,xmm4
1601	mov	edi,ebx
1602	add	eax,DWORD[16+rsp]
1603	punpcklqdq	xmm5,xmm2
1604	xor	ecx,edx
1605	rol	ebx,5
1606	add	eax,esi
1607	psrldq	xmm9,4
1608	and	edi,ecx
1609	xor	ecx,edx
1610	pxor	xmm5,xmm1
1611	add	eax,ebx
1612	ror	ebx,7
1613	pxor	xmm9,xmm3
1614	xor	edi,edx
1615	mov	esi,eax
1616	add	ebp,DWORD[20+rsp]
1617	pxor	xmm5,xmm9
1618	xor	ebx,ecx
1619	rol	eax,5
1620	movdqa	XMMWORD[rsp],xmm10
1621	add	ebp,edi
1622	and	esi,ebx
1623	movdqa	xmm8,xmm5
1624	xor	ebx,ecx
1625	add	ebp,eax
1626	ror	eax,7
1627	movdqa	xmm9,xmm5
1628	xor	esi,ecx
1629	pslldq	xmm8,12
1630	paddd	xmm5,xmm5
1631	mov	edi,ebp
1632	add	edx,DWORD[24+rsp]
1633	psrld	xmm9,31
1634	xor	eax,ebx
1635	rol	ebp,5
1636	add	edx,esi
1637	movdqa	xmm10,xmm8
1638	and	edi,eax
1639	xor	eax,ebx
1640	psrld	xmm8,30
1641	add	edx,ebp
1642	ror	ebp,7
1643	por	xmm5,xmm9
1644	xor	edi,ebx
1645	mov	esi,edx
1646	add	ecx,DWORD[28+rsp]
1647	pslld	xmm10,2
1648	pxor	xmm5,xmm8
1649	xor	ebp,eax
1650	movdqa	xmm8,XMMWORD[((-32))+r14]
1651	rol	edx,5
1652	add	ecx,edi
1653	and	esi,ebp
1654	pxor	xmm5,xmm10
1655	xor	ebp,eax
1656	add	ecx,edx
1657	ror	edx,7
1658	pshufd	xmm6,xmm2,238
1659	xor	esi,eax
1660	movdqa	xmm10,xmm5
1661	paddd	xmm8,xmm5
1662	mov	edi,ecx
1663	add	ebx,DWORD[32+rsp]
1664	punpcklqdq	xmm6,xmm3
1665	xor	edx,ebp
1666	rol	ecx,5
1667	add	ebx,esi
1668	psrldq	xmm10,4
1669	and	edi,edx
1670	xor	edx,ebp
1671	pxor	xmm6,xmm2
1672	add	ebx,ecx
1673	ror	ecx,7
1674	pxor	xmm10,xmm4
1675	xor	edi,ebp
1676	mov	esi,ebx
1677	add	eax,DWORD[36+rsp]
1678	pxor	xmm6,xmm10
1679	xor	ecx,edx
1680	rol	ebx,5
1681	movdqa	XMMWORD[16+rsp],xmm8
1682	add	eax,edi
1683	and	esi,ecx
1684	movdqa	xmm9,xmm6
1685	xor	ecx,edx
1686	add	eax,ebx
1687	ror	ebx,7
1688	movdqa	xmm10,xmm6
1689	xor	esi,edx
1690	pslldq	xmm9,12
1691	paddd	xmm6,xmm6
1692	mov	edi,eax
1693	add	ebp,DWORD[40+rsp]
1694	psrld	xmm10,31
1695	xor	ebx,ecx
1696	rol	eax,5
1697	add	ebp,esi
1698	movdqa	xmm8,xmm9
1699	and	edi,ebx
1700	xor	ebx,ecx
1701	psrld	xmm9,30
1702	add	ebp,eax
1703	ror	eax,7
1704	por	xmm6,xmm10
1705	xor	edi,ecx
1706	mov	esi,ebp
1707	add	edx,DWORD[44+rsp]
1708	pslld	xmm8,2
1709	pxor	xmm6,xmm9
1710	xor	eax,ebx
1711	movdqa	xmm9,XMMWORD[((-32))+r14]
1712	rol	ebp,5
1713	add	edx,edi
1714	and	esi,eax
1715	pxor	xmm6,xmm8
1716	xor	eax,ebx
1717	add	edx,ebp
1718	ror	ebp,7
1719	pshufd	xmm7,xmm3,238
1720	xor	esi,ebx
1721	movdqa	xmm8,xmm6
1722	paddd	xmm9,xmm6
1723	mov	edi,edx
1724	add	ecx,DWORD[48+rsp]
1725	punpcklqdq	xmm7,xmm4
1726	xor	ebp,eax
1727	rol	edx,5
1728	add	ecx,esi
1729	psrldq	xmm8,4
1730	and	edi,ebp
1731	xor	ebp,eax
1732	pxor	xmm7,xmm3
1733	add	ecx,edx
1734	ror	edx,7
1735	pxor	xmm8,xmm5
1736	xor	edi,eax
1737	mov	esi,ecx
1738	add	ebx,DWORD[52+rsp]
1739	pxor	xmm7,xmm8
1740	xor	edx,ebp
1741	rol	ecx,5
1742	movdqa	XMMWORD[32+rsp],xmm9
1743	add	ebx,edi
1744	and	esi,edx
1745	movdqa	xmm10,xmm7
1746	xor	edx,ebp
1747	add	ebx,ecx
1748	ror	ecx,7
1749	movdqa	xmm8,xmm7
1750	xor	esi,ebp
1751	pslldq	xmm10,12
1752	paddd	xmm7,xmm7
1753	mov	edi,ebx
1754	add	eax,DWORD[56+rsp]
1755	psrld	xmm8,31
1756	xor	ecx,edx
1757	rol	ebx,5
1758	add	eax,esi
1759	movdqa	xmm9,xmm10
1760	and	edi,ecx
1761	xor	ecx,edx
1762	psrld	xmm10,30
1763	add	eax,ebx
1764	ror	ebx,7
1765	por	xmm7,xmm8
1766	xor	edi,edx
1767	mov	esi,eax
1768	add	ebp,DWORD[60+rsp]
1769	pslld	xmm9,2
1770	pxor	xmm7,xmm10
1771	xor	ebx,ecx
1772	movdqa	xmm10,XMMWORD[((-32))+r14]
1773	rol	eax,5
1774	add	ebp,edi
1775	and	esi,ebx
1776	pxor	xmm7,xmm9
1777	pshufd	xmm9,xmm6,238
1778	xor	ebx,ecx
1779	add	ebp,eax
1780	ror	eax,7
1781	pxor	xmm0,xmm4
1782	xor	esi,ecx
1783	mov	edi,ebp
1784	add	edx,DWORD[rsp]
1785	punpcklqdq	xmm9,xmm7
1786	xor	eax,ebx
1787	rol	ebp,5
1788	pxor	xmm0,xmm1
1789	add	edx,esi
1790	and	edi,eax
1791	movdqa	xmm8,xmm10
1792	xor	eax,ebx
1793	paddd	xmm10,xmm7
1794	add	edx,ebp
1795	pxor	xmm0,xmm9
1796	ror	ebp,7
1797	xor	edi,ebx
1798	mov	esi,edx
1799	add	ecx,DWORD[4+rsp]
1800	movdqa	xmm9,xmm0
1801	xor	ebp,eax
1802	rol	edx,5
1803	movdqa	XMMWORD[48+rsp],xmm10
1804	add	ecx,edi
1805	and	esi,ebp
1806	xor	ebp,eax
1807	pslld	xmm0,2
1808	add	ecx,edx
1809	ror	edx,7
1810	psrld	xmm9,30
1811	xor	esi,eax
1812	mov	edi,ecx
1813	add	ebx,DWORD[8+rsp]
1814	por	xmm0,xmm9
1815	xor	edx,ebp
1816	rol	ecx,5
1817	pshufd	xmm10,xmm7,238
1818	add	ebx,esi
1819	and	edi,edx
1820	xor	edx,ebp
1821	add	ebx,ecx
1822	add	eax,DWORD[12+rsp]
1823	xor	edi,ebp
1824	mov	esi,ebx
1825	rol	ebx,5
1826	add	eax,edi
1827	xor	esi,edx
1828	ror	ecx,7
1829	add	eax,ebx
1830	pxor	xmm1,xmm5
1831	add	ebp,DWORD[16+rsp]
1832	xor	esi,ecx
1833	punpcklqdq	xmm10,xmm0
1834	mov	edi,eax
1835	rol	eax,5
1836	pxor	xmm1,xmm2
1837	add	ebp,esi
1838	xor	edi,ecx
1839	movdqa	xmm9,xmm8
1840	ror	ebx,7
1841	paddd	xmm8,xmm0
1842	add	ebp,eax
1843	pxor	xmm1,xmm10
1844	add	edx,DWORD[20+rsp]
1845	xor	edi,ebx
1846	mov	esi,ebp
1847	rol	ebp,5
1848	movdqa	xmm10,xmm1
1849	add	edx,edi
1850	xor	esi,ebx
1851	movdqa	XMMWORD[rsp],xmm8
1852	ror	eax,7
1853	add	edx,ebp
1854	add	ecx,DWORD[24+rsp]
1855	pslld	xmm1,2
1856	xor	esi,eax
1857	mov	edi,edx
1858	psrld	xmm10,30
1859	rol	edx,5
1860	add	ecx,esi
1861	xor	edi,eax
1862	ror	ebp,7
1863	por	xmm1,xmm10
1864	add	ecx,edx
1865	add	ebx,DWORD[28+rsp]
1866	pshufd	xmm8,xmm0,238
1867	xor	edi,ebp
1868	mov	esi,ecx
1869	rol	ecx,5
1870	add	ebx,edi
1871	xor	esi,ebp
1872	ror	edx,7
1873	add	ebx,ecx
1874	pxor	xmm2,xmm6
1875	add	eax,DWORD[32+rsp]
1876	xor	esi,edx
1877	punpcklqdq	xmm8,xmm1
1878	mov	edi,ebx
1879	rol	ebx,5
1880	pxor	xmm2,xmm3
1881	add	eax,esi
1882	xor	edi,edx
1883	movdqa	xmm10,XMMWORD[r14]
1884	ror	ecx,7
1885	paddd	xmm9,xmm1
1886	add	eax,ebx
1887	pxor	xmm2,xmm8
1888	add	ebp,DWORD[36+rsp]
1889	xor	edi,ecx
1890	mov	esi,eax
1891	rol	eax,5
1892	movdqa	xmm8,xmm2
1893	add	ebp,edi
1894	xor	esi,ecx
1895	movdqa	XMMWORD[16+rsp],xmm9
1896	ror	ebx,7
1897	add	ebp,eax
1898	add	edx,DWORD[40+rsp]
1899	pslld	xmm2,2
1900	xor	esi,ebx
1901	mov	edi,ebp
1902	psrld	xmm8,30
1903	rol	ebp,5
1904	add	edx,esi
1905	xor	edi,ebx
1906	ror	eax,7
1907	por	xmm2,xmm8
1908	add	edx,ebp
1909	add	ecx,DWORD[44+rsp]
1910	pshufd	xmm9,xmm1,238
1911	xor	edi,eax
1912	mov	esi,edx
1913	rol	edx,5
1914	add	ecx,edi
1915	xor	esi,eax
1916	ror	ebp,7
1917	add	ecx,edx
1918	pxor	xmm3,xmm7
1919	add	ebx,DWORD[48+rsp]
1920	xor	esi,ebp
1921	punpcklqdq	xmm9,xmm2
1922	mov	edi,ecx
1923	rol	ecx,5
1924	pxor	xmm3,xmm4
1925	add	ebx,esi
1926	xor	edi,ebp
1927	movdqa	xmm8,xmm10
1928	ror	edx,7
1929	paddd	xmm10,xmm2
1930	add	ebx,ecx
1931	pxor	xmm3,xmm9
1932	add	eax,DWORD[52+rsp]
1933	xor	edi,edx
1934	mov	esi,ebx
1935	rol	ebx,5
1936	movdqa	xmm9,xmm3
1937	add	eax,edi
1938	xor	esi,edx
1939	movdqa	XMMWORD[32+rsp],xmm10
1940	ror	ecx,7
1941	add	eax,ebx
1942	add	ebp,DWORD[56+rsp]
1943	pslld	xmm3,2
1944	xor	esi,ecx
1945	mov	edi,eax
1946	psrld	xmm9,30
1947	rol	eax,5
1948	add	ebp,esi
1949	xor	edi,ecx
1950	ror	ebx,7
1951	por	xmm3,xmm9
1952	add	ebp,eax
1953	add	edx,DWORD[60+rsp]
1954	pshufd	xmm10,xmm2,238
1955	xor	edi,ebx
1956	mov	esi,ebp
1957	rol	ebp,5
1958	add	edx,edi
1959	xor	esi,ebx
1960	ror	eax,7
1961	add	edx,ebp
1962	pxor	xmm4,xmm0
1963	add	ecx,DWORD[rsp]
1964	xor	esi,eax
1965	punpcklqdq	xmm10,xmm3
1966	mov	edi,edx
1967	rol	edx,5
1968	pxor	xmm4,xmm5
1969	add	ecx,esi
1970	xor	edi,eax
1971	movdqa	xmm9,xmm8
1972	ror	ebp,7
1973	paddd	xmm8,xmm3
1974	add	ecx,edx
1975	pxor	xmm4,xmm10
1976	add	ebx,DWORD[4+rsp]
1977	xor	edi,ebp
1978	mov	esi,ecx
1979	rol	ecx,5
1980	movdqa	xmm10,xmm4
1981	add	ebx,edi
1982	xor	esi,ebp
1983	movdqa	XMMWORD[48+rsp],xmm8
1984	ror	edx,7
1985	add	ebx,ecx
1986	add	eax,DWORD[8+rsp]
1987	pslld	xmm4,2
1988	xor	esi,edx
1989	mov	edi,ebx
1990	psrld	xmm10,30
1991	rol	ebx,5
1992	add	eax,esi
1993	xor	edi,edx
1994	ror	ecx,7
1995	por	xmm4,xmm10
1996	add	eax,ebx
1997	add	ebp,DWORD[12+rsp]
1998	pshufd	xmm8,xmm3,238
1999	xor	edi,ecx
2000	mov	esi,eax
2001	rol	eax,5
2002	add	ebp,edi
2003	xor	esi,ecx
2004	ror	ebx,7
2005	add	ebp,eax
2006	pxor	xmm5,xmm1
2007	add	edx,DWORD[16+rsp]
2008	xor	esi,ebx
2009	punpcklqdq	xmm8,xmm4
2010	mov	edi,ebp
2011	rol	ebp,5
2012	pxor	xmm5,xmm6
2013	add	edx,esi
2014	xor	edi,ebx
2015	movdqa	xmm10,xmm9
2016	ror	eax,7
2017	paddd	xmm9,xmm4
2018	add	edx,ebp
2019	pxor	xmm5,xmm8
2020	add	ecx,DWORD[20+rsp]
2021	xor	edi,eax
2022	mov	esi,edx
2023	rol	edx,5
2024	movdqa	xmm8,xmm5
2025	add	ecx,edi
2026	xor	esi,eax
2027	movdqa	XMMWORD[rsp],xmm9
2028	ror	ebp,7
2029	add	ecx,edx
2030	add	ebx,DWORD[24+rsp]
2031	pslld	xmm5,2
2032	xor	esi,ebp
2033	mov	edi,ecx
2034	psrld	xmm8,30
2035	rol	ecx,5
2036	add	ebx,esi
2037	xor	edi,ebp
2038	ror	edx,7
2039	por	xmm5,xmm8
2040	add	ebx,ecx
2041	add	eax,DWORD[28+rsp]
2042	pshufd	xmm9,xmm4,238
2043	ror	ecx,7
2044	mov	esi,ebx
2045	xor	edi,edx
2046	rol	ebx,5
2047	add	eax,edi
2048	xor	esi,ecx
2049	xor	ecx,edx
2050	add	eax,ebx
2051	pxor	xmm6,xmm2
2052	add	ebp,DWORD[32+rsp]
2053	and	esi,ecx
2054	xor	ecx,edx
2055	ror	ebx,7
2056	punpcklqdq	xmm9,xmm5
2057	mov	edi,eax
2058	xor	esi,ecx
2059	pxor	xmm6,xmm7
2060	rol	eax,5
2061	add	ebp,esi
2062	movdqa	xmm8,xmm10
2063	xor	edi,ebx
2064	paddd	xmm10,xmm5
2065	xor	ebx,ecx
2066	pxor	xmm6,xmm9
2067	add	ebp,eax
2068	add	edx,DWORD[36+rsp]
2069	and	edi,ebx
2070	xor	ebx,ecx
2071	ror	eax,7
2072	movdqa	xmm9,xmm6
2073	mov	esi,ebp
2074	xor	edi,ebx
2075	movdqa	XMMWORD[16+rsp],xmm10
2076	rol	ebp,5
2077	add	edx,edi
2078	xor	esi,eax
2079	pslld	xmm6,2
2080	xor	eax,ebx
2081	add	edx,ebp
2082	psrld	xmm9,30
2083	add	ecx,DWORD[40+rsp]
2084	and	esi,eax
2085	xor	eax,ebx
2086	por	xmm6,xmm9
2087	ror	ebp,7
2088	mov	edi,edx
2089	xor	esi,eax
2090	rol	edx,5
2091	pshufd	xmm10,xmm5,238
2092	add	ecx,esi
2093	xor	edi,ebp
2094	xor	ebp,eax
2095	add	ecx,edx
2096	add	ebx,DWORD[44+rsp]
2097	and	edi,ebp
2098	xor	ebp,eax
2099	ror	edx,7
2100	mov	esi,ecx
2101	xor	edi,ebp
2102	rol	ecx,5
2103	add	ebx,edi
2104	xor	esi,edx
2105	xor	edx,ebp
2106	add	ebx,ecx
2107	pxor	xmm7,xmm3
2108	add	eax,DWORD[48+rsp]
2109	and	esi,edx
2110	xor	edx,ebp
2111	ror	ecx,7
2112	punpcklqdq	xmm10,xmm6
2113	mov	edi,ebx
2114	xor	esi,edx
2115	pxor	xmm7,xmm0
2116	rol	ebx,5
2117	add	eax,esi
2118	movdqa	xmm9,XMMWORD[32+r14]
2119	xor	edi,ecx
2120	paddd	xmm8,xmm6
2121	xor	ecx,edx
2122	pxor	xmm7,xmm10
2123	add	eax,ebx
2124	add	ebp,DWORD[52+rsp]
2125	and	edi,ecx
2126	xor	ecx,edx
2127	ror	ebx,7
2128	movdqa	xmm10,xmm7
2129	mov	esi,eax
2130	xor	edi,ecx
2131	movdqa	XMMWORD[32+rsp],xmm8
2132	rol	eax,5
2133	add	ebp,edi
2134	xor	esi,ebx
2135	pslld	xmm7,2
2136	xor	ebx,ecx
2137	add	ebp,eax
2138	psrld	xmm10,30
2139	add	edx,DWORD[56+rsp]
2140	and	esi,ebx
2141	xor	ebx,ecx
2142	por	xmm7,xmm10
2143	ror	eax,7
2144	mov	edi,ebp
2145	xor	esi,ebx
2146	rol	ebp,5
2147	pshufd	xmm8,xmm6,238
2148	add	edx,esi
2149	xor	edi,eax
2150	xor	eax,ebx
2151	add	edx,ebp
2152	add	ecx,DWORD[60+rsp]
2153	and	edi,eax
2154	xor	eax,ebx
2155	ror	ebp,7
2156	mov	esi,edx
2157	xor	edi,eax
2158	rol	edx,5
2159	add	ecx,edi
2160	xor	esi,ebp
2161	xor	ebp,eax
2162	add	ecx,edx
2163	pxor	xmm0,xmm4
2164	add	ebx,DWORD[rsp]
2165	and	esi,ebp
2166	xor	ebp,eax
2167	ror	edx,7
2168	punpcklqdq	xmm8,xmm7
2169	mov	edi,ecx
2170	xor	esi,ebp
2171	pxor	xmm0,xmm1
2172	rol	ecx,5
2173	add	ebx,esi
2174	movdqa	xmm10,xmm9
2175	xor	edi,edx
2176	paddd	xmm9,xmm7
2177	xor	edx,ebp
2178	pxor	xmm0,xmm8
2179	add	ebx,ecx
2180	add	eax,DWORD[4+rsp]
2181	and	edi,edx
2182	xor	edx,ebp
2183	ror	ecx,7
2184	movdqa	xmm8,xmm0
2185	mov	esi,ebx
2186	xor	edi,edx
2187	movdqa	XMMWORD[48+rsp],xmm9
2188	rol	ebx,5
2189	add	eax,edi
2190	xor	esi,ecx
2191	pslld	xmm0,2
2192	xor	ecx,edx
2193	add	eax,ebx
2194	psrld	xmm8,30
2195	add	ebp,DWORD[8+rsp]
2196	and	esi,ecx
2197	xor	ecx,edx
2198	por	xmm0,xmm8
2199	ror	ebx,7
2200	mov	edi,eax
2201	xor	esi,ecx
2202	rol	eax,5
2203	pshufd	xmm9,xmm7,238
2204	add	ebp,esi
2205	xor	edi,ebx
2206	xor	ebx,ecx
2207	add	ebp,eax
2208	add	edx,DWORD[12+rsp]
2209	and	edi,ebx
2210	xor	ebx,ecx
2211	ror	eax,7
2212	mov	esi,ebp
2213	xor	edi,ebx
2214	rol	ebp,5
2215	add	edx,edi
2216	xor	esi,eax
2217	xor	eax,ebx
2218	add	edx,ebp
2219	pxor	xmm1,xmm5
2220	add	ecx,DWORD[16+rsp]
2221	and	esi,eax
2222	xor	eax,ebx
2223	ror	ebp,7
2224	punpcklqdq	xmm9,xmm0
2225	mov	edi,edx
2226	xor	esi,eax
2227	pxor	xmm1,xmm2
2228	rol	edx,5
2229	add	ecx,esi
2230	movdqa	xmm8,xmm10
2231	xor	edi,ebp
2232	paddd	xmm10,xmm0
2233	xor	ebp,eax
2234	pxor	xmm1,xmm9
2235	add	ecx,edx
2236	add	ebx,DWORD[20+rsp]
2237	and	edi,ebp
2238	xor	ebp,eax
2239	ror	edx,7
2240	movdqa	xmm9,xmm1
2241	mov	esi,ecx
2242	xor	edi,ebp
2243	movdqa	XMMWORD[rsp],xmm10
2244	rol	ecx,5
2245	add	ebx,edi
2246	xor	esi,edx
2247	pslld	xmm1,2
2248	xor	edx,ebp
2249	add	ebx,ecx
2250	psrld	xmm9,30
2251	add	eax,DWORD[24+rsp]
2252	and	esi,edx
2253	xor	edx,ebp
2254	por	xmm1,xmm9
2255	ror	ecx,7
2256	mov	edi,ebx
2257	xor	esi,edx
2258	rol	ebx,5
2259	pshufd	xmm10,xmm0,238
2260	add	eax,esi
2261	xor	edi,ecx
2262	xor	ecx,edx
2263	add	eax,ebx
2264	add	ebp,DWORD[28+rsp]
2265	and	edi,ecx
2266	xor	ecx,edx
2267	ror	ebx,7
2268	mov	esi,eax
2269	xor	edi,ecx
2270	rol	eax,5
2271	add	ebp,edi
2272	xor	esi,ebx
2273	xor	ebx,ecx
2274	add	ebp,eax
2275	pxor	xmm2,xmm6
2276	add	edx,DWORD[32+rsp]
2277	and	esi,ebx
2278	xor	ebx,ecx
2279	ror	eax,7
2280	punpcklqdq	xmm10,xmm1
2281	mov	edi,ebp
2282	xor	esi,ebx
2283	pxor	xmm2,xmm3
2284	rol	ebp,5
2285	add	edx,esi
2286	movdqa	xmm9,xmm8
2287	xor	edi,eax
2288	paddd	xmm8,xmm1
2289	xor	eax,ebx
2290	pxor	xmm2,xmm10
2291	add	edx,ebp
2292	add	ecx,DWORD[36+rsp]
2293	and	edi,eax
2294	xor	eax,ebx
2295	ror	ebp,7
2296	movdqa	xmm10,xmm2
2297	mov	esi,edx
2298	xor	edi,eax
2299	movdqa	XMMWORD[16+rsp],xmm8
2300	rol	edx,5
2301	add	ecx,edi
2302	xor	esi,ebp
2303	pslld	xmm2,2
2304	xor	ebp,eax
2305	add	ecx,edx
2306	psrld	xmm10,30
2307	add	ebx,DWORD[40+rsp]
2308	and	esi,ebp
2309	xor	ebp,eax
2310	por	xmm2,xmm10
2311	ror	edx,7
2312	mov	edi,ecx
2313	xor	esi,ebp
2314	rol	ecx,5
2315	pshufd	xmm8,xmm1,238
2316	add	ebx,esi
2317	xor	edi,edx
2318	xor	edx,ebp
2319	add	ebx,ecx
2320	add	eax,DWORD[44+rsp]
2321	and	edi,edx
2322	xor	edx,ebp
2323	ror	ecx,7
2324	mov	esi,ebx
2325	xor	edi,edx
2326	rol	ebx,5
2327	add	eax,edi
2328	xor	esi,edx
2329	add	eax,ebx
2330	pxor	xmm3,xmm7
2331	add	ebp,DWORD[48+rsp]
2332	xor	esi,ecx
2333	punpcklqdq	xmm8,xmm2
2334	mov	edi,eax
2335	rol	eax,5
2336	pxor	xmm3,xmm4
2337	add	ebp,esi
2338	xor	edi,ecx
2339	movdqa	xmm10,xmm9
2340	ror	ebx,7
2341	paddd	xmm9,xmm2
2342	add	ebp,eax
2343	pxor	xmm3,xmm8
2344	add	edx,DWORD[52+rsp]
2345	xor	edi,ebx
2346	mov	esi,ebp
2347	rol	ebp,5
2348	movdqa	xmm8,xmm3
2349	add	edx,edi
2350	xor	esi,ebx
2351	movdqa	XMMWORD[32+rsp],xmm9
2352	ror	eax,7
2353	add	edx,ebp
2354	add	ecx,DWORD[56+rsp]
2355	pslld	xmm3,2
2356	xor	esi,eax
2357	mov	edi,edx
2358	psrld	xmm8,30
2359	rol	edx,5
2360	add	ecx,esi
2361	xor	edi,eax
2362	ror	ebp,7
2363	por	xmm3,xmm8
2364	add	ecx,edx
2365	add	ebx,DWORD[60+rsp]
2366	xor	edi,ebp
2367	mov	esi,ecx
2368	rol	ecx,5
2369	add	ebx,edi
2370	xor	esi,ebp
2371	ror	edx,7
2372	add	ebx,ecx
2373	add	eax,DWORD[rsp]
2374	xor	esi,edx
2375	mov	edi,ebx
2376	rol	ebx,5
2377	paddd	xmm10,xmm3
2378	add	eax,esi
2379	xor	edi,edx
2380	movdqa	XMMWORD[48+rsp],xmm10
2381	ror	ecx,7
2382	add	eax,ebx
2383	add	ebp,DWORD[4+rsp]
2384	xor	edi,ecx
2385	mov	esi,eax
2386	rol	eax,5
2387	add	ebp,edi
2388	xor	esi,ecx
2389	ror	ebx,7
2390	add	ebp,eax
2391	add	edx,DWORD[8+rsp]
2392	xor	esi,ebx
2393	mov	edi,ebp
2394	rol	ebp,5
2395	add	edx,esi
2396	xor	edi,ebx
2397	ror	eax,7
2398	add	edx,ebp
2399	add	ecx,DWORD[12+rsp]
2400	xor	edi,eax
2401	mov	esi,edx
2402	rol	edx,5
2403	add	ecx,edi
2404	xor	esi,eax
2405	ror	ebp,7
2406	add	ecx,edx
2407	cmp	r9,r10
2408	je	NEAR $L$done_ssse3
2409	movdqa	xmm6,XMMWORD[64+r14]
2410	movdqa	xmm9,XMMWORD[((-64))+r14]
2411	movdqu	xmm0,XMMWORD[r9]
2412	movdqu	xmm1,XMMWORD[16+r9]
2413	movdqu	xmm2,XMMWORD[32+r9]
2414	movdqu	xmm3,XMMWORD[48+r9]
2415DB	102,15,56,0,198
2416	add	r9,64
2417	add	ebx,DWORD[16+rsp]
2418	xor	esi,ebp
2419	mov	edi,ecx
2420DB	102,15,56,0,206
2421	rol	ecx,5
2422	add	ebx,esi
2423	xor	edi,ebp
2424	ror	edx,7
2425	paddd	xmm0,xmm9
2426	add	ebx,ecx
2427	add	eax,DWORD[20+rsp]
2428	xor	edi,edx
2429	mov	esi,ebx
2430	movdqa	XMMWORD[rsp],xmm0
2431	rol	ebx,5
2432	add	eax,edi
2433	xor	esi,edx
2434	ror	ecx,7
2435	psubd	xmm0,xmm9
2436	add	eax,ebx
2437	add	ebp,DWORD[24+rsp]
2438	xor	esi,ecx
2439	mov	edi,eax
2440	rol	eax,5
2441	add	ebp,esi
2442	xor	edi,ecx
2443	ror	ebx,7
2444	add	ebp,eax
2445	add	edx,DWORD[28+rsp]
2446	xor	edi,ebx
2447	mov	esi,ebp
2448	rol	ebp,5
2449	add	edx,edi
2450	xor	esi,ebx
2451	ror	eax,7
2452	add	edx,ebp
2453	add	ecx,DWORD[32+rsp]
2454	xor	esi,eax
2455	mov	edi,edx
2456DB	102,15,56,0,214
2457	rol	edx,5
2458	add	ecx,esi
2459	xor	edi,eax
2460	ror	ebp,7
2461	paddd	xmm1,xmm9
2462	add	ecx,edx
2463	add	ebx,DWORD[36+rsp]
2464	xor	edi,ebp
2465	mov	esi,ecx
2466	movdqa	XMMWORD[16+rsp],xmm1
2467	rol	ecx,5
2468	add	ebx,edi
2469	xor	esi,ebp
2470	ror	edx,7
2471	psubd	xmm1,xmm9
2472	add	ebx,ecx
2473	add	eax,DWORD[40+rsp]
2474	xor	esi,edx
2475	mov	edi,ebx
2476	rol	ebx,5
2477	add	eax,esi
2478	xor	edi,edx
2479	ror	ecx,7
2480	add	eax,ebx
2481	add	ebp,DWORD[44+rsp]
2482	xor	edi,ecx
2483	mov	esi,eax
2484	rol	eax,5
2485	add	ebp,edi
2486	xor	esi,ecx
2487	ror	ebx,7
2488	add	ebp,eax
2489	add	edx,DWORD[48+rsp]
2490	xor	esi,ebx
2491	mov	edi,ebp
2492DB	102,15,56,0,222
2493	rol	ebp,5
2494	add	edx,esi
2495	xor	edi,ebx
2496	ror	eax,7
2497	paddd	xmm2,xmm9
2498	add	edx,ebp
2499	add	ecx,DWORD[52+rsp]
2500	xor	edi,eax
2501	mov	esi,edx
2502	movdqa	XMMWORD[32+rsp],xmm2
2503	rol	edx,5
2504	add	ecx,edi
2505	xor	esi,eax
2506	ror	ebp,7
2507	psubd	xmm2,xmm9
2508	add	ecx,edx
2509	add	ebx,DWORD[56+rsp]
2510	xor	esi,ebp
2511	mov	edi,ecx
2512	rol	ecx,5
2513	add	ebx,esi
2514	xor	edi,ebp
2515	ror	edx,7
2516	add	ebx,ecx
2517	add	eax,DWORD[60+rsp]
2518	xor	edi,edx
2519	mov	esi,ebx
2520	rol	ebx,5
2521	add	eax,edi
2522	ror	ecx,7
2523	add	eax,ebx
2524	add	eax,DWORD[r8]
2525	add	esi,DWORD[4+r8]
2526	add	ecx,DWORD[8+r8]
2527	add	edx,DWORD[12+r8]
2528	mov	DWORD[r8],eax
2529	add	ebp,DWORD[16+r8]
2530	mov	DWORD[4+r8],esi
2531	mov	ebx,esi
2532	mov	DWORD[8+r8],ecx
2533	mov	edi,ecx
2534	mov	DWORD[12+r8],edx
2535	xor	edi,edx
2536	mov	DWORD[16+r8],ebp
2537	and	esi,edi
2538	jmp	NEAR $L$oop_ssse3
2539
2540ALIGN	16
2541$L$done_ssse3:
2542	add	ebx,DWORD[16+rsp]
2543	xor	esi,ebp
2544	mov	edi,ecx
2545	rol	ecx,5
2546	add	ebx,esi
2547	xor	edi,ebp
2548	ror	edx,7
2549	add	ebx,ecx
2550	add	eax,DWORD[20+rsp]
2551	xor	edi,edx
2552	mov	esi,ebx
2553	rol	ebx,5
2554	add	eax,edi
2555	xor	esi,edx
2556	ror	ecx,7
2557	add	eax,ebx
2558	add	ebp,DWORD[24+rsp]
2559	xor	esi,ecx
2560	mov	edi,eax
2561	rol	eax,5
2562	add	ebp,esi
2563	xor	edi,ecx
2564	ror	ebx,7
2565	add	ebp,eax
2566	add	edx,DWORD[28+rsp]
2567	xor	edi,ebx
2568	mov	esi,ebp
2569	rol	ebp,5
2570	add	edx,edi
2571	xor	esi,ebx
2572	ror	eax,7
2573	add	edx,ebp
2574	add	ecx,DWORD[32+rsp]
2575	xor	esi,eax
2576	mov	edi,edx
2577	rol	edx,5
2578	add	ecx,esi
2579	xor	edi,eax
2580	ror	ebp,7
2581	add	ecx,edx
2582	add	ebx,DWORD[36+rsp]
2583	xor	edi,ebp
2584	mov	esi,ecx
2585	rol	ecx,5
2586	add	ebx,edi
2587	xor	esi,ebp
2588	ror	edx,7
2589	add	ebx,ecx
2590	add	eax,DWORD[40+rsp]
2591	xor	esi,edx
2592	mov	edi,ebx
2593	rol	ebx,5
2594	add	eax,esi
2595	xor	edi,edx
2596	ror	ecx,7
2597	add	eax,ebx
2598	add	ebp,DWORD[44+rsp]
2599	xor	edi,ecx
2600	mov	esi,eax
2601	rol	eax,5
2602	add	ebp,edi
2603	xor	esi,ecx
2604	ror	ebx,7
2605	add	ebp,eax
2606	add	edx,DWORD[48+rsp]
2607	xor	esi,ebx
2608	mov	edi,ebp
2609	rol	ebp,5
2610	add	edx,esi
2611	xor	edi,ebx
2612	ror	eax,7
2613	add	edx,ebp
2614	add	ecx,DWORD[52+rsp]
2615	xor	edi,eax
2616	mov	esi,edx
2617	rol	edx,5
2618	add	ecx,edi
2619	xor	esi,eax
2620	ror	ebp,7
2621	add	ecx,edx
2622	add	ebx,DWORD[56+rsp]
2623	xor	esi,ebp
2624	mov	edi,ecx
2625	rol	ecx,5
2626	add	ebx,esi
2627	xor	edi,ebp
2628	ror	edx,7
2629	add	ebx,ecx
2630	add	eax,DWORD[60+rsp]
2631	xor	edi,edx
2632	mov	esi,ebx
2633	rol	ebx,5
2634	add	eax,edi
2635	ror	ecx,7
2636	add	eax,ebx
2637	add	eax,DWORD[r8]
2638	add	esi,DWORD[4+r8]
2639	add	ecx,DWORD[8+r8]
2640	mov	DWORD[r8],eax
2641	add	edx,DWORD[12+r8]
2642	mov	DWORD[4+r8],esi
2643	add	ebp,DWORD[16+r8]
2644	mov	DWORD[8+r8],ecx
2645	mov	DWORD[12+r8],edx
2646	mov	DWORD[16+r8],ebp
2647	movaps	xmm6,XMMWORD[((-40-96))+r11]
2648	movaps	xmm7,XMMWORD[((-40-80))+r11]
2649	movaps	xmm8,XMMWORD[((-40-64))+r11]
2650	movaps	xmm9,XMMWORD[((-40-48))+r11]
2651	movaps	xmm10,XMMWORD[((-40-32))+r11]
2652	movaps	xmm11,XMMWORD[((-40-16))+r11]
2653	mov	r14,QWORD[((-40))+r11]
2654
2655	mov	r13,QWORD[((-32))+r11]
2656
2657	mov	r12,QWORD[((-24))+r11]
2658
2659	mov	rbp,QWORD[((-16))+r11]
2660
2661	mov	rbx,QWORD[((-8))+r11]
2662
2663	lea	rsp,[r11]
2664
2665$L$epilogue_ssse3:
2666	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
2667	mov	rsi,QWORD[16+rsp]
2668	ret
2669
2670$L$SEH_end_sha1_block_data_order_ssse3:
2671global	sha1_block_data_order_avx
2672
2673ALIGN	16
2674sha1_block_data_order_avx:
2675	mov	QWORD[8+rsp],rdi	;WIN64 prologue
2676	mov	QWORD[16+rsp],rsi
2677	mov	rax,rsp
2678$L$SEH_begin_sha1_block_data_order_avx:
2679	mov	rdi,rcx
2680	mov	rsi,rdx
2681	mov	rdx,r8
2682
2683
2684
2685_CET_ENDBR
2686	mov	r11,rsp
2687
2688	push	rbx
2689
2690	push	rbp
2691
2692	push	r12
2693
2694	push	r13
2695
2696	push	r14
2697
2698	lea	rsp,[((-160))+rsp]
2699	vzeroupper
2700	vmovaps	XMMWORD[(-40-96)+r11],xmm6
2701	vmovaps	XMMWORD[(-40-80)+r11],xmm7
2702	vmovaps	XMMWORD[(-40-64)+r11],xmm8
2703	vmovaps	XMMWORD[(-40-48)+r11],xmm9
2704	vmovaps	XMMWORD[(-40-32)+r11],xmm10
2705	vmovaps	XMMWORD[(-40-16)+r11],xmm11
2706$L$prologue_avx:
2707	and	rsp,-64
2708	mov	r8,rdi
2709	mov	r9,rsi
2710	mov	r10,rdx
2711
2712	shl	r10,6
2713	add	r10,r9
2714	lea	r14,[((K_XX_XX+64))]
2715
2716	mov	eax,DWORD[r8]
2717	mov	ebx,DWORD[4+r8]
2718	mov	ecx,DWORD[8+r8]
2719	mov	edx,DWORD[12+r8]
2720	mov	esi,ebx
2721	mov	ebp,DWORD[16+r8]
2722	mov	edi,ecx
2723	xor	edi,edx
2724	and	esi,edi
2725
2726	vmovdqa	xmm6,XMMWORD[64+r14]
2727	vmovdqa	xmm11,XMMWORD[((-64))+r14]
2728	vmovdqu	xmm0,XMMWORD[r9]
2729	vmovdqu	xmm1,XMMWORD[16+r9]
2730	vmovdqu	xmm2,XMMWORD[32+r9]
2731	vmovdqu	xmm3,XMMWORD[48+r9]
2732	vpshufb	xmm0,xmm0,xmm6
2733	add	r9,64
2734	vpshufb	xmm1,xmm1,xmm6
2735	vpshufb	xmm2,xmm2,xmm6
2736	vpshufb	xmm3,xmm3,xmm6
2737	vpaddd	xmm4,xmm0,xmm11
2738	vpaddd	xmm5,xmm1,xmm11
2739	vpaddd	xmm6,xmm2,xmm11
2740	vmovdqa	XMMWORD[rsp],xmm4
2741	vmovdqa	XMMWORD[16+rsp],xmm5
2742	vmovdqa	XMMWORD[32+rsp],xmm6
2743	jmp	NEAR $L$oop_avx
2744ALIGN	16
2745$L$oop_avx:
2746	shrd	ebx,ebx,2
2747	xor	esi,edx
2748	vpalignr	xmm4,xmm1,xmm0,8
2749	mov	edi,eax
2750	add	ebp,DWORD[rsp]
2751	vpaddd	xmm9,xmm11,xmm3
2752	xor	ebx,ecx
2753	shld	eax,eax,5
2754	vpsrldq	xmm8,xmm3,4
2755	add	ebp,esi
2756	and	edi,ebx
2757	vpxor	xmm4,xmm4,xmm0
2758	xor	ebx,ecx
2759	add	ebp,eax
2760	vpxor	xmm8,xmm8,xmm2
2761	shrd	eax,eax,7
2762	xor	edi,ecx
2763	mov	esi,ebp
2764	add	edx,DWORD[4+rsp]
2765	vpxor	xmm4,xmm4,xmm8
2766	xor	eax,ebx
2767	shld	ebp,ebp,5
2768	vmovdqa	XMMWORD[48+rsp],xmm9
2769	add	edx,edi
2770	and	esi,eax
2771	vpsrld	xmm8,xmm4,31
2772	xor	eax,ebx
2773	add	edx,ebp
2774	shrd	ebp,ebp,7
2775	xor	esi,ebx
2776	vpslldq	xmm10,xmm4,12
2777	vpaddd	xmm4,xmm4,xmm4
2778	mov	edi,edx
2779	add	ecx,DWORD[8+rsp]
2780	xor	ebp,eax
2781	shld	edx,edx,5
2782	vpsrld	xmm9,xmm10,30
2783	vpor	xmm4,xmm4,xmm8
2784	add	ecx,esi
2785	and	edi,ebp
2786	xor	ebp,eax
2787	add	ecx,edx
2788	vpslld	xmm10,xmm10,2
2789	vpxor	xmm4,xmm4,xmm9
2790	shrd	edx,edx,7
2791	xor	edi,eax
2792	mov	esi,ecx
2793	add	ebx,DWORD[12+rsp]
2794	vpxor	xmm4,xmm4,xmm10
2795	xor	edx,ebp
2796	shld	ecx,ecx,5
2797	add	ebx,edi
2798	and	esi,edx
2799	xor	edx,ebp
2800	add	ebx,ecx
2801	shrd	ecx,ecx,7
2802	xor	esi,ebp
2803	vpalignr	xmm5,xmm2,xmm1,8
2804	mov	edi,ebx
2805	add	eax,DWORD[16+rsp]
2806	vpaddd	xmm9,xmm11,xmm4
2807	xor	ecx,edx
2808	shld	ebx,ebx,5
2809	vpsrldq	xmm8,xmm4,4
2810	add	eax,esi
2811	and	edi,ecx
2812	vpxor	xmm5,xmm5,xmm1
2813	xor	ecx,edx
2814	add	eax,ebx
2815	vpxor	xmm8,xmm8,xmm3
2816	shrd	ebx,ebx,7
2817	xor	edi,edx
2818	mov	esi,eax
2819	add	ebp,DWORD[20+rsp]
2820	vpxor	xmm5,xmm5,xmm8
2821	xor	ebx,ecx
2822	shld	eax,eax,5
2823	vmovdqa	XMMWORD[rsp],xmm9
2824	add	ebp,edi
2825	and	esi,ebx
2826	vpsrld	xmm8,xmm5,31
2827	xor	ebx,ecx
2828	add	ebp,eax
2829	shrd	eax,eax,7
2830	xor	esi,ecx
2831	vpslldq	xmm10,xmm5,12
2832	vpaddd	xmm5,xmm5,xmm5
2833	mov	edi,ebp
2834	add	edx,DWORD[24+rsp]
2835	xor	eax,ebx
2836	shld	ebp,ebp,5
2837	vpsrld	xmm9,xmm10,30
2838	vpor	xmm5,xmm5,xmm8
2839	add	edx,esi
2840	and	edi,eax
2841	xor	eax,ebx
2842	add	edx,ebp
2843	vpslld	xmm10,xmm10,2
2844	vpxor	xmm5,xmm5,xmm9
2845	shrd	ebp,ebp,7
2846	xor	edi,ebx
2847	mov	esi,edx
2848	add	ecx,DWORD[28+rsp]
2849	vpxor	xmm5,xmm5,xmm10
2850	xor	ebp,eax
2851	shld	edx,edx,5
2852	vmovdqa	xmm11,XMMWORD[((-32))+r14]
2853	add	ecx,edi
2854	and	esi,ebp
2855	xor	ebp,eax
2856	add	ecx,edx
2857	shrd	edx,edx,7
2858	xor	esi,eax
2859	vpalignr	xmm6,xmm3,xmm2,8
2860	mov	edi,ecx
2861	add	ebx,DWORD[32+rsp]
2862	vpaddd	xmm9,xmm11,xmm5
2863	xor	edx,ebp
2864	shld	ecx,ecx,5
2865	vpsrldq	xmm8,xmm5,4
2866	add	ebx,esi
2867	and	edi,edx
2868	vpxor	xmm6,xmm6,xmm2
2869	xor	edx,ebp
2870	add	ebx,ecx
2871	vpxor	xmm8,xmm8,xmm4
2872	shrd	ecx,ecx,7
2873	xor	edi,ebp
2874	mov	esi,ebx
2875	add	eax,DWORD[36+rsp]
2876	vpxor	xmm6,xmm6,xmm8
2877	xor	ecx,edx
2878	shld	ebx,ebx,5
2879	vmovdqa	XMMWORD[16+rsp],xmm9
2880	add	eax,edi
2881	and	esi,ecx
2882	vpsrld	xmm8,xmm6,31
2883	xor	ecx,edx
2884	add	eax,ebx
2885	shrd	ebx,ebx,7
2886	xor	esi,edx
2887	vpslldq	xmm10,xmm6,12
2888	vpaddd	xmm6,xmm6,xmm6
2889	mov	edi,eax
2890	add	ebp,DWORD[40+rsp]
2891	xor	ebx,ecx
2892	shld	eax,eax,5
2893	vpsrld	xmm9,xmm10,30
2894	vpor	xmm6,xmm6,xmm8
2895	add	ebp,esi
2896	and	edi,ebx
2897	xor	ebx,ecx
2898	add	ebp,eax
2899	vpslld	xmm10,xmm10,2
2900	vpxor	xmm6,xmm6,xmm9
2901	shrd	eax,eax,7
2902	xor	edi,ecx
2903	mov	esi,ebp
2904	add	edx,DWORD[44+rsp]
2905	vpxor	xmm6,xmm6,xmm10
2906	xor	eax,ebx
2907	shld	ebp,ebp,5
2908	add	edx,edi
2909	and	esi,eax
2910	xor	eax,ebx
2911	add	edx,ebp
2912	shrd	ebp,ebp,7
2913	xor	esi,ebx
2914	vpalignr	xmm7,xmm4,xmm3,8
2915	mov	edi,edx
2916	add	ecx,DWORD[48+rsp]
2917	vpaddd	xmm9,xmm11,xmm6
2918	xor	ebp,eax
2919	shld	edx,edx,5
2920	vpsrldq	xmm8,xmm6,4
2921	add	ecx,esi
2922	and	edi,ebp
2923	vpxor	xmm7,xmm7,xmm3
2924	xor	ebp,eax
2925	add	ecx,edx
2926	vpxor	xmm8,xmm8,xmm5
2927	shrd	edx,edx,7
2928	xor	edi,eax
2929	mov	esi,ecx
2930	add	ebx,DWORD[52+rsp]
2931	vpxor	xmm7,xmm7,xmm8
2932	xor	edx,ebp
2933	shld	ecx,ecx,5
2934	vmovdqa	XMMWORD[32+rsp],xmm9
2935	add	ebx,edi
2936	and	esi,edx
2937	vpsrld	xmm8,xmm7,31
2938	xor	edx,ebp
2939	add	ebx,ecx
2940	shrd	ecx,ecx,7
2941	xor	esi,ebp
2942	vpslldq	xmm10,xmm7,12
2943	vpaddd	xmm7,xmm7,xmm7
2944	mov	edi,ebx
2945	add	eax,DWORD[56+rsp]
2946	xor	ecx,edx
2947	shld	ebx,ebx,5
2948	vpsrld	xmm9,xmm10,30
2949	vpor	xmm7,xmm7,xmm8
2950	add	eax,esi
2951	and	edi,ecx
2952	xor	ecx,edx
2953	add	eax,ebx
2954	vpslld	xmm10,xmm10,2
2955	vpxor	xmm7,xmm7,xmm9
2956	shrd	ebx,ebx,7
2957	xor	edi,edx
2958	mov	esi,eax
2959	add	ebp,DWORD[60+rsp]
2960	vpxor	xmm7,xmm7,xmm10
2961	xor	ebx,ecx
2962	shld	eax,eax,5
2963	add	ebp,edi
2964	and	esi,ebx
2965	xor	ebx,ecx
2966	add	ebp,eax
2967	vpalignr	xmm8,xmm7,xmm6,8
2968	vpxor	xmm0,xmm0,xmm4
2969	shrd	eax,eax,7
2970	xor	esi,ecx
2971	mov	edi,ebp
2972	add	edx,DWORD[rsp]
2973	vpxor	xmm0,xmm0,xmm1
2974	xor	eax,ebx
2975	shld	ebp,ebp,5
2976	vpaddd	xmm9,xmm11,xmm7
2977	add	edx,esi
2978	and	edi,eax
2979	vpxor	xmm0,xmm0,xmm8
2980	xor	eax,ebx
2981	add	edx,ebp
2982	shrd	ebp,ebp,7
2983	xor	edi,ebx
2984	vpsrld	xmm8,xmm0,30
2985	vmovdqa	XMMWORD[48+rsp],xmm9
2986	mov	esi,edx
2987	add	ecx,DWORD[4+rsp]
2988	xor	ebp,eax
2989	shld	edx,edx,5
2990	vpslld	xmm0,xmm0,2
2991	add	ecx,edi
2992	and	esi,ebp
2993	xor	ebp,eax
2994	add	ecx,edx
2995	shrd	edx,edx,7
2996	xor	esi,eax
2997	mov	edi,ecx
2998	add	ebx,DWORD[8+rsp]
2999	vpor	xmm0,xmm0,xmm8
3000	xor	edx,ebp
3001	shld	ecx,ecx,5
3002	add	ebx,esi
3003	and	edi,edx
3004	xor	edx,ebp
3005	add	ebx,ecx
3006	add	eax,DWORD[12+rsp]
3007	xor	edi,ebp
3008	mov	esi,ebx
3009	shld	ebx,ebx,5
3010	add	eax,edi
3011	xor	esi,edx
3012	shrd	ecx,ecx,7
3013	add	eax,ebx
3014	vpalignr	xmm8,xmm0,xmm7,8
3015	vpxor	xmm1,xmm1,xmm5
3016	add	ebp,DWORD[16+rsp]
3017	xor	esi,ecx
3018	mov	edi,eax
3019	shld	eax,eax,5
3020	vpxor	xmm1,xmm1,xmm2
3021	add	ebp,esi
3022	xor	edi,ecx
3023	vpaddd	xmm9,xmm11,xmm0
3024	shrd	ebx,ebx,7
3025	add	ebp,eax
3026	vpxor	xmm1,xmm1,xmm8
3027	add	edx,DWORD[20+rsp]
3028	xor	edi,ebx
3029	mov	esi,ebp
3030	shld	ebp,ebp,5
3031	vpsrld	xmm8,xmm1,30
3032	vmovdqa	XMMWORD[rsp],xmm9
3033	add	edx,edi
3034	xor	esi,ebx
3035	shrd	eax,eax,7
3036	add	edx,ebp
3037	vpslld	xmm1,xmm1,2
3038	add	ecx,DWORD[24+rsp]
3039	xor	esi,eax
3040	mov	edi,edx
3041	shld	edx,edx,5
3042	add	ecx,esi
3043	xor	edi,eax
3044	shrd	ebp,ebp,7
3045	add	ecx,edx
3046	vpor	xmm1,xmm1,xmm8
3047	add	ebx,DWORD[28+rsp]
3048	xor	edi,ebp
3049	mov	esi,ecx
3050	shld	ecx,ecx,5
3051	add	ebx,edi
3052	xor	esi,ebp
3053	shrd	edx,edx,7
3054	add	ebx,ecx
3055	vpalignr	xmm8,xmm1,xmm0,8
3056	vpxor	xmm2,xmm2,xmm6
3057	add	eax,DWORD[32+rsp]
3058	xor	esi,edx
3059	mov	edi,ebx
3060	shld	ebx,ebx,5
3061	vpxor	xmm2,xmm2,xmm3
3062	add	eax,esi
3063	xor	edi,edx
3064	vpaddd	xmm9,xmm11,xmm1
3065	vmovdqa	xmm11,XMMWORD[r14]
3066	shrd	ecx,ecx,7
3067	add	eax,ebx
3068	vpxor	xmm2,xmm2,xmm8
3069	add	ebp,DWORD[36+rsp]
3070	xor	edi,ecx
3071	mov	esi,eax
3072	shld	eax,eax,5
3073	vpsrld	xmm8,xmm2,30
3074	vmovdqa	XMMWORD[16+rsp],xmm9
3075	add	ebp,edi
3076	xor	esi,ecx
3077	shrd	ebx,ebx,7
3078	add	ebp,eax
3079	vpslld	xmm2,xmm2,2
3080	add	edx,DWORD[40+rsp]
3081	xor	esi,ebx
3082	mov	edi,ebp
3083	shld	ebp,ebp,5
3084	add	edx,esi
3085	xor	edi,ebx
3086	shrd	eax,eax,7
3087	add	edx,ebp
3088	vpor	xmm2,xmm2,xmm8
3089	add	ecx,DWORD[44+rsp]
3090	xor	edi,eax
3091	mov	esi,edx
3092	shld	edx,edx,5
3093	add	ecx,edi
3094	xor	esi,eax
3095	shrd	ebp,ebp,7
3096	add	ecx,edx
3097	vpalignr	xmm8,xmm2,xmm1,8
3098	vpxor	xmm3,xmm3,xmm7
3099	add	ebx,DWORD[48+rsp]
3100	xor	esi,ebp
3101	mov	edi,ecx
3102	shld	ecx,ecx,5
3103	vpxor	xmm3,xmm3,xmm4
3104	add	ebx,esi
3105	xor	edi,ebp
3106	vpaddd	xmm9,xmm11,xmm2
3107	shrd	edx,edx,7
3108	add	ebx,ecx
3109	vpxor	xmm3,xmm3,xmm8
3110	add	eax,DWORD[52+rsp]
3111	xor	edi,edx
3112	mov	esi,ebx
3113	shld	ebx,ebx,5
3114	vpsrld	xmm8,xmm3,30
3115	vmovdqa	XMMWORD[32+rsp],xmm9
3116	add	eax,edi
3117	xor	esi,edx
3118	shrd	ecx,ecx,7
3119	add	eax,ebx
3120	vpslld	xmm3,xmm3,2
3121	add	ebp,DWORD[56+rsp]
3122	xor	esi,ecx
3123	mov	edi,eax
3124	shld	eax,eax,5
3125	add	ebp,esi
3126	xor	edi,ecx
3127	shrd	ebx,ebx,7
3128	add	ebp,eax
3129	vpor	xmm3,xmm3,xmm8
3130	add	edx,DWORD[60+rsp]
3131	xor	edi,ebx
3132	mov	esi,ebp
3133	shld	ebp,ebp,5
3134	add	edx,edi
3135	xor	esi,ebx
3136	shrd	eax,eax,7
3137	add	edx,ebp
3138	vpalignr	xmm8,xmm3,xmm2,8
3139	vpxor	xmm4,xmm4,xmm0
3140	add	ecx,DWORD[rsp]
3141	xor	esi,eax
3142	mov	edi,edx
3143	shld	edx,edx,5
3144	vpxor	xmm4,xmm4,xmm5
3145	add	ecx,esi
3146	xor	edi,eax
3147	vpaddd	xmm9,xmm11,xmm3
3148	shrd	ebp,ebp,7
3149	add	ecx,edx
3150	vpxor	xmm4,xmm4,xmm8
3151	add	ebx,DWORD[4+rsp]
3152	xor	edi,ebp
3153	mov	esi,ecx
3154	shld	ecx,ecx,5
3155	vpsrld	xmm8,xmm4,30
3156	vmovdqa	XMMWORD[48+rsp],xmm9
3157	add	ebx,edi
3158	xor	esi,ebp
3159	shrd	edx,edx,7
3160	add	ebx,ecx
3161	vpslld	xmm4,xmm4,2
3162	add	eax,DWORD[8+rsp]
3163	xor	esi,edx
3164	mov	edi,ebx
3165	shld	ebx,ebx,5
3166	add	eax,esi
3167	xor	edi,edx
3168	shrd	ecx,ecx,7
3169	add	eax,ebx
3170	vpor	xmm4,xmm4,xmm8
3171	add	ebp,DWORD[12+rsp]
3172	xor	edi,ecx
3173	mov	esi,eax
3174	shld	eax,eax,5
3175	add	ebp,edi
3176	xor	esi,ecx
3177	shrd	ebx,ebx,7
3178	add	ebp,eax
3179	vpalignr	xmm8,xmm4,xmm3,8
3180	vpxor	xmm5,xmm5,xmm1
3181	add	edx,DWORD[16+rsp]
3182	xor	esi,ebx
3183	mov	edi,ebp
3184	shld	ebp,ebp,5
3185	vpxor	xmm5,xmm5,xmm6
3186	add	edx,esi
3187	xor	edi,ebx
3188	vpaddd	xmm9,xmm11,xmm4
3189	shrd	eax,eax,7
3190	add	edx,ebp
3191	vpxor	xmm5,xmm5,xmm8
3192	add	ecx,DWORD[20+rsp]
3193	xor	edi,eax
3194	mov	esi,edx
3195	shld	edx,edx,5
3196	vpsrld	xmm8,xmm5,30
3197	vmovdqa	XMMWORD[rsp],xmm9
3198	add	ecx,edi
3199	xor	esi,eax
3200	shrd	ebp,ebp,7
3201	add	ecx,edx
3202	vpslld	xmm5,xmm5,2
3203	add	ebx,DWORD[24+rsp]
3204	xor	esi,ebp
3205	mov	edi,ecx
3206	shld	ecx,ecx,5
3207	add	ebx,esi
3208	xor	edi,ebp
3209	shrd	edx,edx,7
3210	add	ebx,ecx
3211	vpor	xmm5,xmm5,xmm8
3212	add	eax,DWORD[28+rsp]
3213	shrd	ecx,ecx,7
3214	mov	esi,ebx
3215	xor	edi,edx
3216	shld	ebx,ebx,5
3217	add	eax,edi
3218	xor	esi,ecx
3219	xor	ecx,edx
3220	add	eax,ebx
3221	vpalignr	xmm8,xmm5,xmm4,8
3222	vpxor	xmm6,xmm6,xmm2
3223	add	ebp,DWORD[32+rsp]
3224	and	esi,ecx
3225	xor	ecx,edx
3226	shrd	ebx,ebx,7
3227	vpxor	xmm6,xmm6,xmm7
3228	mov	edi,eax
3229	xor	esi,ecx
3230	vpaddd	xmm9,xmm11,xmm5
3231	shld	eax,eax,5
3232	add	ebp,esi
3233	vpxor	xmm6,xmm6,xmm8
3234	xor	edi,ebx
3235	xor	ebx,ecx
3236	add	ebp,eax
3237	add	edx,DWORD[36+rsp]
3238	vpsrld	xmm8,xmm6,30
3239	vmovdqa	XMMWORD[16+rsp],xmm9
3240	and	edi,ebx
3241	xor	ebx,ecx
3242	shrd	eax,eax,7
3243	mov	esi,ebp
3244	vpslld	xmm6,xmm6,2
3245	xor	edi,ebx
3246	shld	ebp,ebp,5
3247	add	edx,edi
3248	xor	esi,eax
3249	xor	eax,ebx
3250	add	edx,ebp
3251	add	ecx,DWORD[40+rsp]
3252	and	esi,eax
3253	vpor	xmm6,xmm6,xmm8
3254	xor	eax,ebx
3255	shrd	ebp,ebp,7
3256	mov	edi,edx
3257	xor	esi,eax
3258	shld	edx,edx,5
3259	add	ecx,esi
3260	xor	edi,ebp
3261	xor	ebp,eax
3262	add	ecx,edx
3263	add	ebx,DWORD[44+rsp]
3264	and	edi,ebp
3265	xor	ebp,eax
3266	shrd	edx,edx,7
3267	mov	esi,ecx
3268	xor	edi,ebp
3269	shld	ecx,ecx,5
3270	add	ebx,edi
3271	xor	esi,edx
3272	xor	edx,ebp
3273	add	ebx,ecx
3274	vpalignr	xmm8,xmm6,xmm5,8
3275	vpxor	xmm7,xmm7,xmm3
3276	add	eax,DWORD[48+rsp]
3277	and	esi,edx
3278	xor	edx,ebp
3279	shrd	ecx,ecx,7
3280	vpxor	xmm7,xmm7,xmm0
3281	mov	edi,ebx
3282	xor	esi,edx
3283	vpaddd	xmm9,xmm11,xmm6
3284	vmovdqa	xmm11,XMMWORD[32+r14]
3285	shld	ebx,ebx,5
3286	add	eax,esi
3287	vpxor	xmm7,xmm7,xmm8
3288	xor	edi,ecx
3289	xor	ecx,edx
3290	add	eax,ebx
3291	add	ebp,DWORD[52+rsp]
3292	vpsrld	xmm8,xmm7,30
3293	vmovdqa	XMMWORD[32+rsp],xmm9
3294	and	edi,ecx
3295	xor	ecx,edx
3296	shrd	ebx,ebx,7
3297	mov	esi,eax
3298	vpslld	xmm7,xmm7,2
3299	xor	edi,ecx
3300	shld	eax,eax,5
3301	add	ebp,edi
3302	xor	esi,ebx
3303	xor	ebx,ecx
3304	add	ebp,eax
3305	add	edx,DWORD[56+rsp]
3306	and	esi,ebx
3307	vpor	xmm7,xmm7,xmm8
3308	xor	ebx,ecx
3309	shrd	eax,eax,7
3310	mov	edi,ebp
3311	xor	esi,ebx
3312	shld	ebp,ebp,5
3313	add	edx,esi
3314	xor	edi,eax
3315	xor	eax,ebx
3316	add	edx,ebp
3317	add	ecx,DWORD[60+rsp]
3318	and	edi,eax
3319	xor	eax,ebx
3320	shrd	ebp,ebp,7
3321	mov	esi,edx
3322	xor	edi,eax
3323	shld	edx,edx,5
3324	add	ecx,edi
3325	xor	esi,ebp
3326	xor	ebp,eax
3327	add	ecx,edx
3328	vpalignr	xmm8,xmm7,xmm6,8
3329	vpxor	xmm0,xmm0,xmm4
3330	add	ebx,DWORD[rsp]
3331	and	esi,ebp
3332	xor	ebp,eax
3333	shrd	edx,edx,7
3334	vpxor	xmm0,xmm0,xmm1
3335	mov	edi,ecx
3336	xor	esi,ebp
3337	vpaddd	xmm9,xmm11,xmm7
3338	shld	ecx,ecx,5
3339	add	ebx,esi
3340	vpxor	xmm0,xmm0,xmm8
3341	xor	edi,edx
3342	xor	edx,ebp
3343	add	ebx,ecx
3344	add	eax,DWORD[4+rsp]
3345	vpsrld	xmm8,xmm0,30
3346	vmovdqa	XMMWORD[48+rsp],xmm9
3347	and	edi,edx
3348	xor	edx,ebp
3349	shrd	ecx,ecx,7
3350	mov	esi,ebx
3351	vpslld	xmm0,xmm0,2
3352	xor	edi,edx
3353	shld	ebx,ebx,5
3354	add	eax,edi
3355	xor	esi,ecx
3356	xor	ecx,edx
3357	add	eax,ebx
3358	add	ebp,DWORD[8+rsp]
3359	and	esi,ecx
3360	vpor	xmm0,xmm0,xmm8
3361	xor	ecx,edx
3362	shrd	ebx,ebx,7
3363	mov	edi,eax
3364	xor	esi,ecx
3365	shld	eax,eax,5
3366	add	ebp,esi
3367	xor	edi,ebx
3368	xor	ebx,ecx
3369	add	ebp,eax
3370	add	edx,DWORD[12+rsp]
3371	and	edi,ebx
3372	xor	ebx,ecx
3373	shrd	eax,eax,7
3374	mov	esi,ebp
3375	xor	edi,ebx
3376	shld	ebp,ebp,5
3377	add	edx,edi
3378	xor	esi,eax
3379	xor	eax,ebx
3380	add	edx,ebp
3381	vpalignr	xmm8,xmm0,xmm7,8
3382	vpxor	xmm1,xmm1,xmm5
3383	add	ecx,DWORD[16+rsp]
3384	and	esi,eax
3385	xor	eax,ebx
3386	shrd	ebp,ebp,7
3387	vpxor	xmm1,xmm1,xmm2
3388	mov	edi,edx
3389	xor	esi,eax
3390	vpaddd	xmm9,xmm11,xmm0
3391	shld	edx,edx,5
3392	add	ecx,esi
3393	vpxor	xmm1,xmm1,xmm8
3394	xor	edi,ebp
3395	xor	ebp,eax
3396	add	ecx,edx
3397	add	ebx,DWORD[20+rsp]
3398	vpsrld	xmm8,xmm1,30
3399	vmovdqa	XMMWORD[rsp],xmm9
3400	and	edi,ebp
3401	xor	ebp,eax
3402	shrd	edx,edx,7
3403	mov	esi,ecx
3404	vpslld	xmm1,xmm1,2
3405	xor	edi,ebp
3406	shld	ecx,ecx,5
3407	add	ebx,edi
3408	xor	esi,edx
3409	xor	edx,ebp
3410	add	ebx,ecx
3411	add	eax,DWORD[24+rsp]
3412	and	esi,edx
3413	vpor	xmm1,xmm1,xmm8
3414	xor	edx,ebp
3415	shrd	ecx,ecx,7
3416	mov	edi,ebx
3417	xor	esi,edx
3418	shld	ebx,ebx,5
3419	add	eax,esi
3420	xor	edi,ecx
3421	xor	ecx,edx
3422	add	eax,ebx
3423	add	ebp,DWORD[28+rsp]
3424	and	edi,ecx
3425	xor	ecx,edx
3426	shrd	ebx,ebx,7
3427	mov	esi,eax
3428	xor	edi,ecx
3429	shld	eax,eax,5
3430	add	ebp,edi
3431	xor	esi,ebx
3432	xor	ebx,ecx
3433	add	ebp,eax
3434	vpalignr	xmm8,xmm1,xmm0,8
3435	vpxor	xmm2,xmm2,xmm6
3436	add	edx,DWORD[32+rsp]
3437	and	esi,ebx
3438	xor	ebx,ecx
3439	shrd	eax,eax,7
3440	vpxor	xmm2,xmm2,xmm3
3441	mov	edi,ebp
3442	xor	esi,ebx
3443	vpaddd	xmm9,xmm11,xmm1
3444	shld	ebp,ebp,5
3445	add	edx,esi
3446	vpxor	xmm2,xmm2,xmm8
3447	xor	edi,eax
3448	xor	eax,ebx
3449	add	edx,ebp
3450	add	ecx,DWORD[36+rsp]
3451	vpsrld	xmm8,xmm2,30
3452	vmovdqa	XMMWORD[16+rsp],xmm9
3453	and	edi,eax
3454	xor	eax,ebx
3455	shrd	ebp,ebp,7
3456	mov	esi,edx
3457	vpslld	xmm2,xmm2,2
3458	xor	edi,eax
3459	shld	edx,edx,5
3460	add	ecx,edi
3461	xor	esi,ebp
3462	xor	ebp,eax
3463	add	ecx,edx
3464	add	ebx,DWORD[40+rsp]
3465	and	esi,ebp
3466	vpor	xmm2,xmm2,xmm8
3467	xor	ebp,eax
3468	shrd	edx,edx,7
3469	mov	edi,ecx
3470	xor	esi,ebp
3471	shld	ecx,ecx,5
3472	add	ebx,esi
3473	xor	edi,edx
3474	xor	edx,ebp
3475	add	ebx,ecx
3476	add	eax,DWORD[44+rsp]
3477	and	edi,edx
3478	xor	edx,ebp
3479	shrd	ecx,ecx,7
3480	mov	esi,ebx
3481	xor	edi,edx
3482	shld	ebx,ebx,5
3483	add	eax,edi
3484	xor	esi,edx
3485	add	eax,ebx
3486	vpalignr	xmm8,xmm2,xmm1,8
3487	vpxor	xmm3,xmm3,xmm7
3488	add	ebp,DWORD[48+rsp]
3489	xor	esi,ecx
3490	mov	edi,eax
3491	shld	eax,eax,5
3492	vpxor	xmm3,xmm3,xmm4
3493	add	ebp,esi
3494	xor	edi,ecx
3495	vpaddd	xmm9,xmm11,xmm2
3496	shrd	ebx,ebx,7
3497	add	ebp,eax
3498	vpxor	xmm3,xmm3,xmm8
3499	add	edx,DWORD[52+rsp]
3500	xor	edi,ebx
3501	mov	esi,ebp
3502	shld	ebp,ebp,5
3503	vpsrld	xmm8,xmm3,30
3504	vmovdqa	XMMWORD[32+rsp],xmm9
3505	add	edx,edi
3506	xor	esi,ebx
3507	shrd	eax,eax,7
3508	add	edx,ebp
3509	vpslld	xmm3,xmm3,2
3510	add	ecx,DWORD[56+rsp]
3511	xor	esi,eax
3512	mov	edi,edx
3513	shld	edx,edx,5
3514	add	ecx,esi
3515	xor	edi,eax
3516	shrd	ebp,ebp,7
3517	add	ecx,edx
3518	vpor	xmm3,xmm3,xmm8
3519	add	ebx,DWORD[60+rsp]
3520	xor	edi,ebp
3521	mov	esi,ecx
3522	shld	ecx,ecx,5
3523	add	ebx,edi
3524	xor	esi,ebp
3525	shrd	edx,edx,7
3526	add	ebx,ecx
3527	add	eax,DWORD[rsp]
3528	vpaddd	xmm9,xmm11,xmm3
3529	xor	esi,edx
3530	mov	edi,ebx
3531	shld	ebx,ebx,5
3532	add	eax,esi
3533	vmovdqa	XMMWORD[48+rsp],xmm9
3534	xor	edi,edx
3535	shrd	ecx,ecx,7
3536	add	eax,ebx
3537	add	ebp,DWORD[4+rsp]
3538	xor	edi,ecx
3539	mov	esi,eax
3540	shld	eax,eax,5
3541	add	ebp,edi
3542	xor	esi,ecx
3543	shrd	ebx,ebx,7
3544	add	ebp,eax
3545	add	edx,DWORD[8+rsp]
3546	xor	esi,ebx
3547	mov	edi,ebp
3548	shld	ebp,ebp,5
3549	add	edx,esi
3550	xor	edi,ebx
3551	shrd	eax,eax,7
3552	add	edx,ebp
3553	add	ecx,DWORD[12+rsp]
3554	xor	edi,eax
3555	mov	esi,edx
3556	shld	edx,edx,5
3557	add	ecx,edi
3558	xor	esi,eax
3559	shrd	ebp,ebp,7
3560	add	ecx,edx
3561	cmp	r9,r10
3562	je	NEAR $L$done_avx
3563	vmovdqa	xmm6,XMMWORD[64+r14]
3564	vmovdqa	xmm11,XMMWORD[((-64))+r14]
3565	vmovdqu	xmm0,XMMWORD[r9]
3566	vmovdqu	xmm1,XMMWORD[16+r9]
3567	vmovdqu	xmm2,XMMWORD[32+r9]
3568	vmovdqu	xmm3,XMMWORD[48+r9]
3569	vpshufb	xmm0,xmm0,xmm6
3570	add	r9,64
3571	add	ebx,DWORD[16+rsp]
3572	xor	esi,ebp
3573	vpshufb	xmm1,xmm1,xmm6
3574	mov	edi,ecx
3575	shld	ecx,ecx,5
3576	vpaddd	xmm4,xmm0,xmm11
3577	add	ebx,esi
3578	xor	edi,ebp
3579	shrd	edx,edx,7
3580	add	ebx,ecx
3581	vmovdqa	XMMWORD[rsp],xmm4
3582	add	eax,DWORD[20+rsp]
3583	xor	edi,edx
3584	mov	esi,ebx
3585	shld	ebx,ebx,5
3586	add	eax,edi
3587	xor	esi,edx
3588	shrd	ecx,ecx,7
3589	add	eax,ebx
3590	add	ebp,DWORD[24+rsp]
3591	xor	esi,ecx
3592	mov	edi,eax
3593	shld	eax,eax,5
3594	add	ebp,esi
3595	xor	edi,ecx
3596	shrd	ebx,ebx,7
3597	add	ebp,eax
3598	add	edx,DWORD[28+rsp]
3599	xor	edi,ebx
3600	mov	esi,ebp
3601	shld	ebp,ebp,5
3602	add	edx,edi
3603	xor	esi,ebx
3604	shrd	eax,eax,7
3605	add	edx,ebp
3606	add	ecx,DWORD[32+rsp]
3607	xor	esi,eax
3608	vpshufb	xmm2,xmm2,xmm6
3609	mov	edi,edx
3610	shld	edx,edx,5
3611	vpaddd	xmm5,xmm1,xmm11
3612	add	ecx,esi
3613	xor	edi,eax
3614	shrd	ebp,ebp,7
3615	add	ecx,edx
3616	vmovdqa	XMMWORD[16+rsp],xmm5
3617	add	ebx,DWORD[36+rsp]
3618	xor	edi,ebp
3619	mov	esi,ecx
3620	shld	ecx,ecx,5
3621	add	ebx,edi
3622	xor	esi,ebp
3623	shrd	edx,edx,7
3624	add	ebx,ecx
3625	add	eax,DWORD[40+rsp]
3626	xor	esi,edx
3627	mov	edi,ebx
3628	shld	ebx,ebx,5
3629	add	eax,esi
3630	xor	edi,edx
3631	shrd	ecx,ecx,7
3632	add	eax,ebx
3633	add	ebp,DWORD[44+rsp]
3634	xor	edi,ecx
3635	mov	esi,eax
3636	shld	eax,eax,5
3637	add	ebp,edi
3638	xor	esi,ecx
3639	shrd	ebx,ebx,7
3640	add	ebp,eax
3641	add	edx,DWORD[48+rsp]
3642	xor	esi,ebx
3643	vpshufb	xmm3,xmm3,xmm6
3644	mov	edi,ebp
3645	shld	ebp,ebp,5
3646	vpaddd	xmm6,xmm2,xmm11
3647	add	edx,esi
3648	xor	edi,ebx
3649	shrd	eax,eax,7
3650	add	edx,ebp
3651	vmovdqa	XMMWORD[32+rsp],xmm6
3652	add	ecx,DWORD[52+rsp]
3653	xor	edi,eax
3654	mov	esi,edx
3655	shld	edx,edx,5
3656	add	ecx,edi
3657	xor	esi,eax
3658	shrd	ebp,ebp,7
3659	add	ecx,edx
3660	add	ebx,DWORD[56+rsp]
3661	xor	esi,ebp
3662	mov	edi,ecx
3663	shld	ecx,ecx,5
3664	add	ebx,esi
3665	xor	edi,ebp
3666	shrd	edx,edx,7
3667	add	ebx,ecx
3668	add	eax,DWORD[60+rsp]
3669	xor	edi,edx
3670	mov	esi,ebx
3671	shld	ebx,ebx,5
3672	add	eax,edi
3673	shrd	ecx,ecx,7
3674	add	eax,ebx
3675	add	eax,DWORD[r8]
3676	add	esi,DWORD[4+r8]
3677	add	ecx,DWORD[8+r8]
3678	add	edx,DWORD[12+r8]
3679	mov	DWORD[r8],eax
3680	add	ebp,DWORD[16+r8]
3681	mov	DWORD[4+r8],esi
3682	mov	ebx,esi
3683	mov	DWORD[8+r8],ecx
3684	mov	edi,ecx
3685	mov	DWORD[12+r8],edx
3686	xor	edi,edx
3687	mov	DWORD[16+r8],ebp
3688	and	esi,edi
3689	jmp	NEAR $L$oop_avx
3690
3691ALIGN	16
3692$L$done_avx:
3693	add	ebx,DWORD[16+rsp]
3694	xor	esi,ebp
3695	mov	edi,ecx
3696	shld	ecx,ecx,5
3697	add	ebx,esi
3698	xor	edi,ebp
3699	shrd	edx,edx,7
3700	add	ebx,ecx
3701	add	eax,DWORD[20+rsp]
3702	xor	edi,edx
3703	mov	esi,ebx
3704	shld	ebx,ebx,5
3705	add	eax,edi
3706	xor	esi,edx
3707	shrd	ecx,ecx,7
3708	add	eax,ebx
3709	add	ebp,DWORD[24+rsp]
3710	xor	esi,ecx
3711	mov	edi,eax
3712	shld	eax,eax,5
3713	add	ebp,esi
3714	xor	edi,ecx
3715	shrd	ebx,ebx,7
3716	add	ebp,eax
3717	add	edx,DWORD[28+rsp]
3718	xor	edi,ebx
3719	mov	esi,ebp
3720	shld	ebp,ebp,5
3721	add	edx,edi
3722	xor	esi,ebx
3723	shrd	eax,eax,7
3724	add	edx,ebp
3725	add	ecx,DWORD[32+rsp]
3726	xor	esi,eax
3727	mov	edi,edx
3728	shld	edx,edx,5
3729	add	ecx,esi
3730	xor	edi,eax
3731	shrd	ebp,ebp,7
3732	add	ecx,edx
3733	add	ebx,DWORD[36+rsp]
3734	xor	edi,ebp
3735	mov	esi,ecx
3736	shld	ecx,ecx,5
3737	add	ebx,edi
3738	xor	esi,ebp
3739	shrd	edx,edx,7
3740	add	ebx,ecx
3741	add	eax,DWORD[40+rsp]
3742	xor	esi,edx
3743	mov	edi,ebx
3744	shld	ebx,ebx,5
3745	add	eax,esi
3746	xor	edi,edx
3747	shrd	ecx,ecx,7
3748	add	eax,ebx
3749	add	ebp,DWORD[44+rsp]
3750	xor	edi,ecx
3751	mov	esi,eax
3752	shld	eax,eax,5
3753	add	ebp,edi
3754	xor	esi,ecx
3755	shrd	ebx,ebx,7
3756	add	ebp,eax
3757	add	edx,DWORD[48+rsp]
3758	xor	esi,ebx
3759	mov	edi,ebp
3760	shld	ebp,ebp,5
3761	add	edx,esi
3762	xor	edi,ebx
3763	shrd	eax,eax,7
3764	add	edx,ebp
3765	add	ecx,DWORD[52+rsp]
3766	xor	edi,eax
3767	mov	esi,edx
3768	shld	edx,edx,5
3769	add	ecx,edi
3770	xor	esi,eax
3771	shrd	ebp,ebp,7
3772	add	ecx,edx
3773	add	ebx,DWORD[56+rsp]
3774	xor	esi,ebp
3775	mov	edi,ecx
3776	shld	ecx,ecx,5
3777	add	ebx,esi
3778	xor	edi,ebp
3779	shrd	edx,edx,7
3780	add	ebx,ecx
3781	add	eax,DWORD[60+rsp]
3782	xor	edi,edx
3783	mov	esi,ebx
3784	shld	ebx,ebx,5
3785	add	eax,edi
3786	shrd	ecx,ecx,7
3787	add	eax,ebx
3788	vzeroupper
3789
3790	add	eax,DWORD[r8]
3791	add	esi,DWORD[4+r8]
3792	add	ecx,DWORD[8+r8]
3793	mov	DWORD[r8],eax
3794	add	edx,DWORD[12+r8]
3795	mov	DWORD[4+r8],esi
3796	add	ebp,DWORD[16+r8]
3797	mov	DWORD[8+r8],ecx
3798	mov	DWORD[12+r8],edx
3799	mov	DWORD[16+r8],ebp
3800	movaps	xmm6,XMMWORD[((-40-96))+r11]
3801	movaps	xmm7,XMMWORD[((-40-80))+r11]
3802	movaps	xmm8,XMMWORD[((-40-64))+r11]
3803	movaps	xmm9,XMMWORD[((-40-48))+r11]
3804	movaps	xmm10,XMMWORD[((-40-32))+r11]
3805	movaps	xmm11,XMMWORD[((-40-16))+r11]
3806	mov	r14,QWORD[((-40))+r11]
3807
3808	mov	r13,QWORD[((-32))+r11]
3809
3810	mov	r12,QWORD[((-24))+r11]
3811
3812	mov	rbp,QWORD[((-16))+r11]
3813
3814	mov	rbx,QWORD[((-8))+r11]
3815
3816	lea	rsp,[r11]
3817
3818$L$epilogue_avx:
3819	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
3820	mov	rsi,QWORD[16+rsp]
3821	ret
3822
3823$L$SEH_end_sha1_block_data_order_avx:
3824global	sha1_block_data_order_avx2
3825
3826ALIGN	16
3827sha1_block_data_order_avx2:
3828	mov	QWORD[8+rsp],rdi	;WIN64 prologue
3829	mov	QWORD[16+rsp],rsi
3830	mov	rax,rsp
3831$L$SEH_begin_sha1_block_data_order_avx2:
3832	mov	rdi,rcx
3833	mov	rsi,rdx
3834	mov	rdx,r8
3835
3836
3837
3838_CET_ENDBR
3839	mov	r11,rsp
3840
3841	push	rbx
3842
3843	push	rbp
3844
3845	push	r12
3846
3847	push	r13
3848
3849	push	r14
3850
3851	vzeroupper
3852	lea	rsp,[((-96))+rsp]
3853	vmovaps	XMMWORD[(-40-96)+r11],xmm6
3854	vmovaps	XMMWORD[(-40-80)+r11],xmm7
3855	vmovaps	XMMWORD[(-40-64)+r11],xmm8
3856	vmovaps	XMMWORD[(-40-48)+r11],xmm9
3857	vmovaps	XMMWORD[(-40-32)+r11],xmm10
3858	vmovaps	XMMWORD[(-40-16)+r11],xmm11
3859$L$prologue_avx2:
3860	mov	r8,rdi
3861	mov	r9,rsi
3862	mov	r10,rdx
3863
3864	lea	rsp,[((-640))+rsp]
3865	shl	r10,6
3866	lea	r13,[64+r9]
3867	and	rsp,-128
3868	add	r10,r9
3869	lea	r14,[((K_XX_XX+64))]
3870
3871	mov	eax,DWORD[r8]
3872	cmp	r13,r10
3873	cmovae	r13,r9
3874	mov	ebp,DWORD[4+r8]
3875	mov	ecx,DWORD[8+r8]
3876	mov	edx,DWORD[12+r8]
3877	mov	esi,DWORD[16+r8]
3878	vmovdqu	ymm6,YMMWORD[64+r14]
3879
3880	vmovdqu	xmm0,XMMWORD[r9]
3881	vmovdqu	xmm1,XMMWORD[16+r9]
3882	vmovdqu	xmm2,XMMWORD[32+r9]
3883	vmovdqu	xmm3,XMMWORD[48+r9]
3884	lea	r9,[64+r9]
3885	vinserti128	ymm0,ymm0,XMMWORD[r13],1
3886	vinserti128	ymm1,ymm1,XMMWORD[16+r13],1
3887	vpshufb	ymm0,ymm0,ymm6
3888	vinserti128	ymm2,ymm2,XMMWORD[32+r13],1
3889	vpshufb	ymm1,ymm1,ymm6
3890	vinserti128	ymm3,ymm3,XMMWORD[48+r13],1
3891	vpshufb	ymm2,ymm2,ymm6
3892	vmovdqu	ymm11,YMMWORD[((-64))+r14]
3893	vpshufb	ymm3,ymm3,ymm6
3894
3895	vpaddd	ymm4,ymm0,ymm11
3896	vpaddd	ymm5,ymm1,ymm11
3897	vmovdqu	YMMWORD[rsp],ymm4
3898	vpaddd	ymm6,ymm2,ymm11
3899	vmovdqu	YMMWORD[32+rsp],ymm5
3900	vpaddd	ymm7,ymm3,ymm11
3901	vmovdqu	YMMWORD[64+rsp],ymm6
3902	vmovdqu	YMMWORD[96+rsp],ymm7
3903	vpalignr	ymm4,ymm1,ymm0,8
3904	vpsrldq	ymm8,ymm3,4
3905	vpxor	ymm4,ymm4,ymm0
3906	vpxor	ymm8,ymm8,ymm2
3907	vpxor	ymm4,ymm4,ymm8
3908	vpsrld	ymm8,ymm4,31
3909	vpslldq	ymm10,ymm4,12
3910	vpaddd	ymm4,ymm4,ymm4
3911	vpsrld	ymm9,ymm10,30
3912	vpor	ymm4,ymm4,ymm8
3913	vpslld	ymm10,ymm10,2
3914	vpxor	ymm4,ymm4,ymm9
3915	vpxor	ymm4,ymm4,ymm10
3916	vpaddd	ymm9,ymm4,ymm11
3917	vmovdqu	YMMWORD[128+rsp],ymm9
3918	vpalignr	ymm5,ymm2,ymm1,8
3919	vpsrldq	ymm8,ymm4,4
3920	vpxor	ymm5,ymm5,ymm1
3921	vpxor	ymm8,ymm8,ymm3
3922	vpxor	ymm5,ymm5,ymm8
3923	vpsrld	ymm8,ymm5,31
3924	vmovdqu	ymm11,YMMWORD[((-32))+r14]
3925	vpslldq	ymm10,ymm5,12
3926	vpaddd	ymm5,ymm5,ymm5
3927	vpsrld	ymm9,ymm10,30
3928	vpor	ymm5,ymm5,ymm8
3929	vpslld	ymm10,ymm10,2
3930	vpxor	ymm5,ymm5,ymm9
3931	vpxor	ymm5,ymm5,ymm10
3932	vpaddd	ymm9,ymm5,ymm11
3933	vmovdqu	YMMWORD[160+rsp],ymm9
3934	vpalignr	ymm6,ymm3,ymm2,8
3935	vpsrldq	ymm8,ymm5,4
3936	vpxor	ymm6,ymm6,ymm2
3937	vpxor	ymm8,ymm8,ymm4
3938	vpxor	ymm6,ymm6,ymm8
3939	vpsrld	ymm8,ymm6,31
3940	vpslldq	ymm10,ymm6,12
3941	vpaddd	ymm6,ymm6,ymm6
3942	vpsrld	ymm9,ymm10,30
3943	vpor	ymm6,ymm6,ymm8
3944	vpslld	ymm10,ymm10,2
3945	vpxor	ymm6,ymm6,ymm9
3946	vpxor	ymm6,ymm6,ymm10
3947	vpaddd	ymm9,ymm6,ymm11
3948	vmovdqu	YMMWORD[192+rsp],ymm9
3949	vpalignr	ymm7,ymm4,ymm3,8
3950	vpsrldq	ymm8,ymm6,4
3951	vpxor	ymm7,ymm7,ymm3
3952	vpxor	ymm8,ymm8,ymm5
3953	vpxor	ymm7,ymm7,ymm8
3954	vpsrld	ymm8,ymm7,31
3955	vpslldq	ymm10,ymm7,12
3956	vpaddd	ymm7,ymm7,ymm7
3957	vpsrld	ymm9,ymm10,30
3958	vpor	ymm7,ymm7,ymm8
3959	vpslld	ymm10,ymm10,2
3960	vpxor	ymm7,ymm7,ymm9
3961	vpxor	ymm7,ymm7,ymm10
3962	vpaddd	ymm9,ymm7,ymm11
3963	vmovdqu	YMMWORD[224+rsp],ymm9
3964	lea	r13,[128+rsp]
3965	jmp	NEAR $L$oop_avx2
3966ALIGN	32
3967$L$oop_avx2:
3968	rorx	ebx,ebp,2
3969	andn	edi,ebp,edx
3970	and	ebp,ecx
3971	xor	ebp,edi
3972	jmp	NEAR $L$align32_1
3973ALIGN	32
3974$L$align32_1:
3975	vpalignr	ymm8,ymm7,ymm6,8
3976	vpxor	ymm0,ymm0,ymm4
3977	add	esi,DWORD[((-128))+r13]
3978	andn	edi,eax,ecx
3979	vpxor	ymm0,ymm0,ymm1
3980	add	esi,ebp
3981	rorx	r12d,eax,27
3982	rorx	ebp,eax,2
3983	vpxor	ymm0,ymm0,ymm8
3984	and	eax,ebx
3985	add	esi,r12d
3986	xor	eax,edi
3987	vpsrld	ymm8,ymm0,30
3988	vpslld	ymm0,ymm0,2
3989	add	edx,DWORD[((-124))+r13]
3990	andn	edi,esi,ebx
3991	add	edx,eax
3992	rorx	r12d,esi,27
3993	rorx	eax,esi,2
3994	and	esi,ebp
3995	vpor	ymm0,ymm0,ymm8
3996	add	edx,r12d
3997	xor	esi,edi
3998	add	ecx,DWORD[((-120))+r13]
3999	andn	edi,edx,ebp
4000	vpaddd	ymm9,ymm0,ymm11
4001	add	ecx,esi
4002	rorx	r12d,edx,27
4003	rorx	esi,edx,2
4004	and	edx,eax
4005	vmovdqu	YMMWORD[256+rsp],ymm9
4006	add	ecx,r12d
4007	xor	edx,edi
4008	add	ebx,DWORD[((-116))+r13]
4009	andn	edi,ecx,eax
4010	add	ebx,edx
4011	rorx	r12d,ecx,27
4012	rorx	edx,ecx,2
4013	and	ecx,esi
4014	add	ebx,r12d
4015	xor	ecx,edi
4016	add	ebp,DWORD[((-96))+r13]
4017	andn	edi,ebx,esi
4018	add	ebp,ecx
4019	rorx	r12d,ebx,27
4020	rorx	ecx,ebx,2
4021	and	ebx,edx
4022	add	ebp,r12d
4023	xor	ebx,edi
4024	vpalignr	ymm8,ymm0,ymm7,8
4025	vpxor	ymm1,ymm1,ymm5
4026	add	eax,DWORD[((-92))+r13]
4027	andn	edi,ebp,edx
4028	vpxor	ymm1,ymm1,ymm2
4029	add	eax,ebx
4030	rorx	r12d,ebp,27
4031	rorx	ebx,ebp,2
4032	vpxor	ymm1,ymm1,ymm8
4033	and	ebp,ecx
4034	add	eax,r12d
4035	xor	ebp,edi
4036	vpsrld	ymm8,ymm1,30
4037	vpslld	ymm1,ymm1,2
4038	add	esi,DWORD[((-88))+r13]
4039	andn	edi,eax,ecx
4040	add	esi,ebp
4041	rorx	r12d,eax,27
4042	rorx	ebp,eax,2
4043	and	eax,ebx
4044	vpor	ymm1,ymm1,ymm8
4045	add	esi,r12d
4046	xor	eax,edi
4047	add	edx,DWORD[((-84))+r13]
4048	andn	edi,esi,ebx
4049	vpaddd	ymm9,ymm1,ymm11
4050	add	edx,eax
4051	rorx	r12d,esi,27
4052	rorx	eax,esi,2
4053	and	esi,ebp
4054	vmovdqu	YMMWORD[288+rsp],ymm9
4055	add	edx,r12d
4056	xor	esi,edi
4057	add	ecx,DWORD[((-64))+r13]
4058	andn	edi,edx,ebp
4059	add	ecx,esi
4060	rorx	r12d,edx,27
4061	rorx	esi,edx,2
4062	and	edx,eax
4063	add	ecx,r12d
4064	xor	edx,edi
4065	add	ebx,DWORD[((-60))+r13]
4066	andn	edi,ecx,eax
4067	add	ebx,edx
4068	rorx	r12d,ecx,27
4069	rorx	edx,ecx,2
4070	and	ecx,esi
4071	add	ebx,r12d
4072	xor	ecx,edi
4073	vpalignr	ymm8,ymm1,ymm0,8
4074	vpxor	ymm2,ymm2,ymm6
4075	add	ebp,DWORD[((-56))+r13]
4076	andn	edi,ebx,esi
4077	vpxor	ymm2,ymm2,ymm3
4078	vmovdqu	ymm11,YMMWORD[r14]
4079	add	ebp,ecx
4080	rorx	r12d,ebx,27
4081	rorx	ecx,ebx,2
4082	vpxor	ymm2,ymm2,ymm8
4083	and	ebx,edx
4084	add	ebp,r12d
4085	xor	ebx,edi
4086	vpsrld	ymm8,ymm2,30
4087	vpslld	ymm2,ymm2,2
4088	add	eax,DWORD[((-52))+r13]
4089	andn	edi,ebp,edx
4090	add	eax,ebx
4091	rorx	r12d,ebp,27
4092	rorx	ebx,ebp,2
4093	and	ebp,ecx
4094	vpor	ymm2,ymm2,ymm8
4095	add	eax,r12d
4096	xor	ebp,edi
4097	add	esi,DWORD[((-32))+r13]
4098	andn	edi,eax,ecx
4099	vpaddd	ymm9,ymm2,ymm11
4100	add	esi,ebp
4101	rorx	r12d,eax,27
4102	rorx	ebp,eax,2
4103	and	eax,ebx
4104	vmovdqu	YMMWORD[320+rsp],ymm9
4105	add	esi,r12d
4106	xor	eax,edi
4107	add	edx,DWORD[((-28))+r13]
4108	andn	edi,esi,ebx
4109	add	edx,eax
4110	rorx	r12d,esi,27
4111	rorx	eax,esi,2
4112	and	esi,ebp
4113	add	edx,r12d
4114	xor	esi,edi
4115	add	ecx,DWORD[((-24))+r13]
4116	andn	edi,edx,ebp
4117	add	ecx,esi
4118	rorx	r12d,edx,27
4119	rorx	esi,edx,2
4120	and	edx,eax
4121	add	ecx,r12d
4122	xor	edx,edi
4123	vpalignr	ymm8,ymm2,ymm1,8
4124	vpxor	ymm3,ymm3,ymm7
4125	add	ebx,DWORD[((-20))+r13]
4126	andn	edi,ecx,eax
4127	vpxor	ymm3,ymm3,ymm4
4128	add	ebx,edx
4129	rorx	r12d,ecx,27
4130	rorx	edx,ecx,2
4131	vpxor	ymm3,ymm3,ymm8
4132	and	ecx,esi
4133	add	ebx,r12d
4134	xor	ecx,edi
4135	vpsrld	ymm8,ymm3,30
4136	vpslld	ymm3,ymm3,2
4137	add	ebp,DWORD[r13]
4138	andn	edi,ebx,esi
4139	add	ebp,ecx
4140	rorx	r12d,ebx,27
4141	rorx	ecx,ebx,2
4142	and	ebx,edx
4143	vpor	ymm3,ymm3,ymm8
4144	add	ebp,r12d
4145	xor	ebx,edi
4146	add	eax,DWORD[4+r13]
4147	andn	edi,ebp,edx
4148	vpaddd	ymm9,ymm3,ymm11
4149	add	eax,ebx
4150	rorx	r12d,ebp,27
4151	rorx	ebx,ebp,2
4152	and	ebp,ecx
4153	vmovdqu	YMMWORD[352+rsp],ymm9
4154	add	eax,r12d
4155	xor	ebp,edi
4156	add	esi,DWORD[8+r13]
4157	andn	edi,eax,ecx
4158	add	esi,ebp
4159	rorx	r12d,eax,27
4160	rorx	ebp,eax,2
4161	and	eax,ebx
4162	add	esi,r12d
4163	xor	eax,edi
4164	add	edx,DWORD[12+r13]
4165	lea	edx,[rax*1+rdx]
4166	rorx	r12d,esi,27
4167	rorx	eax,esi,2
4168	xor	esi,ebp
4169	add	edx,r12d
4170	xor	esi,ebx
4171	vpalignr	ymm8,ymm3,ymm2,8
4172	vpxor	ymm4,ymm4,ymm0
4173	add	ecx,DWORD[32+r13]
4174	lea	ecx,[rsi*1+rcx]
4175	vpxor	ymm4,ymm4,ymm5
4176	rorx	r12d,edx,27
4177	rorx	esi,edx,2
4178	xor	edx,eax
4179	vpxor	ymm4,ymm4,ymm8
4180	add	ecx,r12d
4181	xor	edx,ebp
4182	add	ebx,DWORD[36+r13]
4183	vpsrld	ymm8,ymm4,30
4184	vpslld	ymm4,ymm4,2
4185	lea	ebx,[rdx*1+rbx]
4186	rorx	r12d,ecx,27
4187	rorx	edx,ecx,2
4188	xor	ecx,esi
4189	add	ebx,r12d
4190	xor	ecx,eax
4191	vpor	ymm4,ymm4,ymm8
4192	add	ebp,DWORD[40+r13]
4193	lea	ebp,[rbp*1+rcx]
4194	rorx	r12d,ebx,27
4195	rorx	ecx,ebx,2
4196	vpaddd	ymm9,ymm4,ymm11
4197	xor	ebx,edx
4198	add	ebp,r12d
4199	xor	ebx,esi
4200	add	eax,DWORD[44+r13]
4201	vmovdqu	YMMWORD[384+rsp],ymm9
4202	lea	eax,[rbx*1+rax]
4203	rorx	r12d,ebp,27
4204	rorx	ebx,ebp,2
4205	xor	ebp,ecx
4206	add	eax,r12d
4207	xor	ebp,edx
4208	add	esi,DWORD[64+r13]
4209	lea	esi,[rbp*1+rsi]
4210	rorx	r12d,eax,27
4211	rorx	ebp,eax,2
4212	xor	eax,ebx
4213	add	esi,r12d
4214	xor	eax,ecx
4215	vpalignr	ymm8,ymm4,ymm3,8
4216	vpxor	ymm5,ymm5,ymm1
4217	add	edx,DWORD[68+r13]
4218	lea	edx,[rax*1+rdx]
4219	vpxor	ymm5,ymm5,ymm6
4220	rorx	r12d,esi,27
4221	rorx	eax,esi,2
4222	xor	esi,ebp
4223	vpxor	ymm5,ymm5,ymm8
4224	add	edx,r12d
4225	xor	esi,ebx
4226	add	ecx,DWORD[72+r13]
4227	vpsrld	ymm8,ymm5,30
4228	vpslld	ymm5,ymm5,2
4229	lea	ecx,[rsi*1+rcx]
4230	rorx	r12d,edx,27
4231	rorx	esi,edx,2
4232	xor	edx,eax
4233	add	ecx,r12d
4234	xor	edx,ebp
4235	vpor	ymm5,ymm5,ymm8
4236	add	ebx,DWORD[76+r13]
4237	lea	ebx,[rdx*1+rbx]
4238	rorx	r12d,ecx,27
4239	rorx	edx,ecx,2
4240	vpaddd	ymm9,ymm5,ymm11
4241	xor	ecx,esi
4242	add	ebx,r12d
4243	xor	ecx,eax
4244	add	ebp,DWORD[96+r13]
4245	vmovdqu	YMMWORD[416+rsp],ymm9
4246	lea	ebp,[rbp*1+rcx]
4247	rorx	r12d,ebx,27
4248	rorx	ecx,ebx,2
4249	xor	ebx,edx
4250	add	ebp,r12d
4251	xor	ebx,esi
4252	add	eax,DWORD[100+r13]
4253	lea	eax,[rbx*1+rax]
4254	rorx	r12d,ebp,27
4255	rorx	ebx,ebp,2
4256	xor	ebp,ecx
4257	add	eax,r12d
4258	xor	ebp,edx
4259	vpalignr	ymm8,ymm5,ymm4,8
4260	vpxor	ymm6,ymm6,ymm2
4261	add	esi,DWORD[104+r13]
4262	lea	esi,[rbp*1+rsi]
4263	vpxor	ymm6,ymm6,ymm7
4264	rorx	r12d,eax,27
4265	rorx	ebp,eax,2
4266	xor	eax,ebx
4267	vpxor	ymm6,ymm6,ymm8
4268	add	esi,r12d
4269	xor	eax,ecx
4270	add	edx,DWORD[108+r13]
4271	lea	r13,[256+r13]
4272	vpsrld	ymm8,ymm6,30
4273	vpslld	ymm6,ymm6,2
4274	lea	edx,[rax*1+rdx]
4275	rorx	r12d,esi,27
4276	rorx	eax,esi,2
4277	xor	esi,ebp
4278	add	edx,r12d
4279	xor	esi,ebx
4280	vpor	ymm6,ymm6,ymm8
4281	add	ecx,DWORD[((-128))+r13]
4282	lea	ecx,[rsi*1+rcx]
4283	rorx	r12d,edx,27
4284	rorx	esi,edx,2
4285	vpaddd	ymm9,ymm6,ymm11
4286	xor	edx,eax
4287	add	ecx,r12d
4288	xor	edx,ebp
4289	add	ebx,DWORD[((-124))+r13]
4290	vmovdqu	YMMWORD[448+rsp],ymm9
4291	lea	ebx,[rdx*1+rbx]
4292	rorx	r12d,ecx,27
4293	rorx	edx,ecx,2
4294	xor	ecx,esi
4295	add	ebx,r12d
4296	xor	ecx,eax
4297	add	ebp,DWORD[((-120))+r13]
4298	lea	ebp,[rbp*1+rcx]
4299	rorx	r12d,ebx,27
4300	rorx	ecx,ebx,2
4301	xor	ebx,edx
4302	add	ebp,r12d
4303	xor	ebx,esi
4304	vpalignr	ymm8,ymm6,ymm5,8
4305	vpxor	ymm7,ymm7,ymm3
4306	add	eax,DWORD[((-116))+r13]
4307	lea	eax,[rbx*1+rax]
4308	vpxor	ymm7,ymm7,ymm0
4309	vmovdqu	ymm11,YMMWORD[32+r14]
4310	rorx	r12d,ebp,27
4311	rorx	ebx,ebp,2
4312	xor	ebp,ecx
4313	vpxor	ymm7,ymm7,ymm8
4314	add	eax,r12d
4315	xor	ebp,edx
4316	add	esi,DWORD[((-96))+r13]
4317	vpsrld	ymm8,ymm7,30
4318	vpslld	ymm7,ymm7,2
4319	lea	esi,[rbp*1+rsi]
4320	rorx	r12d,eax,27
4321	rorx	ebp,eax,2
4322	xor	eax,ebx
4323	add	esi,r12d
4324	xor	eax,ecx
4325	vpor	ymm7,ymm7,ymm8
4326	add	edx,DWORD[((-92))+r13]
4327	lea	edx,[rax*1+rdx]
4328	rorx	r12d,esi,27
4329	rorx	eax,esi,2
4330	vpaddd	ymm9,ymm7,ymm11
4331	xor	esi,ebp
4332	add	edx,r12d
4333	xor	esi,ebx
4334	add	ecx,DWORD[((-88))+r13]
4335	vmovdqu	YMMWORD[480+rsp],ymm9
4336	lea	ecx,[rsi*1+rcx]
4337	rorx	r12d,edx,27
4338	rorx	esi,edx,2
4339	xor	edx,eax
4340	add	ecx,r12d
4341	xor	edx,ebp
4342	add	ebx,DWORD[((-84))+r13]
4343	mov	edi,esi
4344	xor	edi,eax
4345	lea	ebx,[rdx*1+rbx]
4346	rorx	r12d,ecx,27
4347	rorx	edx,ecx,2
4348	xor	ecx,esi
4349	add	ebx,r12d
4350	and	ecx,edi
4351	jmp	NEAR $L$align32_2
4352ALIGN	32
4353$L$align32_2:
4354	vpalignr	ymm8,ymm7,ymm6,8
4355	vpxor	ymm0,ymm0,ymm4
4356	add	ebp,DWORD[((-64))+r13]
4357	xor	ecx,esi
4358	vpxor	ymm0,ymm0,ymm1
4359	mov	edi,edx
4360	xor	edi,esi
4361	lea	ebp,[rbp*1+rcx]
4362	vpxor	ymm0,ymm0,ymm8
4363	rorx	r12d,ebx,27
4364	rorx	ecx,ebx,2
4365	xor	ebx,edx
4366	vpsrld	ymm8,ymm0,30
4367	vpslld	ymm0,ymm0,2
4368	add	ebp,r12d
4369	and	ebx,edi
4370	add	eax,DWORD[((-60))+r13]
4371	xor	ebx,edx
4372	mov	edi,ecx
4373	xor	edi,edx
4374	vpor	ymm0,ymm0,ymm8
4375	lea	eax,[rbx*1+rax]
4376	rorx	r12d,ebp,27
4377	rorx	ebx,ebp,2
4378	xor	ebp,ecx
4379	vpaddd	ymm9,ymm0,ymm11
4380	add	eax,r12d
4381	and	ebp,edi
4382	add	esi,DWORD[((-56))+r13]
4383	xor	ebp,ecx
4384	vmovdqu	YMMWORD[512+rsp],ymm9
4385	mov	edi,ebx
4386	xor	edi,ecx
4387	lea	esi,[rbp*1+rsi]
4388	rorx	r12d,eax,27
4389	rorx	ebp,eax,2
4390	xor	eax,ebx
4391	add	esi,r12d
4392	and	eax,edi
4393	add	edx,DWORD[((-52))+r13]
4394	xor	eax,ebx
4395	mov	edi,ebp
4396	xor	edi,ebx
4397	lea	edx,[rax*1+rdx]
4398	rorx	r12d,esi,27
4399	rorx	eax,esi,2
4400	xor	esi,ebp
4401	add	edx,r12d
4402	and	esi,edi
4403	add	ecx,DWORD[((-32))+r13]
4404	xor	esi,ebp
4405	mov	edi,eax
4406	xor	edi,ebp
4407	lea	ecx,[rsi*1+rcx]
4408	rorx	r12d,edx,27
4409	rorx	esi,edx,2
4410	xor	edx,eax
4411	add	ecx,r12d
4412	and	edx,edi
4413	vpalignr	ymm8,ymm0,ymm7,8
4414	vpxor	ymm1,ymm1,ymm5
4415	add	ebx,DWORD[((-28))+r13]
4416	xor	edx,eax
4417	vpxor	ymm1,ymm1,ymm2
4418	mov	edi,esi
4419	xor	edi,eax
4420	lea	ebx,[rdx*1+rbx]
4421	vpxor	ymm1,ymm1,ymm8
4422	rorx	r12d,ecx,27
4423	rorx	edx,ecx,2
4424	xor	ecx,esi
4425	vpsrld	ymm8,ymm1,30
4426	vpslld	ymm1,ymm1,2
4427	add	ebx,r12d
4428	and	ecx,edi
4429	add	ebp,DWORD[((-24))+r13]
4430	xor	ecx,esi
4431	mov	edi,edx
4432	xor	edi,esi
4433	vpor	ymm1,ymm1,ymm8
4434	lea	ebp,[rbp*1+rcx]
4435	rorx	r12d,ebx,27
4436	rorx	ecx,ebx,2
4437	xor	ebx,edx
4438	vpaddd	ymm9,ymm1,ymm11
4439	add	ebp,r12d
4440	and	ebx,edi
4441	add	eax,DWORD[((-20))+r13]
4442	xor	ebx,edx
4443	vmovdqu	YMMWORD[544+rsp],ymm9
4444	mov	edi,ecx
4445	xor	edi,edx
4446	lea	eax,[rbx*1+rax]
4447	rorx	r12d,ebp,27
4448	rorx	ebx,ebp,2
4449	xor	ebp,ecx
4450	add	eax,r12d
4451	and	ebp,edi
4452	add	esi,DWORD[r13]
4453	xor	ebp,ecx
4454	mov	edi,ebx
4455	xor	edi,ecx
4456	lea	esi,[rbp*1+rsi]
4457	rorx	r12d,eax,27
4458	rorx	ebp,eax,2
4459	xor	eax,ebx
4460	add	esi,r12d
4461	and	eax,edi
4462	add	edx,DWORD[4+r13]
4463	xor	eax,ebx
4464	mov	edi,ebp
4465	xor	edi,ebx
4466	lea	edx,[rax*1+rdx]
4467	rorx	r12d,esi,27
4468	rorx	eax,esi,2
4469	xor	esi,ebp
4470	add	edx,r12d
4471	and	esi,edi
4472	vpalignr	ymm8,ymm1,ymm0,8
4473	vpxor	ymm2,ymm2,ymm6
4474	add	ecx,DWORD[8+r13]
4475	xor	esi,ebp
4476	vpxor	ymm2,ymm2,ymm3
4477	mov	edi,eax
4478	xor	edi,ebp
4479	lea	ecx,[rsi*1+rcx]
4480	vpxor	ymm2,ymm2,ymm8
4481	rorx	r12d,edx,27
4482	rorx	esi,edx,2
4483	xor	edx,eax
4484	vpsrld	ymm8,ymm2,30
4485	vpslld	ymm2,ymm2,2
4486	add	ecx,r12d
4487	and	edx,edi
4488	add	ebx,DWORD[12+r13]
4489	xor	edx,eax
4490	mov	edi,esi
4491	xor	edi,eax
4492	vpor	ymm2,ymm2,ymm8
4493	lea	ebx,[rdx*1+rbx]
4494	rorx	r12d,ecx,27
4495	rorx	edx,ecx,2
4496	xor	ecx,esi
4497	vpaddd	ymm9,ymm2,ymm11
4498	add	ebx,r12d
4499	and	ecx,edi
4500	add	ebp,DWORD[32+r13]
4501	xor	ecx,esi
4502	vmovdqu	YMMWORD[576+rsp],ymm9
4503	mov	edi,edx
4504	xor	edi,esi
4505	lea	ebp,[rbp*1+rcx]
4506	rorx	r12d,ebx,27
4507	rorx	ecx,ebx,2
4508	xor	ebx,edx
4509	add	ebp,r12d
4510	and	ebx,edi
4511	add	eax,DWORD[36+r13]
4512	xor	ebx,edx
4513	mov	edi,ecx
4514	xor	edi,edx
4515	lea	eax,[rbx*1+rax]
4516	rorx	r12d,ebp,27
4517	rorx	ebx,ebp,2
4518	xor	ebp,ecx
4519	add	eax,r12d
4520	and	ebp,edi
4521	add	esi,DWORD[40+r13]
4522	xor	ebp,ecx
4523	mov	edi,ebx
4524	xor	edi,ecx
4525	lea	esi,[rbp*1+rsi]
4526	rorx	r12d,eax,27
4527	rorx	ebp,eax,2
4528	xor	eax,ebx
4529	add	esi,r12d
4530	and	eax,edi
4531	vpalignr	ymm8,ymm2,ymm1,8
4532	vpxor	ymm3,ymm3,ymm7
4533	add	edx,DWORD[44+r13]
4534	xor	eax,ebx
4535	vpxor	ymm3,ymm3,ymm4
4536	mov	edi,ebp
4537	xor	edi,ebx
4538	lea	edx,[rax*1+rdx]
4539	vpxor	ymm3,ymm3,ymm8
4540	rorx	r12d,esi,27
4541	rorx	eax,esi,2
4542	xor	esi,ebp
4543	vpsrld	ymm8,ymm3,30
4544	vpslld	ymm3,ymm3,2
4545	add	edx,r12d
4546	and	esi,edi
4547	add	ecx,DWORD[64+r13]
4548	xor	esi,ebp
4549	mov	edi,eax
4550	xor	edi,ebp
4551	vpor	ymm3,ymm3,ymm8
4552	lea	ecx,[rsi*1+rcx]
4553	rorx	r12d,edx,27
4554	rorx	esi,edx,2
4555	xor	edx,eax
4556	vpaddd	ymm9,ymm3,ymm11
4557	add	ecx,r12d
4558	and	edx,edi
4559	add	ebx,DWORD[68+r13]
4560	xor	edx,eax
4561	vmovdqu	YMMWORD[608+rsp],ymm9
4562	mov	edi,esi
4563	xor	edi,eax
4564	lea	ebx,[rdx*1+rbx]
4565	rorx	r12d,ecx,27
4566	rorx	edx,ecx,2
4567	xor	ecx,esi
4568	add	ebx,r12d
4569	and	ecx,edi
4570	add	ebp,DWORD[72+r13]
4571	xor	ecx,esi
4572	mov	edi,edx
4573	xor	edi,esi
4574	lea	ebp,[rbp*1+rcx]
4575	rorx	r12d,ebx,27
4576	rorx	ecx,ebx,2
4577	xor	ebx,edx
4578	add	ebp,r12d
4579	and	ebx,edi
4580	add	eax,DWORD[76+r13]
4581	xor	ebx,edx
4582	lea	eax,[rbx*1+rax]
4583	rorx	r12d,ebp,27
4584	rorx	ebx,ebp,2
4585	xor	ebp,ecx
4586	add	eax,r12d
4587	xor	ebp,edx
4588	add	esi,DWORD[96+r13]
4589	lea	esi,[rbp*1+rsi]
4590	rorx	r12d,eax,27
4591	rorx	ebp,eax,2
4592	xor	eax,ebx
4593	add	esi,r12d
4594	xor	eax,ecx
4595	add	edx,DWORD[100+r13]
4596	lea	edx,[rax*1+rdx]
4597	rorx	r12d,esi,27
4598	rorx	eax,esi,2
4599	xor	esi,ebp
4600	add	edx,r12d
4601	xor	esi,ebx
4602	add	ecx,DWORD[104+r13]
4603	lea	ecx,[rsi*1+rcx]
4604	rorx	r12d,edx,27
4605	rorx	esi,edx,2
4606	xor	edx,eax
4607	add	ecx,r12d
4608	xor	edx,ebp
4609	add	ebx,DWORD[108+r13]
4610	lea	r13,[256+r13]
4611	lea	ebx,[rdx*1+rbx]
4612	rorx	r12d,ecx,27
4613	rorx	edx,ecx,2
4614	xor	ecx,esi
4615	add	ebx,r12d
4616	xor	ecx,eax
4617	add	ebp,DWORD[((-128))+r13]
4618	lea	ebp,[rbp*1+rcx]
4619	rorx	r12d,ebx,27
4620	rorx	ecx,ebx,2
4621	xor	ebx,edx
4622	add	ebp,r12d
4623	xor	ebx,esi
4624	add	eax,DWORD[((-124))+r13]
4625	lea	eax,[rbx*1+rax]
4626	rorx	r12d,ebp,27
4627	rorx	ebx,ebp,2
4628	xor	ebp,ecx
4629	add	eax,r12d
4630	xor	ebp,edx
4631	add	esi,DWORD[((-120))+r13]
4632	lea	esi,[rbp*1+rsi]
4633	rorx	r12d,eax,27
4634	rorx	ebp,eax,2
4635	xor	eax,ebx
4636	add	esi,r12d
4637	xor	eax,ecx
4638	add	edx,DWORD[((-116))+r13]
4639	lea	edx,[rax*1+rdx]
4640	rorx	r12d,esi,27
4641	rorx	eax,esi,2
4642	xor	esi,ebp
4643	add	edx,r12d
4644	xor	esi,ebx
4645	add	ecx,DWORD[((-96))+r13]
4646	lea	ecx,[rsi*1+rcx]
4647	rorx	r12d,edx,27
4648	rorx	esi,edx,2
4649	xor	edx,eax
4650	add	ecx,r12d
4651	xor	edx,ebp
4652	add	ebx,DWORD[((-92))+r13]
4653	lea	ebx,[rdx*1+rbx]
4654	rorx	r12d,ecx,27
4655	rorx	edx,ecx,2
4656	xor	ecx,esi
4657	add	ebx,r12d
4658	xor	ecx,eax
4659	add	ebp,DWORD[((-88))+r13]
4660	lea	ebp,[rbp*1+rcx]
4661	rorx	r12d,ebx,27
4662	rorx	ecx,ebx,2
4663	xor	ebx,edx
4664	add	ebp,r12d
4665	xor	ebx,esi
4666	add	eax,DWORD[((-84))+r13]
4667	lea	eax,[rbx*1+rax]
4668	rorx	r12d,ebp,27
4669	rorx	ebx,ebp,2
4670	xor	ebp,ecx
4671	add	eax,r12d
4672	xor	ebp,edx
4673	add	esi,DWORD[((-64))+r13]
4674	lea	esi,[rbp*1+rsi]
4675	rorx	r12d,eax,27
4676	rorx	ebp,eax,2
4677	xor	eax,ebx
4678	add	esi,r12d
4679	xor	eax,ecx
4680	add	edx,DWORD[((-60))+r13]
4681	lea	edx,[rax*1+rdx]
4682	rorx	r12d,esi,27
4683	rorx	eax,esi,2
4684	xor	esi,ebp
4685	add	edx,r12d
4686	xor	esi,ebx
4687	add	ecx,DWORD[((-56))+r13]
4688	lea	ecx,[rsi*1+rcx]
4689	rorx	r12d,edx,27
4690	rorx	esi,edx,2
4691	xor	edx,eax
4692	add	ecx,r12d
4693	xor	edx,ebp
4694	add	ebx,DWORD[((-52))+r13]
4695	lea	ebx,[rdx*1+rbx]
4696	rorx	r12d,ecx,27
4697	rorx	edx,ecx,2
4698	xor	ecx,esi
4699	add	ebx,r12d
4700	xor	ecx,eax
4701	add	ebp,DWORD[((-32))+r13]
4702	lea	ebp,[rbp*1+rcx]
4703	rorx	r12d,ebx,27
4704	rorx	ecx,ebx,2
4705	xor	ebx,edx
4706	add	ebp,r12d
4707	xor	ebx,esi
4708	add	eax,DWORD[((-28))+r13]
4709	lea	eax,[rbx*1+rax]
4710	rorx	r12d,ebp,27
4711	rorx	ebx,ebp,2
4712	xor	ebp,ecx
4713	add	eax,r12d
4714	xor	ebp,edx
4715	add	esi,DWORD[((-24))+r13]
4716	lea	esi,[rbp*1+rsi]
4717	rorx	r12d,eax,27
4718	rorx	ebp,eax,2
4719	xor	eax,ebx
4720	add	esi,r12d
4721	xor	eax,ecx
4722	add	edx,DWORD[((-20))+r13]
4723	lea	edx,[rax*1+rdx]
4724	rorx	r12d,esi,27
4725	add	edx,r12d
4726	lea	r13,[128+r9]
4727	lea	rdi,[128+r9]
4728	cmp	r13,r10
4729	cmovae	r13,r9
4730
4731
4732	add	edx,DWORD[r8]
4733	add	esi,DWORD[4+r8]
4734	add	ebp,DWORD[8+r8]
4735	mov	DWORD[r8],edx
4736	add	ebx,DWORD[12+r8]
4737	mov	DWORD[4+r8],esi
4738	mov	eax,edx
4739	add	ecx,DWORD[16+r8]
4740	mov	r12d,ebp
4741	mov	DWORD[8+r8],ebp
4742	mov	edx,ebx
4743
4744	mov	DWORD[12+r8],ebx
4745	mov	ebp,esi
4746	mov	DWORD[16+r8],ecx
4747
4748	mov	esi,ecx
4749	mov	ecx,r12d
4750
4751
4752	cmp	r9,r10
4753	je	NEAR $L$done_avx2
4754	vmovdqu	ymm6,YMMWORD[64+r14]
4755	cmp	rdi,r10
4756	ja	NEAR $L$ast_avx2
4757
4758	vmovdqu	xmm0,XMMWORD[((-64))+rdi]
4759	vmovdqu	xmm1,XMMWORD[((-48))+rdi]
4760	vmovdqu	xmm2,XMMWORD[((-32))+rdi]
4761	vmovdqu	xmm3,XMMWORD[((-16))+rdi]
4762	vinserti128	ymm0,ymm0,XMMWORD[r13],1
4763	vinserti128	ymm1,ymm1,XMMWORD[16+r13],1
4764	vinserti128	ymm2,ymm2,XMMWORD[32+r13],1
4765	vinserti128	ymm3,ymm3,XMMWORD[48+r13],1
4766	jmp	NEAR $L$ast_avx2
4767
4768ALIGN	32
4769$L$ast_avx2:
4770	lea	r13,[((128+16))+rsp]
4771	rorx	ebx,ebp,2
4772	andn	edi,ebp,edx
4773	and	ebp,ecx
4774	xor	ebp,edi
4775	sub	r9,-128
4776	add	esi,DWORD[((-128))+r13]
4777	andn	edi,eax,ecx
4778	add	esi,ebp
4779	rorx	r12d,eax,27
4780	rorx	ebp,eax,2
4781	and	eax,ebx
4782	add	esi,r12d
4783	xor	eax,edi
4784	add	edx,DWORD[((-124))+r13]
4785	andn	edi,esi,ebx
4786	add	edx,eax
4787	rorx	r12d,esi,27
4788	rorx	eax,esi,2
4789	and	esi,ebp
4790	add	edx,r12d
4791	xor	esi,edi
4792	add	ecx,DWORD[((-120))+r13]
4793	andn	edi,edx,ebp
4794	add	ecx,esi
4795	rorx	r12d,edx,27
4796	rorx	esi,edx,2
4797	and	edx,eax
4798	add	ecx,r12d
4799	xor	edx,edi
4800	add	ebx,DWORD[((-116))+r13]
4801	andn	edi,ecx,eax
4802	add	ebx,edx
4803	rorx	r12d,ecx,27
4804	rorx	edx,ecx,2
4805	and	ecx,esi
4806	add	ebx,r12d
4807	xor	ecx,edi
4808	add	ebp,DWORD[((-96))+r13]
4809	andn	edi,ebx,esi
4810	add	ebp,ecx
4811	rorx	r12d,ebx,27
4812	rorx	ecx,ebx,2
4813	and	ebx,edx
4814	add	ebp,r12d
4815	xor	ebx,edi
4816	add	eax,DWORD[((-92))+r13]
4817	andn	edi,ebp,edx
4818	add	eax,ebx
4819	rorx	r12d,ebp,27
4820	rorx	ebx,ebp,2
4821	and	ebp,ecx
4822	add	eax,r12d
4823	xor	ebp,edi
4824	add	esi,DWORD[((-88))+r13]
4825	andn	edi,eax,ecx
4826	add	esi,ebp
4827	rorx	r12d,eax,27
4828	rorx	ebp,eax,2
4829	and	eax,ebx
4830	add	esi,r12d
4831	xor	eax,edi
4832	add	edx,DWORD[((-84))+r13]
4833	andn	edi,esi,ebx
4834	add	edx,eax
4835	rorx	r12d,esi,27
4836	rorx	eax,esi,2
4837	and	esi,ebp
4838	add	edx,r12d
4839	xor	esi,edi
4840	add	ecx,DWORD[((-64))+r13]
4841	andn	edi,edx,ebp
4842	add	ecx,esi
4843	rorx	r12d,edx,27
4844	rorx	esi,edx,2
4845	and	edx,eax
4846	add	ecx,r12d
4847	xor	edx,edi
4848	add	ebx,DWORD[((-60))+r13]
4849	andn	edi,ecx,eax
4850	add	ebx,edx
4851	rorx	r12d,ecx,27
4852	rorx	edx,ecx,2
4853	and	ecx,esi
4854	add	ebx,r12d
4855	xor	ecx,edi
4856	add	ebp,DWORD[((-56))+r13]
4857	andn	edi,ebx,esi
4858	add	ebp,ecx
4859	rorx	r12d,ebx,27
4860	rorx	ecx,ebx,2
4861	and	ebx,edx
4862	add	ebp,r12d
4863	xor	ebx,edi
4864	add	eax,DWORD[((-52))+r13]
4865	andn	edi,ebp,edx
4866	add	eax,ebx
4867	rorx	r12d,ebp,27
4868	rorx	ebx,ebp,2
4869	and	ebp,ecx
4870	add	eax,r12d
4871	xor	ebp,edi
4872	add	esi,DWORD[((-32))+r13]
4873	andn	edi,eax,ecx
4874	add	esi,ebp
4875	rorx	r12d,eax,27
4876	rorx	ebp,eax,2
4877	and	eax,ebx
4878	add	esi,r12d
4879	xor	eax,edi
4880	add	edx,DWORD[((-28))+r13]
4881	andn	edi,esi,ebx
4882	add	edx,eax
4883	rorx	r12d,esi,27
4884	rorx	eax,esi,2
4885	and	esi,ebp
4886	add	edx,r12d
4887	xor	esi,edi
4888	add	ecx,DWORD[((-24))+r13]
4889	andn	edi,edx,ebp
4890	add	ecx,esi
4891	rorx	r12d,edx,27
4892	rorx	esi,edx,2
4893	and	edx,eax
4894	add	ecx,r12d
4895	xor	edx,edi
4896	add	ebx,DWORD[((-20))+r13]
4897	andn	edi,ecx,eax
4898	add	ebx,edx
4899	rorx	r12d,ecx,27
4900	rorx	edx,ecx,2
4901	and	ecx,esi
4902	add	ebx,r12d
4903	xor	ecx,edi
4904	add	ebp,DWORD[r13]
4905	andn	edi,ebx,esi
4906	add	ebp,ecx
4907	rorx	r12d,ebx,27
4908	rorx	ecx,ebx,2
4909	and	ebx,edx
4910	add	ebp,r12d
4911	xor	ebx,edi
4912	add	eax,DWORD[4+r13]
4913	andn	edi,ebp,edx
4914	add	eax,ebx
4915	rorx	r12d,ebp,27
4916	rorx	ebx,ebp,2
4917	and	ebp,ecx
4918	add	eax,r12d
4919	xor	ebp,edi
4920	add	esi,DWORD[8+r13]
4921	andn	edi,eax,ecx
4922	add	esi,ebp
4923	rorx	r12d,eax,27
4924	rorx	ebp,eax,2
4925	and	eax,ebx
4926	add	esi,r12d
4927	xor	eax,edi
4928	add	edx,DWORD[12+r13]
4929	lea	edx,[rax*1+rdx]
4930	rorx	r12d,esi,27
4931	rorx	eax,esi,2
4932	xor	esi,ebp
4933	add	edx,r12d
4934	xor	esi,ebx
4935	add	ecx,DWORD[32+r13]
4936	lea	ecx,[rsi*1+rcx]
4937	rorx	r12d,edx,27
4938	rorx	esi,edx,2
4939	xor	edx,eax
4940	add	ecx,r12d
4941	xor	edx,ebp
4942	add	ebx,DWORD[36+r13]
4943	lea	ebx,[rdx*1+rbx]
4944	rorx	r12d,ecx,27
4945	rorx	edx,ecx,2
4946	xor	ecx,esi
4947	add	ebx,r12d
4948	xor	ecx,eax
4949	add	ebp,DWORD[40+r13]
4950	lea	ebp,[rbp*1+rcx]
4951	rorx	r12d,ebx,27
4952	rorx	ecx,ebx,2
4953	xor	ebx,edx
4954	add	ebp,r12d
4955	xor	ebx,esi
4956	add	eax,DWORD[44+r13]
4957	lea	eax,[rbx*1+rax]
4958	rorx	r12d,ebp,27
4959	rorx	ebx,ebp,2
4960	xor	ebp,ecx
4961	add	eax,r12d
4962	xor	ebp,edx
4963	add	esi,DWORD[64+r13]
4964	lea	esi,[rbp*1+rsi]
4965	rorx	r12d,eax,27
4966	rorx	ebp,eax,2
4967	xor	eax,ebx
4968	add	esi,r12d
4969	xor	eax,ecx
4970	vmovdqu	ymm11,YMMWORD[((-64))+r14]
4971	vpshufb	ymm0,ymm0,ymm6
4972	add	edx,DWORD[68+r13]
4973	lea	edx,[rax*1+rdx]
4974	rorx	r12d,esi,27
4975	rorx	eax,esi,2
4976	xor	esi,ebp
4977	add	edx,r12d
4978	xor	esi,ebx
4979	add	ecx,DWORD[72+r13]
4980	lea	ecx,[rsi*1+rcx]
4981	rorx	r12d,edx,27
4982	rorx	esi,edx,2
4983	xor	edx,eax
4984	add	ecx,r12d
4985	xor	edx,ebp
4986	add	ebx,DWORD[76+r13]
4987	lea	ebx,[rdx*1+rbx]
4988	rorx	r12d,ecx,27
4989	rorx	edx,ecx,2
4990	xor	ecx,esi
4991	add	ebx,r12d
4992	xor	ecx,eax
4993	add	ebp,DWORD[96+r13]
4994	lea	ebp,[rbp*1+rcx]
4995	rorx	r12d,ebx,27
4996	rorx	ecx,ebx,2
4997	xor	ebx,edx
4998	add	ebp,r12d
4999	xor	ebx,esi
5000	add	eax,DWORD[100+r13]
5001	lea	eax,[rbx*1+rax]
5002	rorx	r12d,ebp,27
5003	rorx	ebx,ebp,2
5004	xor	ebp,ecx
5005	add	eax,r12d
5006	xor	ebp,edx
5007	vpshufb	ymm1,ymm1,ymm6
5008	vpaddd	ymm8,ymm0,ymm11
5009	add	esi,DWORD[104+r13]
5010	lea	esi,[rbp*1+rsi]
5011	rorx	r12d,eax,27
5012	rorx	ebp,eax,2
5013	xor	eax,ebx
5014	add	esi,r12d
5015	xor	eax,ecx
5016	add	edx,DWORD[108+r13]
5017	lea	r13,[256+r13]
5018	lea	edx,[rax*1+rdx]
5019	rorx	r12d,esi,27
5020	rorx	eax,esi,2
5021	xor	esi,ebp
5022	add	edx,r12d
5023	xor	esi,ebx
5024	add	ecx,DWORD[((-128))+r13]
5025	lea	ecx,[rsi*1+rcx]
5026	rorx	r12d,edx,27
5027	rorx	esi,edx,2
5028	xor	edx,eax
5029	add	ecx,r12d
5030	xor	edx,ebp
5031	add	ebx,DWORD[((-124))+r13]
5032	lea	ebx,[rdx*1+rbx]
5033	rorx	r12d,ecx,27
5034	rorx	edx,ecx,2
5035	xor	ecx,esi
5036	add	ebx,r12d
5037	xor	ecx,eax
5038	add	ebp,DWORD[((-120))+r13]
5039	lea	ebp,[rbp*1+rcx]
5040	rorx	r12d,ebx,27
5041	rorx	ecx,ebx,2
5042	xor	ebx,edx
5043	add	ebp,r12d
5044	xor	ebx,esi
5045	vmovdqu	YMMWORD[rsp],ymm8
5046	vpshufb	ymm2,ymm2,ymm6
5047	vpaddd	ymm9,ymm1,ymm11
5048	add	eax,DWORD[((-116))+r13]
5049	lea	eax,[rbx*1+rax]
5050	rorx	r12d,ebp,27
5051	rorx	ebx,ebp,2
5052	xor	ebp,ecx
5053	add	eax,r12d
5054	xor	ebp,edx
5055	add	esi,DWORD[((-96))+r13]
5056	lea	esi,[rbp*1+rsi]
5057	rorx	r12d,eax,27
5058	rorx	ebp,eax,2
5059	xor	eax,ebx
5060	add	esi,r12d
5061	xor	eax,ecx
5062	add	edx,DWORD[((-92))+r13]
5063	lea	edx,[rax*1+rdx]
5064	rorx	r12d,esi,27
5065	rorx	eax,esi,2
5066	xor	esi,ebp
5067	add	edx,r12d
5068	xor	esi,ebx
5069	add	ecx,DWORD[((-88))+r13]
5070	lea	ecx,[rsi*1+rcx]
5071	rorx	r12d,edx,27
5072	rorx	esi,edx,2
5073	xor	edx,eax
5074	add	ecx,r12d
5075	xor	edx,ebp
5076	add	ebx,DWORD[((-84))+r13]
5077	mov	edi,esi
5078	xor	edi,eax
5079	lea	ebx,[rdx*1+rbx]
5080	rorx	r12d,ecx,27
5081	rorx	edx,ecx,2
5082	xor	ecx,esi
5083	add	ebx,r12d
5084	and	ecx,edi
5085	vmovdqu	YMMWORD[32+rsp],ymm9
5086	vpshufb	ymm3,ymm3,ymm6
5087	vpaddd	ymm6,ymm2,ymm11
5088	add	ebp,DWORD[((-64))+r13]
5089	xor	ecx,esi
5090	mov	edi,edx
5091	xor	edi,esi
5092	lea	ebp,[rbp*1+rcx]
5093	rorx	r12d,ebx,27
5094	rorx	ecx,ebx,2
5095	xor	ebx,edx
5096	add	ebp,r12d
5097	and	ebx,edi
5098	add	eax,DWORD[((-60))+r13]
5099	xor	ebx,edx
5100	mov	edi,ecx
5101	xor	edi,edx
5102	lea	eax,[rbx*1+rax]
5103	rorx	r12d,ebp,27
5104	rorx	ebx,ebp,2
5105	xor	ebp,ecx
5106	add	eax,r12d
5107	and	ebp,edi
5108	add	esi,DWORD[((-56))+r13]
5109	xor	ebp,ecx
5110	mov	edi,ebx
5111	xor	edi,ecx
5112	lea	esi,[rbp*1+rsi]
5113	rorx	r12d,eax,27
5114	rorx	ebp,eax,2
5115	xor	eax,ebx
5116	add	esi,r12d
5117	and	eax,edi
5118	add	edx,DWORD[((-52))+r13]
5119	xor	eax,ebx
5120	mov	edi,ebp
5121	xor	edi,ebx
5122	lea	edx,[rax*1+rdx]
5123	rorx	r12d,esi,27
5124	rorx	eax,esi,2
5125	xor	esi,ebp
5126	add	edx,r12d
5127	and	esi,edi
5128	add	ecx,DWORD[((-32))+r13]
5129	xor	esi,ebp
5130	mov	edi,eax
5131	xor	edi,ebp
5132	lea	ecx,[rsi*1+rcx]
5133	rorx	r12d,edx,27
5134	rorx	esi,edx,2
5135	xor	edx,eax
5136	add	ecx,r12d
5137	and	edx,edi
5138	jmp	NEAR $L$align32_3
5139ALIGN	32
5140$L$align32_3:
5141	vmovdqu	YMMWORD[64+rsp],ymm6
5142	vpaddd	ymm7,ymm3,ymm11
5143	add	ebx,DWORD[((-28))+r13]
5144	xor	edx,eax
5145	mov	edi,esi
5146	xor	edi,eax
5147	lea	ebx,[rdx*1+rbx]
5148	rorx	r12d,ecx,27
5149	rorx	edx,ecx,2
5150	xor	ecx,esi
5151	add	ebx,r12d
5152	and	ecx,edi
5153	add	ebp,DWORD[((-24))+r13]
5154	xor	ecx,esi
5155	mov	edi,edx
5156	xor	edi,esi
5157	lea	ebp,[rbp*1+rcx]
5158	rorx	r12d,ebx,27
5159	rorx	ecx,ebx,2
5160	xor	ebx,edx
5161	add	ebp,r12d
5162	and	ebx,edi
5163	add	eax,DWORD[((-20))+r13]
5164	xor	ebx,edx
5165	mov	edi,ecx
5166	xor	edi,edx
5167	lea	eax,[rbx*1+rax]
5168	rorx	r12d,ebp,27
5169	rorx	ebx,ebp,2
5170	xor	ebp,ecx
5171	add	eax,r12d
5172	and	ebp,edi
5173	add	esi,DWORD[r13]
5174	xor	ebp,ecx
5175	mov	edi,ebx
5176	xor	edi,ecx
5177	lea	esi,[rbp*1+rsi]
5178	rorx	r12d,eax,27
5179	rorx	ebp,eax,2
5180	xor	eax,ebx
5181	add	esi,r12d
5182	and	eax,edi
5183	add	edx,DWORD[4+r13]
5184	xor	eax,ebx
5185	mov	edi,ebp
5186	xor	edi,ebx
5187	lea	edx,[rax*1+rdx]
5188	rorx	r12d,esi,27
5189	rorx	eax,esi,2
5190	xor	esi,ebp
5191	add	edx,r12d
5192	and	esi,edi
5193	vmovdqu	YMMWORD[96+rsp],ymm7
5194	add	ecx,DWORD[8+r13]
5195	xor	esi,ebp
5196	mov	edi,eax
5197	xor	edi,ebp
5198	lea	ecx,[rsi*1+rcx]
5199	rorx	r12d,edx,27
5200	rorx	esi,edx,2
5201	xor	edx,eax
5202	add	ecx,r12d
5203	and	edx,edi
5204	add	ebx,DWORD[12+r13]
5205	xor	edx,eax
5206	mov	edi,esi
5207	xor	edi,eax
5208	lea	ebx,[rdx*1+rbx]
5209	rorx	r12d,ecx,27
5210	rorx	edx,ecx,2
5211	xor	ecx,esi
5212	add	ebx,r12d
5213	and	ecx,edi
5214	add	ebp,DWORD[32+r13]
5215	xor	ecx,esi
5216	mov	edi,edx
5217	xor	edi,esi
5218	lea	ebp,[rbp*1+rcx]
5219	rorx	r12d,ebx,27
5220	rorx	ecx,ebx,2
5221	xor	ebx,edx
5222	add	ebp,r12d
5223	and	ebx,edi
5224	add	eax,DWORD[36+r13]
5225	xor	ebx,edx
5226	mov	edi,ecx
5227	xor	edi,edx
5228	lea	eax,[rbx*1+rax]
5229	rorx	r12d,ebp,27
5230	rorx	ebx,ebp,2
5231	xor	ebp,ecx
5232	add	eax,r12d
5233	and	ebp,edi
5234	add	esi,DWORD[40+r13]
5235	xor	ebp,ecx
5236	mov	edi,ebx
5237	xor	edi,ecx
5238	lea	esi,[rbp*1+rsi]
5239	rorx	r12d,eax,27
5240	rorx	ebp,eax,2
5241	xor	eax,ebx
5242	add	esi,r12d
5243	and	eax,edi
5244	vpalignr	ymm4,ymm1,ymm0,8
5245	add	edx,DWORD[44+r13]
5246	xor	eax,ebx
5247	mov	edi,ebp
5248	xor	edi,ebx
5249	vpsrldq	ymm8,ymm3,4
5250	lea	edx,[rax*1+rdx]
5251	rorx	r12d,esi,27
5252	rorx	eax,esi,2
5253	vpxor	ymm4,ymm4,ymm0
5254	vpxor	ymm8,ymm8,ymm2
5255	xor	esi,ebp
5256	add	edx,r12d
5257	vpxor	ymm4,ymm4,ymm8
5258	and	esi,edi
5259	add	ecx,DWORD[64+r13]
5260	xor	esi,ebp
5261	mov	edi,eax
5262	vpsrld	ymm8,ymm4,31
5263	xor	edi,ebp
5264	lea	ecx,[rsi*1+rcx]
5265	rorx	r12d,edx,27
5266	vpslldq	ymm10,ymm4,12
5267	vpaddd	ymm4,ymm4,ymm4
5268	rorx	esi,edx,2
5269	xor	edx,eax
5270	vpsrld	ymm9,ymm10,30
5271	vpor	ymm4,ymm4,ymm8
5272	add	ecx,r12d
5273	and	edx,edi
5274	vpslld	ymm10,ymm10,2
5275	vpxor	ymm4,ymm4,ymm9
5276	add	ebx,DWORD[68+r13]
5277	xor	edx,eax
5278	vpxor	ymm4,ymm4,ymm10
5279	mov	edi,esi
5280	xor	edi,eax
5281	lea	ebx,[rdx*1+rbx]
5282	vpaddd	ymm9,ymm4,ymm11
5283	rorx	r12d,ecx,27
5284	rorx	edx,ecx,2
5285	xor	ecx,esi
5286	vmovdqu	YMMWORD[128+rsp],ymm9
5287	add	ebx,r12d
5288	and	ecx,edi
5289	add	ebp,DWORD[72+r13]
5290	xor	ecx,esi
5291	mov	edi,edx
5292	xor	edi,esi
5293	lea	ebp,[rbp*1+rcx]
5294	rorx	r12d,ebx,27
5295	rorx	ecx,ebx,2
5296	xor	ebx,edx
5297	add	ebp,r12d
5298	and	ebx,edi
5299	add	eax,DWORD[76+r13]
5300	xor	ebx,edx
5301	lea	eax,[rbx*1+rax]
5302	rorx	r12d,ebp,27
5303	rorx	ebx,ebp,2
5304	xor	ebp,ecx
5305	add	eax,r12d
5306	xor	ebp,edx
5307	vpalignr	ymm5,ymm2,ymm1,8
5308	add	esi,DWORD[96+r13]
5309	lea	esi,[rbp*1+rsi]
5310	rorx	r12d,eax,27
5311	rorx	ebp,eax,2
5312	vpsrldq	ymm8,ymm4,4
5313	xor	eax,ebx
5314	add	esi,r12d
5315	xor	eax,ecx
5316	vpxor	ymm5,ymm5,ymm1
5317	vpxor	ymm8,ymm8,ymm3
5318	add	edx,DWORD[100+r13]
5319	lea	edx,[rax*1+rdx]
5320	vpxor	ymm5,ymm5,ymm8
5321	rorx	r12d,esi,27
5322	rorx	eax,esi,2
5323	xor	esi,ebp
5324	add	edx,r12d
5325	vpsrld	ymm8,ymm5,31
5326	vmovdqu	ymm11,YMMWORD[((-32))+r14]
5327	xor	esi,ebx
5328	add	ecx,DWORD[104+r13]
5329	lea	ecx,[rsi*1+rcx]
5330	vpslldq	ymm10,ymm5,12
5331	vpaddd	ymm5,ymm5,ymm5
5332	rorx	r12d,edx,27
5333	rorx	esi,edx,2
5334	vpsrld	ymm9,ymm10,30
5335	vpor	ymm5,ymm5,ymm8
5336	xor	edx,eax
5337	add	ecx,r12d
5338	vpslld	ymm10,ymm10,2
5339	vpxor	ymm5,ymm5,ymm9
5340	xor	edx,ebp
5341	add	ebx,DWORD[108+r13]
5342	lea	r13,[256+r13]
5343	vpxor	ymm5,ymm5,ymm10
5344	lea	ebx,[rdx*1+rbx]
5345	rorx	r12d,ecx,27
5346	rorx	edx,ecx,2
5347	vpaddd	ymm9,ymm5,ymm11
5348	xor	ecx,esi
5349	add	ebx,r12d
5350	xor	ecx,eax
5351	vmovdqu	YMMWORD[160+rsp],ymm9
5352	add	ebp,DWORD[((-128))+r13]
5353	lea	ebp,[rbp*1+rcx]
5354	rorx	r12d,ebx,27
5355	rorx	ecx,ebx,2
5356	xor	ebx,edx
5357	add	ebp,r12d
5358	xor	ebx,esi
5359	vpalignr	ymm6,ymm3,ymm2,8
5360	add	eax,DWORD[((-124))+r13]
5361	lea	eax,[rbx*1+rax]
5362	rorx	r12d,ebp,27
5363	rorx	ebx,ebp,2
5364	vpsrldq	ymm8,ymm5,4
5365	xor	ebp,ecx
5366	add	eax,r12d
5367	xor	ebp,edx
5368	vpxor	ymm6,ymm6,ymm2
5369	vpxor	ymm8,ymm8,ymm4
5370	add	esi,DWORD[((-120))+r13]
5371	lea	esi,[rbp*1+rsi]
5372	vpxor	ymm6,ymm6,ymm8
5373	rorx	r12d,eax,27
5374	rorx	ebp,eax,2
5375	xor	eax,ebx
5376	add	esi,r12d
5377	vpsrld	ymm8,ymm6,31
5378	xor	eax,ecx
5379	add	edx,DWORD[((-116))+r13]
5380	lea	edx,[rax*1+rdx]
5381	vpslldq	ymm10,ymm6,12
5382	vpaddd	ymm6,ymm6,ymm6
5383	rorx	r12d,esi,27
5384	rorx	eax,esi,2
5385	vpsrld	ymm9,ymm10,30
5386	vpor	ymm6,ymm6,ymm8
5387	xor	esi,ebp
5388	add	edx,r12d
5389	vpslld	ymm10,ymm10,2
5390	vpxor	ymm6,ymm6,ymm9
5391	xor	esi,ebx
5392	add	ecx,DWORD[((-96))+r13]
5393	vpxor	ymm6,ymm6,ymm10
5394	lea	ecx,[rsi*1+rcx]
5395	rorx	r12d,edx,27
5396	rorx	esi,edx,2
5397	vpaddd	ymm9,ymm6,ymm11
5398	xor	edx,eax
5399	add	ecx,r12d
5400	xor	edx,ebp
5401	vmovdqu	YMMWORD[192+rsp],ymm9
5402	add	ebx,DWORD[((-92))+r13]
5403	lea	ebx,[rdx*1+rbx]
5404	rorx	r12d,ecx,27
5405	rorx	edx,ecx,2
5406	xor	ecx,esi
5407	add	ebx,r12d
5408	xor	ecx,eax
5409	vpalignr	ymm7,ymm4,ymm3,8
5410	add	ebp,DWORD[((-88))+r13]
5411	lea	ebp,[rbp*1+rcx]
5412	rorx	r12d,ebx,27
5413	rorx	ecx,ebx,2
5414	vpsrldq	ymm8,ymm6,4
5415	xor	ebx,edx
5416	add	ebp,r12d
5417	xor	ebx,esi
5418	vpxor	ymm7,ymm7,ymm3
5419	vpxor	ymm8,ymm8,ymm5
5420	add	eax,DWORD[((-84))+r13]
5421	lea	eax,[rbx*1+rax]
5422	vpxor	ymm7,ymm7,ymm8
5423	rorx	r12d,ebp,27
5424	rorx	ebx,ebp,2
5425	xor	ebp,ecx
5426	add	eax,r12d
5427	vpsrld	ymm8,ymm7,31
5428	xor	ebp,edx
5429	add	esi,DWORD[((-64))+r13]
5430	lea	esi,[rbp*1+rsi]
5431	vpslldq	ymm10,ymm7,12
5432	vpaddd	ymm7,ymm7,ymm7
5433	rorx	r12d,eax,27
5434	rorx	ebp,eax,2
5435	vpsrld	ymm9,ymm10,30
5436	vpor	ymm7,ymm7,ymm8
5437	xor	eax,ebx
5438	add	esi,r12d
5439	vpslld	ymm10,ymm10,2
5440	vpxor	ymm7,ymm7,ymm9
5441	xor	eax,ecx
5442	add	edx,DWORD[((-60))+r13]
5443	vpxor	ymm7,ymm7,ymm10
5444	lea	edx,[rax*1+rdx]
5445	rorx	r12d,esi,27
5446	rorx	eax,esi,2
5447	vpaddd	ymm9,ymm7,ymm11
5448	xor	esi,ebp
5449	add	edx,r12d
5450	xor	esi,ebx
5451	vmovdqu	YMMWORD[224+rsp],ymm9
5452	add	ecx,DWORD[((-56))+r13]
5453	lea	ecx,[rsi*1+rcx]
5454	rorx	r12d,edx,27
5455	rorx	esi,edx,2
5456	xor	edx,eax
5457	add	ecx,r12d
5458	xor	edx,ebp
5459	add	ebx,DWORD[((-52))+r13]
5460	lea	ebx,[rdx*1+rbx]
5461	rorx	r12d,ecx,27
5462	rorx	edx,ecx,2
5463	xor	ecx,esi
5464	add	ebx,r12d
5465	xor	ecx,eax
5466	add	ebp,DWORD[((-32))+r13]
5467	lea	ebp,[rbp*1+rcx]
5468	rorx	r12d,ebx,27
5469	rorx	ecx,ebx,2
5470	xor	ebx,edx
5471	add	ebp,r12d
5472	xor	ebx,esi
5473	add	eax,DWORD[((-28))+r13]
5474	lea	eax,[rbx*1+rax]
5475	rorx	r12d,ebp,27
5476	rorx	ebx,ebp,2
5477	xor	ebp,ecx
5478	add	eax,r12d
5479	xor	ebp,edx
5480	add	esi,DWORD[((-24))+r13]
5481	lea	esi,[rbp*1+rsi]
5482	rorx	r12d,eax,27
5483	rorx	ebp,eax,2
5484	xor	eax,ebx
5485	add	esi,r12d
5486	xor	eax,ecx
5487	add	edx,DWORD[((-20))+r13]
5488	lea	edx,[rax*1+rdx]
5489	rorx	r12d,esi,27
5490	add	edx,r12d
5491	lea	r13,[128+rsp]
5492
5493
5494	add	edx,DWORD[r8]
5495	add	esi,DWORD[4+r8]
5496	add	ebp,DWORD[8+r8]
5497	mov	DWORD[r8],edx
5498	add	ebx,DWORD[12+r8]
5499	mov	DWORD[4+r8],esi
5500	mov	eax,edx
5501	add	ecx,DWORD[16+r8]
5502	mov	r12d,ebp
5503	mov	DWORD[8+r8],ebp
5504	mov	edx,ebx
5505
5506	mov	DWORD[12+r8],ebx
5507	mov	ebp,esi
5508	mov	DWORD[16+r8],ecx
5509
5510	mov	esi,ecx
5511	mov	ecx,r12d
5512
5513
5514	cmp	r9,r10
5515	jbe	NEAR $L$oop_avx2
5516
5517$L$done_avx2:
5518	vzeroupper
5519	movaps	xmm6,XMMWORD[((-40-96))+r11]
5520	movaps	xmm7,XMMWORD[((-40-80))+r11]
5521	movaps	xmm8,XMMWORD[((-40-64))+r11]
5522	movaps	xmm9,XMMWORD[((-40-48))+r11]
5523	movaps	xmm10,XMMWORD[((-40-32))+r11]
5524	movaps	xmm11,XMMWORD[((-40-16))+r11]
5525	mov	r14,QWORD[((-40))+r11]
5526
5527	mov	r13,QWORD[((-32))+r11]
5528
5529	mov	r12,QWORD[((-24))+r11]
5530
5531	mov	rbp,QWORD[((-16))+r11]
5532
5533	mov	rbx,QWORD[((-8))+r11]
5534
5535	lea	rsp,[r11]
5536
5537$L$epilogue_avx2:
5538	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
5539	mov	rsi,QWORD[16+rsp]
5540	ret
5541
5542$L$SEH_end_sha1_block_data_order_avx2:
5543section	.rdata rdata align=8
5544ALIGN	64
5545K_XX_XX:
5546	DD	0x5a827999,0x5a827999,0x5a827999,0x5a827999
5547	DD	0x5a827999,0x5a827999,0x5a827999,0x5a827999
5548	DD	0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
5549	DD	0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
5550	DD	0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
5551	DD	0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
5552	DD	0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
5553	DD	0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
5554	DD	0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
5555	DD	0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
5556	DB	0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0
5557	DB	83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115
5558	DB	102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44
5559	DB	32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60
5560	DB	97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114
5561	DB	103,62,0
5562ALIGN	64
5563section	.text
5564
5565EXTERN	__imp_RtlVirtualUnwind
5566
5567ALIGN	16
5568se_handler:
5569	push	rsi
5570	push	rdi
5571	push	rbx
5572	push	rbp
5573	push	r12
5574	push	r13
5575	push	r14
5576	push	r15
5577	pushfq
5578	sub	rsp,64
5579
5580	mov	rax,QWORD[120+r8]
5581	mov	rbx,QWORD[248+r8]
5582
5583	lea	r10,[$L$prologue]
5584	cmp	rbx,r10
5585	jb	NEAR $L$common_seh_tail
5586
5587	mov	rax,QWORD[152+r8]
5588
5589	lea	r10,[$L$epilogue]
5590	cmp	rbx,r10
5591	jae	NEAR $L$common_seh_tail
5592
5593	mov	rax,QWORD[64+rax]
5594
5595	mov	rbx,QWORD[((-8))+rax]
5596	mov	rbp,QWORD[((-16))+rax]
5597	mov	r12,QWORD[((-24))+rax]
5598	mov	r13,QWORD[((-32))+rax]
5599	mov	r14,QWORD[((-40))+rax]
5600	mov	QWORD[144+r8],rbx
5601	mov	QWORD[160+r8],rbp
5602	mov	QWORD[216+r8],r12
5603	mov	QWORD[224+r8],r13
5604	mov	QWORD[232+r8],r14
5605
5606	jmp	NEAR $L$common_seh_tail
5607
5608
5609ALIGN	16
5610shaext_handler:
5611	push	rsi
5612	push	rdi
5613	push	rbx
5614	push	rbp
5615	push	r12
5616	push	r13
5617	push	r14
5618	push	r15
5619	pushfq
5620	sub	rsp,64
5621
5622	mov	rax,QWORD[120+r8]
5623	mov	rbx,QWORD[248+r8]
5624
5625	lea	r10,[$L$prologue_shaext]
5626	cmp	rbx,r10
5627	jb	NEAR $L$common_seh_tail
5628
5629	lea	r10,[$L$epilogue_shaext]
5630	cmp	rbx,r10
5631	jae	NEAR $L$common_seh_tail
5632
5633	lea	rsi,[((-8-64))+rax]
5634	lea	rdi,[512+r8]
5635	mov	ecx,8
5636	DD	0xa548f3fc
5637
5638	jmp	NEAR $L$common_seh_tail
5639
5640
5641ALIGN	16
5642ssse3_handler:
5643	push	rsi
5644	push	rdi
5645	push	rbx
5646	push	rbp
5647	push	r12
5648	push	r13
5649	push	r14
5650	push	r15
5651	pushfq
5652	sub	rsp,64
5653
5654	mov	rax,QWORD[120+r8]
5655	mov	rbx,QWORD[248+r8]
5656
5657	mov	rsi,QWORD[8+r9]
5658	mov	r11,QWORD[56+r9]
5659
5660	mov	r10d,DWORD[r11]
5661	lea	r10,[r10*1+rsi]
5662	cmp	rbx,r10
5663	jb	NEAR $L$common_seh_tail
5664
5665	mov	rax,QWORD[208+r8]
5666
5667	mov	r10d,DWORD[4+r11]
5668	lea	r10,[r10*1+rsi]
5669	cmp	rbx,r10
5670	jae	NEAR $L$common_seh_tail
5671
5672	lea	rsi,[((-40-96))+rax]
5673	lea	rdi,[512+r8]
5674	mov	ecx,12
5675	DD	0xa548f3fc
5676
5677	mov	rbx,QWORD[((-8))+rax]
5678	mov	rbp,QWORD[((-16))+rax]
5679	mov	r12,QWORD[((-24))+rax]
5680	mov	r13,QWORD[((-32))+rax]
5681	mov	r14,QWORD[((-40))+rax]
5682	mov	QWORD[144+r8],rbx
5683	mov	QWORD[160+r8],rbp
5684	mov	QWORD[216+r8],r12
5685	mov	QWORD[224+r8],r13
5686	mov	QWORD[232+r8],r14
5687
5688$L$common_seh_tail:
5689	mov	rdi,QWORD[8+rax]
5690	mov	rsi,QWORD[16+rax]
5691	mov	QWORD[152+r8],rax
5692	mov	QWORD[168+r8],rsi
5693	mov	QWORD[176+r8],rdi
5694
5695	mov	rdi,QWORD[40+r9]
5696	mov	rsi,r8
5697	mov	ecx,154
5698	DD	0xa548f3fc
5699
5700	mov	rsi,r9
5701	xor	rcx,rcx
5702	mov	rdx,QWORD[8+rsi]
5703	mov	r8,QWORD[rsi]
5704	mov	r9,QWORD[16+rsi]
5705	mov	r10,QWORD[40+rsi]
5706	lea	r11,[56+rsi]
5707	lea	r12,[24+rsi]
5708	mov	QWORD[32+rsp],r10
5709	mov	QWORD[40+rsp],r11
5710	mov	QWORD[48+rsp],r12
5711	mov	QWORD[56+rsp],rcx
5712	call	QWORD[__imp_RtlVirtualUnwind]
5713
5714	mov	eax,1
5715	add	rsp,64
5716	popfq
5717	pop	r15
5718	pop	r14
5719	pop	r13
5720	pop	r12
5721	pop	rbp
5722	pop	rbx
5723	pop	rdi
5724	pop	rsi
5725	ret
5726
5727
5728section	.pdata rdata align=4
5729ALIGN	4
5730	DD	$L$SEH_begin_sha1_block_data_order_nohw wrt ..imagebase
5731	DD	$L$SEH_end_sha1_block_data_order_nohw wrt ..imagebase
5732	DD	$L$SEH_info_sha1_block_data_order_nohw wrt ..imagebase
5733	DD	$L$SEH_begin_sha1_block_data_order_hw wrt ..imagebase
5734	DD	$L$SEH_end_sha1_block_data_order_hw wrt ..imagebase
5735	DD	$L$SEH_info_sha1_block_data_order_hw wrt ..imagebase
5736	DD	$L$SEH_begin_sha1_block_data_order_ssse3 wrt ..imagebase
5737	DD	$L$SEH_end_sha1_block_data_order_ssse3 wrt ..imagebase
5738	DD	$L$SEH_info_sha1_block_data_order_ssse3 wrt ..imagebase
5739	DD	$L$SEH_begin_sha1_block_data_order_avx wrt ..imagebase
5740	DD	$L$SEH_end_sha1_block_data_order_avx wrt ..imagebase
5741	DD	$L$SEH_info_sha1_block_data_order_avx wrt ..imagebase
5742	DD	$L$SEH_begin_sha1_block_data_order_avx2 wrt ..imagebase
5743	DD	$L$SEH_end_sha1_block_data_order_avx2 wrt ..imagebase
5744	DD	$L$SEH_info_sha1_block_data_order_avx2 wrt ..imagebase
5745section	.xdata rdata align=8
5746ALIGN	8
5747$L$SEH_info_sha1_block_data_order_nohw:
5748	DB	9,0,0,0
5749	DD	se_handler wrt ..imagebase
5750$L$SEH_info_sha1_block_data_order_hw:
5751	DB	9,0,0,0
5752	DD	shaext_handler wrt ..imagebase
5753$L$SEH_info_sha1_block_data_order_ssse3:
5754	DB	9,0,0,0
5755	DD	ssse3_handler wrt ..imagebase
5756	DD	$L$prologue_ssse3 wrt ..imagebase,$L$epilogue_ssse3 wrt ..imagebase
5757$L$SEH_info_sha1_block_data_order_avx:
5758	DB	9,0,0,0
5759	DD	ssse3_handler wrt ..imagebase
5760	DD	$L$prologue_avx wrt ..imagebase,$L$epilogue_avx wrt ..imagebase
5761$L$SEH_info_sha1_block_data_order_avx2:
5762	DB	9,0,0,0
5763	DD	ssse3_handler wrt ..imagebase
5764	DD	$L$prologue_avx2 wrt ..imagebase,$L$epilogue_avx2 wrt ..imagebase
5765%else
5766; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
5767ret
5768%endif
5769