• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_prolog_aesni_gcm_decrypt_2:
367	mov	rbp,rsp
368
369	push	rbx
370
371$L$SEH_prolog_aesni_gcm_decrypt_3:
372	push	r12
373
374$L$SEH_prolog_aesni_gcm_decrypt_4:
375	push	r13
376
377$L$SEH_prolog_aesni_gcm_decrypt_5:
378	push	r14
379
380$L$SEH_prolog_aesni_gcm_decrypt_6:
381	push	r15
382
383$L$SEH_prolog_aesni_gcm_decrypt_7:
384	lea	rsp,[((-168))+rsp]
385$L$SEH_prolog_aesni_gcm_decrypt_8:
386$L$SEH_prolog_aesni_gcm_decrypt_9:
387
388
389
390	mov	QWORD[16+rbp],rdi
391$L$SEH_prolog_aesni_gcm_decrypt_10:
392	mov	QWORD[24+rbp],rsi
393$L$SEH_prolog_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_prolog_aesni_gcm_decrypt_12:
399	movaps	XMMWORD[(-192)+rbp],xmm7
400$L$SEH_prolog_aesni_gcm_decrypt_13:
401	movaps	XMMWORD[(-176)+rbp],xmm8
402$L$SEH_prolog_aesni_gcm_decrypt_14:
403	movaps	XMMWORD[(-160)+rbp],xmm9
404$L$SEH_prolog_aesni_gcm_decrypt_15:
405	movaps	XMMWORD[(-144)+rbp],xmm10
406$L$SEH_prolog_aesni_gcm_decrypt_16:
407	movaps	XMMWORD[(-128)+rbp],xmm11
408$L$SEH_prolog_aesni_gcm_decrypt_17:
409	movaps	XMMWORD[(-112)+rbp],xmm12
410$L$SEH_prolog_aesni_gcm_decrypt_18:
411	movaps	XMMWORD[(-96)+rbp],xmm13
412$L$SEH_prolog_aesni_gcm_decrypt_19:
413	movaps	XMMWORD[(-80)+rbp],xmm14
414$L$SEH_prolog_aesni_gcm_decrypt_20:
415	movaps	XMMWORD[(-64)+rbp],xmm15
416$L$SEH_prolog_aesni_gcm_decrypt_21:
417	vzeroupper
418
419	mov	r12,QWORD[64+rbp]
420	vmovdqu	xmm1,XMMWORD[rdi]
421	add	rsp,-128
422	mov	ebx,DWORD[12+rdi]
423	lea	r11,[$L$bswap_mask]
424	lea	r14,[((-128))+r9]
425	mov	r15,0xf80
426	vmovdqu	xmm8,XMMWORD[r12]
427	and	rsp,-128
428	vmovdqu	xmm0,XMMWORD[r11]
429	lea	r9,[128+r9]
430	lea	rsi,[32+rsi]
431	mov	r10d,DWORD[((240-128))+r9]
432	vpshufb	xmm8,xmm8,xmm0
433
434	and	r14,r15
435	and	r15,rsp
436	sub	r15,r14
437	jc	NEAR $L$dec_no_key_aliasing
438	cmp	r15,768
439	jnc	NEAR $L$dec_no_key_aliasing
440	sub	rsp,r15
441$L$dec_no_key_aliasing:
442
443	vmovdqu	xmm7,XMMWORD[80+rcx]
444	mov	r14,rcx
445	vmovdqu	xmm4,XMMWORD[64+rcx]
446
447
448
449
450
451
452
453	lea	r15,[((-192))+r8*1+rcx]
454
455	vmovdqu	xmm5,XMMWORD[48+rcx]
456	shr	r8,4
457	xor	rax,rax
458	vmovdqu	xmm6,XMMWORD[32+rcx]
459	vpshufb	xmm7,xmm7,xmm0
460	vmovdqu	xmm2,XMMWORD[16+rcx]
461	vpshufb	xmm4,xmm4,xmm0
462	vmovdqu	xmm3,XMMWORD[rcx]
463	vpshufb	xmm5,xmm5,xmm0
464	vmovdqu	XMMWORD[48+rsp],xmm4
465	vpshufb	xmm6,xmm6,xmm0
466	vmovdqu	XMMWORD[64+rsp],xmm5
467	vpshufb	xmm2,xmm2,xmm0
468	vmovdqu	XMMWORD[80+rsp],xmm6
469	vpshufb	xmm3,xmm3,xmm0
470	vmovdqu	XMMWORD[96+rsp],xmm2
471	vmovdqu	XMMWORD[112+rsp],xmm3
472
473	call	_aesni_ctr32_ghash_6x
474
475	mov	r12,QWORD[64+rbp]
476	vmovups	XMMWORD[(-96)+rdx],xmm9
477	vmovups	XMMWORD[(-80)+rdx],xmm10
478	vmovups	XMMWORD[(-64)+rdx],xmm11
479	vmovups	XMMWORD[(-48)+rdx],xmm12
480	vmovups	XMMWORD[(-32)+rdx],xmm13
481	vmovups	XMMWORD[(-16)+rdx],xmm14
482
483	vpshufb	xmm8,xmm8,XMMWORD[r11]
484	vmovdqu	XMMWORD[r12],xmm8
485
486	vzeroupper
487	movaps	xmm6,XMMWORD[((-208))+rbp]
488	movaps	xmm7,XMMWORD[((-192))+rbp]
489	movaps	xmm8,XMMWORD[((-176))+rbp]
490	movaps	xmm9,XMMWORD[((-160))+rbp]
491	movaps	xmm10,XMMWORD[((-144))+rbp]
492	movaps	xmm11,XMMWORD[((-128))+rbp]
493	movaps	xmm12,XMMWORD[((-112))+rbp]
494	movaps	xmm13,XMMWORD[((-96))+rbp]
495	movaps	xmm14,XMMWORD[((-80))+rbp]
496	movaps	xmm15,XMMWORD[((-64))+rbp]
497	mov	rdi,QWORD[16+rbp]
498	mov	rsi,QWORD[24+rbp]
499	lea	rsp,[((-40))+rbp]
500
501	pop	r15
502
503	pop	r14
504
505	pop	r13
506
507	pop	r12
508
509	pop	rbx
510
511	pop	rbp
512
513$L$gcm_dec_abort:
514	ret
515$L$SEH_end_aesni_gcm_decrypt_22:
516
517
518
519ALIGN	32
520_aesni_ctr32_6x:
521
522	vmovdqu	xmm4,XMMWORD[((0-128))+r9]
523	vmovdqu	xmm2,XMMWORD[32+r11]
524	lea	r13,[((-1))+r10]
525	vmovups	xmm15,XMMWORD[((16-128))+r9]
526	lea	r12,[((32-128))+r9]
527	vpxor	xmm9,xmm1,xmm4
528	add	ebx,100663296
529	jc	NEAR $L$handle_ctr32_2
530	vpaddb	xmm10,xmm1,xmm2
531	vpaddb	xmm11,xmm10,xmm2
532	vpxor	xmm10,xmm10,xmm4
533	vpaddb	xmm12,xmm11,xmm2
534	vpxor	xmm11,xmm11,xmm4
535	vpaddb	xmm13,xmm12,xmm2
536	vpxor	xmm12,xmm12,xmm4
537	vpaddb	xmm14,xmm13,xmm2
538	vpxor	xmm13,xmm13,xmm4
539	vpaddb	xmm1,xmm14,xmm2
540	vpxor	xmm14,xmm14,xmm4
541	jmp	NEAR $L$oop_ctr32
542
543ALIGN	16
544$L$oop_ctr32:
545	vaesenc	xmm9,xmm9,xmm15
546	vaesenc	xmm10,xmm10,xmm15
547	vaesenc	xmm11,xmm11,xmm15
548	vaesenc	xmm12,xmm12,xmm15
549	vaesenc	xmm13,xmm13,xmm15
550	vaesenc	xmm14,xmm14,xmm15
551	vmovups	xmm15,XMMWORD[r12]
552	lea	r12,[16+r12]
553	dec	r13d
554	jnz	NEAR $L$oop_ctr32
555
556	vmovdqu	xmm3,XMMWORD[r12]
557	vaesenc	xmm9,xmm9,xmm15
558	vpxor	xmm4,xmm3,XMMWORD[rcx]
559	vaesenc	xmm10,xmm10,xmm15
560	vpxor	xmm5,xmm3,XMMWORD[16+rcx]
561	vaesenc	xmm11,xmm11,xmm15
562	vpxor	xmm6,xmm3,XMMWORD[32+rcx]
563	vaesenc	xmm12,xmm12,xmm15
564	vpxor	xmm8,xmm3,XMMWORD[48+rcx]
565	vaesenc	xmm13,xmm13,xmm15
566	vpxor	xmm2,xmm3,XMMWORD[64+rcx]
567	vaesenc	xmm14,xmm14,xmm15
568	vpxor	xmm3,xmm3,XMMWORD[80+rcx]
569	lea	rcx,[96+rcx]
570
571	vaesenclast	xmm9,xmm9,xmm4
572	vaesenclast	xmm10,xmm10,xmm5
573	vaesenclast	xmm11,xmm11,xmm6
574	vaesenclast	xmm12,xmm12,xmm8
575	vaesenclast	xmm13,xmm13,xmm2
576	vaesenclast	xmm14,xmm14,xmm3
577	vmovups	XMMWORD[rdx],xmm9
578	vmovups	XMMWORD[16+rdx],xmm10
579	vmovups	XMMWORD[32+rdx],xmm11
580	vmovups	XMMWORD[48+rdx],xmm12
581	vmovups	XMMWORD[64+rdx],xmm13
582	vmovups	XMMWORD[80+rdx],xmm14
583	lea	rdx,[96+rdx]
584
585	ret
586ALIGN	32
587$L$handle_ctr32_2:
588	vpshufb	xmm6,xmm1,xmm0
589	vmovdqu	xmm5,XMMWORD[48+r11]
590	vpaddd	xmm10,xmm6,XMMWORD[64+r11]
591	vpaddd	xmm11,xmm6,xmm5
592	vpaddd	xmm12,xmm10,xmm5
593	vpshufb	xmm10,xmm10,xmm0
594	vpaddd	xmm13,xmm11,xmm5
595	vpshufb	xmm11,xmm11,xmm0
596	vpxor	xmm10,xmm10,xmm4
597	vpaddd	xmm14,xmm12,xmm5
598	vpshufb	xmm12,xmm12,xmm0
599	vpxor	xmm11,xmm11,xmm4
600	vpaddd	xmm1,xmm13,xmm5
601	vpshufb	xmm13,xmm13,xmm0
602	vpxor	xmm12,xmm12,xmm4
603	vpshufb	xmm14,xmm14,xmm0
604	vpxor	xmm13,xmm13,xmm4
605	vpshufb	xmm1,xmm1,xmm0
606	vpxor	xmm14,xmm14,xmm4
607	jmp	NEAR $L$oop_ctr32
608
609
610
611global	aesni_gcm_encrypt
612
613ALIGN	32
614aesni_gcm_encrypt:
615
616$L$SEH_begin_aesni_gcm_encrypt_1:
617_CET_ENDBR
618%ifdef BORINGSSL_DISPATCH_TEST
619EXTERN	BORINGSSL_function_hit
620	mov	BYTE[((BORINGSSL_function_hit+2))],1
621%endif
622	xor	rax,rax
623
624
625
626
627	cmp	r8,0x60*3
628	jb	NEAR $L$gcm_enc_abort
629
630	push	rbp
631
632$L$SEH_prolog_aesni_gcm_encrypt_2:
633	mov	rbp,rsp
634
635	push	rbx
636
637$L$SEH_prolog_aesni_gcm_encrypt_3:
638	push	r12
639
640$L$SEH_prolog_aesni_gcm_encrypt_4:
641	push	r13
642
643$L$SEH_prolog_aesni_gcm_encrypt_5:
644	push	r14
645
646$L$SEH_prolog_aesni_gcm_encrypt_6:
647	push	r15
648
649$L$SEH_prolog_aesni_gcm_encrypt_7:
650	lea	rsp,[((-168))+rsp]
651$L$SEH_prolog_aesni_gcm_encrypt_8:
652$L$SEH_prolog_aesni_gcm_encrypt_9:
653
654
655
656	mov	QWORD[16+rbp],rdi
657$L$SEH_prolog_aesni_gcm_encrypt_10:
658	mov	QWORD[24+rbp],rsi
659$L$SEH_prolog_aesni_gcm_encrypt_11:
660	mov	rdi,QWORD[48+rbp]
661	mov	rsi,QWORD[56+rbp]
662
663	movaps	XMMWORD[(-208)+rbp],xmm6
664$L$SEH_prolog_aesni_gcm_encrypt_12:
665	movaps	XMMWORD[(-192)+rbp],xmm7
666$L$SEH_prolog_aesni_gcm_encrypt_13:
667	movaps	XMMWORD[(-176)+rbp],xmm8
668$L$SEH_prolog_aesni_gcm_encrypt_14:
669	movaps	XMMWORD[(-160)+rbp],xmm9
670$L$SEH_prolog_aesni_gcm_encrypt_15:
671	movaps	XMMWORD[(-144)+rbp],xmm10
672$L$SEH_prolog_aesni_gcm_encrypt_16:
673	movaps	XMMWORD[(-128)+rbp],xmm11
674$L$SEH_prolog_aesni_gcm_encrypt_17:
675	movaps	XMMWORD[(-112)+rbp],xmm12
676$L$SEH_prolog_aesni_gcm_encrypt_18:
677	movaps	XMMWORD[(-96)+rbp],xmm13
678$L$SEH_prolog_aesni_gcm_encrypt_19:
679	movaps	XMMWORD[(-80)+rbp],xmm14
680$L$SEH_prolog_aesni_gcm_encrypt_20:
681	movaps	XMMWORD[(-64)+rbp],xmm15
682$L$SEH_prolog_aesni_gcm_encrypt_21:
683	vzeroupper
684
685	vmovdqu	xmm1,XMMWORD[rdi]
686	add	rsp,-128
687	mov	ebx,DWORD[12+rdi]
688	lea	r11,[$L$bswap_mask]
689	lea	r14,[((-128))+r9]
690	mov	r15,0xf80
691	lea	r9,[128+r9]
692	vmovdqu	xmm0,XMMWORD[r11]
693	and	rsp,-128
694	mov	r10d,DWORD[((240-128))+r9]
695
696	and	r14,r15
697	and	r15,rsp
698	sub	r15,r14
699	jc	NEAR $L$enc_no_key_aliasing
700	cmp	r15,768
701	jnc	NEAR $L$enc_no_key_aliasing
702	sub	rsp,r15
703$L$enc_no_key_aliasing:
704
705	mov	r14,rdx
706
707
708
709
710
711
712
713
714	lea	r15,[((-192))+r8*1+rdx]
715
716	shr	r8,4
717
718	call	_aesni_ctr32_6x
719	vpshufb	xmm8,xmm9,xmm0
720	vpshufb	xmm2,xmm10,xmm0
721	vmovdqu	XMMWORD[112+rsp],xmm8
722	vpshufb	xmm4,xmm11,xmm0
723	vmovdqu	XMMWORD[96+rsp],xmm2
724	vpshufb	xmm5,xmm12,xmm0
725	vmovdqu	XMMWORD[80+rsp],xmm4
726	vpshufb	xmm6,xmm13,xmm0
727	vmovdqu	XMMWORD[64+rsp],xmm5
728	vpshufb	xmm7,xmm14,xmm0
729	vmovdqu	XMMWORD[48+rsp],xmm6
730
731	call	_aesni_ctr32_6x
732
733	mov	r12,QWORD[64+rbp]
734	lea	rsi,[32+rsi]
735	vmovdqu	xmm8,XMMWORD[r12]
736	sub	r8,12
737	mov	rax,0x60*2
738	vpshufb	xmm8,xmm8,xmm0
739
740	call	_aesni_ctr32_ghash_6x
741	vmovdqu	xmm7,XMMWORD[32+rsp]
742	vmovdqu	xmm0,XMMWORD[r11]
743	vmovdqu	xmm3,XMMWORD[((0-32))+rsi]
744	vpunpckhqdq	xmm1,xmm7,xmm7
745	vmovdqu	xmm15,XMMWORD[((32-32))+rsi]
746	vmovups	XMMWORD[(-96)+rdx],xmm9
747	vpshufb	xmm9,xmm9,xmm0
748	vpxor	xmm1,xmm1,xmm7
749	vmovups	XMMWORD[(-80)+rdx],xmm10
750	vpshufb	xmm10,xmm10,xmm0
751	vmovups	XMMWORD[(-64)+rdx],xmm11
752	vpshufb	xmm11,xmm11,xmm0
753	vmovups	XMMWORD[(-48)+rdx],xmm12
754	vpshufb	xmm12,xmm12,xmm0
755	vmovups	XMMWORD[(-32)+rdx],xmm13
756	vpshufb	xmm13,xmm13,xmm0
757	vmovups	XMMWORD[(-16)+rdx],xmm14
758	vpshufb	xmm14,xmm14,xmm0
759	vmovdqu	XMMWORD[16+rsp],xmm9
760	vmovdqu	xmm6,XMMWORD[48+rsp]
761	vmovdqu	xmm0,XMMWORD[((16-32))+rsi]
762	vpunpckhqdq	xmm2,xmm6,xmm6
763	vpclmulqdq	xmm5,xmm7,xmm3,0x00
764	vpxor	xmm2,xmm2,xmm6
765	vpclmulqdq	xmm7,xmm7,xmm3,0x11
766	vpclmulqdq	xmm1,xmm1,xmm15,0x00
767
768	vmovdqu	xmm9,XMMWORD[64+rsp]
769	vpclmulqdq	xmm4,xmm6,xmm0,0x00
770	vmovdqu	xmm3,XMMWORD[((48-32))+rsi]
771	vpxor	xmm4,xmm4,xmm5
772	vpunpckhqdq	xmm5,xmm9,xmm9
773	vpclmulqdq	xmm6,xmm6,xmm0,0x11
774	vpxor	xmm5,xmm5,xmm9
775	vpxor	xmm6,xmm6,xmm7
776	vpclmulqdq	xmm2,xmm2,xmm15,0x10
777	vmovdqu	xmm15,XMMWORD[((80-32))+rsi]
778	vpxor	xmm2,xmm2,xmm1
779
780	vmovdqu	xmm1,XMMWORD[80+rsp]
781	vpclmulqdq	xmm7,xmm9,xmm3,0x00
782	vmovdqu	xmm0,XMMWORD[((64-32))+rsi]
783	vpxor	xmm7,xmm7,xmm4
784	vpunpckhqdq	xmm4,xmm1,xmm1
785	vpclmulqdq	xmm9,xmm9,xmm3,0x11
786	vpxor	xmm4,xmm4,xmm1
787	vpxor	xmm9,xmm9,xmm6
788	vpclmulqdq	xmm5,xmm5,xmm15,0x00
789	vpxor	xmm5,xmm5,xmm2
790
791	vmovdqu	xmm2,XMMWORD[96+rsp]
792	vpclmulqdq	xmm6,xmm1,xmm0,0x00
793	vmovdqu	xmm3,XMMWORD[((96-32))+rsi]
794	vpxor	xmm6,xmm6,xmm7
795	vpunpckhqdq	xmm7,xmm2,xmm2
796	vpclmulqdq	xmm1,xmm1,xmm0,0x11
797	vpxor	xmm7,xmm7,xmm2
798	vpxor	xmm1,xmm1,xmm9
799	vpclmulqdq	xmm4,xmm4,xmm15,0x10
800	vmovdqu	xmm15,XMMWORD[((128-32))+rsi]
801	vpxor	xmm4,xmm4,xmm5
802
803	vpxor	xmm8,xmm8,XMMWORD[112+rsp]
804	vpclmulqdq	xmm5,xmm2,xmm3,0x00
805	vmovdqu	xmm0,XMMWORD[((112-32))+rsi]
806	vpunpckhqdq	xmm9,xmm8,xmm8
807	vpxor	xmm5,xmm5,xmm6
808	vpclmulqdq	xmm2,xmm2,xmm3,0x11
809	vpxor	xmm9,xmm9,xmm8
810	vpxor	xmm2,xmm2,xmm1
811	vpclmulqdq	xmm7,xmm7,xmm15,0x00
812	vpxor	xmm4,xmm7,xmm4
813
814	vpclmulqdq	xmm6,xmm8,xmm0,0x00
815	vmovdqu	xmm3,XMMWORD[((0-32))+rsi]
816	vpunpckhqdq	xmm1,xmm14,xmm14
817	vpclmulqdq	xmm8,xmm8,xmm0,0x11
818	vpxor	xmm1,xmm1,xmm14
819	vpxor	xmm5,xmm6,xmm5
820	vpclmulqdq	xmm9,xmm9,xmm15,0x10
821	vmovdqu	xmm15,XMMWORD[((32-32))+rsi]
822	vpxor	xmm7,xmm8,xmm2
823	vpxor	xmm6,xmm9,xmm4
824
825	vmovdqu	xmm0,XMMWORD[((16-32))+rsi]
826	vpxor	xmm9,xmm7,xmm5
827	vpclmulqdq	xmm4,xmm14,xmm3,0x00
828	vpxor	xmm6,xmm6,xmm9
829	vpunpckhqdq	xmm2,xmm13,xmm13
830	vpclmulqdq	xmm14,xmm14,xmm3,0x11
831	vpxor	xmm2,xmm2,xmm13
832	vpslldq	xmm9,xmm6,8
833	vpclmulqdq	xmm1,xmm1,xmm15,0x00
834	vpxor	xmm8,xmm5,xmm9
835	vpsrldq	xmm6,xmm6,8
836	vpxor	xmm7,xmm7,xmm6
837
838	vpclmulqdq	xmm5,xmm13,xmm0,0x00
839	vmovdqu	xmm3,XMMWORD[((48-32))+rsi]
840	vpxor	xmm5,xmm5,xmm4
841	vpunpckhqdq	xmm9,xmm12,xmm12
842	vpclmulqdq	xmm13,xmm13,xmm0,0x11
843	vpxor	xmm9,xmm9,xmm12
844	vpxor	xmm13,xmm13,xmm14
845	vpalignr	xmm14,xmm8,xmm8,8
846	vpclmulqdq	xmm2,xmm2,xmm15,0x10
847	vmovdqu	xmm15,XMMWORD[((80-32))+rsi]
848	vpxor	xmm2,xmm2,xmm1
849
850	vpclmulqdq	xmm4,xmm12,xmm3,0x00
851	vmovdqu	xmm0,XMMWORD[((64-32))+rsi]
852	vpxor	xmm4,xmm4,xmm5
853	vpunpckhqdq	xmm1,xmm11,xmm11
854	vpclmulqdq	xmm12,xmm12,xmm3,0x11
855	vpxor	xmm1,xmm1,xmm11
856	vpxor	xmm12,xmm12,xmm13
857	vxorps	xmm7,xmm7,XMMWORD[16+rsp]
858	vpclmulqdq	xmm9,xmm9,xmm15,0x00
859	vpxor	xmm9,xmm9,xmm2
860
861	vpclmulqdq	xmm8,xmm8,XMMWORD[16+r11],0x10
862	vxorps	xmm8,xmm8,xmm14
863
864	vpclmulqdq	xmm5,xmm11,xmm0,0x00
865	vmovdqu	xmm3,XMMWORD[((96-32))+rsi]
866	vpxor	xmm5,xmm5,xmm4
867	vpunpckhqdq	xmm2,xmm10,xmm10
868	vpclmulqdq	xmm11,xmm11,xmm0,0x11
869	vpxor	xmm2,xmm2,xmm10
870	vpalignr	xmm14,xmm8,xmm8,8
871	vpxor	xmm11,xmm11,xmm12
872	vpclmulqdq	xmm1,xmm1,xmm15,0x10
873	vmovdqu	xmm15,XMMWORD[((128-32))+rsi]
874	vpxor	xmm1,xmm1,xmm9
875
876	vxorps	xmm14,xmm14,xmm7
877	vpclmulqdq	xmm8,xmm8,XMMWORD[16+r11],0x10
878	vxorps	xmm8,xmm8,xmm14
879
880	vpclmulqdq	xmm4,xmm10,xmm3,0x00
881	vmovdqu	xmm0,XMMWORD[((112-32))+rsi]
882	vpxor	xmm4,xmm4,xmm5
883	vpunpckhqdq	xmm9,xmm8,xmm8
884	vpclmulqdq	xmm10,xmm10,xmm3,0x11
885	vpxor	xmm9,xmm9,xmm8
886	vpxor	xmm10,xmm10,xmm11
887	vpclmulqdq	xmm2,xmm2,xmm15,0x00
888	vpxor	xmm2,xmm2,xmm1
889
890	vpclmulqdq	xmm5,xmm8,xmm0,0x00
891	vpclmulqdq	xmm7,xmm8,xmm0,0x11
892	vpxor	xmm5,xmm5,xmm4
893	vpclmulqdq	xmm6,xmm9,xmm15,0x10
894	vpxor	xmm7,xmm7,xmm10
895	vpxor	xmm6,xmm6,xmm2
896
897	vpxor	xmm4,xmm7,xmm5
898	vpxor	xmm6,xmm6,xmm4
899	vpslldq	xmm1,xmm6,8
900	vmovdqu	xmm3,XMMWORD[16+r11]
901	vpsrldq	xmm6,xmm6,8
902	vpxor	xmm8,xmm5,xmm1
903	vpxor	xmm7,xmm7,xmm6
904
905	vpalignr	xmm2,xmm8,xmm8,8
906	vpclmulqdq	xmm8,xmm8,xmm3,0x10
907	vpxor	xmm8,xmm8,xmm2
908
909	vpalignr	xmm2,xmm8,xmm8,8
910	vpclmulqdq	xmm8,xmm8,xmm3,0x10
911	vpxor	xmm2,xmm2,xmm7
912	vpxor	xmm8,xmm8,xmm2
913	mov	r12,QWORD[64+rbp]
914	vpshufb	xmm8,xmm8,XMMWORD[r11]
915	vmovdqu	XMMWORD[r12],xmm8
916
917	vzeroupper
918	movaps	xmm6,XMMWORD[((-208))+rbp]
919	movaps	xmm7,XMMWORD[((-192))+rbp]
920	movaps	xmm8,XMMWORD[((-176))+rbp]
921	movaps	xmm9,XMMWORD[((-160))+rbp]
922	movaps	xmm10,XMMWORD[((-144))+rbp]
923	movaps	xmm11,XMMWORD[((-128))+rbp]
924	movaps	xmm12,XMMWORD[((-112))+rbp]
925	movaps	xmm13,XMMWORD[((-96))+rbp]
926	movaps	xmm14,XMMWORD[((-80))+rbp]
927	movaps	xmm15,XMMWORD[((-64))+rbp]
928	mov	rdi,QWORD[16+rbp]
929	mov	rsi,QWORD[24+rbp]
930	lea	rsp,[((-40))+rbp]
931
932	pop	r15
933
934	pop	r14
935
936	pop	r13
937
938	pop	r12
939
940	pop	rbx
941
942	pop	rbp
943
944$L$gcm_enc_abort:
945	ret
946$L$SEH_end_aesni_gcm_encrypt_22:
947
948
949section	.rdata rdata align=8
950ALIGN	64
951$L$bswap_mask:
952	DB	15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
953$L$poly:
954	DB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2
955$L$one_msb:
956	DB	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
957$L$two_lsb:
958	DB	2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
959$L$one_lsb:
960	DB	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
961	DB	65,69,83,45,78,73,32,71,67,77,32,109,111,100,117,108
962	DB	101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82
963	DB	89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112
964	DB	114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
965ALIGN	64
966section	.text
967
968section	.pdata rdata align=4
969ALIGN	4
970	DD	$L$SEH_begin_aesni_gcm_decrypt_1 wrt ..imagebase
971	DD	$L$SEH_end_aesni_gcm_decrypt_22 wrt ..imagebase
972	DD	$L$SEH_info_aesni_gcm_decrypt_0 wrt ..imagebase
973
974	DD	$L$SEH_begin_aesni_gcm_encrypt_1 wrt ..imagebase
975	DD	$L$SEH_end_aesni_gcm_encrypt_22 wrt ..imagebase
976	DD	$L$SEH_info_aesni_gcm_encrypt_0 wrt ..imagebase
977
978
979section	.xdata rdata align=8
980ALIGN	4
981$L$SEH_info_aesni_gcm_decrypt_0:
982	DB	1
983	DB	$L$SEH_prolog_aesni_gcm_decrypt_21-$L$SEH_begin_aesni_gcm_decrypt_1
984	DB	33
985	DB	213
986	DB	$L$SEH_prolog_aesni_gcm_decrypt_21-$L$SEH_begin_aesni_gcm_decrypt_1
987	DB	248
988	DW	9
989	DB	$L$SEH_prolog_aesni_gcm_decrypt_20-$L$SEH_begin_aesni_gcm_decrypt_1
990	DB	232
991	DW	8
992	DB	$L$SEH_prolog_aesni_gcm_decrypt_19-$L$SEH_begin_aesni_gcm_decrypt_1
993	DB	216
994	DW	7
995	DB	$L$SEH_prolog_aesni_gcm_decrypt_18-$L$SEH_begin_aesni_gcm_decrypt_1
996	DB	200
997	DW	6
998	DB	$L$SEH_prolog_aesni_gcm_decrypt_17-$L$SEH_begin_aesni_gcm_decrypt_1
999	DB	184
1000	DW	5
1001	DB	$L$SEH_prolog_aesni_gcm_decrypt_16-$L$SEH_begin_aesni_gcm_decrypt_1
1002	DB	168
1003	DW	4
1004	DB	$L$SEH_prolog_aesni_gcm_decrypt_15-$L$SEH_begin_aesni_gcm_decrypt_1
1005	DB	152
1006	DW	3
1007	DB	$L$SEH_prolog_aesni_gcm_decrypt_14-$L$SEH_begin_aesni_gcm_decrypt_1
1008	DB	136
1009	DW	2
1010	DB	$L$SEH_prolog_aesni_gcm_decrypt_13-$L$SEH_begin_aesni_gcm_decrypt_1
1011	DB	120
1012	DW	1
1013	DB	$L$SEH_prolog_aesni_gcm_decrypt_12-$L$SEH_begin_aesni_gcm_decrypt_1
1014	DB	104
1015	DW	0
1016	DB	$L$SEH_prolog_aesni_gcm_decrypt_11-$L$SEH_begin_aesni_gcm_decrypt_1
1017	DB	100
1018	DW	29
1019	DB	$L$SEH_prolog_aesni_gcm_decrypt_10-$L$SEH_begin_aesni_gcm_decrypt_1
1020	DB	116
1021	DW	28
1022	DB	$L$SEH_prolog_aesni_gcm_decrypt_9-$L$SEH_begin_aesni_gcm_decrypt_1
1023	DB	3
1024	DB	$L$SEH_prolog_aesni_gcm_decrypt_8-$L$SEH_begin_aesni_gcm_decrypt_1
1025	DB	1
1026	DW	21
1027	DB	$L$SEH_prolog_aesni_gcm_decrypt_7-$L$SEH_begin_aesni_gcm_decrypt_1
1028	DB	240
1029	DB	$L$SEH_prolog_aesni_gcm_decrypt_6-$L$SEH_begin_aesni_gcm_decrypt_1
1030	DB	224
1031	DB	$L$SEH_prolog_aesni_gcm_decrypt_5-$L$SEH_begin_aesni_gcm_decrypt_1
1032	DB	208
1033	DB	$L$SEH_prolog_aesni_gcm_decrypt_4-$L$SEH_begin_aesni_gcm_decrypt_1
1034	DB	192
1035	DB	$L$SEH_prolog_aesni_gcm_decrypt_3-$L$SEH_begin_aesni_gcm_decrypt_1
1036	DB	48
1037	DB	$L$SEH_prolog_aesni_gcm_decrypt_2-$L$SEH_begin_aesni_gcm_decrypt_1
1038	DB	80
1039
1040$L$SEH_info_aesni_gcm_encrypt_0:
1041	DB	1
1042	DB	$L$SEH_prolog_aesni_gcm_encrypt_21-$L$SEH_begin_aesni_gcm_encrypt_1
1043	DB	33
1044	DB	213
1045	DB	$L$SEH_prolog_aesni_gcm_encrypt_21-$L$SEH_begin_aesni_gcm_encrypt_1
1046	DB	248
1047	DW	9
1048	DB	$L$SEH_prolog_aesni_gcm_encrypt_20-$L$SEH_begin_aesni_gcm_encrypt_1
1049	DB	232
1050	DW	8
1051	DB	$L$SEH_prolog_aesni_gcm_encrypt_19-$L$SEH_begin_aesni_gcm_encrypt_1
1052	DB	216
1053	DW	7
1054	DB	$L$SEH_prolog_aesni_gcm_encrypt_18-$L$SEH_begin_aesni_gcm_encrypt_1
1055	DB	200
1056	DW	6
1057	DB	$L$SEH_prolog_aesni_gcm_encrypt_17-$L$SEH_begin_aesni_gcm_encrypt_1
1058	DB	184
1059	DW	5
1060	DB	$L$SEH_prolog_aesni_gcm_encrypt_16-$L$SEH_begin_aesni_gcm_encrypt_1
1061	DB	168
1062	DW	4
1063	DB	$L$SEH_prolog_aesni_gcm_encrypt_15-$L$SEH_begin_aesni_gcm_encrypt_1
1064	DB	152
1065	DW	3
1066	DB	$L$SEH_prolog_aesni_gcm_encrypt_14-$L$SEH_begin_aesni_gcm_encrypt_1
1067	DB	136
1068	DW	2
1069	DB	$L$SEH_prolog_aesni_gcm_encrypt_13-$L$SEH_begin_aesni_gcm_encrypt_1
1070	DB	120
1071	DW	1
1072	DB	$L$SEH_prolog_aesni_gcm_encrypt_12-$L$SEH_begin_aesni_gcm_encrypt_1
1073	DB	104
1074	DW	0
1075	DB	$L$SEH_prolog_aesni_gcm_encrypt_11-$L$SEH_begin_aesni_gcm_encrypt_1
1076	DB	100
1077	DW	29
1078	DB	$L$SEH_prolog_aesni_gcm_encrypt_10-$L$SEH_begin_aesni_gcm_encrypt_1
1079	DB	116
1080	DW	28
1081	DB	$L$SEH_prolog_aesni_gcm_encrypt_9-$L$SEH_begin_aesni_gcm_encrypt_1
1082	DB	3
1083	DB	$L$SEH_prolog_aesni_gcm_encrypt_8-$L$SEH_begin_aesni_gcm_encrypt_1
1084	DB	1
1085	DW	21
1086	DB	$L$SEH_prolog_aesni_gcm_encrypt_7-$L$SEH_begin_aesni_gcm_encrypt_1
1087	DB	240
1088	DB	$L$SEH_prolog_aesni_gcm_encrypt_6-$L$SEH_begin_aesni_gcm_encrypt_1
1089	DB	224
1090	DB	$L$SEH_prolog_aesni_gcm_encrypt_5-$L$SEH_begin_aesni_gcm_encrypt_1
1091	DB	208
1092	DB	$L$SEH_prolog_aesni_gcm_encrypt_4-$L$SEH_begin_aesni_gcm_encrypt_1
1093	DB	192
1094	DB	$L$SEH_prolog_aesni_gcm_encrypt_3-$L$SEH_begin_aesni_gcm_encrypt_1
1095	DB	48
1096	DB	$L$SEH_prolog_aesni_gcm_encrypt_2-$L$SEH_begin_aesni_gcm_encrypt_1
1097	DB	80
1098%else
1099; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
1100ret
1101%endif
1102