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