xref: /aosp_15_r20/external/boringssl/src/gen/bcm/vpaes-x86_64-win.asm (revision 8fb009dc861624b67b6cdb62ea21f0f22d0c584b)
1; This file is generated from a similarly-named Perl script in the BoringSSL
2; source tree. Do not edit by hand.
3
4%ifidn __OUTPUT_FORMAT__, win64
5default	rel
6%define XMMWORD
7%define YMMWORD
8%define ZMMWORD
9%define _CET_ENDBR
10
11%ifdef BORINGSSL_PREFIX
12%include "boringssl_prefix_symbols_nasm.inc"
13%endif
14section	.text code align=64
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33ALIGN	16
34_vpaes_encrypt_core:
35
36	mov	r9,rdx
37	mov	r11,16
38	mov	eax,DWORD[240+rdx]
39	movdqa	xmm1,xmm9
40	movdqa	xmm2,XMMWORD[$L$k_ipt]
41	pandn	xmm1,xmm0
42	movdqu	xmm5,XMMWORD[r9]
43	psrld	xmm1,4
44	pand	xmm0,xmm9
45DB	102,15,56,0,208
46	movdqa	xmm0,XMMWORD[(($L$k_ipt+16))]
47DB	102,15,56,0,193
48	pxor	xmm2,xmm5
49	add	r9,16
50	pxor	xmm0,xmm2
51	lea	r10,[$L$k_mc_backward]
52	jmp	NEAR $L$enc_entry
53
54ALIGN	16
55$L$enc_loop:
56
57	movdqa	xmm4,xmm13
58	movdqa	xmm0,xmm12
59DB	102,15,56,0,226
60DB	102,15,56,0,195
61	pxor	xmm4,xmm5
62	movdqa	xmm5,xmm15
63	pxor	xmm0,xmm4
64	movdqa	xmm1,XMMWORD[((-64))+r10*1+r11]
65DB	102,15,56,0,234
66	movdqa	xmm4,XMMWORD[r10*1+r11]
67	movdqa	xmm2,xmm14
68DB	102,15,56,0,211
69	movdqa	xmm3,xmm0
70	pxor	xmm2,xmm5
71DB	102,15,56,0,193
72	add	r9,16
73	pxor	xmm0,xmm2
74DB	102,15,56,0,220
75	add	r11,16
76	pxor	xmm3,xmm0
77DB	102,15,56,0,193
78	and	r11,0x30
79	sub	rax,1
80	pxor	xmm0,xmm3
81
82$L$enc_entry:
83
84	movdqa	xmm1,xmm9
85	movdqa	xmm5,xmm11
86	pandn	xmm1,xmm0
87	psrld	xmm1,4
88	pand	xmm0,xmm9
89DB	102,15,56,0,232
90	movdqa	xmm3,xmm10
91	pxor	xmm0,xmm1
92DB	102,15,56,0,217
93	movdqa	xmm4,xmm10
94	pxor	xmm3,xmm5
95DB	102,15,56,0,224
96	movdqa	xmm2,xmm10
97	pxor	xmm4,xmm5
98DB	102,15,56,0,211
99	movdqa	xmm3,xmm10
100	pxor	xmm2,xmm0
101DB	102,15,56,0,220
102	movdqu	xmm5,XMMWORD[r9]
103	pxor	xmm3,xmm1
104	jnz	NEAR $L$enc_loop
105
106
107	movdqa	xmm4,XMMWORD[((-96))+r10]
108	movdqa	xmm0,XMMWORD[((-80))+r10]
109DB	102,15,56,0,226
110	pxor	xmm4,xmm5
111DB	102,15,56,0,195
112	movdqa	xmm1,XMMWORD[64+r10*1+r11]
113	pxor	xmm0,xmm4
114DB	102,15,56,0,193
115	ret
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149ALIGN	16
150_vpaes_encrypt_core_2x:
151
152	mov	r9,rdx
153	mov	r11,16
154	mov	eax,DWORD[240+rdx]
155	movdqa	xmm1,xmm9
156	movdqa	xmm7,xmm9
157	movdqa	xmm2,XMMWORD[$L$k_ipt]
158	movdqa	xmm8,xmm2
159	pandn	xmm1,xmm0
160	pandn	xmm7,xmm6
161	movdqu	xmm5,XMMWORD[r9]
162
163	psrld	xmm1,4
164	psrld	xmm7,4
165	pand	xmm0,xmm9
166	pand	xmm6,xmm9
167DB	102,15,56,0,208
168DB	102,68,15,56,0,198
169	movdqa	xmm0,XMMWORD[(($L$k_ipt+16))]
170	movdqa	xmm6,xmm0
171DB	102,15,56,0,193
172DB	102,15,56,0,247
173	pxor	xmm2,xmm5
174	pxor	xmm8,xmm5
175	add	r9,16
176	pxor	xmm0,xmm2
177	pxor	xmm6,xmm8
178	lea	r10,[$L$k_mc_backward]
179	jmp	NEAR $L$enc2x_entry
180
181ALIGN	16
182$L$enc2x_loop:
183
184	movdqa	xmm4,XMMWORD[$L$k_sb1]
185	movdqa	xmm0,XMMWORD[(($L$k_sb1+16))]
186	movdqa	xmm12,xmm4
187	movdqa	xmm6,xmm0
188DB	102,15,56,0,226
189DB	102,69,15,56,0,224
190DB	102,15,56,0,195
191DB	102,65,15,56,0,243
192	pxor	xmm4,xmm5
193	pxor	xmm12,xmm5
194	movdqa	xmm5,XMMWORD[$L$k_sb2]
195	movdqa	xmm13,xmm5
196	pxor	xmm0,xmm4
197	pxor	xmm6,xmm12
198	movdqa	xmm1,XMMWORD[((-64))+r10*1+r11]
199
200DB	102,15,56,0,234
201DB	102,69,15,56,0,232
202	movdqa	xmm4,XMMWORD[r10*1+r11]
203
204	movdqa	xmm2,XMMWORD[(($L$k_sb2+16))]
205	movdqa	xmm8,xmm2
206DB	102,15,56,0,211
207DB	102,69,15,56,0,195
208	movdqa	xmm3,xmm0
209	movdqa	xmm11,xmm6
210	pxor	xmm2,xmm5
211	pxor	xmm8,xmm13
212DB	102,15,56,0,193
213DB	102,15,56,0,241
214	add	r9,16
215	pxor	xmm0,xmm2
216	pxor	xmm6,xmm8
217DB	102,15,56,0,220
218DB	102,68,15,56,0,220
219	add	r11,16
220	pxor	xmm3,xmm0
221	pxor	xmm11,xmm6
222DB	102,15,56,0,193
223DB	102,15,56,0,241
224	and	r11,0x30
225	sub	rax,1
226	pxor	xmm0,xmm3
227	pxor	xmm6,xmm11
228
229$L$enc2x_entry:
230
231	movdqa	xmm1,xmm9
232	movdqa	xmm7,xmm9
233	movdqa	xmm5,XMMWORD[(($L$k_inv+16))]
234	movdqa	xmm13,xmm5
235	pandn	xmm1,xmm0
236	pandn	xmm7,xmm6
237	psrld	xmm1,4
238	psrld	xmm7,4
239	pand	xmm0,xmm9
240	pand	xmm6,xmm9
241DB	102,15,56,0,232
242DB	102,68,15,56,0,238
243	movdqa	xmm3,xmm10
244	movdqa	xmm11,xmm10
245	pxor	xmm0,xmm1
246	pxor	xmm6,xmm7
247DB	102,15,56,0,217
248DB	102,68,15,56,0,223
249	movdqa	xmm4,xmm10
250	movdqa	xmm12,xmm10
251	pxor	xmm3,xmm5
252	pxor	xmm11,xmm13
253DB	102,15,56,0,224
254DB	102,68,15,56,0,230
255	movdqa	xmm2,xmm10
256	movdqa	xmm8,xmm10
257	pxor	xmm4,xmm5
258	pxor	xmm12,xmm13
259DB	102,15,56,0,211
260DB	102,69,15,56,0,195
261	movdqa	xmm3,xmm10
262	movdqa	xmm11,xmm10
263	pxor	xmm2,xmm0
264	pxor	xmm8,xmm6
265DB	102,15,56,0,220
266DB	102,69,15,56,0,220
267	movdqu	xmm5,XMMWORD[r9]
268
269	pxor	xmm3,xmm1
270	pxor	xmm11,xmm7
271	jnz	NEAR $L$enc2x_loop
272
273
274	movdqa	xmm4,XMMWORD[((-96))+r10]
275	movdqa	xmm0,XMMWORD[((-80))+r10]
276	movdqa	xmm12,xmm4
277	movdqa	xmm6,xmm0
278DB	102,15,56,0,226
279DB	102,69,15,56,0,224
280	pxor	xmm4,xmm5
281	pxor	xmm12,xmm5
282DB	102,15,56,0,195
283DB	102,65,15,56,0,243
284	movdqa	xmm1,XMMWORD[64+r10*1+r11]
285
286	pxor	xmm0,xmm4
287	pxor	xmm6,xmm12
288DB	102,15,56,0,193
289DB	102,15,56,0,241
290	ret
291
292
293
294
295
296
297
298
299
300ALIGN	16
301_vpaes_decrypt_core:
302
303	mov	r9,rdx
304	mov	eax,DWORD[240+rdx]
305	movdqa	xmm1,xmm9
306	movdqa	xmm2,XMMWORD[$L$k_dipt]
307	pandn	xmm1,xmm0
308	mov	r11,rax
309	psrld	xmm1,4
310	movdqu	xmm5,XMMWORD[r9]
311	shl	r11,4
312	pand	xmm0,xmm9
313DB	102,15,56,0,208
314	movdqa	xmm0,XMMWORD[(($L$k_dipt+16))]
315	xor	r11,0x30
316	lea	r10,[$L$k_dsbd]
317DB	102,15,56,0,193
318	and	r11,0x30
319	pxor	xmm2,xmm5
320	movdqa	xmm5,XMMWORD[(($L$k_mc_forward+48))]
321	pxor	xmm0,xmm2
322	add	r9,16
323	add	r11,r10
324	jmp	NEAR $L$dec_entry
325
326ALIGN	16
327$L$dec_loop:
328
329
330
331	movdqa	xmm4,XMMWORD[((-32))+r10]
332	movdqa	xmm1,XMMWORD[((-16))+r10]
333DB	102,15,56,0,226
334DB	102,15,56,0,203
335	pxor	xmm0,xmm4
336	movdqa	xmm4,XMMWORD[r10]
337	pxor	xmm0,xmm1
338	movdqa	xmm1,XMMWORD[16+r10]
339
340DB	102,15,56,0,226
341DB	102,15,56,0,197
342DB	102,15,56,0,203
343	pxor	xmm0,xmm4
344	movdqa	xmm4,XMMWORD[32+r10]
345	pxor	xmm0,xmm1
346	movdqa	xmm1,XMMWORD[48+r10]
347
348DB	102,15,56,0,226
349DB	102,15,56,0,197
350DB	102,15,56,0,203
351	pxor	xmm0,xmm4
352	movdqa	xmm4,XMMWORD[64+r10]
353	pxor	xmm0,xmm1
354	movdqa	xmm1,XMMWORD[80+r10]
355
356DB	102,15,56,0,226
357DB	102,15,56,0,197
358DB	102,15,56,0,203
359	pxor	xmm0,xmm4
360	add	r9,16
361DB	102,15,58,15,237,12
362	pxor	xmm0,xmm1
363	sub	rax,1
364
365$L$dec_entry:
366
367	movdqa	xmm1,xmm9
368	pandn	xmm1,xmm0
369	movdqa	xmm2,xmm11
370	psrld	xmm1,4
371	pand	xmm0,xmm9
372DB	102,15,56,0,208
373	movdqa	xmm3,xmm10
374	pxor	xmm0,xmm1
375DB	102,15,56,0,217
376	movdqa	xmm4,xmm10
377	pxor	xmm3,xmm2
378DB	102,15,56,0,224
379	pxor	xmm4,xmm2
380	movdqa	xmm2,xmm10
381DB	102,15,56,0,211
382	movdqa	xmm3,xmm10
383	pxor	xmm2,xmm0
384DB	102,15,56,0,220
385	movdqu	xmm0,XMMWORD[r9]
386	pxor	xmm3,xmm1
387	jnz	NEAR $L$dec_loop
388
389
390	movdqa	xmm4,XMMWORD[96+r10]
391DB	102,15,56,0,226
392	pxor	xmm4,xmm0
393	movdqa	xmm0,XMMWORD[112+r10]
394	movdqa	xmm2,XMMWORD[((-352))+r11]
395DB	102,15,56,0,195
396	pxor	xmm0,xmm4
397DB	102,15,56,0,194
398	ret
399
400
401
402
403
404
405
406
407
408ALIGN	16
409_vpaes_schedule_core:
410
411
412
413
414
415
416	call	_vpaes_preheat
417	movdqa	xmm8,XMMWORD[$L$k_rcon]
418	movdqu	xmm0,XMMWORD[rdi]
419
420
421	movdqa	xmm3,xmm0
422	lea	r11,[$L$k_ipt]
423	call	_vpaes_schedule_transform
424	movdqa	xmm7,xmm0
425
426	lea	r10,[$L$k_sr]
427	test	rcx,rcx
428	jnz	NEAR $L$schedule_am_decrypting
429
430
431	movdqu	XMMWORD[rdx],xmm0
432	jmp	NEAR $L$schedule_go
433
434$L$schedule_am_decrypting:
435
436	movdqa	xmm1,XMMWORD[r10*1+r8]
437DB	102,15,56,0,217
438	movdqu	XMMWORD[rdx],xmm3
439	xor	r8,0x30
440
441$L$schedule_go:
442	cmp	esi,192
443	ja	NEAR $L$schedule_256
444	je	NEAR $L$schedule_192
445
446
447
448
449
450
451
452
453
454
455$L$schedule_128:
456	mov	esi,10
457
458$L$oop_schedule_128:
459	call	_vpaes_schedule_round
460	dec	rsi
461	jz	NEAR $L$schedule_mangle_last
462	call	_vpaes_schedule_mangle
463	jmp	NEAR $L$oop_schedule_128
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480ALIGN	16
481$L$schedule_192:
482	movdqu	xmm0,XMMWORD[8+rdi]
483	call	_vpaes_schedule_transform
484	movdqa	xmm6,xmm0
485	pxor	xmm4,xmm4
486	movhlps	xmm6,xmm4
487	mov	esi,4
488
489$L$oop_schedule_192:
490	call	_vpaes_schedule_round
491DB	102,15,58,15,198,8
492	call	_vpaes_schedule_mangle
493	call	_vpaes_schedule_192_smear
494	call	_vpaes_schedule_mangle
495	call	_vpaes_schedule_round
496	dec	rsi
497	jz	NEAR $L$schedule_mangle_last
498	call	_vpaes_schedule_mangle
499	call	_vpaes_schedule_192_smear
500	jmp	NEAR $L$oop_schedule_192
501
502
503
504
505
506
507
508
509
510
511
512ALIGN	16
513$L$schedule_256:
514	movdqu	xmm0,XMMWORD[16+rdi]
515	call	_vpaes_schedule_transform
516	mov	esi,7
517
518$L$oop_schedule_256:
519	call	_vpaes_schedule_mangle
520	movdqa	xmm6,xmm0
521
522
523	call	_vpaes_schedule_round
524	dec	rsi
525	jz	NEAR $L$schedule_mangle_last
526	call	_vpaes_schedule_mangle
527
528
529	pshufd	xmm0,xmm0,0xFF
530	movdqa	xmm5,xmm7
531	movdqa	xmm7,xmm6
532	call	_vpaes_schedule_low_round
533	movdqa	xmm7,xmm5
534
535	jmp	NEAR $L$oop_schedule_256
536
537
538
539
540
541
542
543
544
545
546
547
548ALIGN	16
549$L$schedule_mangle_last:
550
551	lea	r11,[$L$k_deskew]
552	test	rcx,rcx
553	jnz	NEAR $L$schedule_mangle_last_dec
554
555
556	movdqa	xmm1,XMMWORD[r10*1+r8]
557DB	102,15,56,0,193
558	lea	r11,[$L$k_opt]
559	add	rdx,32
560
561$L$schedule_mangle_last_dec:
562	add	rdx,-16
563	pxor	xmm0,XMMWORD[$L$k_s63]
564	call	_vpaes_schedule_transform
565	movdqu	XMMWORD[rdx],xmm0
566
567
568	pxor	xmm0,xmm0
569	pxor	xmm1,xmm1
570	pxor	xmm2,xmm2
571	pxor	xmm3,xmm3
572	pxor	xmm4,xmm4
573	pxor	xmm5,xmm5
574	pxor	xmm6,xmm6
575	pxor	xmm7,xmm7
576	ret
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595ALIGN	16
596_vpaes_schedule_192_smear:
597
598	pshufd	xmm1,xmm6,0x80
599	pshufd	xmm0,xmm7,0xFE
600	pxor	xmm6,xmm1
601	pxor	xmm1,xmm1
602	pxor	xmm6,xmm0
603	movdqa	xmm0,xmm6
604	movhlps	xmm6,xmm1
605	ret
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628ALIGN	16
629_vpaes_schedule_round:
630
631
632	pxor	xmm1,xmm1
633DB	102,65,15,58,15,200,15
634DB	102,69,15,58,15,192,15
635	pxor	xmm7,xmm1
636
637
638	pshufd	xmm0,xmm0,0xFF
639DB	102,15,58,15,192,1
640
641
642
643
644_vpaes_schedule_low_round:
645
646	movdqa	xmm1,xmm7
647	pslldq	xmm7,4
648	pxor	xmm7,xmm1
649	movdqa	xmm1,xmm7
650	pslldq	xmm7,8
651	pxor	xmm7,xmm1
652	pxor	xmm7,XMMWORD[$L$k_s63]
653
654
655	movdqa	xmm1,xmm9
656	pandn	xmm1,xmm0
657	psrld	xmm1,4
658	pand	xmm0,xmm9
659	movdqa	xmm2,xmm11
660DB	102,15,56,0,208
661	pxor	xmm0,xmm1
662	movdqa	xmm3,xmm10
663DB	102,15,56,0,217
664	pxor	xmm3,xmm2
665	movdqa	xmm4,xmm10
666DB	102,15,56,0,224
667	pxor	xmm4,xmm2
668	movdqa	xmm2,xmm10
669DB	102,15,56,0,211
670	pxor	xmm2,xmm0
671	movdqa	xmm3,xmm10
672DB	102,15,56,0,220
673	pxor	xmm3,xmm1
674	movdqa	xmm4,xmm13
675DB	102,15,56,0,226
676	movdqa	xmm0,xmm12
677DB	102,15,56,0,195
678	pxor	xmm0,xmm4
679
680
681	pxor	xmm0,xmm7
682	movdqa	xmm7,xmm0
683	ret
684
685
686
687
688
689
690
691
692
693
694
695
696
697ALIGN	16
698_vpaes_schedule_transform:
699
700	movdqa	xmm1,xmm9
701	pandn	xmm1,xmm0
702	psrld	xmm1,4
703	pand	xmm0,xmm9
704	movdqa	xmm2,XMMWORD[r11]
705DB	102,15,56,0,208
706	movdqa	xmm0,XMMWORD[16+r11]
707DB	102,15,56,0,193
708	pxor	xmm0,xmm2
709	ret
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737ALIGN	16
738_vpaes_schedule_mangle:
739
740	movdqa	xmm4,xmm0
741	movdqa	xmm5,XMMWORD[$L$k_mc_forward]
742	test	rcx,rcx
743	jnz	NEAR $L$schedule_mangle_dec
744
745
746	add	rdx,16
747	pxor	xmm4,XMMWORD[$L$k_s63]
748DB	102,15,56,0,229
749	movdqa	xmm3,xmm4
750DB	102,15,56,0,229
751	pxor	xmm3,xmm4
752DB	102,15,56,0,229
753	pxor	xmm3,xmm4
754
755	jmp	NEAR $L$schedule_mangle_both
756ALIGN	16
757$L$schedule_mangle_dec:
758
759	lea	r11,[$L$k_dksd]
760	movdqa	xmm1,xmm9
761	pandn	xmm1,xmm4
762	psrld	xmm1,4
763	pand	xmm4,xmm9
764
765	movdqa	xmm2,XMMWORD[r11]
766DB	102,15,56,0,212
767	movdqa	xmm3,XMMWORD[16+r11]
768DB	102,15,56,0,217
769	pxor	xmm3,xmm2
770DB	102,15,56,0,221
771
772	movdqa	xmm2,XMMWORD[32+r11]
773DB	102,15,56,0,212
774	pxor	xmm2,xmm3
775	movdqa	xmm3,XMMWORD[48+r11]
776DB	102,15,56,0,217
777	pxor	xmm3,xmm2
778DB	102,15,56,0,221
779
780	movdqa	xmm2,XMMWORD[64+r11]
781DB	102,15,56,0,212
782	pxor	xmm2,xmm3
783	movdqa	xmm3,XMMWORD[80+r11]
784DB	102,15,56,0,217
785	pxor	xmm3,xmm2
786DB	102,15,56,0,221
787
788	movdqa	xmm2,XMMWORD[96+r11]
789DB	102,15,56,0,212
790	pxor	xmm2,xmm3
791	movdqa	xmm3,XMMWORD[112+r11]
792DB	102,15,56,0,217
793	pxor	xmm3,xmm2
794
795	add	rdx,-16
796
797$L$schedule_mangle_both:
798	movdqa	xmm1,XMMWORD[r10*1+r8]
799DB	102,15,56,0,217
800	add	r8,-16
801	and	r8,0x30
802	movdqu	XMMWORD[rdx],xmm3
803	ret
804
805
806
807
808
809
810global	vpaes_set_encrypt_key
811
812ALIGN	16
813vpaes_set_encrypt_key:
814	mov	QWORD[8+rsp],rdi	;WIN64 prologue
815	mov	QWORD[16+rsp],rsi
816	mov	rax,rsp
817$L$SEH_begin_vpaes_set_encrypt_key:
818	mov	rdi,rcx
819	mov	rsi,rdx
820	mov	rdx,r8
821
822
823
824_CET_ENDBR
825%ifdef BORINGSSL_DISPATCH_TEST
826EXTERN	BORINGSSL_function_hit
827	mov	BYTE[((BORINGSSL_function_hit+5))],1
828%endif
829
830	lea	rsp,[((-184))+rsp]
831	movaps	XMMWORD[16+rsp],xmm6
832	movaps	XMMWORD[32+rsp],xmm7
833	movaps	XMMWORD[48+rsp],xmm8
834	movaps	XMMWORD[64+rsp],xmm9
835	movaps	XMMWORD[80+rsp],xmm10
836	movaps	XMMWORD[96+rsp],xmm11
837	movaps	XMMWORD[112+rsp],xmm12
838	movaps	XMMWORD[128+rsp],xmm13
839	movaps	XMMWORD[144+rsp],xmm14
840	movaps	XMMWORD[160+rsp],xmm15
841$L$enc_key_body:
842	mov	eax,esi
843	shr	eax,5
844	add	eax,5
845	mov	DWORD[240+rdx],eax
846
847	mov	ecx,0
848	mov	r8d,0x30
849	call	_vpaes_schedule_core
850	movaps	xmm6,XMMWORD[16+rsp]
851	movaps	xmm7,XMMWORD[32+rsp]
852	movaps	xmm8,XMMWORD[48+rsp]
853	movaps	xmm9,XMMWORD[64+rsp]
854	movaps	xmm10,XMMWORD[80+rsp]
855	movaps	xmm11,XMMWORD[96+rsp]
856	movaps	xmm12,XMMWORD[112+rsp]
857	movaps	xmm13,XMMWORD[128+rsp]
858	movaps	xmm14,XMMWORD[144+rsp]
859	movaps	xmm15,XMMWORD[160+rsp]
860	lea	rsp,[184+rsp]
861$L$enc_key_epilogue:
862	xor	eax,eax
863	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
864	mov	rsi,QWORD[16+rsp]
865	ret
866
867$L$SEH_end_vpaes_set_encrypt_key:
868
869global	vpaes_set_decrypt_key
870
871ALIGN	16
872vpaes_set_decrypt_key:
873	mov	QWORD[8+rsp],rdi	;WIN64 prologue
874	mov	QWORD[16+rsp],rsi
875	mov	rax,rsp
876$L$SEH_begin_vpaes_set_decrypt_key:
877	mov	rdi,rcx
878	mov	rsi,rdx
879	mov	rdx,r8
880
881
882
883_CET_ENDBR
884	lea	rsp,[((-184))+rsp]
885	movaps	XMMWORD[16+rsp],xmm6
886	movaps	XMMWORD[32+rsp],xmm7
887	movaps	XMMWORD[48+rsp],xmm8
888	movaps	XMMWORD[64+rsp],xmm9
889	movaps	XMMWORD[80+rsp],xmm10
890	movaps	XMMWORD[96+rsp],xmm11
891	movaps	XMMWORD[112+rsp],xmm12
892	movaps	XMMWORD[128+rsp],xmm13
893	movaps	XMMWORD[144+rsp],xmm14
894	movaps	XMMWORD[160+rsp],xmm15
895$L$dec_key_body:
896	mov	eax,esi
897	shr	eax,5
898	add	eax,5
899	mov	DWORD[240+rdx],eax
900	shl	eax,4
901	lea	rdx,[16+rax*1+rdx]
902
903	mov	ecx,1
904	mov	r8d,esi
905	shr	r8d,1
906	and	r8d,32
907	xor	r8d,32
908	call	_vpaes_schedule_core
909	movaps	xmm6,XMMWORD[16+rsp]
910	movaps	xmm7,XMMWORD[32+rsp]
911	movaps	xmm8,XMMWORD[48+rsp]
912	movaps	xmm9,XMMWORD[64+rsp]
913	movaps	xmm10,XMMWORD[80+rsp]
914	movaps	xmm11,XMMWORD[96+rsp]
915	movaps	xmm12,XMMWORD[112+rsp]
916	movaps	xmm13,XMMWORD[128+rsp]
917	movaps	xmm14,XMMWORD[144+rsp]
918	movaps	xmm15,XMMWORD[160+rsp]
919	lea	rsp,[184+rsp]
920$L$dec_key_epilogue:
921	xor	eax,eax
922	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
923	mov	rsi,QWORD[16+rsp]
924	ret
925
926$L$SEH_end_vpaes_set_decrypt_key:
927
928global	vpaes_encrypt
929
930ALIGN	16
931vpaes_encrypt:
932	mov	QWORD[8+rsp],rdi	;WIN64 prologue
933	mov	QWORD[16+rsp],rsi
934	mov	rax,rsp
935$L$SEH_begin_vpaes_encrypt:
936	mov	rdi,rcx
937	mov	rsi,rdx
938	mov	rdx,r8
939
940
941
942_CET_ENDBR
943%ifdef BORINGSSL_DISPATCH_TEST
944EXTERN	BORINGSSL_function_hit
945	mov	BYTE[((BORINGSSL_function_hit+4))],1
946%endif
947	lea	rsp,[((-184))+rsp]
948	movaps	XMMWORD[16+rsp],xmm6
949	movaps	XMMWORD[32+rsp],xmm7
950	movaps	XMMWORD[48+rsp],xmm8
951	movaps	XMMWORD[64+rsp],xmm9
952	movaps	XMMWORD[80+rsp],xmm10
953	movaps	XMMWORD[96+rsp],xmm11
954	movaps	XMMWORD[112+rsp],xmm12
955	movaps	XMMWORD[128+rsp],xmm13
956	movaps	XMMWORD[144+rsp],xmm14
957	movaps	XMMWORD[160+rsp],xmm15
958$L$enc_body:
959	movdqu	xmm0,XMMWORD[rdi]
960	call	_vpaes_preheat
961	call	_vpaes_encrypt_core
962	movdqu	XMMWORD[rsi],xmm0
963	movaps	xmm6,XMMWORD[16+rsp]
964	movaps	xmm7,XMMWORD[32+rsp]
965	movaps	xmm8,XMMWORD[48+rsp]
966	movaps	xmm9,XMMWORD[64+rsp]
967	movaps	xmm10,XMMWORD[80+rsp]
968	movaps	xmm11,XMMWORD[96+rsp]
969	movaps	xmm12,XMMWORD[112+rsp]
970	movaps	xmm13,XMMWORD[128+rsp]
971	movaps	xmm14,XMMWORD[144+rsp]
972	movaps	xmm15,XMMWORD[160+rsp]
973	lea	rsp,[184+rsp]
974$L$enc_epilogue:
975	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
976	mov	rsi,QWORD[16+rsp]
977	ret
978
979$L$SEH_end_vpaes_encrypt:
980
981global	vpaes_decrypt
982
983ALIGN	16
984vpaes_decrypt:
985	mov	QWORD[8+rsp],rdi	;WIN64 prologue
986	mov	QWORD[16+rsp],rsi
987	mov	rax,rsp
988$L$SEH_begin_vpaes_decrypt:
989	mov	rdi,rcx
990	mov	rsi,rdx
991	mov	rdx,r8
992
993
994
995_CET_ENDBR
996	lea	rsp,[((-184))+rsp]
997	movaps	XMMWORD[16+rsp],xmm6
998	movaps	XMMWORD[32+rsp],xmm7
999	movaps	XMMWORD[48+rsp],xmm8
1000	movaps	XMMWORD[64+rsp],xmm9
1001	movaps	XMMWORD[80+rsp],xmm10
1002	movaps	XMMWORD[96+rsp],xmm11
1003	movaps	XMMWORD[112+rsp],xmm12
1004	movaps	XMMWORD[128+rsp],xmm13
1005	movaps	XMMWORD[144+rsp],xmm14
1006	movaps	XMMWORD[160+rsp],xmm15
1007$L$dec_body:
1008	movdqu	xmm0,XMMWORD[rdi]
1009	call	_vpaes_preheat
1010	call	_vpaes_decrypt_core
1011	movdqu	XMMWORD[rsi],xmm0
1012	movaps	xmm6,XMMWORD[16+rsp]
1013	movaps	xmm7,XMMWORD[32+rsp]
1014	movaps	xmm8,XMMWORD[48+rsp]
1015	movaps	xmm9,XMMWORD[64+rsp]
1016	movaps	xmm10,XMMWORD[80+rsp]
1017	movaps	xmm11,XMMWORD[96+rsp]
1018	movaps	xmm12,XMMWORD[112+rsp]
1019	movaps	xmm13,XMMWORD[128+rsp]
1020	movaps	xmm14,XMMWORD[144+rsp]
1021	movaps	xmm15,XMMWORD[160+rsp]
1022	lea	rsp,[184+rsp]
1023$L$dec_epilogue:
1024	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
1025	mov	rsi,QWORD[16+rsp]
1026	ret
1027
1028$L$SEH_end_vpaes_decrypt:
1029global	vpaes_cbc_encrypt
1030
1031ALIGN	16
1032vpaes_cbc_encrypt:
1033	mov	QWORD[8+rsp],rdi	;WIN64 prologue
1034	mov	QWORD[16+rsp],rsi
1035	mov	rax,rsp
1036$L$SEH_begin_vpaes_cbc_encrypt:
1037	mov	rdi,rcx
1038	mov	rsi,rdx
1039	mov	rdx,r8
1040	mov	rcx,r9
1041	mov	r8,QWORD[40+rsp]
1042	mov	r9,QWORD[48+rsp]
1043
1044
1045
1046_CET_ENDBR
1047	xchg	rdx,rcx
1048	sub	rcx,16
1049	jc	NEAR $L$cbc_abort
1050	lea	rsp,[((-184))+rsp]
1051	movaps	XMMWORD[16+rsp],xmm6
1052	movaps	XMMWORD[32+rsp],xmm7
1053	movaps	XMMWORD[48+rsp],xmm8
1054	movaps	XMMWORD[64+rsp],xmm9
1055	movaps	XMMWORD[80+rsp],xmm10
1056	movaps	XMMWORD[96+rsp],xmm11
1057	movaps	XMMWORD[112+rsp],xmm12
1058	movaps	XMMWORD[128+rsp],xmm13
1059	movaps	XMMWORD[144+rsp],xmm14
1060	movaps	XMMWORD[160+rsp],xmm15
1061$L$cbc_body:
1062	movdqu	xmm6,XMMWORD[r8]
1063	sub	rsi,rdi
1064	call	_vpaes_preheat
1065	cmp	r9d,0
1066	je	NEAR $L$cbc_dec_loop
1067	jmp	NEAR $L$cbc_enc_loop
1068ALIGN	16
1069$L$cbc_enc_loop:
1070	movdqu	xmm0,XMMWORD[rdi]
1071	pxor	xmm0,xmm6
1072	call	_vpaes_encrypt_core
1073	movdqa	xmm6,xmm0
1074	movdqu	XMMWORD[rdi*1+rsi],xmm0
1075	lea	rdi,[16+rdi]
1076	sub	rcx,16
1077	jnc	NEAR $L$cbc_enc_loop
1078	jmp	NEAR $L$cbc_done
1079ALIGN	16
1080$L$cbc_dec_loop:
1081	movdqu	xmm0,XMMWORD[rdi]
1082	movdqa	xmm7,xmm0
1083	call	_vpaes_decrypt_core
1084	pxor	xmm0,xmm6
1085	movdqa	xmm6,xmm7
1086	movdqu	XMMWORD[rdi*1+rsi],xmm0
1087	lea	rdi,[16+rdi]
1088	sub	rcx,16
1089	jnc	NEAR $L$cbc_dec_loop
1090$L$cbc_done:
1091	movdqu	XMMWORD[r8],xmm6
1092	movaps	xmm6,XMMWORD[16+rsp]
1093	movaps	xmm7,XMMWORD[32+rsp]
1094	movaps	xmm8,XMMWORD[48+rsp]
1095	movaps	xmm9,XMMWORD[64+rsp]
1096	movaps	xmm10,XMMWORD[80+rsp]
1097	movaps	xmm11,XMMWORD[96+rsp]
1098	movaps	xmm12,XMMWORD[112+rsp]
1099	movaps	xmm13,XMMWORD[128+rsp]
1100	movaps	xmm14,XMMWORD[144+rsp]
1101	movaps	xmm15,XMMWORD[160+rsp]
1102	lea	rsp,[184+rsp]
1103$L$cbc_epilogue:
1104$L$cbc_abort:
1105	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
1106	mov	rsi,QWORD[16+rsp]
1107	ret
1108
1109$L$SEH_end_vpaes_cbc_encrypt:
1110global	vpaes_ctr32_encrypt_blocks
1111
1112ALIGN	16
1113vpaes_ctr32_encrypt_blocks:
1114	mov	QWORD[8+rsp],rdi	;WIN64 prologue
1115	mov	QWORD[16+rsp],rsi
1116	mov	rax,rsp
1117$L$SEH_begin_vpaes_ctr32_encrypt_blocks:
1118	mov	rdi,rcx
1119	mov	rsi,rdx
1120	mov	rdx,r8
1121	mov	rcx,r9
1122	mov	r8,QWORD[40+rsp]
1123
1124
1125
1126_CET_ENDBR
1127
1128	xchg	rdx,rcx
1129	test	rcx,rcx
1130	jz	NEAR $L$ctr32_abort
1131	lea	rsp,[((-184))+rsp]
1132	movaps	XMMWORD[16+rsp],xmm6
1133	movaps	XMMWORD[32+rsp],xmm7
1134	movaps	XMMWORD[48+rsp],xmm8
1135	movaps	XMMWORD[64+rsp],xmm9
1136	movaps	XMMWORD[80+rsp],xmm10
1137	movaps	XMMWORD[96+rsp],xmm11
1138	movaps	XMMWORD[112+rsp],xmm12
1139	movaps	XMMWORD[128+rsp],xmm13
1140	movaps	XMMWORD[144+rsp],xmm14
1141	movaps	XMMWORD[160+rsp],xmm15
1142$L$ctr32_body:
1143	movdqu	xmm0,XMMWORD[r8]
1144	movdqa	xmm8,XMMWORD[$L$ctr_add_one]
1145	sub	rsi,rdi
1146	call	_vpaes_preheat
1147	movdqa	xmm6,xmm0
1148	pshufb	xmm6,XMMWORD[$L$rev_ctr]
1149
1150	test	rcx,1
1151	jz	NEAR $L$ctr32_prep_loop
1152
1153
1154
1155	movdqu	xmm7,XMMWORD[rdi]
1156	call	_vpaes_encrypt_core
1157	pxor	xmm0,xmm7
1158	paddd	xmm6,xmm8
1159	movdqu	XMMWORD[rdi*1+rsi],xmm0
1160	sub	rcx,1
1161	lea	rdi,[16+rdi]
1162	jz	NEAR $L$ctr32_done
1163
1164$L$ctr32_prep_loop:
1165
1166
1167	movdqa	xmm14,xmm6
1168	movdqa	xmm15,xmm6
1169	paddd	xmm15,xmm8
1170
1171$L$ctr32_loop:
1172	movdqa	xmm1,XMMWORD[$L$rev_ctr]
1173	movdqa	xmm0,xmm14
1174	movdqa	xmm6,xmm15
1175DB	102,15,56,0,193
1176DB	102,15,56,0,241
1177	call	_vpaes_encrypt_core_2x
1178	movdqu	xmm1,XMMWORD[rdi]
1179	movdqu	xmm2,XMMWORD[16+rdi]
1180	movdqa	xmm3,XMMWORD[$L$ctr_add_two]
1181	pxor	xmm0,xmm1
1182	pxor	xmm6,xmm2
1183	paddd	xmm14,xmm3
1184	paddd	xmm15,xmm3
1185	movdqu	XMMWORD[rdi*1+rsi],xmm0
1186	movdqu	XMMWORD[16+rdi*1+rsi],xmm6
1187	sub	rcx,2
1188	lea	rdi,[32+rdi]
1189	jnz	NEAR $L$ctr32_loop
1190
1191$L$ctr32_done:
1192	movaps	xmm6,XMMWORD[16+rsp]
1193	movaps	xmm7,XMMWORD[32+rsp]
1194	movaps	xmm8,XMMWORD[48+rsp]
1195	movaps	xmm9,XMMWORD[64+rsp]
1196	movaps	xmm10,XMMWORD[80+rsp]
1197	movaps	xmm11,XMMWORD[96+rsp]
1198	movaps	xmm12,XMMWORD[112+rsp]
1199	movaps	xmm13,XMMWORD[128+rsp]
1200	movaps	xmm14,XMMWORD[144+rsp]
1201	movaps	xmm15,XMMWORD[160+rsp]
1202	lea	rsp,[184+rsp]
1203$L$ctr32_epilogue:
1204$L$ctr32_abort:
1205	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
1206	mov	rsi,QWORD[16+rsp]
1207	ret
1208
1209$L$SEH_end_vpaes_ctr32_encrypt_blocks:
1210
1211
1212
1213
1214
1215
1216
1217ALIGN	16
1218_vpaes_preheat:
1219
1220	lea	r10,[$L$k_s0F]
1221	movdqa	xmm10,XMMWORD[((-32))+r10]
1222	movdqa	xmm11,XMMWORD[((-16))+r10]
1223	movdqa	xmm9,XMMWORD[r10]
1224	movdqa	xmm13,XMMWORD[48+r10]
1225	movdqa	xmm12,XMMWORD[64+r10]
1226	movdqa	xmm15,XMMWORD[80+r10]
1227	movdqa	xmm14,XMMWORD[96+r10]
1228	ret
1229
1230
1231
1232
1233
1234
1235
1236
1237section	.rdata rdata align=8
1238ALIGN	64
1239_vpaes_consts:
1240$L$k_inv:
1241	DQ	0x0E05060F0D080180,0x040703090A0B0C02
1242	DQ	0x01040A060F0B0780,0x030D0E0C02050809
1243
1244$L$k_s0F:
1245	DQ	0x0F0F0F0F0F0F0F0F,0x0F0F0F0F0F0F0F0F
1246
1247$L$k_ipt:
1248	DQ	0xC2B2E8985A2A7000,0xCABAE09052227808
1249	DQ	0x4C01307D317C4D00,0xCD80B1FCB0FDCC81
1250
1251$L$k_sb1:
1252	DQ	0xB19BE18FCB503E00,0xA5DF7A6E142AF544
1253	DQ	0x3618D415FAE22300,0x3BF7CCC10D2ED9EF
1254$L$k_sb2:
1255	DQ	0xE27A93C60B712400,0x5EB7E955BC982FCD
1256	DQ	0x69EB88400AE12900,0xC2A163C8AB82234A
1257$L$k_sbo:
1258	DQ	0xD0D26D176FBDC700,0x15AABF7AC502A878
1259	DQ	0xCFE474A55FBB6A00,0x8E1E90D1412B35FA
1260
1261$L$k_mc_forward:
1262	DQ	0x0407060500030201,0x0C0F0E0D080B0A09
1263	DQ	0x080B0A0904070605,0x000302010C0F0E0D
1264	DQ	0x0C0F0E0D080B0A09,0x0407060500030201
1265	DQ	0x000302010C0F0E0D,0x080B0A0904070605
1266
1267$L$k_mc_backward:
1268	DQ	0x0605040702010003,0x0E0D0C0F0A09080B
1269	DQ	0x020100030E0D0C0F,0x0A09080B06050407
1270	DQ	0x0E0D0C0F0A09080B,0x0605040702010003
1271	DQ	0x0A09080B06050407,0x020100030E0D0C0F
1272
1273$L$k_sr:
1274	DQ	0x0706050403020100,0x0F0E0D0C0B0A0908
1275	DQ	0x030E09040F0A0500,0x0B06010C07020D08
1276	DQ	0x0F060D040B020900,0x070E050C030A0108
1277	DQ	0x0B0E0104070A0D00,0x0306090C0F020508
1278
1279$L$k_rcon:
1280	DQ	0x1F8391B9AF9DEEB6,0x702A98084D7C7D81
1281
1282$L$k_s63:
1283	DQ	0x5B5B5B5B5B5B5B5B,0x5B5B5B5B5B5B5B5B
1284
1285$L$k_opt:
1286	DQ	0xFF9F4929D6B66000,0xF7974121DEBE6808
1287	DQ	0x01EDBD5150BCEC00,0xE10D5DB1B05C0CE0
1288
1289$L$k_deskew:
1290	DQ	0x07E4A34047A4E300,0x1DFEB95A5DBEF91A
1291	DQ	0x5F36B5DC83EA6900,0x2841C2ABF49D1E77
1292
1293
1294
1295
1296
1297$L$k_dksd:
1298	DQ	0xFEB91A5DA3E44700,0x0740E3A45A1DBEF9
1299	DQ	0x41C277F4B5368300,0x5FDC69EAAB289D1E
1300$L$k_dksb:
1301	DQ	0x9A4FCA1F8550D500,0x03D653861CC94C99
1302	DQ	0x115BEDA7B6FC4A00,0xD993256F7E3482C8
1303$L$k_dkse:
1304	DQ	0xD5031CCA1FC9D600,0x53859A4C994F5086
1305	DQ	0xA23196054FDC7BE8,0xCD5EF96A20B31487
1306$L$k_dks9:
1307	DQ	0xB6116FC87ED9A700,0x4AED933482255BFC
1308	DQ	0x4576516227143300,0x8BB89FACE9DAFDCE
1309
1310
1311
1312
1313
1314$L$k_dipt:
1315	DQ	0x0F505B040B545F00,0x154A411E114E451A
1316	DQ	0x86E383E660056500,0x12771772F491F194
1317
1318$L$k_dsb9:
1319	DQ	0x851C03539A86D600,0xCAD51F504F994CC9
1320	DQ	0xC03B1789ECD74900,0x725E2C9EB2FBA565
1321$L$k_dsbd:
1322	DQ	0x7D57CCDFE6B1A200,0xF56E9B13882A4439
1323	DQ	0x3CE2FAF724C6CB00,0x2931180D15DEEFD3
1324$L$k_dsbb:
1325	DQ	0xD022649296B44200,0x602646F6B0F2D404
1326	DQ	0xC19498A6CD596700,0xF3FF0C3E3255AA6B
1327$L$k_dsbe:
1328	DQ	0x46F2929626D4D000,0x2242600464B4F6B0
1329	DQ	0x0C55A6CDFFAAC100,0x9467F36B98593E32
1330$L$k_dsbo:
1331	DQ	0x1387EA537EF94000,0xC7AA6DB9D4943E2D
1332	DQ	0x12D7560F93441D00,0xCA4B8159D8C58E9C
1333
1334
1335$L$rev_ctr:
1336	DQ	0x0706050403020100,0x0c0d0e0f0b0a0908
1337
1338
1339$L$ctr_add_one:
1340	DQ	0x0000000000000000,0x0000000100000000
1341$L$ctr_add_two:
1342	DQ	0x0000000000000000,0x0000000200000000
1343
1344	DB	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
1345	DB	111,110,32,65,69,83,32,102,111,114,32,120,56,54,95,54
1346	DB	52,47,83,83,83,69,51,44,32,77,105,107,101,32,72,97
1347	DB	109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32
1348	DB	85,110,105,118,101,114,115,105,116,121,41,0
1349ALIGN	64
1350
1351section	.text
1352
1353EXTERN	__imp_RtlVirtualUnwind
1354
1355ALIGN	16
1356se_handler:
1357	push	rsi
1358	push	rdi
1359	push	rbx
1360	push	rbp
1361	push	r12
1362	push	r13
1363	push	r14
1364	push	r15
1365	pushfq
1366	sub	rsp,64
1367
1368	mov	rax,QWORD[120+r8]
1369	mov	rbx,QWORD[248+r8]
1370
1371	mov	rsi,QWORD[8+r9]
1372	mov	r11,QWORD[56+r9]
1373
1374	mov	r10d,DWORD[r11]
1375	lea	r10,[r10*1+rsi]
1376	cmp	rbx,r10
1377	jb	NEAR $L$in_prologue
1378
1379	mov	rax,QWORD[152+r8]
1380
1381	mov	r10d,DWORD[4+r11]
1382	lea	r10,[r10*1+rsi]
1383	cmp	rbx,r10
1384	jae	NEAR $L$in_prologue
1385
1386	lea	rsi,[16+rax]
1387	lea	rdi,[512+r8]
1388	mov	ecx,20
1389	DD	0xa548f3fc
1390	lea	rax,[184+rax]
1391
1392$L$in_prologue:
1393	mov	rdi,QWORD[8+rax]
1394	mov	rsi,QWORD[16+rax]
1395	mov	QWORD[152+r8],rax
1396	mov	QWORD[168+r8],rsi
1397	mov	QWORD[176+r8],rdi
1398
1399	mov	rdi,QWORD[40+r9]
1400	mov	rsi,r8
1401	mov	ecx,154
1402	DD	0xa548f3fc
1403
1404	mov	rsi,r9
1405	xor	rcx,rcx
1406	mov	rdx,QWORD[8+rsi]
1407	mov	r8,QWORD[rsi]
1408	mov	r9,QWORD[16+rsi]
1409	mov	r10,QWORD[40+rsi]
1410	lea	r11,[56+rsi]
1411	lea	r12,[24+rsi]
1412	mov	QWORD[32+rsp],r10
1413	mov	QWORD[40+rsp],r11
1414	mov	QWORD[48+rsp],r12
1415	mov	QWORD[56+rsp],rcx
1416	call	QWORD[__imp_RtlVirtualUnwind]
1417
1418	mov	eax,1
1419	add	rsp,64
1420	popfq
1421	pop	r15
1422	pop	r14
1423	pop	r13
1424	pop	r12
1425	pop	rbp
1426	pop	rbx
1427	pop	rdi
1428	pop	rsi
1429	ret
1430
1431
1432section	.pdata rdata align=4
1433ALIGN	4
1434	DD	$L$SEH_begin_vpaes_set_encrypt_key wrt ..imagebase
1435	DD	$L$SEH_end_vpaes_set_encrypt_key wrt ..imagebase
1436	DD	$L$SEH_info_vpaes_set_encrypt_key wrt ..imagebase
1437
1438	DD	$L$SEH_begin_vpaes_set_decrypt_key wrt ..imagebase
1439	DD	$L$SEH_end_vpaes_set_decrypt_key wrt ..imagebase
1440	DD	$L$SEH_info_vpaes_set_decrypt_key wrt ..imagebase
1441
1442	DD	$L$SEH_begin_vpaes_encrypt wrt ..imagebase
1443	DD	$L$SEH_end_vpaes_encrypt wrt ..imagebase
1444	DD	$L$SEH_info_vpaes_encrypt wrt ..imagebase
1445
1446	DD	$L$SEH_begin_vpaes_decrypt wrt ..imagebase
1447	DD	$L$SEH_end_vpaes_decrypt wrt ..imagebase
1448	DD	$L$SEH_info_vpaes_decrypt wrt ..imagebase
1449
1450	DD	$L$SEH_begin_vpaes_cbc_encrypt wrt ..imagebase
1451	DD	$L$SEH_end_vpaes_cbc_encrypt wrt ..imagebase
1452	DD	$L$SEH_info_vpaes_cbc_encrypt wrt ..imagebase
1453
1454	DD	$L$SEH_begin_vpaes_ctr32_encrypt_blocks wrt ..imagebase
1455	DD	$L$SEH_end_vpaes_ctr32_encrypt_blocks wrt ..imagebase
1456	DD	$L$SEH_info_vpaes_ctr32_encrypt_blocks wrt ..imagebase
1457
1458section	.xdata rdata align=8
1459ALIGN	8
1460$L$SEH_info_vpaes_set_encrypt_key:
1461	DB	9,0,0,0
1462	DD	se_handler wrt ..imagebase
1463	DD	$L$enc_key_body wrt ..imagebase,$L$enc_key_epilogue wrt ..imagebase
1464$L$SEH_info_vpaes_set_decrypt_key:
1465	DB	9,0,0,0
1466	DD	se_handler wrt ..imagebase
1467	DD	$L$dec_key_body wrt ..imagebase,$L$dec_key_epilogue wrt ..imagebase
1468$L$SEH_info_vpaes_encrypt:
1469	DB	9,0,0,0
1470	DD	se_handler wrt ..imagebase
1471	DD	$L$enc_body wrt ..imagebase,$L$enc_epilogue wrt ..imagebase
1472$L$SEH_info_vpaes_decrypt:
1473	DB	9,0,0,0
1474	DD	se_handler wrt ..imagebase
1475	DD	$L$dec_body wrt ..imagebase,$L$dec_epilogue wrt ..imagebase
1476$L$SEH_info_vpaes_cbc_encrypt:
1477	DB	9,0,0,0
1478	DD	se_handler wrt ..imagebase
1479	DD	$L$cbc_body wrt ..imagebase,$L$cbc_epilogue wrt ..imagebase
1480$L$SEH_info_vpaes_ctr32_encrypt_blocks:
1481	DB	9,0,0,0
1482	DD	se_handler wrt ..imagebase
1483	DD	$L$ctr32_body wrt ..imagebase,$L$ctr32_epilogue wrt ..imagebase
1484%else
1485; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
1486ret
1487%endif
1488