1default	rel
2%define XMMWORD
3%define YMMWORD
4%define ZMMWORD
5section	.text code align=64
6
7EXTERN	OPENSSL_ia32cap_P
8
9global	sha1_block_data_order
10
11ALIGN	16
12sha1_block_data_order:
13	mov	QWORD[8+rsp],rdi	;WIN64 prologue
14	mov	QWORD[16+rsp],rsi
15	mov	rax,rsp
16$L$SEH_begin_sha1_block_data_order:
17	mov	rdi,rcx
18	mov	rsi,rdx
19	mov	rdx,r8
20
21
22	mov	r9d,DWORD[((OPENSSL_ia32cap_P+0))]
23	mov	r8d,DWORD[((OPENSSL_ia32cap_P+4))]
24	mov	r10d,DWORD[((OPENSSL_ia32cap_P+8))]
25	test	r8d,512
26	jz	NEAR $L$ialu
27	and	r8d,268435456
28	and	r9d,1073741824
29	or	r8d,r9d
30	cmp	r8d,1342177280
31	je	NEAR _avx_shortcut
32	jmp	NEAR _ssse3_shortcut
33
34ALIGN	16
35$L$ialu:
36	mov	rax,rsp
37	push	rbx
38	push	rbp
39	push	r12
40	push	r13
41	push	r14
42	mov	r8,rdi
43	sub	rsp,72
44	mov	r9,rsi
45	and	rsp,-64
46	mov	r10,rdx
47	mov	QWORD[64+rsp],rax
48$L$prologue:
49
50	mov	esi,DWORD[r8]
51	mov	edi,DWORD[4+r8]
52	mov	r11d,DWORD[8+r8]
53	mov	r12d,DWORD[12+r8]
54	mov	r13d,DWORD[16+r8]
55	jmp	NEAR $L$loop
56
57ALIGN	16
58$L$loop:
59	mov	edx,DWORD[r9]
60	bswap	edx
61	mov	ebp,DWORD[4+r9]
62	mov	eax,r12d
63	mov	DWORD[rsp],edx
64	mov	ecx,esi
65	bswap	ebp
66	xor	eax,r11d
67	rol	ecx,5
68	and	eax,edi
69	lea	r13d,[1518500249+r13*1+rdx]
70	add	r13d,ecx
71	xor	eax,r12d
72	rol	edi,30
73	add	r13d,eax
74	mov	r14d,DWORD[8+r9]
75	mov	eax,r11d
76	mov	DWORD[4+rsp],ebp
77	mov	ecx,r13d
78	bswap	r14d
79	xor	eax,edi
80	rol	ecx,5
81	and	eax,esi
82	lea	r12d,[1518500249+r12*1+rbp]
83	add	r12d,ecx
84	xor	eax,r11d
85	rol	esi,30
86	add	r12d,eax
87	mov	edx,DWORD[12+r9]
88	mov	eax,edi
89	mov	DWORD[8+rsp],r14d
90	mov	ecx,r12d
91	bswap	edx
92	xor	eax,esi
93	rol	ecx,5
94	and	eax,r13d
95	lea	r11d,[1518500249+r11*1+r14]
96	add	r11d,ecx
97	xor	eax,edi
98	rol	r13d,30
99	add	r11d,eax
100	mov	ebp,DWORD[16+r9]
101	mov	eax,esi
102	mov	DWORD[12+rsp],edx
103	mov	ecx,r11d
104	bswap	ebp
105	xor	eax,r13d
106	rol	ecx,5
107	and	eax,r12d
108	lea	edi,[1518500249+rdi*1+rdx]
109	add	edi,ecx
110	xor	eax,esi
111	rol	r12d,30
112	add	edi,eax
113	mov	r14d,DWORD[20+r9]
114	mov	eax,r13d
115	mov	DWORD[16+rsp],ebp
116	mov	ecx,edi
117	bswap	r14d
118	xor	eax,r12d
119	rol	ecx,5
120	and	eax,r11d
121	lea	esi,[1518500249+rsi*1+rbp]
122	add	esi,ecx
123	xor	eax,r13d
124	rol	r11d,30
125	add	esi,eax
126	mov	edx,DWORD[24+r9]
127	mov	eax,r12d
128	mov	DWORD[20+rsp],r14d
129	mov	ecx,esi
130	bswap	edx
131	xor	eax,r11d
132	rol	ecx,5
133	and	eax,edi
134	lea	r13d,[1518500249+r13*1+r14]
135	add	r13d,ecx
136	xor	eax,r12d
137	rol	edi,30
138	add	r13d,eax
139	mov	ebp,DWORD[28+r9]
140	mov	eax,r11d
141	mov	DWORD[24+rsp],edx
142	mov	ecx,r13d
143	bswap	ebp
144	xor	eax,edi
145	rol	ecx,5
146	and	eax,esi
147	lea	r12d,[1518500249+r12*1+rdx]
148	add	r12d,ecx
149	xor	eax,r11d
150	rol	esi,30
151	add	r12d,eax
152	mov	r14d,DWORD[32+r9]
153	mov	eax,edi
154	mov	DWORD[28+rsp],ebp
155	mov	ecx,r12d
156	bswap	r14d
157	xor	eax,esi
158	rol	ecx,5
159	and	eax,r13d
160	lea	r11d,[1518500249+r11*1+rbp]
161	add	r11d,ecx
162	xor	eax,edi
163	rol	r13d,30
164	add	r11d,eax
165	mov	edx,DWORD[36+r9]
166	mov	eax,esi
167	mov	DWORD[32+rsp],r14d
168	mov	ecx,r11d
169	bswap	edx
170	xor	eax,r13d
171	rol	ecx,5
172	and	eax,r12d
173	lea	edi,[1518500249+rdi*1+r14]
174	add	edi,ecx
175	xor	eax,esi
176	rol	r12d,30
177	add	edi,eax
178	mov	ebp,DWORD[40+r9]
179	mov	eax,r13d
180	mov	DWORD[36+rsp],edx
181	mov	ecx,edi
182	bswap	ebp
183	xor	eax,r12d
184	rol	ecx,5
185	and	eax,r11d
186	lea	esi,[1518500249+rsi*1+rdx]
187	add	esi,ecx
188	xor	eax,r13d
189	rol	r11d,30
190	add	esi,eax
191	mov	r14d,DWORD[44+r9]
192	mov	eax,r12d
193	mov	DWORD[40+rsp],ebp
194	mov	ecx,esi
195	bswap	r14d
196	xor	eax,r11d
197	rol	ecx,5
198	and	eax,edi
199	lea	r13d,[1518500249+r13*1+rbp]
200	add	r13d,ecx
201	xor	eax,r12d
202	rol	edi,30
203	add	r13d,eax
204	mov	edx,DWORD[48+r9]
205	mov	eax,r11d
206	mov	DWORD[44+rsp],r14d
207	mov	ecx,r13d
208	bswap	edx
209	xor	eax,edi
210	rol	ecx,5
211	and	eax,esi
212	lea	r12d,[1518500249+r12*1+r14]
213	add	r12d,ecx
214	xor	eax,r11d
215	rol	esi,30
216	add	r12d,eax
217	mov	ebp,DWORD[52+r9]
218	mov	eax,edi
219	mov	DWORD[48+rsp],edx
220	mov	ecx,r12d
221	bswap	ebp
222	xor	eax,esi
223	rol	ecx,5
224	and	eax,r13d
225	lea	r11d,[1518500249+r11*1+rdx]
226	add	r11d,ecx
227	xor	eax,edi
228	rol	r13d,30
229	add	r11d,eax
230	mov	r14d,DWORD[56+r9]
231	mov	eax,esi
232	mov	DWORD[52+rsp],ebp
233	mov	ecx,r11d
234	bswap	r14d
235	xor	eax,r13d
236	rol	ecx,5
237	and	eax,r12d
238	lea	edi,[1518500249+rdi*1+rbp]
239	add	edi,ecx
240	xor	eax,esi
241	rol	r12d,30
242	add	edi,eax
243	mov	edx,DWORD[60+r9]
244	mov	eax,r13d
245	mov	DWORD[56+rsp],r14d
246	mov	ecx,edi
247	bswap	edx
248	xor	eax,r12d
249	rol	ecx,5
250	and	eax,r11d
251	lea	esi,[1518500249+rsi*1+r14]
252	add	esi,ecx
253	xor	eax,r13d
254	rol	r11d,30
255	add	esi,eax
256	xor	ebp,DWORD[rsp]
257	mov	eax,r12d
258	mov	DWORD[60+rsp],edx
259	mov	ecx,esi
260	xor	ebp,DWORD[8+rsp]
261	xor	eax,r11d
262	rol	ecx,5
263	xor	ebp,DWORD[32+rsp]
264	and	eax,edi
265	lea	r13d,[1518500249+r13*1+rdx]
266	rol	edi,30
267	xor	eax,r12d
268	add	r13d,ecx
269	rol	ebp,1
270	add	r13d,eax
271	xor	r14d,DWORD[4+rsp]
272	mov	eax,r11d
273	mov	DWORD[rsp],ebp
274	mov	ecx,r13d
275	xor	r14d,DWORD[12+rsp]
276	xor	eax,edi
277	rol	ecx,5
278	xor	r14d,DWORD[36+rsp]
279	and	eax,esi
280	lea	r12d,[1518500249+r12*1+rbp]
281	rol	esi,30
282	xor	eax,r11d
283	add	r12d,ecx
284	rol	r14d,1
285	add	r12d,eax
286	xor	edx,DWORD[8+rsp]
287	mov	eax,edi
288	mov	DWORD[4+rsp],r14d
289	mov	ecx,r12d
290	xor	edx,DWORD[16+rsp]
291	xor	eax,esi
292	rol	ecx,5
293	xor	edx,DWORD[40+rsp]
294	and	eax,r13d
295	lea	r11d,[1518500249+r11*1+r14]
296	rol	r13d,30
297	xor	eax,edi
298	add	r11d,ecx
299	rol	edx,1
300	add	r11d,eax
301	xor	ebp,DWORD[12+rsp]
302	mov	eax,esi
303	mov	DWORD[8+rsp],edx
304	mov	ecx,r11d
305	xor	ebp,DWORD[20+rsp]
306	xor	eax,r13d
307	rol	ecx,5
308	xor	ebp,DWORD[44+rsp]
309	and	eax,r12d
310	lea	edi,[1518500249+rdi*1+rdx]
311	rol	r12d,30
312	xor	eax,esi
313	add	edi,ecx
314	rol	ebp,1
315	add	edi,eax
316	xor	r14d,DWORD[16+rsp]
317	mov	eax,r13d
318	mov	DWORD[12+rsp],ebp
319	mov	ecx,edi
320	xor	r14d,DWORD[24+rsp]
321	xor	eax,r12d
322	rol	ecx,5
323	xor	r14d,DWORD[48+rsp]
324	and	eax,r11d
325	lea	esi,[1518500249+rsi*1+rbp]
326	rol	r11d,30
327	xor	eax,r13d
328	add	esi,ecx
329	rol	r14d,1
330	add	esi,eax
331	xor	edx,DWORD[20+rsp]
332	mov	eax,edi
333	mov	DWORD[16+rsp],r14d
334	mov	ecx,esi
335	xor	edx,DWORD[28+rsp]
336	xor	eax,r12d
337	rol	ecx,5
338	xor	edx,DWORD[52+rsp]
339	lea	r13d,[1859775393+r13*1+r14]
340	xor	eax,r11d
341	add	r13d,ecx
342	rol	edi,30
343	add	r13d,eax
344	rol	edx,1
345	xor	ebp,DWORD[24+rsp]
346	mov	eax,esi
347	mov	DWORD[20+rsp],edx
348	mov	ecx,r13d
349	xor	ebp,DWORD[32+rsp]
350	xor	eax,r11d
351	rol	ecx,5
352	xor	ebp,DWORD[56+rsp]
353	lea	r12d,[1859775393+r12*1+rdx]
354	xor	eax,edi
355	add	r12d,ecx
356	rol	esi,30
357	add	r12d,eax
358	rol	ebp,1
359	xor	r14d,DWORD[28+rsp]
360	mov	eax,r13d
361	mov	DWORD[24+rsp],ebp
362	mov	ecx,r12d
363	xor	r14d,DWORD[36+rsp]
364	xor	eax,edi
365	rol	ecx,5
366	xor	r14d,DWORD[60+rsp]
367	lea	r11d,[1859775393+r11*1+rbp]
368	xor	eax,esi
369	add	r11d,ecx
370	rol	r13d,30
371	add	r11d,eax
372	rol	r14d,1
373	xor	edx,DWORD[32+rsp]
374	mov	eax,r12d
375	mov	DWORD[28+rsp],r14d
376	mov	ecx,r11d
377	xor	edx,DWORD[40+rsp]
378	xor	eax,esi
379	rol	ecx,5
380	xor	edx,DWORD[rsp]
381	lea	edi,[1859775393+rdi*1+r14]
382	xor	eax,r13d
383	add	edi,ecx
384	rol	r12d,30
385	add	edi,eax
386	rol	edx,1
387	xor	ebp,DWORD[36+rsp]
388	mov	eax,r11d
389	mov	DWORD[32+rsp],edx
390	mov	ecx,edi
391	xor	ebp,DWORD[44+rsp]
392	xor	eax,r13d
393	rol	ecx,5
394	xor	ebp,DWORD[4+rsp]
395	lea	esi,[1859775393+rsi*1+rdx]
396	xor	eax,r12d
397	add	esi,ecx
398	rol	r11d,30
399	add	esi,eax
400	rol	ebp,1
401	xor	r14d,DWORD[40+rsp]
402	mov	eax,edi
403	mov	DWORD[36+rsp],ebp
404	mov	ecx,esi
405	xor	r14d,DWORD[48+rsp]
406	xor	eax,r12d
407	rol	ecx,5
408	xor	r14d,DWORD[8+rsp]
409	lea	r13d,[1859775393+r13*1+rbp]
410	xor	eax,r11d
411	add	r13d,ecx
412	rol	edi,30
413	add	r13d,eax
414	rol	r14d,1
415	xor	edx,DWORD[44+rsp]
416	mov	eax,esi
417	mov	DWORD[40+rsp],r14d
418	mov	ecx,r13d
419	xor	edx,DWORD[52+rsp]
420	xor	eax,r11d
421	rol	ecx,5
422	xor	edx,DWORD[12+rsp]
423	lea	r12d,[1859775393+r12*1+r14]
424	xor	eax,edi
425	add	r12d,ecx
426	rol	esi,30
427	add	r12d,eax
428	rol	edx,1
429	xor	ebp,DWORD[48+rsp]
430	mov	eax,r13d
431	mov	DWORD[44+rsp],edx
432	mov	ecx,r12d
433	xor	ebp,DWORD[56+rsp]
434	xor	eax,edi
435	rol	ecx,5
436	xor	ebp,DWORD[16+rsp]
437	lea	r11d,[1859775393+r11*1+rdx]
438	xor	eax,esi
439	add	r11d,ecx
440	rol	r13d,30
441	add	r11d,eax
442	rol	ebp,1
443	xor	r14d,DWORD[52+rsp]
444	mov	eax,r12d
445	mov	DWORD[48+rsp],ebp
446	mov	ecx,r11d
447	xor	r14d,DWORD[60+rsp]
448	xor	eax,esi
449	rol	ecx,5
450	xor	r14d,DWORD[20+rsp]
451	lea	edi,[1859775393+rdi*1+rbp]
452	xor	eax,r13d
453	add	edi,ecx
454	rol	r12d,30
455	add	edi,eax
456	rol	r14d,1
457	xor	edx,DWORD[56+rsp]
458	mov	eax,r11d
459	mov	DWORD[52+rsp],r14d
460	mov	ecx,edi
461	xor	edx,DWORD[rsp]
462	xor	eax,r13d
463	rol	ecx,5
464	xor	edx,DWORD[24+rsp]
465	lea	esi,[1859775393+rsi*1+r14]
466	xor	eax,r12d
467	add	esi,ecx
468	rol	r11d,30
469	add	esi,eax
470	rol	edx,1
471	xor	ebp,DWORD[60+rsp]
472	mov	eax,edi
473	mov	DWORD[56+rsp],edx
474	mov	ecx,esi
475	xor	ebp,DWORD[4+rsp]
476	xor	eax,r12d
477	rol	ecx,5
478	xor	ebp,DWORD[28+rsp]
479	lea	r13d,[1859775393+r13*1+rdx]
480	xor	eax,r11d
481	add	r13d,ecx
482	rol	edi,30
483	add	r13d,eax
484	rol	ebp,1
485	xor	r14d,DWORD[rsp]
486	mov	eax,esi
487	mov	DWORD[60+rsp],ebp
488	mov	ecx,r13d
489	xor	r14d,DWORD[8+rsp]
490	xor	eax,r11d
491	rol	ecx,5
492	xor	r14d,DWORD[32+rsp]
493	lea	r12d,[1859775393+r12*1+rbp]
494	xor	eax,edi
495	add	r12d,ecx
496	rol	esi,30
497	add	r12d,eax
498	rol	r14d,1
499	xor	edx,DWORD[4+rsp]
500	mov	eax,r13d
501	mov	DWORD[rsp],r14d
502	mov	ecx,r12d
503	xor	edx,DWORD[12+rsp]
504	xor	eax,edi
505	rol	ecx,5
506	xor	edx,DWORD[36+rsp]
507	lea	r11d,[1859775393+r11*1+r14]
508	xor	eax,esi
509	add	r11d,ecx
510	rol	r13d,30
511	add	r11d,eax
512	rol	edx,1
513	xor	ebp,DWORD[8+rsp]
514	mov	eax,r12d
515	mov	DWORD[4+rsp],edx
516	mov	ecx,r11d
517	xor	ebp,DWORD[16+rsp]
518	xor	eax,esi
519	rol	ecx,5
520	xor	ebp,DWORD[40+rsp]
521	lea	edi,[1859775393+rdi*1+rdx]
522	xor	eax,r13d
523	add	edi,ecx
524	rol	r12d,30
525	add	edi,eax
526	rol	ebp,1
527	xor	r14d,DWORD[12+rsp]
528	mov	eax,r11d
529	mov	DWORD[8+rsp],ebp
530	mov	ecx,edi
531	xor	r14d,DWORD[20+rsp]
532	xor	eax,r13d
533	rol	ecx,5
534	xor	r14d,DWORD[44+rsp]
535	lea	esi,[1859775393+rsi*1+rbp]
536	xor	eax,r12d
537	add	esi,ecx
538	rol	r11d,30
539	add	esi,eax
540	rol	r14d,1
541	xor	edx,DWORD[16+rsp]
542	mov	eax,edi
543	mov	DWORD[12+rsp],r14d
544	mov	ecx,esi
545	xor	edx,DWORD[24+rsp]
546	xor	eax,r12d
547	rol	ecx,5
548	xor	edx,DWORD[48+rsp]
549	lea	r13d,[1859775393+r13*1+r14]
550	xor	eax,r11d
551	add	r13d,ecx
552	rol	edi,30
553	add	r13d,eax
554	rol	edx,1
555	xor	ebp,DWORD[20+rsp]
556	mov	eax,esi
557	mov	DWORD[16+rsp],edx
558	mov	ecx,r13d
559	xor	ebp,DWORD[28+rsp]
560	xor	eax,r11d
561	rol	ecx,5
562	xor	ebp,DWORD[52+rsp]
563	lea	r12d,[1859775393+r12*1+rdx]
564	xor	eax,edi
565	add	r12d,ecx
566	rol	esi,30
567	add	r12d,eax
568	rol	ebp,1
569	xor	r14d,DWORD[24+rsp]
570	mov	eax,r13d
571	mov	DWORD[20+rsp],ebp
572	mov	ecx,r12d
573	xor	r14d,DWORD[32+rsp]
574	xor	eax,edi
575	rol	ecx,5
576	xor	r14d,DWORD[56+rsp]
577	lea	r11d,[1859775393+r11*1+rbp]
578	xor	eax,esi
579	add	r11d,ecx
580	rol	r13d,30
581	add	r11d,eax
582	rol	r14d,1
583	xor	edx,DWORD[28+rsp]
584	mov	eax,r12d
585	mov	DWORD[24+rsp],r14d
586	mov	ecx,r11d
587	xor	edx,DWORD[36+rsp]
588	xor	eax,esi
589	rol	ecx,5
590	xor	edx,DWORD[60+rsp]
591	lea	edi,[1859775393+rdi*1+r14]
592	xor	eax,r13d
593	add	edi,ecx
594	rol	r12d,30
595	add	edi,eax
596	rol	edx,1
597	xor	ebp,DWORD[32+rsp]
598	mov	eax,r11d
599	mov	DWORD[28+rsp],edx
600	mov	ecx,edi
601	xor	ebp,DWORD[40+rsp]
602	xor	eax,r13d
603	rol	ecx,5
604	xor	ebp,DWORD[rsp]
605	lea	esi,[1859775393+rsi*1+rdx]
606	xor	eax,r12d
607	add	esi,ecx
608	rol	r11d,30
609	add	esi,eax
610	rol	ebp,1
611	xor	r14d,DWORD[36+rsp]
612	mov	eax,r12d
613	mov	DWORD[32+rsp],ebp
614	mov	ebx,r12d
615	xor	r14d,DWORD[44+rsp]
616	and	eax,r11d
617	mov	ecx,esi
618	xor	r14d,DWORD[4+rsp]
619	lea	r13d,[((-1894007588))+r13*1+rbp]
620	xor	ebx,r11d
621	rol	ecx,5
622	add	r13d,eax
623	rol	r14d,1
624	and	ebx,edi
625	add	r13d,ecx
626	rol	edi,30
627	add	r13d,ebx
628	xor	edx,DWORD[40+rsp]
629	mov	eax,r11d
630	mov	DWORD[36+rsp],r14d
631	mov	ebx,r11d
632	xor	edx,DWORD[48+rsp]
633	and	eax,edi
634	mov	ecx,r13d
635	xor	edx,DWORD[8+rsp]
636	lea	r12d,[((-1894007588))+r12*1+r14]
637	xor	ebx,edi
638	rol	ecx,5
639	add	r12d,eax
640	rol	edx,1
641	and	ebx,esi
642	add	r12d,ecx
643	rol	esi,30
644	add	r12d,ebx
645	xor	ebp,DWORD[44+rsp]
646	mov	eax,edi
647	mov	DWORD[40+rsp],edx
648	mov	ebx,edi
649	xor	ebp,DWORD[52+rsp]
650	and	eax,esi
651	mov	ecx,r12d
652	xor	ebp,DWORD[12+rsp]
653	lea	r11d,[((-1894007588))+r11*1+rdx]
654	xor	ebx,esi
655	rol	ecx,5
656	add	r11d,eax
657	rol	ebp,1
658	and	ebx,r13d
659	add	r11d,ecx
660	rol	r13d,30
661	add	r11d,ebx
662	xor	r14d,DWORD[48+rsp]
663	mov	eax,esi
664	mov	DWORD[44+rsp],ebp
665	mov	ebx,esi
666	xor	r14d,DWORD[56+rsp]
667	and	eax,r13d
668	mov	ecx,r11d
669	xor	r14d,DWORD[16+rsp]
670	lea	edi,[((-1894007588))+rdi*1+rbp]
671	xor	ebx,r13d
672	rol	ecx,5
673	add	edi,eax
674	rol	r14d,1
675	and	ebx,r12d
676	add	edi,ecx
677	rol	r12d,30
678	add	edi,ebx
679	xor	edx,DWORD[52+rsp]
680	mov	eax,r13d
681	mov	DWORD[48+rsp],r14d
682	mov	ebx,r13d
683	xor	edx,DWORD[60+rsp]
684	and	eax,r12d
685	mov	ecx,edi
686	xor	edx,DWORD[20+rsp]
687	lea	esi,[((-1894007588))+rsi*1+r14]
688	xor	ebx,r12d
689	rol	ecx,5
690	add	esi,eax
691	rol	edx,1
692	and	ebx,r11d
693	add	esi,ecx
694	rol	r11d,30
695	add	esi,ebx
696	xor	ebp,DWORD[56+rsp]
697	mov	eax,r12d
698	mov	DWORD[52+rsp],edx
699	mov	ebx,r12d
700	xor	ebp,DWORD[rsp]
701	and	eax,r11d
702	mov	ecx,esi
703	xor	ebp,DWORD[24+rsp]
704	lea	r13d,[((-1894007588))+r13*1+rdx]
705	xor	ebx,r11d
706	rol	ecx,5
707	add	r13d,eax
708	rol	ebp,1
709	and	ebx,edi
710	add	r13d,ecx
711	rol	edi,30
712	add	r13d,ebx
713	xor	r14d,DWORD[60+rsp]
714	mov	eax,r11d
715	mov	DWORD[56+rsp],ebp
716	mov	ebx,r11d
717	xor	r14d,DWORD[4+rsp]
718	and	eax,edi
719	mov	ecx,r13d
720	xor	r14d,DWORD[28+rsp]
721	lea	r12d,[((-1894007588))+r12*1+rbp]
722	xor	ebx,edi
723	rol	ecx,5
724	add	r12d,eax
725	rol	r14d,1
726	and	ebx,esi
727	add	r12d,ecx
728	rol	esi,30
729	add	r12d,ebx
730	xor	edx,DWORD[rsp]
731	mov	eax,edi
732	mov	DWORD[60+rsp],r14d
733	mov	ebx,edi
734	xor	edx,DWORD[8+rsp]
735	and	eax,esi
736	mov	ecx,r12d
737	xor	edx,DWORD[32+rsp]
738	lea	r11d,[((-1894007588))+r11*1+r14]
739	xor	ebx,esi
740	rol	ecx,5
741	add	r11d,eax
742	rol	edx,1
743	and	ebx,r13d
744	add	r11d,ecx
745	rol	r13d,30
746	add	r11d,ebx
747	xor	ebp,DWORD[4+rsp]
748	mov	eax,esi
749	mov	DWORD[rsp],edx
750	mov	ebx,esi
751	xor	ebp,DWORD[12+rsp]
752	and	eax,r13d
753	mov	ecx,r11d
754	xor	ebp,DWORD[36+rsp]
755	lea	edi,[((-1894007588))+rdi*1+rdx]
756	xor	ebx,r13d
757	rol	ecx,5
758	add	edi,eax
759	rol	ebp,1
760	and	ebx,r12d
761	add	edi,ecx
762	rol	r12d,30
763	add	edi,ebx
764	xor	r14d,DWORD[8+rsp]
765	mov	eax,r13d
766	mov	DWORD[4+rsp],ebp
767	mov	ebx,r13d
768	xor	r14d,DWORD[16+rsp]
769	and	eax,r12d
770	mov	ecx,edi
771	xor	r14d,DWORD[40+rsp]
772	lea	esi,[((-1894007588))+rsi*1+rbp]
773	xor	ebx,r12d
774	rol	ecx,5
775	add	esi,eax
776	rol	r14d,1
777	and	ebx,r11d
778	add	esi,ecx
779	rol	r11d,30
780	add	esi,ebx
781	xor	edx,DWORD[12+rsp]
782	mov	eax,r12d
783	mov	DWORD[8+rsp],r14d
784	mov	ebx,r12d
785	xor	edx,DWORD[20+rsp]
786	and	eax,r11d
787	mov	ecx,esi
788	xor	edx,DWORD[44+rsp]
789	lea	r13d,[((-1894007588))+r13*1+r14]
790	xor	ebx,r11d
791	rol	ecx,5
792	add	r13d,eax
793	rol	edx,1
794	and	ebx,edi
795	add	r13d,ecx
796	rol	edi,30
797	add	r13d,ebx
798	xor	ebp,DWORD[16+rsp]
799	mov	eax,r11d
800	mov	DWORD[12+rsp],edx
801	mov	ebx,r11d
802	xor	ebp,DWORD[24+rsp]
803	and	eax,edi
804	mov	ecx,r13d
805	xor	ebp,DWORD[48+rsp]
806	lea	r12d,[((-1894007588))+r12*1+rdx]
807	xor	ebx,edi
808	rol	ecx,5
809	add	r12d,eax
810	rol	ebp,1
811	and	ebx,esi
812	add	r12d,ecx
813	rol	esi,30
814	add	r12d,ebx
815	xor	r14d,DWORD[20+rsp]
816	mov	eax,edi
817	mov	DWORD[16+rsp],ebp
818	mov	ebx,edi
819	xor	r14d,DWORD[28+rsp]
820	and	eax,esi
821	mov	ecx,r12d
822	xor	r14d,DWORD[52+rsp]
823	lea	r11d,[((-1894007588))+r11*1+rbp]
824	xor	ebx,esi
825	rol	ecx,5
826	add	r11d,eax
827	rol	r14d,1
828	and	ebx,r13d
829	add	r11d,ecx
830	rol	r13d,30
831	add	r11d,ebx
832	xor	edx,DWORD[24+rsp]
833	mov	eax,esi
834	mov	DWORD[20+rsp],r14d
835	mov	ebx,esi
836	xor	edx,DWORD[32+rsp]
837	and	eax,r13d
838	mov	ecx,r11d
839	xor	edx,DWORD[56+rsp]
840	lea	edi,[((-1894007588))+rdi*1+r14]
841	xor	ebx,r13d
842	rol	ecx,5
843	add	edi,eax
844	rol	edx,1
845	and	ebx,r12d
846	add	edi,ecx
847	rol	r12d,30
848	add	edi,ebx
849	xor	ebp,DWORD[28+rsp]
850	mov	eax,r13d
851	mov	DWORD[24+rsp],edx
852	mov	ebx,r13d
853	xor	ebp,DWORD[36+rsp]
854	and	eax,r12d
855	mov	ecx,edi
856	xor	ebp,DWORD[60+rsp]
857	lea	esi,[((-1894007588))+rsi*1+rdx]
858	xor	ebx,r12d
859	rol	ecx,5
860	add	esi,eax
861	rol	ebp,1
862	and	ebx,r11d
863	add	esi,ecx
864	rol	r11d,30
865	add	esi,ebx
866	xor	r14d,DWORD[32+rsp]
867	mov	eax,r12d
868	mov	DWORD[28+rsp],ebp
869	mov	ebx,r12d
870	xor	r14d,DWORD[40+rsp]
871	and	eax,r11d
872	mov	ecx,esi
873	xor	r14d,DWORD[rsp]
874	lea	r13d,[((-1894007588))+r13*1+rbp]
875	xor	ebx,r11d
876	rol	ecx,5
877	add	r13d,eax
878	rol	r14d,1
879	and	ebx,edi
880	add	r13d,ecx
881	rol	edi,30
882	add	r13d,ebx
883	xor	edx,DWORD[36+rsp]
884	mov	eax,r11d
885	mov	DWORD[32+rsp],r14d
886	mov	ebx,r11d
887	xor	edx,DWORD[44+rsp]
888	and	eax,edi
889	mov	ecx,r13d
890	xor	edx,DWORD[4+rsp]
891	lea	r12d,[((-1894007588))+r12*1+r14]
892	xor	ebx,edi
893	rol	ecx,5
894	add	r12d,eax
895	rol	edx,1
896	and	ebx,esi
897	add	r12d,ecx
898	rol	esi,30
899	add	r12d,ebx
900	xor	ebp,DWORD[40+rsp]
901	mov	eax,edi
902	mov	DWORD[36+rsp],edx
903	mov	ebx,edi
904	xor	ebp,DWORD[48+rsp]
905	and	eax,esi
906	mov	ecx,r12d
907	xor	ebp,DWORD[8+rsp]
908	lea	r11d,[((-1894007588))+r11*1+rdx]
909	xor	ebx,esi
910	rol	ecx,5
911	add	r11d,eax
912	rol	ebp,1
913	and	ebx,r13d
914	add	r11d,ecx
915	rol	r13d,30
916	add	r11d,ebx
917	xor	r14d,DWORD[44+rsp]
918	mov	eax,esi
919	mov	DWORD[40+rsp],ebp
920	mov	ebx,esi
921	xor	r14d,DWORD[52+rsp]
922	and	eax,r13d
923	mov	ecx,r11d
924	xor	r14d,DWORD[12+rsp]
925	lea	edi,[((-1894007588))+rdi*1+rbp]
926	xor	ebx,r13d
927	rol	ecx,5
928	add	edi,eax
929	rol	r14d,1
930	and	ebx,r12d
931	add	edi,ecx
932	rol	r12d,30
933	add	edi,ebx
934	xor	edx,DWORD[48+rsp]
935	mov	eax,r13d
936	mov	DWORD[44+rsp],r14d
937	mov	ebx,r13d
938	xor	edx,DWORD[56+rsp]
939	and	eax,r12d
940	mov	ecx,edi
941	xor	edx,DWORD[16+rsp]
942	lea	esi,[((-1894007588))+rsi*1+r14]
943	xor	ebx,r12d
944	rol	ecx,5
945	add	esi,eax
946	rol	edx,1
947	and	ebx,r11d
948	add	esi,ecx
949	rol	r11d,30
950	add	esi,ebx
951	xor	ebp,DWORD[52+rsp]
952	mov	eax,edi
953	mov	DWORD[48+rsp],edx
954	mov	ecx,esi
955	xor	ebp,DWORD[60+rsp]
956	xor	eax,r12d
957	rol	ecx,5
958	xor	ebp,DWORD[20+rsp]
959	lea	r13d,[((-899497514))+r13*1+rdx]
960	xor	eax,r11d
961	add	r13d,ecx
962	rol	edi,30
963	add	r13d,eax
964	rol	ebp,1
965	xor	r14d,DWORD[56+rsp]
966	mov	eax,esi
967	mov	DWORD[52+rsp],ebp
968	mov	ecx,r13d
969	xor	r14d,DWORD[rsp]
970	xor	eax,r11d
971	rol	ecx,5
972	xor	r14d,DWORD[24+rsp]
973	lea	r12d,[((-899497514))+r12*1+rbp]
974	xor	eax,edi
975	add	r12d,ecx
976	rol	esi,30
977	add	r12d,eax
978	rol	r14d,1
979	xor	edx,DWORD[60+rsp]
980	mov	eax,r13d
981	mov	DWORD[56+rsp],r14d
982	mov	ecx,r12d
983	xor	edx,DWORD[4+rsp]
984	xor	eax,edi
985	rol	ecx,5
986	xor	edx,DWORD[28+rsp]
987	lea	r11d,[((-899497514))+r11*1+r14]
988	xor	eax,esi
989	add	r11d,ecx
990	rol	r13d,30
991	add	r11d,eax
992	rol	edx,1
993	xor	ebp,DWORD[rsp]
994	mov	eax,r12d
995	mov	DWORD[60+rsp],edx
996	mov	ecx,r11d
997	xor	ebp,DWORD[8+rsp]
998	xor	eax,esi
999	rol	ecx,5
1000	xor	ebp,DWORD[32+rsp]
1001	lea	edi,[((-899497514))+rdi*1+rdx]
1002	xor	eax,r13d
1003	add	edi,ecx
1004	rol	r12d,30
1005	add	edi,eax
1006	rol	ebp,1
1007	xor	r14d,DWORD[4+rsp]
1008	mov	eax,r11d
1009	mov	DWORD[rsp],ebp
1010	mov	ecx,edi
1011	xor	r14d,DWORD[12+rsp]
1012	xor	eax,r13d
1013	rol	ecx,5
1014	xor	r14d,DWORD[36+rsp]
1015	lea	esi,[((-899497514))+rsi*1+rbp]
1016	xor	eax,r12d
1017	add	esi,ecx
1018	rol	r11d,30
1019	add	esi,eax
1020	rol	r14d,1
1021	xor	edx,DWORD[8+rsp]
1022	mov	eax,edi
1023	mov	DWORD[4+rsp],r14d
1024	mov	ecx,esi
1025	xor	edx,DWORD[16+rsp]
1026	xor	eax,r12d
1027	rol	ecx,5
1028	xor	edx,DWORD[40+rsp]
1029	lea	r13d,[((-899497514))+r13*1+r14]
1030	xor	eax,r11d
1031	add	r13d,ecx
1032	rol	edi,30
1033	add	r13d,eax
1034	rol	edx,1
1035	xor	ebp,DWORD[12+rsp]
1036	mov	eax,esi
1037	mov	DWORD[8+rsp],edx
1038	mov	ecx,r13d
1039	xor	ebp,DWORD[20+rsp]
1040	xor	eax,r11d
1041	rol	ecx,5
1042	xor	ebp,DWORD[44+rsp]
1043	lea	r12d,[((-899497514))+r12*1+rdx]
1044	xor	eax,edi
1045	add	r12d,ecx
1046	rol	esi,30
1047	add	r12d,eax
1048	rol	ebp,1
1049	xor	r14d,DWORD[16+rsp]
1050	mov	eax,r13d
1051	mov	DWORD[12+rsp],ebp
1052	mov	ecx,r12d
1053	xor	r14d,DWORD[24+rsp]
1054	xor	eax,edi
1055	rol	ecx,5
1056	xor	r14d,DWORD[48+rsp]
1057	lea	r11d,[((-899497514))+r11*1+rbp]
1058	xor	eax,esi
1059	add	r11d,ecx
1060	rol	r13d,30
1061	add	r11d,eax
1062	rol	r14d,1
1063	xor	edx,DWORD[20+rsp]
1064	mov	eax,r12d
1065	mov	DWORD[16+rsp],r14d
1066	mov	ecx,r11d
1067	xor	edx,DWORD[28+rsp]
1068	xor	eax,esi
1069	rol	ecx,5
1070	xor	edx,DWORD[52+rsp]
1071	lea	edi,[((-899497514))+rdi*1+r14]
1072	xor	eax,r13d
1073	add	edi,ecx
1074	rol	r12d,30
1075	add	edi,eax
1076	rol	edx,1
1077	xor	ebp,DWORD[24+rsp]
1078	mov	eax,r11d
1079	mov	DWORD[20+rsp],edx
1080	mov	ecx,edi
1081	xor	ebp,DWORD[32+rsp]
1082	xor	eax,r13d
1083	rol	ecx,5
1084	xor	ebp,DWORD[56+rsp]
1085	lea	esi,[((-899497514))+rsi*1+rdx]
1086	xor	eax,r12d
1087	add	esi,ecx
1088	rol	r11d,30
1089	add	esi,eax
1090	rol	ebp,1
1091	xor	r14d,DWORD[28+rsp]
1092	mov	eax,edi
1093	mov	DWORD[24+rsp],ebp
1094	mov	ecx,esi
1095	xor	r14d,DWORD[36+rsp]
1096	xor	eax,r12d
1097	rol	ecx,5
1098	xor	r14d,DWORD[60+rsp]
1099	lea	r13d,[((-899497514))+r13*1+rbp]
1100	xor	eax,r11d
1101	add	r13d,ecx
1102	rol	edi,30
1103	add	r13d,eax
1104	rol	r14d,1
1105	xor	edx,DWORD[32+rsp]
1106	mov	eax,esi
1107	mov	DWORD[28+rsp],r14d
1108	mov	ecx,r13d
1109	xor	edx,DWORD[40+rsp]
1110	xor	eax,r11d
1111	rol	ecx,5
1112	xor	edx,DWORD[rsp]
1113	lea	r12d,[((-899497514))+r12*1+r14]
1114	xor	eax,edi
1115	add	r12d,ecx
1116	rol	esi,30
1117	add	r12d,eax
1118	rol	edx,1
1119	xor	ebp,DWORD[36+rsp]
1120	mov	eax,r13d
1121
1122	mov	ecx,r12d
1123	xor	ebp,DWORD[44+rsp]
1124	xor	eax,edi
1125	rol	ecx,5
1126	xor	ebp,DWORD[4+rsp]
1127	lea	r11d,[((-899497514))+r11*1+rdx]
1128	xor	eax,esi
1129	add	r11d,ecx
1130	rol	r13d,30
1131	add	r11d,eax
1132	rol	ebp,1
1133	xor	r14d,DWORD[40+rsp]
1134	mov	eax,r12d
1135
1136	mov	ecx,r11d
1137	xor	r14d,DWORD[48+rsp]
1138	xor	eax,esi
1139	rol	ecx,5
1140	xor	r14d,DWORD[8+rsp]
1141	lea	edi,[((-899497514))+rdi*1+rbp]
1142	xor	eax,r13d
1143	add	edi,ecx
1144	rol	r12d,30
1145	add	edi,eax
1146	rol	r14d,1
1147	xor	edx,DWORD[44+rsp]
1148	mov	eax,r11d
1149
1150	mov	ecx,edi
1151	xor	edx,DWORD[52+rsp]
1152	xor	eax,r13d
1153	rol	ecx,5
1154	xor	edx,DWORD[12+rsp]
1155	lea	esi,[((-899497514))+rsi*1+r14]
1156	xor	eax,r12d
1157	add	esi,ecx
1158	rol	r11d,30
1159	add	esi,eax
1160	rol	edx,1
1161	xor	ebp,DWORD[48+rsp]
1162	mov	eax,edi
1163
1164	mov	ecx,esi
1165	xor	ebp,DWORD[56+rsp]
1166	xor	eax,r12d
1167	rol	ecx,5
1168	xor	ebp,DWORD[16+rsp]
1169	lea	r13d,[((-899497514))+r13*1+rdx]
1170	xor	eax,r11d
1171	add	r13d,ecx
1172	rol	edi,30
1173	add	r13d,eax
1174	rol	ebp,1
1175	xor	r14d,DWORD[52+rsp]
1176	mov	eax,esi
1177
1178	mov	ecx,r13d
1179	xor	r14d,DWORD[60+rsp]
1180	xor	eax,r11d
1181	rol	ecx,5
1182	xor	r14d,DWORD[20+rsp]
1183	lea	r12d,[((-899497514))+r12*1+rbp]
1184	xor	eax,edi
1185	add	r12d,ecx
1186	rol	esi,30
1187	add	r12d,eax
1188	rol	r14d,1
1189	xor	edx,DWORD[56+rsp]
1190	mov	eax,r13d
1191
1192	mov	ecx,r12d
1193	xor	edx,DWORD[rsp]
1194	xor	eax,edi
1195	rol	ecx,5
1196	xor	edx,DWORD[24+rsp]
1197	lea	r11d,[((-899497514))+r11*1+r14]
1198	xor	eax,esi
1199	add	r11d,ecx
1200	rol	r13d,30
1201	add	r11d,eax
1202	rol	edx,1
1203	xor	ebp,DWORD[60+rsp]
1204	mov	eax,r12d
1205
1206	mov	ecx,r11d
1207	xor	ebp,DWORD[4+rsp]
1208	xor	eax,esi
1209	rol	ecx,5
1210	xor	ebp,DWORD[28+rsp]
1211	lea	edi,[((-899497514))+rdi*1+rdx]
1212	xor	eax,r13d
1213	add	edi,ecx
1214	rol	r12d,30
1215	add	edi,eax
1216	rol	ebp,1
1217	mov	eax,r11d
1218	mov	ecx,edi
1219	xor	eax,r13d
1220	lea	esi,[((-899497514))+rsi*1+rbp]
1221	rol	ecx,5
1222	xor	eax,r12d
1223	add	esi,ecx
1224	rol	r11d,30
1225	add	esi,eax
1226	add	esi,DWORD[r8]
1227	add	edi,DWORD[4+r8]
1228	add	r11d,DWORD[8+r8]
1229	add	r12d,DWORD[12+r8]
1230	add	r13d,DWORD[16+r8]
1231	mov	DWORD[r8],esi
1232	mov	DWORD[4+r8],edi
1233	mov	DWORD[8+r8],r11d
1234	mov	DWORD[12+r8],r12d
1235	mov	DWORD[16+r8],r13d
1236
1237	sub	r10,1
1238	lea	r9,[64+r9]
1239	jnz	NEAR $L$loop
1240
1241	mov	rsi,QWORD[64+rsp]
1242	mov	r14,QWORD[((-40))+rsi]
1243	mov	r13,QWORD[((-32))+rsi]
1244	mov	r12,QWORD[((-24))+rsi]
1245	mov	rbp,QWORD[((-16))+rsi]
1246	mov	rbx,QWORD[((-8))+rsi]
1247	lea	rsp,[rsi]
1248$L$epilogue:
1249	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
1250	mov	rsi,QWORD[16+rsp]
1251	DB	0F3h,0C3h		;repret
1252$L$SEH_end_sha1_block_data_order:
1253
1254ALIGN	16
1255sha1_block_data_order_ssse3:
1256	mov	QWORD[8+rsp],rdi	;WIN64 prologue
1257	mov	QWORD[16+rsp],rsi
1258	mov	rax,rsp
1259$L$SEH_begin_sha1_block_data_order_ssse3:
1260	mov	rdi,rcx
1261	mov	rsi,rdx
1262	mov	rdx,r8
1263
1264
1265_ssse3_shortcut:
1266	mov	rax,rsp
1267	push	rbx
1268	push	rbp
1269	push	r12
1270	push	r13
1271	push	r14
1272	lea	rsp,[((-160))+rsp]
1273	movaps	XMMWORD[(-40-96)+rax],xmm6
1274	movaps	XMMWORD[(-40-80)+rax],xmm7
1275	movaps	XMMWORD[(-40-64)+rax],xmm8
1276	movaps	XMMWORD[(-40-48)+rax],xmm9
1277	movaps	XMMWORD[(-40-32)+rax],xmm10
1278	movaps	XMMWORD[(-40-16)+rax],xmm11
1279$L$prologue_ssse3:
1280	mov	r14,rax
1281	and	rsp,-64
1282	mov	r8,rdi
1283	mov	r9,rsi
1284	mov	r10,rdx
1285
1286	shl	r10,6
1287	add	r10,r9
1288	lea	r11,[((K_XX_XX+64))]
1289
1290	mov	eax,DWORD[r8]
1291	mov	ebx,DWORD[4+r8]
1292	mov	ecx,DWORD[8+r8]
1293	mov	edx,DWORD[12+r8]
1294	mov	esi,ebx
1295	mov	ebp,DWORD[16+r8]
1296	mov	edi,ecx
1297	xor	edi,edx
1298	and	esi,edi
1299
1300	movdqa	xmm6,XMMWORD[64+r11]
1301	movdqa	xmm9,XMMWORD[((-64))+r11]
1302	movdqu	xmm0,XMMWORD[r9]
1303	movdqu	xmm1,XMMWORD[16+r9]
1304	movdqu	xmm2,XMMWORD[32+r9]
1305	movdqu	xmm3,XMMWORD[48+r9]
1306DB	102,15,56,0,198
1307DB	102,15,56,0,206
1308DB	102,15,56,0,214
1309	add	r9,64
1310	paddd	xmm0,xmm9
1311DB	102,15,56,0,222
1312	paddd	xmm1,xmm9
1313	paddd	xmm2,xmm9
1314	movdqa	XMMWORD[rsp],xmm0
1315	psubd	xmm0,xmm9
1316	movdqa	XMMWORD[16+rsp],xmm1
1317	psubd	xmm1,xmm9
1318	movdqa	XMMWORD[32+rsp],xmm2
1319	psubd	xmm2,xmm9
1320	jmp	NEAR $L$oop_ssse3
1321ALIGN	16
1322$L$oop_ssse3:
1323	ror	ebx,2
1324	pshufd	xmm4,xmm0,238
1325	xor	esi,edx
1326	movdqa	xmm8,xmm3
1327	paddd	xmm9,xmm3
1328	mov	edi,eax
1329	add	ebp,DWORD[rsp]
1330	punpcklqdq	xmm4,xmm1
1331	xor	ebx,ecx
1332	rol	eax,5
1333	add	ebp,esi
1334	psrldq	xmm8,4
1335	and	edi,ebx
1336	xor	ebx,ecx
1337	pxor	xmm4,xmm0
1338	add	ebp,eax
1339	ror	eax,7
1340	pxor	xmm8,xmm2
1341	xor	edi,ecx
1342	mov	esi,ebp
1343	add	edx,DWORD[4+rsp]
1344	pxor	xmm4,xmm8
1345	xor	eax,ebx
1346	rol	ebp,5
1347	movdqa	XMMWORD[48+rsp],xmm9
1348	add	edx,edi
1349	and	esi,eax
1350	movdqa	xmm10,xmm4
1351	xor	eax,ebx
1352	add	edx,ebp
1353	ror	ebp,7
1354	movdqa	xmm8,xmm4
1355	xor	esi,ebx
1356	pslldq	xmm10,12
1357	paddd	xmm4,xmm4
1358	mov	edi,edx
1359	add	ecx,DWORD[8+rsp]
1360	psrld	xmm8,31
1361	xor	ebp,eax
1362	rol	edx,5
1363	add	ecx,esi
1364	movdqa	xmm9,xmm10
1365	and	edi,ebp
1366	xor	ebp,eax
1367	psrld	xmm10,30
1368	add	ecx,edx
1369	ror	edx,7
1370	por	xmm4,xmm8
1371	xor	edi,eax
1372	mov	esi,ecx
1373	add	ebx,DWORD[12+rsp]
1374	pslld	xmm9,2
1375	pxor	xmm4,xmm10
1376	xor	edx,ebp
1377	movdqa	xmm10,XMMWORD[((-64))+r11]
1378	rol	ecx,5
1379	add	ebx,edi
1380	and	esi,edx
1381	pxor	xmm4,xmm9
1382	xor	edx,ebp
1383	add	ebx,ecx
1384	ror	ecx,7
1385	pshufd	xmm5,xmm1,238
1386	xor	esi,ebp
1387	movdqa	xmm9,xmm4
1388	paddd	xmm10,xmm4
1389	mov	edi,ebx
1390	add	eax,DWORD[16+rsp]
1391	punpcklqdq	xmm5,xmm2
1392	xor	ecx,edx
1393	rol	ebx,5
1394	add	eax,esi
1395	psrldq	xmm9,4
1396	and	edi,ecx
1397	xor	ecx,edx
1398	pxor	xmm5,xmm1
1399	add	eax,ebx
1400	ror	ebx,7
1401	pxor	xmm9,xmm3
1402	xor	edi,edx
1403	mov	esi,eax
1404	add	ebp,DWORD[20+rsp]
1405	pxor	xmm5,xmm9
1406	xor	ebx,ecx
1407	rol	eax,5
1408	movdqa	XMMWORD[rsp],xmm10
1409	add	ebp,edi
1410	and	esi,ebx
1411	movdqa	xmm8,xmm5
1412	xor	ebx,ecx
1413	add	ebp,eax
1414	ror	eax,7
1415	movdqa	xmm9,xmm5
1416	xor	esi,ecx
1417	pslldq	xmm8,12
1418	paddd	xmm5,xmm5
1419	mov	edi,ebp
1420	add	edx,DWORD[24+rsp]
1421	psrld	xmm9,31
1422	xor	eax,ebx
1423	rol	ebp,5
1424	add	edx,esi
1425	movdqa	xmm10,xmm8
1426	and	edi,eax
1427	xor	eax,ebx
1428	psrld	xmm8,30
1429	add	edx,ebp
1430	ror	ebp,7
1431	por	xmm5,xmm9
1432	xor	edi,ebx
1433	mov	esi,edx
1434	add	ecx,DWORD[28+rsp]
1435	pslld	xmm10,2
1436	pxor	xmm5,xmm8
1437	xor	ebp,eax
1438	movdqa	xmm8,XMMWORD[((-32))+r11]
1439	rol	edx,5
1440	add	ecx,edi
1441	and	esi,ebp
1442	pxor	xmm5,xmm10
1443	xor	ebp,eax
1444	add	ecx,edx
1445	ror	edx,7
1446	pshufd	xmm6,xmm2,238
1447	xor	esi,eax
1448	movdqa	xmm10,xmm5
1449	paddd	xmm8,xmm5
1450	mov	edi,ecx
1451	add	ebx,DWORD[32+rsp]
1452	punpcklqdq	xmm6,xmm3
1453	xor	edx,ebp
1454	rol	ecx,5
1455	add	ebx,esi
1456	psrldq	xmm10,4
1457	and	edi,edx
1458	xor	edx,ebp
1459	pxor	xmm6,xmm2
1460	add	ebx,ecx
1461	ror	ecx,7
1462	pxor	xmm10,xmm4
1463	xor	edi,ebp
1464	mov	esi,ebx
1465	add	eax,DWORD[36+rsp]
1466	pxor	xmm6,xmm10
1467	xor	ecx,edx
1468	rol	ebx,5
1469	movdqa	XMMWORD[16+rsp],xmm8
1470	add	eax,edi
1471	and	esi,ecx
1472	movdqa	xmm9,xmm6
1473	xor	ecx,edx
1474	add	eax,ebx
1475	ror	ebx,7
1476	movdqa	xmm10,xmm6
1477	xor	esi,edx
1478	pslldq	xmm9,12
1479	paddd	xmm6,xmm6
1480	mov	edi,eax
1481	add	ebp,DWORD[40+rsp]
1482	psrld	xmm10,31
1483	xor	ebx,ecx
1484	rol	eax,5
1485	add	ebp,esi
1486	movdqa	xmm8,xmm9
1487	and	edi,ebx
1488	xor	ebx,ecx
1489	psrld	xmm9,30
1490	add	ebp,eax
1491	ror	eax,7
1492	por	xmm6,xmm10
1493	xor	edi,ecx
1494	mov	esi,ebp
1495	add	edx,DWORD[44+rsp]
1496	pslld	xmm8,2
1497	pxor	xmm6,xmm9
1498	xor	eax,ebx
1499	movdqa	xmm9,XMMWORD[((-32))+r11]
1500	rol	ebp,5
1501	add	edx,edi
1502	and	esi,eax
1503	pxor	xmm6,xmm8
1504	xor	eax,ebx
1505	add	edx,ebp
1506	ror	ebp,7
1507	pshufd	xmm7,xmm3,238
1508	xor	esi,ebx
1509	movdqa	xmm8,xmm6
1510	paddd	xmm9,xmm6
1511	mov	edi,edx
1512	add	ecx,DWORD[48+rsp]
1513	punpcklqdq	xmm7,xmm4
1514	xor	ebp,eax
1515	rol	edx,5
1516	add	ecx,esi
1517	psrldq	xmm8,4
1518	and	edi,ebp
1519	xor	ebp,eax
1520	pxor	xmm7,xmm3
1521	add	ecx,edx
1522	ror	edx,7
1523	pxor	xmm8,xmm5
1524	xor	edi,eax
1525	mov	esi,ecx
1526	add	ebx,DWORD[52+rsp]
1527	pxor	xmm7,xmm8
1528	xor	edx,ebp
1529	rol	ecx,5
1530	movdqa	XMMWORD[32+rsp],xmm9
1531	add	ebx,edi
1532	and	esi,edx
1533	movdqa	xmm10,xmm7
1534	xor	edx,ebp
1535	add	ebx,ecx
1536	ror	ecx,7
1537	movdqa	xmm8,xmm7
1538	xor	esi,ebp
1539	pslldq	xmm10,12
1540	paddd	xmm7,xmm7
1541	mov	edi,ebx
1542	add	eax,DWORD[56+rsp]
1543	psrld	xmm8,31
1544	xor	ecx,edx
1545	rol	ebx,5
1546	add	eax,esi
1547	movdqa	xmm9,xmm10
1548	and	edi,ecx
1549	xor	ecx,edx
1550	psrld	xmm10,30
1551	add	eax,ebx
1552	ror	ebx,7
1553	por	xmm7,xmm8
1554	xor	edi,edx
1555	mov	esi,eax
1556	add	ebp,DWORD[60+rsp]
1557	pslld	xmm9,2
1558	pxor	xmm7,xmm10
1559	xor	ebx,ecx
1560	movdqa	xmm10,XMMWORD[((-32))+r11]
1561	rol	eax,5
1562	add	ebp,edi
1563	and	esi,ebx
1564	pxor	xmm7,xmm9
1565	pshufd	xmm9,xmm6,238
1566	xor	ebx,ecx
1567	add	ebp,eax
1568	ror	eax,7
1569	pxor	xmm0,xmm4
1570	xor	esi,ecx
1571	mov	edi,ebp
1572	add	edx,DWORD[rsp]
1573	punpcklqdq	xmm9,xmm7
1574	xor	eax,ebx
1575	rol	ebp,5
1576	pxor	xmm0,xmm1
1577	add	edx,esi
1578	and	edi,eax
1579	movdqa	xmm8,xmm10
1580	xor	eax,ebx
1581	paddd	xmm10,xmm7
1582	add	edx,ebp
1583	pxor	xmm0,xmm9
1584	ror	ebp,7
1585	xor	edi,ebx
1586	mov	esi,edx
1587	add	ecx,DWORD[4+rsp]
1588	movdqa	xmm9,xmm0
1589	xor	ebp,eax
1590	rol	edx,5
1591	movdqa	XMMWORD[48+rsp],xmm10
1592	add	ecx,edi
1593	and	esi,ebp
1594	xor	ebp,eax
1595	pslld	xmm0,2
1596	add	ecx,edx
1597	ror	edx,7
1598	psrld	xmm9,30
1599	xor	esi,eax
1600	mov	edi,ecx
1601	add	ebx,DWORD[8+rsp]
1602	por	xmm0,xmm9
1603	xor	edx,ebp
1604	rol	ecx,5
1605	pshufd	xmm10,xmm7,238
1606	add	ebx,esi
1607	and	edi,edx
1608	xor	edx,ebp
1609	add	ebx,ecx
1610	add	eax,DWORD[12+rsp]
1611	xor	edi,ebp
1612	mov	esi,ebx
1613	rol	ebx,5
1614	add	eax,edi
1615	xor	esi,edx
1616	ror	ecx,7
1617	add	eax,ebx
1618	pxor	xmm1,xmm5
1619	add	ebp,DWORD[16+rsp]
1620	xor	esi,ecx
1621	punpcklqdq	xmm10,xmm0
1622	mov	edi,eax
1623	rol	eax,5
1624	pxor	xmm1,xmm2
1625	add	ebp,esi
1626	xor	edi,ecx
1627	movdqa	xmm9,xmm8
1628	ror	ebx,7
1629	paddd	xmm8,xmm0
1630	add	ebp,eax
1631	pxor	xmm1,xmm10
1632	add	edx,DWORD[20+rsp]
1633	xor	edi,ebx
1634	mov	esi,ebp
1635	rol	ebp,5
1636	movdqa	xmm10,xmm1
1637	add	edx,edi
1638	xor	esi,ebx
1639	movdqa	XMMWORD[rsp],xmm8
1640	ror	eax,7
1641	add	edx,ebp
1642	add	ecx,DWORD[24+rsp]
1643	pslld	xmm1,2
1644	xor	esi,eax
1645	mov	edi,edx
1646	psrld	xmm10,30
1647	rol	edx,5
1648	add	ecx,esi
1649	xor	edi,eax
1650	ror	ebp,7
1651	por	xmm1,xmm10
1652	add	ecx,edx
1653	add	ebx,DWORD[28+rsp]
1654	pshufd	xmm8,xmm0,238
1655	xor	edi,ebp
1656	mov	esi,ecx
1657	rol	ecx,5
1658	add	ebx,edi
1659	xor	esi,ebp
1660	ror	edx,7
1661	add	ebx,ecx
1662	pxor	xmm2,xmm6
1663	add	eax,DWORD[32+rsp]
1664	xor	esi,edx
1665	punpcklqdq	xmm8,xmm1
1666	mov	edi,ebx
1667	rol	ebx,5
1668	pxor	xmm2,xmm3
1669	add	eax,esi
1670	xor	edi,edx
1671	movdqa	xmm10,XMMWORD[r11]
1672	ror	ecx,7
1673	paddd	xmm9,xmm1
1674	add	eax,ebx
1675	pxor	xmm2,xmm8
1676	add	ebp,DWORD[36+rsp]
1677	xor	edi,ecx
1678	mov	esi,eax
1679	rol	eax,5
1680	movdqa	xmm8,xmm2
1681	add	ebp,edi
1682	xor	esi,ecx
1683	movdqa	XMMWORD[16+rsp],xmm9
1684	ror	ebx,7
1685	add	ebp,eax
1686	add	edx,DWORD[40+rsp]
1687	pslld	xmm2,2
1688	xor	esi,ebx
1689	mov	edi,ebp
1690	psrld	xmm8,30
1691	rol	ebp,5
1692	add	edx,esi
1693	xor	edi,ebx
1694	ror	eax,7
1695	por	xmm2,xmm8
1696	add	edx,ebp
1697	add	ecx,DWORD[44+rsp]
1698	pshufd	xmm9,xmm1,238
1699	xor	edi,eax
1700	mov	esi,edx
1701	rol	edx,5
1702	add	ecx,edi
1703	xor	esi,eax
1704	ror	ebp,7
1705	add	ecx,edx
1706	pxor	xmm3,xmm7
1707	add	ebx,DWORD[48+rsp]
1708	xor	esi,ebp
1709	punpcklqdq	xmm9,xmm2
1710	mov	edi,ecx
1711	rol	ecx,5
1712	pxor	xmm3,xmm4
1713	add	ebx,esi
1714	xor	edi,ebp
1715	movdqa	xmm8,xmm10
1716	ror	edx,7
1717	paddd	xmm10,xmm2
1718	add	ebx,ecx
1719	pxor	xmm3,xmm9
1720	add	eax,DWORD[52+rsp]
1721	xor	edi,edx
1722	mov	esi,ebx
1723	rol	ebx,5
1724	movdqa	xmm9,xmm3
1725	add	eax,edi
1726	xor	esi,edx
1727	movdqa	XMMWORD[32+rsp],xmm10
1728	ror	ecx,7
1729	add	eax,ebx
1730	add	ebp,DWORD[56+rsp]
1731	pslld	xmm3,2
1732	xor	esi,ecx
1733	mov	edi,eax
1734	psrld	xmm9,30
1735	rol	eax,5
1736	add	ebp,esi
1737	xor	edi,ecx
1738	ror	ebx,7
1739	por	xmm3,xmm9
1740	add	ebp,eax
1741	add	edx,DWORD[60+rsp]
1742	pshufd	xmm10,xmm2,238
1743	xor	edi,ebx
1744	mov	esi,ebp
1745	rol	ebp,5
1746	add	edx,edi
1747	xor	esi,ebx
1748	ror	eax,7
1749	add	edx,ebp
1750	pxor	xmm4,xmm0
1751	add	ecx,DWORD[rsp]
1752	xor	esi,eax
1753	punpcklqdq	xmm10,xmm3
1754	mov	edi,edx
1755	rol	edx,5
1756	pxor	xmm4,xmm5
1757	add	ecx,esi
1758	xor	edi,eax
1759	movdqa	xmm9,xmm8
1760	ror	ebp,7
1761	paddd	xmm8,xmm3
1762	add	ecx,edx
1763	pxor	xmm4,xmm10
1764	add	ebx,DWORD[4+rsp]
1765	xor	edi,ebp
1766	mov	esi,ecx
1767	rol	ecx,5
1768	movdqa	xmm10,xmm4
1769	add	ebx,edi
1770	xor	esi,ebp
1771	movdqa	XMMWORD[48+rsp],xmm8
1772	ror	edx,7
1773	add	ebx,ecx
1774	add	eax,DWORD[8+rsp]
1775	pslld	xmm4,2
1776	xor	esi,edx
1777	mov	edi,ebx
1778	psrld	xmm10,30
1779	rol	ebx,5
1780	add	eax,esi
1781	xor	edi,edx
1782	ror	ecx,7
1783	por	xmm4,xmm10
1784	add	eax,ebx
1785	add	ebp,DWORD[12+rsp]
1786	pshufd	xmm8,xmm3,238
1787	xor	edi,ecx
1788	mov	esi,eax
1789	rol	eax,5
1790	add	ebp,edi
1791	xor	esi,ecx
1792	ror	ebx,7
1793	add	ebp,eax
1794	pxor	xmm5,xmm1
1795	add	edx,DWORD[16+rsp]
1796	xor	esi,ebx
1797	punpcklqdq	xmm8,xmm4
1798	mov	edi,ebp
1799	rol	ebp,5
1800	pxor	xmm5,xmm6
1801	add	edx,esi
1802	xor	edi,ebx
1803	movdqa	xmm10,xmm9
1804	ror	eax,7
1805	paddd	xmm9,xmm4
1806	add	edx,ebp
1807	pxor	xmm5,xmm8
1808	add	ecx,DWORD[20+rsp]
1809	xor	edi,eax
1810	mov	esi,edx
1811	rol	edx,5
1812	movdqa	xmm8,xmm5
1813	add	ecx,edi
1814	xor	esi,eax
1815	movdqa	XMMWORD[rsp],xmm9
1816	ror	ebp,7
1817	add	ecx,edx
1818	add	ebx,DWORD[24+rsp]
1819	pslld	xmm5,2
1820	xor	esi,ebp
1821	mov	edi,ecx
1822	psrld	xmm8,30
1823	rol	ecx,5
1824	add	ebx,esi
1825	xor	edi,ebp
1826	ror	edx,7
1827	por	xmm5,xmm8
1828	add	ebx,ecx
1829	add	eax,DWORD[28+rsp]
1830	pshufd	xmm9,xmm4,238
1831	ror	ecx,7
1832	mov	esi,ebx
1833	xor	edi,edx
1834	rol	ebx,5
1835	add	eax,edi
1836	xor	esi,ecx
1837	xor	ecx,edx
1838	add	eax,ebx
1839	pxor	xmm6,xmm2
1840	add	ebp,DWORD[32+rsp]
1841	and	esi,ecx
1842	xor	ecx,edx
1843	ror	ebx,7
1844	punpcklqdq	xmm9,xmm5
1845	mov	edi,eax
1846	xor	esi,ecx
1847	pxor	xmm6,xmm7
1848	rol	eax,5
1849	add	ebp,esi
1850	movdqa	xmm8,xmm10
1851	xor	edi,ebx
1852	paddd	xmm10,xmm5
1853	xor	ebx,ecx
1854	pxor	xmm6,xmm9
1855	add	ebp,eax
1856	add	edx,DWORD[36+rsp]
1857	and	edi,ebx
1858	xor	ebx,ecx
1859	ror	eax,7
1860	movdqa	xmm9,xmm6
1861	mov	esi,ebp
1862	xor	edi,ebx
1863	movdqa	XMMWORD[16+rsp],xmm10
1864	rol	ebp,5
1865	add	edx,edi
1866	xor	esi,eax
1867	pslld	xmm6,2
1868	xor	eax,ebx
1869	add	edx,ebp
1870	psrld	xmm9,30
1871	add	ecx,DWORD[40+rsp]
1872	and	esi,eax
1873	xor	eax,ebx
1874	por	xmm6,xmm9
1875	ror	ebp,7
1876	mov	edi,edx
1877	xor	esi,eax
1878	rol	edx,5
1879	pshufd	xmm10,xmm5,238
1880	add	ecx,esi
1881	xor	edi,ebp
1882	xor	ebp,eax
1883	add	ecx,edx
1884	add	ebx,DWORD[44+rsp]
1885	and	edi,ebp
1886	xor	ebp,eax
1887	ror	edx,7
1888	mov	esi,ecx
1889	xor	edi,ebp
1890	rol	ecx,5
1891	add	ebx,edi
1892	xor	esi,edx
1893	xor	edx,ebp
1894	add	ebx,ecx
1895	pxor	xmm7,xmm3
1896	add	eax,DWORD[48+rsp]
1897	and	esi,edx
1898	xor	edx,ebp
1899	ror	ecx,7
1900	punpcklqdq	xmm10,xmm6
1901	mov	edi,ebx
1902	xor	esi,edx
1903	pxor	xmm7,xmm0
1904	rol	ebx,5
1905	add	eax,esi
1906	movdqa	xmm9,XMMWORD[32+r11]
1907	xor	edi,ecx
1908	paddd	xmm8,xmm6
1909	xor	ecx,edx
1910	pxor	xmm7,xmm10
1911	add	eax,ebx
1912	add	ebp,DWORD[52+rsp]
1913	and	edi,ecx
1914	xor	ecx,edx
1915	ror	ebx,7
1916	movdqa	xmm10,xmm7
1917	mov	esi,eax
1918	xor	edi,ecx
1919	movdqa	XMMWORD[32+rsp],xmm8
1920	rol	eax,5
1921	add	ebp,edi
1922	xor	esi,ebx
1923	pslld	xmm7,2
1924	xor	ebx,ecx
1925	add	ebp,eax
1926	psrld	xmm10,30
1927	add	edx,DWORD[56+rsp]
1928	and	esi,ebx
1929	xor	ebx,ecx
1930	por	xmm7,xmm10
1931	ror	eax,7
1932	mov	edi,ebp
1933	xor	esi,ebx
1934	rol	ebp,5
1935	pshufd	xmm8,xmm6,238
1936	add	edx,esi
1937	xor	edi,eax
1938	xor	eax,ebx
1939	add	edx,ebp
1940	add	ecx,DWORD[60+rsp]
1941	and	edi,eax
1942	xor	eax,ebx
1943	ror	ebp,7
1944	mov	esi,edx
1945	xor	edi,eax
1946	rol	edx,5
1947	add	ecx,edi
1948	xor	esi,ebp
1949	xor	ebp,eax
1950	add	ecx,edx
1951	pxor	xmm0,xmm4
1952	add	ebx,DWORD[rsp]
1953	and	esi,ebp
1954	xor	ebp,eax
1955	ror	edx,7
1956	punpcklqdq	xmm8,xmm7
1957	mov	edi,ecx
1958	xor	esi,ebp
1959	pxor	xmm0,xmm1
1960	rol	ecx,5
1961	add	ebx,esi
1962	movdqa	xmm10,xmm9
1963	xor	edi,edx
1964	paddd	xmm9,xmm7
1965	xor	edx,ebp
1966	pxor	xmm0,xmm8
1967	add	ebx,ecx
1968	add	eax,DWORD[4+rsp]
1969	and	edi,edx
1970	xor	edx,ebp
1971	ror	ecx,7
1972	movdqa	xmm8,xmm0
1973	mov	esi,ebx
1974	xor	edi,edx
1975	movdqa	XMMWORD[48+rsp],xmm9
1976	rol	ebx,5
1977	add	eax,edi
1978	xor	esi,ecx
1979	pslld	xmm0,2
1980	xor	ecx,edx
1981	add	eax,ebx
1982	psrld	xmm8,30
1983	add	ebp,DWORD[8+rsp]
1984	and	esi,ecx
1985	xor	ecx,edx
1986	por	xmm0,xmm8
1987	ror	ebx,7
1988	mov	edi,eax
1989	xor	esi,ecx
1990	rol	eax,5
1991	pshufd	xmm9,xmm7,238
1992	add	ebp,esi
1993	xor	edi,ebx
1994	xor	ebx,ecx
1995	add	ebp,eax
1996	add	edx,DWORD[12+rsp]
1997	and	edi,ebx
1998	xor	ebx,ecx
1999	ror	eax,7
2000	mov	esi,ebp
2001	xor	edi,ebx
2002	rol	ebp,5
2003	add	edx,edi
2004	xor	esi,eax
2005	xor	eax,ebx
2006	add	edx,ebp
2007	pxor	xmm1,xmm5
2008	add	ecx,DWORD[16+rsp]
2009	and	esi,eax
2010	xor	eax,ebx
2011	ror	ebp,7
2012	punpcklqdq	xmm9,xmm0
2013	mov	edi,edx
2014	xor	esi,eax
2015	pxor	xmm1,xmm2
2016	rol	edx,5
2017	add	ecx,esi
2018	movdqa	xmm8,xmm10
2019	xor	edi,ebp
2020	paddd	xmm10,xmm0
2021	xor	ebp,eax
2022	pxor	xmm1,xmm9
2023	add	ecx,edx
2024	add	ebx,DWORD[20+rsp]
2025	and	edi,ebp
2026	xor	ebp,eax
2027	ror	edx,7
2028	movdqa	xmm9,xmm1
2029	mov	esi,ecx
2030	xor	edi,ebp
2031	movdqa	XMMWORD[rsp],xmm10
2032	rol	ecx,5
2033	add	ebx,edi
2034	xor	esi,edx
2035	pslld	xmm1,2
2036	xor	edx,ebp
2037	add	ebx,ecx
2038	psrld	xmm9,30
2039	add	eax,DWORD[24+rsp]
2040	and	esi,edx
2041	xor	edx,ebp
2042	por	xmm1,xmm9
2043	ror	ecx,7
2044	mov	edi,ebx
2045	xor	esi,edx
2046	rol	ebx,5
2047	pshufd	xmm10,xmm0,238
2048	add	eax,esi
2049	xor	edi,ecx
2050	xor	ecx,edx
2051	add	eax,ebx
2052	add	ebp,DWORD[28+rsp]
2053	and	edi,ecx
2054	xor	ecx,edx
2055	ror	ebx,7
2056	mov	esi,eax
2057	xor	edi,ecx
2058	rol	eax,5
2059	add	ebp,edi
2060	xor	esi,ebx
2061	xor	ebx,ecx
2062	add	ebp,eax
2063	pxor	xmm2,xmm6
2064	add	edx,DWORD[32+rsp]
2065	and	esi,ebx
2066	xor	ebx,ecx
2067	ror	eax,7
2068	punpcklqdq	xmm10,xmm1
2069	mov	edi,ebp
2070	xor	esi,ebx
2071	pxor	xmm2,xmm3
2072	rol	ebp,5
2073	add	edx,esi
2074	movdqa	xmm9,xmm8
2075	xor	edi,eax
2076	paddd	xmm8,xmm1
2077	xor	eax,ebx
2078	pxor	xmm2,xmm10
2079	add	edx,ebp
2080	add	ecx,DWORD[36+rsp]
2081	and	edi,eax
2082	xor	eax,ebx
2083	ror	ebp,7
2084	movdqa	xmm10,xmm2
2085	mov	esi,edx
2086	xor	edi,eax
2087	movdqa	XMMWORD[16+rsp],xmm8
2088	rol	edx,5
2089	add	ecx,edi
2090	xor	esi,ebp
2091	pslld	xmm2,2
2092	xor	ebp,eax
2093	add	ecx,edx
2094	psrld	xmm10,30
2095	add	ebx,DWORD[40+rsp]
2096	and	esi,ebp
2097	xor	ebp,eax
2098	por	xmm2,xmm10
2099	ror	edx,7
2100	mov	edi,ecx
2101	xor	esi,ebp
2102	rol	ecx,5
2103	pshufd	xmm8,xmm1,238
2104	add	ebx,esi
2105	xor	edi,edx
2106	xor	edx,ebp
2107	add	ebx,ecx
2108	add	eax,DWORD[44+rsp]
2109	and	edi,edx
2110	xor	edx,ebp
2111	ror	ecx,7
2112	mov	esi,ebx
2113	xor	edi,edx
2114	rol	ebx,5
2115	add	eax,edi
2116	xor	esi,edx
2117	add	eax,ebx
2118	pxor	xmm3,xmm7
2119	add	ebp,DWORD[48+rsp]
2120	xor	esi,ecx
2121	punpcklqdq	xmm8,xmm2
2122	mov	edi,eax
2123	rol	eax,5
2124	pxor	xmm3,xmm4
2125	add	ebp,esi
2126	xor	edi,ecx
2127	movdqa	xmm10,xmm9
2128	ror	ebx,7
2129	paddd	xmm9,xmm2
2130	add	ebp,eax
2131	pxor	xmm3,xmm8
2132	add	edx,DWORD[52+rsp]
2133	xor	edi,ebx
2134	mov	esi,ebp
2135	rol	ebp,5
2136	movdqa	xmm8,xmm3
2137	add	edx,edi
2138	xor	esi,ebx
2139	movdqa	XMMWORD[32+rsp],xmm9
2140	ror	eax,7
2141	add	edx,ebp
2142	add	ecx,DWORD[56+rsp]
2143	pslld	xmm3,2
2144	xor	esi,eax
2145	mov	edi,edx
2146	psrld	xmm8,30
2147	rol	edx,5
2148	add	ecx,esi
2149	xor	edi,eax
2150	ror	ebp,7
2151	por	xmm3,xmm8
2152	add	ecx,edx
2153	add	ebx,DWORD[60+rsp]
2154	xor	edi,ebp
2155	mov	esi,ecx
2156	rol	ecx,5
2157	add	ebx,edi
2158	xor	esi,ebp
2159	ror	edx,7
2160	add	ebx,ecx
2161	add	eax,DWORD[rsp]
2162	xor	esi,edx
2163	mov	edi,ebx
2164	rol	ebx,5
2165	paddd	xmm10,xmm3
2166	add	eax,esi
2167	xor	edi,edx
2168	movdqa	XMMWORD[48+rsp],xmm10
2169	ror	ecx,7
2170	add	eax,ebx
2171	add	ebp,DWORD[4+rsp]
2172	xor	edi,ecx
2173	mov	esi,eax
2174	rol	eax,5
2175	add	ebp,edi
2176	xor	esi,ecx
2177	ror	ebx,7
2178	add	ebp,eax
2179	add	edx,DWORD[8+rsp]
2180	xor	esi,ebx
2181	mov	edi,ebp
2182	rol	ebp,5
2183	add	edx,esi
2184	xor	edi,ebx
2185	ror	eax,7
2186	add	edx,ebp
2187	add	ecx,DWORD[12+rsp]
2188	xor	edi,eax
2189	mov	esi,edx
2190	rol	edx,5
2191	add	ecx,edi
2192	xor	esi,eax
2193	ror	ebp,7
2194	add	ecx,edx
2195	cmp	r9,r10
2196	je	NEAR $L$done_ssse3
2197	movdqa	xmm6,XMMWORD[64+r11]
2198	movdqa	xmm9,XMMWORD[((-64))+r11]
2199	movdqu	xmm0,XMMWORD[r9]
2200	movdqu	xmm1,XMMWORD[16+r9]
2201	movdqu	xmm2,XMMWORD[32+r9]
2202	movdqu	xmm3,XMMWORD[48+r9]
2203DB	102,15,56,0,198
2204	add	r9,64
2205	add	ebx,DWORD[16+rsp]
2206	xor	esi,ebp
2207	mov	edi,ecx
2208DB	102,15,56,0,206
2209	rol	ecx,5
2210	add	ebx,esi
2211	xor	edi,ebp
2212	ror	edx,7
2213	paddd	xmm0,xmm9
2214	add	ebx,ecx
2215	add	eax,DWORD[20+rsp]
2216	xor	edi,edx
2217	mov	esi,ebx
2218	movdqa	XMMWORD[rsp],xmm0
2219	rol	ebx,5
2220	add	eax,edi
2221	xor	esi,edx
2222	ror	ecx,7
2223	psubd	xmm0,xmm9
2224	add	eax,ebx
2225	add	ebp,DWORD[24+rsp]
2226	xor	esi,ecx
2227	mov	edi,eax
2228	rol	eax,5
2229	add	ebp,esi
2230	xor	edi,ecx
2231	ror	ebx,7
2232	add	ebp,eax
2233	add	edx,DWORD[28+rsp]
2234	xor	edi,ebx
2235	mov	esi,ebp
2236	rol	ebp,5
2237	add	edx,edi
2238	xor	esi,ebx
2239	ror	eax,7
2240	add	edx,ebp
2241	add	ecx,DWORD[32+rsp]
2242	xor	esi,eax
2243	mov	edi,edx
2244DB	102,15,56,0,214
2245	rol	edx,5
2246	add	ecx,esi
2247	xor	edi,eax
2248	ror	ebp,7
2249	paddd	xmm1,xmm9
2250	add	ecx,edx
2251	add	ebx,DWORD[36+rsp]
2252	xor	edi,ebp
2253	mov	esi,ecx
2254	movdqa	XMMWORD[16+rsp],xmm1
2255	rol	ecx,5
2256	add	ebx,edi
2257	xor	esi,ebp
2258	ror	edx,7
2259	psubd	xmm1,xmm9
2260	add	ebx,ecx
2261	add	eax,DWORD[40+rsp]
2262	xor	esi,edx
2263	mov	edi,ebx
2264	rol	ebx,5
2265	add	eax,esi
2266	xor	edi,edx
2267	ror	ecx,7
2268	add	eax,ebx
2269	add	ebp,DWORD[44+rsp]
2270	xor	edi,ecx
2271	mov	esi,eax
2272	rol	eax,5
2273	add	ebp,edi
2274	xor	esi,ecx
2275	ror	ebx,7
2276	add	ebp,eax
2277	add	edx,DWORD[48+rsp]
2278	xor	esi,ebx
2279	mov	edi,ebp
2280DB	102,15,56,0,222
2281	rol	ebp,5
2282	add	edx,esi
2283	xor	edi,ebx
2284	ror	eax,7
2285	paddd	xmm2,xmm9
2286	add	edx,ebp
2287	add	ecx,DWORD[52+rsp]
2288	xor	edi,eax
2289	mov	esi,edx
2290	movdqa	XMMWORD[32+rsp],xmm2
2291	rol	edx,5
2292	add	ecx,edi
2293	xor	esi,eax
2294	ror	ebp,7
2295	psubd	xmm2,xmm9
2296	add	ecx,edx
2297	add	ebx,DWORD[56+rsp]
2298	xor	esi,ebp
2299	mov	edi,ecx
2300	rol	ecx,5
2301	add	ebx,esi
2302	xor	edi,ebp
2303	ror	edx,7
2304	add	ebx,ecx
2305	add	eax,DWORD[60+rsp]
2306	xor	edi,edx
2307	mov	esi,ebx
2308	rol	ebx,5
2309	add	eax,edi
2310	ror	ecx,7
2311	add	eax,ebx
2312	add	eax,DWORD[r8]
2313	add	esi,DWORD[4+r8]
2314	add	ecx,DWORD[8+r8]
2315	add	edx,DWORD[12+r8]
2316	mov	DWORD[r8],eax
2317	add	ebp,DWORD[16+r8]
2318	mov	DWORD[4+r8],esi
2319	mov	ebx,esi
2320	mov	DWORD[8+r8],ecx
2321	mov	edi,ecx
2322	mov	DWORD[12+r8],edx
2323	xor	edi,edx
2324	mov	DWORD[16+r8],ebp
2325	and	esi,edi
2326	jmp	NEAR $L$oop_ssse3
2327
2328ALIGN	16
2329$L$done_ssse3:
2330	add	ebx,DWORD[16+rsp]
2331	xor	esi,ebp
2332	mov	edi,ecx
2333	rol	ecx,5
2334	add	ebx,esi
2335	xor	edi,ebp
2336	ror	edx,7
2337	add	ebx,ecx
2338	add	eax,DWORD[20+rsp]
2339	xor	edi,edx
2340	mov	esi,ebx
2341	rol	ebx,5
2342	add	eax,edi
2343	xor	esi,edx
2344	ror	ecx,7
2345	add	eax,ebx
2346	add	ebp,DWORD[24+rsp]
2347	xor	esi,ecx
2348	mov	edi,eax
2349	rol	eax,5
2350	add	ebp,esi
2351	xor	edi,ecx
2352	ror	ebx,7
2353	add	ebp,eax
2354	add	edx,DWORD[28+rsp]
2355	xor	edi,ebx
2356	mov	esi,ebp
2357	rol	ebp,5
2358	add	edx,edi
2359	xor	esi,ebx
2360	ror	eax,7
2361	add	edx,ebp
2362	add	ecx,DWORD[32+rsp]
2363	xor	esi,eax
2364	mov	edi,edx
2365	rol	edx,5
2366	add	ecx,esi
2367	xor	edi,eax
2368	ror	ebp,7
2369	add	ecx,edx
2370	add	ebx,DWORD[36+rsp]
2371	xor	edi,ebp
2372	mov	esi,ecx
2373	rol	ecx,5
2374	add	ebx,edi
2375	xor	esi,ebp
2376	ror	edx,7
2377	add	ebx,ecx
2378	add	eax,DWORD[40+rsp]
2379	xor	esi,edx
2380	mov	edi,ebx
2381	rol	ebx,5
2382	add	eax,esi
2383	xor	edi,edx
2384	ror	ecx,7
2385	add	eax,ebx
2386	add	ebp,DWORD[44+rsp]
2387	xor	edi,ecx
2388	mov	esi,eax
2389	rol	eax,5
2390	add	ebp,edi
2391	xor	esi,ecx
2392	ror	ebx,7
2393	add	ebp,eax
2394	add	edx,DWORD[48+rsp]
2395	xor	esi,ebx
2396	mov	edi,ebp
2397	rol	ebp,5
2398	add	edx,esi
2399	xor	edi,ebx
2400	ror	eax,7
2401	add	edx,ebp
2402	add	ecx,DWORD[52+rsp]
2403	xor	edi,eax
2404	mov	esi,edx
2405	rol	edx,5
2406	add	ecx,edi
2407	xor	esi,eax
2408	ror	ebp,7
2409	add	ecx,edx
2410	add	ebx,DWORD[56+rsp]
2411	xor	esi,ebp
2412	mov	edi,ecx
2413	rol	ecx,5
2414	add	ebx,esi
2415	xor	edi,ebp
2416	ror	edx,7
2417	add	ebx,ecx
2418	add	eax,DWORD[60+rsp]
2419	xor	edi,edx
2420	mov	esi,ebx
2421	rol	ebx,5
2422	add	eax,edi
2423	ror	ecx,7
2424	add	eax,ebx
2425	add	eax,DWORD[r8]
2426	add	esi,DWORD[4+r8]
2427	add	ecx,DWORD[8+r8]
2428	mov	DWORD[r8],eax
2429	add	edx,DWORD[12+r8]
2430	mov	DWORD[4+r8],esi
2431	add	ebp,DWORD[16+r8]
2432	mov	DWORD[8+r8],ecx
2433	mov	DWORD[12+r8],edx
2434	mov	DWORD[16+r8],ebp
2435	movaps	xmm6,XMMWORD[((-40-96))+r14]
2436	movaps	xmm7,XMMWORD[((-40-80))+r14]
2437	movaps	xmm8,XMMWORD[((-40-64))+r14]
2438	movaps	xmm9,XMMWORD[((-40-48))+r14]
2439	movaps	xmm10,XMMWORD[((-40-32))+r14]
2440	movaps	xmm11,XMMWORD[((-40-16))+r14]
2441	lea	rsi,[r14]
2442	mov	r14,QWORD[((-40))+rsi]
2443	mov	r13,QWORD[((-32))+rsi]
2444	mov	r12,QWORD[((-24))+rsi]
2445	mov	rbp,QWORD[((-16))+rsi]
2446	mov	rbx,QWORD[((-8))+rsi]
2447	lea	rsp,[rsi]
2448$L$epilogue_ssse3:
2449	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
2450	mov	rsi,QWORD[16+rsp]
2451	DB	0F3h,0C3h		;repret
2452$L$SEH_end_sha1_block_data_order_ssse3:
2453
2454ALIGN	16
2455sha1_block_data_order_avx:
2456	mov	QWORD[8+rsp],rdi	;WIN64 prologue
2457	mov	QWORD[16+rsp],rsi
2458	mov	rax,rsp
2459$L$SEH_begin_sha1_block_data_order_avx:
2460	mov	rdi,rcx
2461	mov	rsi,rdx
2462	mov	rdx,r8
2463
2464
2465_avx_shortcut:
2466	mov	rax,rsp
2467	push	rbx
2468	push	rbp
2469	push	r12
2470	push	r13
2471	push	r14
2472	lea	rsp,[((-160))+rsp]
2473	vzeroupper
2474	vmovaps	XMMWORD[(-40-96)+rax],xmm6
2475	vmovaps	XMMWORD[(-40-80)+rax],xmm7
2476	vmovaps	XMMWORD[(-40-64)+rax],xmm8
2477	vmovaps	XMMWORD[(-40-48)+rax],xmm9
2478	vmovaps	XMMWORD[(-40-32)+rax],xmm10
2479	vmovaps	XMMWORD[(-40-16)+rax],xmm11
2480$L$prologue_avx:
2481	mov	r14,rax
2482	and	rsp,-64
2483	mov	r8,rdi
2484	mov	r9,rsi
2485	mov	r10,rdx
2486
2487	shl	r10,6
2488	add	r10,r9
2489	lea	r11,[((K_XX_XX+64))]
2490
2491	mov	eax,DWORD[r8]
2492	mov	ebx,DWORD[4+r8]
2493	mov	ecx,DWORD[8+r8]
2494	mov	edx,DWORD[12+r8]
2495	mov	esi,ebx
2496	mov	ebp,DWORD[16+r8]
2497	mov	edi,ecx
2498	xor	edi,edx
2499	and	esi,edi
2500
2501	vmovdqa	xmm6,XMMWORD[64+r11]
2502	vmovdqa	xmm11,XMMWORD[((-64))+r11]
2503	vmovdqu	xmm0,XMMWORD[r9]
2504	vmovdqu	xmm1,XMMWORD[16+r9]
2505	vmovdqu	xmm2,XMMWORD[32+r9]
2506	vmovdqu	xmm3,XMMWORD[48+r9]
2507	vpshufb	xmm0,xmm0,xmm6
2508	add	r9,64
2509	vpshufb	xmm1,xmm1,xmm6
2510	vpshufb	xmm2,xmm2,xmm6
2511	vpshufb	xmm3,xmm3,xmm6
2512	vpaddd	xmm4,xmm0,xmm11
2513	vpaddd	xmm5,xmm1,xmm11
2514	vpaddd	xmm6,xmm2,xmm11
2515	vmovdqa	XMMWORD[rsp],xmm4
2516	vmovdqa	XMMWORD[16+rsp],xmm5
2517	vmovdqa	XMMWORD[32+rsp],xmm6
2518	jmp	NEAR $L$oop_avx
2519ALIGN	16
2520$L$oop_avx:
2521	shrd	ebx,ebx,2
2522	xor	esi,edx
2523	vpalignr	xmm4,xmm1,xmm0,8
2524	mov	edi,eax
2525	add	ebp,DWORD[rsp]
2526	vpaddd	xmm9,xmm11,xmm3
2527	xor	ebx,ecx
2528	shld	eax,eax,5
2529	vpsrldq	xmm8,xmm3,4
2530	add	ebp,esi
2531	and	edi,ebx
2532	vpxor	xmm4,xmm4,xmm0
2533	xor	ebx,ecx
2534	add	ebp,eax
2535	vpxor	xmm8,xmm8,xmm2
2536	shrd	eax,eax,7
2537	xor	edi,ecx
2538	mov	esi,ebp
2539	add	edx,DWORD[4+rsp]
2540	vpxor	xmm4,xmm4,xmm8
2541	xor	eax,ebx
2542	shld	ebp,ebp,5
2543	vmovdqa	XMMWORD[48+rsp],xmm9
2544	add	edx,edi
2545	and	esi,eax
2546	vpsrld	xmm8,xmm4,31
2547	xor	eax,ebx
2548	add	edx,ebp
2549	shrd	ebp,ebp,7
2550	xor	esi,ebx
2551	vpslldq	xmm10,xmm4,12
2552	vpaddd	xmm4,xmm4,xmm4
2553	mov	edi,edx
2554	add	ecx,DWORD[8+rsp]
2555	xor	ebp,eax
2556	shld	edx,edx,5
2557	vpsrld	xmm9,xmm10,30
2558	vpor	xmm4,xmm4,xmm8
2559	add	ecx,esi
2560	and	edi,ebp
2561	xor	ebp,eax
2562	add	ecx,edx
2563	vpslld	xmm10,xmm10,2
2564	vpxor	xmm4,xmm4,xmm9
2565	shrd	edx,edx,7
2566	xor	edi,eax
2567	mov	esi,ecx
2568	add	ebx,DWORD[12+rsp]
2569	vpxor	xmm4,xmm4,xmm10
2570	xor	edx,ebp
2571	shld	ecx,ecx,5
2572	add	ebx,edi
2573	and	esi,edx
2574	xor	edx,ebp
2575	add	ebx,ecx
2576	shrd	ecx,ecx,7
2577	xor	esi,ebp
2578	vpalignr	xmm5,xmm2,xmm1,8
2579	mov	edi,ebx
2580	add	eax,DWORD[16+rsp]
2581	vpaddd	xmm9,xmm11,xmm4
2582	xor	ecx,edx
2583	shld	ebx,ebx,5
2584	vpsrldq	xmm8,xmm4,4
2585	add	eax,esi
2586	and	edi,ecx
2587	vpxor	xmm5,xmm5,xmm1
2588	xor	ecx,edx
2589	add	eax,ebx
2590	vpxor	xmm8,xmm8,xmm3
2591	shrd	ebx,ebx,7
2592	xor	edi,edx
2593	mov	esi,eax
2594	add	ebp,DWORD[20+rsp]
2595	vpxor	xmm5,xmm5,xmm8
2596	xor	ebx,ecx
2597	shld	eax,eax,5
2598	vmovdqa	XMMWORD[rsp],xmm9
2599	add	ebp,edi
2600	and	esi,ebx
2601	vpsrld	xmm8,xmm5,31
2602	xor	ebx,ecx
2603	add	ebp,eax
2604	shrd	eax,eax,7
2605	xor	esi,ecx
2606	vpslldq	xmm10,xmm5,12
2607	vpaddd	xmm5,xmm5,xmm5
2608	mov	edi,ebp
2609	add	edx,DWORD[24+rsp]
2610	xor	eax,ebx
2611	shld	ebp,ebp,5
2612	vpsrld	xmm9,xmm10,30
2613	vpor	xmm5,xmm5,xmm8
2614	add	edx,esi
2615	and	edi,eax
2616	xor	eax,ebx
2617	add	edx,ebp
2618	vpslld	xmm10,xmm10,2
2619	vpxor	xmm5,xmm5,xmm9
2620	shrd	ebp,ebp,7
2621	xor	edi,ebx
2622	mov	esi,edx
2623	add	ecx,DWORD[28+rsp]
2624	vpxor	xmm5,xmm5,xmm10
2625	xor	ebp,eax
2626	shld	edx,edx,5
2627	vmovdqa	xmm11,XMMWORD[((-32))+r11]
2628	add	ecx,edi
2629	and	esi,ebp
2630	xor	ebp,eax
2631	add	ecx,edx
2632	shrd	edx,edx,7
2633	xor	esi,eax
2634	vpalignr	xmm6,xmm3,xmm2,8
2635	mov	edi,ecx
2636	add	ebx,DWORD[32+rsp]
2637	vpaddd	xmm9,xmm11,xmm5
2638	xor	edx,ebp
2639	shld	ecx,ecx,5
2640	vpsrldq	xmm8,xmm5,4
2641	add	ebx,esi
2642	and	edi,edx
2643	vpxor	xmm6,xmm6,xmm2
2644	xor	edx,ebp
2645	add	ebx,ecx
2646	vpxor	xmm8,xmm8,xmm4
2647	shrd	ecx,ecx,7
2648	xor	edi,ebp
2649	mov	esi,ebx
2650	add	eax,DWORD[36+rsp]
2651	vpxor	xmm6,xmm6,xmm8
2652	xor	ecx,edx
2653	shld	ebx,ebx,5
2654	vmovdqa	XMMWORD[16+rsp],xmm9
2655	add	eax,edi
2656	and	esi,ecx
2657	vpsrld	xmm8,xmm6,31
2658	xor	ecx,edx
2659	add	eax,ebx
2660	shrd	ebx,ebx,7
2661	xor	esi,edx
2662	vpslldq	xmm10,xmm6,12
2663	vpaddd	xmm6,xmm6,xmm6
2664	mov	edi,eax
2665	add	ebp,DWORD[40+rsp]
2666	xor	ebx,ecx
2667	shld	eax,eax,5
2668	vpsrld	xmm9,xmm10,30
2669	vpor	xmm6,xmm6,xmm8
2670	add	ebp,esi
2671	and	edi,ebx
2672	xor	ebx,ecx
2673	add	ebp,eax
2674	vpslld	xmm10,xmm10,2
2675	vpxor	xmm6,xmm6,xmm9
2676	shrd	eax,eax,7
2677	xor	edi,ecx
2678	mov	esi,ebp
2679	add	edx,DWORD[44+rsp]
2680	vpxor	xmm6,xmm6,xmm10
2681	xor	eax,ebx
2682	shld	ebp,ebp,5
2683	add	edx,edi
2684	and	esi,eax
2685	xor	eax,ebx
2686	add	edx,ebp
2687	shrd	ebp,ebp,7
2688	xor	esi,ebx
2689	vpalignr	xmm7,xmm4,xmm3,8
2690	mov	edi,edx
2691	add	ecx,DWORD[48+rsp]
2692	vpaddd	xmm9,xmm11,xmm6
2693	xor	ebp,eax
2694	shld	edx,edx,5
2695	vpsrldq	xmm8,xmm6,4
2696	add	ecx,esi
2697	and	edi,ebp
2698	vpxor	xmm7,xmm7,xmm3
2699	xor	ebp,eax
2700	add	ecx,edx
2701	vpxor	xmm8,xmm8,xmm5
2702	shrd	edx,edx,7
2703	xor	edi,eax
2704	mov	esi,ecx
2705	add	ebx,DWORD[52+rsp]
2706	vpxor	xmm7,xmm7,xmm8
2707	xor	edx,ebp
2708	shld	ecx,ecx,5
2709	vmovdqa	XMMWORD[32+rsp],xmm9
2710	add	ebx,edi
2711	and	esi,edx
2712	vpsrld	xmm8,xmm7,31
2713	xor	edx,ebp
2714	add	ebx,ecx
2715	shrd	ecx,ecx,7
2716	xor	esi,ebp
2717	vpslldq	xmm10,xmm7,12
2718	vpaddd	xmm7,xmm7,xmm7
2719	mov	edi,ebx
2720	add	eax,DWORD[56+rsp]
2721	xor	ecx,edx
2722	shld	ebx,ebx,5
2723	vpsrld	xmm9,xmm10,30
2724	vpor	xmm7,xmm7,xmm8
2725	add	eax,esi
2726	and	edi,ecx
2727	xor	ecx,edx
2728	add	eax,ebx
2729	vpslld	xmm10,xmm10,2
2730	vpxor	xmm7,xmm7,xmm9
2731	shrd	ebx,ebx,7
2732	xor	edi,edx
2733	mov	esi,eax
2734	add	ebp,DWORD[60+rsp]
2735	vpxor	xmm7,xmm7,xmm10
2736	xor	ebx,ecx
2737	shld	eax,eax,5
2738	add	ebp,edi
2739	and	esi,ebx
2740	xor	ebx,ecx
2741	add	ebp,eax
2742	vpalignr	xmm8,xmm7,xmm6,8
2743	vpxor	xmm0,xmm0,xmm4
2744	shrd	eax,eax,7
2745	xor	esi,ecx
2746	mov	edi,ebp
2747	add	edx,DWORD[rsp]
2748	vpxor	xmm0,xmm0,xmm1
2749	xor	eax,ebx
2750	shld	ebp,ebp,5
2751	vpaddd	xmm9,xmm11,xmm7
2752	add	edx,esi
2753	and	edi,eax
2754	vpxor	xmm0,xmm0,xmm8
2755	xor	eax,ebx
2756	add	edx,ebp
2757	shrd	ebp,ebp,7
2758	xor	edi,ebx
2759	vpsrld	xmm8,xmm0,30
2760	vmovdqa	XMMWORD[48+rsp],xmm9
2761	mov	esi,edx
2762	add	ecx,DWORD[4+rsp]
2763	xor	ebp,eax
2764	shld	edx,edx,5
2765	vpslld	xmm0,xmm0,2
2766	add	ecx,edi
2767	and	esi,ebp
2768	xor	ebp,eax
2769	add	ecx,edx
2770	shrd	edx,edx,7
2771	xor	esi,eax
2772	mov	edi,ecx
2773	add	ebx,DWORD[8+rsp]
2774	vpor	xmm0,xmm0,xmm8
2775	xor	edx,ebp
2776	shld	ecx,ecx,5
2777	add	ebx,esi
2778	and	edi,edx
2779	xor	edx,ebp
2780	add	ebx,ecx
2781	add	eax,DWORD[12+rsp]
2782	xor	edi,ebp
2783	mov	esi,ebx
2784	shld	ebx,ebx,5
2785	add	eax,edi
2786	xor	esi,edx
2787	shrd	ecx,ecx,7
2788	add	eax,ebx
2789	vpalignr	xmm8,xmm0,xmm7,8
2790	vpxor	xmm1,xmm1,xmm5
2791	add	ebp,DWORD[16+rsp]
2792	xor	esi,ecx
2793	mov	edi,eax
2794	shld	eax,eax,5
2795	vpxor	xmm1,xmm1,xmm2
2796	add	ebp,esi
2797	xor	edi,ecx
2798	vpaddd	xmm9,xmm11,xmm0
2799	shrd	ebx,ebx,7
2800	add	ebp,eax
2801	vpxor	xmm1,xmm1,xmm8
2802	add	edx,DWORD[20+rsp]
2803	xor	edi,ebx
2804	mov	esi,ebp
2805	shld	ebp,ebp,5
2806	vpsrld	xmm8,xmm1,30
2807	vmovdqa	XMMWORD[rsp],xmm9
2808	add	edx,edi
2809	xor	esi,ebx
2810	shrd	eax,eax,7
2811	add	edx,ebp
2812	vpslld	xmm1,xmm1,2
2813	add	ecx,DWORD[24+rsp]
2814	xor	esi,eax
2815	mov	edi,edx
2816	shld	edx,edx,5
2817	add	ecx,esi
2818	xor	edi,eax
2819	shrd	ebp,ebp,7
2820	add	ecx,edx
2821	vpor	xmm1,xmm1,xmm8
2822	add	ebx,DWORD[28+rsp]
2823	xor	edi,ebp
2824	mov	esi,ecx
2825	shld	ecx,ecx,5
2826	add	ebx,edi
2827	xor	esi,ebp
2828	shrd	edx,edx,7
2829	add	ebx,ecx
2830	vpalignr	xmm8,xmm1,xmm0,8
2831	vpxor	xmm2,xmm2,xmm6
2832	add	eax,DWORD[32+rsp]
2833	xor	esi,edx
2834	mov	edi,ebx
2835	shld	ebx,ebx,5
2836	vpxor	xmm2,xmm2,xmm3
2837	add	eax,esi
2838	xor	edi,edx
2839	vpaddd	xmm9,xmm11,xmm1
2840	vmovdqa	xmm11,XMMWORD[r11]
2841	shrd	ecx,ecx,7
2842	add	eax,ebx
2843	vpxor	xmm2,xmm2,xmm8
2844	add	ebp,DWORD[36+rsp]
2845	xor	edi,ecx
2846	mov	esi,eax
2847	shld	eax,eax,5
2848	vpsrld	xmm8,xmm2,30
2849	vmovdqa	XMMWORD[16+rsp],xmm9
2850	add	ebp,edi
2851	xor	esi,ecx
2852	shrd	ebx,ebx,7
2853	add	ebp,eax
2854	vpslld	xmm2,xmm2,2
2855	add	edx,DWORD[40+rsp]
2856	xor	esi,ebx
2857	mov	edi,ebp
2858	shld	ebp,ebp,5
2859	add	edx,esi
2860	xor	edi,ebx
2861	shrd	eax,eax,7
2862	add	edx,ebp
2863	vpor	xmm2,xmm2,xmm8
2864	add	ecx,DWORD[44+rsp]
2865	xor	edi,eax
2866	mov	esi,edx
2867	shld	edx,edx,5
2868	add	ecx,edi
2869	xor	esi,eax
2870	shrd	ebp,ebp,7
2871	add	ecx,edx
2872	vpalignr	xmm8,xmm2,xmm1,8
2873	vpxor	xmm3,xmm3,xmm7
2874	add	ebx,DWORD[48+rsp]
2875	xor	esi,ebp
2876	mov	edi,ecx
2877	shld	ecx,ecx,5
2878	vpxor	xmm3,xmm3,xmm4
2879	add	ebx,esi
2880	xor	edi,ebp
2881	vpaddd	xmm9,xmm11,xmm2
2882	shrd	edx,edx,7
2883	add	ebx,ecx
2884	vpxor	xmm3,xmm3,xmm8
2885	add	eax,DWORD[52+rsp]
2886	xor	edi,edx
2887	mov	esi,ebx
2888	shld	ebx,ebx,5
2889	vpsrld	xmm8,xmm3,30
2890	vmovdqa	XMMWORD[32+rsp],xmm9
2891	add	eax,edi
2892	xor	esi,edx
2893	shrd	ecx,ecx,7
2894	add	eax,ebx
2895	vpslld	xmm3,xmm3,2
2896	add	ebp,DWORD[56+rsp]
2897	xor	esi,ecx
2898	mov	edi,eax
2899	shld	eax,eax,5
2900	add	ebp,esi
2901	xor	edi,ecx
2902	shrd	ebx,ebx,7
2903	add	ebp,eax
2904	vpor	xmm3,xmm3,xmm8
2905	add	edx,DWORD[60+rsp]
2906	xor	edi,ebx
2907	mov	esi,ebp
2908	shld	ebp,ebp,5
2909	add	edx,edi
2910	xor	esi,ebx
2911	shrd	eax,eax,7
2912	add	edx,ebp
2913	vpalignr	xmm8,xmm3,xmm2,8
2914	vpxor	xmm4,xmm4,xmm0
2915	add	ecx,DWORD[rsp]
2916	xor	esi,eax
2917	mov	edi,edx
2918	shld	edx,edx,5
2919	vpxor	xmm4,xmm4,xmm5
2920	add	ecx,esi
2921	xor	edi,eax
2922	vpaddd	xmm9,xmm11,xmm3
2923	shrd	ebp,ebp,7
2924	add	ecx,edx
2925	vpxor	xmm4,xmm4,xmm8
2926	add	ebx,DWORD[4+rsp]
2927	xor	edi,ebp
2928	mov	esi,ecx
2929	shld	ecx,ecx,5
2930	vpsrld	xmm8,xmm4,30
2931	vmovdqa	XMMWORD[48+rsp],xmm9
2932	add	ebx,edi
2933	xor	esi,ebp
2934	shrd	edx,edx,7
2935	add	ebx,ecx
2936	vpslld	xmm4,xmm4,2
2937	add	eax,DWORD[8+rsp]
2938	xor	esi,edx
2939	mov	edi,ebx
2940	shld	ebx,ebx,5
2941	add	eax,esi
2942	xor	edi,edx
2943	shrd	ecx,ecx,7
2944	add	eax,ebx
2945	vpor	xmm4,xmm4,xmm8
2946	add	ebp,DWORD[12+rsp]
2947	xor	edi,ecx
2948	mov	esi,eax
2949	shld	eax,eax,5
2950	add	ebp,edi
2951	xor	esi,ecx
2952	shrd	ebx,ebx,7
2953	add	ebp,eax
2954	vpalignr	xmm8,xmm4,xmm3,8
2955	vpxor	xmm5,xmm5,xmm1
2956	add	edx,DWORD[16+rsp]
2957	xor	esi,ebx
2958	mov	edi,ebp
2959	shld	ebp,ebp,5
2960	vpxor	xmm5,xmm5,xmm6
2961	add	edx,esi
2962	xor	edi,ebx
2963	vpaddd	xmm9,xmm11,xmm4
2964	shrd	eax,eax,7
2965	add	edx,ebp
2966	vpxor	xmm5,xmm5,xmm8
2967	add	ecx,DWORD[20+rsp]
2968	xor	edi,eax
2969	mov	esi,edx
2970	shld	edx,edx,5
2971	vpsrld	xmm8,xmm5,30
2972	vmovdqa	XMMWORD[rsp],xmm9
2973	add	ecx,edi
2974	xor	esi,eax
2975	shrd	ebp,ebp,7
2976	add	ecx,edx
2977	vpslld	xmm5,xmm5,2
2978	add	ebx,DWORD[24+rsp]
2979	xor	esi,ebp
2980	mov	edi,ecx
2981	shld	ecx,ecx,5
2982	add	ebx,esi
2983	xor	edi,ebp
2984	shrd	edx,edx,7
2985	add	ebx,ecx
2986	vpor	xmm5,xmm5,xmm8
2987	add	eax,DWORD[28+rsp]
2988	shrd	ecx,ecx,7
2989	mov	esi,ebx
2990	xor	edi,edx
2991	shld	ebx,ebx,5
2992	add	eax,edi
2993	xor	esi,ecx
2994	xor	ecx,edx
2995	add	eax,ebx
2996	vpalignr	xmm8,xmm5,xmm4,8
2997	vpxor	xmm6,xmm6,xmm2
2998	add	ebp,DWORD[32+rsp]
2999	and	esi,ecx
3000	xor	ecx,edx
3001	shrd	ebx,ebx,7
3002	vpxor	xmm6,xmm6,xmm7
3003	mov	edi,eax
3004	xor	esi,ecx
3005	vpaddd	xmm9,xmm11,xmm5
3006	shld	eax,eax,5
3007	add	ebp,esi
3008	vpxor	xmm6,xmm6,xmm8
3009	xor	edi,ebx
3010	xor	ebx,ecx
3011	add	ebp,eax
3012	add	edx,DWORD[36+rsp]
3013	vpsrld	xmm8,xmm6,30
3014	vmovdqa	XMMWORD[16+rsp],xmm9
3015	and	edi,ebx
3016	xor	ebx,ecx
3017	shrd	eax,eax,7
3018	mov	esi,ebp
3019	vpslld	xmm6,xmm6,2
3020	xor	edi,ebx
3021	shld	ebp,ebp,5
3022	add	edx,edi
3023	xor	esi,eax
3024	xor	eax,ebx
3025	add	edx,ebp
3026	add	ecx,DWORD[40+rsp]
3027	and	esi,eax
3028	vpor	xmm6,xmm6,xmm8
3029	xor	eax,ebx
3030	shrd	ebp,ebp,7
3031	mov	edi,edx
3032	xor	esi,eax
3033	shld	edx,edx,5
3034	add	ecx,esi
3035	xor	edi,ebp
3036	xor	ebp,eax
3037	add	ecx,edx
3038	add	ebx,DWORD[44+rsp]
3039	and	edi,ebp
3040	xor	ebp,eax
3041	shrd	edx,edx,7
3042	mov	esi,ecx
3043	xor	edi,ebp
3044	shld	ecx,ecx,5
3045	add	ebx,edi
3046	xor	esi,edx
3047	xor	edx,ebp
3048	add	ebx,ecx
3049	vpalignr	xmm8,xmm6,xmm5,8
3050	vpxor	xmm7,xmm7,xmm3
3051	add	eax,DWORD[48+rsp]
3052	and	esi,edx
3053	xor	edx,ebp
3054	shrd	ecx,ecx,7
3055	vpxor	xmm7,xmm7,xmm0
3056	mov	edi,ebx
3057	xor	esi,edx
3058	vpaddd	xmm9,xmm11,xmm6
3059	vmovdqa	xmm11,XMMWORD[32+r11]
3060	shld	ebx,ebx,5
3061	add	eax,esi
3062	vpxor	xmm7,xmm7,xmm8
3063	xor	edi,ecx
3064	xor	ecx,edx
3065	add	eax,ebx
3066	add	ebp,DWORD[52+rsp]
3067	vpsrld	xmm8,xmm7,30
3068	vmovdqa	XMMWORD[32+rsp],xmm9
3069	and	edi,ecx
3070	xor	ecx,edx
3071	shrd	ebx,ebx,7
3072	mov	esi,eax
3073	vpslld	xmm7,xmm7,2
3074	xor	edi,ecx
3075	shld	eax,eax,5
3076	add	ebp,edi
3077	xor	esi,ebx
3078	xor	ebx,ecx
3079	add	ebp,eax
3080	add	edx,DWORD[56+rsp]
3081	and	esi,ebx
3082	vpor	xmm7,xmm7,xmm8
3083	xor	ebx,ecx
3084	shrd	eax,eax,7
3085	mov	edi,ebp
3086	xor	esi,ebx
3087	shld	ebp,ebp,5
3088	add	edx,esi
3089	xor	edi,eax
3090	xor	eax,ebx
3091	add	edx,ebp
3092	add	ecx,DWORD[60+rsp]
3093	and	edi,eax
3094	xor	eax,ebx
3095	shrd	ebp,ebp,7
3096	mov	esi,edx
3097	xor	edi,eax
3098	shld	edx,edx,5
3099	add	ecx,edi
3100	xor	esi,ebp
3101	xor	ebp,eax
3102	add	ecx,edx
3103	vpalignr	xmm8,xmm7,xmm6,8
3104	vpxor	xmm0,xmm0,xmm4
3105	add	ebx,DWORD[rsp]
3106	and	esi,ebp
3107	xor	ebp,eax
3108	shrd	edx,edx,7
3109	vpxor	xmm0,xmm0,xmm1
3110	mov	edi,ecx
3111	xor	esi,ebp
3112	vpaddd	xmm9,xmm11,xmm7
3113	shld	ecx,ecx,5
3114	add	ebx,esi
3115	vpxor	xmm0,xmm0,xmm8
3116	xor	edi,edx
3117	xor	edx,ebp
3118	add	ebx,ecx
3119	add	eax,DWORD[4+rsp]
3120	vpsrld	xmm8,xmm0,30
3121	vmovdqa	XMMWORD[48+rsp],xmm9
3122	and	edi,edx
3123	xor	edx,ebp
3124	shrd	ecx,ecx,7
3125	mov	esi,ebx
3126	vpslld	xmm0,xmm0,2
3127	xor	edi,edx
3128	shld	ebx,ebx,5
3129	add	eax,edi
3130	xor	esi,ecx
3131	xor	ecx,edx
3132	add	eax,ebx
3133	add	ebp,DWORD[8+rsp]
3134	and	esi,ecx
3135	vpor	xmm0,xmm0,xmm8
3136	xor	ecx,edx
3137	shrd	ebx,ebx,7
3138	mov	edi,eax
3139	xor	esi,ecx
3140	shld	eax,eax,5
3141	add	ebp,esi
3142	xor	edi,ebx
3143	xor	ebx,ecx
3144	add	ebp,eax
3145	add	edx,DWORD[12+rsp]
3146	and	edi,ebx
3147	xor	ebx,ecx
3148	shrd	eax,eax,7
3149	mov	esi,ebp
3150	xor	edi,ebx
3151	shld	ebp,ebp,5
3152	add	edx,edi
3153	xor	esi,eax
3154	xor	eax,ebx
3155	add	edx,ebp
3156	vpalignr	xmm8,xmm0,xmm7,8
3157	vpxor	xmm1,xmm1,xmm5
3158	add	ecx,DWORD[16+rsp]
3159	and	esi,eax
3160	xor	eax,ebx
3161	shrd	ebp,ebp,7
3162	vpxor	xmm1,xmm1,xmm2
3163	mov	edi,edx
3164	xor	esi,eax
3165	vpaddd	xmm9,xmm11,xmm0
3166	shld	edx,edx,5
3167	add	ecx,esi
3168	vpxor	xmm1,xmm1,xmm8
3169	xor	edi,ebp
3170	xor	ebp,eax
3171	add	ecx,edx
3172	add	ebx,DWORD[20+rsp]
3173	vpsrld	xmm8,xmm1,30
3174	vmovdqa	XMMWORD[rsp],xmm9
3175	and	edi,ebp
3176	xor	ebp,eax
3177	shrd	edx,edx,7
3178	mov	esi,ecx
3179	vpslld	xmm1,xmm1,2
3180	xor	edi,ebp
3181	shld	ecx,ecx,5
3182	add	ebx,edi
3183	xor	esi,edx
3184	xor	edx,ebp
3185	add	ebx,ecx
3186	add	eax,DWORD[24+rsp]
3187	and	esi,edx
3188	vpor	xmm1,xmm1,xmm8
3189	xor	edx,ebp
3190	shrd	ecx,ecx,7
3191	mov	edi,ebx
3192	xor	esi,edx
3193	shld	ebx,ebx,5
3194	add	eax,esi
3195	xor	edi,ecx
3196	xor	ecx,edx
3197	add	eax,ebx
3198	add	ebp,DWORD[28+rsp]
3199	and	edi,ecx
3200	xor	ecx,edx
3201	shrd	ebx,ebx,7
3202	mov	esi,eax
3203	xor	edi,ecx
3204	shld	eax,eax,5
3205	add	ebp,edi
3206	xor	esi,ebx
3207	xor	ebx,ecx
3208	add	ebp,eax
3209	vpalignr	xmm8,xmm1,xmm0,8
3210	vpxor	xmm2,xmm2,xmm6
3211	add	edx,DWORD[32+rsp]
3212	and	esi,ebx
3213	xor	ebx,ecx
3214	shrd	eax,eax,7
3215	vpxor	xmm2,xmm2,xmm3
3216	mov	edi,ebp
3217	xor	esi,ebx
3218	vpaddd	xmm9,xmm11,xmm1
3219	shld	ebp,ebp,5
3220	add	edx,esi
3221	vpxor	xmm2,xmm2,xmm8
3222	xor	edi,eax
3223	xor	eax,ebx
3224	add	edx,ebp
3225	add	ecx,DWORD[36+rsp]
3226	vpsrld	xmm8,xmm2,30
3227	vmovdqa	XMMWORD[16+rsp],xmm9
3228	and	edi,eax
3229	xor	eax,ebx
3230	shrd	ebp,ebp,7
3231	mov	esi,edx
3232	vpslld	xmm2,xmm2,2
3233	xor	edi,eax
3234	shld	edx,edx,5
3235	add	ecx,edi
3236	xor	esi,ebp
3237	xor	ebp,eax
3238	add	ecx,edx
3239	add	ebx,DWORD[40+rsp]
3240	and	esi,ebp
3241	vpor	xmm2,xmm2,xmm8
3242	xor	ebp,eax
3243	shrd	edx,edx,7
3244	mov	edi,ecx
3245	xor	esi,ebp
3246	shld	ecx,ecx,5
3247	add	ebx,esi
3248	xor	edi,edx
3249	xor	edx,ebp
3250	add	ebx,ecx
3251	add	eax,DWORD[44+rsp]
3252	and	edi,edx
3253	xor	edx,ebp
3254	shrd	ecx,ecx,7
3255	mov	esi,ebx
3256	xor	edi,edx
3257	shld	ebx,ebx,5
3258	add	eax,edi
3259	xor	esi,edx
3260	add	eax,ebx
3261	vpalignr	xmm8,xmm2,xmm1,8
3262	vpxor	xmm3,xmm3,xmm7
3263	add	ebp,DWORD[48+rsp]
3264	xor	esi,ecx
3265	mov	edi,eax
3266	shld	eax,eax,5
3267	vpxor	xmm3,xmm3,xmm4
3268	add	ebp,esi
3269	xor	edi,ecx
3270	vpaddd	xmm9,xmm11,xmm2
3271	shrd	ebx,ebx,7
3272	add	ebp,eax
3273	vpxor	xmm3,xmm3,xmm8
3274	add	edx,DWORD[52+rsp]
3275	xor	edi,ebx
3276	mov	esi,ebp
3277	shld	ebp,ebp,5
3278	vpsrld	xmm8,xmm3,30
3279	vmovdqa	XMMWORD[32+rsp],xmm9
3280	add	edx,edi
3281	xor	esi,ebx
3282	shrd	eax,eax,7
3283	add	edx,ebp
3284	vpslld	xmm3,xmm3,2
3285	add	ecx,DWORD[56+rsp]
3286	xor	esi,eax
3287	mov	edi,edx
3288	shld	edx,edx,5
3289	add	ecx,esi
3290	xor	edi,eax
3291	shrd	ebp,ebp,7
3292	add	ecx,edx
3293	vpor	xmm3,xmm3,xmm8
3294	add	ebx,DWORD[60+rsp]
3295	xor	edi,ebp
3296	mov	esi,ecx
3297	shld	ecx,ecx,5
3298	add	ebx,edi
3299	xor	esi,ebp
3300	shrd	edx,edx,7
3301	add	ebx,ecx
3302	add	eax,DWORD[rsp]
3303	vpaddd	xmm9,xmm11,xmm3
3304	xor	esi,edx
3305	mov	edi,ebx
3306	shld	ebx,ebx,5
3307	add	eax,esi
3308	vmovdqa	XMMWORD[48+rsp],xmm9
3309	xor	edi,edx
3310	shrd	ecx,ecx,7
3311	add	eax,ebx
3312	add	ebp,DWORD[4+rsp]
3313	xor	edi,ecx
3314	mov	esi,eax
3315	shld	eax,eax,5
3316	add	ebp,edi
3317	xor	esi,ecx
3318	shrd	ebx,ebx,7
3319	add	ebp,eax
3320	add	edx,DWORD[8+rsp]
3321	xor	esi,ebx
3322	mov	edi,ebp
3323	shld	ebp,ebp,5
3324	add	edx,esi
3325	xor	edi,ebx
3326	shrd	eax,eax,7
3327	add	edx,ebp
3328	add	ecx,DWORD[12+rsp]
3329	xor	edi,eax
3330	mov	esi,edx
3331	shld	edx,edx,5
3332	add	ecx,edi
3333	xor	esi,eax
3334	shrd	ebp,ebp,7
3335	add	ecx,edx
3336	cmp	r9,r10
3337	je	NEAR $L$done_avx
3338	vmovdqa	xmm6,XMMWORD[64+r11]
3339	vmovdqa	xmm11,XMMWORD[((-64))+r11]
3340	vmovdqu	xmm0,XMMWORD[r9]
3341	vmovdqu	xmm1,XMMWORD[16+r9]
3342	vmovdqu	xmm2,XMMWORD[32+r9]
3343	vmovdqu	xmm3,XMMWORD[48+r9]
3344	vpshufb	xmm0,xmm0,xmm6
3345	add	r9,64
3346	add	ebx,DWORD[16+rsp]
3347	xor	esi,ebp
3348	vpshufb	xmm1,xmm1,xmm6
3349	mov	edi,ecx
3350	shld	ecx,ecx,5
3351	vpaddd	xmm4,xmm0,xmm11
3352	add	ebx,esi
3353	xor	edi,ebp
3354	shrd	edx,edx,7
3355	add	ebx,ecx
3356	vmovdqa	XMMWORD[rsp],xmm4
3357	add	eax,DWORD[20+rsp]
3358	xor	edi,edx
3359	mov	esi,ebx
3360	shld	ebx,ebx,5
3361	add	eax,edi
3362	xor	esi,edx
3363	shrd	ecx,ecx,7
3364	add	eax,ebx
3365	add	ebp,DWORD[24+rsp]
3366	xor	esi,ecx
3367	mov	edi,eax
3368	shld	eax,eax,5
3369	add	ebp,esi
3370	xor	edi,ecx
3371	shrd	ebx,ebx,7
3372	add	ebp,eax
3373	add	edx,DWORD[28+rsp]
3374	xor	edi,ebx
3375	mov	esi,ebp
3376	shld	ebp,ebp,5
3377	add	edx,edi
3378	xor	esi,ebx
3379	shrd	eax,eax,7
3380	add	edx,ebp
3381	add	ecx,DWORD[32+rsp]
3382	xor	esi,eax
3383	vpshufb	xmm2,xmm2,xmm6
3384	mov	edi,edx
3385	shld	edx,edx,5
3386	vpaddd	xmm5,xmm1,xmm11
3387	add	ecx,esi
3388	xor	edi,eax
3389	shrd	ebp,ebp,7
3390	add	ecx,edx
3391	vmovdqa	XMMWORD[16+rsp],xmm5
3392	add	ebx,DWORD[36+rsp]
3393	xor	edi,ebp
3394	mov	esi,ecx
3395	shld	ecx,ecx,5
3396	add	ebx,edi
3397	xor	esi,ebp
3398	shrd	edx,edx,7
3399	add	ebx,ecx
3400	add	eax,DWORD[40+rsp]
3401	xor	esi,edx
3402	mov	edi,ebx
3403	shld	ebx,ebx,5
3404	add	eax,esi
3405	xor	edi,edx
3406	shrd	ecx,ecx,7
3407	add	eax,ebx
3408	add	ebp,DWORD[44+rsp]
3409	xor	edi,ecx
3410	mov	esi,eax
3411	shld	eax,eax,5
3412	add	ebp,edi
3413	xor	esi,ecx
3414	shrd	ebx,ebx,7
3415	add	ebp,eax
3416	add	edx,DWORD[48+rsp]
3417	xor	esi,ebx
3418	vpshufb	xmm3,xmm3,xmm6
3419	mov	edi,ebp
3420	shld	ebp,ebp,5
3421	vpaddd	xmm6,xmm2,xmm11
3422	add	edx,esi
3423	xor	edi,ebx
3424	shrd	eax,eax,7
3425	add	edx,ebp
3426	vmovdqa	XMMWORD[32+rsp],xmm6
3427	add	ecx,DWORD[52+rsp]
3428	xor	edi,eax
3429	mov	esi,edx
3430	shld	edx,edx,5
3431	add	ecx,edi
3432	xor	esi,eax
3433	shrd	ebp,ebp,7
3434	add	ecx,edx
3435	add	ebx,DWORD[56+rsp]
3436	xor	esi,ebp
3437	mov	edi,ecx
3438	shld	ecx,ecx,5
3439	add	ebx,esi
3440	xor	edi,ebp
3441	shrd	edx,edx,7
3442	add	ebx,ecx
3443	add	eax,DWORD[60+rsp]
3444	xor	edi,edx
3445	mov	esi,ebx
3446	shld	ebx,ebx,5
3447	add	eax,edi
3448	shrd	ecx,ecx,7
3449	add	eax,ebx
3450	add	eax,DWORD[r8]
3451	add	esi,DWORD[4+r8]
3452	add	ecx,DWORD[8+r8]
3453	add	edx,DWORD[12+r8]
3454	mov	DWORD[r8],eax
3455	add	ebp,DWORD[16+r8]
3456	mov	DWORD[4+r8],esi
3457	mov	ebx,esi
3458	mov	DWORD[8+r8],ecx
3459	mov	edi,ecx
3460	mov	DWORD[12+r8],edx
3461	xor	edi,edx
3462	mov	DWORD[16+r8],ebp
3463	and	esi,edi
3464	jmp	NEAR $L$oop_avx
3465
3466ALIGN	16
3467$L$done_avx:
3468	add	ebx,DWORD[16+rsp]
3469	xor	esi,ebp
3470	mov	edi,ecx
3471	shld	ecx,ecx,5
3472	add	ebx,esi
3473	xor	edi,ebp
3474	shrd	edx,edx,7
3475	add	ebx,ecx
3476	add	eax,DWORD[20+rsp]
3477	xor	edi,edx
3478	mov	esi,ebx
3479	shld	ebx,ebx,5
3480	add	eax,edi
3481	xor	esi,edx
3482	shrd	ecx,ecx,7
3483	add	eax,ebx
3484	add	ebp,DWORD[24+rsp]
3485	xor	esi,ecx
3486	mov	edi,eax
3487	shld	eax,eax,5
3488	add	ebp,esi
3489	xor	edi,ecx
3490	shrd	ebx,ebx,7
3491	add	ebp,eax
3492	add	edx,DWORD[28+rsp]
3493	xor	edi,ebx
3494	mov	esi,ebp
3495	shld	ebp,ebp,5
3496	add	edx,edi
3497	xor	esi,ebx
3498	shrd	eax,eax,7
3499	add	edx,ebp
3500	add	ecx,DWORD[32+rsp]
3501	xor	esi,eax
3502	mov	edi,edx
3503	shld	edx,edx,5
3504	add	ecx,esi
3505	xor	edi,eax
3506	shrd	ebp,ebp,7
3507	add	ecx,edx
3508	add	ebx,DWORD[36+rsp]
3509	xor	edi,ebp
3510	mov	esi,ecx
3511	shld	ecx,ecx,5
3512	add	ebx,edi
3513	xor	esi,ebp
3514	shrd	edx,edx,7
3515	add	ebx,ecx
3516	add	eax,DWORD[40+rsp]
3517	xor	esi,edx
3518	mov	edi,ebx
3519	shld	ebx,ebx,5
3520	add	eax,esi
3521	xor	edi,edx
3522	shrd	ecx,ecx,7
3523	add	eax,ebx
3524	add	ebp,DWORD[44+rsp]
3525	xor	edi,ecx
3526	mov	esi,eax
3527	shld	eax,eax,5
3528	add	ebp,edi
3529	xor	esi,ecx
3530	shrd	ebx,ebx,7
3531	add	ebp,eax
3532	add	edx,DWORD[48+rsp]
3533	xor	esi,ebx
3534	mov	edi,ebp
3535	shld	ebp,ebp,5
3536	add	edx,esi
3537	xor	edi,ebx
3538	shrd	eax,eax,7
3539	add	edx,ebp
3540	add	ecx,DWORD[52+rsp]
3541	xor	edi,eax
3542	mov	esi,edx
3543	shld	edx,edx,5
3544	add	ecx,edi
3545	xor	esi,eax
3546	shrd	ebp,ebp,7
3547	add	ecx,edx
3548	add	ebx,DWORD[56+rsp]
3549	xor	esi,ebp
3550	mov	edi,ecx
3551	shld	ecx,ecx,5
3552	add	ebx,esi
3553	xor	edi,ebp
3554	shrd	edx,edx,7
3555	add	ebx,ecx
3556	add	eax,DWORD[60+rsp]
3557	xor	edi,edx
3558	mov	esi,ebx
3559	shld	ebx,ebx,5
3560	add	eax,edi
3561	shrd	ecx,ecx,7
3562	add	eax,ebx
3563	vzeroupper
3564
3565	add	eax,DWORD[r8]
3566	add	esi,DWORD[4+r8]
3567	add	ecx,DWORD[8+r8]
3568	mov	DWORD[r8],eax
3569	add	edx,DWORD[12+r8]
3570	mov	DWORD[4+r8],esi
3571	add	ebp,DWORD[16+r8]
3572	mov	DWORD[8+r8],ecx
3573	mov	DWORD[12+r8],edx
3574	mov	DWORD[16+r8],ebp
3575	movaps	xmm6,XMMWORD[((-40-96))+r14]
3576	movaps	xmm7,XMMWORD[((-40-80))+r14]
3577	movaps	xmm8,XMMWORD[((-40-64))+r14]
3578	movaps	xmm9,XMMWORD[((-40-48))+r14]
3579	movaps	xmm10,XMMWORD[((-40-32))+r14]
3580	movaps	xmm11,XMMWORD[((-40-16))+r14]
3581	lea	rsi,[r14]
3582	mov	r14,QWORD[((-40))+rsi]
3583	mov	r13,QWORD[((-32))+rsi]
3584	mov	r12,QWORD[((-24))+rsi]
3585	mov	rbp,QWORD[((-16))+rsi]
3586	mov	rbx,QWORD[((-8))+rsi]
3587	lea	rsp,[rsi]
3588$L$epilogue_avx:
3589	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
3590	mov	rsi,QWORD[16+rsp]
3591	DB	0F3h,0C3h		;repret
3592$L$SEH_end_sha1_block_data_order_avx:
3593ALIGN	64
3594K_XX_XX:
3595	DD	0x5a827999,0x5a827999,0x5a827999,0x5a827999
3596	DD	0x5a827999,0x5a827999,0x5a827999,0x5a827999
3597	DD	0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
3598	DD	0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
3599	DD	0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
3600	DD	0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
3601	DD	0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
3602	DD	0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
3603	DD	0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
3604	DD	0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
3605DB	0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0
3606DB	83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115
3607DB	102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44
3608DB	32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60
3609DB	97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114
3610DB	103,62,0
3611ALIGN	64
3612EXTERN	__imp_RtlVirtualUnwind
3613
3614ALIGN	16
3615se_handler:
3616	push	rsi
3617	push	rdi
3618	push	rbx
3619	push	rbp
3620	push	r12
3621	push	r13
3622	push	r14
3623	push	r15
3624	pushfq
3625	sub	rsp,64
3626
3627	mov	rax,QWORD[120+r8]
3628	mov	rbx,QWORD[248+r8]
3629
3630	lea	r10,[$L$prologue]
3631	cmp	rbx,r10
3632	jb	NEAR $L$common_seh_tail
3633
3634	mov	rax,QWORD[152+r8]
3635
3636	lea	r10,[$L$epilogue]
3637	cmp	rbx,r10
3638	jae	NEAR $L$common_seh_tail
3639
3640	mov	rax,QWORD[64+rax]
3641
3642	mov	rbx,QWORD[((-8))+rax]
3643	mov	rbp,QWORD[((-16))+rax]
3644	mov	r12,QWORD[((-24))+rax]
3645	mov	r13,QWORD[((-32))+rax]
3646	mov	r14,QWORD[((-40))+rax]
3647	mov	QWORD[144+r8],rbx
3648	mov	QWORD[160+r8],rbp
3649	mov	QWORD[216+r8],r12
3650	mov	QWORD[224+r8],r13
3651	mov	QWORD[232+r8],r14
3652
3653	jmp	NEAR $L$common_seh_tail
3654
3655
3656ALIGN	16
3657ssse3_handler:
3658	push	rsi
3659	push	rdi
3660	push	rbx
3661	push	rbp
3662	push	r12
3663	push	r13
3664	push	r14
3665	push	r15
3666	pushfq
3667	sub	rsp,64
3668
3669	mov	rax,QWORD[120+r8]
3670	mov	rbx,QWORD[248+r8]
3671
3672	mov	rsi,QWORD[8+r9]
3673	mov	r11,QWORD[56+r9]
3674
3675	mov	r10d,DWORD[r11]
3676	lea	r10,[r10*1+rsi]
3677	cmp	rbx,r10
3678	jb	NEAR $L$common_seh_tail
3679
3680	mov	rax,QWORD[152+r8]
3681
3682	mov	r10d,DWORD[4+r11]
3683	lea	r10,[r10*1+rsi]
3684	cmp	rbx,r10
3685	jae	NEAR $L$common_seh_tail
3686
3687	mov	rax,QWORD[232+r8]
3688
3689	lea	rsi,[((-40-96))+rax]
3690	lea	rdi,[512+r8]
3691	mov	ecx,12
3692	DD	0xa548f3fc
3693
3694	mov	rbx,QWORD[((-8))+rax]
3695	mov	rbp,QWORD[((-16))+rax]
3696	mov	r12,QWORD[((-24))+rax]
3697	mov	r13,QWORD[((-32))+rax]
3698	mov	r14,QWORD[((-40))+rax]
3699	mov	QWORD[144+r8],rbx
3700	mov	QWORD[160+r8],rbp
3701	mov	QWORD[216+r8],r12
3702	mov	QWORD[224+r8],r13
3703	mov	QWORD[232+r8],r14
3704
3705$L$common_seh_tail:
3706	mov	rdi,QWORD[8+rax]
3707	mov	rsi,QWORD[16+rax]
3708	mov	QWORD[152+r8],rax
3709	mov	QWORD[168+r8],rsi
3710	mov	QWORD[176+r8],rdi
3711
3712	mov	rdi,QWORD[40+r9]
3713	mov	rsi,r8
3714	mov	ecx,154
3715	DD	0xa548f3fc
3716
3717	mov	rsi,r9
3718	xor	rcx,rcx
3719	mov	rdx,QWORD[8+rsi]
3720	mov	r8,QWORD[rsi]
3721	mov	r9,QWORD[16+rsi]
3722	mov	r10,QWORD[40+rsi]
3723	lea	r11,[56+rsi]
3724	lea	r12,[24+rsi]
3725	mov	QWORD[32+rsp],r10
3726	mov	QWORD[40+rsp],r11
3727	mov	QWORD[48+rsp],r12
3728	mov	QWORD[56+rsp],rcx
3729	call	QWORD[__imp_RtlVirtualUnwind]
3730
3731	mov	eax,1
3732	add	rsp,64
3733	popfq
3734	pop	r15
3735	pop	r14
3736	pop	r13
3737	pop	r12
3738	pop	rbp
3739	pop	rbx
3740	pop	rdi
3741	pop	rsi
3742	DB	0F3h,0C3h		;repret
3743
3744
3745section	.pdata rdata align=4
3746ALIGN	4
3747	DD	$L$SEH_begin_sha1_block_data_order wrt ..imagebase
3748	DD	$L$SEH_end_sha1_block_data_order wrt ..imagebase
3749	DD	$L$SEH_info_sha1_block_data_order wrt ..imagebase
3750	DD	$L$SEH_begin_sha1_block_data_order_ssse3 wrt ..imagebase
3751	DD	$L$SEH_end_sha1_block_data_order_ssse3 wrt ..imagebase
3752	DD	$L$SEH_info_sha1_block_data_order_ssse3 wrt ..imagebase
3753	DD	$L$SEH_begin_sha1_block_data_order_avx wrt ..imagebase
3754	DD	$L$SEH_end_sha1_block_data_order_avx wrt ..imagebase
3755	DD	$L$SEH_info_sha1_block_data_order_avx wrt ..imagebase
3756section	.xdata rdata align=8
3757ALIGN	8
3758$L$SEH_info_sha1_block_data_order:
3759DB	9,0,0,0
3760	DD	se_handler wrt ..imagebase
3761$L$SEH_info_sha1_block_data_order_ssse3:
3762DB	9,0,0,0
3763	DD	ssse3_handler wrt ..imagebase
3764	DD	$L$prologue_ssse3 wrt ..imagebase,$L$epilogue_ssse3 wrt ..imagebase
3765$L$SEH_info_sha1_block_data_order_avx:
3766DB	9,0,0,0
3767	DD	ssse3_handler wrt ..imagebase
3768	DD	$L$prologue_avx wrt ..imagebase,$L$epilogue_avx wrt ..imagebase
3769