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