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