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