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