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