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
14EXTERN	OPENSSL_ia32cap_P
15global	aes_hw_encrypt
16
17ALIGN	16
18aes_hw_encrypt:
19
20_CET_ENDBR
21%ifdef BORINGSSL_DISPATCH_TEST
22EXTERN	BORINGSSL_function_hit
23	mov	BYTE[((BORINGSSL_function_hit+1))],1
24%endif
25	movups	xmm2,XMMWORD[rcx]
26	mov	eax,DWORD[240+r8]
27	movups	xmm0,XMMWORD[r8]
28	movups	xmm1,XMMWORD[16+r8]
29	lea	r8,[32+r8]
30	xorps	xmm2,xmm0
31$L$oop_enc1_1:
32	DB	102,15,56,220,209
33	dec	eax
34	movups	xmm1,XMMWORD[r8]
35	lea	r8,[16+r8]
36	jnz	NEAR $L$oop_enc1_1
37	DB	102,15,56,221,209
38	pxor	xmm0,xmm0
39	pxor	xmm1,xmm1
40	movups	XMMWORD[rdx],xmm2
41	pxor	xmm2,xmm2
42	ret
43
44
45
46ALIGN	16
47_aesni_encrypt2:
48
49	movups	xmm0,XMMWORD[rcx]
50	shl	eax,4
51	movups	xmm1,XMMWORD[16+rcx]
52	xorps	xmm2,xmm0
53	xorps	xmm3,xmm0
54	movups	xmm0,XMMWORD[32+rcx]
55	lea	rcx,[32+rax*1+rcx]
56	neg	rax
57	add	rax,16
58
59$L$enc_loop2:
60	DB	102,15,56,220,209
61	DB	102,15,56,220,217
62	movups	xmm1,XMMWORD[rax*1+rcx]
63	add	rax,32
64	DB	102,15,56,220,208
65	DB	102,15,56,220,216
66	movups	xmm0,XMMWORD[((-16))+rax*1+rcx]
67	jnz	NEAR $L$enc_loop2
68
69	DB	102,15,56,220,209
70	DB	102,15,56,220,217
71	DB	102,15,56,221,208
72	DB	102,15,56,221,216
73	ret
74
75
76
77ALIGN	16
78_aesni_encrypt3:
79
80	movups	xmm0,XMMWORD[rcx]
81	shl	eax,4
82	movups	xmm1,XMMWORD[16+rcx]
83	xorps	xmm2,xmm0
84	xorps	xmm3,xmm0
85	xorps	xmm4,xmm0
86	movups	xmm0,XMMWORD[32+rcx]
87	lea	rcx,[32+rax*1+rcx]
88	neg	rax
89	add	rax,16
90
91$L$enc_loop3:
92	DB	102,15,56,220,209
93	DB	102,15,56,220,217
94	DB	102,15,56,220,225
95	movups	xmm1,XMMWORD[rax*1+rcx]
96	add	rax,32
97	DB	102,15,56,220,208
98	DB	102,15,56,220,216
99	DB	102,15,56,220,224
100	movups	xmm0,XMMWORD[((-16))+rax*1+rcx]
101	jnz	NEAR $L$enc_loop3
102
103	DB	102,15,56,220,209
104	DB	102,15,56,220,217
105	DB	102,15,56,220,225
106	DB	102,15,56,221,208
107	DB	102,15,56,221,216
108	DB	102,15,56,221,224
109	ret
110
111
112
113ALIGN	16
114_aesni_encrypt4:
115
116	movups	xmm0,XMMWORD[rcx]
117	shl	eax,4
118	movups	xmm1,XMMWORD[16+rcx]
119	xorps	xmm2,xmm0
120	xorps	xmm3,xmm0
121	xorps	xmm4,xmm0
122	xorps	xmm5,xmm0
123	movups	xmm0,XMMWORD[32+rcx]
124	lea	rcx,[32+rax*1+rcx]
125	neg	rax
126	DB	0x0f,0x1f,0x00
127	add	rax,16
128
129$L$enc_loop4:
130	DB	102,15,56,220,209
131	DB	102,15,56,220,217
132	DB	102,15,56,220,225
133	DB	102,15,56,220,233
134	movups	xmm1,XMMWORD[rax*1+rcx]
135	add	rax,32
136	DB	102,15,56,220,208
137	DB	102,15,56,220,216
138	DB	102,15,56,220,224
139	DB	102,15,56,220,232
140	movups	xmm0,XMMWORD[((-16))+rax*1+rcx]
141	jnz	NEAR $L$enc_loop4
142
143	DB	102,15,56,220,209
144	DB	102,15,56,220,217
145	DB	102,15,56,220,225
146	DB	102,15,56,220,233
147	DB	102,15,56,221,208
148	DB	102,15,56,221,216
149	DB	102,15,56,221,224
150	DB	102,15,56,221,232
151	ret
152
153
154
155ALIGN	16
156_aesni_encrypt6:
157
158	movups	xmm0,XMMWORD[rcx]
159	shl	eax,4
160	movups	xmm1,XMMWORD[16+rcx]
161	xorps	xmm2,xmm0
162	pxor	xmm3,xmm0
163	pxor	xmm4,xmm0
164	DB	102,15,56,220,209
165	lea	rcx,[32+rax*1+rcx]
166	neg	rax
167	DB	102,15,56,220,217
168	pxor	xmm5,xmm0
169	pxor	xmm6,xmm0
170	DB	102,15,56,220,225
171	pxor	xmm7,xmm0
172	movups	xmm0,XMMWORD[rax*1+rcx]
173	add	rax,16
174	jmp	NEAR $L$enc_loop6_enter
175ALIGN	16
176$L$enc_loop6:
177	DB	102,15,56,220,209
178	DB	102,15,56,220,217
179	DB	102,15,56,220,225
180$L$enc_loop6_enter:
181	DB	102,15,56,220,233
182	DB	102,15,56,220,241
183	DB	102,15,56,220,249
184	movups	xmm1,XMMWORD[rax*1+rcx]
185	add	rax,32
186	DB	102,15,56,220,208
187	DB	102,15,56,220,216
188	DB	102,15,56,220,224
189	DB	102,15,56,220,232
190	DB	102,15,56,220,240
191	DB	102,15,56,220,248
192	movups	xmm0,XMMWORD[((-16))+rax*1+rcx]
193	jnz	NEAR $L$enc_loop6
194
195	DB	102,15,56,220,209
196	DB	102,15,56,220,217
197	DB	102,15,56,220,225
198	DB	102,15,56,220,233
199	DB	102,15,56,220,241
200	DB	102,15,56,220,249
201	DB	102,15,56,221,208
202	DB	102,15,56,221,216
203	DB	102,15,56,221,224
204	DB	102,15,56,221,232
205	DB	102,15,56,221,240
206	DB	102,15,56,221,248
207	ret
208
209
210
211ALIGN	16
212_aesni_encrypt8:
213
214	movups	xmm0,XMMWORD[rcx]
215	shl	eax,4
216	movups	xmm1,XMMWORD[16+rcx]
217	xorps	xmm2,xmm0
218	xorps	xmm3,xmm0
219	pxor	xmm4,xmm0
220	pxor	xmm5,xmm0
221	pxor	xmm6,xmm0
222	lea	rcx,[32+rax*1+rcx]
223	neg	rax
224	DB	102,15,56,220,209
225	pxor	xmm7,xmm0
226	pxor	xmm8,xmm0
227	DB	102,15,56,220,217
228	pxor	xmm9,xmm0
229	movups	xmm0,XMMWORD[rax*1+rcx]
230	add	rax,16
231	jmp	NEAR $L$enc_loop8_inner
232ALIGN	16
233$L$enc_loop8:
234	DB	102,15,56,220,209
235	DB	102,15,56,220,217
236$L$enc_loop8_inner:
237	DB	102,15,56,220,225
238	DB	102,15,56,220,233
239	DB	102,15,56,220,241
240	DB	102,15,56,220,249
241	DB	102,68,15,56,220,193
242	DB	102,68,15,56,220,201
243$L$enc_loop8_enter:
244	movups	xmm1,XMMWORD[rax*1+rcx]
245	add	rax,32
246	DB	102,15,56,220,208
247	DB	102,15,56,220,216
248	DB	102,15,56,220,224
249	DB	102,15,56,220,232
250	DB	102,15,56,220,240
251	DB	102,15,56,220,248
252	DB	102,68,15,56,220,192
253	DB	102,68,15,56,220,200
254	movups	xmm0,XMMWORD[((-16))+rax*1+rcx]
255	jnz	NEAR $L$enc_loop8
256
257	DB	102,15,56,220,209
258	DB	102,15,56,220,217
259	DB	102,15,56,220,225
260	DB	102,15,56,220,233
261	DB	102,15,56,220,241
262	DB	102,15,56,220,249
263	DB	102,68,15,56,220,193
264	DB	102,68,15,56,220,201
265	DB	102,15,56,221,208
266	DB	102,15,56,221,216
267	DB	102,15,56,221,224
268	DB	102,15,56,221,232
269	DB	102,15,56,221,240
270	DB	102,15,56,221,248
271	DB	102,68,15,56,221,192
272	DB	102,68,15,56,221,200
273	ret
274
275
276global	aes_hw_ctr32_encrypt_blocks
277
278ALIGN	16
279aes_hw_ctr32_encrypt_blocks:
280	mov	QWORD[8+rsp],rdi	;WIN64 prologue
281	mov	QWORD[16+rsp],rsi
282	mov	rax,rsp
283$L$SEH_begin_aes_hw_ctr32_encrypt_blocks:
284	mov	rdi,rcx
285	mov	rsi,rdx
286	mov	rdx,r8
287	mov	rcx,r9
288	mov	r8,QWORD[40+rsp]
289
290
291
292_CET_ENDBR
293%ifdef BORINGSSL_DISPATCH_TEST
294	mov	BYTE[BORINGSSL_function_hit],1
295%endif
296	cmp	rdx,1
297	jne	NEAR $L$ctr32_bulk
298
299
300
301	movups	xmm2,XMMWORD[r8]
302	movups	xmm3,XMMWORD[rdi]
303	mov	edx,DWORD[240+rcx]
304	movups	xmm0,XMMWORD[rcx]
305	movups	xmm1,XMMWORD[16+rcx]
306	lea	rcx,[32+rcx]
307	xorps	xmm2,xmm0
308$L$oop_enc1_2:
309	DB	102,15,56,220,209
310	dec	edx
311	movups	xmm1,XMMWORD[rcx]
312	lea	rcx,[16+rcx]
313	jnz	NEAR $L$oop_enc1_2
314	DB	102,15,56,221,209
315	pxor	xmm0,xmm0
316	pxor	xmm1,xmm1
317	xorps	xmm2,xmm3
318	pxor	xmm3,xmm3
319	movups	XMMWORD[rsi],xmm2
320	xorps	xmm2,xmm2
321	jmp	NEAR $L$ctr32_epilogue
322
323ALIGN	16
324$L$ctr32_bulk:
325	lea	r11,[rsp]
326
327	push	rbp
328
329	sub	rsp,288
330	and	rsp,-16
331	movaps	XMMWORD[(-168)+r11],xmm6
332	movaps	XMMWORD[(-152)+r11],xmm7
333	movaps	XMMWORD[(-136)+r11],xmm8
334	movaps	XMMWORD[(-120)+r11],xmm9
335	movaps	XMMWORD[(-104)+r11],xmm10
336	movaps	XMMWORD[(-88)+r11],xmm11
337	movaps	XMMWORD[(-72)+r11],xmm12
338	movaps	XMMWORD[(-56)+r11],xmm13
339	movaps	XMMWORD[(-40)+r11],xmm14
340	movaps	XMMWORD[(-24)+r11],xmm15
341$L$ctr32_body:
342
343
344
345
346	movdqu	xmm2,XMMWORD[r8]
347	movdqu	xmm0,XMMWORD[rcx]
348	mov	r8d,DWORD[12+r8]
349	pxor	xmm2,xmm0
350	mov	ebp,DWORD[12+rcx]
351	movdqa	XMMWORD[rsp],xmm2
352	bswap	r8d
353	movdqa	xmm3,xmm2
354	movdqa	xmm4,xmm2
355	movdqa	xmm5,xmm2
356	movdqa	XMMWORD[64+rsp],xmm2
357	movdqa	XMMWORD[80+rsp],xmm2
358	movdqa	XMMWORD[96+rsp],xmm2
359	mov	r10,rdx
360	movdqa	XMMWORD[112+rsp],xmm2
361
362	lea	rax,[1+r8]
363	lea	rdx,[2+r8]
364	bswap	eax
365	bswap	edx
366	xor	eax,ebp
367	xor	edx,ebp
368DB	102,15,58,34,216,3
369	lea	rax,[3+r8]
370	movdqa	XMMWORD[16+rsp],xmm3
371DB	102,15,58,34,226,3
372	bswap	eax
373	mov	rdx,r10
374	lea	r10,[4+r8]
375	movdqa	XMMWORD[32+rsp],xmm4
376	xor	eax,ebp
377	bswap	r10d
378DB	102,15,58,34,232,3
379	xor	r10d,ebp
380	movdqa	XMMWORD[48+rsp],xmm5
381	lea	r9,[5+r8]
382	mov	DWORD[((64+12))+rsp],r10d
383	bswap	r9d
384	lea	r10,[6+r8]
385	mov	eax,DWORD[240+rcx]
386	xor	r9d,ebp
387	bswap	r10d
388	mov	DWORD[((80+12))+rsp],r9d
389	xor	r10d,ebp
390	lea	r9,[7+r8]
391	mov	DWORD[((96+12))+rsp],r10d
392	bswap	r9d
393	lea	r10,[OPENSSL_ia32cap_P]
394	mov	r10d,DWORD[4+r10]
395	xor	r9d,ebp
396	and	r10d,71303168
397	mov	DWORD[((112+12))+rsp],r9d
398
399	movups	xmm1,XMMWORD[16+rcx]
400
401	movdqa	xmm6,XMMWORD[64+rsp]
402	movdqa	xmm7,XMMWORD[80+rsp]
403
404	cmp	rdx,8
405	jb	NEAR $L$ctr32_tail
406
407	sub	rdx,6
408	cmp	r10d,4194304
409	je	NEAR $L$ctr32_6x
410
411	lea	rcx,[128+rcx]
412	sub	rdx,2
413	jmp	NEAR $L$ctr32_loop8
414
415ALIGN	16
416$L$ctr32_6x:
417	shl	eax,4
418	mov	r10d,48
419	bswap	ebp
420	lea	rcx,[32+rax*1+rcx]
421	sub	r10,rax
422	jmp	NEAR $L$ctr32_loop6
423
424ALIGN	16
425$L$ctr32_loop6:
426	add	r8d,6
427	movups	xmm0,XMMWORD[((-48))+r10*1+rcx]
428	DB	102,15,56,220,209
429	mov	eax,r8d
430	xor	eax,ebp
431	DB	102,15,56,220,217
432	DB	0x0f,0x38,0xf1,0x44,0x24,12
433	lea	eax,[1+r8]
434	DB	102,15,56,220,225
435	xor	eax,ebp
436	DB	0x0f,0x38,0xf1,0x44,0x24,28
437	DB	102,15,56,220,233
438	lea	eax,[2+r8]
439	xor	eax,ebp
440	DB	102,15,56,220,241
441	DB	0x0f,0x38,0xf1,0x44,0x24,44
442	lea	eax,[3+r8]
443	DB	102,15,56,220,249
444	movups	xmm1,XMMWORD[((-32))+r10*1+rcx]
445	xor	eax,ebp
446
447	DB	102,15,56,220,208
448	DB	0x0f,0x38,0xf1,0x44,0x24,60
449	lea	eax,[4+r8]
450	DB	102,15,56,220,216
451	xor	eax,ebp
452	DB	0x0f,0x38,0xf1,0x44,0x24,76
453	DB	102,15,56,220,224
454	lea	eax,[5+r8]
455	xor	eax,ebp
456	DB	102,15,56,220,232
457	DB	0x0f,0x38,0xf1,0x44,0x24,92
458	mov	rax,r10
459	DB	102,15,56,220,240
460	DB	102,15,56,220,248
461	movups	xmm0,XMMWORD[((-16))+r10*1+rcx]
462
463	call	$L$enc_loop6
464
465	movdqu	xmm8,XMMWORD[rdi]
466	movdqu	xmm9,XMMWORD[16+rdi]
467	movdqu	xmm10,XMMWORD[32+rdi]
468	movdqu	xmm11,XMMWORD[48+rdi]
469	movdqu	xmm12,XMMWORD[64+rdi]
470	movdqu	xmm13,XMMWORD[80+rdi]
471	lea	rdi,[96+rdi]
472	movups	xmm1,XMMWORD[((-64))+r10*1+rcx]
473	pxor	xmm8,xmm2
474	movaps	xmm2,XMMWORD[rsp]
475	pxor	xmm9,xmm3
476	movaps	xmm3,XMMWORD[16+rsp]
477	pxor	xmm10,xmm4
478	movaps	xmm4,XMMWORD[32+rsp]
479	pxor	xmm11,xmm5
480	movaps	xmm5,XMMWORD[48+rsp]
481	pxor	xmm12,xmm6
482	movaps	xmm6,XMMWORD[64+rsp]
483	pxor	xmm13,xmm7
484	movaps	xmm7,XMMWORD[80+rsp]
485	movdqu	XMMWORD[rsi],xmm8
486	movdqu	XMMWORD[16+rsi],xmm9
487	movdqu	XMMWORD[32+rsi],xmm10
488	movdqu	XMMWORD[48+rsi],xmm11
489	movdqu	XMMWORD[64+rsi],xmm12
490	movdqu	XMMWORD[80+rsi],xmm13
491	lea	rsi,[96+rsi]
492
493	sub	rdx,6
494	jnc	NEAR $L$ctr32_loop6
495
496	add	rdx,6
497	jz	NEAR $L$ctr32_done
498
499	lea	eax,[((-48))+r10]
500	lea	rcx,[((-80))+r10*1+rcx]
501	neg	eax
502	shr	eax,4
503	jmp	NEAR $L$ctr32_tail
504
505ALIGN	32
506$L$ctr32_loop8:
507	add	r8d,8
508	movdqa	xmm8,XMMWORD[96+rsp]
509	DB	102,15,56,220,209
510	mov	r9d,r8d
511	movdqa	xmm9,XMMWORD[112+rsp]
512	DB	102,15,56,220,217
513	bswap	r9d
514	movups	xmm0,XMMWORD[((32-128))+rcx]
515	DB	102,15,56,220,225
516	xor	r9d,ebp
517	nop
518	DB	102,15,56,220,233
519	mov	DWORD[((0+12))+rsp],r9d
520	lea	r9,[1+r8]
521	DB	102,15,56,220,241
522	DB	102,15,56,220,249
523	DB	102,68,15,56,220,193
524	DB	102,68,15,56,220,201
525	movups	xmm1,XMMWORD[((48-128))+rcx]
526	bswap	r9d
527	DB	102,15,56,220,208
528	DB	102,15,56,220,216
529	xor	r9d,ebp
530	DB	0x66,0x90
531	DB	102,15,56,220,224
532	DB	102,15,56,220,232
533	mov	DWORD[((16+12))+rsp],r9d
534	lea	r9,[2+r8]
535	DB	102,15,56,220,240
536	DB	102,15,56,220,248
537	DB	102,68,15,56,220,192
538	DB	102,68,15,56,220,200
539	movups	xmm0,XMMWORD[((64-128))+rcx]
540	bswap	r9d
541	DB	102,15,56,220,209
542	DB	102,15,56,220,217
543	xor	r9d,ebp
544	DB	0x66,0x90
545	DB	102,15,56,220,225
546	DB	102,15,56,220,233
547	mov	DWORD[((32+12))+rsp],r9d
548	lea	r9,[3+r8]
549	DB	102,15,56,220,241
550	DB	102,15,56,220,249
551	DB	102,68,15,56,220,193
552	DB	102,68,15,56,220,201
553	movups	xmm1,XMMWORD[((80-128))+rcx]
554	bswap	r9d
555	DB	102,15,56,220,208
556	DB	102,15,56,220,216
557	xor	r9d,ebp
558	DB	0x66,0x90
559	DB	102,15,56,220,224
560	DB	102,15,56,220,232
561	mov	DWORD[((48+12))+rsp],r9d
562	lea	r9,[4+r8]
563	DB	102,15,56,220,240
564	DB	102,15,56,220,248
565	DB	102,68,15,56,220,192
566	DB	102,68,15,56,220,200
567	movups	xmm0,XMMWORD[((96-128))+rcx]
568	bswap	r9d
569	DB	102,15,56,220,209
570	DB	102,15,56,220,217
571	xor	r9d,ebp
572	DB	0x66,0x90
573	DB	102,15,56,220,225
574	DB	102,15,56,220,233
575	mov	DWORD[((64+12))+rsp],r9d
576	lea	r9,[5+r8]
577	DB	102,15,56,220,241
578	DB	102,15,56,220,249
579	DB	102,68,15,56,220,193
580	DB	102,68,15,56,220,201
581	movups	xmm1,XMMWORD[((112-128))+rcx]
582	bswap	r9d
583	DB	102,15,56,220,208
584	DB	102,15,56,220,216
585	xor	r9d,ebp
586	DB	0x66,0x90
587	DB	102,15,56,220,224
588	DB	102,15,56,220,232
589	mov	DWORD[((80+12))+rsp],r9d
590	lea	r9,[6+r8]
591	DB	102,15,56,220,240
592	DB	102,15,56,220,248
593	DB	102,68,15,56,220,192
594	DB	102,68,15,56,220,200
595	movups	xmm0,XMMWORD[((128-128))+rcx]
596	bswap	r9d
597	DB	102,15,56,220,209
598	DB	102,15,56,220,217
599	xor	r9d,ebp
600	DB	0x66,0x90
601	DB	102,15,56,220,225
602	DB	102,15,56,220,233
603	mov	DWORD[((96+12))+rsp],r9d
604	lea	r9,[7+r8]
605	DB	102,15,56,220,241
606	DB	102,15,56,220,249
607	DB	102,68,15,56,220,193
608	DB	102,68,15,56,220,201
609	movups	xmm1,XMMWORD[((144-128))+rcx]
610	bswap	r9d
611	DB	102,15,56,220,208
612	DB	102,15,56,220,216
613	DB	102,15,56,220,224
614	xor	r9d,ebp
615	movdqu	xmm10,XMMWORD[rdi]
616	DB	102,15,56,220,232
617	mov	DWORD[((112+12))+rsp],r9d
618	cmp	eax,11
619	DB	102,15,56,220,240
620	DB	102,15,56,220,248
621	DB	102,68,15,56,220,192
622	DB	102,68,15,56,220,200
623	movups	xmm0,XMMWORD[((160-128))+rcx]
624
625	jb	NEAR $L$ctr32_enc_done
626
627	DB	102,15,56,220,209
628	DB	102,15,56,220,217
629	DB	102,15,56,220,225
630	DB	102,15,56,220,233
631	DB	102,15,56,220,241
632	DB	102,15,56,220,249
633	DB	102,68,15,56,220,193
634	DB	102,68,15,56,220,201
635	movups	xmm1,XMMWORD[((176-128))+rcx]
636
637	DB	102,15,56,220,208
638	DB	102,15,56,220,216
639	DB	102,15,56,220,224
640	DB	102,15,56,220,232
641	DB	102,15,56,220,240
642	DB	102,15,56,220,248
643	DB	102,68,15,56,220,192
644	DB	102,68,15,56,220,200
645	movups	xmm0,XMMWORD[((192-128))+rcx]
646
647
648
649	DB	102,15,56,220,209
650	DB	102,15,56,220,217
651	DB	102,15,56,220,225
652	DB	102,15,56,220,233
653	DB	102,15,56,220,241
654	DB	102,15,56,220,249
655	DB	102,68,15,56,220,193
656	DB	102,68,15,56,220,201
657	movups	xmm1,XMMWORD[((208-128))+rcx]
658
659	DB	102,15,56,220,208
660	DB	102,15,56,220,216
661	DB	102,15,56,220,224
662	DB	102,15,56,220,232
663	DB	102,15,56,220,240
664	DB	102,15,56,220,248
665	DB	102,68,15,56,220,192
666	DB	102,68,15,56,220,200
667	movups	xmm0,XMMWORD[((224-128))+rcx]
668	jmp	NEAR $L$ctr32_enc_done
669
670ALIGN	16
671$L$ctr32_enc_done:
672	movdqu	xmm11,XMMWORD[16+rdi]
673	pxor	xmm10,xmm0
674	movdqu	xmm12,XMMWORD[32+rdi]
675	pxor	xmm11,xmm0
676	movdqu	xmm13,XMMWORD[48+rdi]
677	pxor	xmm12,xmm0
678	movdqu	xmm14,XMMWORD[64+rdi]
679	pxor	xmm13,xmm0
680	movdqu	xmm15,XMMWORD[80+rdi]
681	pxor	xmm14,xmm0
682	prefetcht0	[448+rdi]
683	prefetcht0	[512+rdi]
684	pxor	xmm15,xmm0
685	DB	102,15,56,220,209
686	DB	102,15,56,220,217
687	DB	102,15,56,220,225
688	DB	102,15,56,220,233
689	DB	102,15,56,220,241
690	DB	102,15,56,220,249
691	DB	102,68,15,56,220,193
692	DB	102,68,15,56,220,201
693	movdqu	xmm1,XMMWORD[96+rdi]
694	lea	rdi,[128+rdi]
695
696	DB	102,65,15,56,221,210
697	pxor	xmm1,xmm0
698	movdqu	xmm10,XMMWORD[((112-128))+rdi]
699	DB	102,65,15,56,221,219
700	pxor	xmm10,xmm0
701	movdqa	xmm11,XMMWORD[rsp]
702	DB	102,65,15,56,221,228
703	DB	102,65,15,56,221,237
704	movdqa	xmm12,XMMWORD[16+rsp]
705	movdqa	xmm13,XMMWORD[32+rsp]
706	DB	102,65,15,56,221,246
707	DB	102,65,15,56,221,255
708	movdqa	xmm14,XMMWORD[48+rsp]
709	movdqa	xmm15,XMMWORD[64+rsp]
710	DB	102,68,15,56,221,193
711	movdqa	xmm0,XMMWORD[80+rsp]
712	movups	xmm1,XMMWORD[((16-128))+rcx]
713	DB	102,69,15,56,221,202
714
715	movups	XMMWORD[rsi],xmm2
716	movdqa	xmm2,xmm11
717	movups	XMMWORD[16+rsi],xmm3
718	movdqa	xmm3,xmm12
719	movups	XMMWORD[32+rsi],xmm4
720	movdqa	xmm4,xmm13
721	movups	XMMWORD[48+rsi],xmm5
722	movdqa	xmm5,xmm14
723	movups	XMMWORD[64+rsi],xmm6
724	movdqa	xmm6,xmm15
725	movups	XMMWORD[80+rsi],xmm7
726	movdqa	xmm7,xmm0
727	movups	XMMWORD[96+rsi],xmm8
728	movups	XMMWORD[112+rsi],xmm9
729	lea	rsi,[128+rsi]
730
731	sub	rdx,8
732	jnc	NEAR $L$ctr32_loop8
733
734	add	rdx,8
735	jz	NEAR $L$ctr32_done
736	lea	rcx,[((-128))+rcx]
737
738$L$ctr32_tail:
739
740
741	lea	rcx,[16+rcx]
742	cmp	rdx,4
743	jb	NEAR $L$ctr32_loop3
744	je	NEAR $L$ctr32_loop4
745
746
747	shl	eax,4
748	movdqa	xmm8,XMMWORD[96+rsp]
749	pxor	xmm9,xmm9
750
751	movups	xmm0,XMMWORD[16+rcx]
752	DB	102,15,56,220,209
753	DB	102,15,56,220,217
754	lea	rcx,[((32-16))+rax*1+rcx]
755	neg	rax
756	DB	102,15,56,220,225
757	add	rax,16
758	movups	xmm10,XMMWORD[rdi]
759	DB	102,15,56,220,233
760	DB	102,15,56,220,241
761	movups	xmm11,XMMWORD[16+rdi]
762	movups	xmm12,XMMWORD[32+rdi]
763	DB	102,15,56,220,249
764	DB	102,68,15,56,220,193
765
766	call	$L$enc_loop8_enter
767
768	movdqu	xmm13,XMMWORD[48+rdi]
769	pxor	xmm2,xmm10
770	movdqu	xmm10,XMMWORD[64+rdi]
771	pxor	xmm3,xmm11
772	movdqu	XMMWORD[rsi],xmm2
773	pxor	xmm4,xmm12
774	movdqu	XMMWORD[16+rsi],xmm3
775	pxor	xmm5,xmm13
776	movdqu	XMMWORD[32+rsi],xmm4
777	pxor	xmm6,xmm10
778	movdqu	XMMWORD[48+rsi],xmm5
779	movdqu	XMMWORD[64+rsi],xmm6
780	cmp	rdx,6
781	jb	NEAR $L$ctr32_done
782
783	movups	xmm11,XMMWORD[80+rdi]
784	xorps	xmm7,xmm11
785	movups	XMMWORD[80+rsi],xmm7
786	je	NEAR $L$ctr32_done
787
788	movups	xmm12,XMMWORD[96+rdi]
789	xorps	xmm8,xmm12
790	movups	XMMWORD[96+rsi],xmm8
791	jmp	NEAR $L$ctr32_done
792
793ALIGN	32
794$L$ctr32_loop4:
795	DB	102,15,56,220,209
796	lea	rcx,[16+rcx]
797	dec	eax
798	DB	102,15,56,220,217
799	DB	102,15,56,220,225
800	DB	102,15,56,220,233
801	movups	xmm1,XMMWORD[rcx]
802	jnz	NEAR $L$ctr32_loop4
803	DB	102,15,56,221,209
804	DB	102,15,56,221,217
805	movups	xmm10,XMMWORD[rdi]
806	movups	xmm11,XMMWORD[16+rdi]
807	DB	102,15,56,221,225
808	DB	102,15,56,221,233
809	movups	xmm12,XMMWORD[32+rdi]
810	movups	xmm13,XMMWORD[48+rdi]
811
812	xorps	xmm2,xmm10
813	movups	XMMWORD[rsi],xmm2
814	xorps	xmm3,xmm11
815	movups	XMMWORD[16+rsi],xmm3
816	pxor	xmm4,xmm12
817	movdqu	XMMWORD[32+rsi],xmm4
818	pxor	xmm5,xmm13
819	movdqu	XMMWORD[48+rsi],xmm5
820	jmp	NEAR $L$ctr32_done
821
822ALIGN	32
823$L$ctr32_loop3:
824	DB	102,15,56,220,209
825	lea	rcx,[16+rcx]
826	dec	eax
827	DB	102,15,56,220,217
828	DB	102,15,56,220,225
829	movups	xmm1,XMMWORD[rcx]
830	jnz	NEAR $L$ctr32_loop3
831	DB	102,15,56,221,209
832	DB	102,15,56,221,217
833	DB	102,15,56,221,225
834
835	movups	xmm10,XMMWORD[rdi]
836	xorps	xmm2,xmm10
837	movups	XMMWORD[rsi],xmm2
838	cmp	rdx,2
839	jb	NEAR $L$ctr32_done
840
841	movups	xmm11,XMMWORD[16+rdi]
842	xorps	xmm3,xmm11
843	movups	XMMWORD[16+rsi],xmm3
844	je	NEAR $L$ctr32_done
845
846	movups	xmm12,XMMWORD[32+rdi]
847	xorps	xmm4,xmm12
848	movups	XMMWORD[32+rsi],xmm4
849
850$L$ctr32_done:
851	xorps	xmm0,xmm0
852	xor	ebp,ebp
853	pxor	xmm1,xmm1
854	pxor	xmm2,xmm2
855	pxor	xmm3,xmm3
856	pxor	xmm4,xmm4
857	pxor	xmm5,xmm5
858	movaps	xmm6,XMMWORD[((-168))+r11]
859	movaps	XMMWORD[(-168)+r11],xmm0
860	movaps	xmm7,XMMWORD[((-152))+r11]
861	movaps	XMMWORD[(-152)+r11],xmm0
862	movaps	xmm8,XMMWORD[((-136))+r11]
863	movaps	XMMWORD[(-136)+r11],xmm0
864	movaps	xmm9,XMMWORD[((-120))+r11]
865	movaps	XMMWORD[(-120)+r11],xmm0
866	movaps	xmm10,XMMWORD[((-104))+r11]
867	movaps	XMMWORD[(-104)+r11],xmm0
868	movaps	xmm11,XMMWORD[((-88))+r11]
869	movaps	XMMWORD[(-88)+r11],xmm0
870	movaps	xmm12,XMMWORD[((-72))+r11]
871	movaps	XMMWORD[(-72)+r11],xmm0
872	movaps	xmm13,XMMWORD[((-56))+r11]
873	movaps	XMMWORD[(-56)+r11],xmm0
874	movaps	xmm14,XMMWORD[((-40))+r11]
875	movaps	XMMWORD[(-40)+r11],xmm0
876	movaps	xmm15,XMMWORD[((-24))+r11]
877	movaps	XMMWORD[(-24)+r11],xmm0
878	movaps	XMMWORD[rsp],xmm0
879	movaps	XMMWORD[16+rsp],xmm0
880	movaps	XMMWORD[32+rsp],xmm0
881	movaps	XMMWORD[48+rsp],xmm0
882	movaps	XMMWORD[64+rsp],xmm0
883	movaps	XMMWORD[80+rsp],xmm0
884	movaps	XMMWORD[96+rsp],xmm0
885	movaps	XMMWORD[112+rsp],xmm0
886	mov	rbp,QWORD[((-8))+r11]
887
888	lea	rsp,[r11]
889
890$L$ctr32_epilogue:
891	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
892	mov	rsi,QWORD[16+rsp]
893	ret
894
895$L$SEH_end_aes_hw_ctr32_encrypt_blocks:
896global	aes_hw_set_encrypt_key
897
898ALIGN	16
899aes_hw_set_encrypt_key:
900__aesni_set_encrypt_key:
901
902_CET_ENDBR
903%ifdef BORINGSSL_DISPATCH_TEST
904	mov	BYTE[((BORINGSSL_function_hit+3))],1
905%endif
906	DB	0x48,0x83,0xEC,0x08
907
908	mov	rax,-1
909	test	rcx,rcx
910	jz	NEAR $L$enc_key_ret
911	test	r8,r8
912	jz	NEAR $L$enc_key_ret
913
914	movups	xmm0,XMMWORD[rcx]
915	xorps	xmm4,xmm4
916	lea	r10,[OPENSSL_ia32cap_P]
917	mov	r10d,DWORD[4+r10]
918	and	r10d,268437504
919	lea	rax,[16+r8]
920	cmp	edx,256
921	je	NEAR $L$14rounds
922
923	cmp	edx,128
924	jne	NEAR $L$bad_keybits
925
926$L$10rounds:
927	mov	edx,9
928	cmp	r10d,268435456
929	je	NEAR $L$10rounds_alt
930
931	movups	XMMWORD[r8],xmm0
932	DB	102,15,58,223,200,1
933	call	$L$key_expansion_128_cold
934	DB	102,15,58,223,200,2
935	call	$L$key_expansion_128
936	DB	102,15,58,223,200,4
937	call	$L$key_expansion_128
938	DB	102,15,58,223,200,8
939	call	$L$key_expansion_128
940	DB	102,15,58,223,200,16
941	call	$L$key_expansion_128
942	DB	102,15,58,223,200,32
943	call	$L$key_expansion_128
944	DB	102,15,58,223,200,64
945	call	$L$key_expansion_128
946	DB	102,15,58,223,200,128
947	call	$L$key_expansion_128
948	DB	102,15,58,223,200,27
949	call	$L$key_expansion_128
950	DB	102,15,58,223,200,54
951	call	$L$key_expansion_128
952	movups	XMMWORD[rax],xmm0
953	mov	DWORD[80+rax],edx
954	xor	eax,eax
955	jmp	NEAR $L$enc_key_ret
956
957ALIGN	16
958$L$10rounds_alt:
959	movdqa	xmm5,XMMWORD[$L$key_rotate]
960	mov	r10d,8
961	movdqa	xmm4,XMMWORD[$L$key_rcon1]
962	movdqa	xmm2,xmm0
963	movdqu	XMMWORD[r8],xmm0
964	jmp	NEAR $L$oop_key128
965
966ALIGN	16
967$L$oop_key128:
968DB	102,15,56,0,197
969	DB	102,15,56,221,196
970	pslld	xmm4,1
971	lea	rax,[16+rax]
972
973	movdqa	xmm3,xmm2
974	pslldq	xmm2,4
975	pxor	xmm3,xmm2
976	pslldq	xmm2,4
977	pxor	xmm3,xmm2
978	pslldq	xmm2,4
979	pxor	xmm2,xmm3
980
981	pxor	xmm0,xmm2
982	movdqu	XMMWORD[(-16)+rax],xmm0
983	movdqa	xmm2,xmm0
984
985	dec	r10d
986	jnz	NEAR $L$oop_key128
987
988	movdqa	xmm4,XMMWORD[$L$key_rcon1b]
989
990DB	102,15,56,0,197
991	DB	102,15,56,221,196
992	pslld	xmm4,1
993
994	movdqa	xmm3,xmm2
995	pslldq	xmm2,4
996	pxor	xmm3,xmm2
997	pslldq	xmm2,4
998	pxor	xmm3,xmm2
999	pslldq	xmm2,4
1000	pxor	xmm2,xmm3
1001
1002	pxor	xmm0,xmm2
1003	movdqu	XMMWORD[rax],xmm0
1004
1005	movdqa	xmm2,xmm0
1006DB	102,15,56,0,197
1007	DB	102,15,56,221,196
1008
1009	movdqa	xmm3,xmm2
1010	pslldq	xmm2,4
1011	pxor	xmm3,xmm2
1012	pslldq	xmm2,4
1013	pxor	xmm3,xmm2
1014	pslldq	xmm2,4
1015	pxor	xmm2,xmm3
1016
1017	pxor	xmm0,xmm2
1018	movdqu	XMMWORD[16+rax],xmm0
1019
1020	mov	DWORD[96+rax],edx
1021	xor	eax,eax
1022	jmp	NEAR $L$enc_key_ret
1023
1024
1025
1026ALIGN	16
1027$L$14rounds:
1028	movups	xmm2,XMMWORD[16+rcx]
1029	mov	edx,13
1030	lea	rax,[16+rax]
1031	cmp	r10d,268435456
1032	je	NEAR $L$14rounds_alt
1033
1034	movups	XMMWORD[r8],xmm0
1035	movups	XMMWORD[16+r8],xmm2
1036	DB	102,15,58,223,202,1
1037	call	$L$key_expansion_256a_cold
1038	DB	102,15,58,223,200,1
1039	call	$L$key_expansion_256b
1040	DB	102,15,58,223,202,2
1041	call	$L$key_expansion_256a
1042	DB	102,15,58,223,200,2
1043	call	$L$key_expansion_256b
1044	DB	102,15,58,223,202,4
1045	call	$L$key_expansion_256a
1046	DB	102,15,58,223,200,4
1047	call	$L$key_expansion_256b
1048	DB	102,15,58,223,202,8
1049	call	$L$key_expansion_256a
1050	DB	102,15,58,223,200,8
1051	call	$L$key_expansion_256b
1052	DB	102,15,58,223,202,16
1053	call	$L$key_expansion_256a
1054	DB	102,15,58,223,200,16
1055	call	$L$key_expansion_256b
1056	DB	102,15,58,223,202,32
1057	call	$L$key_expansion_256a
1058	DB	102,15,58,223,200,32
1059	call	$L$key_expansion_256b
1060	DB	102,15,58,223,202,64
1061	call	$L$key_expansion_256a
1062	movups	XMMWORD[rax],xmm0
1063	mov	DWORD[16+rax],edx
1064	xor	rax,rax
1065	jmp	NEAR $L$enc_key_ret
1066
1067ALIGN	16
1068$L$14rounds_alt:
1069	movdqa	xmm5,XMMWORD[$L$key_rotate]
1070	movdqa	xmm4,XMMWORD[$L$key_rcon1]
1071	mov	r10d,7
1072	movdqu	XMMWORD[r8],xmm0
1073	movdqa	xmm1,xmm2
1074	movdqu	XMMWORD[16+r8],xmm2
1075	jmp	NEAR $L$oop_key256
1076
1077ALIGN	16
1078$L$oop_key256:
1079DB	102,15,56,0,213
1080	DB	102,15,56,221,212
1081
1082	movdqa	xmm3,xmm0
1083	pslldq	xmm0,4
1084	pxor	xmm3,xmm0
1085	pslldq	xmm0,4
1086	pxor	xmm3,xmm0
1087	pslldq	xmm0,4
1088	pxor	xmm0,xmm3
1089	pslld	xmm4,1
1090
1091	pxor	xmm0,xmm2
1092	movdqu	XMMWORD[rax],xmm0
1093
1094	dec	r10d
1095	jz	NEAR $L$done_key256
1096
1097	pshufd	xmm2,xmm0,0xff
1098	pxor	xmm3,xmm3
1099	DB	102,15,56,221,211
1100
1101	movdqa	xmm3,xmm1
1102	pslldq	xmm1,4
1103	pxor	xmm3,xmm1
1104	pslldq	xmm1,4
1105	pxor	xmm3,xmm1
1106	pslldq	xmm1,4
1107	pxor	xmm1,xmm3
1108
1109	pxor	xmm2,xmm1
1110	movdqu	XMMWORD[16+rax],xmm2
1111	lea	rax,[32+rax]
1112	movdqa	xmm1,xmm2
1113
1114	jmp	NEAR $L$oop_key256
1115
1116$L$done_key256:
1117	mov	DWORD[16+rax],edx
1118	xor	eax,eax
1119	jmp	NEAR $L$enc_key_ret
1120
1121ALIGN	16
1122$L$bad_keybits:
1123	mov	rax,-2
1124$L$enc_key_ret:
1125	pxor	xmm0,xmm0
1126	pxor	xmm1,xmm1
1127	pxor	xmm2,xmm2
1128	pxor	xmm3,xmm3
1129	pxor	xmm4,xmm4
1130	pxor	xmm5,xmm5
1131	add	rsp,8
1132
1133	ret
1134
1135$L$SEH_end_set_encrypt_key:
1136
1137ALIGN	16
1138$L$key_expansion_128:
1139	movups	XMMWORD[rax],xmm0
1140	lea	rax,[16+rax]
1141$L$key_expansion_128_cold:
1142	shufps	xmm4,xmm0,16
1143	xorps	xmm0,xmm4
1144	shufps	xmm4,xmm0,140
1145	xorps	xmm0,xmm4
1146	shufps	xmm1,xmm1,255
1147	xorps	xmm0,xmm1
1148	ret
1149
1150ALIGN	16
1151$L$key_expansion_192a:
1152	movups	XMMWORD[rax],xmm0
1153	lea	rax,[16+rax]
1154$L$key_expansion_192a_cold:
1155	movaps	xmm5,xmm2
1156$L$key_expansion_192b_warm:
1157	shufps	xmm4,xmm0,16
1158	movdqa	xmm3,xmm2
1159	xorps	xmm0,xmm4
1160	shufps	xmm4,xmm0,140
1161	pslldq	xmm3,4
1162	xorps	xmm0,xmm4
1163	pshufd	xmm1,xmm1,85
1164	pxor	xmm2,xmm3
1165	pxor	xmm0,xmm1
1166	pshufd	xmm3,xmm0,255
1167	pxor	xmm2,xmm3
1168	ret
1169
1170ALIGN	16
1171$L$key_expansion_192b:
1172	movaps	xmm3,xmm0
1173	shufps	xmm5,xmm0,68
1174	movups	XMMWORD[rax],xmm5
1175	shufps	xmm3,xmm2,78
1176	movups	XMMWORD[16+rax],xmm3
1177	lea	rax,[32+rax]
1178	jmp	NEAR $L$key_expansion_192b_warm
1179
1180ALIGN	16
1181$L$key_expansion_256a:
1182	movups	XMMWORD[rax],xmm2
1183	lea	rax,[16+rax]
1184$L$key_expansion_256a_cold:
1185	shufps	xmm4,xmm0,16
1186	xorps	xmm0,xmm4
1187	shufps	xmm4,xmm0,140
1188	xorps	xmm0,xmm4
1189	shufps	xmm1,xmm1,255
1190	xorps	xmm0,xmm1
1191	ret
1192
1193ALIGN	16
1194$L$key_expansion_256b:
1195	movups	XMMWORD[rax],xmm0
1196	lea	rax,[16+rax]
1197
1198	shufps	xmm4,xmm2,16
1199	xorps	xmm2,xmm4
1200	shufps	xmm4,xmm2,140
1201	xorps	xmm2,xmm4
1202	shufps	xmm1,xmm1,170
1203	xorps	xmm2,xmm1
1204	ret
1205
1206
1207section	.rdata rdata align=8
1208ALIGN	64
1209$L$bswap_mask:
1210	DB	15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
1211$L$increment32:
1212	DD	6,6,6,0
1213$L$increment64:
1214	DD	1,0,0,0
1215$L$increment1:
1216	DB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
1217$L$key_rotate:
1218	DD	0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
1219$L$key_rotate192:
1220	DD	0x04070605,0x04070605,0x04070605,0x04070605
1221$L$key_rcon1:
1222	DD	1,1,1,1
1223$L$key_rcon1b:
1224	DD	0x1b,0x1b,0x1b,0x1b
1225
1226	DB	65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
1227	DB	83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
1228	DB	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
1229	DB	115,108,46,111,114,103,62,0
1230ALIGN	64
1231section	.text
1232
1233EXTERN	__imp_RtlVirtualUnwind
1234
1235ALIGN	16
1236ctr_xts_se_handler:
1237	push	rsi
1238	push	rdi
1239	push	rbx
1240	push	rbp
1241	push	r12
1242	push	r13
1243	push	r14
1244	push	r15
1245	pushfq
1246	sub	rsp,64
1247
1248	mov	rax,QWORD[120+r8]
1249	mov	rbx,QWORD[248+r8]
1250
1251	mov	rsi,QWORD[8+r9]
1252	mov	r11,QWORD[56+r9]
1253
1254	mov	r10d,DWORD[r11]
1255	lea	r10,[r10*1+rsi]
1256	cmp	rbx,r10
1257	jb	NEAR $L$common_seh_tail
1258
1259	mov	rax,QWORD[152+r8]
1260
1261	mov	r10d,DWORD[4+r11]
1262	lea	r10,[r10*1+rsi]
1263	cmp	rbx,r10
1264	jae	NEAR $L$common_seh_tail
1265
1266	mov	rax,QWORD[208+r8]
1267
1268	lea	rsi,[((-168))+rax]
1269	lea	rdi,[512+r8]
1270	mov	ecx,20
1271	DD	0xa548f3fc
1272
1273	mov	rbp,QWORD[((-8))+rax]
1274	mov	QWORD[160+r8],rbp
1275
1276
1277$L$common_seh_tail:
1278	mov	rdi,QWORD[8+rax]
1279	mov	rsi,QWORD[16+rax]
1280	mov	QWORD[152+r8],rax
1281	mov	QWORD[168+r8],rsi
1282	mov	QWORD[176+r8],rdi
1283
1284	mov	rdi,QWORD[40+r9]
1285	mov	rsi,r8
1286	mov	ecx,154
1287	DD	0xa548f3fc
1288
1289	mov	rsi,r9
1290	xor	rcx,rcx
1291	mov	rdx,QWORD[8+rsi]
1292	mov	r8,QWORD[rsi]
1293	mov	r9,QWORD[16+rsi]
1294	mov	r10,QWORD[40+rsi]
1295	lea	r11,[56+rsi]
1296	lea	r12,[24+rsi]
1297	mov	QWORD[32+rsp],r10
1298	mov	QWORD[40+rsp],r11
1299	mov	QWORD[48+rsp],r12
1300	mov	QWORD[56+rsp],rcx
1301	call	QWORD[__imp_RtlVirtualUnwind]
1302
1303	mov	eax,1
1304	add	rsp,64
1305	popfq
1306	pop	r15
1307	pop	r14
1308	pop	r13
1309	pop	r12
1310	pop	rbp
1311	pop	rbx
1312	pop	rdi
1313	pop	rsi
1314	ret
1315
1316
1317section	.pdata rdata align=4
1318ALIGN	4
1319	DD	$L$SEH_begin_aes_hw_ctr32_encrypt_blocks wrt ..imagebase
1320	DD	$L$SEH_end_aes_hw_ctr32_encrypt_blocks wrt ..imagebase
1321	DD	$L$SEH_info_ctr32 wrt ..imagebase
1322	DD	aes_hw_set_encrypt_key wrt ..imagebase
1323	DD	$L$SEH_end_set_encrypt_key wrt ..imagebase
1324	DD	$L$SEH_info_key wrt ..imagebase
1325section	.xdata rdata align=8
1326ALIGN	8
1327$L$SEH_info_ctr32:
1328	DB	9,0,0,0
1329	DD	ctr_xts_se_handler wrt ..imagebase
1330	DD	$L$ctr32_body wrt ..imagebase,$L$ctr32_epilogue wrt ..imagebase
1331$L$SEH_info_key:
1332	DB	0x01,0x04,0x01,0x00
1333	DB	0x04,0x02,0x00,0x00
1334%else
1335; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
1336ret
1337%endif
1338