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