xref: /aosp_15_r20/external/boringssl/src/gen/bcm/aesni-gcm-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
18ALIGN	32
19_aesni_ctr32_ghash_6x:
20
21	vmovdqu	xmm2,XMMWORD[32+r11]
22	sub	r8,6
23	vpxor	xmm4,xmm4,xmm4
24	vmovdqu	xmm15,XMMWORD[((0-128))+r9]
25	vpaddb	xmm10,xmm1,xmm2
26	vpaddb	xmm11,xmm10,xmm2
27	vpaddb	xmm12,xmm11,xmm2
28	vpaddb	xmm13,xmm12,xmm2
29	vpaddb	xmm14,xmm13,xmm2
30	vpxor	xmm9,xmm1,xmm15
31	vmovdqu	XMMWORD[(16+8)+rsp],xmm4
32	jmp	NEAR $L$oop6x
33
34ALIGN	32
35$L$oop6x:
36	add	ebx,100663296
37	jc	NEAR $L$handle_ctr32
38	vmovdqu	xmm3,XMMWORD[((0-32))+rsi]
39	vpaddb	xmm1,xmm14,xmm2
40	vpxor	xmm10,xmm10,xmm15
41	vpxor	xmm11,xmm11,xmm15
42
43$L$resume_ctr32:
44	vmovdqu	XMMWORD[rdi],xmm1
45	vpclmulqdq	xmm5,xmm7,xmm3,0x10
46	vpxor	xmm12,xmm12,xmm15
47	vmovups	xmm2,XMMWORD[((16-128))+r9]
48	vpclmulqdq	xmm6,xmm7,xmm3,0x01
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66	xor	r12,r12
67	cmp	r15,r14
68
69	vaesenc	xmm9,xmm9,xmm2
70	vmovdqu	xmm0,XMMWORD[((48+8))+rsp]
71	vpxor	xmm13,xmm13,xmm15
72	vpclmulqdq	xmm1,xmm7,xmm3,0x00
73	vaesenc	xmm10,xmm10,xmm2
74	vpxor	xmm14,xmm14,xmm15
75	setnc	r12b
76	vpclmulqdq	xmm7,xmm7,xmm3,0x11
77	vaesenc	xmm11,xmm11,xmm2
78	vmovdqu	xmm3,XMMWORD[((16-32))+rsi]
79	neg	r12
80	vaesenc	xmm12,xmm12,xmm2
81	vpxor	xmm6,xmm6,xmm5
82	vpclmulqdq	xmm5,xmm0,xmm3,0x00
83	vpxor	xmm8,xmm8,xmm4
84	vaesenc	xmm13,xmm13,xmm2
85	vpxor	xmm4,xmm1,xmm5
86	and	r12,0x60
87	vmovups	xmm15,XMMWORD[((32-128))+r9]
88	vpclmulqdq	xmm1,xmm0,xmm3,0x10
89	vaesenc	xmm14,xmm14,xmm2
90
91	vpclmulqdq	xmm2,xmm0,xmm3,0x01
92	lea	r14,[r12*1+r14]
93	vaesenc	xmm9,xmm9,xmm15
94	vpxor	xmm8,xmm8,XMMWORD[((16+8))+rsp]
95	vpclmulqdq	xmm3,xmm0,xmm3,0x11
96	vmovdqu	xmm0,XMMWORD[((64+8))+rsp]
97	vaesenc	xmm10,xmm10,xmm15
98	movbe	r13,QWORD[88+r14]
99	vaesenc	xmm11,xmm11,xmm15
100	movbe	r12,QWORD[80+r14]
101	vaesenc	xmm12,xmm12,xmm15
102	mov	QWORD[((32+8))+rsp],r13
103	vaesenc	xmm13,xmm13,xmm15
104	mov	QWORD[((40+8))+rsp],r12
105	vmovdqu	xmm5,XMMWORD[((48-32))+rsi]
106	vaesenc	xmm14,xmm14,xmm15
107
108	vmovups	xmm15,XMMWORD[((48-128))+r9]
109	vpxor	xmm6,xmm6,xmm1
110	vpclmulqdq	xmm1,xmm0,xmm5,0x00
111	vaesenc	xmm9,xmm9,xmm15
112	vpxor	xmm6,xmm6,xmm2
113	vpclmulqdq	xmm2,xmm0,xmm5,0x10
114	vaesenc	xmm10,xmm10,xmm15
115	vpxor	xmm7,xmm7,xmm3
116	vpclmulqdq	xmm3,xmm0,xmm5,0x01
117	vaesenc	xmm11,xmm11,xmm15
118	vpclmulqdq	xmm5,xmm0,xmm5,0x11
119	vmovdqu	xmm0,XMMWORD[((80+8))+rsp]
120	vaesenc	xmm12,xmm12,xmm15
121	vaesenc	xmm13,xmm13,xmm15
122	vpxor	xmm4,xmm4,xmm1
123	vmovdqu	xmm1,XMMWORD[((64-32))+rsi]
124	vaesenc	xmm14,xmm14,xmm15
125
126	vmovups	xmm15,XMMWORD[((64-128))+r9]
127	vpxor	xmm6,xmm6,xmm2
128	vpclmulqdq	xmm2,xmm0,xmm1,0x00
129	vaesenc	xmm9,xmm9,xmm15
130	vpxor	xmm6,xmm6,xmm3
131	vpclmulqdq	xmm3,xmm0,xmm1,0x10
132	vaesenc	xmm10,xmm10,xmm15
133	movbe	r13,QWORD[72+r14]
134	vpxor	xmm7,xmm7,xmm5
135	vpclmulqdq	xmm5,xmm0,xmm1,0x01
136	vaesenc	xmm11,xmm11,xmm15
137	movbe	r12,QWORD[64+r14]
138	vpclmulqdq	xmm1,xmm0,xmm1,0x11
139	vmovdqu	xmm0,XMMWORD[((96+8))+rsp]
140	vaesenc	xmm12,xmm12,xmm15
141	mov	QWORD[((48+8))+rsp],r13
142	vaesenc	xmm13,xmm13,xmm15
143	mov	QWORD[((56+8))+rsp],r12
144	vpxor	xmm4,xmm4,xmm2
145	vmovdqu	xmm2,XMMWORD[((96-32))+rsi]
146	vaesenc	xmm14,xmm14,xmm15
147
148	vmovups	xmm15,XMMWORD[((80-128))+r9]
149	vpxor	xmm6,xmm6,xmm3
150	vpclmulqdq	xmm3,xmm0,xmm2,0x00
151	vaesenc	xmm9,xmm9,xmm15
152	vpxor	xmm6,xmm6,xmm5
153	vpclmulqdq	xmm5,xmm0,xmm2,0x10
154	vaesenc	xmm10,xmm10,xmm15
155	movbe	r13,QWORD[56+r14]
156	vpxor	xmm7,xmm7,xmm1
157	vpclmulqdq	xmm1,xmm0,xmm2,0x01
158	vpxor	xmm8,xmm8,XMMWORD[((112+8))+rsp]
159	vaesenc	xmm11,xmm11,xmm15
160	movbe	r12,QWORD[48+r14]
161	vpclmulqdq	xmm2,xmm0,xmm2,0x11
162	vaesenc	xmm12,xmm12,xmm15
163	mov	QWORD[((64+8))+rsp],r13
164	vaesenc	xmm13,xmm13,xmm15
165	mov	QWORD[((72+8))+rsp],r12
166	vpxor	xmm4,xmm4,xmm3
167	vmovdqu	xmm3,XMMWORD[((112-32))+rsi]
168	vaesenc	xmm14,xmm14,xmm15
169
170	vmovups	xmm15,XMMWORD[((96-128))+r9]
171	vpxor	xmm6,xmm6,xmm5
172	vpclmulqdq	xmm5,xmm8,xmm3,0x10
173	vaesenc	xmm9,xmm9,xmm15
174	vpxor	xmm6,xmm6,xmm1
175	vpclmulqdq	xmm1,xmm8,xmm3,0x01
176	vaesenc	xmm10,xmm10,xmm15
177	movbe	r13,QWORD[40+r14]
178	vpxor	xmm7,xmm7,xmm2
179	vpclmulqdq	xmm2,xmm8,xmm3,0x00
180	vaesenc	xmm11,xmm11,xmm15
181	movbe	r12,QWORD[32+r14]
182	vpclmulqdq	xmm8,xmm8,xmm3,0x11
183	vaesenc	xmm12,xmm12,xmm15
184	mov	QWORD[((80+8))+rsp],r13
185	vaesenc	xmm13,xmm13,xmm15
186	mov	QWORD[((88+8))+rsp],r12
187	vpxor	xmm6,xmm6,xmm5
188	vaesenc	xmm14,xmm14,xmm15
189	vpxor	xmm6,xmm6,xmm1
190
191	vmovups	xmm15,XMMWORD[((112-128))+r9]
192	vpslldq	xmm5,xmm6,8
193	vpxor	xmm4,xmm4,xmm2
194	vmovdqu	xmm3,XMMWORD[16+r11]
195
196	vaesenc	xmm9,xmm9,xmm15
197	vpxor	xmm7,xmm7,xmm8
198	vaesenc	xmm10,xmm10,xmm15
199	vpxor	xmm4,xmm4,xmm5
200	movbe	r13,QWORD[24+r14]
201	vaesenc	xmm11,xmm11,xmm15
202	movbe	r12,QWORD[16+r14]
203	vpalignr	xmm0,xmm4,xmm4,8
204	vpclmulqdq	xmm4,xmm4,xmm3,0x10
205	mov	QWORD[((96+8))+rsp],r13
206	vaesenc	xmm12,xmm12,xmm15
207	mov	QWORD[((104+8))+rsp],r12
208	vaesenc	xmm13,xmm13,xmm15
209	vmovups	xmm1,XMMWORD[((128-128))+r9]
210	vaesenc	xmm14,xmm14,xmm15
211
212	vaesenc	xmm9,xmm9,xmm1
213	vmovups	xmm15,XMMWORD[((144-128))+r9]
214	vaesenc	xmm10,xmm10,xmm1
215	vpsrldq	xmm6,xmm6,8
216	vaesenc	xmm11,xmm11,xmm1
217	vpxor	xmm7,xmm7,xmm6
218	vaesenc	xmm12,xmm12,xmm1
219	vpxor	xmm4,xmm4,xmm0
220	movbe	r13,QWORD[8+r14]
221	vaesenc	xmm13,xmm13,xmm1
222	movbe	r12,QWORD[r14]
223	vaesenc	xmm14,xmm14,xmm1
224	vmovups	xmm1,XMMWORD[((160-128))+r9]
225	cmp	r10d,11
226	jb	NEAR $L$enc_tail
227
228	vaesenc	xmm9,xmm9,xmm15
229	vaesenc	xmm10,xmm10,xmm15
230	vaesenc	xmm11,xmm11,xmm15
231	vaesenc	xmm12,xmm12,xmm15
232	vaesenc	xmm13,xmm13,xmm15
233	vaesenc	xmm14,xmm14,xmm15
234
235	vaesenc	xmm9,xmm9,xmm1
236	vaesenc	xmm10,xmm10,xmm1
237	vaesenc	xmm11,xmm11,xmm1
238	vaesenc	xmm12,xmm12,xmm1
239	vaesenc	xmm13,xmm13,xmm1
240	vmovups	xmm15,XMMWORD[((176-128))+r9]
241	vaesenc	xmm14,xmm14,xmm1
242	vmovups	xmm1,XMMWORD[((192-128))+r9]
243	je	NEAR $L$enc_tail
244
245	vaesenc	xmm9,xmm9,xmm15
246	vaesenc	xmm10,xmm10,xmm15
247	vaesenc	xmm11,xmm11,xmm15
248	vaesenc	xmm12,xmm12,xmm15
249	vaesenc	xmm13,xmm13,xmm15
250	vaesenc	xmm14,xmm14,xmm15
251
252	vaesenc	xmm9,xmm9,xmm1
253	vaesenc	xmm10,xmm10,xmm1
254	vaesenc	xmm11,xmm11,xmm1
255	vaesenc	xmm12,xmm12,xmm1
256	vaesenc	xmm13,xmm13,xmm1
257	vmovups	xmm15,XMMWORD[((208-128))+r9]
258	vaesenc	xmm14,xmm14,xmm1
259	vmovups	xmm1,XMMWORD[((224-128))+r9]
260	jmp	NEAR $L$enc_tail
261
262ALIGN	32
263$L$handle_ctr32:
264	vmovdqu	xmm0,XMMWORD[r11]
265	vpshufb	xmm6,xmm1,xmm0
266	vmovdqu	xmm5,XMMWORD[48+r11]
267	vpaddd	xmm10,xmm6,XMMWORD[64+r11]
268	vpaddd	xmm11,xmm6,xmm5
269	vmovdqu	xmm3,XMMWORD[((0-32))+rsi]
270	vpaddd	xmm12,xmm10,xmm5
271	vpshufb	xmm10,xmm10,xmm0
272	vpaddd	xmm13,xmm11,xmm5
273	vpshufb	xmm11,xmm11,xmm0
274	vpxor	xmm10,xmm10,xmm15
275	vpaddd	xmm14,xmm12,xmm5
276	vpshufb	xmm12,xmm12,xmm0
277	vpxor	xmm11,xmm11,xmm15
278	vpaddd	xmm1,xmm13,xmm5
279	vpshufb	xmm13,xmm13,xmm0
280	vpshufb	xmm14,xmm14,xmm0
281	vpshufb	xmm1,xmm1,xmm0
282	jmp	NEAR $L$resume_ctr32
283
284ALIGN	32
285$L$enc_tail:
286	vaesenc	xmm9,xmm9,xmm15
287	vmovdqu	XMMWORD[(16+8)+rsp],xmm7
288	vpalignr	xmm8,xmm4,xmm4,8
289	vaesenc	xmm10,xmm10,xmm15
290	vpclmulqdq	xmm4,xmm4,xmm3,0x10
291	vpxor	xmm2,xmm1,XMMWORD[rcx]
292	vaesenc	xmm11,xmm11,xmm15
293	vpxor	xmm0,xmm1,XMMWORD[16+rcx]
294	vaesenc	xmm12,xmm12,xmm15
295	vpxor	xmm5,xmm1,XMMWORD[32+rcx]
296	vaesenc	xmm13,xmm13,xmm15
297	vpxor	xmm6,xmm1,XMMWORD[48+rcx]
298	vaesenc	xmm14,xmm14,xmm15
299	vpxor	xmm7,xmm1,XMMWORD[64+rcx]
300	vpxor	xmm3,xmm1,XMMWORD[80+rcx]
301	vmovdqu	xmm1,XMMWORD[rdi]
302
303	vaesenclast	xmm9,xmm9,xmm2
304	vmovdqu	xmm2,XMMWORD[32+r11]
305	vaesenclast	xmm10,xmm10,xmm0
306	vpaddb	xmm0,xmm1,xmm2
307	mov	QWORD[((112+8))+rsp],r13
308	lea	rcx,[96+rcx]
309
310	prefetcht0	[512+rcx]
311	prefetcht0	[576+rcx]
312	vaesenclast	xmm11,xmm11,xmm5
313	vpaddb	xmm5,xmm0,xmm2
314	mov	QWORD[((120+8))+rsp],r12
315	lea	rdx,[96+rdx]
316	vmovdqu	xmm15,XMMWORD[((0-128))+r9]
317	vaesenclast	xmm12,xmm12,xmm6
318	vpaddb	xmm6,xmm5,xmm2
319	vaesenclast	xmm13,xmm13,xmm7
320	vpaddb	xmm7,xmm6,xmm2
321	vaesenclast	xmm14,xmm14,xmm3
322	vpaddb	xmm3,xmm7,xmm2
323
324	add	rax,0x60
325	sub	r8,0x6
326	jc	NEAR $L$6x_done
327
328	vmovups	XMMWORD[(-96)+rdx],xmm9
329	vpxor	xmm9,xmm1,xmm15
330	vmovups	XMMWORD[(-80)+rdx],xmm10
331	vmovdqa	xmm10,xmm0
332	vmovups	XMMWORD[(-64)+rdx],xmm11
333	vmovdqa	xmm11,xmm5
334	vmovups	XMMWORD[(-48)+rdx],xmm12
335	vmovdqa	xmm12,xmm6
336	vmovups	XMMWORD[(-32)+rdx],xmm13
337	vmovdqa	xmm13,xmm7
338	vmovups	XMMWORD[(-16)+rdx],xmm14
339	vmovdqa	xmm14,xmm3
340	vmovdqu	xmm7,XMMWORD[((32+8))+rsp]
341	jmp	NEAR $L$oop6x
342
343$L$6x_done:
344	vpxor	xmm8,xmm8,XMMWORD[((16+8))+rsp]
345	vpxor	xmm8,xmm8,xmm4
346
347	ret
348
349
350global	aesni_gcm_decrypt
351
352ALIGN	32
353aesni_gcm_decrypt:
354
355$L$SEH_begin_aesni_gcm_decrypt_1:
356_CET_ENDBR
357	xor	rax,rax
358
359
360
361	cmp	r8,0x60
362	jb	NEAR $L$gcm_dec_abort
363
364	push	rbp
365
366$L$SEH_prologue_aesni_gcm_decrypt_2:
367	mov	rbp,rsp
368
369	push	rbx
370
371$L$SEH_prologue_aesni_gcm_decrypt_3:
372	push	r12
373
374$L$SEH_prologue_aesni_gcm_decrypt_4:
375	push	r13
376
377$L$SEH_prologue_aesni_gcm_decrypt_5:
378	push	r14
379
380$L$SEH_prologue_aesni_gcm_decrypt_6:
381	push	r15
382
383$L$SEH_prologue_aesni_gcm_decrypt_7:
384	lea	rsp,[((-168))+rsp]
385$L$SEH_prologue_aesni_gcm_decrypt_8:
386$L$SEH_prologue_aesni_gcm_decrypt_9:
387
388
389
390	mov	QWORD[16+rbp],rdi
391$L$SEH_prologue_aesni_gcm_decrypt_10:
392	mov	QWORD[24+rbp],rsi
393$L$SEH_prologue_aesni_gcm_decrypt_11:
394	mov	rdi,QWORD[48+rbp]
395	mov	rsi,QWORD[56+rbp]
396
397	movaps	XMMWORD[(-208)+rbp],xmm6
398$L$SEH_prologue_aesni_gcm_decrypt_12:
399	movaps	XMMWORD[(-192)+rbp],xmm7
400$L$SEH_prologue_aesni_gcm_decrypt_13:
401	movaps	XMMWORD[(-176)+rbp],xmm8
402$L$SEH_prologue_aesni_gcm_decrypt_14:
403	movaps	XMMWORD[(-160)+rbp],xmm9
404$L$SEH_prologue_aesni_gcm_decrypt_15:
405	movaps	XMMWORD[(-144)+rbp],xmm10
406$L$SEH_prologue_aesni_gcm_decrypt_16:
407	movaps	XMMWORD[(-128)+rbp],xmm11
408$L$SEH_prologue_aesni_gcm_decrypt_17:
409	movaps	XMMWORD[(-112)+rbp],xmm12
410$L$SEH_prologue_aesni_gcm_decrypt_18:
411	movaps	XMMWORD[(-96)+rbp],xmm13
412$L$SEH_prologue_aesni_gcm_decrypt_19:
413	movaps	XMMWORD[(-80)+rbp],xmm14
414$L$SEH_prologue_aesni_gcm_decrypt_20:
415	movaps	XMMWORD[(-64)+rbp],xmm15
416$L$SEH_prologue_aesni_gcm_decrypt_21:
417$L$SEH_endprologue_aesni_gcm_decrypt_22:
418	vzeroupper
419
420	mov	r12,QWORD[64+rbp]
421	vmovdqu	xmm1,XMMWORD[rdi]
422	add	rsp,-128
423	mov	ebx,DWORD[12+rdi]
424	lea	r11,[$L$bswap_mask]
425	lea	r14,[((-128))+r9]
426	mov	r15,0xf80
427	vmovdqu	xmm8,XMMWORD[r12]
428	and	rsp,-128
429	vmovdqu	xmm0,XMMWORD[r11]
430	lea	r9,[128+r9]
431	lea	rsi,[32+rsi]
432	mov	r10d,DWORD[((240-128))+r9]
433	vpshufb	xmm8,xmm8,xmm0
434
435	and	r14,r15
436	and	r15,rsp
437	sub	r15,r14
438	jc	NEAR $L$dec_no_key_aliasing
439	cmp	r15,768
440	jnc	NEAR $L$dec_no_key_aliasing
441	sub	rsp,r15
442$L$dec_no_key_aliasing:
443
444	vmovdqu	xmm7,XMMWORD[80+rcx]
445	mov	r14,rcx
446	vmovdqu	xmm4,XMMWORD[64+rcx]
447
448
449
450
451
452
453
454	lea	r15,[((-192))+r8*1+rcx]
455
456	vmovdqu	xmm5,XMMWORD[48+rcx]
457	shr	r8,4
458	xor	rax,rax
459	vmovdqu	xmm6,XMMWORD[32+rcx]
460	vpshufb	xmm7,xmm7,xmm0
461	vmovdqu	xmm2,XMMWORD[16+rcx]
462	vpshufb	xmm4,xmm4,xmm0
463	vmovdqu	xmm3,XMMWORD[rcx]
464	vpshufb	xmm5,xmm5,xmm0
465	vmovdqu	XMMWORD[48+rsp],xmm4
466	vpshufb	xmm6,xmm6,xmm0
467	vmovdqu	XMMWORD[64+rsp],xmm5
468	vpshufb	xmm2,xmm2,xmm0
469	vmovdqu	XMMWORD[80+rsp],xmm6
470	vpshufb	xmm3,xmm3,xmm0
471	vmovdqu	XMMWORD[96+rsp],xmm2
472	vmovdqu	XMMWORD[112+rsp],xmm3
473
474	call	_aesni_ctr32_ghash_6x
475
476	mov	r12,QWORD[64+rbp]
477	vmovups	XMMWORD[(-96)+rdx],xmm9
478	vmovups	XMMWORD[(-80)+rdx],xmm10
479	vmovups	XMMWORD[(-64)+rdx],xmm11
480	vmovups	XMMWORD[(-48)+rdx],xmm12
481	vmovups	XMMWORD[(-32)+rdx],xmm13
482	vmovups	XMMWORD[(-16)+rdx],xmm14
483
484	vpshufb	xmm8,xmm8,XMMWORD[r11]
485	vmovdqu	XMMWORD[r12],xmm8
486
487	vzeroupper
488	movaps	xmm6,XMMWORD[((-208))+rbp]
489	movaps	xmm7,XMMWORD[((-192))+rbp]
490	movaps	xmm8,XMMWORD[((-176))+rbp]
491	movaps	xmm9,XMMWORD[((-160))+rbp]
492	movaps	xmm10,XMMWORD[((-144))+rbp]
493	movaps	xmm11,XMMWORD[((-128))+rbp]
494	movaps	xmm12,XMMWORD[((-112))+rbp]
495	movaps	xmm13,XMMWORD[((-96))+rbp]
496	movaps	xmm14,XMMWORD[((-80))+rbp]
497	movaps	xmm15,XMMWORD[((-64))+rbp]
498	mov	rdi,QWORD[16+rbp]
499	mov	rsi,QWORD[24+rbp]
500	lea	rsp,[((-40))+rbp]
501
502	pop	r15
503
504	pop	r14
505
506	pop	r13
507
508	pop	r12
509
510	pop	rbx
511
512	pop	rbp
513
514$L$gcm_dec_abort:
515	ret
516$L$SEH_end_aesni_gcm_decrypt_23:
517
518
519
520ALIGN	32
521_aesni_ctr32_6x:
522
523	vmovdqu	xmm4,XMMWORD[((0-128))+r9]
524	vmovdqu	xmm2,XMMWORD[32+r11]
525	lea	r13,[((-1))+r10]
526	vmovups	xmm15,XMMWORD[((16-128))+r9]
527	lea	r12,[((32-128))+r9]
528	vpxor	xmm9,xmm1,xmm4
529	add	ebx,100663296
530	jc	NEAR $L$handle_ctr32_2
531	vpaddb	xmm10,xmm1,xmm2
532	vpaddb	xmm11,xmm10,xmm2
533	vpxor	xmm10,xmm10,xmm4
534	vpaddb	xmm12,xmm11,xmm2
535	vpxor	xmm11,xmm11,xmm4
536	vpaddb	xmm13,xmm12,xmm2
537	vpxor	xmm12,xmm12,xmm4
538	vpaddb	xmm14,xmm13,xmm2
539	vpxor	xmm13,xmm13,xmm4
540	vpaddb	xmm1,xmm14,xmm2
541	vpxor	xmm14,xmm14,xmm4
542	jmp	NEAR $L$oop_ctr32
543
544ALIGN	16
545$L$oop_ctr32:
546	vaesenc	xmm9,xmm9,xmm15
547	vaesenc	xmm10,xmm10,xmm15
548	vaesenc	xmm11,xmm11,xmm15
549	vaesenc	xmm12,xmm12,xmm15
550	vaesenc	xmm13,xmm13,xmm15
551	vaesenc	xmm14,xmm14,xmm15
552	vmovups	xmm15,XMMWORD[r12]
553	lea	r12,[16+r12]
554	dec	r13d
555	jnz	NEAR $L$oop_ctr32
556
557	vmovdqu	xmm3,XMMWORD[r12]
558	vaesenc	xmm9,xmm9,xmm15
559	vpxor	xmm4,xmm3,XMMWORD[rcx]
560	vaesenc	xmm10,xmm10,xmm15
561	vpxor	xmm5,xmm3,XMMWORD[16+rcx]
562	vaesenc	xmm11,xmm11,xmm15
563	vpxor	xmm6,xmm3,XMMWORD[32+rcx]
564	vaesenc	xmm12,xmm12,xmm15
565	vpxor	xmm8,xmm3,XMMWORD[48+rcx]
566	vaesenc	xmm13,xmm13,xmm15
567	vpxor	xmm2,xmm3,XMMWORD[64+rcx]
568	vaesenc	xmm14,xmm14,xmm15
569	vpxor	xmm3,xmm3,XMMWORD[80+rcx]
570	lea	rcx,[96+rcx]
571
572	vaesenclast	xmm9,xmm9,xmm4
573	vaesenclast	xmm10,xmm10,xmm5
574	vaesenclast	xmm11,xmm11,xmm6
575	vaesenclast	xmm12,xmm12,xmm8
576	vaesenclast	xmm13,xmm13,xmm2
577	vaesenclast	xmm14,xmm14,xmm3
578	vmovups	XMMWORD[rdx],xmm9
579	vmovups	XMMWORD[16+rdx],xmm10
580	vmovups	XMMWORD[32+rdx],xmm11
581	vmovups	XMMWORD[48+rdx],xmm12
582	vmovups	XMMWORD[64+rdx],xmm13
583	vmovups	XMMWORD[80+rdx],xmm14
584	lea	rdx,[96+rdx]
585
586	ret
587ALIGN	32
588$L$handle_ctr32_2:
589	vpshufb	xmm6,xmm1,xmm0
590	vmovdqu	xmm5,XMMWORD[48+r11]
591	vpaddd	xmm10,xmm6,XMMWORD[64+r11]
592	vpaddd	xmm11,xmm6,xmm5
593	vpaddd	xmm12,xmm10,xmm5
594	vpshufb	xmm10,xmm10,xmm0
595	vpaddd	xmm13,xmm11,xmm5
596	vpshufb	xmm11,xmm11,xmm0
597	vpxor	xmm10,xmm10,xmm4
598	vpaddd	xmm14,xmm12,xmm5
599	vpshufb	xmm12,xmm12,xmm0
600	vpxor	xmm11,xmm11,xmm4
601	vpaddd	xmm1,xmm13,xmm5
602	vpshufb	xmm13,xmm13,xmm0
603	vpxor	xmm12,xmm12,xmm4
604	vpshufb	xmm14,xmm14,xmm0
605	vpxor	xmm13,xmm13,xmm4
606	vpshufb	xmm1,xmm1,xmm0
607	vpxor	xmm14,xmm14,xmm4
608	jmp	NEAR $L$oop_ctr32
609
610
611
612global	aesni_gcm_encrypt
613
614ALIGN	32
615aesni_gcm_encrypt:
616
617$L$SEH_begin_aesni_gcm_encrypt_1:
618_CET_ENDBR
619%ifdef BORINGSSL_DISPATCH_TEST
620EXTERN	BORINGSSL_function_hit
621	mov	BYTE[((BORINGSSL_function_hit+2))],1
622%endif
623	xor	rax,rax
624
625
626
627
628	cmp	r8,0x60*3
629	jb	NEAR $L$gcm_enc_abort
630
631	push	rbp
632
633$L$SEH_prologue_aesni_gcm_encrypt_2:
634	mov	rbp,rsp
635
636	push	rbx
637
638$L$SEH_prologue_aesni_gcm_encrypt_3:
639	push	r12
640
641$L$SEH_prologue_aesni_gcm_encrypt_4:
642	push	r13
643
644$L$SEH_prologue_aesni_gcm_encrypt_5:
645	push	r14
646
647$L$SEH_prologue_aesni_gcm_encrypt_6:
648	push	r15
649
650$L$SEH_prologue_aesni_gcm_encrypt_7:
651	lea	rsp,[((-168))+rsp]
652$L$SEH_prologue_aesni_gcm_encrypt_8:
653$L$SEH_prologue_aesni_gcm_encrypt_9:
654
655
656
657	mov	QWORD[16+rbp],rdi
658$L$SEH_prologue_aesni_gcm_encrypt_10:
659	mov	QWORD[24+rbp],rsi
660$L$SEH_prologue_aesni_gcm_encrypt_11:
661	mov	rdi,QWORD[48+rbp]
662	mov	rsi,QWORD[56+rbp]
663
664	movaps	XMMWORD[(-208)+rbp],xmm6
665$L$SEH_prologue_aesni_gcm_encrypt_12:
666	movaps	XMMWORD[(-192)+rbp],xmm7
667$L$SEH_prologue_aesni_gcm_encrypt_13:
668	movaps	XMMWORD[(-176)+rbp],xmm8
669$L$SEH_prologue_aesni_gcm_encrypt_14:
670	movaps	XMMWORD[(-160)+rbp],xmm9
671$L$SEH_prologue_aesni_gcm_encrypt_15:
672	movaps	XMMWORD[(-144)+rbp],xmm10
673$L$SEH_prologue_aesni_gcm_encrypt_16:
674	movaps	XMMWORD[(-128)+rbp],xmm11
675$L$SEH_prologue_aesni_gcm_encrypt_17:
676	movaps	XMMWORD[(-112)+rbp],xmm12
677$L$SEH_prologue_aesni_gcm_encrypt_18:
678	movaps	XMMWORD[(-96)+rbp],xmm13
679$L$SEH_prologue_aesni_gcm_encrypt_19:
680	movaps	XMMWORD[(-80)+rbp],xmm14
681$L$SEH_prologue_aesni_gcm_encrypt_20:
682	movaps	XMMWORD[(-64)+rbp],xmm15
683$L$SEH_prologue_aesni_gcm_encrypt_21:
684$L$SEH_endprologue_aesni_gcm_encrypt_22:
685	vzeroupper
686
687	vmovdqu	xmm1,XMMWORD[rdi]
688	add	rsp,-128
689	mov	ebx,DWORD[12+rdi]
690	lea	r11,[$L$bswap_mask]
691	lea	r14,[((-128))+r9]
692	mov	r15,0xf80
693	lea	r9,[128+r9]
694	vmovdqu	xmm0,XMMWORD[r11]
695	and	rsp,-128
696	mov	r10d,DWORD[((240-128))+r9]
697
698	and	r14,r15
699	and	r15,rsp
700	sub	r15,r14
701	jc	NEAR $L$enc_no_key_aliasing
702	cmp	r15,768
703	jnc	NEAR $L$enc_no_key_aliasing
704	sub	rsp,r15
705$L$enc_no_key_aliasing:
706
707	mov	r14,rdx
708
709
710
711
712
713
714
715
716	lea	r15,[((-192))+r8*1+rdx]
717
718	shr	r8,4
719
720	call	_aesni_ctr32_6x
721	vpshufb	xmm8,xmm9,xmm0
722	vpshufb	xmm2,xmm10,xmm0
723	vmovdqu	XMMWORD[112+rsp],xmm8
724	vpshufb	xmm4,xmm11,xmm0
725	vmovdqu	XMMWORD[96+rsp],xmm2
726	vpshufb	xmm5,xmm12,xmm0
727	vmovdqu	XMMWORD[80+rsp],xmm4
728	vpshufb	xmm6,xmm13,xmm0
729	vmovdqu	XMMWORD[64+rsp],xmm5
730	vpshufb	xmm7,xmm14,xmm0
731	vmovdqu	XMMWORD[48+rsp],xmm6
732
733	call	_aesni_ctr32_6x
734
735	mov	r12,QWORD[64+rbp]
736	lea	rsi,[32+rsi]
737	vmovdqu	xmm8,XMMWORD[r12]
738	sub	r8,12
739	mov	rax,0x60*2
740	vpshufb	xmm8,xmm8,xmm0
741
742	call	_aesni_ctr32_ghash_6x
743	vmovdqu	xmm7,XMMWORD[32+rsp]
744	vmovdqu	xmm0,XMMWORD[r11]
745	vmovdqu	xmm3,XMMWORD[((0-32))+rsi]
746	vpunpckhqdq	xmm1,xmm7,xmm7
747	vmovdqu	xmm15,XMMWORD[((32-32))+rsi]
748	vmovups	XMMWORD[(-96)+rdx],xmm9
749	vpshufb	xmm9,xmm9,xmm0
750	vpxor	xmm1,xmm1,xmm7
751	vmovups	XMMWORD[(-80)+rdx],xmm10
752	vpshufb	xmm10,xmm10,xmm0
753	vmovups	XMMWORD[(-64)+rdx],xmm11
754	vpshufb	xmm11,xmm11,xmm0
755	vmovups	XMMWORD[(-48)+rdx],xmm12
756	vpshufb	xmm12,xmm12,xmm0
757	vmovups	XMMWORD[(-32)+rdx],xmm13
758	vpshufb	xmm13,xmm13,xmm0
759	vmovups	XMMWORD[(-16)+rdx],xmm14
760	vpshufb	xmm14,xmm14,xmm0
761	vmovdqu	XMMWORD[16+rsp],xmm9
762	vmovdqu	xmm6,XMMWORD[48+rsp]
763	vmovdqu	xmm0,XMMWORD[((16-32))+rsi]
764	vpunpckhqdq	xmm2,xmm6,xmm6
765	vpclmulqdq	xmm5,xmm7,xmm3,0x00
766	vpxor	xmm2,xmm2,xmm6
767	vpclmulqdq	xmm7,xmm7,xmm3,0x11
768	vpclmulqdq	xmm1,xmm1,xmm15,0x00
769
770	vmovdqu	xmm9,XMMWORD[64+rsp]
771	vpclmulqdq	xmm4,xmm6,xmm0,0x00
772	vmovdqu	xmm3,XMMWORD[((48-32))+rsi]
773	vpxor	xmm4,xmm4,xmm5
774	vpunpckhqdq	xmm5,xmm9,xmm9
775	vpclmulqdq	xmm6,xmm6,xmm0,0x11
776	vpxor	xmm5,xmm5,xmm9
777	vpxor	xmm6,xmm6,xmm7
778	vpclmulqdq	xmm2,xmm2,xmm15,0x10
779	vmovdqu	xmm15,XMMWORD[((80-32))+rsi]
780	vpxor	xmm2,xmm2,xmm1
781
782	vmovdqu	xmm1,XMMWORD[80+rsp]
783	vpclmulqdq	xmm7,xmm9,xmm3,0x00
784	vmovdqu	xmm0,XMMWORD[((64-32))+rsi]
785	vpxor	xmm7,xmm7,xmm4
786	vpunpckhqdq	xmm4,xmm1,xmm1
787	vpclmulqdq	xmm9,xmm9,xmm3,0x11
788	vpxor	xmm4,xmm4,xmm1
789	vpxor	xmm9,xmm9,xmm6
790	vpclmulqdq	xmm5,xmm5,xmm15,0x00
791	vpxor	xmm5,xmm5,xmm2
792
793	vmovdqu	xmm2,XMMWORD[96+rsp]
794	vpclmulqdq	xmm6,xmm1,xmm0,0x00
795	vmovdqu	xmm3,XMMWORD[((96-32))+rsi]
796	vpxor	xmm6,xmm6,xmm7
797	vpunpckhqdq	xmm7,xmm2,xmm2
798	vpclmulqdq	xmm1,xmm1,xmm0,0x11
799	vpxor	xmm7,xmm7,xmm2
800	vpxor	xmm1,xmm1,xmm9
801	vpclmulqdq	xmm4,xmm4,xmm15,0x10
802	vmovdqu	xmm15,XMMWORD[((128-32))+rsi]
803	vpxor	xmm4,xmm4,xmm5
804
805	vpxor	xmm8,xmm8,XMMWORD[112+rsp]
806	vpclmulqdq	xmm5,xmm2,xmm3,0x00
807	vmovdqu	xmm0,XMMWORD[((112-32))+rsi]
808	vpunpckhqdq	xmm9,xmm8,xmm8
809	vpxor	xmm5,xmm5,xmm6
810	vpclmulqdq	xmm2,xmm2,xmm3,0x11
811	vpxor	xmm9,xmm9,xmm8
812	vpxor	xmm2,xmm2,xmm1
813	vpclmulqdq	xmm7,xmm7,xmm15,0x00
814	vpxor	xmm4,xmm7,xmm4
815
816	vpclmulqdq	xmm6,xmm8,xmm0,0x00
817	vmovdqu	xmm3,XMMWORD[((0-32))+rsi]
818	vpunpckhqdq	xmm1,xmm14,xmm14
819	vpclmulqdq	xmm8,xmm8,xmm0,0x11
820	vpxor	xmm1,xmm1,xmm14
821	vpxor	xmm5,xmm6,xmm5
822	vpclmulqdq	xmm9,xmm9,xmm15,0x10
823	vmovdqu	xmm15,XMMWORD[((32-32))+rsi]
824	vpxor	xmm7,xmm8,xmm2
825	vpxor	xmm6,xmm9,xmm4
826
827	vmovdqu	xmm0,XMMWORD[((16-32))+rsi]
828	vpxor	xmm9,xmm7,xmm5
829	vpclmulqdq	xmm4,xmm14,xmm3,0x00
830	vpxor	xmm6,xmm6,xmm9
831	vpunpckhqdq	xmm2,xmm13,xmm13
832	vpclmulqdq	xmm14,xmm14,xmm3,0x11
833	vpxor	xmm2,xmm2,xmm13
834	vpslldq	xmm9,xmm6,8
835	vpclmulqdq	xmm1,xmm1,xmm15,0x00
836	vpxor	xmm8,xmm5,xmm9
837	vpsrldq	xmm6,xmm6,8
838	vpxor	xmm7,xmm7,xmm6
839
840	vpclmulqdq	xmm5,xmm13,xmm0,0x00
841	vmovdqu	xmm3,XMMWORD[((48-32))+rsi]
842	vpxor	xmm5,xmm5,xmm4
843	vpunpckhqdq	xmm9,xmm12,xmm12
844	vpclmulqdq	xmm13,xmm13,xmm0,0x11
845	vpxor	xmm9,xmm9,xmm12
846	vpxor	xmm13,xmm13,xmm14
847	vpalignr	xmm14,xmm8,xmm8,8
848	vpclmulqdq	xmm2,xmm2,xmm15,0x10
849	vmovdqu	xmm15,XMMWORD[((80-32))+rsi]
850	vpxor	xmm2,xmm2,xmm1
851
852	vpclmulqdq	xmm4,xmm12,xmm3,0x00
853	vmovdqu	xmm0,XMMWORD[((64-32))+rsi]
854	vpxor	xmm4,xmm4,xmm5
855	vpunpckhqdq	xmm1,xmm11,xmm11
856	vpclmulqdq	xmm12,xmm12,xmm3,0x11
857	vpxor	xmm1,xmm1,xmm11
858	vpxor	xmm12,xmm12,xmm13
859	vxorps	xmm7,xmm7,XMMWORD[16+rsp]
860	vpclmulqdq	xmm9,xmm9,xmm15,0x00
861	vpxor	xmm9,xmm9,xmm2
862
863	vpclmulqdq	xmm8,xmm8,XMMWORD[16+r11],0x10
864	vxorps	xmm8,xmm8,xmm14
865
866	vpclmulqdq	xmm5,xmm11,xmm0,0x00
867	vmovdqu	xmm3,XMMWORD[((96-32))+rsi]
868	vpxor	xmm5,xmm5,xmm4
869	vpunpckhqdq	xmm2,xmm10,xmm10
870	vpclmulqdq	xmm11,xmm11,xmm0,0x11
871	vpxor	xmm2,xmm2,xmm10
872	vpalignr	xmm14,xmm8,xmm8,8
873	vpxor	xmm11,xmm11,xmm12
874	vpclmulqdq	xmm1,xmm1,xmm15,0x10
875	vmovdqu	xmm15,XMMWORD[((128-32))+rsi]
876	vpxor	xmm1,xmm1,xmm9
877
878	vxorps	xmm14,xmm14,xmm7
879	vpclmulqdq	xmm8,xmm8,XMMWORD[16+r11],0x10
880	vxorps	xmm8,xmm8,xmm14
881
882	vpclmulqdq	xmm4,xmm10,xmm3,0x00
883	vmovdqu	xmm0,XMMWORD[((112-32))+rsi]
884	vpxor	xmm4,xmm4,xmm5
885	vpunpckhqdq	xmm9,xmm8,xmm8
886	vpclmulqdq	xmm10,xmm10,xmm3,0x11
887	vpxor	xmm9,xmm9,xmm8
888	vpxor	xmm10,xmm10,xmm11
889	vpclmulqdq	xmm2,xmm2,xmm15,0x00
890	vpxor	xmm2,xmm2,xmm1
891
892	vpclmulqdq	xmm5,xmm8,xmm0,0x00
893	vpclmulqdq	xmm7,xmm8,xmm0,0x11
894	vpxor	xmm5,xmm5,xmm4
895	vpclmulqdq	xmm6,xmm9,xmm15,0x10
896	vpxor	xmm7,xmm7,xmm10
897	vpxor	xmm6,xmm6,xmm2
898
899	vpxor	xmm4,xmm7,xmm5
900	vpxor	xmm6,xmm6,xmm4
901	vpslldq	xmm1,xmm6,8
902	vmovdqu	xmm3,XMMWORD[16+r11]
903	vpsrldq	xmm6,xmm6,8
904	vpxor	xmm8,xmm5,xmm1
905	vpxor	xmm7,xmm7,xmm6
906
907	vpalignr	xmm2,xmm8,xmm8,8
908	vpclmulqdq	xmm8,xmm8,xmm3,0x10
909	vpxor	xmm8,xmm8,xmm2
910
911	vpalignr	xmm2,xmm8,xmm8,8
912	vpclmulqdq	xmm8,xmm8,xmm3,0x10
913	vpxor	xmm2,xmm2,xmm7
914	vpxor	xmm8,xmm8,xmm2
915	mov	r12,QWORD[64+rbp]
916	vpshufb	xmm8,xmm8,XMMWORD[r11]
917	vmovdqu	XMMWORD[r12],xmm8
918
919	vzeroupper
920	movaps	xmm6,XMMWORD[((-208))+rbp]
921	movaps	xmm7,XMMWORD[((-192))+rbp]
922	movaps	xmm8,XMMWORD[((-176))+rbp]
923	movaps	xmm9,XMMWORD[((-160))+rbp]
924	movaps	xmm10,XMMWORD[((-144))+rbp]
925	movaps	xmm11,XMMWORD[((-128))+rbp]
926	movaps	xmm12,XMMWORD[((-112))+rbp]
927	movaps	xmm13,XMMWORD[((-96))+rbp]
928	movaps	xmm14,XMMWORD[((-80))+rbp]
929	movaps	xmm15,XMMWORD[((-64))+rbp]
930	mov	rdi,QWORD[16+rbp]
931	mov	rsi,QWORD[24+rbp]
932	lea	rsp,[((-40))+rbp]
933
934	pop	r15
935
936	pop	r14
937
938	pop	r13
939
940	pop	r12
941
942	pop	rbx
943
944	pop	rbp
945
946$L$gcm_enc_abort:
947	ret
948$L$SEH_end_aesni_gcm_encrypt_23:
949
950
951section	.rdata rdata align=8
952ALIGN	64
953$L$bswap_mask:
954	DB	15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
955$L$poly:
956	DB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2
957$L$one_msb:
958	DB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
959$L$two_lsb:
960	DB	2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
961$L$one_lsb:
962	DB	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
963	DB	65,69,83,45,78,73,32,71,67,77,32,109,111,100,117,108
964	DB	101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82
965	DB	89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112
966	DB	114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
967ALIGN	64
968section	.text
969
970section	.pdata rdata align=4
971ALIGN	4
972	DD	$L$SEH_begin_aesni_gcm_decrypt_1 wrt ..imagebase
973	DD	$L$SEH_end_aesni_gcm_decrypt_23 wrt ..imagebase
974	DD	$L$SEH_info_aesni_gcm_decrypt_0 wrt ..imagebase
975
976	DD	$L$SEH_begin_aesni_gcm_encrypt_1 wrt ..imagebase
977	DD	$L$SEH_end_aesni_gcm_encrypt_23 wrt ..imagebase
978	DD	$L$SEH_info_aesni_gcm_encrypt_0 wrt ..imagebase
979
980
981section	.xdata rdata align=8
982ALIGN	4
983$L$SEH_info_aesni_gcm_decrypt_0:
984	DB	1
985	DB	$L$SEH_endprologue_aesni_gcm_decrypt_22-$L$SEH_begin_aesni_gcm_decrypt_1
986	DB	33
987	DB	213
988	DB	$L$SEH_prologue_aesni_gcm_decrypt_21-$L$SEH_begin_aesni_gcm_decrypt_1
989	DB	248
990	DW	9
991	DB	$L$SEH_prologue_aesni_gcm_decrypt_20-$L$SEH_begin_aesni_gcm_decrypt_1
992	DB	232
993	DW	8
994	DB	$L$SEH_prologue_aesni_gcm_decrypt_19-$L$SEH_begin_aesni_gcm_decrypt_1
995	DB	216
996	DW	7
997	DB	$L$SEH_prologue_aesni_gcm_decrypt_18-$L$SEH_begin_aesni_gcm_decrypt_1
998	DB	200
999	DW	6
1000	DB	$L$SEH_prologue_aesni_gcm_decrypt_17-$L$SEH_begin_aesni_gcm_decrypt_1
1001	DB	184
1002	DW	5
1003	DB	$L$SEH_prologue_aesni_gcm_decrypt_16-$L$SEH_begin_aesni_gcm_decrypt_1
1004	DB	168
1005	DW	4
1006	DB	$L$SEH_prologue_aesni_gcm_decrypt_15-$L$SEH_begin_aesni_gcm_decrypt_1
1007	DB	152
1008	DW	3
1009	DB	$L$SEH_prologue_aesni_gcm_decrypt_14-$L$SEH_begin_aesni_gcm_decrypt_1
1010	DB	136
1011	DW	2
1012	DB	$L$SEH_prologue_aesni_gcm_decrypt_13-$L$SEH_begin_aesni_gcm_decrypt_1
1013	DB	120
1014	DW	1
1015	DB	$L$SEH_prologue_aesni_gcm_decrypt_12-$L$SEH_begin_aesni_gcm_decrypt_1
1016	DB	104
1017	DW	0
1018	DB	$L$SEH_prologue_aesni_gcm_decrypt_11-$L$SEH_begin_aesni_gcm_decrypt_1
1019	DB	100
1020	DW	29
1021	DB	$L$SEH_prologue_aesni_gcm_decrypt_10-$L$SEH_begin_aesni_gcm_decrypt_1
1022	DB	116
1023	DW	28
1024	DB	$L$SEH_prologue_aesni_gcm_decrypt_9-$L$SEH_begin_aesni_gcm_decrypt_1
1025	DB	3
1026	DB	$L$SEH_prologue_aesni_gcm_decrypt_8-$L$SEH_begin_aesni_gcm_decrypt_1
1027	DB	1
1028	DW	21
1029	DB	$L$SEH_prologue_aesni_gcm_decrypt_7-$L$SEH_begin_aesni_gcm_decrypt_1
1030	DB	240
1031	DB	$L$SEH_prologue_aesni_gcm_decrypt_6-$L$SEH_begin_aesni_gcm_decrypt_1
1032	DB	224
1033	DB	$L$SEH_prologue_aesni_gcm_decrypt_5-$L$SEH_begin_aesni_gcm_decrypt_1
1034	DB	208
1035	DB	$L$SEH_prologue_aesni_gcm_decrypt_4-$L$SEH_begin_aesni_gcm_decrypt_1
1036	DB	192
1037	DB	$L$SEH_prologue_aesni_gcm_decrypt_3-$L$SEH_begin_aesni_gcm_decrypt_1
1038	DB	48
1039	DB	$L$SEH_prologue_aesni_gcm_decrypt_2-$L$SEH_begin_aesni_gcm_decrypt_1
1040	DB	80
1041
1042	DW	0
1043$L$SEH_info_aesni_gcm_encrypt_0:
1044	DB	1
1045	DB	$L$SEH_endprologue_aesni_gcm_encrypt_22-$L$SEH_begin_aesni_gcm_encrypt_1
1046	DB	33
1047	DB	213
1048	DB	$L$SEH_prologue_aesni_gcm_encrypt_21-$L$SEH_begin_aesni_gcm_encrypt_1
1049	DB	248
1050	DW	9
1051	DB	$L$SEH_prologue_aesni_gcm_encrypt_20-$L$SEH_begin_aesni_gcm_encrypt_1
1052	DB	232
1053	DW	8
1054	DB	$L$SEH_prologue_aesni_gcm_encrypt_19-$L$SEH_begin_aesni_gcm_encrypt_1
1055	DB	216
1056	DW	7
1057	DB	$L$SEH_prologue_aesni_gcm_encrypt_18-$L$SEH_begin_aesni_gcm_encrypt_1
1058	DB	200
1059	DW	6
1060	DB	$L$SEH_prologue_aesni_gcm_encrypt_17-$L$SEH_begin_aesni_gcm_encrypt_1
1061	DB	184
1062	DW	5
1063	DB	$L$SEH_prologue_aesni_gcm_encrypt_16-$L$SEH_begin_aesni_gcm_encrypt_1
1064	DB	168
1065	DW	4
1066	DB	$L$SEH_prologue_aesni_gcm_encrypt_15-$L$SEH_begin_aesni_gcm_encrypt_1
1067	DB	152
1068	DW	3
1069	DB	$L$SEH_prologue_aesni_gcm_encrypt_14-$L$SEH_begin_aesni_gcm_encrypt_1
1070	DB	136
1071	DW	2
1072	DB	$L$SEH_prologue_aesni_gcm_encrypt_13-$L$SEH_begin_aesni_gcm_encrypt_1
1073	DB	120
1074	DW	1
1075	DB	$L$SEH_prologue_aesni_gcm_encrypt_12-$L$SEH_begin_aesni_gcm_encrypt_1
1076	DB	104
1077	DW	0
1078	DB	$L$SEH_prologue_aesni_gcm_encrypt_11-$L$SEH_begin_aesni_gcm_encrypt_1
1079	DB	100
1080	DW	29
1081	DB	$L$SEH_prologue_aesni_gcm_encrypt_10-$L$SEH_begin_aesni_gcm_encrypt_1
1082	DB	116
1083	DW	28
1084	DB	$L$SEH_prologue_aesni_gcm_encrypt_9-$L$SEH_begin_aesni_gcm_encrypt_1
1085	DB	3
1086	DB	$L$SEH_prologue_aesni_gcm_encrypt_8-$L$SEH_begin_aesni_gcm_encrypt_1
1087	DB	1
1088	DW	21
1089	DB	$L$SEH_prologue_aesni_gcm_encrypt_7-$L$SEH_begin_aesni_gcm_encrypt_1
1090	DB	240
1091	DB	$L$SEH_prologue_aesni_gcm_encrypt_6-$L$SEH_begin_aesni_gcm_encrypt_1
1092	DB	224
1093	DB	$L$SEH_prologue_aesni_gcm_encrypt_5-$L$SEH_begin_aesni_gcm_encrypt_1
1094	DB	208
1095	DB	$L$SEH_prologue_aesni_gcm_encrypt_4-$L$SEH_begin_aesni_gcm_encrypt_1
1096	DB	192
1097	DB	$L$SEH_prologue_aesni_gcm_encrypt_3-$L$SEH_begin_aesni_gcm_encrypt_1
1098	DB	48
1099	DB	$L$SEH_prologue_aesni_gcm_encrypt_2-$L$SEH_begin_aesni_gcm_encrypt_1
1100	DB	80
1101
1102	DW	0
1103%else
1104; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
1105ret
1106%endif
1107