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