xref: /aosp_15_r20/external/boringssl/src/gen/bcm/sha512-x86_64-win.asm (revision 8fb009dc861624b67b6cdb62ea21f0f22d0c584b)
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	sha512_block_data_order_nohw
18
19ALIGN	16
20sha512_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_sha512_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*8+4*8
48	lea	rdx,[rdx*8+rsi]
49	and	rsp,-64
50	mov	QWORD[((128+0))+rsp],rdi
51	mov	QWORD[((128+8))+rsp],rsi
52	mov	QWORD[((128+16))+rsp],rdx
53	mov	QWORD[152+rsp],rax
54
55$L$prologue:
56
57	mov	rax,QWORD[rdi]
58	mov	rbx,QWORD[8+rdi]
59	mov	rcx,QWORD[16+rdi]
60	mov	rdx,QWORD[24+rdi]
61	mov	r8,QWORD[32+rdi]
62	mov	r9,QWORD[40+rdi]
63	mov	r10,QWORD[48+rdi]
64	mov	r11,QWORD[56+rdi]
65	jmp	NEAR $L$loop
66
67ALIGN	16
68$L$loop:
69	mov	rdi,rbx
70	lea	rbp,[K512]
71	xor	rdi,rcx
72	mov	r12,QWORD[rsi]
73	mov	r13,r8
74	mov	r14,rax
75	bswap	r12
76	ror	r13,23
77	mov	r15,r9
78
79	xor	r13,r8
80	ror	r14,5
81	xor	r15,r10
82
83	mov	QWORD[rsp],r12
84	xor	r14,rax
85	and	r15,r8
86
87	ror	r13,4
88	add	r12,r11
89	xor	r15,r10
90
91	ror	r14,6
92	xor	r13,r8
93	add	r12,r15
94
95	mov	r15,rax
96	add	r12,QWORD[rbp]
97	xor	r14,rax
98
99	xor	r15,rbx
100	ror	r13,14
101	mov	r11,rbx
102
103	and	rdi,r15
104	ror	r14,28
105	add	r12,r13
106
107	xor	r11,rdi
108	add	rdx,r12
109	add	r11,r12
110
111	lea	rbp,[8+rbp]
112	add	r11,r14
113	mov	r12,QWORD[8+rsi]
114	mov	r13,rdx
115	mov	r14,r11
116	bswap	r12
117	ror	r13,23
118	mov	rdi,r8
119
120	xor	r13,rdx
121	ror	r14,5
122	xor	rdi,r9
123
124	mov	QWORD[8+rsp],r12
125	xor	r14,r11
126	and	rdi,rdx
127
128	ror	r13,4
129	add	r12,r10
130	xor	rdi,r9
131
132	ror	r14,6
133	xor	r13,rdx
134	add	r12,rdi
135
136	mov	rdi,r11
137	add	r12,QWORD[rbp]
138	xor	r14,r11
139
140	xor	rdi,rax
141	ror	r13,14
142	mov	r10,rax
143
144	and	r15,rdi
145	ror	r14,28
146	add	r12,r13
147
148	xor	r10,r15
149	add	rcx,r12
150	add	r10,r12
151
152	lea	rbp,[24+rbp]
153	add	r10,r14
154	mov	r12,QWORD[16+rsi]
155	mov	r13,rcx
156	mov	r14,r10
157	bswap	r12
158	ror	r13,23
159	mov	r15,rdx
160
161	xor	r13,rcx
162	ror	r14,5
163	xor	r15,r8
164
165	mov	QWORD[16+rsp],r12
166	xor	r14,r10
167	and	r15,rcx
168
169	ror	r13,4
170	add	r12,r9
171	xor	r15,r8
172
173	ror	r14,6
174	xor	r13,rcx
175	add	r12,r15
176
177	mov	r15,r10
178	add	r12,QWORD[rbp]
179	xor	r14,r10
180
181	xor	r15,r11
182	ror	r13,14
183	mov	r9,r11
184
185	and	rdi,r15
186	ror	r14,28
187	add	r12,r13
188
189	xor	r9,rdi
190	add	rbx,r12
191	add	r9,r12
192
193	lea	rbp,[8+rbp]
194	add	r9,r14
195	mov	r12,QWORD[24+rsi]
196	mov	r13,rbx
197	mov	r14,r9
198	bswap	r12
199	ror	r13,23
200	mov	rdi,rcx
201
202	xor	r13,rbx
203	ror	r14,5
204	xor	rdi,rdx
205
206	mov	QWORD[24+rsp],r12
207	xor	r14,r9
208	and	rdi,rbx
209
210	ror	r13,4
211	add	r12,r8
212	xor	rdi,rdx
213
214	ror	r14,6
215	xor	r13,rbx
216	add	r12,rdi
217
218	mov	rdi,r9
219	add	r12,QWORD[rbp]
220	xor	r14,r9
221
222	xor	rdi,r10
223	ror	r13,14
224	mov	r8,r10
225
226	and	r15,rdi
227	ror	r14,28
228	add	r12,r13
229
230	xor	r8,r15
231	add	rax,r12
232	add	r8,r12
233
234	lea	rbp,[24+rbp]
235	add	r8,r14
236	mov	r12,QWORD[32+rsi]
237	mov	r13,rax
238	mov	r14,r8
239	bswap	r12
240	ror	r13,23
241	mov	r15,rbx
242
243	xor	r13,rax
244	ror	r14,5
245	xor	r15,rcx
246
247	mov	QWORD[32+rsp],r12
248	xor	r14,r8
249	and	r15,rax
250
251	ror	r13,4
252	add	r12,rdx
253	xor	r15,rcx
254
255	ror	r14,6
256	xor	r13,rax
257	add	r12,r15
258
259	mov	r15,r8
260	add	r12,QWORD[rbp]
261	xor	r14,r8
262
263	xor	r15,r9
264	ror	r13,14
265	mov	rdx,r9
266
267	and	rdi,r15
268	ror	r14,28
269	add	r12,r13
270
271	xor	rdx,rdi
272	add	r11,r12
273	add	rdx,r12
274
275	lea	rbp,[8+rbp]
276	add	rdx,r14
277	mov	r12,QWORD[40+rsi]
278	mov	r13,r11
279	mov	r14,rdx
280	bswap	r12
281	ror	r13,23
282	mov	rdi,rax
283
284	xor	r13,r11
285	ror	r14,5
286	xor	rdi,rbx
287
288	mov	QWORD[40+rsp],r12
289	xor	r14,rdx
290	and	rdi,r11
291
292	ror	r13,4
293	add	r12,rcx
294	xor	rdi,rbx
295
296	ror	r14,6
297	xor	r13,r11
298	add	r12,rdi
299
300	mov	rdi,rdx
301	add	r12,QWORD[rbp]
302	xor	r14,rdx
303
304	xor	rdi,r8
305	ror	r13,14
306	mov	rcx,r8
307
308	and	r15,rdi
309	ror	r14,28
310	add	r12,r13
311
312	xor	rcx,r15
313	add	r10,r12
314	add	rcx,r12
315
316	lea	rbp,[24+rbp]
317	add	rcx,r14
318	mov	r12,QWORD[48+rsi]
319	mov	r13,r10
320	mov	r14,rcx
321	bswap	r12
322	ror	r13,23
323	mov	r15,r11
324
325	xor	r13,r10
326	ror	r14,5
327	xor	r15,rax
328
329	mov	QWORD[48+rsp],r12
330	xor	r14,rcx
331	and	r15,r10
332
333	ror	r13,4
334	add	r12,rbx
335	xor	r15,rax
336
337	ror	r14,6
338	xor	r13,r10
339	add	r12,r15
340
341	mov	r15,rcx
342	add	r12,QWORD[rbp]
343	xor	r14,rcx
344
345	xor	r15,rdx
346	ror	r13,14
347	mov	rbx,rdx
348
349	and	rdi,r15
350	ror	r14,28
351	add	r12,r13
352
353	xor	rbx,rdi
354	add	r9,r12
355	add	rbx,r12
356
357	lea	rbp,[8+rbp]
358	add	rbx,r14
359	mov	r12,QWORD[56+rsi]
360	mov	r13,r9
361	mov	r14,rbx
362	bswap	r12
363	ror	r13,23
364	mov	rdi,r10
365
366	xor	r13,r9
367	ror	r14,5
368	xor	rdi,r11
369
370	mov	QWORD[56+rsp],r12
371	xor	r14,rbx
372	and	rdi,r9
373
374	ror	r13,4
375	add	r12,rax
376	xor	rdi,r11
377
378	ror	r14,6
379	xor	r13,r9
380	add	r12,rdi
381
382	mov	rdi,rbx
383	add	r12,QWORD[rbp]
384	xor	r14,rbx
385
386	xor	rdi,rcx
387	ror	r13,14
388	mov	rax,rcx
389
390	and	r15,rdi
391	ror	r14,28
392	add	r12,r13
393
394	xor	rax,r15
395	add	r8,r12
396	add	rax,r12
397
398	lea	rbp,[24+rbp]
399	add	rax,r14
400	mov	r12,QWORD[64+rsi]
401	mov	r13,r8
402	mov	r14,rax
403	bswap	r12
404	ror	r13,23
405	mov	r15,r9
406
407	xor	r13,r8
408	ror	r14,5
409	xor	r15,r10
410
411	mov	QWORD[64+rsp],r12
412	xor	r14,rax
413	and	r15,r8
414
415	ror	r13,4
416	add	r12,r11
417	xor	r15,r10
418
419	ror	r14,6
420	xor	r13,r8
421	add	r12,r15
422
423	mov	r15,rax
424	add	r12,QWORD[rbp]
425	xor	r14,rax
426
427	xor	r15,rbx
428	ror	r13,14
429	mov	r11,rbx
430
431	and	rdi,r15
432	ror	r14,28
433	add	r12,r13
434
435	xor	r11,rdi
436	add	rdx,r12
437	add	r11,r12
438
439	lea	rbp,[8+rbp]
440	add	r11,r14
441	mov	r12,QWORD[72+rsi]
442	mov	r13,rdx
443	mov	r14,r11
444	bswap	r12
445	ror	r13,23
446	mov	rdi,r8
447
448	xor	r13,rdx
449	ror	r14,5
450	xor	rdi,r9
451
452	mov	QWORD[72+rsp],r12
453	xor	r14,r11
454	and	rdi,rdx
455
456	ror	r13,4
457	add	r12,r10
458	xor	rdi,r9
459
460	ror	r14,6
461	xor	r13,rdx
462	add	r12,rdi
463
464	mov	rdi,r11
465	add	r12,QWORD[rbp]
466	xor	r14,r11
467
468	xor	rdi,rax
469	ror	r13,14
470	mov	r10,rax
471
472	and	r15,rdi
473	ror	r14,28
474	add	r12,r13
475
476	xor	r10,r15
477	add	rcx,r12
478	add	r10,r12
479
480	lea	rbp,[24+rbp]
481	add	r10,r14
482	mov	r12,QWORD[80+rsi]
483	mov	r13,rcx
484	mov	r14,r10
485	bswap	r12
486	ror	r13,23
487	mov	r15,rdx
488
489	xor	r13,rcx
490	ror	r14,5
491	xor	r15,r8
492
493	mov	QWORD[80+rsp],r12
494	xor	r14,r10
495	and	r15,rcx
496
497	ror	r13,4
498	add	r12,r9
499	xor	r15,r8
500
501	ror	r14,6
502	xor	r13,rcx
503	add	r12,r15
504
505	mov	r15,r10
506	add	r12,QWORD[rbp]
507	xor	r14,r10
508
509	xor	r15,r11
510	ror	r13,14
511	mov	r9,r11
512
513	and	rdi,r15
514	ror	r14,28
515	add	r12,r13
516
517	xor	r9,rdi
518	add	rbx,r12
519	add	r9,r12
520
521	lea	rbp,[8+rbp]
522	add	r9,r14
523	mov	r12,QWORD[88+rsi]
524	mov	r13,rbx
525	mov	r14,r9
526	bswap	r12
527	ror	r13,23
528	mov	rdi,rcx
529
530	xor	r13,rbx
531	ror	r14,5
532	xor	rdi,rdx
533
534	mov	QWORD[88+rsp],r12
535	xor	r14,r9
536	and	rdi,rbx
537
538	ror	r13,4
539	add	r12,r8
540	xor	rdi,rdx
541
542	ror	r14,6
543	xor	r13,rbx
544	add	r12,rdi
545
546	mov	rdi,r9
547	add	r12,QWORD[rbp]
548	xor	r14,r9
549
550	xor	rdi,r10
551	ror	r13,14
552	mov	r8,r10
553
554	and	r15,rdi
555	ror	r14,28
556	add	r12,r13
557
558	xor	r8,r15
559	add	rax,r12
560	add	r8,r12
561
562	lea	rbp,[24+rbp]
563	add	r8,r14
564	mov	r12,QWORD[96+rsi]
565	mov	r13,rax
566	mov	r14,r8
567	bswap	r12
568	ror	r13,23
569	mov	r15,rbx
570
571	xor	r13,rax
572	ror	r14,5
573	xor	r15,rcx
574
575	mov	QWORD[96+rsp],r12
576	xor	r14,r8
577	and	r15,rax
578
579	ror	r13,4
580	add	r12,rdx
581	xor	r15,rcx
582
583	ror	r14,6
584	xor	r13,rax
585	add	r12,r15
586
587	mov	r15,r8
588	add	r12,QWORD[rbp]
589	xor	r14,r8
590
591	xor	r15,r9
592	ror	r13,14
593	mov	rdx,r9
594
595	and	rdi,r15
596	ror	r14,28
597	add	r12,r13
598
599	xor	rdx,rdi
600	add	r11,r12
601	add	rdx,r12
602
603	lea	rbp,[8+rbp]
604	add	rdx,r14
605	mov	r12,QWORD[104+rsi]
606	mov	r13,r11
607	mov	r14,rdx
608	bswap	r12
609	ror	r13,23
610	mov	rdi,rax
611
612	xor	r13,r11
613	ror	r14,5
614	xor	rdi,rbx
615
616	mov	QWORD[104+rsp],r12
617	xor	r14,rdx
618	and	rdi,r11
619
620	ror	r13,4
621	add	r12,rcx
622	xor	rdi,rbx
623
624	ror	r14,6
625	xor	r13,r11
626	add	r12,rdi
627
628	mov	rdi,rdx
629	add	r12,QWORD[rbp]
630	xor	r14,rdx
631
632	xor	rdi,r8
633	ror	r13,14
634	mov	rcx,r8
635
636	and	r15,rdi
637	ror	r14,28
638	add	r12,r13
639
640	xor	rcx,r15
641	add	r10,r12
642	add	rcx,r12
643
644	lea	rbp,[24+rbp]
645	add	rcx,r14
646	mov	r12,QWORD[112+rsi]
647	mov	r13,r10
648	mov	r14,rcx
649	bswap	r12
650	ror	r13,23
651	mov	r15,r11
652
653	xor	r13,r10
654	ror	r14,5
655	xor	r15,rax
656
657	mov	QWORD[112+rsp],r12
658	xor	r14,rcx
659	and	r15,r10
660
661	ror	r13,4
662	add	r12,rbx
663	xor	r15,rax
664
665	ror	r14,6
666	xor	r13,r10
667	add	r12,r15
668
669	mov	r15,rcx
670	add	r12,QWORD[rbp]
671	xor	r14,rcx
672
673	xor	r15,rdx
674	ror	r13,14
675	mov	rbx,rdx
676
677	and	rdi,r15
678	ror	r14,28
679	add	r12,r13
680
681	xor	rbx,rdi
682	add	r9,r12
683	add	rbx,r12
684
685	lea	rbp,[8+rbp]
686	add	rbx,r14
687	mov	r12,QWORD[120+rsi]
688	mov	r13,r9
689	mov	r14,rbx
690	bswap	r12
691	ror	r13,23
692	mov	rdi,r10
693
694	xor	r13,r9
695	ror	r14,5
696	xor	rdi,r11
697
698	mov	QWORD[120+rsp],r12
699	xor	r14,rbx
700	and	rdi,r9
701
702	ror	r13,4
703	add	r12,rax
704	xor	rdi,r11
705
706	ror	r14,6
707	xor	r13,r9
708	add	r12,rdi
709
710	mov	rdi,rbx
711	add	r12,QWORD[rbp]
712	xor	r14,rbx
713
714	xor	rdi,rcx
715	ror	r13,14
716	mov	rax,rcx
717
718	and	r15,rdi
719	ror	r14,28
720	add	r12,r13
721
722	xor	rax,r15
723	add	r8,r12
724	add	rax,r12
725
726	lea	rbp,[24+rbp]
727	jmp	NEAR $L$rounds_16_xx
728ALIGN	16
729$L$rounds_16_xx:
730	mov	r13,QWORD[8+rsp]
731	mov	r15,QWORD[112+rsp]
732
733	mov	r12,r13
734	ror	r13,7
735	add	rax,r14
736	mov	r14,r15
737	ror	r15,42
738
739	xor	r13,r12
740	shr	r12,7
741	ror	r13,1
742	xor	r15,r14
743	shr	r14,6
744
745	ror	r15,19
746	xor	r12,r13
747	xor	r15,r14
748	add	r12,QWORD[72+rsp]
749
750	add	r12,QWORD[rsp]
751	mov	r13,r8
752	add	r12,r15
753	mov	r14,rax
754	ror	r13,23
755	mov	r15,r9
756
757	xor	r13,r8
758	ror	r14,5
759	xor	r15,r10
760
761	mov	QWORD[rsp],r12
762	xor	r14,rax
763	and	r15,r8
764
765	ror	r13,4
766	add	r12,r11
767	xor	r15,r10
768
769	ror	r14,6
770	xor	r13,r8
771	add	r12,r15
772
773	mov	r15,rax
774	add	r12,QWORD[rbp]
775	xor	r14,rax
776
777	xor	r15,rbx
778	ror	r13,14
779	mov	r11,rbx
780
781	and	rdi,r15
782	ror	r14,28
783	add	r12,r13
784
785	xor	r11,rdi
786	add	rdx,r12
787	add	r11,r12
788
789	lea	rbp,[8+rbp]
790	mov	r13,QWORD[16+rsp]
791	mov	rdi,QWORD[120+rsp]
792
793	mov	r12,r13
794	ror	r13,7
795	add	r11,r14
796	mov	r14,rdi
797	ror	rdi,42
798
799	xor	r13,r12
800	shr	r12,7
801	ror	r13,1
802	xor	rdi,r14
803	shr	r14,6
804
805	ror	rdi,19
806	xor	r12,r13
807	xor	rdi,r14
808	add	r12,QWORD[80+rsp]
809
810	add	r12,QWORD[8+rsp]
811	mov	r13,rdx
812	add	r12,rdi
813	mov	r14,r11
814	ror	r13,23
815	mov	rdi,r8
816
817	xor	r13,rdx
818	ror	r14,5
819	xor	rdi,r9
820
821	mov	QWORD[8+rsp],r12
822	xor	r14,r11
823	and	rdi,rdx
824
825	ror	r13,4
826	add	r12,r10
827	xor	rdi,r9
828
829	ror	r14,6
830	xor	r13,rdx
831	add	r12,rdi
832
833	mov	rdi,r11
834	add	r12,QWORD[rbp]
835	xor	r14,r11
836
837	xor	rdi,rax
838	ror	r13,14
839	mov	r10,rax
840
841	and	r15,rdi
842	ror	r14,28
843	add	r12,r13
844
845	xor	r10,r15
846	add	rcx,r12
847	add	r10,r12
848
849	lea	rbp,[24+rbp]
850	mov	r13,QWORD[24+rsp]
851	mov	r15,QWORD[rsp]
852
853	mov	r12,r13
854	ror	r13,7
855	add	r10,r14
856	mov	r14,r15
857	ror	r15,42
858
859	xor	r13,r12
860	shr	r12,7
861	ror	r13,1
862	xor	r15,r14
863	shr	r14,6
864
865	ror	r15,19
866	xor	r12,r13
867	xor	r15,r14
868	add	r12,QWORD[88+rsp]
869
870	add	r12,QWORD[16+rsp]
871	mov	r13,rcx
872	add	r12,r15
873	mov	r14,r10
874	ror	r13,23
875	mov	r15,rdx
876
877	xor	r13,rcx
878	ror	r14,5
879	xor	r15,r8
880
881	mov	QWORD[16+rsp],r12
882	xor	r14,r10
883	and	r15,rcx
884
885	ror	r13,4
886	add	r12,r9
887	xor	r15,r8
888
889	ror	r14,6
890	xor	r13,rcx
891	add	r12,r15
892
893	mov	r15,r10
894	add	r12,QWORD[rbp]
895	xor	r14,r10
896
897	xor	r15,r11
898	ror	r13,14
899	mov	r9,r11
900
901	and	rdi,r15
902	ror	r14,28
903	add	r12,r13
904
905	xor	r9,rdi
906	add	rbx,r12
907	add	r9,r12
908
909	lea	rbp,[8+rbp]
910	mov	r13,QWORD[32+rsp]
911	mov	rdi,QWORD[8+rsp]
912
913	mov	r12,r13
914	ror	r13,7
915	add	r9,r14
916	mov	r14,rdi
917	ror	rdi,42
918
919	xor	r13,r12
920	shr	r12,7
921	ror	r13,1
922	xor	rdi,r14
923	shr	r14,6
924
925	ror	rdi,19
926	xor	r12,r13
927	xor	rdi,r14
928	add	r12,QWORD[96+rsp]
929
930	add	r12,QWORD[24+rsp]
931	mov	r13,rbx
932	add	r12,rdi
933	mov	r14,r9
934	ror	r13,23
935	mov	rdi,rcx
936
937	xor	r13,rbx
938	ror	r14,5
939	xor	rdi,rdx
940
941	mov	QWORD[24+rsp],r12
942	xor	r14,r9
943	and	rdi,rbx
944
945	ror	r13,4
946	add	r12,r8
947	xor	rdi,rdx
948
949	ror	r14,6
950	xor	r13,rbx
951	add	r12,rdi
952
953	mov	rdi,r9
954	add	r12,QWORD[rbp]
955	xor	r14,r9
956
957	xor	rdi,r10
958	ror	r13,14
959	mov	r8,r10
960
961	and	r15,rdi
962	ror	r14,28
963	add	r12,r13
964
965	xor	r8,r15
966	add	rax,r12
967	add	r8,r12
968
969	lea	rbp,[24+rbp]
970	mov	r13,QWORD[40+rsp]
971	mov	r15,QWORD[16+rsp]
972
973	mov	r12,r13
974	ror	r13,7
975	add	r8,r14
976	mov	r14,r15
977	ror	r15,42
978
979	xor	r13,r12
980	shr	r12,7
981	ror	r13,1
982	xor	r15,r14
983	shr	r14,6
984
985	ror	r15,19
986	xor	r12,r13
987	xor	r15,r14
988	add	r12,QWORD[104+rsp]
989
990	add	r12,QWORD[32+rsp]
991	mov	r13,rax
992	add	r12,r15
993	mov	r14,r8
994	ror	r13,23
995	mov	r15,rbx
996
997	xor	r13,rax
998	ror	r14,5
999	xor	r15,rcx
1000
1001	mov	QWORD[32+rsp],r12
1002	xor	r14,r8
1003	and	r15,rax
1004
1005	ror	r13,4
1006	add	r12,rdx
1007	xor	r15,rcx
1008
1009	ror	r14,6
1010	xor	r13,rax
1011	add	r12,r15
1012
1013	mov	r15,r8
1014	add	r12,QWORD[rbp]
1015	xor	r14,r8
1016
1017	xor	r15,r9
1018	ror	r13,14
1019	mov	rdx,r9
1020
1021	and	rdi,r15
1022	ror	r14,28
1023	add	r12,r13
1024
1025	xor	rdx,rdi
1026	add	r11,r12
1027	add	rdx,r12
1028
1029	lea	rbp,[8+rbp]
1030	mov	r13,QWORD[48+rsp]
1031	mov	rdi,QWORD[24+rsp]
1032
1033	mov	r12,r13
1034	ror	r13,7
1035	add	rdx,r14
1036	mov	r14,rdi
1037	ror	rdi,42
1038
1039	xor	r13,r12
1040	shr	r12,7
1041	ror	r13,1
1042	xor	rdi,r14
1043	shr	r14,6
1044
1045	ror	rdi,19
1046	xor	r12,r13
1047	xor	rdi,r14
1048	add	r12,QWORD[112+rsp]
1049
1050	add	r12,QWORD[40+rsp]
1051	mov	r13,r11
1052	add	r12,rdi
1053	mov	r14,rdx
1054	ror	r13,23
1055	mov	rdi,rax
1056
1057	xor	r13,r11
1058	ror	r14,5
1059	xor	rdi,rbx
1060
1061	mov	QWORD[40+rsp],r12
1062	xor	r14,rdx
1063	and	rdi,r11
1064
1065	ror	r13,4
1066	add	r12,rcx
1067	xor	rdi,rbx
1068
1069	ror	r14,6
1070	xor	r13,r11
1071	add	r12,rdi
1072
1073	mov	rdi,rdx
1074	add	r12,QWORD[rbp]
1075	xor	r14,rdx
1076
1077	xor	rdi,r8
1078	ror	r13,14
1079	mov	rcx,r8
1080
1081	and	r15,rdi
1082	ror	r14,28
1083	add	r12,r13
1084
1085	xor	rcx,r15
1086	add	r10,r12
1087	add	rcx,r12
1088
1089	lea	rbp,[24+rbp]
1090	mov	r13,QWORD[56+rsp]
1091	mov	r15,QWORD[32+rsp]
1092
1093	mov	r12,r13
1094	ror	r13,7
1095	add	rcx,r14
1096	mov	r14,r15
1097	ror	r15,42
1098
1099	xor	r13,r12
1100	shr	r12,7
1101	ror	r13,1
1102	xor	r15,r14
1103	shr	r14,6
1104
1105	ror	r15,19
1106	xor	r12,r13
1107	xor	r15,r14
1108	add	r12,QWORD[120+rsp]
1109
1110	add	r12,QWORD[48+rsp]
1111	mov	r13,r10
1112	add	r12,r15
1113	mov	r14,rcx
1114	ror	r13,23
1115	mov	r15,r11
1116
1117	xor	r13,r10
1118	ror	r14,5
1119	xor	r15,rax
1120
1121	mov	QWORD[48+rsp],r12
1122	xor	r14,rcx
1123	and	r15,r10
1124
1125	ror	r13,4
1126	add	r12,rbx
1127	xor	r15,rax
1128
1129	ror	r14,6
1130	xor	r13,r10
1131	add	r12,r15
1132
1133	mov	r15,rcx
1134	add	r12,QWORD[rbp]
1135	xor	r14,rcx
1136
1137	xor	r15,rdx
1138	ror	r13,14
1139	mov	rbx,rdx
1140
1141	and	rdi,r15
1142	ror	r14,28
1143	add	r12,r13
1144
1145	xor	rbx,rdi
1146	add	r9,r12
1147	add	rbx,r12
1148
1149	lea	rbp,[8+rbp]
1150	mov	r13,QWORD[64+rsp]
1151	mov	rdi,QWORD[40+rsp]
1152
1153	mov	r12,r13
1154	ror	r13,7
1155	add	rbx,r14
1156	mov	r14,rdi
1157	ror	rdi,42
1158
1159	xor	r13,r12
1160	shr	r12,7
1161	ror	r13,1
1162	xor	rdi,r14
1163	shr	r14,6
1164
1165	ror	rdi,19
1166	xor	r12,r13
1167	xor	rdi,r14
1168	add	r12,QWORD[rsp]
1169
1170	add	r12,QWORD[56+rsp]
1171	mov	r13,r9
1172	add	r12,rdi
1173	mov	r14,rbx
1174	ror	r13,23
1175	mov	rdi,r10
1176
1177	xor	r13,r9
1178	ror	r14,5
1179	xor	rdi,r11
1180
1181	mov	QWORD[56+rsp],r12
1182	xor	r14,rbx
1183	and	rdi,r9
1184
1185	ror	r13,4
1186	add	r12,rax
1187	xor	rdi,r11
1188
1189	ror	r14,6
1190	xor	r13,r9
1191	add	r12,rdi
1192
1193	mov	rdi,rbx
1194	add	r12,QWORD[rbp]
1195	xor	r14,rbx
1196
1197	xor	rdi,rcx
1198	ror	r13,14
1199	mov	rax,rcx
1200
1201	and	r15,rdi
1202	ror	r14,28
1203	add	r12,r13
1204
1205	xor	rax,r15
1206	add	r8,r12
1207	add	rax,r12
1208
1209	lea	rbp,[24+rbp]
1210	mov	r13,QWORD[72+rsp]
1211	mov	r15,QWORD[48+rsp]
1212
1213	mov	r12,r13
1214	ror	r13,7
1215	add	rax,r14
1216	mov	r14,r15
1217	ror	r15,42
1218
1219	xor	r13,r12
1220	shr	r12,7
1221	ror	r13,1
1222	xor	r15,r14
1223	shr	r14,6
1224
1225	ror	r15,19
1226	xor	r12,r13
1227	xor	r15,r14
1228	add	r12,QWORD[8+rsp]
1229
1230	add	r12,QWORD[64+rsp]
1231	mov	r13,r8
1232	add	r12,r15
1233	mov	r14,rax
1234	ror	r13,23
1235	mov	r15,r9
1236
1237	xor	r13,r8
1238	ror	r14,5
1239	xor	r15,r10
1240
1241	mov	QWORD[64+rsp],r12
1242	xor	r14,rax
1243	and	r15,r8
1244
1245	ror	r13,4
1246	add	r12,r11
1247	xor	r15,r10
1248
1249	ror	r14,6
1250	xor	r13,r8
1251	add	r12,r15
1252
1253	mov	r15,rax
1254	add	r12,QWORD[rbp]
1255	xor	r14,rax
1256
1257	xor	r15,rbx
1258	ror	r13,14
1259	mov	r11,rbx
1260
1261	and	rdi,r15
1262	ror	r14,28
1263	add	r12,r13
1264
1265	xor	r11,rdi
1266	add	rdx,r12
1267	add	r11,r12
1268
1269	lea	rbp,[8+rbp]
1270	mov	r13,QWORD[80+rsp]
1271	mov	rdi,QWORD[56+rsp]
1272
1273	mov	r12,r13
1274	ror	r13,7
1275	add	r11,r14
1276	mov	r14,rdi
1277	ror	rdi,42
1278
1279	xor	r13,r12
1280	shr	r12,7
1281	ror	r13,1
1282	xor	rdi,r14
1283	shr	r14,6
1284
1285	ror	rdi,19
1286	xor	r12,r13
1287	xor	rdi,r14
1288	add	r12,QWORD[16+rsp]
1289
1290	add	r12,QWORD[72+rsp]
1291	mov	r13,rdx
1292	add	r12,rdi
1293	mov	r14,r11
1294	ror	r13,23
1295	mov	rdi,r8
1296
1297	xor	r13,rdx
1298	ror	r14,5
1299	xor	rdi,r9
1300
1301	mov	QWORD[72+rsp],r12
1302	xor	r14,r11
1303	and	rdi,rdx
1304
1305	ror	r13,4
1306	add	r12,r10
1307	xor	rdi,r9
1308
1309	ror	r14,6
1310	xor	r13,rdx
1311	add	r12,rdi
1312
1313	mov	rdi,r11
1314	add	r12,QWORD[rbp]
1315	xor	r14,r11
1316
1317	xor	rdi,rax
1318	ror	r13,14
1319	mov	r10,rax
1320
1321	and	r15,rdi
1322	ror	r14,28
1323	add	r12,r13
1324
1325	xor	r10,r15
1326	add	rcx,r12
1327	add	r10,r12
1328
1329	lea	rbp,[24+rbp]
1330	mov	r13,QWORD[88+rsp]
1331	mov	r15,QWORD[64+rsp]
1332
1333	mov	r12,r13
1334	ror	r13,7
1335	add	r10,r14
1336	mov	r14,r15
1337	ror	r15,42
1338
1339	xor	r13,r12
1340	shr	r12,7
1341	ror	r13,1
1342	xor	r15,r14
1343	shr	r14,6
1344
1345	ror	r15,19
1346	xor	r12,r13
1347	xor	r15,r14
1348	add	r12,QWORD[24+rsp]
1349
1350	add	r12,QWORD[80+rsp]
1351	mov	r13,rcx
1352	add	r12,r15
1353	mov	r14,r10
1354	ror	r13,23
1355	mov	r15,rdx
1356
1357	xor	r13,rcx
1358	ror	r14,5
1359	xor	r15,r8
1360
1361	mov	QWORD[80+rsp],r12
1362	xor	r14,r10
1363	and	r15,rcx
1364
1365	ror	r13,4
1366	add	r12,r9
1367	xor	r15,r8
1368
1369	ror	r14,6
1370	xor	r13,rcx
1371	add	r12,r15
1372
1373	mov	r15,r10
1374	add	r12,QWORD[rbp]
1375	xor	r14,r10
1376
1377	xor	r15,r11
1378	ror	r13,14
1379	mov	r9,r11
1380
1381	and	rdi,r15
1382	ror	r14,28
1383	add	r12,r13
1384
1385	xor	r9,rdi
1386	add	rbx,r12
1387	add	r9,r12
1388
1389	lea	rbp,[8+rbp]
1390	mov	r13,QWORD[96+rsp]
1391	mov	rdi,QWORD[72+rsp]
1392
1393	mov	r12,r13
1394	ror	r13,7
1395	add	r9,r14
1396	mov	r14,rdi
1397	ror	rdi,42
1398
1399	xor	r13,r12
1400	shr	r12,7
1401	ror	r13,1
1402	xor	rdi,r14
1403	shr	r14,6
1404
1405	ror	rdi,19
1406	xor	r12,r13
1407	xor	rdi,r14
1408	add	r12,QWORD[32+rsp]
1409
1410	add	r12,QWORD[88+rsp]
1411	mov	r13,rbx
1412	add	r12,rdi
1413	mov	r14,r9
1414	ror	r13,23
1415	mov	rdi,rcx
1416
1417	xor	r13,rbx
1418	ror	r14,5
1419	xor	rdi,rdx
1420
1421	mov	QWORD[88+rsp],r12
1422	xor	r14,r9
1423	and	rdi,rbx
1424
1425	ror	r13,4
1426	add	r12,r8
1427	xor	rdi,rdx
1428
1429	ror	r14,6
1430	xor	r13,rbx
1431	add	r12,rdi
1432
1433	mov	rdi,r9
1434	add	r12,QWORD[rbp]
1435	xor	r14,r9
1436
1437	xor	rdi,r10
1438	ror	r13,14
1439	mov	r8,r10
1440
1441	and	r15,rdi
1442	ror	r14,28
1443	add	r12,r13
1444
1445	xor	r8,r15
1446	add	rax,r12
1447	add	r8,r12
1448
1449	lea	rbp,[24+rbp]
1450	mov	r13,QWORD[104+rsp]
1451	mov	r15,QWORD[80+rsp]
1452
1453	mov	r12,r13
1454	ror	r13,7
1455	add	r8,r14
1456	mov	r14,r15
1457	ror	r15,42
1458
1459	xor	r13,r12
1460	shr	r12,7
1461	ror	r13,1
1462	xor	r15,r14
1463	shr	r14,6
1464
1465	ror	r15,19
1466	xor	r12,r13
1467	xor	r15,r14
1468	add	r12,QWORD[40+rsp]
1469
1470	add	r12,QWORD[96+rsp]
1471	mov	r13,rax
1472	add	r12,r15
1473	mov	r14,r8
1474	ror	r13,23
1475	mov	r15,rbx
1476
1477	xor	r13,rax
1478	ror	r14,5
1479	xor	r15,rcx
1480
1481	mov	QWORD[96+rsp],r12
1482	xor	r14,r8
1483	and	r15,rax
1484
1485	ror	r13,4
1486	add	r12,rdx
1487	xor	r15,rcx
1488
1489	ror	r14,6
1490	xor	r13,rax
1491	add	r12,r15
1492
1493	mov	r15,r8
1494	add	r12,QWORD[rbp]
1495	xor	r14,r8
1496
1497	xor	r15,r9
1498	ror	r13,14
1499	mov	rdx,r9
1500
1501	and	rdi,r15
1502	ror	r14,28
1503	add	r12,r13
1504
1505	xor	rdx,rdi
1506	add	r11,r12
1507	add	rdx,r12
1508
1509	lea	rbp,[8+rbp]
1510	mov	r13,QWORD[112+rsp]
1511	mov	rdi,QWORD[88+rsp]
1512
1513	mov	r12,r13
1514	ror	r13,7
1515	add	rdx,r14
1516	mov	r14,rdi
1517	ror	rdi,42
1518
1519	xor	r13,r12
1520	shr	r12,7
1521	ror	r13,1
1522	xor	rdi,r14
1523	shr	r14,6
1524
1525	ror	rdi,19
1526	xor	r12,r13
1527	xor	rdi,r14
1528	add	r12,QWORD[48+rsp]
1529
1530	add	r12,QWORD[104+rsp]
1531	mov	r13,r11
1532	add	r12,rdi
1533	mov	r14,rdx
1534	ror	r13,23
1535	mov	rdi,rax
1536
1537	xor	r13,r11
1538	ror	r14,5
1539	xor	rdi,rbx
1540
1541	mov	QWORD[104+rsp],r12
1542	xor	r14,rdx
1543	and	rdi,r11
1544
1545	ror	r13,4
1546	add	r12,rcx
1547	xor	rdi,rbx
1548
1549	ror	r14,6
1550	xor	r13,r11
1551	add	r12,rdi
1552
1553	mov	rdi,rdx
1554	add	r12,QWORD[rbp]
1555	xor	r14,rdx
1556
1557	xor	rdi,r8
1558	ror	r13,14
1559	mov	rcx,r8
1560
1561	and	r15,rdi
1562	ror	r14,28
1563	add	r12,r13
1564
1565	xor	rcx,r15
1566	add	r10,r12
1567	add	rcx,r12
1568
1569	lea	rbp,[24+rbp]
1570	mov	r13,QWORD[120+rsp]
1571	mov	r15,QWORD[96+rsp]
1572
1573	mov	r12,r13
1574	ror	r13,7
1575	add	rcx,r14
1576	mov	r14,r15
1577	ror	r15,42
1578
1579	xor	r13,r12
1580	shr	r12,7
1581	ror	r13,1
1582	xor	r15,r14
1583	shr	r14,6
1584
1585	ror	r15,19
1586	xor	r12,r13
1587	xor	r15,r14
1588	add	r12,QWORD[56+rsp]
1589
1590	add	r12,QWORD[112+rsp]
1591	mov	r13,r10
1592	add	r12,r15
1593	mov	r14,rcx
1594	ror	r13,23
1595	mov	r15,r11
1596
1597	xor	r13,r10
1598	ror	r14,5
1599	xor	r15,rax
1600
1601	mov	QWORD[112+rsp],r12
1602	xor	r14,rcx
1603	and	r15,r10
1604
1605	ror	r13,4
1606	add	r12,rbx
1607	xor	r15,rax
1608
1609	ror	r14,6
1610	xor	r13,r10
1611	add	r12,r15
1612
1613	mov	r15,rcx
1614	add	r12,QWORD[rbp]
1615	xor	r14,rcx
1616
1617	xor	r15,rdx
1618	ror	r13,14
1619	mov	rbx,rdx
1620
1621	and	rdi,r15
1622	ror	r14,28
1623	add	r12,r13
1624
1625	xor	rbx,rdi
1626	add	r9,r12
1627	add	rbx,r12
1628
1629	lea	rbp,[8+rbp]
1630	mov	r13,QWORD[rsp]
1631	mov	rdi,QWORD[104+rsp]
1632
1633	mov	r12,r13
1634	ror	r13,7
1635	add	rbx,r14
1636	mov	r14,rdi
1637	ror	rdi,42
1638
1639	xor	r13,r12
1640	shr	r12,7
1641	ror	r13,1
1642	xor	rdi,r14
1643	shr	r14,6
1644
1645	ror	rdi,19
1646	xor	r12,r13
1647	xor	rdi,r14
1648	add	r12,QWORD[64+rsp]
1649
1650	add	r12,QWORD[120+rsp]
1651	mov	r13,r9
1652	add	r12,rdi
1653	mov	r14,rbx
1654	ror	r13,23
1655	mov	rdi,r10
1656
1657	xor	r13,r9
1658	ror	r14,5
1659	xor	rdi,r11
1660
1661	mov	QWORD[120+rsp],r12
1662	xor	r14,rbx
1663	and	rdi,r9
1664
1665	ror	r13,4
1666	add	r12,rax
1667	xor	rdi,r11
1668
1669	ror	r14,6
1670	xor	r13,r9
1671	add	r12,rdi
1672
1673	mov	rdi,rbx
1674	add	r12,QWORD[rbp]
1675	xor	r14,rbx
1676
1677	xor	rdi,rcx
1678	ror	r13,14
1679	mov	rax,rcx
1680
1681	and	r15,rdi
1682	ror	r14,28
1683	add	r12,r13
1684
1685	xor	rax,r15
1686	add	r8,r12
1687	add	rax,r12
1688
1689	lea	rbp,[24+rbp]
1690	cmp	BYTE[7+rbp],0
1691	jnz	NEAR $L$rounds_16_xx
1692
1693	mov	rdi,QWORD[((128+0))+rsp]
1694	add	rax,r14
1695	lea	rsi,[128+rsi]
1696
1697	add	rax,QWORD[rdi]
1698	add	rbx,QWORD[8+rdi]
1699	add	rcx,QWORD[16+rdi]
1700	add	rdx,QWORD[24+rdi]
1701	add	r8,QWORD[32+rdi]
1702	add	r9,QWORD[40+rdi]
1703	add	r10,QWORD[48+rdi]
1704	add	r11,QWORD[56+rdi]
1705
1706	cmp	rsi,QWORD[((128+16))+rsp]
1707
1708	mov	QWORD[rdi],rax
1709	mov	QWORD[8+rdi],rbx
1710	mov	QWORD[16+rdi],rcx
1711	mov	QWORD[24+rdi],rdx
1712	mov	QWORD[32+rdi],r8
1713	mov	QWORD[40+rdi],r9
1714	mov	QWORD[48+rdi],r10
1715	mov	QWORD[56+rdi],r11
1716	jb	NEAR $L$loop
1717
1718	mov	rsi,QWORD[152+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_sha512_block_data_order_nohw:
1740section	.rdata rdata align=8
1741ALIGN	64
1742
1743K512:
1744	DQ	0x428a2f98d728ae22,0x7137449123ef65cd
1745	DQ	0x428a2f98d728ae22,0x7137449123ef65cd
1746	DQ	0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
1747	DQ	0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
1748	DQ	0x3956c25bf348b538,0x59f111f1b605d019
1749	DQ	0x3956c25bf348b538,0x59f111f1b605d019
1750	DQ	0x923f82a4af194f9b,0xab1c5ed5da6d8118
1751	DQ	0x923f82a4af194f9b,0xab1c5ed5da6d8118
1752	DQ	0xd807aa98a3030242,0x12835b0145706fbe
1753	DQ	0xd807aa98a3030242,0x12835b0145706fbe
1754	DQ	0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
1755	DQ	0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
1756	DQ	0x72be5d74f27b896f,0x80deb1fe3b1696b1
1757	DQ	0x72be5d74f27b896f,0x80deb1fe3b1696b1
1758	DQ	0x9bdc06a725c71235,0xc19bf174cf692694
1759	DQ	0x9bdc06a725c71235,0xc19bf174cf692694
1760	DQ	0xe49b69c19ef14ad2,0xefbe4786384f25e3
1761	DQ	0xe49b69c19ef14ad2,0xefbe4786384f25e3
1762	DQ	0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
1763	DQ	0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
1764	DQ	0x2de92c6f592b0275,0x4a7484aa6ea6e483
1765	DQ	0x2de92c6f592b0275,0x4a7484aa6ea6e483
1766	DQ	0x5cb0a9dcbd41fbd4,0x76f988da831153b5
1767	DQ	0x5cb0a9dcbd41fbd4,0x76f988da831153b5
1768	DQ	0x983e5152ee66dfab,0xa831c66d2db43210
1769	DQ	0x983e5152ee66dfab,0xa831c66d2db43210
1770	DQ	0xb00327c898fb213f,0xbf597fc7beef0ee4
1771	DQ	0xb00327c898fb213f,0xbf597fc7beef0ee4
1772	DQ	0xc6e00bf33da88fc2,0xd5a79147930aa725
1773	DQ	0xc6e00bf33da88fc2,0xd5a79147930aa725
1774	DQ	0x06ca6351e003826f,0x142929670a0e6e70
1775	DQ	0x06ca6351e003826f,0x142929670a0e6e70
1776	DQ	0x27b70a8546d22ffc,0x2e1b21385c26c926
1777	DQ	0x27b70a8546d22ffc,0x2e1b21385c26c926
1778	DQ	0x4d2c6dfc5ac42aed,0x53380d139d95b3df
1779	DQ	0x4d2c6dfc5ac42aed,0x53380d139d95b3df
1780	DQ	0x650a73548baf63de,0x766a0abb3c77b2a8
1781	DQ	0x650a73548baf63de,0x766a0abb3c77b2a8
1782	DQ	0x81c2c92e47edaee6,0x92722c851482353b
1783	DQ	0x81c2c92e47edaee6,0x92722c851482353b
1784	DQ	0xa2bfe8a14cf10364,0xa81a664bbc423001
1785	DQ	0xa2bfe8a14cf10364,0xa81a664bbc423001
1786	DQ	0xc24b8b70d0f89791,0xc76c51a30654be30
1787	DQ	0xc24b8b70d0f89791,0xc76c51a30654be30
1788	DQ	0xd192e819d6ef5218,0xd69906245565a910
1789	DQ	0xd192e819d6ef5218,0xd69906245565a910
1790	DQ	0xf40e35855771202a,0x106aa07032bbd1b8
1791	DQ	0xf40e35855771202a,0x106aa07032bbd1b8
1792	DQ	0x19a4c116b8d2d0c8,0x1e376c085141ab53
1793	DQ	0x19a4c116b8d2d0c8,0x1e376c085141ab53
1794	DQ	0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
1795	DQ	0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
1796	DQ	0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
1797	DQ	0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
1798	DQ	0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
1799	DQ	0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
1800	DQ	0x748f82ee5defb2fc,0x78a5636f43172f60
1801	DQ	0x748f82ee5defb2fc,0x78a5636f43172f60
1802	DQ	0x84c87814a1f0ab72,0x8cc702081a6439ec
1803	DQ	0x84c87814a1f0ab72,0x8cc702081a6439ec
1804	DQ	0x90befffa23631e28,0xa4506cebde82bde9
1805	DQ	0x90befffa23631e28,0xa4506cebde82bde9
1806	DQ	0xbef9a3f7b2c67915,0xc67178f2e372532b
1807	DQ	0xbef9a3f7b2c67915,0xc67178f2e372532b
1808	DQ	0xca273eceea26619c,0xd186b8c721c0c207
1809	DQ	0xca273eceea26619c,0xd186b8c721c0c207
1810	DQ	0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
1811	DQ	0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
1812	DQ	0x06f067aa72176fba,0x0a637dc5a2c898a6
1813	DQ	0x06f067aa72176fba,0x0a637dc5a2c898a6
1814	DQ	0x113f9804bef90dae,0x1b710b35131c471b
1815	DQ	0x113f9804bef90dae,0x1b710b35131c471b
1816	DQ	0x28db77f523047d84,0x32caab7b40c72493
1817	DQ	0x28db77f523047d84,0x32caab7b40c72493
1818	DQ	0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
1819	DQ	0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
1820	DQ	0x4cc5d4becb3e42b6,0x597f299cfc657e2a
1821	DQ	0x4cc5d4becb3e42b6,0x597f299cfc657e2a
1822	DQ	0x5fcb6fab3ad6faec,0x6c44198c4a475817
1823	DQ	0x5fcb6fab3ad6faec,0x6c44198c4a475817
1824
1825	DQ	0x0001020304050607,0x08090a0b0c0d0e0f
1826	DQ	0x0001020304050607,0x08090a0b0c0d0e0f
1827	DB	83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
1828	DB	110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54
1829	DB	52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
1830	DB	32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
1831	DB	111,114,103,62,0
1832section	.text
1833
1834global	sha512_block_data_order_avx
1835
1836ALIGN	64
1837sha512_block_data_order_avx:
1838	mov	QWORD[8+rsp],rdi	;WIN64 prologue
1839	mov	QWORD[16+rsp],rsi
1840	mov	rax,rsp
1841$L$SEH_begin_sha512_block_data_order_avx:
1842	mov	rdi,rcx
1843	mov	rsi,rdx
1844	mov	rdx,r8
1845
1846
1847
1848_CET_ENDBR
1849	mov	rax,rsp
1850
1851	push	rbx
1852
1853	push	rbp
1854
1855	push	r12
1856
1857	push	r13
1858
1859	push	r14
1860
1861	push	r15
1862
1863	shl	rdx,4
1864	sub	rsp,256
1865	lea	rdx,[rdx*8+rsi]
1866	and	rsp,-64
1867	mov	QWORD[((128+0))+rsp],rdi
1868	mov	QWORD[((128+8))+rsp],rsi
1869	mov	QWORD[((128+16))+rsp],rdx
1870	mov	QWORD[152+rsp],rax
1871
1872	movaps	XMMWORD[(128+32)+rsp],xmm6
1873	movaps	XMMWORD[(128+48)+rsp],xmm7
1874	movaps	XMMWORD[(128+64)+rsp],xmm8
1875	movaps	XMMWORD[(128+80)+rsp],xmm9
1876	movaps	XMMWORD[(128+96)+rsp],xmm10
1877	movaps	XMMWORD[(128+112)+rsp],xmm11
1878$L$prologue_avx:
1879
1880	vzeroupper
1881	mov	rax,QWORD[rdi]
1882	mov	rbx,QWORD[8+rdi]
1883	mov	rcx,QWORD[16+rdi]
1884	mov	rdx,QWORD[24+rdi]
1885	mov	r8,QWORD[32+rdi]
1886	mov	r9,QWORD[40+rdi]
1887	mov	r10,QWORD[48+rdi]
1888	mov	r11,QWORD[56+rdi]
1889	jmp	NEAR $L$loop_avx
1890ALIGN	16
1891$L$loop_avx:
1892	vmovdqa	xmm11,XMMWORD[((K512+1280))]
1893	vmovdqu	xmm0,XMMWORD[rsi]
1894	lea	rbp,[((K512+128))]
1895	vmovdqu	xmm1,XMMWORD[16+rsi]
1896	vmovdqu	xmm2,XMMWORD[32+rsi]
1897	vpshufb	xmm0,xmm0,xmm11
1898	vmovdqu	xmm3,XMMWORD[48+rsi]
1899	vpshufb	xmm1,xmm1,xmm11
1900	vmovdqu	xmm4,XMMWORD[64+rsi]
1901	vpshufb	xmm2,xmm2,xmm11
1902	vmovdqu	xmm5,XMMWORD[80+rsi]
1903	vpshufb	xmm3,xmm3,xmm11
1904	vmovdqu	xmm6,XMMWORD[96+rsi]
1905	vpshufb	xmm4,xmm4,xmm11
1906	vmovdqu	xmm7,XMMWORD[112+rsi]
1907	vpshufb	xmm5,xmm5,xmm11
1908	vpaddq	xmm8,xmm0,XMMWORD[((-128))+rbp]
1909	vpshufb	xmm6,xmm6,xmm11
1910	vpaddq	xmm9,xmm1,XMMWORD[((-96))+rbp]
1911	vpshufb	xmm7,xmm7,xmm11
1912	vpaddq	xmm10,xmm2,XMMWORD[((-64))+rbp]
1913	vpaddq	xmm11,xmm3,XMMWORD[((-32))+rbp]
1914	vmovdqa	XMMWORD[rsp],xmm8
1915	vpaddq	xmm8,xmm4,XMMWORD[rbp]
1916	vmovdqa	XMMWORD[16+rsp],xmm9
1917	vpaddq	xmm9,xmm5,XMMWORD[32+rbp]
1918	vmovdqa	XMMWORD[32+rsp],xmm10
1919	vpaddq	xmm10,xmm6,XMMWORD[64+rbp]
1920	vmovdqa	XMMWORD[48+rsp],xmm11
1921	vpaddq	xmm11,xmm7,XMMWORD[96+rbp]
1922	vmovdqa	XMMWORD[64+rsp],xmm8
1923	mov	r14,rax
1924	vmovdqa	XMMWORD[80+rsp],xmm9
1925	mov	rdi,rbx
1926	vmovdqa	XMMWORD[96+rsp],xmm10
1927	xor	rdi,rcx
1928	vmovdqa	XMMWORD[112+rsp],xmm11
1929	mov	r13,r8
1930	jmp	NEAR $L$avx_00_47
1931
1932ALIGN	16
1933$L$avx_00_47:
1934	add	rbp,256
1935	vpalignr	xmm8,xmm1,xmm0,8
1936	shrd	r13,r13,23
1937	mov	rax,r14
1938	vpalignr	xmm11,xmm5,xmm4,8
1939	mov	r12,r9
1940	shrd	r14,r14,5
1941	vpsrlq	xmm10,xmm8,1
1942	xor	r13,r8
1943	xor	r12,r10
1944	vpaddq	xmm0,xmm0,xmm11
1945	shrd	r13,r13,4
1946	xor	r14,rax
1947	vpsrlq	xmm11,xmm8,7
1948	and	r12,r8
1949	xor	r13,r8
1950	vpsllq	xmm9,xmm8,56
1951	add	r11,QWORD[rsp]
1952	mov	r15,rax
1953	vpxor	xmm8,xmm11,xmm10
1954	xor	r12,r10
1955	shrd	r14,r14,6
1956	vpsrlq	xmm10,xmm10,7
1957	xor	r15,rbx
1958	add	r11,r12
1959	vpxor	xmm8,xmm8,xmm9
1960	shrd	r13,r13,14
1961	and	rdi,r15
1962	vpsllq	xmm9,xmm9,7
1963	xor	r14,rax
1964	add	r11,r13
1965	vpxor	xmm8,xmm8,xmm10
1966	xor	rdi,rbx
1967	shrd	r14,r14,28
1968	vpsrlq	xmm11,xmm7,6
1969	add	rdx,r11
1970	add	r11,rdi
1971	vpxor	xmm8,xmm8,xmm9
1972	mov	r13,rdx
1973	add	r14,r11
1974	vpsllq	xmm10,xmm7,3
1975	shrd	r13,r13,23
1976	mov	r11,r14
1977	vpaddq	xmm0,xmm0,xmm8
1978	mov	r12,r8
1979	shrd	r14,r14,5
1980	vpsrlq	xmm9,xmm7,19
1981	xor	r13,rdx
1982	xor	r12,r9
1983	vpxor	xmm11,xmm11,xmm10
1984	shrd	r13,r13,4
1985	xor	r14,r11
1986	vpsllq	xmm10,xmm10,42
1987	and	r12,rdx
1988	xor	r13,rdx
1989	vpxor	xmm11,xmm11,xmm9
1990	add	r10,QWORD[8+rsp]
1991	mov	rdi,r11
1992	vpsrlq	xmm9,xmm9,42
1993	xor	r12,r9
1994	shrd	r14,r14,6
1995	vpxor	xmm11,xmm11,xmm10
1996	xor	rdi,rax
1997	add	r10,r12
1998	vpxor	xmm11,xmm11,xmm9
1999	shrd	r13,r13,14
2000	and	r15,rdi
2001	vpaddq	xmm0,xmm0,xmm11
2002	xor	r14,r11
2003	add	r10,r13
2004	vpaddq	xmm10,xmm0,XMMWORD[((-128))+rbp]
2005	xor	r15,rax
2006	shrd	r14,r14,28
2007	add	rcx,r10
2008	add	r10,r15
2009	mov	r13,rcx
2010	add	r14,r10
2011	vmovdqa	XMMWORD[rsp],xmm10
2012	vpalignr	xmm8,xmm2,xmm1,8
2013	shrd	r13,r13,23
2014	mov	r10,r14
2015	vpalignr	xmm11,xmm6,xmm5,8
2016	mov	r12,rdx
2017	shrd	r14,r14,5
2018	vpsrlq	xmm10,xmm8,1
2019	xor	r13,rcx
2020	xor	r12,r8
2021	vpaddq	xmm1,xmm1,xmm11
2022	shrd	r13,r13,4
2023	xor	r14,r10
2024	vpsrlq	xmm11,xmm8,7
2025	and	r12,rcx
2026	xor	r13,rcx
2027	vpsllq	xmm9,xmm8,56
2028	add	r9,QWORD[16+rsp]
2029	mov	r15,r10
2030	vpxor	xmm8,xmm11,xmm10
2031	xor	r12,r8
2032	shrd	r14,r14,6
2033	vpsrlq	xmm10,xmm10,7
2034	xor	r15,r11
2035	add	r9,r12
2036	vpxor	xmm8,xmm8,xmm9
2037	shrd	r13,r13,14
2038	and	rdi,r15
2039	vpsllq	xmm9,xmm9,7
2040	xor	r14,r10
2041	add	r9,r13
2042	vpxor	xmm8,xmm8,xmm10
2043	xor	rdi,r11
2044	shrd	r14,r14,28
2045	vpsrlq	xmm11,xmm0,6
2046	add	rbx,r9
2047	add	r9,rdi
2048	vpxor	xmm8,xmm8,xmm9
2049	mov	r13,rbx
2050	add	r14,r9
2051	vpsllq	xmm10,xmm0,3
2052	shrd	r13,r13,23
2053	mov	r9,r14
2054	vpaddq	xmm1,xmm1,xmm8
2055	mov	r12,rcx
2056	shrd	r14,r14,5
2057	vpsrlq	xmm9,xmm0,19
2058	xor	r13,rbx
2059	xor	r12,rdx
2060	vpxor	xmm11,xmm11,xmm10
2061	shrd	r13,r13,4
2062	xor	r14,r9
2063	vpsllq	xmm10,xmm10,42
2064	and	r12,rbx
2065	xor	r13,rbx
2066	vpxor	xmm11,xmm11,xmm9
2067	add	r8,QWORD[24+rsp]
2068	mov	rdi,r9
2069	vpsrlq	xmm9,xmm9,42
2070	xor	r12,rdx
2071	shrd	r14,r14,6
2072	vpxor	xmm11,xmm11,xmm10
2073	xor	rdi,r10
2074	add	r8,r12
2075	vpxor	xmm11,xmm11,xmm9
2076	shrd	r13,r13,14
2077	and	r15,rdi
2078	vpaddq	xmm1,xmm1,xmm11
2079	xor	r14,r9
2080	add	r8,r13
2081	vpaddq	xmm10,xmm1,XMMWORD[((-96))+rbp]
2082	xor	r15,r10
2083	shrd	r14,r14,28
2084	add	rax,r8
2085	add	r8,r15
2086	mov	r13,rax
2087	add	r14,r8
2088	vmovdqa	XMMWORD[16+rsp],xmm10
2089	vpalignr	xmm8,xmm3,xmm2,8
2090	shrd	r13,r13,23
2091	mov	r8,r14
2092	vpalignr	xmm11,xmm7,xmm6,8
2093	mov	r12,rbx
2094	shrd	r14,r14,5
2095	vpsrlq	xmm10,xmm8,1
2096	xor	r13,rax
2097	xor	r12,rcx
2098	vpaddq	xmm2,xmm2,xmm11
2099	shrd	r13,r13,4
2100	xor	r14,r8
2101	vpsrlq	xmm11,xmm8,7
2102	and	r12,rax
2103	xor	r13,rax
2104	vpsllq	xmm9,xmm8,56
2105	add	rdx,QWORD[32+rsp]
2106	mov	r15,r8
2107	vpxor	xmm8,xmm11,xmm10
2108	xor	r12,rcx
2109	shrd	r14,r14,6
2110	vpsrlq	xmm10,xmm10,7
2111	xor	r15,r9
2112	add	rdx,r12
2113	vpxor	xmm8,xmm8,xmm9
2114	shrd	r13,r13,14
2115	and	rdi,r15
2116	vpsllq	xmm9,xmm9,7
2117	xor	r14,r8
2118	add	rdx,r13
2119	vpxor	xmm8,xmm8,xmm10
2120	xor	rdi,r9
2121	shrd	r14,r14,28
2122	vpsrlq	xmm11,xmm1,6
2123	add	r11,rdx
2124	add	rdx,rdi
2125	vpxor	xmm8,xmm8,xmm9
2126	mov	r13,r11
2127	add	r14,rdx
2128	vpsllq	xmm10,xmm1,3
2129	shrd	r13,r13,23
2130	mov	rdx,r14
2131	vpaddq	xmm2,xmm2,xmm8
2132	mov	r12,rax
2133	shrd	r14,r14,5
2134	vpsrlq	xmm9,xmm1,19
2135	xor	r13,r11
2136	xor	r12,rbx
2137	vpxor	xmm11,xmm11,xmm10
2138	shrd	r13,r13,4
2139	xor	r14,rdx
2140	vpsllq	xmm10,xmm10,42
2141	and	r12,r11
2142	xor	r13,r11
2143	vpxor	xmm11,xmm11,xmm9
2144	add	rcx,QWORD[40+rsp]
2145	mov	rdi,rdx
2146	vpsrlq	xmm9,xmm9,42
2147	xor	r12,rbx
2148	shrd	r14,r14,6
2149	vpxor	xmm11,xmm11,xmm10
2150	xor	rdi,r8
2151	add	rcx,r12
2152	vpxor	xmm11,xmm11,xmm9
2153	shrd	r13,r13,14
2154	and	r15,rdi
2155	vpaddq	xmm2,xmm2,xmm11
2156	xor	r14,rdx
2157	add	rcx,r13
2158	vpaddq	xmm10,xmm2,XMMWORD[((-64))+rbp]
2159	xor	r15,r8
2160	shrd	r14,r14,28
2161	add	r10,rcx
2162	add	rcx,r15
2163	mov	r13,r10
2164	add	r14,rcx
2165	vmovdqa	XMMWORD[32+rsp],xmm10
2166	vpalignr	xmm8,xmm4,xmm3,8
2167	shrd	r13,r13,23
2168	mov	rcx,r14
2169	vpalignr	xmm11,xmm0,xmm7,8
2170	mov	r12,r11
2171	shrd	r14,r14,5
2172	vpsrlq	xmm10,xmm8,1
2173	xor	r13,r10
2174	xor	r12,rax
2175	vpaddq	xmm3,xmm3,xmm11
2176	shrd	r13,r13,4
2177	xor	r14,rcx
2178	vpsrlq	xmm11,xmm8,7
2179	and	r12,r10
2180	xor	r13,r10
2181	vpsllq	xmm9,xmm8,56
2182	add	rbx,QWORD[48+rsp]
2183	mov	r15,rcx
2184	vpxor	xmm8,xmm11,xmm10
2185	xor	r12,rax
2186	shrd	r14,r14,6
2187	vpsrlq	xmm10,xmm10,7
2188	xor	r15,rdx
2189	add	rbx,r12
2190	vpxor	xmm8,xmm8,xmm9
2191	shrd	r13,r13,14
2192	and	rdi,r15
2193	vpsllq	xmm9,xmm9,7
2194	xor	r14,rcx
2195	add	rbx,r13
2196	vpxor	xmm8,xmm8,xmm10
2197	xor	rdi,rdx
2198	shrd	r14,r14,28
2199	vpsrlq	xmm11,xmm2,6
2200	add	r9,rbx
2201	add	rbx,rdi
2202	vpxor	xmm8,xmm8,xmm9
2203	mov	r13,r9
2204	add	r14,rbx
2205	vpsllq	xmm10,xmm2,3
2206	shrd	r13,r13,23
2207	mov	rbx,r14
2208	vpaddq	xmm3,xmm3,xmm8
2209	mov	r12,r10
2210	shrd	r14,r14,5
2211	vpsrlq	xmm9,xmm2,19
2212	xor	r13,r9
2213	xor	r12,r11
2214	vpxor	xmm11,xmm11,xmm10
2215	shrd	r13,r13,4
2216	xor	r14,rbx
2217	vpsllq	xmm10,xmm10,42
2218	and	r12,r9
2219	xor	r13,r9
2220	vpxor	xmm11,xmm11,xmm9
2221	add	rax,QWORD[56+rsp]
2222	mov	rdi,rbx
2223	vpsrlq	xmm9,xmm9,42
2224	xor	r12,r11
2225	shrd	r14,r14,6
2226	vpxor	xmm11,xmm11,xmm10
2227	xor	rdi,rcx
2228	add	rax,r12
2229	vpxor	xmm11,xmm11,xmm9
2230	shrd	r13,r13,14
2231	and	r15,rdi
2232	vpaddq	xmm3,xmm3,xmm11
2233	xor	r14,rbx
2234	add	rax,r13
2235	vpaddq	xmm10,xmm3,XMMWORD[((-32))+rbp]
2236	xor	r15,rcx
2237	shrd	r14,r14,28
2238	add	r8,rax
2239	add	rax,r15
2240	mov	r13,r8
2241	add	r14,rax
2242	vmovdqa	XMMWORD[48+rsp],xmm10
2243	vpalignr	xmm8,xmm5,xmm4,8
2244	shrd	r13,r13,23
2245	mov	rax,r14
2246	vpalignr	xmm11,xmm1,xmm0,8
2247	mov	r12,r9
2248	shrd	r14,r14,5
2249	vpsrlq	xmm10,xmm8,1
2250	xor	r13,r8
2251	xor	r12,r10
2252	vpaddq	xmm4,xmm4,xmm11
2253	shrd	r13,r13,4
2254	xor	r14,rax
2255	vpsrlq	xmm11,xmm8,7
2256	and	r12,r8
2257	xor	r13,r8
2258	vpsllq	xmm9,xmm8,56
2259	add	r11,QWORD[64+rsp]
2260	mov	r15,rax
2261	vpxor	xmm8,xmm11,xmm10
2262	xor	r12,r10
2263	shrd	r14,r14,6
2264	vpsrlq	xmm10,xmm10,7
2265	xor	r15,rbx
2266	add	r11,r12
2267	vpxor	xmm8,xmm8,xmm9
2268	shrd	r13,r13,14
2269	and	rdi,r15
2270	vpsllq	xmm9,xmm9,7
2271	xor	r14,rax
2272	add	r11,r13
2273	vpxor	xmm8,xmm8,xmm10
2274	xor	rdi,rbx
2275	shrd	r14,r14,28
2276	vpsrlq	xmm11,xmm3,6
2277	add	rdx,r11
2278	add	r11,rdi
2279	vpxor	xmm8,xmm8,xmm9
2280	mov	r13,rdx
2281	add	r14,r11
2282	vpsllq	xmm10,xmm3,3
2283	shrd	r13,r13,23
2284	mov	r11,r14
2285	vpaddq	xmm4,xmm4,xmm8
2286	mov	r12,r8
2287	shrd	r14,r14,5
2288	vpsrlq	xmm9,xmm3,19
2289	xor	r13,rdx
2290	xor	r12,r9
2291	vpxor	xmm11,xmm11,xmm10
2292	shrd	r13,r13,4
2293	xor	r14,r11
2294	vpsllq	xmm10,xmm10,42
2295	and	r12,rdx
2296	xor	r13,rdx
2297	vpxor	xmm11,xmm11,xmm9
2298	add	r10,QWORD[72+rsp]
2299	mov	rdi,r11
2300	vpsrlq	xmm9,xmm9,42
2301	xor	r12,r9
2302	shrd	r14,r14,6
2303	vpxor	xmm11,xmm11,xmm10
2304	xor	rdi,rax
2305	add	r10,r12
2306	vpxor	xmm11,xmm11,xmm9
2307	shrd	r13,r13,14
2308	and	r15,rdi
2309	vpaddq	xmm4,xmm4,xmm11
2310	xor	r14,r11
2311	add	r10,r13
2312	vpaddq	xmm10,xmm4,XMMWORD[rbp]
2313	xor	r15,rax
2314	shrd	r14,r14,28
2315	add	rcx,r10
2316	add	r10,r15
2317	mov	r13,rcx
2318	add	r14,r10
2319	vmovdqa	XMMWORD[64+rsp],xmm10
2320	vpalignr	xmm8,xmm6,xmm5,8
2321	shrd	r13,r13,23
2322	mov	r10,r14
2323	vpalignr	xmm11,xmm2,xmm1,8
2324	mov	r12,rdx
2325	shrd	r14,r14,5
2326	vpsrlq	xmm10,xmm8,1
2327	xor	r13,rcx
2328	xor	r12,r8
2329	vpaddq	xmm5,xmm5,xmm11
2330	shrd	r13,r13,4
2331	xor	r14,r10
2332	vpsrlq	xmm11,xmm8,7
2333	and	r12,rcx
2334	xor	r13,rcx
2335	vpsllq	xmm9,xmm8,56
2336	add	r9,QWORD[80+rsp]
2337	mov	r15,r10
2338	vpxor	xmm8,xmm11,xmm10
2339	xor	r12,r8
2340	shrd	r14,r14,6
2341	vpsrlq	xmm10,xmm10,7
2342	xor	r15,r11
2343	add	r9,r12
2344	vpxor	xmm8,xmm8,xmm9
2345	shrd	r13,r13,14
2346	and	rdi,r15
2347	vpsllq	xmm9,xmm9,7
2348	xor	r14,r10
2349	add	r9,r13
2350	vpxor	xmm8,xmm8,xmm10
2351	xor	rdi,r11
2352	shrd	r14,r14,28
2353	vpsrlq	xmm11,xmm4,6
2354	add	rbx,r9
2355	add	r9,rdi
2356	vpxor	xmm8,xmm8,xmm9
2357	mov	r13,rbx
2358	add	r14,r9
2359	vpsllq	xmm10,xmm4,3
2360	shrd	r13,r13,23
2361	mov	r9,r14
2362	vpaddq	xmm5,xmm5,xmm8
2363	mov	r12,rcx
2364	shrd	r14,r14,5
2365	vpsrlq	xmm9,xmm4,19
2366	xor	r13,rbx
2367	xor	r12,rdx
2368	vpxor	xmm11,xmm11,xmm10
2369	shrd	r13,r13,4
2370	xor	r14,r9
2371	vpsllq	xmm10,xmm10,42
2372	and	r12,rbx
2373	xor	r13,rbx
2374	vpxor	xmm11,xmm11,xmm9
2375	add	r8,QWORD[88+rsp]
2376	mov	rdi,r9
2377	vpsrlq	xmm9,xmm9,42
2378	xor	r12,rdx
2379	shrd	r14,r14,6
2380	vpxor	xmm11,xmm11,xmm10
2381	xor	rdi,r10
2382	add	r8,r12
2383	vpxor	xmm11,xmm11,xmm9
2384	shrd	r13,r13,14
2385	and	r15,rdi
2386	vpaddq	xmm5,xmm5,xmm11
2387	xor	r14,r9
2388	add	r8,r13
2389	vpaddq	xmm10,xmm5,XMMWORD[32+rbp]
2390	xor	r15,r10
2391	shrd	r14,r14,28
2392	add	rax,r8
2393	add	r8,r15
2394	mov	r13,rax
2395	add	r14,r8
2396	vmovdqa	XMMWORD[80+rsp],xmm10
2397	vpalignr	xmm8,xmm7,xmm6,8
2398	shrd	r13,r13,23
2399	mov	r8,r14
2400	vpalignr	xmm11,xmm3,xmm2,8
2401	mov	r12,rbx
2402	shrd	r14,r14,5
2403	vpsrlq	xmm10,xmm8,1
2404	xor	r13,rax
2405	xor	r12,rcx
2406	vpaddq	xmm6,xmm6,xmm11
2407	shrd	r13,r13,4
2408	xor	r14,r8
2409	vpsrlq	xmm11,xmm8,7
2410	and	r12,rax
2411	xor	r13,rax
2412	vpsllq	xmm9,xmm8,56
2413	add	rdx,QWORD[96+rsp]
2414	mov	r15,r8
2415	vpxor	xmm8,xmm11,xmm10
2416	xor	r12,rcx
2417	shrd	r14,r14,6
2418	vpsrlq	xmm10,xmm10,7
2419	xor	r15,r9
2420	add	rdx,r12
2421	vpxor	xmm8,xmm8,xmm9
2422	shrd	r13,r13,14
2423	and	rdi,r15
2424	vpsllq	xmm9,xmm9,7
2425	xor	r14,r8
2426	add	rdx,r13
2427	vpxor	xmm8,xmm8,xmm10
2428	xor	rdi,r9
2429	shrd	r14,r14,28
2430	vpsrlq	xmm11,xmm5,6
2431	add	r11,rdx
2432	add	rdx,rdi
2433	vpxor	xmm8,xmm8,xmm9
2434	mov	r13,r11
2435	add	r14,rdx
2436	vpsllq	xmm10,xmm5,3
2437	shrd	r13,r13,23
2438	mov	rdx,r14
2439	vpaddq	xmm6,xmm6,xmm8
2440	mov	r12,rax
2441	shrd	r14,r14,5
2442	vpsrlq	xmm9,xmm5,19
2443	xor	r13,r11
2444	xor	r12,rbx
2445	vpxor	xmm11,xmm11,xmm10
2446	shrd	r13,r13,4
2447	xor	r14,rdx
2448	vpsllq	xmm10,xmm10,42
2449	and	r12,r11
2450	xor	r13,r11
2451	vpxor	xmm11,xmm11,xmm9
2452	add	rcx,QWORD[104+rsp]
2453	mov	rdi,rdx
2454	vpsrlq	xmm9,xmm9,42
2455	xor	r12,rbx
2456	shrd	r14,r14,6
2457	vpxor	xmm11,xmm11,xmm10
2458	xor	rdi,r8
2459	add	rcx,r12
2460	vpxor	xmm11,xmm11,xmm9
2461	shrd	r13,r13,14
2462	and	r15,rdi
2463	vpaddq	xmm6,xmm6,xmm11
2464	xor	r14,rdx
2465	add	rcx,r13
2466	vpaddq	xmm10,xmm6,XMMWORD[64+rbp]
2467	xor	r15,r8
2468	shrd	r14,r14,28
2469	add	r10,rcx
2470	add	rcx,r15
2471	mov	r13,r10
2472	add	r14,rcx
2473	vmovdqa	XMMWORD[96+rsp],xmm10
2474	vpalignr	xmm8,xmm0,xmm7,8
2475	shrd	r13,r13,23
2476	mov	rcx,r14
2477	vpalignr	xmm11,xmm4,xmm3,8
2478	mov	r12,r11
2479	shrd	r14,r14,5
2480	vpsrlq	xmm10,xmm8,1
2481	xor	r13,r10
2482	xor	r12,rax
2483	vpaddq	xmm7,xmm7,xmm11
2484	shrd	r13,r13,4
2485	xor	r14,rcx
2486	vpsrlq	xmm11,xmm8,7
2487	and	r12,r10
2488	xor	r13,r10
2489	vpsllq	xmm9,xmm8,56
2490	add	rbx,QWORD[112+rsp]
2491	mov	r15,rcx
2492	vpxor	xmm8,xmm11,xmm10
2493	xor	r12,rax
2494	shrd	r14,r14,6
2495	vpsrlq	xmm10,xmm10,7
2496	xor	r15,rdx
2497	add	rbx,r12
2498	vpxor	xmm8,xmm8,xmm9
2499	shrd	r13,r13,14
2500	and	rdi,r15
2501	vpsllq	xmm9,xmm9,7
2502	xor	r14,rcx
2503	add	rbx,r13
2504	vpxor	xmm8,xmm8,xmm10
2505	xor	rdi,rdx
2506	shrd	r14,r14,28
2507	vpsrlq	xmm11,xmm6,6
2508	add	r9,rbx
2509	add	rbx,rdi
2510	vpxor	xmm8,xmm8,xmm9
2511	mov	r13,r9
2512	add	r14,rbx
2513	vpsllq	xmm10,xmm6,3
2514	shrd	r13,r13,23
2515	mov	rbx,r14
2516	vpaddq	xmm7,xmm7,xmm8
2517	mov	r12,r10
2518	shrd	r14,r14,5
2519	vpsrlq	xmm9,xmm6,19
2520	xor	r13,r9
2521	xor	r12,r11
2522	vpxor	xmm11,xmm11,xmm10
2523	shrd	r13,r13,4
2524	xor	r14,rbx
2525	vpsllq	xmm10,xmm10,42
2526	and	r12,r9
2527	xor	r13,r9
2528	vpxor	xmm11,xmm11,xmm9
2529	add	rax,QWORD[120+rsp]
2530	mov	rdi,rbx
2531	vpsrlq	xmm9,xmm9,42
2532	xor	r12,r11
2533	shrd	r14,r14,6
2534	vpxor	xmm11,xmm11,xmm10
2535	xor	rdi,rcx
2536	add	rax,r12
2537	vpxor	xmm11,xmm11,xmm9
2538	shrd	r13,r13,14
2539	and	r15,rdi
2540	vpaddq	xmm7,xmm7,xmm11
2541	xor	r14,rbx
2542	add	rax,r13
2543	vpaddq	xmm10,xmm7,XMMWORD[96+rbp]
2544	xor	r15,rcx
2545	shrd	r14,r14,28
2546	add	r8,rax
2547	add	rax,r15
2548	mov	r13,r8
2549	add	r14,rax
2550	vmovdqa	XMMWORD[112+rsp],xmm10
2551	cmp	BYTE[135+rbp],0
2552	jne	NEAR $L$avx_00_47
2553	shrd	r13,r13,23
2554	mov	rax,r14
2555	mov	r12,r9
2556	shrd	r14,r14,5
2557	xor	r13,r8
2558	xor	r12,r10
2559	shrd	r13,r13,4
2560	xor	r14,rax
2561	and	r12,r8
2562	xor	r13,r8
2563	add	r11,QWORD[rsp]
2564	mov	r15,rax
2565	xor	r12,r10
2566	shrd	r14,r14,6
2567	xor	r15,rbx
2568	add	r11,r12
2569	shrd	r13,r13,14
2570	and	rdi,r15
2571	xor	r14,rax
2572	add	r11,r13
2573	xor	rdi,rbx
2574	shrd	r14,r14,28
2575	add	rdx,r11
2576	add	r11,rdi
2577	mov	r13,rdx
2578	add	r14,r11
2579	shrd	r13,r13,23
2580	mov	r11,r14
2581	mov	r12,r8
2582	shrd	r14,r14,5
2583	xor	r13,rdx
2584	xor	r12,r9
2585	shrd	r13,r13,4
2586	xor	r14,r11
2587	and	r12,rdx
2588	xor	r13,rdx
2589	add	r10,QWORD[8+rsp]
2590	mov	rdi,r11
2591	xor	r12,r9
2592	shrd	r14,r14,6
2593	xor	rdi,rax
2594	add	r10,r12
2595	shrd	r13,r13,14
2596	and	r15,rdi
2597	xor	r14,r11
2598	add	r10,r13
2599	xor	r15,rax
2600	shrd	r14,r14,28
2601	add	rcx,r10
2602	add	r10,r15
2603	mov	r13,rcx
2604	add	r14,r10
2605	shrd	r13,r13,23
2606	mov	r10,r14
2607	mov	r12,rdx
2608	shrd	r14,r14,5
2609	xor	r13,rcx
2610	xor	r12,r8
2611	shrd	r13,r13,4
2612	xor	r14,r10
2613	and	r12,rcx
2614	xor	r13,rcx
2615	add	r9,QWORD[16+rsp]
2616	mov	r15,r10
2617	xor	r12,r8
2618	shrd	r14,r14,6
2619	xor	r15,r11
2620	add	r9,r12
2621	shrd	r13,r13,14
2622	and	rdi,r15
2623	xor	r14,r10
2624	add	r9,r13
2625	xor	rdi,r11
2626	shrd	r14,r14,28
2627	add	rbx,r9
2628	add	r9,rdi
2629	mov	r13,rbx
2630	add	r14,r9
2631	shrd	r13,r13,23
2632	mov	r9,r14
2633	mov	r12,rcx
2634	shrd	r14,r14,5
2635	xor	r13,rbx
2636	xor	r12,rdx
2637	shrd	r13,r13,4
2638	xor	r14,r9
2639	and	r12,rbx
2640	xor	r13,rbx
2641	add	r8,QWORD[24+rsp]
2642	mov	rdi,r9
2643	xor	r12,rdx
2644	shrd	r14,r14,6
2645	xor	rdi,r10
2646	add	r8,r12
2647	shrd	r13,r13,14
2648	and	r15,rdi
2649	xor	r14,r9
2650	add	r8,r13
2651	xor	r15,r10
2652	shrd	r14,r14,28
2653	add	rax,r8
2654	add	r8,r15
2655	mov	r13,rax
2656	add	r14,r8
2657	shrd	r13,r13,23
2658	mov	r8,r14
2659	mov	r12,rbx
2660	shrd	r14,r14,5
2661	xor	r13,rax
2662	xor	r12,rcx
2663	shrd	r13,r13,4
2664	xor	r14,r8
2665	and	r12,rax
2666	xor	r13,rax
2667	add	rdx,QWORD[32+rsp]
2668	mov	r15,r8
2669	xor	r12,rcx
2670	shrd	r14,r14,6
2671	xor	r15,r9
2672	add	rdx,r12
2673	shrd	r13,r13,14
2674	and	rdi,r15
2675	xor	r14,r8
2676	add	rdx,r13
2677	xor	rdi,r9
2678	shrd	r14,r14,28
2679	add	r11,rdx
2680	add	rdx,rdi
2681	mov	r13,r11
2682	add	r14,rdx
2683	shrd	r13,r13,23
2684	mov	rdx,r14
2685	mov	r12,rax
2686	shrd	r14,r14,5
2687	xor	r13,r11
2688	xor	r12,rbx
2689	shrd	r13,r13,4
2690	xor	r14,rdx
2691	and	r12,r11
2692	xor	r13,r11
2693	add	rcx,QWORD[40+rsp]
2694	mov	rdi,rdx
2695	xor	r12,rbx
2696	shrd	r14,r14,6
2697	xor	rdi,r8
2698	add	rcx,r12
2699	shrd	r13,r13,14
2700	and	r15,rdi
2701	xor	r14,rdx
2702	add	rcx,r13
2703	xor	r15,r8
2704	shrd	r14,r14,28
2705	add	r10,rcx
2706	add	rcx,r15
2707	mov	r13,r10
2708	add	r14,rcx
2709	shrd	r13,r13,23
2710	mov	rcx,r14
2711	mov	r12,r11
2712	shrd	r14,r14,5
2713	xor	r13,r10
2714	xor	r12,rax
2715	shrd	r13,r13,4
2716	xor	r14,rcx
2717	and	r12,r10
2718	xor	r13,r10
2719	add	rbx,QWORD[48+rsp]
2720	mov	r15,rcx
2721	xor	r12,rax
2722	shrd	r14,r14,6
2723	xor	r15,rdx
2724	add	rbx,r12
2725	shrd	r13,r13,14
2726	and	rdi,r15
2727	xor	r14,rcx
2728	add	rbx,r13
2729	xor	rdi,rdx
2730	shrd	r14,r14,28
2731	add	r9,rbx
2732	add	rbx,rdi
2733	mov	r13,r9
2734	add	r14,rbx
2735	shrd	r13,r13,23
2736	mov	rbx,r14
2737	mov	r12,r10
2738	shrd	r14,r14,5
2739	xor	r13,r9
2740	xor	r12,r11
2741	shrd	r13,r13,4
2742	xor	r14,rbx
2743	and	r12,r9
2744	xor	r13,r9
2745	add	rax,QWORD[56+rsp]
2746	mov	rdi,rbx
2747	xor	r12,r11
2748	shrd	r14,r14,6
2749	xor	rdi,rcx
2750	add	rax,r12
2751	shrd	r13,r13,14
2752	and	r15,rdi
2753	xor	r14,rbx
2754	add	rax,r13
2755	xor	r15,rcx
2756	shrd	r14,r14,28
2757	add	r8,rax
2758	add	rax,r15
2759	mov	r13,r8
2760	add	r14,rax
2761	shrd	r13,r13,23
2762	mov	rax,r14
2763	mov	r12,r9
2764	shrd	r14,r14,5
2765	xor	r13,r8
2766	xor	r12,r10
2767	shrd	r13,r13,4
2768	xor	r14,rax
2769	and	r12,r8
2770	xor	r13,r8
2771	add	r11,QWORD[64+rsp]
2772	mov	r15,rax
2773	xor	r12,r10
2774	shrd	r14,r14,6
2775	xor	r15,rbx
2776	add	r11,r12
2777	shrd	r13,r13,14
2778	and	rdi,r15
2779	xor	r14,rax
2780	add	r11,r13
2781	xor	rdi,rbx
2782	shrd	r14,r14,28
2783	add	rdx,r11
2784	add	r11,rdi
2785	mov	r13,rdx
2786	add	r14,r11
2787	shrd	r13,r13,23
2788	mov	r11,r14
2789	mov	r12,r8
2790	shrd	r14,r14,5
2791	xor	r13,rdx
2792	xor	r12,r9
2793	shrd	r13,r13,4
2794	xor	r14,r11
2795	and	r12,rdx
2796	xor	r13,rdx
2797	add	r10,QWORD[72+rsp]
2798	mov	rdi,r11
2799	xor	r12,r9
2800	shrd	r14,r14,6
2801	xor	rdi,rax
2802	add	r10,r12
2803	shrd	r13,r13,14
2804	and	r15,rdi
2805	xor	r14,r11
2806	add	r10,r13
2807	xor	r15,rax
2808	shrd	r14,r14,28
2809	add	rcx,r10
2810	add	r10,r15
2811	mov	r13,rcx
2812	add	r14,r10
2813	shrd	r13,r13,23
2814	mov	r10,r14
2815	mov	r12,rdx
2816	shrd	r14,r14,5
2817	xor	r13,rcx
2818	xor	r12,r8
2819	shrd	r13,r13,4
2820	xor	r14,r10
2821	and	r12,rcx
2822	xor	r13,rcx
2823	add	r9,QWORD[80+rsp]
2824	mov	r15,r10
2825	xor	r12,r8
2826	shrd	r14,r14,6
2827	xor	r15,r11
2828	add	r9,r12
2829	shrd	r13,r13,14
2830	and	rdi,r15
2831	xor	r14,r10
2832	add	r9,r13
2833	xor	rdi,r11
2834	shrd	r14,r14,28
2835	add	rbx,r9
2836	add	r9,rdi
2837	mov	r13,rbx
2838	add	r14,r9
2839	shrd	r13,r13,23
2840	mov	r9,r14
2841	mov	r12,rcx
2842	shrd	r14,r14,5
2843	xor	r13,rbx
2844	xor	r12,rdx
2845	shrd	r13,r13,4
2846	xor	r14,r9
2847	and	r12,rbx
2848	xor	r13,rbx
2849	add	r8,QWORD[88+rsp]
2850	mov	rdi,r9
2851	xor	r12,rdx
2852	shrd	r14,r14,6
2853	xor	rdi,r10
2854	add	r8,r12
2855	shrd	r13,r13,14
2856	and	r15,rdi
2857	xor	r14,r9
2858	add	r8,r13
2859	xor	r15,r10
2860	shrd	r14,r14,28
2861	add	rax,r8
2862	add	r8,r15
2863	mov	r13,rax
2864	add	r14,r8
2865	shrd	r13,r13,23
2866	mov	r8,r14
2867	mov	r12,rbx
2868	shrd	r14,r14,5
2869	xor	r13,rax
2870	xor	r12,rcx
2871	shrd	r13,r13,4
2872	xor	r14,r8
2873	and	r12,rax
2874	xor	r13,rax
2875	add	rdx,QWORD[96+rsp]
2876	mov	r15,r8
2877	xor	r12,rcx
2878	shrd	r14,r14,6
2879	xor	r15,r9
2880	add	rdx,r12
2881	shrd	r13,r13,14
2882	and	rdi,r15
2883	xor	r14,r8
2884	add	rdx,r13
2885	xor	rdi,r9
2886	shrd	r14,r14,28
2887	add	r11,rdx
2888	add	rdx,rdi
2889	mov	r13,r11
2890	add	r14,rdx
2891	shrd	r13,r13,23
2892	mov	rdx,r14
2893	mov	r12,rax
2894	shrd	r14,r14,5
2895	xor	r13,r11
2896	xor	r12,rbx
2897	shrd	r13,r13,4
2898	xor	r14,rdx
2899	and	r12,r11
2900	xor	r13,r11
2901	add	rcx,QWORD[104+rsp]
2902	mov	rdi,rdx
2903	xor	r12,rbx
2904	shrd	r14,r14,6
2905	xor	rdi,r8
2906	add	rcx,r12
2907	shrd	r13,r13,14
2908	and	r15,rdi
2909	xor	r14,rdx
2910	add	rcx,r13
2911	xor	r15,r8
2912	shrd	r14,r14,28
2913	add	r10,rcx
2914	add	rcx,r15
2915	mov	r13,r10
2916	add	r14,rcx
2917	shrd	r13,r13,23
2918	mov	rcx,r14
2919	mov	r12,r11
2920	shrd	r14,r14,5
2921	xor	r13,r10
2922	xor	r12,rax
2923	shrd	r13,r13,4
2924	xor	r14,rcx
2925	and	r12,r10
2926	xor	r13,r10
2927	add	rbx,QWORD[112+rsp]
2928	mov	r15,rcx
2929	xor	r12,rax
2930	shrd	r14,r14,6
2931	xor	r15,rdx
2932	add	rbx,r12
2933	shrd	r13,r13,14
2934	and	rdi,r15
2935	xor	r14,rcx
2936	add	rbx,r13
2937	xor	rdi,rdx
2938	shrd	r14,r14,28
2939	add	r9,rbx
2940	add	rbx,rdi
2941	mov	r13,r9
2942	add	r14,rbx
2943	shrd	r13,r13,23
2944	mov	rbx,r14
2945	mov	r12,r10
2946	shrd	r14,r14,5
2947	xor	r13,r9
2948	xor	r12,r11
2949	shrd	r13,r13,4
2950	xor	r14,rbx
2951	and	r12,r9
2952	xor	r13,r9
2953	add	rax,QWORD[120+rsp]
2954	mov	rdi,rbx
2955	xor	r12,r11
2956	shrd	r14,r14,6
2957	xor	rdi,rcx
2958	add	rax,r12
2959	shrd	r13,r13,14
2960	and	r15,rdi
2961	xor	r14,rbx
2962	add	rax,r13
2963	xor	r15,rcx
2964	shrd	r14,r14,28
2965	add	r8,rax
2966	add	rax,r15
2967	mov	r13,r8
2968	add	r14,rax
2969	mov	rdi,QWORD[((128+0))+rsp]
2970	mov	rax,r14
2971
2972	add	rax,QWORD[rdi]
2973	lea	rsi,[128+rsi]
2974	add	rbx,QWORD[8+rdi]
2975	add	rcx,QWORD[16+rdi]
2976	add	rdx,QWORD[24+rdi]
2977	add	r8,QWORD[32+rdi]
2978	add	r9,QWORD[40+rdi]
2979	add	r10,QWORD[48+rdi]
2980	add	r11,QWORD[56+rdi]
2981
2982	cmp	rsi,QWORD[((128+16))+rsp]
2983
2984	mov	QWORD[rdi],rax
2985	mov	QWORD[8+rdi],rbx
2986	mov	QWORD[16+rdi],rcx
2987	mov	QWORD[24+rdi],rdx
2988	mov	QWORD[32+rdi],r8
2989	mov	QWORD[40+rdi],r9
2990	mov	QWORD[48+rdi],r10
2991	mov	QWORD[56+rdi],r11
2992	jb	NEAR $L$loop_avx
2993
2994	mov	rsi,QWORD[152+rsp]
2995
2996	vzeroupper
2997	movaps	xmm6,XMMWORD[((128+32))+rsp]
2998	movaps	xmm7,XMMWORD[((128+48))+rsp]
2999	movaps	xmm8,XMMWORD[((128+64))+rsp]
3000	movaps	xmm9,XMMWORD[((128+80))+rsp]
3001	movaps	xmm10,XMMWORD[((128+96))+rsp]
3002	movaps	xmm11,XMMWORD[((128+112))+rsp]
3003	mov	r15,QWORD[((-48))+rsi]
3004
3005	mov	r14,QWORD[((-40))+rsi]
3006
3007	mov	r13,QWORD[((-32))+rsi]
3008
3009	mov	r12,QWORD[((-24))+rsi]
3010
3011	mov	rbp,QWORD[((-16))+rsi]
3012
3013	mov	rbx,QWORD[((-8))+rsi]
3014
3015	lea	rsp,[rsi]
3016
3017$L$epilogue_avx:
3018	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
3019	mov	rsi,QWORD[16+rsp]
3020	ret
3021
3022$L$SEH_end_sha512_block_data_order_avx:
3023EXTERN	__imp_RtlVirtualUnwind
3024
3025ALIGN	16
3026se_handler:
3027	push	rsi
3028	push	rdi
3029	push	rbx
3030	push	rbp
3031	push	r12
3032	push	r13
3033	push	r14
3034	push	r15
3035	pushfq
3036	sub	rsp,64
3037
3038	mov	rax,QWORD[120+r8]
3039	mov	rbx,QWORD[248+r8]
3040
3041	mov	rsi,QWORD[8+r9]
3042	mov	r11,QWORD[56+r9]
3043
3044	mov	r10d,DWORD[r11]
3045	lea	r10,[r10*1+rsi]
3046	cmp	rbx,r10
3047	jb	NEAR $L$in_prologue
3048
3049	mov	rax,QWORD[152+r8]
3050
3051	mov	r10d,DWORD[4+r11]
3052	lea	r10,[r10*1+rsi]
3053	cmp	rbx,r10
3054	jae	NEAR $L$in_prologue
3055	mov	rsi,rax
3056	mov	rax,QWORD[((128+24))+rax]
3057
3058	mov	rbx,QWORD[((-8))+rax]
3059	mov	rbp,QWORD[((-16))+rax]
3060	mov	r12,QWORD[((-24))+rax]
3061	mov	r13,QWORD[((-32))+rax]
3062	mov	r14,QWORD[((-40))+rax]
3063	mov	r15,QWORD[((-48))+rax]
3064	mov	QWORD[144+r8],rbx
3065	mov	QWORD[160+r8],rbp
3066	mov	QWORD[216+r8],r12
3067	mov	QWORD[224+r8],r13
3068	mov	QWORD[232+r8],r14
3069	mov	QWORD[240+r8],r15
3070
3071	lea	r10,[$L$epilogue]
3072	cmp	rbx,r10
3073	jb	NEAR $L$in_prologue
3074
3075	lea	rsi,[((128+32))+rsi]
3076	lea	rdi,[512+r8]
3077	mov	ecx,12
3078	DD	0xa548f3fc
3079
3080$L$in_prologue:
3081	mov	rdi,QWORD[8+rax]
3082	mov	rsi,QWORD[16+rax]
3083	mov	QWORD[152+r8],rax
3084	mov	QWORD[168+r8],rsi
3085	mov	QWORD[176+r8],rdi
3086
3087	mov	rdi,QWORD[40+r9]
3088	mov	rsi,r8
3089	mov	ecx,154
3090	DD	0xa548f3fc
3091
3092	mov	rsi,r9
3093	xor	rcx,rcx
3094	mov	rdx,QWORD[8+rsi]
3095	mov	r8,QWORD[rsi]
3096	mov	r9,QWORD[16+rsi]
3097	mov	r10,QWORD[40+rsi]
3098	lea	r11,[56+rsi]
3099	lea	r12,[24+rsi]
3100	mov	QWORD[32+rsp],r10
3101	mov	QWORD[40+rsp],r11
3102	mov	QWORD[48+rsp],r12
3103	mov	QWORD[56+rsp],rcx
3104	call	QWORD[__imp_RtlVirtualUnwind]
3105
3106	mov	eax,1
3107	add	rsp,64
3108	popfq
3109	pop	r15
3110	pop	r14
3111	pop	r13
3112	pop	r12
3113	pop	rbp
3114	pop	rbx
3115	pop	rdi
3116	pop	rsi
3117	ret
3118
3119section	.pdata rdata align=4
3120ALIGN	4
3121	DD	$L$SEH_begin_sha512_block_data_order_nohw wrt ..imagebase
3122	DD	$L$SEH_end_sha512_block_data_order_nohw wrt ..imagebase
3123	DD	$L$SEH_info_sha512_block_data_order_nohw wrt ..imagebase
3124	DD	$L$SEH_begin_sha512_block_data_order_avx wrt ..imagebase
3125	DD	$L$SEH_end_sha512_block_data_order_avx wrt ..imagebase
3126	DD	$L$SEH_info_sha512_block_data_order_avx wrt ..imagebase
3127section	.xdata rdata align=8
3128ALIGN	8
3129$L$SEH_info_sha512_block_data_order_nohw:
3130	DB	9,0,0,0
3131	DD	se_handler wrt ..imagebase
3132	DD	$L$prologue wrt ..imagebase,$L$epilogue wrt ..imagebase
3133$L$SEH_info_sha512_block_data_order_avx:
3134	DB	9,0,0,0
3135	DD	se_handler wrt ..imagebase
3136	DD	$L$prologue_avx wrt ..imagebase,$L$epilogue_avx wrt ..imagebase
3137%else
3138; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
3139ret
3140%endif
3141