xref: /aosp_15_r20/external/cronet/third_party/boringssl/src/gen/crypto/aes128gcmsiv-x86_64-linux.S (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1// This file is generated from a similarly-named Perl script in the BoringSSL
2// source tree. Do not edit by hand.
3
4#include <openssl/asm_base.h>
5
6#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && defined(__ELF__)
7.section	.rodata
8
9.align	16
10one:
11.quad	1,0
12two:
13.quad	2,0
14three:
15.quad	3,0
16four:
17.quad	4,0
18five:
19.quad	5,0
20six:
21.quad	6,0
22seven:
23.quad	7,0
24eight:
25.quad	8,0
26
27OR_MASK:
28.long	0x00000000,0x00000000,0x00000000,0x80000000
29poly:
30.quad	0x1, 0xc200000000000000
31mask:
32.long	0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
33con1:
34.long	1,1,1,1
35con2:
36.long	0x1b,0x1b,0x1b,0x1b
37con3:
38.byte	-1,-1,-1,-1,-1,-1,-1,-1,4,5,6,7,4,5,6,7
39and_mask:
40.long	0,0xffffffff, 0xffffffff, 0xffffffff
41.text
42.type	GFMUL,@function
43.align	16
44GFMUL:
45.cfi_startproc
46	vpclmulqdq	$0x00,%xmm1,%xmm0,%xmm2
47	vpclmulqdq	$0x11,%xmm1,%xmm0,%xmm5
48	vpclmulqdq	$0x10,%xmm1,%xmm0,%xmm3
49	vpclmulqdq	$0x01,%xmm1,%xmm0,%xmm4
50	vpxor	%xmm4,%xmm3,%xmm3
51	vpslldq	$8,%xmm3,%xmm4
52	vpsrldq	$8,%xmm3,%xmm3
53	vpxor	%xmm4,%xmm2,%xmm2
54	vpxor	%xmm3,%xmm5,%xmm5
55
56	vpclmulqdq	$0x10,poly(%rip),%xmm2,%xmm3
57	vpshufd	$78,%xmm2,%xmm4
58	vpxor	%xmm4,%xmm3,%xmm2
59
60	vpclmulqdq	$0x10,poly(%rip),%xmm2,%xmm3
61	vpshufd	$78,%xmm2,%xmm4
62	vpxor	%xmm4,%xmm3,%xmm2
63
64	vpxor	%xmm5,%xmm2,%xmm0
65	ret
66.cfi_endproc
67.size	GFMUL, .-GFMUL
68.globl	aesgcmsiv_htable_init
69.hidden aesgcmsiv_htable_init
70.type	aesgcmsiv_htable_init,@function
71.align	16
72aesgcmsiv_htable_init:
73.cfi_startproc
74_CET_ENDBR
75	vmovdqa	(%rsi),%xmm0
76	vmovdqa	%xmm0,%xmm1
77	vmovdqa	%xmm0,(%rdi)
78	call	GFMUL
79	vmovdqa	%xmm0,16(%rdi)
80	call	GFMUL
81	vmovdqa	%xmm0,32(%rdi)
82	call	GFMUL
83	vmovdqa	%xmm0,48(%rdi)
84	call	GFMUL
85	vmovdqa	%xmm0,64(%rdi)
86	call	GFMUL
87	vmovdqa	%xmm0,80(%rdi)
88	call	GFMUL
89	vmovdqa	%xmm0,96(%rdi)
90	call	GFMUL
91	vmovdqa	%xmm0,112(%rdi)
92	ret
93.cfi_endproc
94.size	aesgcmsiv_htable_init, .-aesgcmsiv_htable_init
95.globl	aesgcmsiv_htable6_init
96.hidden aesgcmsiv_htable6_init
97.type	aesgcmsiv_htable6_init,@function
98.align	16
99aesgcmsiv_htable6_init:
100.cfi_startproc
101_CET_ENDBR
102	vmovdqa	(%rsi),%xmm0
103	vmovdqa	%xmm0,%xmm1
104	vmovdqa	%xmm0,(%rdi)
105	call	GFMUL
106	vmovdqa	%xmm0,16(%rdi)
107	call	GFMUL
108	vmovdqa	%xmm0,32(%rdi)
109	call	GFMUL
110	vmovdqa	%xmm0,48(%rdi)
111	call	GFMUL
112	vmovdqa	%xmm0,64(%rdi)
113	call	GFMUL
114	vmovdqa	%xmm0,80(%rdi)
115	ret
116.cfi_endproc
117.size	aesgcmsiv_htable6_init, .-aesgcmsiv_htable6_init
118.globl	aesgcmsiv_htable_polyval
119.hidden aesgcmsiv_htable_polyval
120.type	aesgcmsiv_htable_polyval,@function
121.align	16
122aesgcmsiv_htable_polyval:
123.cfi_startproc
124_CET_ENDBR
125	testq	%rdx,%rdx
126	jnz	.Lhtable_polyval_start
127	ret
128
129.Lhtable_polyval_start:
130	vzeroall
131
132
133
134	movq	%rdx,%r11
135	andq	$127,%r11
136
137	jz	.Lhtable_polyval_no_prefix
138
139	vpxor	%xmm9,%xmm9,%xmm9
140	vmovdqa	(%rcx),%xmm1
141	subq	%r11,%rdx
142
143	subq	$16,%r11
144
145
146	vmovdqu	(%rsi),%xmm0
147	vpxor	%xmm1,%xmm0,%xmm0
148
149	vpclmulqdq	$0x01,(%rdi,%r11,1),%xmm0,%xmm5
150	vpclmulqdq	$0x00,(%rdi,%r11,1),%xmm0,%xmm3
151	vpclmulqdq	$0x11,(%rdi,%r11,1),%xmm0,%xmm4
152	vpclmulqdq	$0x10,(%rdi,%r11,1),%xmm0,%xmm6
153	vpxor	%xmm6,%xmm5,%xmm5
154
155	leaq	16(%rsi),%rsi
156	testq	%r11,%r11
157	jnz	.Lhtable_polyval_prefix_loop
158	jmp	.Lhtable_polyval_prefix_complete
159
160
161.align	64
162.Lhtable_polyval_prefix_loop:
163	subq	$16,%r11
164
165	vmovdqu	(%rsi),%xmm0
166
167	vpclmulqdq	$0x00,(%rdi,%r11,1),%xmm0,%xmm6
168	vpxor	%xmm6,%xmm3,%xmm3
169	vpclmulqdq	$0x11,(%rdi,%r11,1),%xmm0,%xmm6
170	vpxor	%xmm6,%xmm4,%xmm4
171	vpclmulqdq	$0x01,(%rdi,%r11,1),%xmm0,%xmm6
172	vpxor	%xmm6,%xmm5,%xmm5
173	vpclmulqdq	$0x10,(%rdi,%r11,1),%xmm0,%xmm6
174	vpxor	%xmm6,%xmm5,%xmm5
175
176	testq	%r11,%r11
177
178	leaq	16(%rsi),%rsi
179
180	jnz	.Lhtable_polyval_prefix_loop
181
182.Lhtable_polyval_prefix_complete:
183	vpsrldq	$8,%xmm5,%xmm6
184	vpslldq	$8,%xmm5,%xmm5
185
186	vpxor	%xmm6,%xmm4,%xmm9
187	vpxor	%xmm5,%xmm3,%xmm1
188
189	jmp	.Lhtable_polyval_main_loop
190
191.Lhtable_polyval_no_prefix:
192
193
194
195
196	vpxor	%xmm1,%xmm1,%xmm1
197	vmovdqa	(%rcx),%xmm9
198
199.align	64
200.Lhtable_polyval_main_loop:
201	subq	$0x80,%rdx
202	jb	.Lhtable_polyval_out
203
204	vmovdqu	112(%rsi),%xmm0
205
206	vpclmulqdq	$0x01,(%rdi),%xmm0,%xmm5
207	vpclmulqdq	$0x00,(%rdi),%xmm0,%xmm3
208	vpclmulqdq	$0x11,(%rdi),%xmm0,%xmm4
209	vpclmulqdq	$0x10,(%rdi),%xmm0,%xmm6
210	vpxor	%xmm6,%xmm5,%xmm5
211
212
213	vmovdqu	96(%rsi),%xmm0
214	vpclmulqdq	$0x01,16(%rdi),%xmm0,%xmm6
215	vpxor	%xmm6,%xmm5,%xmm5
216	vpclmulqdq	$0x00,16(%rdi),%xmm0,%xmm6
217	vpxor	%xmm6,%xmm3,%xmm3
218	vpclmulqdq	$0x11,16(%rdi),%xmm0,%xmm6
219	vpxor	%xmm6,%xmm4,%xmm4
220	vpclmulqdq	$0x10,16(%rdi),%xmm0,%xmm6
221	vpxor	%xmm6,%xmm5,%xmm5
222
223
224
225	vmovdqu	80(%rsi),%xmm0
226
227	vpclmulqdq	$0x10,poly(%rip),%xmm1,%xmm7
228	vpalignr	$8,%xmm1,%xmm1,%xmm1
229
230	vpclmulqdq	$0x01,32(%rdi),%xmm0,%xmm6
231	vpxor	%xmm6,%xmm5,%xmm5
232	vpclmulqdq	$0x00,32(%rdi),%xmm0,%xmm6
233	vpxor	%xmm6,%xmm3,%xmm3
234	vpclmulqdq	$0x11,32(%rdi),%xmm0,%xmm6
235	vpxor	%xmm6,%xmm4,%xmm4
236	vpclmulqdq	$0x10,32(%rdi),%xmm0,%xmm6
237	vpxor	%xmm6,%xmm5,%xmm5
238
239
240	vpxor	%xmm7,%xmm1,%xmm1
241
242	vmovdqu	64(%rsi),%xmm0
243
244	vpclmulqdq	$0x01,48(%rdi),%xmm0,%xmm6
245	vpxor	%xmm6,%xmm5,%xmm5
246	vpclmulqdq	$0x00,48(%rdi),%xmm0,%xmm6
247	vpxor	%xmm6,%xmm3,%xmm3
248	vpclmulqdq	$0x11,48(%rdi),%xmm0,%xmm6
249	vpxor	%xmm6,%xmm4,%xmm4
250	vpclmulqdq	$0x10,48(%rdi),%xmm0,%xmm6
251	vpxor	%xmm6,%xmm5,%xmm5
252
253
254	vmovdqu	48(%rsi),%xmm0
255
256	vpclmulqdq	$0x10,poly(%rip),%xmm1,%xmm7
257	vpalignr	$8,%xmm1,%xmm1,%xmm1
258
259	vpclmulqdq	$0x01,64(%rdi),%xmm0,%xmm6
260	vpxor	%xmm6,%xmm5,%xmm5
261	vpclmulqdq	$0x00,64(%rdi),%xmm0,%xmm6
262	vpxor	%xmm6,%xmm3,%xmm3
263	vpclmulqdq	$0x11,64(%rdi),%xmm0,%xmm6
264	vpxor	%xmm6,%xmm4,%xmm4
265	vpclmulqdq	$0x10,64(%rdi),%xmm0,%xmm6
266	vpxor	%xmm6,%xmm5,%xmm5
267
268
269	vpxor	%xmm7,%xmm1,%xmm1
270
271	vmovdqu	32(%rsi),%xmm0
272
273	vpclmulqdq	$0x01,80(%rdi),%xmm0,%xmm6
274	vpxor	%xmm6,%xmm5,%xmm5
275	vpclmulqdq	$0x00,80(%rdi),%xmm0,%xmm6
276	vpxor	%xmm6,%xmm3,%xmm3
277	vpclmulqdq	$0x11,80(%rdi),%xmm0,%xmm6
278	vpxor	%xmm6,%xmm4,%xmm4
279	vpclmulqdq	$0x10,80(%rdi),%xmm0,%xmm6
280	vpxor	%xmm6,%xmm5,%xmm5
281
282
283	vpxor	%xmm9,%xmm1,%xmm1
284
285	vmovdqu	16(%rsi),%xmm0
286
287	vpclmulqdq	$0x01,96(%rdi),%xmm0,%xmm6
288	vpxor	%xmm6,%xmm5,%xmm5
289	vpclmulqdq	$0x00,96(%rdi),%xmm0,%xmm6
290	vpxor	%xmm6,%xmm3,%xmm3
291	vpclmulqdq	$0x11,96(%rdi),%xmm0,%xmm6
292	vpxor	%xmm6,%xmm4,%xmm4
293	vpclmulqdq	$0x10,96(%rdi),%xmm0,%xmm6
294	vpxor	%xmm6,%xmm5,%xmm5
295
296
297	vmovdqu	0(%rsi),%xmm0
298	vpxor	%xmm1,%xmm0,%xmm0
299
300	vpclmulqdq	$0x01,112(%rdi),%xmm0,%xmm6
301	vpxor	%xmm6,%xmm5,%xmm5
302	vpclmulqdq	$0x00,112(%rdi),%xmm0,%xmm6
303	vpxor	%xmm6,%xmm3,%xmm3
304	vpclmulqdq	$0x11,112(%rdi),%xmm0,%xmm6
305	vpxor	%xmm6,%xmm4,%xmm4
306	vpclmulqdq	$0x10,112(%rdi),%xmm0,%xmm6
307	vpxor	%xmm6,%xmm5,%xmm5
308
309
310	vpsrldq	$8,%xmm5,%xmm6
311	vpslldq	$8,%xmm5,%xmm5
312
313	vpxor	%xmm6,%xmm4,%xmm9
314	vpxor	%xmm5,%xmm3,%xmm1
315
316	leaq	128(%rsi),%rsi
317	jmp	.Lhtable_polyval_main_loop
318
319
320
321.Lhtable_polyval_out:
322	vpclmulqdq	$0x10,poly(%rip),%xmm1,%xmm6
323	vpalignr	$8,%xmm1,%xmm1,%xmm1
324	vpxor	%xmm6,%xmm1,%xmm1
325
326	vpclmulqdq	$0x10,poly(%rip),%xmm1,%xmm6
327	vpalignr	$8,%xmm1,%xmm1,%xmm1
328	vpxor	%xmm6,%xmm1,%xmm1
329	vpxor	%xmm9,%xmm1,%xmm1
330
331	vmovdqu	%xmm1,(%rcx)
332	vzeroupper
333	ret
334.cfi_endproc
335.size	aesgcmsiv_htable_polyval,.-aesgcmsiv_htable_polyval
336.globl	aesgcmsiv_polyval_horner
337.hidden aesgcmsiv_polyval_horner
338.type	aesgcmsiv_polyval_horner,@function
339.align	16
340aesgcmsiv_polyval_horner:
341.cfi_startproc
342_CET_ENDBR
343	testq	%rcx,%rcx
344	jnz	.Lpolyval_horner_start
345	ret
346
347.Lpolyval_horner_start:
348
349
350
351	xorq	%r10,%r10
352	shlq	$4,%rcx
353
354	vmovdqa	(%rsi),%xmm1
355	vmovdqa	(%rdi),%xmm0
356
357.Lpolyval_horner_loop:
358	vpxor	(%rdx,%r10,1),%xmm0,%xmm0
359	call	GFMUL
360
361	addq	$16,%r10
362	cmpq	%r10,%rcx
363	jne	.Lpolyval_horner_loop
364
365
366	vmovdqa	%xmm0,(%rdi)
367	ret
368.cfi_endproc
369.size	aesgcmsiv_polyval_horner,.-aesgcmsiv_polyval_horner
370.globl	aes128gcmsiv_aes_ks
371.hidden aes128gcmsiv_aes_ks
372.type	aes128gcmsiv_aes_ks,@function
373.align	16
374aes128gcmsiv_aes_ks:
375.cfi_startproc
376_CET_ENDBR
377	vmovdqu	(%rdi),%xmm1
378	vmovdqa	%xmm1,(%rsi)
379
380	vmovdqa	con1(%rip),%xmm0
381	vmovdqa	mask(%rip),%xmm15
382
383	movq	$8,%rax
384
385.Lks128_loop:
386	addq	$16,%rsi
387	subq	$1,%rax
388	vpshufb	%xmm15,%xmm1,%xmm2
389	vaesenclast	%xmm0,%xmm2,%xmm2
390	vpslld	$1,%xmm0,%xmm0
391	vpslldq	$4,%xmm1,%xmm3
392	vpxor	%xmm3,%xmm1,%xmm1
393	vpslldq	$4,%xmm3,%xmm3
394	vpxor	%xmm3,%xmm1,%xmm1
395	vpslldq	$4,%xmm3,%xmm3
396	vpxor	%xmm3,%xmm1,%xmm1
397	vpxor	%xmm2,%xmm1,%xmm1
398	vmovdqa	%xmm1,(%rsi)
399	jne	.Lks128_loop
400
401	vmovdqa	con2(%rip),%xmm0
402	vpshufb	%xmm15,%xmm1,%xmm2
403	vaesenclast	%xmm0,%xmm2,%xmm2
404	vpslld	$1,%xmm0,%xmm0
405	vpslldq	$4,%xmm1,%xmm3
406	vpxor	%xmm3,%xmm1,%xmm1
407	vpslldq	$4,%xmm3,%xmm3
408	vpxor	%xmm3,%xmm1,%xmm1
409	vpslldq	$4,%xmm3,%xmm3
410	vpxor	%xmm3,%xmm1,%xmm1
411	vpxor	%xmm2,%xmm1,%xmm1
412	vmovdqa	%xmm1,16(%rsi)
413
414	vpshufb	%xmm15,%xmm1,%xmm2
415	vaesenclast	%xmm0,%xmm2,%xmm2
416	vpslldq	$4,%xmm1,%xmm3
417	vpxor	%xmm3,%xmm1,%xmm1
418	vpslldq	$4,%xmm3,%xmm3
419	vpxor	%xmm3,%xmm1,%xmm1
420	vpslldq	$4,%xmm3,%xmm3
421	vpxor	%xmm3,%xmm1,%xmm1
422	vpxor	%xmm2,%xmm1,%xmm1
423	vmovdqa	%xmm1,32(%rsi)
424	ret
425.cfi_endproc
426.size	aes128gcmsiv_aes_ks,.-aes128gcmsiv_aes_ks
427.globl	aes256gcmsiv_aes_ks
428.hidden aes256gcmsiv_aes_ks
429.type	aes256gcmsiv_aes_ks,@function
430.align	16
431aes256gcmsiv_aes_ks:
432.cfi_startproc
433_CET_ENDBR
434	vmovdqu	(%rdi),%xmm1
435	vmovdqu	16(%rdi),%xmm3
436	vmovdqa	%xmm1,(%rsi)
437	vmovdqa	%xmm3,16(%rsi)
438	vmovdqa	con1(%rip),%xmm0
439	vmovdqa	mask(%rip),%xmm15
440	vpxor	%xmm14,%xmm14,%xmm14
441	movq	$6,%rax
442
443.Lks256_loop:
444	addq	$32,%rsi
445	subq	$1,%rax
446	vpshufb	%xmm15,%xmm3,%xmm2
447	vaesenclast	%xmm0,%xmm2,%xmm2
448	vpslld	$1,%xmm0,%xmm0
449	vpsllq	$32,%xmm1,%xmm4
450	vpxor	%xmm4,%xmm1,%xmm1
451	vpshufb	con3(%rip),%xmm1,%xmm4
452	vpxor	%xmm4,%xmm1,%xmm1
453	vpxor	%xmm2,%xmm1,%xmm1
454	vmovdqa	%xmm1,(%rsi)
455	vpshufd	$0xff,%xmm1,%xmm2
456	vaesenclast	%xmm14,%xmm2,%xmm2
457	vpsllq	$32,%xmm3,%xmm4
458	vpxor	%xmm4,%xmm3,%xmm3
459	vpshufb	con3(%rip),%xmm3,%xmm4
460	vpxor	%xmm4,%xmm3,%xmm3
461	vpxor	%xmm2,%xmm3,%xmm3
462	vmovdqa	%xmm3,16(%rsi)
463	jne	.Lks256_loop
464
465	vpshufb	%xmm15,%xmm3,%xmm2
466	vaesenclast	%xmm0,%xmm2,%xmm2
467	vpsllq	$32,%xmm1,%xmm4
468	vpxor	%xmm4,%xmm1,%xmm1
469	vpshufb	con3(%rip),%xmm1,%xmm4
470	vpxor	%xmm4,%xmm1,%xmm1
471	vpxor	%xmm2,%xmm1,%xmm1
472	vmovdqa	%xmm1,32(%rsi)
473	ret
474.cfi_endproc
475.globl	aes128gcmsiv_aes_ks_enc_x1
476.hidden aes128gcmsiv_aes_ks_enc_x1
477.type	aes128gcmsiv_aes_ks_enc_x1,@function
478.align	16
479aes128gcmsiv_aes_ks_enc_x1:
480.cfi_startproc
481_CET_ENDBR
482	vmovdqa	(%rcx),%xmm1
483	vmovdqa	0(%rdi),%xmm4
484
485	vmovdqa	%xmm1,(%rdx)
486	vpxor	%xmm1,%xmm4,%xmm4
487
488	vmovdqa	con1(%rip),%xmm0
489	vmovdqa	mask(%rip),%xmm15
490
491	vpshufb	%xmm15,%xmm1,%xmm2
492	vaesenclast	%xmm0,%xmm2,%xmm2
493	vpslld	$1,%xmm0,%xmm0
494	vpsllq	$32,%xmm1,%xmm3
495	vpxor	%xmm3,%xmm1,%xmm1
496	vpshufb	con3(%rip),%xmm1,%xmm3
497	vpxor	%xmm3,%xmm1,%xmm1
498	vpxor	%xmm2,%xmm1,%xmm1
499
500	vaesenc	%xmm1,%xmm4,%xmm4
501	vmovdqa	%xmm1,16(%rdx)
502
503	vpshufb	%xmm15,%xmm1,%xmm2
504	vaesenclast	%xmm0,%xmm2,%xmm2
505	vpslld	$1,%xmm0,%xmm0
506	vpsllq	$32,%xmm1,%xmm3
507	vpxor	%xmm3,%xmm1,%xmm1
508	vpshufb	con3(%rip),%xmm1,%xmm3
509	vpxor	%xmm3,%xmm1,%xmm1
510	vpxor	%xmm2,%xmm1,%xmm1
511
512	vaesenc	%xmm1,%xmm4,%xmm4
513	vmovdqa	%xmm1,32(%rdx)
514
515	vpshufb	%xmm15,%xmm1,%xmm2
516	vaesenclast	%xmm0,%xmm2,%xmm2
517	vpslld	$1,%xmm0,%xmm0
518	vpsllq	$32,%xmm1,%xmm3
519	vpxor	%xmm3,%xmm1,%xmm1
520	vpshufb	con3(%rip),%xmm1,%xmm3
521	vpxor	%xmm3,%xmm1,%xmm1
522	vpxor	%xmm2,%xmm1,%xmm1
523
524	vaesenc	%xmm1,%xmm4,%xmm4
525	vmovdqa	%xmm1,48(%rdx)
526
527	vpshufb	%xmm15,%xmm1,%xmm2
528	vaesenclast	%xmm0,%xmm2,%xmm2
529	vpslld	$1,%xmm0,%xmm0
530	vpsllq	$32,%xmm1,%xmm3
531	vpxor	%xmm3,%xmm1,%xmm1
532	vpshufb	con3(%rip),%xmm1,%xmm3
533	vpxor	%xmm3,%xmm1,%xmm1
534	vpxor	%xmm2,%xmm1,%xmm1
535
536	vaesenc	%xmm1,%xmm4,%xmm4
537	vmovdqa	%xmm1,64(%rdx)
538
539	vpshufb	%xmm15,%xmm1,%xmm2
540	vaesenclast	%xmm0,%xmm2,%xmm2
541	vpslld	$1,%xmm0,%xmm0
542	vpsllq	$32,%xmm1,%xmm3
543	vpxor	%xmm3,%xmm1,%xmm1
544	vpshufb	con3(%rip),%xmm1,%xmm3
545	vpxor	%xmm3,%xmm1,%xmm1
546	vpxor	%xmm2,%xmm1,%xmm1
547
548	vaesenc	%xmm1,%xmm4,%xmm4
549	vmovdqa	%xmm1,80(%rdx)
550
551	vpshufb	%xmm15,%xmm1,%xmm2
552	vaesenclast	%xmm0,%xmm2,%xmm2
553	vpslld	$1,%xmm0,%xmm0
554	vpsllq	$32,%xmm1,%xmm3
555	vpxor	%xmm3,%xmm1,%xmm1
556	vpshufb	con3(%rip),%xmm1,%xmm3
557	vpxor	%xmm3,%xmm1,%xmm1
558	vpxor	%xmm2,%xmm1,%xmm1
559
560	vaesenc	%xmm1,%xmm4,%xmm4
561	vmovdqa	%xmm1,96(%rdx)
562
563	vpshufb	%xmm15,%xmm1,%xmm2
564	vaesenclast	%xmm0,%xmm2,%xmm2
565	vpslld	$1,%xmm0,%xmm0
566	vpsllq	$32,%xmm1,%xmm3
567	vpxor	%xmm3,%xmm1,%xmm1
568	vpshufb	con3(%rip),%xmm1,%xmm3
569	vpxor	%xmm3,%xmm1,%xmm1
570	vpxor	%xmm2,%xmm1,%xmm1
571
572	vaesenc	%xmm1,%xmm4,%xmm4
573	vmovdqa	%xmm1,112(%rdx)
574
575	vpshufb	%xmm15,%xmm1,%xmm2
576	vaesenclast	%xmm0,%xmm2,%xmm2
577	vpslld	$1,%xmm0,%xmm0
578	vpsllq	$32,%xmm1,%xmm3
579	vpxor	%xmm3,%xmm1,%xmm1
580	vpshufb	con3(%rip),%xmm1,%xmm3
581	vpxor	%xmm3,%xmm1,%xmm1
582	vpxor	%xmm2,%xmm1,%xmm1
583
584	vaesenc	%xmm1,%xmm4,%xmm4
585	vmovdqa	%xmm1,128(%rdx)
586
587
588	vmovdqa	con2(%rip),%xmm0
589
590	vpshufb	%xmm15,%xmm1,%xmm2
591	vaesenclast	%xmm0,%xmm2,%xmm2
592	vpslld	$1,%xmm0,%xmm0
593	vpsllq	$32,%xmm1,%xmm3
594	vpxor	%xmm3,%xmm1,%xmm1
595	vpshufb	con3(%rip),%xmm1,%xmm3
596	vpxor	%xmm3,%xmm1,%xmm1
597	vpxor	%xmm2,%xmm1,%xmm1
598
599	vaesenc	%xmm1,%xmm4,%xmm4
600	vmovdqa	%xmm1,144(%rdx)
601
602	vpshufb	%xmm15,%xmm1,%xmm2
603	vaesenclast	%xmm0,%xmm2,%xmm2
604	vpsllq	$32,%xmm1,%xmm3
605	vpxor	%xmm3,%xmm1,%xmm1
606	vpshufb	con3(%rip),%xmm1,%xmm3
607	vpxor	%xmm3,%xmm1,%xmm1
608	vpxor	%xmm2,%xmm1,%xmm1
609
610	vaesenclast	%xmm1,%xmm4,%xmm4
611	vmovdqa	%xmm1,160(%rdx)
612
613
614	vmovdqa	%xmm4,0(%rsi)
615	ret
616.cfi_endproc
617.size	aes128gcmsiv_aes_ks_enc_x1,.-aes128gcmsiv_aes_ks_enc_x1
618.globl	aes128gcmsiv_kdf
619.hidden aes128gcmsiv_kdf
620.type	aes128gcmsiv_kdf,@function
621.align	16
622aes128gcmsiv_kdf:
623.cfi_startproc
624_CET_ENDBR
625
626
627
628
629	vmovdqa	(%rdx),%xmm1
630	vmovdqa	0(%rdi),%xmm9
631	vmovdqa	and_mask(%rip),%xmm12
632	vmovdqa	one(%rip),%xmm13
633	vpshufd	$0x90,%xmm9,%xmm9
634	vpand	%xmm12,%xmm9,%xmm9
635	vpaddd	%xmm13,%xmm9,%xmm10
636	vpaddd	%xmm13,%xmm10,%xmm11
637	vpaddd	%xmm13,%xmm11,%xmm12
638
639	vpxor	%xmm1,%xmm9,%xmm9
640	vpxor	%xmm1,%xmm10,%xmm10
641	vpxor	%xmm1,%xmm11,%xmm11
642	vpxor	%xmm1,%xmm12,%xmm12
643
644	vmovdqa	16(%rdx),%xmm1
645	vaesenc	%xmm1,%xmm9,%xmm9
646	vaesenc	%xmm1,%xmm10,%xmm10
647	vaesenc	%xmm1,%xmm11,%xmm11
648	vaesenc	%xmm1,%xmm12,%xmm12
649
650	vmovdqa	32(%rdx),%xmm2
651	vaesenc	%xmm2,%xmm9,%xmm9
652	vaesenc	%xmm2,%xmm10,%xmm10
653	vaesenc	%xmm2,%xmm11,%xmm11
654	vaesenc	%xmm2,%xmm12,%xmm12
655
656	vmovdqa	48(%rdx),%xmm1
657	vaesenc	%xmm1,%xmm9,%xmm9
658	vaesenc	%xmm1,%xmm10,%xmm10
659	vaesenc	%xmm1,%xmm11,%xmm11
660	vaesenc	%xmm1,%xmm12,%xmm12
661
662	vmovdqa	64(%rdx),%xmm2
663	vaesenc	%xmm2,%xmm9,%xmm9
664	vaesenc	%xmm2,%xmm10,%xmm10
665	vaesenc	%xmm2,%xmm11,%xmm11
666	vaesenc	%xmm2,%xmm12,%xmm12
667
668	vmovdqa	80(%rdx),%xmm1
669	vaesenc	%xmm1,%xmm9,%xmm9
670	vaesenc	%xmm1,%xmm10,%xmm10
671	vaesenc	%xmm1,%xmm11,%xmm11
672	vaesenc	%xmm1,%xmm12,%xmm12
673
674	vmovdqa	96(%rdx),%xmm2
675	vaesenc	%xmm2,%xmm9,%xmm9
676	vaesenc	%xmm2,%xmm10,%xmm10
677	vaesenc	%xmm2,%xmm11,%xmm11
678	vaesenc	%xmm2,%xmm12,%xmm12
679
680	vmovdqa	112(%rdx),%xmm1
681	vaesenc	%xmm1,%xmm9,%xmm9
682	vaesenc	%xmm1,%xmm10,%xmm10
683	vaesenc	%xmm1,%xmm11,%xmm11
684	vaesenc	%xmm1,%xmm12,%xmm12
685
686	vmovdqa	128(%rdx),%xmm2
687	vaesenc	%xmm2,%xmm9,%xmm9
688	vaesenc	%xmm2,%xmm10,%xmm10
689	vaesenc	%xmm2,%xmm11,%xmm11
690	vaesenc	%xmm2,%xmm12,%xmm12
691
692	vmovdqa	144(%rdx),%xmm1
693	vaesenc	%xmm1,%xmm9,%xmm9
694	vaesenc	%xmm1,%xmm10,%xmm10
695	vaesenc	%xmm1,%xmm11,%xmm11
696	vaesenc	%xmm1,%xmm12,%xmm12
697
698	vmovdqa	160(%rdx),%xmm2
699	vaesenclast	%xmm2,%xmm9,%xmm9
700	vaesenclast	%xmm2,%xmm10,%xmm10
701	vaesenclast	%xmm2,%xmm11,%xmm11
702	vaesenclast	%xmm2,%xmm12,%xmm12
703
704
705	vmovdqa	%xmm9,0(%rsi)
706	vmovdqa	%xmm10,16(%rsi)
707	vmovdqa	%xmm11,32(%rsi)
708	vmovdqa	%xmm12,48(%rsi)
709	ret
710.cfi_endproc
711.size	aes128gcmsiv_kdf,.-aes128gcmsiv_kdf
712.globl	aes128gcmsiv_enc_msg_x4
713.hidden aes128gcmsiv_enc_msg_x4
714.type	aes128gcmsiv_enc_msg_x4,@function
715.align	16
716aes128gcmsiv_enc_msg_x4:
717.cfi_startproc
718_CET_ENDBR
719	testq	%r8,%r8
720	jnz	.L128_enc_msg_x4_start
721	ret
722
723.L128_enc_msg_x4_start:
724	pushq	%r12
725.cfi_adjust_cfa_offset	8
726.cfi_offset	%r12,-16
727	pushq	%r13
728.cfi_adjust_cfa_offset	8
729.cfi_offset	%r13,-24
730
731	shrq	$4,%r8
732	movq	%r8,%r10
733	shlq	$62,%r10
734	shrq	$62,%r10
735
736
737	vmovdqa	(%rdx),%xmm15
738	vpor	OR_MASK(%rip),%xmm15,%xmm15
739
740	vmovdqu	four(%rip),%xmm4
741	vmovdqa	%xmm15,%xmm0
742	vpaddd	one(%rip),%xmm15,%xmm1
743	vpaddd	two(%rip),%xmm15,%xmm2
744	vpaddd	three(%rip),%xmm15,%xmm3
745
746	shrq	$2,%r8
747	je	.L128_enc_msg_x4_check_remainder
748
749	subq	$64,%rsi
750	subq	$64,%rdi
751
752.L128_enc_msg_x4_loop1:
753	addq	$64,%rsi
754	addq	$64,%rdi
755
756	vmovdqa	%xmm0,%xmm5
757	vmovdqa	%xmm1,%xmm6
758	vmovdqa	%xmm2,%xmm7
759	vmovdqa	%xmm3,%xmm8
760
761	vpxor	(%rcx),%xmm5,%xmm5
762	vpxor	(%rcx),%xmm6,%xmm6
763	vpxor	(%rcx),%xmm7,%xmm7
764	vpxor	(%rcx),%xmm8,%xmm8
765
766	vmovdqu	16(%rcx),%xmm12
767	vaesenc	%xmm12,%xmm5,%xmm5
768	vaesenc	%xmm12,%xmm6,%xmm6
769	vaesenc	%xmm12,%xmm7,%xmm7
770	vaesenc	%xmm12,%xmm8,%xmm8
771
772	vpaddd	%xmm4,%xmm0,%xmm0
773	vmovdqu	32(%rcx),%xmm12
774	vaesenc	%xmm12,%xmm5,%xmm5
775	vaesenc	%xmm12,%xmm6,%xmm6
776	vaesenc	%xmm12,%xmm7,%xmm7
777	vaesenc	%xmm12,%xmm8,%xmm8
778
779	vpaddd	%xmm4,%xmm1,%xmm1
780	vmovdqu	48(%rcx),%xmm12
781	vaesenc	%xmm12,%xmm5,%xmm5
782	vaesenc	%xmm12,%xmm6,%xmm6
783	vaesenc	%xmm12,%xmm7,%xmm7
784	vaesenc	%xmm12,%xmm8,%xmm8
785
786	vpaddd	%xmm4,%xmm2,%xmm2
787	vmovdqu	64(%rcx),%xmm12
788	vaesenc	%xmm12,%xmm5,%xmm5
789	vaesenc	%xmm12,%xmm6,%xmm6
790	vaesenc	%xmm12,%xmm7,%xmm7
791	vaesenc	%xmm12,%xmm8,%xmm8
792
793	vpaddd	%xmm4,%xmm3,%xmm3
794
795	vmovdqu	80(%rcx),%xmm12
796	vaesenc	%xmm12,%xmm5,%xmm5
797	vaesenc	%xmm12,%xmm6,%xmm6
798	vaesenc	%xmm12,%xmm7,%xmm7
799	vaesenc	%xmm12,%xmm8,%xmm8
800
801	vmovdqu	96(%rcx),%xmm12
802	vaesenc	%xmm12,%xmm5,%xmm5
803	vaesenc	%xmm12,%xmm6,%xmm6
804	vaesenc	%xmm12,%xmm7,%xmm7
805	vaesenc	%xmm12,%xmm8,%xmm8
806
807	vmovdqu	112(%rcx),%xmm12
808	vaesenc	%xmm12,%xmm5,%xmm5
809	vaesenc	%xmm12,%xmm6,%xmm6
810	vaesenc	%xmm12,%xmm7,%xmm7
811	vaesenc	%xmm12,%xmm8,%xmm8
812
813	vmovdqu	128(%rcx),%xmm12
814	vaesenc	%xmm12,%xmm5,%xmm5
815	vaesenc	%xmm12,%xmm6,%xmm6
816	vaesenc	%xmm12,%xmm7,%xmm7
817	vaesenc	%xmm12,%xmm8,%xmm8
818
819	vmovdqu	144(%rcx),%xmm12
820	vaesenc	%xmm12,%xmm5,%xmm5
821	vaesenc	%xmm12,%xmm6,%xmm6
822	vaesenc	%xmm12,%xmm7,%xmm7
823	vaesenc	%xmm12,%xmm8,%xmm8
824
825	vmovdqu	160(%rcx),%xmm12
826	vaesenclast	%xmm12,%xmm5,%xmm5
827	vaesenclast	%xmm12,%xmm6,%xmm6
828	vaesenclast	%xmm12,%xmm7,%xmm7
829	vaesenclast	%xmm12,%xmm8,%xmm8
830
831
832
833	vpxor	0(%rdi),%xmm5,%xmm5
834	vpxor	16(%rdi),%xmm6,%xmm6
835	vpxor	32(%rdi),%xmm7,%xmm7
836	vpxor	48(%rdi),%xmm8,%xmm8
837
838	subq	$1,%r8
839
840	vmovdqu	%xmm5,0(%rsi)
841	vmovdqu	%xmm6,16(%rsi)
842	vmovdqu	%xmm7,32(%rsi)
843	vmovdqu	%xmm8,48(%rsi)
844
845	jne	.L128_enc_msg_x4_loop1
846
847	addq	$64,%rsi
848	addq	$64,%rdi
849
850.L128_enc_msg_x4_check_remainder:
851	cmpq	$0,%r10
852	je	.L128_enc_msg_x4_out
853
854.L128_enc_msg_x4_loop2:
855
856
857	vmovdqa	%xmm0,%xmm5
858	vpaddd	one(%rip),%xmm0,%xmm0
859
860	vpxor	(%rcx),%xmm5,%xmm5
861	vaesenc	16(%rcx),%xmm5,%xmm5
862	vaesenc	32(%rcx),%xmm5,%xmm5
863	vaesenc	48(%rcx),%xmm5,%xmm5
864	vaesenc	64(%rcx),%xmm5,%xmm5
865	vaesenc	80(%rcx),%xmm5,%xmm5
866	vaesenc	96(%rcx),%xmm5,%xmm5
867	vaesenc	112(%rcx),%xmm5,%xmm5
868	vaesenc	128(%rcx),%xmm5,%xmm5
869	vaesenc	144(%rcx),%xmm5,%xmm5
870	vaesenclast	160(%rcx),%xmm5,%xmm5
871
872
873	vpxor	(%rdi),%xmm5,%xmm5
874	vmovdqu	%xmm5,(%rsi)
875
876	addq	$16,%rdi
877	addq	$16,%rsi
878
879	subq	$1,%r10
880	jne	.L128_enc_msg_x4_loop2
881
882.L128_enc_msg_x4_out:
883	popq	%r13
884.cfi_adjust_cfa_offset	-8
885.cfi_restore	%r13
886	popq	%r12
887.cfi_adjust_cfa_offset	-8
888.cfi_restore	%r12
889	ret
890.cfi_endproc
891.size	aes128gcmsiv_enc_msg_x4,.-aes128gcmsiv_enc_msg_x4
892.globl	aes128gcmsiv_enc_msg_x8
893.hidden aes128gcmsiv_enc_msg_x8
894.type	aes128gcmsiv_enc_msg_x8,@function
895.align	16
896aes128gcmsiv_enc_msg_x8:
897.cfi_startproc
898_CET_ENDBR
899	testq	%r8,%r8
900	jnz	.L128_enc_msg_x8_start
901	ret
902
903.L128_enc_msg_x8_start:
904	pushq	%r12
905.cfi_adjust_cfa_offset	8
906.cfi_offset	%r12,-16
907	pushq	%r13
908.cfi_adjust_cfa_offset	8
909.cfi_offset	%r13,-24
910	pushq	%rbp
911.cfi_adjust_cfa_offset	8
912.cfi_offset	%rbp,-32
913	movq	%rsp,%rbp
914.cfi_def_cfa_register	rbp
915
916
917	subq	$128,%rsp
918	andq	$-64,%rsp
919
920	shrq	$4,%r8
921	movq	%r8,%r10
922	shlq	$61,%r10
923	shrq	$61,%r10
924
925
926	vmovdqu	(%rdx),%xmm1
927	vpor	OR_MASK(%rip),%xmm1,%xmm1
928
929
930	vpaddd	seven(%rip),%xmm1,%xmm0
931	vmovdqu	%xmm0,(%rsp)
932	vpaddd	one(%rip),%xmm1,%xmm9
933	vpaddd	two(%rip),%xmm1,%xmm10
934	vpaddd	three(%rip),%xmm1,%xmm11
935	vpaddd	four(%rip),%xmm1,%xmm12
936	vpaddd	five(%rip),%xmm1,%xmm13
937	vpaddd	six(%rip),%xmm1,%xmm14
938	vmovdqa	%xmm1,%xmm0
939
940	shrq	$3,%r8
941	je	.L128_enc_msg_x8_check_remainder
942
943	subq	$128,%rsi
944	subq	$128,%rdi
945
946.L128_enc_msg_x8_loop1:
947	addq	$128,%rsi
948	addq	$128,%rdi
949
950	vmovdqa	%xmm0,%xmm1
951	vmovdqa	%xmm9,%xmm2
952	vmovdqa	%xmm10,%xmm3
953	vmovdqa	%xmm11,%xmm4
954	vmovdqa	%xmm12,%xmm5
955	vmovdqa	%xmm13,%xmm6
956	vmovdqa	%xmm14,%xmm7
957
958	vmovdqu	(%rsp),%xmm8
959
960	vpxor	(%rcx),%xmm1,%xmm1
961	vpxor	(%rcx),%xmm2,%xmm2
962	vpxor	(%rcx),%xmm3,%xmm3
963	vpxor	(%rcx),%xmm4,%xmm4
964	vpxor	(%rcx),%xmm5,%xmm5
965	vpxor	(%rcx),%xmm6,%xmm6
966	vpxor	(%rcx),%xmm7,%xmm7
967	vpxor	(%rcx),%xmm8,%xmm8
968
969	vmovdqu	16(%rcx),%xmm15
970	vaesenc	%xmm15,%xmm1,%xmm1
971	vaesenc	%xmm15,%xmm2,%xmm2
972	vaesenc	%xmm15,%xmm3,%xmm3
973	vaesenc	%xmm15,%xmm4,%xmm4
974	vaesenc	%xmm15,%xmm5,%xmm5
975	vaesenc	%xmm15,%xmm6,%xmm6
976	vaesenc	%xmm15,%xmm7,%xmm7
977	vaesenc	%xmm15,%xmm8,%xmm8
978
979	vmovdqu	(%rsp),%xmm14
980	vpaddd	eight(%rip),%xmm14,%xmm14
981	vmovdqu	%xmm14,(%rsp)
982	vmovdqu	32(%rcx),%xmm15
983	vaesenc	%xmm15,%xmm1,%xmm1
984	vaesenc	%xmm15,%xmm2,%xmm2
985	vaesenc	%xmm15,%xmm3,%xmm3
986	vaesenc	%xmm15,%xmm4,%xmm4
987	vaesenc	%xmm15,%xmm5,%xmm5
988	vaesenc	%xmm15,%xmm6,%xmm6
989	vaesenc	%xmm15,%xmm7,%xmm7
990	vaesenc	%xmm15,%xmm8,%xmm8
991
992	vpsubd	one(%rip),%xmm14,%xmm14
993	vmovdqu	48(%rcx),%xmm15
994	vaesenc	%xmm15,%xmm1,%xmm1
995	vaesenc	%xmm15,%xmm2,%xmm2
996	vaesenc	%xmm15,%xmm3,%xmm3
997	vaesenc	%xmm15,%xmm4,%xmm4
998	vaesenc	%xmm15,%xmm5,%xmm5
999	vaesenc	%xmm15,%xmm6,%xmm6
1000	vaesenc	%xmm15,%xmm7,%xmm7
1001	vaesenc	%xmm15,%xmm8,%xmm8
1002
1003	vpaddd	eight(%rip),%xmm0,%xmm0
1004	vmovdqu	64(%rcx),%xmm15
1005	vaesenc	%xmm15,%xmm1,%xmm1
1006	vaesenc	%xmm15,%xmm2,%xmm2
1007	vaesenc	%xmm15,%xmm3,%xmm3
1008	vaesenc	%xmm15,%xmm4,%xmm4
1009	vaesenc	%xmm15,%xmm5,%xmm5
1010	vaesenc	%xmm15,%xmm6,%xmm6
1011	vaesenc	%xmm15,%xmm7,%xmm7
1012	vaesenc	%xmm15,%xmm8,%xmm8
1013
1014	vpaddd	eight(%rip),%xmm9,%xmm9
1015	vmovdqu	80(%rcx),%xmm15
1016	vaesenc	%xmm15,%xmm1,%xmm1
1017	vaesenc	%xmm15,%xmm2,%xmm2
1018	vaesenc	%xmm15,%xmm3,%xmm3
1019	vaesenc	%xmm15,%xmm4,%xmm4
1020	vaesenc	%xmm15,%xmm5,%xmm5
1021	vaesenc	%xmm15,%xmm6,%xmm6
1022	vaesenc	%xmm15,%xmm7,%xmm7
1023	vaesenc	%xmm15,%xmm8,%xmm8
1024
1025	vpaddd	eight(%rip),%xmm10,%xmm10
1026	vmovdqu	96(%rcx),%xmm15
1027	vaesenc	%xmm15,%xmm1,%xmm1
1028	vaesenc	%xmm15,%xmm2,%xmm2
1029	vaesenc	%xmm15,%xmm3,%xmm3
1030	vaesenc	%xmm15,%xmm4,%xmm4
1031	vaesenc	%xmm15,%xmm5,%xmm5
1032	vaesenc	%xmm15,%xmm6,%xmm6
1033	vaesenc	%xmm15,%xmm7,%xmm7
1034	vaesenc	%xmm15,%xmm8,%xmm8
1035
1036	vpaddd	eight(%rip),%xmm11,%xmm11
1037	vmovdqu	112(%rcx),%xmm15
1038	vaesenc	%xmm15,%xmm1,%xmm1
1039	vaesenc	%xmm15,%xmm2,%xmm2
1040	vaesenc	%xmm15,%xmm3,%xmm3
1041	vaesenc	%xmm15,%xmm4,%xmm4
1042	vaesenc	%xmm15,%xmm5,%xmm5
1043	vaesenc	%xmm15,%xmm6,%xmm6
1044	vaesenc	%xmm15,%xmm7,%xmm7
1045	vaesenc	%xmm15,%xmm8,%xmm8
1046
1047	vpaddd	eight(%rip),%xmm12,%xmm12
1048	vmovdqu	128(%rcx),%xmm15
1049	vaesenc	%xmm15,%xmm1,%xmm1
1050	vaesenc	%xmm15,%xmm2,%xmm2
1051	vaesenc	%xmm15,%xmm3,%xmm3
1052	vaesenc	%xmm15,%xmm4,%xmm4
1053	vaesenc	%xmm15,%xmm5,%xmm5
1054	vaesenc	%xmm15,%xmm6,%xmm6
1055	vaesenc	%xmm15,%xmm7,%xmm7
1056	vaesenc	%xmm15,%xmm8,%xmm8
1057
1058	vpaddd	eight(%rip),%xmm13,%xmm13
1059	vmovdqu	144(%rcx),%xmm15
1060	vaesenc	%xmm15,%xmm1,%xmm1
1061	vaesenc	%xmm15,%xmm2,%xmm2
1062	vaesenc	%xmm15,%xmm3,%xmm3
1063	vaesenc	%xmm15,%xmm4,%xmm4
1064	vaesenc	%xmm15,%xmm5,%xmm5
1065	vaesenc	%xmm15,%xmm6,%xmm6
1066	vaesenc	%xmm15,%xmm7,%xmm7
1067	vaesenc	%xmm15,%xmm8,%xmm8
1068
1069	vmovdqu	160(%rcx),%xmm15
1070	vaesenclast	%xmm15,%xmm1,%xmm1
1071	vaesenclast	%xmm15,%xmm2,%xmm2
1072	vaesenclast	%xmm15,%xmm3,%xmm3
1073	vaesenclast	%xmm15,%xmm4,%xmm4
1074	vaesenclast	%xmm15,%xmm5,%xmm5
1075	vaesenclast	%xmm15,%xmm6,%xmm6
1076	vaesenclast	%xmm15,%xmm7,%xmm7
1077	vaesenclast	%xmm15,%xmm8,%xmm8
1078
1079
1080
1081	vpxor	0(%rdi),%xmm1,%xmm1
1082	vpxor	16(%rdi),%xmm2,%xmm2
1083	vpxor	32(%rdi),%xmm3,%xmm3
1084	vpxor	48(%rdi),%xmm4,%xmm4
1085	vpxor	64(%rdi),%xmm5,%xmm5
1086	vpxor	80(%rdi),%xmm6,%xmm6
1087	vpxor	96(%rdi),%xmm7,%xmm7
1088	vpxor	112(%rdi),%xmm8,%xmm8
1089
1090	decq	%r8
1091
1092	vmovdqu	%xmm1,0(%rsi)
1093	vmovdqu	%xmm2,16(%rsi)
1094	vmovdqu	%xmm3,32(%rsi)
1095	vmovdqu	%xmm4,48(%rsi)
1096	vmovdqu	%xmm5,64(%rsi)
1097	vmovdqu	%xmm6,80(%rsi)
1098	vmovdqu	%xmm7,96(%rsi)
1099	vmovdqu	%xmm8,112(%rsi)
1100
1101	jne	.L128_enc_msg_x8_loop1
1102
1103	addq	$128,%rsi
1104	addq	$128,%rdi
1105
1106.L128_enc_msg_x8_check_remainder:
1107	cmpq	$0,%r10
1108	je	.L128_enc_msg_x8_out
1109
1110.L128_enc_msg_x8_loop2:
1111
1112
1113	vmovdqa	%xmm0,%xmm1
1114	vpaddd	one(%rip),%xmm0,%xmm0
1115
1116	vpxor	(%rcx),%xmm1,%xmm1
1117	vaesenc	16(%rcx),%xmm1,%xmm1
1118	vaesenc	32(%rcx),%xmm1,%xmm1
1119	vaesenc	48(%rcx),%xmm1,%xmm1
1120	vaesenc	64(%rcx),%xmm1,%xmm1
1121	vaesenc	80(%rcx),%xmm1,%xmm1
1122	vaesenc	96(%rcx),%xmm1,%xmm1
1123	vaesenc	112(%rcx),%xmm1,%xmm1
1124	vaesenc	128(%rcx),%xmm1,%xmm1
1125	vaesenc	144(%rcx),%xmm1,%xmm1
1126	vaesenclast	160(%rcx),%xmm1,%xmm1
1127
1128
1129	vpxor	(%rdi),%xmm1,%xmm1
1130
1131	vmovdqu	%xmm1,(%rsi)
1132
1133	addq	$16,%rdi
1134	addq	$16,%rsi
1135
1136	decq	%r10
1137	jne	.L128_enc_msg_x8_loop2
1138
1139.L128_enc_msg_x8_out:
1140	movq	%rbp,%rsp
1141.cfi_def_cfa_register	%rsp
1142	popq	%rbp
1143.cfi_adjust_cfa_offset	-8
1144.cfi_restore	%rbp
1145	popq	%r13
1146.cfi_adjust_cfa_offset	-8
1147.cfi_restore	%r13
1148	popq	%r12
1149.cfi_adjust_cfa_offset	-8
1150.cfi_restore	%r12
1151	ret
1152.cfi_endproc
1153.size	aes128gcmsiv_enc_msg_x8,.-aes128gcmsiv_enc_msg_x8
1154.globl	aes128gcmsiv_dec
1155.hidden aes128gcmsiv_dec
1156.type	aes128gcmsiv_dec,@function
1157.align	16
1158aes128gcmsiv_dec:
1159.cfi_startproc
1160_CET_ENDBR
1161	testq	$~15,%r9
1162	jnz	.L128_dec_start
1163	ret
1164
1165.L128_dec_start:
1166	vzeroupper
1167	vmovdqa	(%rdx),%xmm0
1168
1169
1170	vmovdqu	16(%rdx),%xmm15
1171	vpor	OR_MASK(%rip),%xmm15,%xmm15
1172	movq	%rdx,%rax
1173
1174	leaq	32(%rax),%rax
1175	leaq	32(%rcx),%rcx
1176
1177	andq	$~15,%r9
1178
1179
1180	cmpq	$96,%r9
1181	jb	.L128_dec_loop2
1182
1183
1184	subq	$96,%r9
1185	vmovdqa	%xmm15,%xmm7
1186	vpaddd	one(%rip),%xmm7,%xmm8
1187	vpaddd	two(%rip),%xmm7,%xmm9
1188	vpaddd	one(%rip),%xmm9,%xmm10
1189	vpaddd	two(%rip),%xmm9,%xmm11
1190	vpaddd	one(%rip),%xmm11,%xmm12
1191	vpaddd	two(%rip),%xmm11,%xmm15
1192
1193	vpxor	(%r8),%xmm7,%xmm7
1194	vpxor	(%r8),%xmm8,%xmm8
1195	vpxor	(%r8),%xmm9,%xmm9
1196	vpxor	(%r8),%xmm10,%xmm10
1197	vpxor	(%r8),%xmm11,%xmm11
1198	vpxor	(%r8),%xmm12,%xmm12
1199
1200	vmovdqu	16(%r8),%xmm4
1201	vaesenc	%xmm4,%xmm7,%xmm7
1202	vaesenc	%xmm4,%xmm8,%xmm8
1203	vaesenc	%xmm4,%xmm9,%xmm9
1204	vaesenc	%xmm4,%xmm10,%xmm10
1205	vaesenc	%xmm4,%xmm11,%xmm11
1206	vaesenc	%xmm4,%xmm12,%xmm12
1207
1208	vmovdqu	32(%r8),%xmm4
1209	vaesenc	%xmm4,%xmm7,%xmm7
1210	vaesenc	%xmm4,%xmm8,%xmm8
1211	vaesenc	%xmm4,%xmm9,%xmm9
1212	vaesenc	%xmm4,%xmm10,%xmm10
1213	vaesenc	%xmm4,%xmm11,%xmm11
1214	vaesenc	%xmm4,%xmm12,%xmm12
1215
1216	vmovdqu	48(%r8),%xmm4
1217	vaesenc	%xmm4,%xmm7,%xmm7
1218	vaesenc	%xmm4,%xmm8,%xmm8
1219	vaesenc	%xmm4,%xmm9,%xmm9
1220	vaesenc	%xmm4,%xmm10,%xmm10
1221	vaesenc	%xmm4,%xmm11,%xmm11
1222	vaesenc	%xmm4,%xmm12,%xmm12
1223
1224	vmovdqu	64(%r8),%xmm4
1225	vaesenc	%xmm4,%xmm7,%xmm7
1226	vaesenc	%xmm4,%xmm8,%xmm8
1227	vaesenc	%xmm4,%xmm9,%xmm9
1228	vaesenc	%xmm4,%xmm10,%xmm10
1229	vaesenc	%xmm4,%xmm11,%xmm11
1230	vaesenc	%xmm4,%xmm12,%xmm12
1231
1232	vmovdqu	80(%r8),%xmm4
1233	vaesenc	%xmm4,%xmm7,%xmm7
1234	vaesenc	%xmm4,%xmm8,%xmm8
1235	vaesenc	%xmm4,%xmm9,%xmm9
1236	vaesenc	%xmm4,%xmm10,%xmm10
1237	vaesenc	%xmm4,%xmm11,%xmm11
1238	vaesenc	%xmm4,%xmm12,%xmm12
1239
1240	vmovdqu	96(%r8),%xmm4
1241	vaesenc	%xmm4,%xmm7,%xmm7
1242	vaesenc	%xmm4,%xmm8,%xmm8
1243	vaesenc	%xmm4,%xmm9,%xmm9
1244	vaesenc	%xmm4,%xmm10,%xmm10
1245	vaesenc	%xmm4,%xmm11,%xmm11
1246	vaesenc	%xmm4,%xmm12,%xmm12
1247
1248	vmovdqu	112(%r8),%xmm4
1249	vaesenc	%xmm4,%xmm7,%xmm7
1250	vaesenc	%xmm4,%xmm8,%xmm8
1251	vaesenc	%xmm4,%xmm9,%xmm9
1252	vaesenc	%xmm4,%xmm10,%xmm10
1253	vaesenc	%xmm4,%xmm11,%xmm11
1254	vaesenc	%xmm4,%xmm12,%xmm12
1255
1256	vmovdqu	128(%r8),%xmm4
1257	vaesenc	%xmm4,%xmm7,%xmm7
1258	vaesenc	%xmm4,%xmm8,%xmm8
1259	vaesenc	%xmm4,%xmm9,%xmm9
1260	vaesenc	%xmm4,%xmm10,%xmm10
1261	vaesenc	%xmm4,%xmm11,%xmm11
1262	vaesenc	%xmm4,%xmm12,%xmm12
1263
1264	vmovdqu	144(%r8),%xmm4
1265	vaesenc	%xmm4,%xmm7,%xmm7
1266	vaesenc	%xmm4,%xmm8,%xmm8
1267	vaesenc	%xmm4,%xmm9,%xmm9
1268	vaesenc	%xmm4,%xmm10,%xmm10
1269	vaesenc	%xmm4,%xmm11,%xmm11
1270	vaesenc	%xmm4,%xmm12,%xmm12
1271
1272	vmovdqu	160(%r8),%xmm4
1273	vaesenclast	%xmm4,%xmm7,%xmm7
1274	vaesenclast	%xmm4,%xmm8,%xmm8
1275	vaesenclast	%xmm4,%xmm9,%xmm9
1276	vaesenclast	%xmm4,%xmm10,%xmm10
1277	vaesenclast	%xmm4,%xmm11,%xmm11
1278	vaesenclast	%xmm4,%xmm12,%xmm12
1279
1280
1281	vpxor	0(%rdi),%xmm7,%xmm7
1282	vpxor	16(%rdi),%xmm8,%xmm8
1283	vpxor	32(%rdi),%xmm9,%xmm9
1284	vpxor	48(%rdi),%xmm10,%xmm10
1285	vpxor	64(%rdi),%xmm11,%xmm11
1286	vpxor	80(%rdi),%xmm12,%xmm12
1287
1288	vmovdqu	%xmm7,0(%rsi)
1289	vmovdqu	%xmm8,16(%rsi)
1290	vmovdqu	%xmm9,32(%rsi)
1291	vmovdqu	%xmm10,48(%rsi)
1292	vmovdqu	%xmm11,64(%rsi)
1293	vmovdqu	%xmm12,80(%rsi)
1294
1295	addq	$96,%rdi
1296	addq	$96,%rsi
1297	jmp	.L128_dec_loop1
1298
1299
1300.align	64
1301.L128_dec_loop1:
1302	cmpq	$96,%r9
1303	jb	.L128_dec_finish_96
1304	subq	$96,%r9
1305
1306	vmovdqa	%xmm12,%xmm6
1307	vmovdqa	%xmm11,16-32(%rax)
1308	vmovdqa	%xmm10,32-32(%rax)
1309	vmovdqa	%xmm9,48-32(%rax)
1310	vmovdqa	%xmm8,64-32(%rax)
1311	vmovdqa	%xmm7,80-32(%rax)
1312
1313	vmovdqa	%xmm15,%xmm7
1314	vpaddd	one(%rip),%xmm7,%xmm8
1315	vpaddd	two(%rip),%xmm7,%xmm9
1316	vpaddd	one(%rip),%xmm9,%xmm10
1317	vpaddd	two(%rip),%xmm9,%xmm11
1318	vpaddd	one(%rip),%xmm11,%xmm12
1319	vpaddd	two(%rip),%xmm11,%xmm15
1320
1321	vmovdqa	(%r8),%xmm4
1322	vpxor	%xmm4,%xmm7,%xmm7
1323	vpxor	%xmm4,%xmm8,%xmm8
1324	vpxor	%xmm4,%xmm9,%xmm9
1325	vpxor	%xmm4,%xmm10,%xmm10
1326	vpxor	%xmm4,%xmm11,%xmm11
1327	vpxor	%xmm4,%xmm12,%xmm12
1328
1329	vmovdqu	0-32(%rcx),%xmm4
1330	vpclmulqdq	$0x11,%xmm4,%xmm6,%xmm2
1331	vpclmulqdq	$0x00,%xmm4,%xmm6,%xmm3
1332	vpclmulqdq	$0x01,%xmm4,%xmm6,%xmm1
1333	vpclmulqdq	$0x10,%xmm4,%xmm6,%xmm4
1334	vpxor	%xmm4,%xmm1,%xmm1
1335
1336	vmovdqu	16(%r8),%xmm4
1337	vaesenc	%xmm4,%xmm7,%xmm7
1338	vaesenc	%xmm4,%xmm8,%xmm8
1339	vaesenc	%xmm4,%xmm9,%xmm9
1340	vaesenc	%xmm4,%xmm10,%xmm10
1341	vaesenc	%xmm4,%xmm11,%xmm11
1342	vaesenc	%xmm4,%xmm12,%xmm12
1343
1344	vmovdqu	-16(%rax),%xmm6
1345	vmovdqu	-16(%rcx),%xmm13
1346
1347	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1348	vpxor	%xmm4,%xmm1,%xmm1
1349	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1350	vpxor	%xmm4,%xmm2,%xmm2
1351	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1352	vpxor	%xmm4,%xmm3,%xmm3
1353	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1354	vpxor	%xmm4,%xmm1,%xmm1
1355
1356
1357	vmovdqu	32(%r8),%xmm4
1358	vaesenc	%xmm4,%xmm7,%xmm7
1359	vaesenc	%xmm4,%xmm8,%xmm8
1360	vaesenc	%xmm4,%xmm9,%xmm9
1361	vaesenc	%xmm4,%xmm10,%xmm10
1362	vaesenc	%xmm4,%xmm11,%xmm11
1363	vaesenc	%xmm4,%xmm12,%xmm12
1364
1365	vmovdqu	0(%rax),%xmm6
1366	vmovdqu	0(%rcx),%xmm13
1367
1368	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1369	vpxor	%xmm4,%xmm1,%xmm1
1370	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1371	vpxor	%xmm4,%xmm2,%xmm2
1372	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1373	vpxor	%xmm4,%xmm3,%xmm3
1374	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1375	vpxor	%xmm4,%xmm1,%xmm1
1376
1377
1378	vmovdqu	48(%r8),%xmm4
1379	vaesenc	%xmm4,%xmm7,%xmm7
1380	vaesenc	%xmm4,%xmm8,%xmm8
1381	vaesenc	%xmm4,%xmm9,%xmm9
1382	vaesenc	%xmm4,%xmm10,%xmm10
1383	vaesenc	%xmm4,%xmm11,%xmm11
1384	vaesenc	%xmm4,%xmm12,%xmm12
1385
1386	vmovdqu	16(%rax),%xmm6
1387	vmovdqu	16(%rcx),%xmm13
1388
1389	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1390	vpxor	%xmm4,%xmm1,%xmm1
1391	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1392	vpxor	%xmm4,%xmm2,%xmm2
1393	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1394	vpxor	%xmm4,%xmm3,%xmm3
1395	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1396	vpxor	%xmm4,%xmm1,%xmm1
1397
1398
1399	vmovdqu	64(%r8),%xmm4
1400	vaesenc	%xmm4,%xmm7,%xmm7
1401	vaesenc	%xmm4,%xmm8,%xmm8
1402	vaesenc	%xmm4,%xmm9,%xmm9
1403	vaesenc	%xmm4,%xmm10,%xmm10
1404	vaesenc	%xmm4,%xmm11,%xmm11
1405	vaesenc	%xmm4,%xmm12,%xmm12
1406
1407	vmovdqu	32(%rax),%xmm6
1408	vmovdqu	32(%rcx),%xmm13
1409
1410	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1411	vpxor	%xmm4,%xmm1,%xmm1
1412	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1413	vpxor	%xmm4,%xmm2,%xmm2
1414	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1415	vpxor	%xmm4,%xmm3,%xmm3
1416	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1417	vpxor	%xmm4,%xmm1,%xmm1
1418
1419
1420	vmovdqu	80(%r8),%xmm4
1421	vaesenc	%xmm4,%xmm7,%xmm7
1422	vaesenc	%xmm4,%xmm8,%xmm8
1423	vaesenc	%xmm4,%xmm9,%xmm9
1424	vaesenc	%xmm4,%xmm10,%xmm10
1425	vaesenc	%xmm4,%xmm11,%xmm11
1426	vaesenc	%xmm4,%xmm12,%xmm12
1427
1428	vmovdqu	96(%r8),%xmm4
1429	vaesenc	%xmm4,%xmm7,%xmm7
1430	vaesenc	%xmm4,%xmm8,%xmm8
1431	vaesenc	%xmm4,%xmm9,%xmm9
1432	vaesenc	%xmm4,%xmm10,%xmm10
1433	vaesenc	%xmm4,%xmm11,%xmm11
1434	vaesenc	%xmm4,%xmm12,%xmm12
1435
1436	vmovdqu	112(%r8),%xmm4
1437	vaesenc	%xmm4,%xmm7,%xmm7
1438	vaesenc	%xmm4,%xmm8,%xmm8
1439	vaesenc	%xmm4,%xmm9,%xmm9
1440	vaesenc	%xmm4,%xmm10,%xmm10
1441	vaesenc	%xmm4,%xmm11,%xmm11
1442	vaesenc	%xmm4,%xmm12,%xmm12
1443
1444
1445	vmovdqa	80-32(%rax),%xmm6
1446	vpxor	%xmm0,%xmm6,%xmm6
1447	vmovdqu	80-32(%rcx),%xmm5
1448
1449	vpclmulqdq	$0x01,%xmm5,%xmm6,%xmm4
1450	vpxor	%xmm4,%xmm1,%xmm1
1451	vpclmulqdq	$0x11,%xmm5,%xmm6,%xmm4
1452	vpxor	%xmm4,%xmm2,%xmm2
1453	vpclmulqdq	$0x00,%xmm5,%xmm6,%xmm4
1454	vpxor	%xmm4,%xmm3,%xmm3
1455	vpclmulqdq	$0x10,%xmm5,%xmm6,%xmm4
1456	vpxor	%xmm4,%xmm1,%xmm1
1457
1458	vmovdqu	128(%r8),%xmm4
1459	vaesenc	%xmm4,%xmm7,%xmm7
1460	vaesenc	%xmm4,%xmm8,%xmm8
1461	vaesenc	%xmm4,%xmm9,%xmm9
1462	vaesenc	%xmm4,%xmm10,%xmm10
1463	vaesenc	%xmm4,%xmm11,%xmm11
1464	vaesenc	%xmm4,%xmm12,%xmm12
1465
1466
1467	vpsrldq	$8,%xmm1,%xmm4
1468	vpxor	%xmm4,%xmm2,%xmm5
1469	vpslldq	$8,%xmm1,%xmm4
1470	vpxor	%xmm4,%xmm3,%xmm0
1471
1472	vmovdqa	poly(%rip),%xmm3
1473
1474	vmovdqu	144(%r8),%xmm4
1475	vaesenc	%xmm4,%xmm7,%xmm7
1476	vaesenc	%xmm4,%xmm8,%xmm8
1477	vaesenc	%xmm4,%xmm9,%xmm9
1478	vaesenc	%xmm4,%xmm10,%xmm10
1479	vaesenc	%xmm4,%xmm11,%xmm11
1480	vaesenc	%xmm4,%xmm12,%xmm12
1481
1482	vmovdqu	160(%r8),%xmm6
1483	vpalignr	$8,%xmm0,%xmm0,%xmm2
1484	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
1485	vpxor	%xmm0,%xmm2,%xmm0
1486
1487	vpxor	0(%rdi),%xmm6,%xmm4
1488	vaesenclast	%xmm4,%xmm7,%xmm7
1489	vpxor	16(%rdi),%xmm6,%xmm4
1490	vaesenclast	%xmm4,%xmm8,%xmm8
1491	vpxor	32(%rdi),%xmm6,%xmm4
1492	vaesenclast	%xmm4,%xmm9,%xmm9
1493	vpxor	48(%rdi),%xmm6,%xmm4
1494	vaesenclast	%xmm4,%xmm10,%xmm10
1495	vpxor	64(%rdi),%xmm6,%xmm4
1496	vaesenclast	%xmm4,%xmm11,%xmm11
1497	vpxor	80(%rdi),%xmm6,%xmm4
1498	vaesenclast	%xmm4,%xmm12,%xmm12
1499
1500	vpalignr	$8,%xmm0,%xmm0,%xmm2
1501	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
1502	vpxor	%xmm0,%xmm2,%xmm0
1503
1504	vmovdqu	%xmm7,0(%rsi)
1505	vmovdqu	%xmm8,16(%rsi)
1506	vmovdqu	%xmm9,32(%rsi)
1507	vmovdqu	%xmm10,48(%rsi)
1508	vmovdqu	%xmm11,64(%rsi)
1509	vmovdqu	%xmm12,80(%rsi)
1510
1511	vpxor	%xmm5,%xmm0,%xmm0
1512
1513	leaq	96(%rdi),%rdi
1514	leaq	96(%rsi),%rsi
1515	jmp	.L128_dec_loop1
1516
1517.L128_dec_finish_96:
1518	vmovdqa	%xmm12,%xmm6
1519	vmovdqa	%xmm11,16-32(%rax)
1520	vmovdqa	%xmm10,32-32(%rax)
1521	vmovdqa	%xmm9,48-32(%rax)
1522	vmovdqa	%xmm8,64-32(%rax)
1523	vmovdqa	%xmm7,80-32(%rax)
1524
1525	vmovdqu	0-32(%rcx),%xmm4
1526	vpclmulqdq	$0x10,%xmm4,%xmm6,%xmm1
1527	vpclmulqdq	$0x11,%xmm4,%xmm6,%xmm2
1528	vpclmulqdq	$0x00,%xmm4,%xmm6,%xmm3
1529	vpclmulqdq	$0x01,%xmm4,%xmm6,%xmm4
1530	vpxor	%xmm4,%xmm1,%xmm1
1531
1532	vmovdqu	-16(%rax),%xmm6
1533	vmovdqu	-16(%rcx),%xmm13
1534
1535	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1536	vpxor	%xmm4,%xmm1,%xmm1
1537	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1538	vpxor	%xmm4,%xmm2,%xmm2
1539	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1540	vpxor	%xmm4,%xmm3,%xmm3
1541	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1542	vpxor	%xmm4,%xmm1,%xmm1
1543
1544	vmovdqu	0(%rax),%xmm6
1545	vmovdqu	0(%rcx),%xmm13
1546
1547	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1548	vpxor	%xmm4,%xmm1,%xmm1
1549	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1550	vpxor	%xmm4,%xmm2,%xmm2
1551	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1552	vpxor	%xmm4,%xmm3,%xmm3
1553	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1554	vpxor	%xmm4,%xmm1,%xmm1
1555
1556	vmovdqu	16(%rax),%xmm6
1557	vmovdqu	16(%rcx),%xmm13
1558
1559	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1560	vpxor	%xmm4,%xmm1,%xmm1
1561	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1562	vpxor	%xmm4,%xmm2,%xmm2
1563	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1564	vpxor	%xmm4,%xmm3,%xmm3
1565	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1566	vpxor	%xmm4,%xmm1,%xmm1
1567
1568	vmovdqu	32(%rax),%xmm6
1569	vmovdqu	32(%rcx),%xmm13
1570
1571	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1572	vpxor	%xmm4,%xmm1,%xmm1
1573	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1574	vpxor	%xmm4,%xmm2,%xmm2
1575	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1576	vpxor	%xmm4,%xmm3,%xmm3
1577	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1578	vpxor	%xmm4,%xmm1,%xmm1
1579
1580
1581	vmovdqu	80-32(%rax),%xmm6
1582	vpxor	%xmm0,%xmm6,%xmm6
1583	vmovdqu	80-32(%rcx),%xmm5
1584	vpclmulqdq	$0x11,%xmm5,%xmm6,%xmm4
1585	vpxor	%xmm4,%xmm2,%xmm2
1586	vpclmulqdq	$0x00,%xmm5,%xmm6,%xmm4
1587	vpxor	%xmm4,%xmm3,%xmm3
1588	vpclmulqdq	$0x10,%xmm5,%xmm6,%xmm4
1589	vpxor	%xmm4,%xmm1,%xmm1
1590	vpclmulqdq	$0x01,%xmm5,%xmm6,%xmm4
1591	vpxor	%xmm4,%xmm1,%xmm1
1592
1593	vpsrldq	$8,%xmm1,%xmm4
1594	vpxor	%xmm4,%xmm2,%xmm5
1595	vpslldq	$8,%xmm1,%xmm4
1596	vpxor	%xmm4,%xmm3,%xmm0
1597
1598	vmovdqa	poly(%rip),%xmm3
1599
1600	vpalignr	$8,%xmm0,%xmm0,%xmm2
1601	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
1602	vpxor	%xmm0,%xmm2,%xmm0
1603
1604	vpalignr	$8,%xmm0,%xmm0,%xmm2
1605	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
1606	vpxor	%xmm0,%xmm2,%xmm0
1607
1608	vpxor	%xmm5,%xmm0,%xmm0
1609
1610.L128_dec_loop2:
1611
1612
1613
1614	cmpq	$16,%r9
1615	jb	.L128_dec_out
1616	subq	$16,%r9
1617
1618	vmovdqa	%xmm15,%xmm2
1619	vpaddd	one(%rip),%xmm15,%xmm15
1620
1621	vpxor	0(%r8),%xmm2,%xmm2
1622	vaesenc	16(%r8),%xmm2,%xmm2
1623	vaesenc	32(%r8),%xmm2,%xmm2
1624	vaesenc	48(%r8),%xmm2,%xmm2
1625	vaesenc	64(%r8),%xmm2,%xmm2
1626	vaesenc	80(%r8),%xmm2,%xmm2
1627	vaesenc	96(%r8),%xmm2,%xmm2
1628	vaesenc	112(%r8),%xmm2,%xmm2
1629	vaesenc	128(%r8),%xmm2,%xmm2
1630	vaesenc	144(%r8),%xmm2,%xmm2
1631	vaesenclast	160(%r8),%xmm2,%xmm2
1632	vpxor	(%rdi),%xmm2,%xmm2
1633	vmovdqu	%xmm2,(%rsi)
1634	addq	$16,%rdi
1635	addq	$16,%rsi
1636
1637	vpxor	%xmm2,%xmm0,%xmm0
1638	vmovdqa	-32(%rcx),%xmm1
1639	call	GFMUL
1640
1641	jmp	.L128_dec_loop2
1642
1643.L128_dec_out:
1644	vmovdqu	%xmm0,(%rdx)
1645	ret
1646.cfi_endproc
1647.size	aes128gcmsiv_dec, .-aes128gcmsiv_dec
1648.globl	aes128gcmsiv_ecb_enc_block
1649.hidden aes128gcmsiv_ecb_enc_block
1650.type	aes128gcmsiv_ecb_enc_block,@function
1651.align	16
1652aes128gcmsiv_ecb_enc_block:
1653.cfi_startproc
1654_CET_ENDBR
1655	vmovdqa	(%rdi),%xmm1
1656
1657	vpxor	(%rdx),%xmm1,%xmm1
1658	vaesenc	16(%rdx),%xmm1,%xmm1
1659	vaesenc	32(%rdx),%xmm1,%xmm1
1660	vaesenc	48(%rdx),%xmm1,%xmm1
1661	vaesenc	64(%rdx),%xmm1,%xmm1
1662	vaesenc	80(%rdx),%xmm1,%xmm1
1663	vaesenc	96(%rdx),%xmm1,%xmm1
1664	vaesenc	112(%rdx),%xmm1,%xmm1
1665	vaesenc	128(%rdx),%xmm1,%xmm1
1666	vaesenc	144(%rdx),%xmm1,%xmm1
1667	vaesenclast	160(%rdx),%xmm1,%xmm1
1668
1669	vmovdqa	%xmm1,(%rsi)
1670
1671	ret
1672.cfi_endproc
1673.size	aes128gcmsiv_ecb_enc_block,.-aes128gcmsiv_ecb_enc_block
1674.globl	aes256gcmsiv_aes_ks_enc_x1
1675.hidden aes256gcmsiv_aes_ks_enc_x1
1676.type	aes256gcmsiv_aes_ks_enc_x1,@function
1677.align	16
1678aes256gcmsiv_aes_ks_enc_x1:
1679.cfi_startproc
1680_CET_ENDBR
1681	vmovdqa	con1(%rip),%xmm0
1682	vmovdqa	mask(%rip),%xmm15
1683	vmovdqa	(%rdi),%xmm8
1684	vmovdqa	(%rcx),%xmm1
1685	vmovdqa	16(%rcx),%xmm3
1686	vpxor	%xmm1,%xmm8,%xmm8
1687	vaesenc	%xmm3,%xmm8,%xmm8
1688	vmovdqu	%xmm1,(%rdx)
1689	vmovdqu	%xmm3,16(%rdx)
1690	vpxor	%xmm14,%xmm14,%xmm14
1691
1692	vpshufb	%xmm15,%xmm3,%xmm2
1693	vaesenclast	%xmm0,%xmm2,%xmm2
1694	vpslld	$1,%xmm0,%xmm0
1695	vpslldq	$4,%xmm1,%xmm4
1696	vpxor	%xmm4,%xmm1,%xmm1
1697	vpslldq	$4,%xmm4,%xmm4
1698	vpxor	%xmm4,%xmm1,%xmm1
1699	vpslldq	$4,%xmm4,%xmm4
1700	vpxor	%xmm4,%xmm1,%xmm1
1701	vpxor	%xmm2,%xmm1,%xmm1
1702	vaesenc	%xmm1,%xmm8,%xmm8
1703	vmovdqu	%xmm1,32(%rdx)
1704
1705	vpshufd	$0xff,%xmm1,%xmm2
1706	vaesenclast	%xmm14,%xmm2,%xmm2
1707	vpslldq	$4,%xmm3,%xmm4
1708	vpxor	%xmm4,%xmm3,%xmm3
1709	vpslldq	$4,%xmm4,%xmm4
1710	vpxor	%xmm4,%xmm3,%xmm3
1711	vpslldq	$4,%xmm4,%xmm4
1712	vpxor	%xmm4,%xmm3,%xmm3
1713	vpxor	%xmm2,%xmm3,%xmm3
1714	vaesenc	%xmm3,%xmm8,%xmm8
1715	vmovdqu	%xmm3,48(%rdx)
1716
1717	vpshufb	%xmm15,%xmm3,%xmm2
1718	vaesenclast	%xmm0,%xmm2,%xmm2
1719	vpslld	$1,%xmm0,%xmm0
1720	vpslldq	$4,%xmm1,%xmm4
1721	vpxor	%xmm4,%xmm1,%xmm1
1722	vpslldq	$4,%xmm4,%xmm4
1723	vpxor	%xmm4,%xmm1,%xmm1
1724	vpslldq	$4,%xmm4,%xmm4
1725	vpxor	%xmm4,%xmm1,%xmm1
1726	vpxor	%xmm2,%xmm1,%xmm1
1727	vaesenc	%xmm1,%xmm8,%xmm8
1728	vmovdqu	%xmm1,64(%rdx)
1729
1730	vpshufd	$0xff,%xmm1,%xmm2
1731	vaesenclast	%xmm14,%xmm2,%xmm2
1732	vpslldq	$4,%xmm3,%xmm4
1733	vpxor	%xmm4,%xmm3,%xmm3
1734	vpslldq	$4,%xmm4,%xmm4
1735	vpxor	%xmm4,%xmm3,%xmm3
1736	vpslldq	$4,%xmm4,%xmm4
1737	vpxor	%xmm4,%xmm3,%xmm3
1738	vpxor	%xmm2,%xmm3,%xmm3
1739	vaesenc	%xmm3,%xmm8,%xmm8
1740	vmovdqu	%xmm3,80(%rdx)
1741
1742	vpshufb	%xmm15,%xmm3,%xmm2
1743	vaesenclast	%xmm0,%xmm2,%xmm2
1744	vpslld	$1,%xmm0,%xmm0
1745	vpslldq	$4,%xmm1,%xmm4
1746	vpxor	%xmm4,%xmm1,%xmm1
1747	vpslldq	$4,%xmm4,%xmm4
1748	vpxor	%xmm4,%xmm1,%xmm1
1749	vpslldq	$4,%xmm4,%xmm4
1750	vpxor	%xmm4,%xmm1,%xmm1
1751	vpxor	%xmm2,%xmm1,%xmm1
1752	vaesenc	%xmm1,%xmm8,%xmm8
1753	vmovdqu	%xmm1,96(%rdx)
1754
1755	vpshufd	$0xff,%xmm1,%xmm2
1756	vaesenclast	%xmm14,%xmm2,%xmm2
1757	vpslldq	$4,%xmm3,%xmm4
1758	vpxor	%xmm4,%xmm3,%xmm3
1759	vpslldq	$4,%xmm4,%xmm4
1760	vpxor	%xmm4,%xmm3,%xmm3
1761	vpslldq	$4,%xmm4,%xmm4
1762	vpxor	%xmm4,%xmm3,%xmm3
1763	vpxor	%xmm2,%xmm3,%xmm3
1764	vaesenc	%xmm3,%xmm8,%xmm8
1765	vmovdqu	%xmm3,112(%rdx)
1766
1767	vpshufb	%xmm15,%xmm3,%xmm2
1768	vaesenclast	%xmm0,%xmm2,%xmm2
1769	vpslld	$1,%xmm0,%xmm0
1770	vpslldq	$4,%xmm1,%xmm4
1771	vpxor	%xmm4,%xmm1,%xmm1
1772	vpslldq	$4,%xmm4,%xmm4
1773	vpxor	%xmm4,%xmm1,%xmm1
1774	vpslldq	$4,%xmm4,%xmm4
1775	vpxor	%xmm4,%xmm1,%xmm1
1776	vpxor	%xmm2,%xmm1,%xmm1
1777	vaesenc	%xmm1,%xmm8,%xmm8
1778	vmovdqu	%xmm1,128(%rdx)
1779
1780	vpshufd	$0xff,%xmm1,%xmm2
1781	vaesenclast	%xmm14,%xmm2,%xmm2
1782	vpslldq	$4,%xmm3,%xmm4
1783	vpxor	%xmm4,%xmm3,%xmm3
1784	vpslldq	$4,%xmm4,%xmm4
1785	vpxor	%xmm4,%xmm3,%xmm3
1786	vpslldq	$4,%xmm4,%xmm4
1787	vpxor	%xmm4,%xmm3,%xmm3
1788	vpxor	%xmm2,%xmm3,%xmm3
1789	vaesenc	%xmm3,%xmm8,%xmm8
1790	vmovdqu	%xmm3,144(%rdx)
1791
1792	vpshufb	%xmm15,%xmm3,%xmm2
1793	vaesenclast	%xmm0,%xmm2,%xmm2
1794	vpslld	$1,%xmm0,%xmm0
1795	vpslldq	$4,%xmm1,%xmm4
1796	vpxor	%xmm4,%xmm1,%xmm1
1797	vpslldq	$4,%xmm4,%xmm4
1798	vpxor	%xmm4,%xmm1,%xmm1
1799	vpslldq	$4,%xmm4,%xmm4
1800	vpxor	%xmm4,%xmm1,%xmm1
1801	vpxor	%xmm2,%xmm1,%xmm1
1802	vaesenc	%xmm1,%xmm8,%xmm8
1803	vmovdqu	%xmm1,160(%rdx)
1804
1805	vpshufd	$0xff,%xmm1,%xmm2
1806	vaesenclast	%xmm14,%xmm2,%xmm2
1807	vpslldq	$4,%xmm3,%xmm4
1808	vpxor	%xmm4,%xmm3,%xmm3
1809	vpslldq	$4,%xmm4,%xmm4
1810	vpxor	%xmm4,%xmm3,%xmm3
1811	vpslldq	$4,%xmm4,%xmm4
1812	vpxor	%xmm4,%xmm3,%xmm3
1813	vpxor	%xmm2,%xmm3,%xmm3
1814	vaesenc	%xmm3,%xmm8,%xmm8
1815	vmovdqu	%xmm3,176(%rdx)
1816
1817	vpshufb	%xmm15,%xmm3,%xmm2
1818	vaesenclast	%xmm0,%xmm2,%xmm2
1819	vpslld	$1,%xmm0,%xmm0
1820	vpslldq	$4,%xmm1,%xmm4
1821	vpxor	%xmm4,%xmm1,%xmm1
1822	vpslldq	$4,%xmm4,%xmm4
1823	vpxor	%xmm4,%xmm1,%xmm1
1824	vpslldq	$4,%xmm4,%xmm4
1825	vpxor	%xmm4,%xmm1,%xmm1
1826	vpxor	%xmm2,%xmm1,%xmm1
1827	vaesenc	%xmm1,%xmm8,%xmm8
1828	vmovdqu	%xmm1,192(%rdx)
1829
1830	vpshufd	$0xff,%xmm1,%xmm2
1831	vaesenclast	%xmm14,%xmm2,%xmm2
1832	vpslldq	$4,%xmm3,%xmm4
1833	vpxor	%xmm4,%xmm3,%xmm3
1834	vpslldq	$4,%xmm4,%xmm4
1835	vpxor	%xmm4,%xmm3,%xmm3
1836	vpslldq	$4,%xmm4,%xmm4
1837	vpxor	%xmm4,%xmm3,%xmm3
1838	vpxor	%xmm2,%xmm3,%xmm3
1839	vaesenc	%xmm3,%xmm8,%xmm8
1840	vmovdqu	%xmm3,208(%rdx)
1841
1842	vpshufb	%xmm15,%xmm3,%xmm2
1843	vaesenclast	%xmm0,%xmm2,%xmm2
1844	vpslldq	$4,%xmm1,%xmm4
1845	vpxor	%xmm4,%xmm1,%xmm1
1846	vpslldq	$4,%xmm4,%xmm4
1847	vpxor	%xmm4,%xmm1,%xmm1
1848	vpslldq	$4,%xmm4,%xmm4
1849	vpxor	%xmm4,%xmm1,%xmm1
1850	vpxor	%xmm2,%xmm1,%xmm1
1851	vaesenclast	%xmm1,%xmm8,%xmm8
1852	vmovdqu	%xmm1,224(%rdx)
1853
1854	vmovdqa	%xmm8,(%rsi)
1855	ret
1856.cfi_endproc
1857.size	aes256gcmsiv_aes_ks_enc_x1,.-aes256gcmsiv_aes_ks_enc_x1
1858.globl	aes256gcmsiv_ecb_enc_block
1859.hidden aes256gcmsiv_ecb_enc_block
1860.type	aes256gcmsiv_ecb_enc_block,@function
1861.align	16
1862aes256gcmsiv_ecb_enc_block:
1863.cfi_startproc
1864_CET_ENDBR
1865	vmovdqa	(%rdi),%xmm1
1866	vpxor	(%rdx),%xmm1,%xmm1
1867	vaesenc	16(%rdx),%xmm1,%xmm1
1868	vaesenc	32(%rdx),%xmm1,%xmm1
1869	vaesenc	48(%rdx),%xmm1,%xmm1
1870	vaesenc	64(%rdx),%xmm1,%xmm1
1871	vaesenc	80(%rdx),%xmm1,%xmm1
1872	vaesenc	96(%rdx),%xmm1,%xmm1
1873	vaesenc	112(%rdx),%xmm1,%xmm1
1874	vaesenc	128(%rdx),%xmm1,%xmm1
1875	vaesenc	144(%rdx),%xmm1,%xmm1
1876	vaesenc	160(%rdx),%xmm1,%xmm1
1877	vaesenc	176(%rdx),%xmm1,%xmm1
1878	vaesenc	192(%rdx),%xmm1,%xmm1
1879	vaesenc	208(%rdx),%xmm1,%xmm1
1880	vaesenclast	224(%rdx),%xmm1,%xmm1
1881	vmovdqa	%xmm1,(%rsi)
1882	ret
1883.cfi_endproc
1884.size	aes256gcmsiv_ecb_enc_block,.-aes256gcmsiv_ecb_enc_block
1885.globl	aes256gcmsiv_enc_msg_x4
1886.hidden aes256gcmsiv_enc_msg_x4
1887.type	aes256gcmsiv_enc_msg_x4,@function
1888.align	16
1889aes256gcmsiv_enc_msg_x4:
1890.cfi_startproc
1891_CET_ENDBR
1892	testq	%r8,%r8
1893	jnz	.L256_enc_msg_x4_start
1894	ret
1895
1896.L256_enc_msg_x4_start:
1897	movq	%r8,%r10
1898	shrq	$4,%r8
1899	shlq	$60,%r10
1900	jz	.L256_enc_msg_x4_start2
1901	addq	$1,%r8
1902
1903.L256_enc_msg_x4_start2:
1904	movq	%r8,%r10
1905	shlq	$62,%r10
1906	shrq	$62,%r10
1907
1908
1909	vmovdqa	(%rdx),%xmm15
1910	vpor	OR_MASK(%rip),%xmm15,%xmm15
1911
1912	vmovdqa	four(%rip),%xmm4
1913	vmovdqa	%xmm15,%xmm0
1914	vpaddd	one(%rip),%xmm15,%xmm1
1915	vpaddd	two(%rip),%xmm15,%xmm2
1916	vpaddd	three(%rip),%xmm15,%xmm3
1917
1918	shrq	$2,%r8
1919	je	.L256_enc_msg_x4_check_remainder
1920
1921	subq	$64,%rsi
1922	subq	$64,%rdi
1923
1924.L256_enc_msg_x4_loop1:
1925	addq	$64,%rsi
1926	addq	$64,%rdi
1927
1928	vmovdqa	%xmm0,%xmm5
1929	vmovdqa	%xmm1,%xmm6
1930	vmovdqa	%xmm2,%xmm7
1931	vmovdqa	%xmm3,%xmm8
1932
1933	vpxor	(%rcx),%xmm5,%xmm5
1934	vpxor	(%rcx),%xmm6,%xmm6
1935	vpxor	(%rcx),%xmm7,%xmm7
1936	vpxor	(%rcx),%xmm8,%xmm8
1937
1938	vmovdqu	16(%rcx),%xmm12
1939	vaesenc	%xmm12,%xmm5,%xmm5
1940	vaesenc	%xmm12,%xmm6,%xmm6
1941	vaesenc	%xmm12,%xmm7,%xmm7
1942	vaesenc	%xmm12,%xmm8,%xmm8
1943
1944	vpaddd	%xmm4,%xmm0,%xmm0
1945	vmovdqu	32(%rcx),%xmm12
1946	vaesenc	%xmm12,%xmm5,%xmm5
1947	vaesenc	%xmm12,%xmm6,%xmm6
1948	vaesenc	%xmm12,%xmm7,%xmm7
1949	vaesenc	%xmm12,%xmm8,%xmm8
1950
1951	vpaddd	%xmm4,%xmm1,%xmm1
1952	vmovdqu	48(%rcx),%xmm12
1953	vaesenc	%xmm12,%xmm5,%xmm5
1954	vaesenc	%xmm12,%xmm6,%xmm6
1955	vaesenc	%xmm12,%xmm7,%xmm7
1956	vaesenc	%xmm12,%xmm8,%xmm8
1957
1958	vpaddd	%xmm4,%xmm2,%xmm2
1959	vmovdqu	64(%rcx),%xmm12
1960	vaesenc	%xmm12,%xmm5,%xmm5
1961	vaesenc	%xmm12,%xmm6,%xmm6
1962	vaesenc	%xmm12,%xmm7,%xmm7
1963	vaesenc	%xmm12,%xmm8,%xmm8
1964
1965	vpaddd	%xmm4,%xmm3,%xmm3
1966
1967	vmovdqu	80(%rcx),%xmm12
1968	vaesenc	%xmm12,%xmm5,%xmm5
1969	vaesenc	%xmm12,%xmm6,%xmm6
1970	vaesenc	%xmm12,%xmm7,%xmm7
1971	vaesenc	%xmm12,%xmm8,%xmm8
1972
1973	vmovdqu	96(%rcx),%xmm12
1974	vaesenc	%xmm12,%xmm5,%xmm5
1975	vaesenc	%xmm12,%xmm6,%xmm6
1976	vaesenc	%xmm12,%xmm7,%xmm7
1977	vaesenc	%xmm12,%xmm8,%xmm8
1978
1979	vmovdqu	112(%rcx),%xmm12
1980	vaesenc	%xmm12,%xmm5,%xmm5
1981	vaesenc	%xmm12,%xmm6,%xmm6
1982	vaesenc	%xmm12,%xmm7,%xmm7
1983	vaesenc	%xmm12,%xmm8,%xmm8
1984
1985	vmovdqu	128(%rcx),%xmm12
1986	vaesenc	%xmm12,%xmm5,%xmm5
1987	vaesenc	%xmm12,%xmm6,%xmm6
1988	vaesenc	%xmm12,%xmm7,%xmm7
1989	vaesenc	%xmm12,%xmm8,%xmm8
1990
1991	vmovdqu	144(%rcx),%xmm12
1992	vaesenc	%xmm12,%xmm5,%xmm5
1993	vaesenc	%xmm12,%xmm6,%xmm6
1994	vaesenc	%xmm12,%xmm7,%xmm7
1995	vaesenc	%xmm12,%xmm8,%xmm8
1996
1997	vmovdqu	160(%rcx),%xmm12
1998	vaesenc	%xmm12,%xmm5,%xmm5
1999	vaesenc	%xmm12,%xmm6,%xmm6
2000	vaesenc	%xmm12,%xmm7,%xmm7
2001	vaesenc	%xmm12,%xmm8,%xmm8
2002
2003	vmovdqu	176(%rcx),%xmm12
2004	vaesenc	%xmm12,%xmm5,%xmm5
2005	vaesenc	%xmm12,%xmm6,%xmm6
2006	vaesenc	%xmm12,%xmm7,%xmm7
2007	vaesenc	%xmm12,%xmm8,%xmm8
2008
2009	vmovdqu	192(%rcx),%xmm12
2010	vaesenc	%xmm12,%xmm5,%xmm5
2011	vaesenc	%xmm12,%xmm6,%xmm6
2012	vaesenc	%xmm12,%xmm7,%xmm7
2013	vaesenc	%xmm12,%xmm8,%xmm8
2014
2015	vmovdqu	208(%rcx),%xmm12
2016	vaesenc	%xmm12,%xmm5,%xmm5
2017	vaesenc	%xmm12,%xmm6,%xmm6
2018	vaesenc	%xmm12,%xmm7,%xmm7
2019	vaesenc	%xmm12,%xmm8,%xmm8
2020
2021	vmovdqu	224(%rcx),%xmm12
2022	vaesenclast	%xmm12,%xmm5,%xmm5
2023	vaesenclast	%xmm12,%xmm6,%xmm6
2024	vaesenclast	%xmm12,%xmm7,%xmm7
2025	vaesenclast	%xmm12,%xmm8,%xmm8
2026
2027
2028
2029	vpxor	0(%rdi),%xmm5,%xmm5
2030	vpxor	16(%rdi),%xmm6,%xmm6
2031	vpxor	32(%rdi),%xmm7,%xmm7
2032	vpxor	48(%rdi),%xmm8,%xmm8
2033
2034	subq	$1,%r8
2035
2036	vmovdqu	%xmm5,0(%rsi)
2037	vmovdqu	%xmm6,16(%rsi)
2038	vmovdqu	%xmm7,32(%rsi)
2039	vmovdqu	%xmm8,48(%rsi)
2040
2041	jne	.L256_enc_msg_x4_loop1
2042
2043	addq	$64,%rsi
2044	addq	$64,%rdi
2045
2046.L256_enc_msg_x4_check_remainder:
2047	cmpq	$0,%r10
2048	je	.L256_enc_msg_x4_out
2049
2050.L256_enc_msg_x4_loop2:
2051
2052
2053
2054	vmovdqa	%xmm0,%xmm5
2055	vpaddd	one(%rip),%xmm0,%xmm0
2056	vpxor	(%rcx),%xmm5,%xmm5
2057	vaesenc	16(%rcx),%xmm5,%xmm5
2058	vaesenc	32(%rcx),%xmm5,%xmm5
2059	vaesenc	48(%rcx),%xmm5,%xmm5
2060	vaesenc	64(%rcx),%xmm5,%xmm5
2061	vaesenc	80(%rcx),%xmm5,%xmm5
2062	vaesenc	96(%rcx),%xmm5,%xmm5
2063	vaesenc	112(%rcx),%xmm5,%xmm5
2064	vaesenc	128(%rcx),%xmm5,%xmm5
2065	vaesenc	144(%rcx),%xmm5,%xmm5
2066	vaesenc	160(%rcx),%xmm5,%xmm5
2067	vaesenc	176(%rcx),%xmm5,%xmm5
2068	vaesenc	192(%rcx),%xmm5,%xmm5
2069	vaesenc	208(%rcx),%xmm5,%xmm5
2070	vaesenclast	224(%rcx),%xmm5,%xmm5
2071
2072
2073	vpxor	(%rdi),%xmm5,%xmm5
2074
2075	vmovdqu	%xmm5,(%rsi)
2076
2077	addq	$16,%rdi
2078	addq	$16,%rsi
2079
2080	subq	$1,%r10
2081	jne	.L256_enc_msg_x4_loop2
2082
2083.L256_enc_msg_x4_out:
2084	ret
2085.cfi_endproc
2086.size	aes256gcmsiv_enc_msg_x4,.-aes256gcmsiv_enc_msg_x4
2087.globl	aes256gcmsiv_enc_msg_x8
2088.hidden aes256gcmsiv_enc_msg_x8
2089.type	aes256gcmsiv_enc_msg_x8,@function
2090.align	16
2091aes256gcmsiv_enc_msg_x8:
2092.cfi_startproc
2093_CET_ENDBR
2094	testq	%r8,%r8
2095	jnz	.L256_enc_msg_x8_start
2096	ret
2097
2098.L256_enc_msg_x8_start:
2099
2100	movq	%rsp,%r11
2101	subq	$16,%r11
2102	andq	$-64,%r11
2103
2104	movq	%r8,%r10
2105	shrq	$4,%r8
2106	shlq	$60,%r10
2107	jz	.L256_enc_msg_x8_start2
2108	addq	$1,%r8
2109
2110.L256_enc_msg_x8_start2:
2111	movq	%r8,%r10
2112	shlq	$61,%r10
2113	shrq	$61,%r10
2114
2115
2116	vmovdqa	(%rdx),%xmm1
2117	vpor	OR_MASK(%rip),%xmm1,%xmm1
2118
2119
2120	vpaddd	seven(%rip),%xmm1,%xmm0
2121	vmovdqa	%xmm0,(%r11)
2122	vpaddd	one(%rip),%xmm1,%xmm9
2123	vpaddd	two(%rip),%xmm1,%xmm10
2124	vpaddd	three(%rip),%xmm1,%xmm11
2125	vpaddd	four(%rip),%xmm1,%xmm12
2126	vpaddd	five(%rip),%xmm1,%xmm13
2127	vpaddd	six(%rip),%xmm1,%xmm14
2128	vmovdqa	%xmm1,%xmm0
2129
2130	shrq	$3,%r8
2131	jz	.L256_enc_msg_x8_check_remainder
2132
2133	subq	$128,%rsi
2134	subq	$128,%rdi
2135
2136.L256_enc_msg_x8_loop1:
2137	addq	$128,%rsi
2138	addq	$128,%rdi
2139
2140	vmovdqa	%xmm0,%xmm1
2141	vmovdqa	%xmm9,%xmm2
2142	vmovdqa	%xmm10,%xmm3
2143	vmovdqa	%xmm11,%xmm4
2144	vmovdqa	%xmm12,%xmm5
2145	vmovdqa	%xmm13,%xmm6
2146	vmovdqa	%xmm14,%xmm7
2147
2148	vmovdqa	(%r11),%xmm8
2149
2150	vpxor	(%rcx),%xmm1,%xmm1
2151	vpxor	(%rcx),%xmm2,%xmm2
2152	vpxor	(%rcx),%xmm3,%xmm3
2153	vpxor	(%rcx),%xmm4,%xmm4
2154	vpxor	(%rcx),%xmm5,%xmm5
2155	vpxor	(%rcx),%xmm6,%xmm6
2156	vpxor	(%rcx),%xmm7,%xmm7
2157	vpxor	(%rcx),%xmm8,%xmm8
2158
2159	vmovdqu	16(%rcx),%xmm15
2160	vaesenc	%xmm15,%xmm1,%xmm1
2161	vaesenc	%xmm15,%xmm2,%xmm2
2162	vaesenc	%xmm15,%xmm3,%xmm3
2163	vaesenc	%xmm15,%xmm4,%xmm4
2164	vaesenc	%xmm15,%xmm5,%xmm5
2165	vaesenc	%xmm15,%xmm6,%xmm6
2166	vaesenc	%xmm15,%xmm7,%xmm7
2167	vaesenc	%xmm15,%xmm8,%xmm8
2168
2169	vmovdqa	(%r11),%xmm14
2170	vpaddd	eight(%rip),%xmm14,%xmm14
2171	vmovdqa	%xmm14,(%r11)
2172	vmovdqu	32(%rcx),%xmm15
2173	vaesenc	%xmm15,%xmm1,%xmm1
2174	vaesenc	%xmm15,%xmm2,%xmm2
2175	vaesenc	%xmm15,%xmm3,%xmm3
2176	vaesenc	%xmm15,%xmm4,%xmm4
2177	vaesenc	%xmm15,%xmm5,%xmm5
2178	vaesenc	%xmm15,%xmm6,%xmm6
2179	vaesenc	%xmm15,%xmm7,%xmm7
2180	vaesenc	%xmm15,%xmm8,%xmm8
2181
2182	vpsubd	one(%rip),%xmm14,%xmm14
2183	vmovdqu	48(%rcx),%xmm15
2184	vaesenc	%xmm15,%xmm1,%xmm1
2185	vaesenc	%xmm15,%xmm2,%xmm2
2186	vaesenc	%xmm15,%xmm3,%xmm3
2187	vaesenc	%xmm15,%xmm4,%xmm4
2188	vaesenc	%xmm15,%xmm5,%xmm5
2189	vaesenc	%xmm15,%xmm6,%xmm6
2190	vaesenc	%xmm15,%xmm7,%xmm7
2191	vaesenc	%xmm15,%xmm8,%xmm8
2192
2193	vpaddd	eight(%rip),%xmm0,%xmm0
2194	vmovdqu	64(%rcx),%xmm15
2195	vaesenc	%xmm15,%xmm1,%xmm1
2196	vaesenc	%xmm15,%xmm2,%xmm2
2197	vaesenc	%xmm15,%xmm3,%xmm3
2198	vaesenc	%xmm15,%xmm4,%xmm4
2199	vaesenc	%xmm15,%xmm5,%xmm5
2200	vaesenc	%xmm15,%xmm6,%xmm6
2201	vaesenc	%xmm15,%xmm7,%xmm7
2202	vaesenc	%xmm15,%xmm8,%xmm8
2203
2204	vpaddd	eight(%rip),%xmm9,%xmm9
2205	vmovdqu	80(%rcx),%xmm15
2206	vaesenc	%xmm15,%xmm1,%xmm1
2207	vaesenc	%xmm15,%xmm2,%xmm2
2208	vaesenc	%xmm15,%xmm3,%xmm3
2209	vaesenc	%xmm15,%xmm4,%xmm4
2210	vaesenc	%xmm15,%xmm5,%xmm5
2211	vaesenc	%xmm15,%xmm6,%xmm6
2212	vaesenc	%xmm15,%xmm7,%xmm7
2213	vaesenc	%xmm15,%xmm8,%xmm8
2214
2215	vpaddd	eight(%rip),%xmm10,%xmm10
2216	vmovdqu	96(%rcx),%xmm15
2217	vaesenc	%xmm15,%xmm1,%xmm1
2218	vaesenc	%xmm15,%xmm2,%xmm2
2219	vaesenc	%xmm15,%xmm3,%xmm3
2220	vaesenc	%xmm15,%xmm4,%xmm4
2221	vaesenc	%xmm15,%xmm5,%xmm5
2222	vaesenc	%xmm15,%xmm6,%xmm6
2223	vaesenc	%xmm15,%xmm7,%xmm7
2224	vaesenc	%xmm15,%xmm8,%xmm8
2225
2226	vpaddd	eight(%rip),%xmm11,%xmm11
2227	vmovdqu	112(%rcx),%xmm15
2228	vaesenc	%xmm15,%xmm1,%xmm1
2229	vaesenc	%xmm15,%xmm2,%xmm2
2230	vaesenc	%xmm15,%xmm3,%xmm3
2231	vaesenc	%xmm15,%xmm4,%xmm4
2232	vaesenc	%xmm15,%xmm5,%xmm5
2233	vaesenc	%xmm15,%xmm6,%xmm6
2234	vaesenc	%xmm15,%xmm7,%xmm7
2235	vaesenc	%xmm15,%xmm8,%xmm8
2236
2237	vpaddd	eight(%rip),%xmm12,%xmm12
2238	vmovdqu	128(%rcx),%xmm15
2239	vaesenc	%xmm15,%xmm1,%xmm1
2240	vaesenc	%xmm15,%xmm2,%xmm2
2241	vaesenc	%xmm15,%xmm3,%xmm3
2242	vaesenc	%xmm15,%xmm4,%xmm4
2243	vaesenc	%xmm15,%xmm5,%xmm5
2244	vaesenc	%xmm15,%xmm6,%xmm6
2245	vaesenc	%xmm15,%xmm7,%xmm7
2246	vaesenc	%xmm15,%xmm8,%xmm8
2247
2248	vpaddd	eight(%rip),%xmm13,%xmm13
2249	vmovdqu	144(%rcx),%xmm15
2250	vaesenc	%xmm15,%xmm1,%xmm1
2251	vaesenc	%xmm15,%xmm2,%xmm2
2252	vaesenc	%xmm15,%xmm3,%xmm3
2253	vaesenc	%xmm15,%xmm4,%xmm4
2254	vaesenc	%xmm15,%xmm5,%xmm5
2255	vaesenc	%xmm15,%xmm6,%xmm6
2256	vaesenc	%xmm15,%xmm7,%xmm7
2257	vaesenc	%xmm15,%xmm8,%xmm8
2258
2259	vmovdqu	160(%rcx),%xmm15
2260	vaesenc	%xmm15,%xmm1,%xmm1
2261	vaesenc	%xmm15,%xmm2,%xmm2
2262	vaesenc	%xmm15,%xmm3,%xmm3
2263	vaesenc	%xmm15,%xmm4,%xmm4
2264	vaesenc	%xmm15,%xmm5,%xmm5
2265	vaesenc	%xmm15,%xmm6,%xmm6
2266	vaesenc	%xmm15,%xmm7,%xmm7
2267	vaesenc	%xmm15,%xmm8,%xmm8
2268
2269	vmovdqu	176(%rcx),%xmm15
2270	vaesenc	%xmm15,%xmm1,%xmm1
2271	vaesenc	%xmm15,%xmm2,%xmm2
2272	vaesenc	%xmm15,%xmm3,%xmm3
2273	vaesenc	%xmm15,%xmm4,%xmm4
2274	vaesenc	%xmm15,%xmm5,%xmm5
2275	vaesenc	%xmm15,%xmm6,%xmm6
2276	vaesenc	%xmm15,%xmm7,%xmm7
2277	vaesenc	%xmm15,%xmm8,%xmm8
2278
2279	vmovdqu	192(%rcx),%xmm15
2280	vaesenc	%xmm15,%xmm1,%xmm1
2281	vaesenc	%xmm15,%xmm2,%xmm2
2282	vaesenc	%xmm15,%xmm3,%xmm3
2283	vaesenc	%xmm15,%xmm4,%xmm4
2284	vaesenc	%xmm15,%xmm5,%xmm5
2285	vaesenc	%xmm15,%xmm6,%xmm6
2286	vaesenc	%xmm15,%xmm7,%xmm7
2287	vaesenc	%xmm15,%xmm8,%xmm8
2288
2289	vmovdqu	208(%rcx),%xmm15
2290	vaesenc	%xmm15,%xmm1,%xmm1
2291	vaesenc	%xmm15,%xmm2,%xmm2
2292	vaesenc	%xmm15,%xmm3,%xmm3
2293	vaesenc	%xmm15,%xmm4,%xmm4
2294	vaesenc	%xmm15,%xmm5,%xmm5
2295	vaesenc	%xmm15,%xmm6,%xmm6
2296	vaesenc	%xmm15,%xmm7,%xmm7
2297	vaesenc	%xmm15,%xmm8,%xmm8
2298
2299	vmovdqu	224(%rcx),%xmm15
2300	vaesenclast	%xmm15,%xmm1,%xmm1
2301	vaesenclast	%xmm15,%xmm2,%xmm2
2302	vaesenclast	%xmm15,%xmm3,%xmm3
2303	vaesenclast	%xmm15,%xmm4,%xmm4
2304	vaesenclast	%xmm15,%xmm5,%xmm5
2305	vaesenclast	%xmm15,%xmm6,%xmm6
2306	vaesenclast	%xmm15,%xmm7,%xmm7
2307	vaesenclast	%xmm15,%xmm8,%xmm8
2308
2309
2310
2311	vpxor	0(%rdi),%xmm1,%xmm1
2312	vpxor	16(%rdi),%xmm2,%xmm2
2313	vpxor	32(%rdi),%xmm3,%xmm3
2314	vpxor	48(%rdi),%xmm4,%xmm4
2315	vpxor	64(%rdi),%xmm5,%xmm5
2316	vpxor	80(%rdi),%xmm6,%xmm6
2317	vpxor	96(%rdi),%xmm7,%xmm7
2318	vpxor	112(%rdi),%xmm8,%xmm8
2319
2320	subq	$1,%r8
2321
2322	vmovdqu	%xmm1,0(%rsi)
2323	vmovdqu	%xmm2,16(%rsi)
2324	vmovdqu	%xmm3,32(%rsi)
2325	vmovdqu	%xmm4,48(%rsi)
2326	vmovdqu	%xmm5,64(%rsi)
2327	vmovdqu	%xmm6,80(%rsi)
2328	vmovdqu	%xmm7,96(%rsi)
2329	vmovdqu	%xmm8,112(%rsi)
2330
2331	jne	.L256_enc_msg_x8_loop1
2332
2333	addq	$128,%rsi
2334	addq	$128,%rdi
2335
2336.L256_enc_msg_x8_check_remainder:
2337	cmpq	$0,%r10
2338	je	.L256_enc_msg_x8_out
2339
2340.L256_enc_msg_x8_loop2:
2341
2342
2343	vmovdqa	%xmm0,%xmm1
2344	vpaddd	one(%rip),%xmm0,%xmm0
2345
2346	vpxor	(%rcx),%xmm1,%xmm1
2347	vaesenc	16(%rcx),%xmm1,%xmm1
2348	vaesenc	32(%rcx),%xmm1,%xmm1
2349	vaesenc	48(%rcx),%xmm1,%xmm1
2350	vaesenc	64(%rcx),%xmm1,%xmm1
2351	vaesenc	80(%rcx),%xmm1,%xmm1
2352	vaesenc	96(%rcx),%xmm1,%xmm1
2353	vaesenc	112(%rcx),%xmm1,%xmm1
2354	vaesenc	128(%rcx),%xmm1,%xmm1
2355	vaesenc	144(%rcx),%xmm1,%xmm1
2356	vaesenc	160(%rcx),%xmm1,%xmm1
2357	vaesenc	176(%rcx),%xmm1,%xmm1
2358	vaesenc	192(%rcx),%xmm1,%xmm1
2359	vaesenc	208(%rcx),%xmm1,%xmm1
2360	vaesenclast	224(%rcx),%xmm1,%xmm1
2361
2362
2363	vpxor	(%rdi),%xmm1,%xmm1
2364
2365	vmovdqu	%xmm1,(%rsi)
2366
2367	addq	$16,%rdi
2368	addq	$16,%rsi
2369	subq	$1,%r10
2370	jnz	.L256_enc_msg_x8_loop2
2371
2372.L256_enc_msg_x8_out:
2373	ret
2374
2375.cfi_endproc
2376.size	aes256gcmsiv_enc_msg_x8,.-aes256gcmsiv_enc_msg_x8
2377.globl	aes256gcmsiv_dec
2378.hidden aes256gcmsiv_dec
2379.type	aes256gcmsiv_dec,@function
2380.align	16
2381aes256gcmsiv_dec:
2382.cfi_startproc
2383_CET_ENDBR
2384	testq	$~15,%r9
2385	jnz	.L256_dec_start
2386	ret
2387
2388.L256_dec_start:
2389	vzeroupper
2390	vmovdqa	(%rdx),%xmm0
2391
2392
2393	vmovdqu	16(%rdx),%xmm15
2394	vpor	OR_MASK(%rip),%xmm15,%xmm15
2395	movq	%rdx,%rax
2396
2397	leaq	32(%rax),%rax
2398	leaq	32(%rcx),%rcx
2399
2400	andq	$~15,%r9
2401
2402
2403	cmpq	$96,%r9
2404	jb	.L256_dec_loop2
2405
2406
2407	subq	$96,%r9
2408	vmovdqa	%xmm15,%xmm7
2409	vpaddd	one(%rip),%xmm7,%xmm8
2410	vpaddd	two(%rip),%xmm7,%xmm9
2411	vpaddd	one(%rip),%xmm9,%xmm10
2412	vpaddd	two(%rip),%xmm9,%xmm11
2413	vpaddd	one(%rip),%xmm11,%xmm12
2414	vpaddd	two(%rip),%xmm11,%xmm15
2415
2416	vpxor	(%r8),%xmm7,%xmm7
2417	vpxor	(%r8),%xmm8,%xmm8
2418	vpxor	(%r8),%xmm9,%xmm9
2419	vpxor	(%r8),%xmm10,%xmm10
2420	vpxor	(%r8),%xmm11,%xmm11
2421	vpxor	(%r8),%xmm12,%xmm12
2422
2423	vmovdqu	16(%r8),%xmm4
2424	vaesenc	%xmm4,%xmm7,%xmm7
2425	vaesenc	%xmm4,%xmm8,%xmm8
2426	vaesenc	%xmm4,%xmm9,%xmm9
2427	vaesenc	%xmm4,%xmm10,%xmm10
2428	vaesenc	%xmm4,%xmm11,%xmm11
2429	vaesenc	%xmm4,%xmm12,%xmm12
2430
2431	vmovdqu	32(%r8),%xmm4
2432	vaesenc	%xmm4,%xmm7,%xmm7
2433	vaesenc	%xmm4,%xmm8,%xmm8
2434	vaesenc	%xmm4,%xmm9,%xmm9
2435	vaesenc	%xmm4,%xmm10,%xmm10
2436	vaesenc	%xmm4,%xmm11,%xmm11
2437	vaesenc	%xmm4,%xmm12,%xmm12
2438
2439	vmovdqu	48(%r8),%xmm4
2440	vaesenc	%xmm4,%xmm7,%xmm7
2441	vaesenc	%xmm4,%xmm8,%xmm8
2442	vaesenc	%xmm4,%xmm9,%xmm9
2443	vaesenc	%xmm4,%xmm10,%xmm10
2444	vaesenc	%xmm4,%xmm11,%xmm11
2445	vaesenc	%xmm4,%xmm12,%xmm12
2446
2447	vmovdqu	64(%r8),%xmm4
2448	vaesenc	%xmm4,%xmm7,%xmm7
2449	vaesenc	%xmm4,%xmm8,%xmm8
2450	vaesenc	%xmm4,%xmm9,%xmm9
2451	vaesenc	%xmm4,%xmm10,%xmm10
2452	vaesenc	%xmm4,%xmm11,%xmm11
2453	vaesenc	%xmm4,%xmm12,%xmm12
2454
2455	vmovdqu	80(%r8),%xmm4
2456	vaesenc	%xmm4,%xmm7,%xmm7
2457	vaesenc	%xmm4,%xmm8,%xmm8
2458	vaesenc	%xmm4,%xmm9,%xmm9
2459	vaesenc	%xmm4,%xmm10,%xmm10
2460	vaesenc	%xmm4,%xmm11,%xmm11
2461	vaesenc	%xmm4,%xmm12,%xmm12
2462
2463	vmovdqu	96(%r8),%xmm4
2464	vaesenc	%xmm4,%xmm7,%xmm7
2465	vaesenc	%xmm4,%xmm8,%xmm8
2466	vaesenc	%xmm4,%xmm9,%xmm9
2467	vaesenc	%xmm4,%xmm10,%xmm10
2468	vaesenc	%xmm4,%xmm11,%xmm11
2469	vaesenc	%xmm4,%xmm12,%xmm12
2470
2471	vmovdqu	112(%r8),%xmm4
2472	vaesenc	%xmm4,%xmm7,%xmm7
2473	vaesenc	%xmm4,%xmm8,%xmm8
2474	vaesenc	%xmm4,%xmm9,%xmm9
2475	vaesenc	%xmm4,%xmm10,%xmm10
2476	vaesenc	%xmm4,%xmm11,%xmm11
2477	vaesenc	%xmm4,%xmm12,%xmm12
2478
2479	vmovdqu	128(%r8),%xmm4
2480	vaesenc	%xmm4,%xmm7,%xmm7
2481	vaesenc	%xmm4,%xmm8,%xmm8
2482	vaesenc	%xmm4,%xmm9,%xmm9
2483	vaesenc	%xmm4,%xmm10,%xmm10
2484	vaesenc	%xmm4,%xmm11,%xmm11
2485	vaesenc	%xmm4,%xmm12,%xmm12
2486
2487	vmovdqu	144(%r8),%xmm4
2488	vaesenc	%xmm4,%xmm7,%xmm7
2489	vaesenc	%xmm4,%xmm8,%xmm8
2490	vaesenc	%xmm4,%xmm9,%xmm9
2491	vaesenc	%xmm4,%xmm10,%xmm10
2492	vaesenc	%xmm4,%xmm11,%xmm11
2493	vaesenc	%xmm4,%xmm12,%xmm12
2494
2495	vmovdqu	160(%r8),%xmm4
2496	vaesenc	%xmm4,%xmm7,%xmm7
2497	vaesenc	%xmm4,%xmm8,%xmm8
2498	vaesenc	%xmm4,%xmm9,%xmm9
2499	vaesenc	%xmm4,%xmm10,%xmm10
2500	vaesenc	%xmm4,%xmm11,%xmm11
2501	vaesenc	%xmm4,%xmm12,%xmm12
2502
2503	vmovdqu	176(%r8),%xmm4
2504	vaesenc	%xmm4,%xmm7,%xmm7
2505	vaesenc	%xmm4,%xmm8,%xmm8
2506	vaesenc	%xmm4,%xmm9,%xmm9
2507	vaesenc	%xmm4,%xmm10,%xmm10
2508	vaesenc	%xmm4,%xmm11,%xmm11
2509	vaesenc	%xmm4,%xmm12,%xmm12
2510
2511	vmovdqu	192(%r8),%xmm4
2512	vaesenc	%xmm4,%xmm7,%xmm7
2513	vaesenc	%xmm4,%xmm8,%xmm8
2514	vaesenc	%xmm4,%xmm9,%xmm9
2515	vaesenc	%xmm4,%xmm10,%xmm10
2516	vaesenc	%xmm4,%xmm11,%xmm11
2517	vaesenc	%xmm4,%xmm12,%xmm12
2518
2519	vmovdqu	208(%r8),%xmm4
2520	vaesenc	%xmm4,%xmm7,%xmm7
2521	vaesenc	%xmm4,%xmm8,%xmm8
2522	vaesenc	%xmm4,%xmm9,%xmm9
2523	vaesenc	%xmm4,%xmm10,%xmm10
2524	vaesenc	%xmm4,%xmm11,%xmm11
2525	vaesenc	%xmm4,%xmm12,%xmm12
2526
2527	vmovdqu	224(%r8),%xmm4
2528	vaesenclast	%xmm4,%xmm7,%xmm7
2529	vaesenclast	%xmm4,%xmm8,%xmm8
2530	vaesenclast	%xmm4,%xmm9,%xmm9
2531	vaesenclast	%xmm4,%xmm10,%xmm10
2532	vaesenclast	%xmm4,%xmm11,%xmm11
2533	vaesenclast	%xmm4,%xmm12,%xmm12
2534
2535
2536	vpxor	0(%rdi),%xmm7,%xmm7
2537	vpxor	16(%rdi),%xmm8,%xmm8
2538	vpxor	32(%rdi),%xmm9,%xmm9
2539	vpxor	48(%rdi),%xmm10,%xmm10
2540	vpxor	64(%rdi),%xmm11,%xmm11
2541	vpxor	80(%rdi),%xmm12,%xmm12
2542
2543	vmovdqu	%xmm7,0(%rsi)
2544	vmovdqu	%xmm8,16(%rsi)
2545	vmovdqu	%xmm9,32(%rsi)
2546	vmovdqu	%xmm10,48(%rsi)
2547	vmovdqu	%xmm11,64(%rsi)
2548	vmovdqu	%xmm12,80(%rsi)
2549
2550	addq	$96,%rdi
2551	addq	$96,%rsi
2552	jmp	.L256_dec_loop1
2553
2554
2555.align	64
2556.L256_dec_loop1:
2557	cmpq	$96,%r9
2558	jb	.L256_dec_finish_96
2559	subq	$96,%r9
2560
2561	vmovdqa	%xmm12,%xmm6
2562	vmovdqa	%xmm11,16-32(%rax)
2563	vmovdqa	%xmm10,32-32(%rax)
2564	vmovdqa	%xmm9,48-32(%rax)
2565	vmovdqa	%xmm8,64-32(%rax)
2566	vmovdqa	%xmm7,80-32(%rax)
2567
2568	vmovdqa	%xmm15,%xmm7
2569	vpaddd	one(%rip),%xmm7,%xmm8
2570	vpaddd	two(%rip),%xmm7,%xmm9
2571	vpaddd	one(%rip),%xmm9,%xmm10
2572	vpaddd	two(%rip),%xmm9,%xmm11
2573	vpaddd	one(%rip),%xmm11,%xmm12
2574	vpaddd	two(%rip),%xmm11,%xmm15
2575
2576	vmovdqa	(%r8),%xmm4
2577	vpxor	%xmm4,%xmm7,%xmm7
2578	vpxor	%xmm4,%xmm8,%xmm8
2579	vpxor	%xmm4,%xmm9,%xmm9
2580	vpxor	%xmm4,%xmm10,%xmm10
2581	vpxor	%xmm4,%xmm11,%xmm11
2582	vpxor	%xmm4,%xmm12,%xmm12
2583
2584	vmovdqu	0-32(%rcx),%xmm4
2585	vpclmulqdq	$0x11,%xmm4,%xmm6,%xmm2
2586	vpclmulqdq	$0x00,%xmm4,%xmm6,%xmm3
2587	vpclmulqdq	$0x01,%xmm4,%xmm6,%xmm1
2588	vpclmulqdq	$0x10,%xmm4,%xmm6,%xmm4
2589	vpxor	%xmm4,%xmm1,%xmm1
2590
2591	vmovdqu	16(%r8),%xmm4
2592	vaesenc	%xmm4,%xmm7,%xmm7
2593	vaesenc	%xmm4,%xmm8,%xmm8
2594	vaesenc	%xmm4,%xmm9,%xmm9
2595	vaesenc	%xmm4,%xmm10,%xmm10
2596	vaesenc	%xmm4,%xmm11,%xmm11
2597	vaesenc	%xmm4,%xmm12,%xmm12
2598
2599	vmovdqu	-16(%rax),%xmm6
2600	vmovdqu	-16(%rcx),%xmm13
2601
2602	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2603	vpxor	%xmm4,%xmm1,%xmm1
2604	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2605	vpxor	%xmm4,%xmm2,%xmm2
2606	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2607	vpxor	%xmm4,%xmm3,%xmm3
2608	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2609	vpxor	%xmm4,%xmm1,%xmm1
2610
2611
2612	vmovdqu	32(%r8),%xmm4
2613	vaesenc	%xmm4,%xmm7,%xmm7
2614	vaesenc	%xmm4,%xmm8,%xmm8
2615	vaesenc	%xmm4,%xmm9,%xmm9
2616	vaesenc	%xmm4,%xmm10,%xmm10
2617	vaesenc	%xmm4,%xmm11,%xmm11
2618	vaesenc	%xmm4,%xmm12,%xmm12
2619
2620	vmovdqu	0(%rax),%xmm6
2621	vmovdqu	0(%rcx),%xmm13
2622
2623	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2624	vpxor	%xmm4,%xmm1,%xmm1
2625	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2626	vpxor	%xmm4,%xmm2,%xmm2
2627	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2628	vpxor	%xmm4,%xmm3,%xmm3
2629	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2630	vpxor	%xmm4,%xmm1,%xmm1
2631
2632
2633	vmovdqu	48(%r8),%xmm4
2634	vaesenc	%xmm4,%xmm7,%xmm7
2635	vaesenc	%xmm4,%xmm8,%xmm8
2636	vaesenc	%xmm4,%xmm9,%xmm9
2637	vaesenc	%xmm4,%xmm10,%xmm10
2638	vaesenc	%xmm4,%xmm11,%xmm11
2639	vaesenc	%xmm4,%xmm12,%xmm12
2640
2641	vmovdqu	16(%rax),%xmm6
2642	vmovdqu	16(%rcx),%xmm13
2643
2644	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2645	vpxor	%xmm4,%xmm1,%xmm1
2646	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2647	vpxor	%xmm4,%xmm2,%xmm2
2648	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2649	vpxor	%xmm4,%xmm3,%xmm3
2650	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2651	vpxor	%xmm4,%xmm1,%xmm1
2652
2653
2654	vmovdqu	64(%r8),%xmm4
2655	vaesenc	%xmm4,%xmm7,%xmm7
2656	vaesenc	%xmm4,%xmm8,%xmm8
2657	vaesenc	%xmm4,%xmm9,%xmm9
2658	vaesenc	%xmm4,%xmm10,%xmm10
2659	vaesenc	%xmm4,%xmm11,%xmm11
2660	vaesenc	%xmm4,%xmm12,%xmm12
2661
2662	vmovdqu	32(%rax),%xmm6
2663	vmovdqu	32(%rcx),%xmm13
2664
2665	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2666	vpxor	%xmm4,%xmm1,%xmm1
2667	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2668	vpxor	%xmm4,%xmm2,%xmm2
2669	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2670	vpxor	%xmm4,%xmm3,%xmm3
2671	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2672	vpxor	%xmm4,%xmm1,%xmm1
2673
2674
2675	vmovdqu	80(%r8),%xmm4
2676	vaesenc	%xmm4,%xmm7,%xmm7
2677	vaesenc	%xmm4,%xmm8,%xmm8
2678	vaesenc	%xmm4,%xmm9,%xmm9
2679	vaesenc	%xmm4,%xmm10,%xmm10
2680	vaesenc	%xmm4,%xmm11,%xmm11
2681	vaesenc	%xmm4,%xmm12,%xmm12
2682
2683	vmovdqu	96(%r8),%xmm4
2684	vaesenc	%xmm4,%xmm7,%xmm7
2685	vaesenc	%xmm4,%xmm8,%xmm8
2686	vaesenc	%xmm4,%xmm9,%xmm9
2687	vaesenc	%xmm4,%xmm10,%xmm10
2688	vaesenc	%xmm4,%xmm11,%xmm11
2689	vaesenc	%xmm4,%xmm12,%xmm12
2690
2691	vmovdqu	112(%r8),%xmm4
2692	vaesenc	%xmm4,%xmm7,%xmm7
2693	vaesenc	%xmm4,%xmm8,%xmm8
2694	vaesenc	%xmm4,%xmm9,%xmm9
2695	vaesenc	%xmm4,%xmm10,%xmm10
2696	vaesenc	%xmm4,%xmm11,%xmm11
2697	vaesenc	%xmm4,%xmm12,%xmm12
2698
2699
2700	vmovdqa	80-32(%rax),%xmm6
2701	vpxor	%xmm0,%xmm6,%xmm6
2702	vmovdqu	80-32(%rcx),%xmm5
2703
2704	vpclmulqdq	$0x01,%xmm5,%xmm6,%xmm4
2705	vpxor	%xmm4,%xmm1,%xmm1
2706	vpclmulqdq	$0x11,%xmm5,%xmm6,%xmm4
2707	vpxor	%xmm4,%xmm2,%xmm2
2708	vpclmulqdq	$0x00,%xmm5,%xmm6,%xmm4
2709	vpxor	%xmm4,%xmm3,%xmm3
2710	vpclmulqdq	$0x10,%xmm5,%xmm6,%xmm4
2711	vpxor	%xmm4,%xmm1,%xmm1
2712
2713	vmovdqu	128(%r8),%xmm4
2714	vaesenc	%xmm4,%xmm7,%xmm7
2715	vaesenc	%xmm4,%xmm8,%xmm8
2716	vaesenc	%xmm4,%xmm9,%xmm9
2717	vaesenc	%xmm4,%xmm10,%xmm10
2718	vaesenc	%xmm4,%xmm11,%xmm11
2719	vaesenc	%xmm4,%xmm12,%xmm12
2720
2721
2722	vpsrldq	$8,%xmm1,%xmm4
2723	vpxor	%xmm4,%xmm2,%xmm5
2724	vpslldq	$8,%xmm1,%xmm4
2725	vpxor	%xmm4,%xmm3,%xmm0
2726
2727	vmovdqa	poly(%rip),%xmm3
2728
2729	vmovdqu	144(%r8),%xmm4
2730	vaesenc	%xmm4,%xmm7,%xmm7
2731	vaesenc	%xmm4,%xmm8,%xmm8
2732	vaesenc	%xmm4,%xmm9,%xmm9
2733	vaesenc	%xmm4,%xmm10,%xmm10
2734	vaesenc	%xmm4,%xmm11,%xmm11
2735	vaesenc	%xmm4,%xmm12,%xmm12
2736
2737	vmovdqu	160(%r8),%xmm4
2738	vaesenc	%xmm4,%xmm7,%xmm7
2739	vaesenc	%xmm4,%xmm8,%xmm8
2740	vaesenc	%xmm4,%xmm9,%xmm9
2741	vaesenc	%xmm4,%xmm10,%xmm10
2742	vaesenc	%xmm4,%xmm11,%xmm11
2743	vaesenc	%xmm4,%xmm12,%xmm12
2744
2745	vmovdqu	176(%r8),%xmm4
2746	vaesenc	%xmm4,%xmm7,%xmm7
2747	vaesenc	%xmm4,%xmm8,%xmm8
2748	vaesenc	%xmm4,%xmm9,%xmm9
2749	vaesenc	%xmm4,%xmm10,%xmm10
2750	vaesenc	%xmm4,%xmm11,%xmm11
2751	vaesenc	%xmm4,%xmm12,%xmm12
2752
2753	vmovdqu	192(%r8),%xmm4
2754	vaesenc	%xmm4,%xmm7,%xmm7
2755	vaesenc	%xmm4,%xmm8,%xmm8
2756	vaesenc	%xmm4,%xmm9,%xmm9
2757	vaesenc	%xmm4,%xmm10,%xmm10
2758	vaesenc	%xmm4,%xmm11,%xmm11
2759	vaesenc	%xmm4,%xmm12,%xmm12
2760
2761	vmovdqu	208(%r8),%xmm4
2762	vaesenc	%xmm4,%xmm7,%xmm7
2763	vaesenc	%xmm4,%xmm8,%xmm8
2764	vaesenc	%xmm4,%xmm9,%xmm9
2765	vaesenc	%xmm4,%xmm10,%xmm10
2766	vaesenc	%xmm4,%xmm11,%xmm11
2767	vaesenc	%xmm4,%xmm12,%xmm12
2768
2769	vmovdqu	224(%r8),%xmm6
2770	vpalignr	$8,%xmm0,%xmm0,%xmm2
2771	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
2772	vpxor	%xmm0,%xmm2,%xmm0
2773
2774	vpxor	0(%rdi),%xmm6,%xmm4
2775	vaesenclast	%xmm4,%xmm7,%xmm7
2776	vpxor	16(%rdi),%xmm6,%xmm4
2777	vaesenclast	%xmm4,%xmm8,%xmm8
2778	vpxor	32(%rdi),%xmm6,%xmm4
2779	vaesenclast	%xmm4,%xmm9,%xmm9
2780	vpxor	48(%rdi),%xmm6,%xmm4
2781	vaesenclast	%xmm4,%xmm10,%xmm10
2782	vpxor	64(%rdi),%xmm6,%xmm4
2783	vaesenclast	%xmm4,%xmm11,%xmm11
2784	vpxor	80(%rdi),%xmm6,%xmm4
2785	vaesenclast	%xmm4,%xmm12,%xmm12
2786
2787	vpalignr	$8,%xmm0,%xmm0,%xmm2
2788	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
2789	vpxor	%xmm0,%xmm2,%xmm0
2790
2791	vmovdqu	%xmm7,0(%rsi)
2792	vmovdqu	%xmm8,16(%rsi)
2793	vmovdqu	%xmm9,32(%rsi)
2794	vmovdqu	%xmm10,48(%rsi)
2795	vmovdqu	%xmm11,64(%rsi)
2796	vmovdqu	%xmm12,80(%rsi)
2797
2798	vpxor	%xmm5,%xmm0,%xmm0
2799
2800	leaq	96(%rdi),%rdi
2801	leaq	96(%rsi),%rsi
2802	jmp	.L256_dec_loop1
2803
2804.L256_dec_finish_96:
2805	vmovdqa	%xmm12,%xmm6
2806	vmovdqa	%xmm11,16-32(%rax)
2807	vmovdqa	%xmm10,32-32(%rax)
2808	vmovdqa	%xmm9,48-32(%rax)
2809	vmovdqa	%xmm8,64-32(%rax)
2810	vmovdqa	%xmm7,80-32(%rax)
2811
2812	vmovdqu	0-32(%rcx),%xmm4
2813	vpclmulqdq	$0x10,%xmm4,%xmm6,%xmm1
2814	vpclmulqdq	$0x11,%xmm4,%xmm6,%xmm2
2815	vpclmulqdq	$0x00,%xmm4,%xmm6,%xmm3
2816	vpclmulqdq	$0x01,%xmm4,%xmm6,%xmm4
2817	vpxor	%xmm4,%xmm1,%xmm1
2818
2819	vmovdqu	-16(%rax),%xmm6
2820	vmovdqu	-16(%rcx),%xmm13
2821
2822	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2823	vpxor	%xmm4,%xmm1,%xmm1
2824	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2825	vpxor	%xmm4,%xmm2,%xmm2
2826	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2827	vpxor	%xmm4,%xmm3,%xmm3
2828	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2829	vpxor	%xmm4,%xmm1,%xmm1
2830
2831	vmovdqu	0(%rax),%xmm6
2832	vmovdqu	0(%rcx),%xmm13
2833
2834	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2835	vpxor	%xmm4,%xmm1,%xmm1
2836	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2837	vpxor	%xmm4,%xmm2,%xmm2
2838	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2839	vpxor	%xmm4,%xmm3,%xmm3
2840	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2841	vpxor	%xmm4,%xmm1,%xmm1
2842
2843	vmovdqu	16(%rax),%xmm6
2844	vmovdqu	16(%rcx),%xmm13
2845
2846	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2847	vpxor	%xmm4,%xmm1,%xmm1
2848	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2849	vpxor	%xmm4,%xmm2,%xmm2
2850	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2851	vpxor	%xmm4,%xmm3,%xmm3
2852	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2853	vpxor	%xmm4,%xmm1,%xmm1
2854
2855	vmovdqu	32(%rax),%xmm6
2856	vmovdqu	32(%rcx),%xmm13
2857
2858	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2859	vpxor	%xmm4,%xmm1,%xmm1
2860	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2861	vpxor	%xmm4,%xmm2,%xmm2
2862	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2863	vpxor	%xmm4,%xmm3,%xmm3
2864	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2865	vpxor	%xmm4,%xmm1,%xmm1
2866
2867
2868	vmovdqu	80-32(%rax),%xmm6
2869	vpxor	%xmm0,%xmm6,%xmm6
2870	vmovdqu	80-32(%rcx),%xmm5
2871	vpclmulqdq	$0x11,%xmm5,%xmm6,%xmm4
2872	vpxor	%xmm4,%xmm2,%xmm2
2873	vpclmulqdq	$0x00,%xmm5,%xmm6,%xmm4
2874	vpxor	%xmm4,%xmm3,%xmm3
2875	vpclmulqdq	$0x10,%xmm5,%xmm6,%xmm4
2876	vpxor	%xmm4,%xmm1,%xmm1
2877	vpclmulqdq	$0x01,%xmm5,%xmm6,%xmm4
2878	vpxor	%xmm4,%xmm1,%xmm1
2879
2880	vpsrldq	$8,%xmm1,%xmm4
2881	vpxor	%xmm4,%xmm2,%xmm5
2882	vpslldq	$8,%xmm1,%xmm4
2883	vpxor	%xmm4,%xmm3,%xmm0
2884
2885	vmovdqa	poly(%rip),%xmm3
2886
2887	vpalignr	$8,%xmm0,%xmm0,%xmm2
2888	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
2889	vpxor	%xmm0,%xmm2,%xmm0
2890
2891	vpalignr	$8,%xmm0,%xmm0,%xmm2
2892	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
2893	vpxor	%xmm0,%xmm2,%xmm0
2894
2895	vpxor	%xmm5,%xmm0,%xmm0
2896
2897.L256_dec_loop2:
2898
2899
2900
2901	cmpq	$16,%r9
2902	jb	.L256_dec_out
2903	subq	$16,%r9
2904
2905	vmovdqa	%xmm15,%xmm2
2906	vpaddd	one(%rip),%xmm15,%xmm15
2907
2908	vpxor	0(%r8),%xmm2,%xmm2
2909	vaesenc	16(%r8),%xmm2,%xmm2
2910	vaesenc	32(%r8),%xmm2,%xmm2
2911	vaesenc	48(%r8),%xmm2,%xmm2
2912	vaesenc	64(%r8),%xmm2,%xmm2
2913	vaesenc	80(%r8),%xmm2,%xmm2
2914	vaesenc	96(%r8),%xmm2,%xmm2
2915	vaesenc	112(%r8),%xmm2,%xmm2
2916	vaesenc	128(%r8),%xmm2,%xmm2
2917	vaesenc	144(%r8),%xmm2,%xmm2
2918	vaesenc	160(%r8),%xmm2,%xmm2
2919	vaesenc	176(%r8),%xmm2,%xmm2
2920	vaesenc	192(%r8),%xmm2,%xmm2
2921	vaesenc	208(%r8),%xmm2,%xmm2
2922	vaesenclast	224(%r8),%xmm2,%xmm2
2923	vpxor	(%rdi),%xmm2,%xmm2
2924	vmovdqu	%xmm2,(%rsi)
2925	addq	$16,%rdi
2926	addq	$16,%rsi
2927
2928	vpxor	%xmm2,%xmm0,%xmm0
2929	vmovdqa	-32(%rcx),%xmm1
2930	call	GFMUL
2931
2932	jmp	.L256_dec_loop2
2933
2934.L256_dec_out:
2935	vmovdqu	%xmm0,(%rdx)
2936	ret
2937.cfi_endproc
2938.size	aes256gcmsiv_dec, .-aes256gcmsiv_dec
2939.globl	aes256gcmsiv_kdf
2940.hidden aes256gcmsiv_kdf
2941.type	aes256gcmsiv_kdf,@function
2942.align	16
2943aes256gcmsiv_kdf:
2944.cfi_startproc
2945_CET_ENDBR
2946
2947
2948
2949
2950	vmovdqa	(%rdx),%xmm1
2951	vmovdqa	0(%rdi),%xmm4
2952	vmovdqa	and_mask(%rip),%xmm11
2953	vmovdqa	one(%rip),%xmm8
2954	vpshufd	$0x90,%xmm4,%xmm4
2955	vpand	%xmm11,%xmm4,%xmm4
2956	vpaddd	%xmm8,%xmm4,%xmm6
2957	vpaddd	%xmm8,%xmm6,%xmm7
2958	vpaddd	%xmm8,%xmm7,%xmm11
2959	vpaddd	%xmm8,%xmm11,%xmm12
2960	vpaddd	%xmm8,%xmm12,%xmm13
2961
2962	vpxor	%xmm1,%xmm4,%xmm4
2963	vpxor	%xmm1,%xmm6,%xmm6
2964	vpxor	%xmm1,%xmm7,%xmm7
2965	vpxor	%xmm1,%xmm11,%xmm11
2966	vpxor	%xmm1,%xmm12,%xmm12
2967	vpxor	%xmm1,%xmm13,%xmm13
2968
2969	vmovdqa	16(%rdx),%xmm1
2970	vaesenc	%xmm1,%xmm4,%xmm4
2971	vaesenc	%xmm1,%xmm6,%xmm6
2972	vaesenc	%xmm1,%xmm7,%xmm7
2973	vaesenc	%xmm1,%xmm11,%xmm11
2974	vaesenc	%xmm1,%xmm12,%xmm12
2975	vaesenc	%xmm1,%xmm13,%xmm13
2976
2977	vmovdqa	32(%rdx),%xmm2
2978	vaesenc	%xmm2,%xmm4,%xmm4
2979	vaesenc	%xmm2,%xmm6,%xmm6
2980	vaesenc	%xmm2,%xmm7,%xmm7
2981	vaesenc	%xmm2,%xmm11,%xmm11
2982	vaesenc	%xmm2,%xmm12,%xmm12
2983	vaesenc	%xmm2,%xmm13,%xmm13
2984
2985	vmovdqa	48(%rdx),%xmm1
2986	vaesenc	%xmm1,%xmm4,%xmm4
2987	vaesenc	%xmm1,%xmm6,%xmm6
2988	vaesenc	%xmm1,%xmm7,%xmm7
2989	vaesenc	%xmm1,%xmm11,%xmm11
2990	vaesenc	%xmm1,%xmm12,%xmm12
2991	vaesenc	%xmm1,%xmm13,%xmm13
2992
2993	vmovdqa	64(%rdx),%xmm2
2994	vaesenc	%xmm2,%xmm4,%xmm4
2995	vaesenc	%xmm2,%xmm6,%xmm6
2996	vaesenc	%xmm2,%xmm7,%xmm7
2997	vaesenc	%xmm2,%xmm11,%xmm11
2998	vaesenc	%xmm2,%xmm12,%xmm12
2999	vaesenc	%xmm2,%xmm13,%xmm13
3000
3001	vmovdqa	80(%rdx),%xmm1
3002	vaesenc	%xmm1,%xmm4,%xmm4
3003	vaesenc	%xmm1,%xmm6,%xmm6
3004	vaesenc	%xmm1,%xmm7,%xmm7
3005	vaesenc	%xmm1,%xmm11,%xmm11
3006	vaesenc	%xmm1,%xmm12,%xmm12
3007	vaesenc	%xmm1,%xmm13,%xmm13
3008
3009	vmovdqa	96(%rdx),%xmm2
3010	vaesenc	%xmm2,%xmm4,%xmm4
3011	vaesenc	%xmm2,%xmm6,%xmm6
3012	vaesenc	%xmm2,%xmm7,%xmm7
3013	vaesenc	%xmm2,%xmm11,%xmm11
3014	vaesenc	%xmm2,%xmm12,%xmm12
3015	vaesenc	%xmm2,%xmm13,%xmm13
3016
3017	vmovdqa	112(%rdx),%xmm1
3018	vaesenc	%xmm1,%xmm4,%xmm4
3019	vaesenc	%xmm1,%xmm6,%xmm6
3020	vaesenc	%xmm1,%xmm7,%xmm7
3021	vaesenc	%xmm1,%xmm11,%xmm11
3022	vaesenc	%xmm1,%xmm12,%xmm12
3023	vaesenc	%xmm1,%xmm13,%xmm13
3024
3025	vmovdqa	128(%rdx),%xmm2
3026	vaesenc	%xmm2,%xmm4,%xmm4
3027	vaesenc	%xmm2,%xmm6,%xmm6
3028	vaesenc	%xmm2,%xmm7,%xmm7
3029	vaesenc	%xmm2,%xmm11,%xmm11
3030	vaesenc	%xmm2,%xmm12,%xmm12
3031	vaesenc	%xmm2,%xmm13,%xmm13
3032
3033	vmovdqa	144(%rdx),%xmm1
3034	vaesenc	%xmm1,%xmm4,%xmm4
3035	vaesenc	%xmm1,%xmm6,%xmm6
3036	vaesenc	%xmm1,%xmm7,%xmm7
3037	vaesenc	%xmm1,%xmm11,%xmm11
3038	vaesenc	%xmm1,%xmm12,%xmm12
3039	vaesenc	%xmm1,%xmm13,%xmm13
3040
3041	vmovdqa	160(%rdx),%xmm2
3042	vaesenc	%xmm2,%xmm4,%xmm4
3043	vaesenc	%xmm2,%xmm6,%xmm6
3044	vaesenc	%xmm2,%xmm7,%xmm7
3045	vaesenc	%xmm2,%xmm11,%xmm11
3046	vaesenc	%xmm2,%xmm12,%xmm12
3047	vaesenc	%xmm2,%xmm13,%xmm13
3048
3049	vmovdqa	176(%rdx),%xmm1
3050	vaesenc	%xmm1,%xmm4,%xmm4
3051	vaesenc	%xmm1,%xmm6,%xmm6
3052	vaesenc	%xmm1,%xmm7,%xmm7
3053	vaesenc	%xmm1,%xmm11,%xmm11
3054	vaesenc	%xmm1,%xmm12,%xmm12
3055	vaesenc	%xmm1,%xmm13,%xmm13
3056
3057	vmovdqa	192(%rdx),%xmm2
3058	vaesenc	%xmm2,%xmm4,%xmm4
3059	vaesenc	%xmm2,%xmm6,%xmm6
3060	vaesenc	%xmm2,%xmm7,%xmm7
3061	vaesenc	%xmm2,%xmm11,%xmm11
3062	vaesenc	%xmm2,%xmm12,%xmm12
3063	vaesenc	%xmm2,%xmm13,%xmm13
3064
3065	vmovdqa	208(%rdx),%xmm1
3066	vaesenc	%xmm1,%xmm4,%xmm4
3067	vaesenc	%xmm1,%xmm6,%xmm6
3068	vaesenc	%xmm1,%xmm7,%xmm7
3069	vaesenc	%xmm1,%xmm11,%xmm11
3070	vaesenc	%xmm1,%xmm12,%xmm12
3071	vaesenc	%xmm1,%xmm13,%xmm13
3072
3073	vmovdqa	224(%rdx),%xmm2
3074	vaesenclast	%xmm2,%xmm4,%xmm4
3075	vaesenclast	%xmm2,%xmm6,%xmm6
3076	vaesenclast	%xmm2,%xmm7,%xmm7
3077	vaesenclast	%xmm2,%xmm11,%xmm11
3078	vaesenclast	%xmm2,%xmm12,%xmm12
3079	vaesenclast	%xmm2,%xmm13,%xmm13
3080
3081
3082	vmovdqa	%xmm4,0(%rsi)
3083	vmovdqa	%xmm6,16(%rsi)
3084	vmovdqa	%xmm7,32(%rsi)
3085	vmovdqa	%xmm11,48(%rsi)
3086	vmovdqa	%xmm12,64(%rsi)
3087	vmovdqa	%xmm13,80(%rsi)
3088	ret
3089.cfi_endproc
3090.size	aes256gcmsiv_kdf, .-aes256gcmsiv_kdf
3091#endif
3092