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