xref: /aosp_15_r20/external/cronet/third_party/boringssl/src/gen/crypto/aes128gcmsiv-x86_64-apple.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(__APPLE__)
7.section	__DATA,__const
8
9.p2align	4
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
43.p2align	4
44GFMUL:
45
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
67
68.globl	_aesgcmsiv_htable_init
69.private_extern _aesgcmsiv_htable_init
70
71.p2align	4
72_aesgcmsiv_htable_init:
73
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
94
95.globl	_aesgcmsiv_htable6_init
96.private_extern _aesgcmsiv_htable6_init
97
98.p2align	4
99_aesgcmsiv_htable6_init:
100
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
117
118.globl	_aesgcmsiv_htable_polyval
119.private_extern _aesgcmsiv_htable_polyval
120
121.p2align	4
122_aesgcmsiv_htable_polyval:
123
124_CET_ENDBR
125	testq	%rdx,%rdx
126	jnz	L$htable_polyval_start
127	ret
128
129L$htable_polyval_start:
130	vzeroall
131
132
133
134	movq	%rdx,%r11
135	andq	$127,%r11
136
137	jz	L$htable_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	L$htable_polyval_prefix_loop
158	jmp	L$htable_polyval_prefix_complete
159
160
161.p2align	6
162L$htable_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	L$htable_polyval_prefix_loop
181
182L$htable_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	L$htable_polyval_main_loop
190
191L$htable_polyval_no_prefix:
192
193
194
195
196	vpxor	%xmm1,%xmm1,%xmm1
197	vmovdqa	(%rcx),%xmm9
198
199.p2align	6
200L$htable_polyval_main_loop:
201	subq	$0x80,%rdx
202	jb	L$htable_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	L$htable_polyval_main_loop
318
319
320
321L$htable_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
335
336.globl	_aesgcmsiv_polyval_horner
337.private_extern _aesgcmsiv_polyval_horner
338
339.p2align	4
340_aesgcmsiv_polyval_horner:
341
342_CET_ENDBR
343	testq	%rcx,%rcx
344	jnz	L$polyval_horner_start
345	ret
346
347L$polyval_horner_start:
348
349
350
351	xorq	%r10,%r10
352	shlq	$4,%rcx
353
354	vmovdqa	(%rsi),%xmm1
355	vmovdqa	(%rdi),%xmm0
356
357L$polyval_horner_loop:
358	vpxor	(%rdx,%r10,1),%xmm0,%xmm0
359	call	GFMUL
360
361	addq	$16,%r10
362	cmpq	%r10,%rcx
363	jne	L$polyval_horner_loop
364
365
366	vmovdqa	%xmm0,(%rdi)
367	ret
368
369
370.globl	_aes128gcmsiv_aes_ks
371.private_extern _aes128gcmsiv_aes_ks
372
373.p2align	4
374_aes128gcmsiv_aes_ks:
375
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
385L$ks128_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	L$ks128_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
426
427.globl	_aes256gcmsiv_aes_ks
428.private_extern _aes256gcmsiv_aes_ks
429
430.p2align	4
431_aes256gcmsiv_aes_ks:
432
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
443L$ks256_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	L$ks256_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
475.globl	_aes128gcmsiv_aes_ks_enc_x1
476.private_extern _aes128gcmsiv_aes_ks_enc_x1
477
478.p2align	4
479_aes128gcmsiv_aes_ks_enc_x1:
480
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
617
618.globl	_aes128gcmsiv_kdf
619.private_extern _aes128gcmsiv_kdf
620
621.p2align	4
622_aes128gcmsiv_kdf:
623
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
711
712.globl	_aes128gcmsiv_enc_msg_x4
713.private_extern _aes128gcmsiv_enc_msg_x4
714
715.p2align	4
716_aes128gcmsiv_enc_msg_x4:
717
718_CET_ENDBR
719	testq	%r8,%r8
720	jnz	L$128_enc_msg_x4_start
721	ret
722
723L$128_enc_msg_x4_start:
724	pushq	%r12
725
726	pushq	%r13
727
728
729	shrq	$4,%r8
730	movq	%r8,%r10
731	shlq	$62,%r10
732	shrq	$62,%r10
733
734
735	vmovdqa	(%rdx),%xmm15
736	vpor	OR_MASK(%rip),%xmm15,%xmm15
737
738	vmovdqu	four(%rip),%xmm4
739	vmovdqa	%xmm15,%xmm0
740	vpaddd	one(%rip),%xmm15,%xmm1
741	vpaddd	two(%rip),%xmm15,%xmm2
742	vpaddd	three(%rip),%xmm15,%xmm3
743
744	shrq	$2,%r8
745	je	L$128_enc_msg_x4_check_remainder
746
747	subq	$64,%rsi
748	subq	$64,%rdi
749
750L$128_enc_msg_x4_loop1:
751	addq	$64,%rsi
752	addq	$64,%rdi
753
754	vmovdqa	%xmm0,%xmm5
755	vmovdqa	%xmm1,%xmm6
756	vmovdqa	%xmm2,%xmm7
757	vmovdqa	%xmm3,%xmm8
758
759	vpxor	(%rcx),%xmm5,%xmm5
760	vpxor	(%rcx),%xmm6,%xmm6
761	vpxor	(%rcx),%xmm7,%xmm7
762	vpxor	(%rcx),%xmm8,%xmm8
763
764	vmovdqu	16(%rcx),%xmm12
765	vaesenc	%xmm12,%xmm5,%xmm5
766	vaesenc	%xmm12,%xmm6,%xmm6
767	vaesenc	%xmm12,%xmm7,%xmm7
768	vaesenc	%xmm12,%xmm8,%xmm8
769
770	vpaddd	%xmm4,%xmm0,%xmm0
771	vmovdqu	32(%rcx),%xmm12
772	vaesenc	%xmm12,%xmm5,%xmm5
773	vaesenc	%xmm12,%xmm6,%xmm6
774	vaesenc	%xmm12,%xmm7,%xmm7
775	vaesenc	%xmm12,%xmm8,%xmm8
776
777	vpaddd	%xmm4,%xmm1,%xmm1
778	vmovdqu	48(%rcx),%xmm12
779	vaesenc	%xmm12,%xmm5,%xmm5
780	vaesenc	%xmm12,%xmm6,%xmm6
781	vaesenc	%xmm12,%xmm7,%xmm7
782	vaesenc	%xmm12,%xmm8,%xmm8
783
784	vpaddd	%xmm4,%xmm2,%xmm2
785	vmovdqu	64(%rcx),%xmm12
786	vaesenc	%xmm12,%xmm5,%xmm5
787	vaesenc	%xmm12,%xmm6,%xmm6
788	vaesenc	%xmm12,%xmm7,%xmm7
789	vaesenc	%xmm12,%xmm8,%xmm8
790
791	vpaddd	%xmm4,%xmm3,%xmm3
792
793	vmovdqu	80(%rcx),%xmm12
794	vaesenc	%xmm12,%xmm5,%xmm5
795	vaesenc	%xmm12,%xmm6,%xmm6
796	vaesenc	%xmm12,%xmm7,%xmm7
797	vaesenc	%xmm12,%xmm8,%xmm8
798
799	vmovdqu	96(%rcx),%xmm12
800	vaesenc	%xmm12,%xmm5,%xmm5
801	vaesenc	%xmm12,%xmm6,%xmm6
802	vaesenc	%xmm12,%xmm7,%xmm7
803	vaesenc	%xmm12,%xmm8,%xmm8
804
805	vmovdqu	112(%rcx),%xmm12
806	vaesenc	%xmm12,%xmm5,%xmm5
807	vaesenc	%xmm12,%xmm6,%xmm6
808	vaesenc	%xmm12,%xmm7,%xmm7
809	vaesenc	%xmm12,%xmm8,%xmm8
810
811	vmovdqu	128(%rcx),%xmm12
812	vaesenc	%xmm12,%xmm5,%xmm5
813	vaesenc	%xmm12,%xmm6,%xmm6
814	vaesenc	%xmm12,%xmm7,%xmm7
815	vaesenc	%xmm12,%xmm8,%xmm8
816
817	vmovdqu	144(%rcx),%xmm12
818	vaesenc	%xmm12,%xmm5,%xmm5
819	vaesenc	%xmm12,%xmm6,%xmm6
820	vaesenc	%xmm12,%xmm7,%xmm7
821	vaesenc	%xmm12,%xmm8,%xmm8
822
823	vmovdqu	160(%rcx),%xmm12
824	vaesenclast	%xmm12,%xmm5,%xmm5
825	vaesenclast	%xmm12,%xmm6,%xmm6
826	vaesenclast	%xmm12,%xmm7,%xmm7
827	vaesenclast	%xmm12,%xmm8,%xmm8
828
829
830
831	vpxor	0(%rdi),%xmm5,%xmm5
832	vpxor	16(%rdi),%xmm6,%xmm6
833	vpxor	32(%rdi),%xmm7,%xmm7
834	vpxor	48(%rdi),%xmm8,%xmm8
835
836	subq	$1,%r8
837
838	vmovdqu	%xmm5,0(%rsi)
839	vmovdqu	%xmm6,16(%rsi)
840	vmovdqu	%xmm7,32(%rsi)
841	vmovdqu	%xmm8,48(%rsi)
842
843	jne	L$128_enc_msg_x4_loop1
844
845	addq	$64,%rsi
846	addq	$64,%rdi
847
848L$128_enc_msg_x4_check_remainder:
849	cmpq	$0,%r10
850	je	L$128_enc_msg_x4_out
851
852L$128_enc_msg_x4_loop2:
853
854
855	vmovdqa	%xmm0,%xmm5
856	vpaddd	one(%rip),%xmm0,%xmm0
857
858	vpxor	(%rcx),%xmm5,%xmm5
859	vaesenc	16(%rcx),%xmm5,%xmm5
860	vaesenc	32(%rcx),%xmm5,%xmm5
861	vaesenc	48(%rcx),%xmm5,%xmm5
862	vaesenc	64(%rcx),%xmm5,%xmm5
863	vaesenc	80(%rcx),%xmm5,%xmm5
864	vaesenc	96(%rcx),%xmm5,%xmm5
865	vaesenc	112(%rcx),%xmm5,%xmm5
866	vaesenc	128(%rcx),%xmm5,%xmm5
867	vaesenc	144(%rcx),%xmm5,%xmm5
868	vaesenclast	160(%rcx),%xmm5,%xmm5
869
870
871	vpxor	(%rdi),%xmm5,%xmm5
872	vmovdqu	%xmm5,(%rsi)
873
874	addq	$16,%rdi
875	addq	$16,%rsi
876
877	subq	$1,%r10
878	jne	L$128_enc_msg_x4_loop2
879
880L$128_enc_msg_x4_out:
881	popq	%r13
882
883	popq	%r12
884
885	ret
886
887
888.globl	_aes128gcmsiv_enc_msg_x8
889.private_extern _aes128gcmsiv_enc_msg_x8
890
891.p2align	4
892_aes128gcmsiv_enc_msg_x8:
893
894_CET_ENDBR
895	testq	%r8,%r8
896	jnz	L$128_enc_msg_x8_start
897	ret
898
899L$128_enc_msg_x8_start:
900	pushq	%r12
901
902	pushq	%r13
903
904	pushq	%rbp
905
906	movq	%rsp,%rbp
907
908
909
910	subq	$128,%rsp
911	andq	$-64,%rsp
912
913	shrq	$4,%r8
914	movq	%r8,%r10
915	shlq	$61,%r10
916	shrq	$61,%r10
917
918
919	vmovdqu	(%rdx),%xmm1
920	vpor	OR_MASK(%rip),%xmm1,%xmm1
921
922
923	vpaddd	seven(%rip),%xmm1,%xmm0
924	vmovdqu	%xmm0,(%rsp)
925	vpaddd	one(%rip),%xmm1,%xmm9
926	vpaddd	two(%rip),%xmm1,%xmm10
927	vpaddd	three(%rip),%xmm1,%xmm11
928	vpaddd	four(%rip),%xmm1,%xmm12
929	vpaddd	five(%rip),%xmm1,%xmm13
930	vpaddd	six(%rip),%xmm1,%xmm14
931	vmovdqa	%xmm1,%xmm0
932
933	shrq	$3,%r8
934	je	L$128_enc_msg_x8_check_remainder
935
936	subq	$128,%rsi
937	subq	$128,%rdi
938
939L$128_enc_msg_x8_loop1:
940	addq	$128,%rsi
941	addq	$128,%rdi
942
943	vmovdqa	%xmm0,%xmm1
944	vmovdqa	%xmm9,%xmm2
945	vmovdqa	%xmm10,%xmm3
946	vmovdqa	%xmm11,%xmm4
947	vmovdqa	%xmm12,%xmm5
948	vmovdqa	%xmm13,%xmm6
949	vmovdqa	%xmm14,%xmm7
950
951	vmovdqu	(%rsp),%xmm8
952
953	vpxor	(%rcx),%xmm1,%xmm1
954	vpxor	(%rcx),%xmm2,%xmm2
955	vpxor	(%rcx),%xmm3,%xmm3
956	vpxor	(%rcx),%xmm4,%xmm4
957	vpxor	(%rcx),%xmm5,%xmm5
958	vpxor	(%rcx),%xmm6,%xmm6
959	vpxor	(%rcx),%xmm7,%xmm7
960	vpxor	(%rcx),%xmm8,%xmm8
961
962	vmovdqu	16(%rcx),%xmm15
963	vaesenc	%xmm15,%xmm1,%xmm1
964	vaesenc	%xmm15,%xmm2,%xmm2
965	vaesenc	%xmm15,%xmm3,%xmm3
966	vaesenc	%xmm15,%xmm4,%xmm4
967	vaesenc	%xmm15,%xmm5,%xmm5
968	vaesenc	%xmm15,%xmm6,%xmm6
969	vaesenc	%xmm15,%xmm7,%xmm7
970	vaesenc	%xmm15,%xmm8,%xmm8
971
972	vmovdqu	(%rsp),%xmm14
973	vpaddd	eight(%rip),%xmm14,%xmm14
974	vmovdqu	%xmm14,(%rsp)
975	vmovdqu	32(%rcx),%xmm15
976	vaesenc	%xmm15,%xmm1,%xmm1
977	vaesenc	%xmm15,%xmm2,%xmm2
978	vaesenc	%xmm15,%xmm3,%xmm3
979	vaesenc	%xmm15,%xmm4,%xmm4
980	vaesenc	%xmm15,%xmm5,%xmm5
981	vaesenc	%xmm15,%xmm6,%xmm6
982	vaesenc	%xmm15,%xmm7,%xmm7
983	vaesenc	%xmm15,%xmm8,%xmm8
984
985	vpsubd	one(%rip),%xmm14,%xmm14
986	vmovdqu	48(%rcx),%xmm15
987	vaesenc	%xmm15,%xmm1,%xmm1
988	vaesenc	%xmm15,%xmm2,%xmm2
989	vaesenc	%xmm15,%xmm3,%xmm3
990	vaesenc	%xmm15,%xmm4,%xmm4
991	vaesenc	%xmm15,%xmm5,%xmm5
992	vaesenc	%xmm15,%xmm6,%xmm6
993	vaesenc	%xmm15,%xmm7,%xmm7
994	vaesenc	%xmm15,%xmm8,%xmm8
995
996	vpaddd	eight(%rip),%xmm0,%xmm0
997	vmovdqu	64(%rcx),%xmm15
998	vaesenc	%xmm15,%xmm1,%xmm1
999	vaesenc	%xmm15,%xmm2,%xmm2
1000	vaesenc	%xmm15,%xmm3,%xmm3
1001	vaesenc	%xmm15,%xmm4,%xmm4
1002	vaesenc	%xmm15,%xmm5,%xmm5
1003	vaesenc	%xmm15,%xmm6,%xmm6
1004	vaesenc	%xmm15,%xmm7,%xmm7
1005	vaesenc	%xmm15,%xmm8,%xmm8
1006
1007	vpaddd	eight(%rip),%xmm9,%xmm9
1008	vmovdqu	80(%rcx),%xmm15
1009	vaesenc	%xmm15,%xmm1,%xmm1
1010	vaesenc	%xmm15,%xmm2,%xmm2
1011	vaesenc	%xmm15,%xmm3,%xmm3
1012	vaesenc	%xmm15,%xmm4,%xmm4
1013	vaesenc	%xmm15,%xmm5,%xmm5
1014	vaesenc	%xmm15,%xmm6,%xmm6
1015	vaesenc	%xmm15,%xmm7,%xmm7
1016	vaesenc	%xmm15,%xmm8,%xmm8
1017
1018	vpaddd	eight(%rip),%xmm10,%xmm10
1019	vmovdqu	96(%rcx),%xmm15
1020	vaesenc	%xmm15,%xmm1,%xmm1
1021	vaesenc	%xmm15,%xmm2,%xmm2
1022	vaesenc	%xmm15,%xmm3,%xmm3
1023	vaesenc	%xmm15,%xmm4,%xmm4
1024	vaesenc	%xmm15,%xmm5,%xmm5
1025	vaesenc	%xmm15,%xmm6,%xmm6
1026	vaesenc	%xmm15,%xmm7,%xmm7
1027	vaesenc	%xmm15,%xmm8,%xmm8
1028
1029	vpaddd	eight(%rip),%xmm11,%xmm11
1030	vmovdqu	112(%rcx),%xmm15
1031	vaesenc	%xmm15,%xmm1,%xmm1
1032	vaesenc	%xmm15,%xmm2,%xmm2
1033	vaesenc	%xmm15,%xmm3,%xmm3
1034	vaesenc	%xmm15,%xmm4,%xmm4
1035	vaesenc	%xmm15,%xmm5,%xmm5
1036	vaesenc	%xmm15,%xmm6,%xmm6
1037	vaesenc	%xmm15,%xmm7,%xmm7
1038	vaesenc	%xmm15,%xmm8,%xmm8
1039
1040	vpaddd	eight(%rip),%xmm12,%xmm12
1041	vmovdqu	128(%rcx),%xmm15
1042	vaesenc	%xmm15,%xmm1,%xmm1
1043	vaesenc	%xmm15,%xmm2,%xmm2
1044	vaesenc	%xmm15,%xmm3,%xmm3
1045	vaesenc	%xmm15,%xmm4,%xmm4
1046	vaesenc	%xmm15,%xmm5,%xmm5
1047	vaesenc	%xmm15,%xmm6,%xmm6
1048	vaesenc	%xmm15,%xmm7,%xmm7
1049	vaesenc	%xmm15,%xmm8,%xmm8
1050
1051	vpaddd	eight(%rip),%xmm13,%xmm13
1052	vmovdqu	144(%rcx),%xmm15
1053	vaesenc	%xmm15,%xmm1,%xmm1
1054	vaesenc	%xmm15,%xmm2,%xmm2
1055	vaesenc	%xmm15,%xmm3,%xmm3
1056	vaesenc	%xmm15,%xmm4,%xmm4
1057	vaesenc	%xmm15,%xmm5,%xmm5
1058	vaesenc	%xmm15,%xmm6,%xmm6
1059	vaesenc	%xmm15,%xmm7,%xmm7
1060	vaesenc	%xmm15,%xmm8,%xmm8
1061
1062	vmovdqu	160(%rcx),%xmm15
1063	vaesenclast	%xmm15,%xmm1,%xmm1
1064	vaesenclast	%xmm15,%xmm2,%xmm2
1065	vaesenclast	%xmm15,%xmm3,%xmm3
1066	vaesenclast	%xmm15,%xmm4,%xmm4
1067	vaesenclast	%xmm15,%xmm5,%xmm5
1068	vaesenclast	%xmm15,%xmm6,%xmm6
1069	vaesenclast	%xmm15,%xmm7,%xmm7
1070	vaesenclast	%xmm15,%xmm8,%xmm8
1071
1072
1073
1074	vpxor	0(%rdi),%xmm1,%xmm1
1075	vpxor	16(%rdi),%xmm2,%xmm2
1076	vpxor	32(%rdi),%xmm3,%xmm3
1077	vpxor	48(%rdi),%xmm4,%xmm4
1078	vpxor	64(%rdi),%xmm5,%xmm5
1079	vpxor	80(%rdi),%xmm6,%xmm6
1080	vpxor	96(%rdi),%xmm7,%xmm7
1081	vpxor	112(%rdi),%xmm8,%xmm8
1082
1083	decq	%r8
1084
1085	vmovdqu	%xmm1,0(%rsi)
1086	vmovdqu	%xmm2,16(%rsi)
1087	vmovdqu	%xmm3,32(%rsi)
1088	vmovdqu	%xmm4,48(%rsi)
1089	vmovdqu	%xmm5,64(%rsi)
1090	vmovdqu	%xmm6,80(%rsi)
1091	vmovdqu	%xmm7,96(%rsi)
1092	vmovdqu	%xmm8,112(%rsi)
1093
1094	jne	L$128_enc_msg_x8_loop1
1095
1096	addq	$128,%rsi
1097	addq	$128,%rdi
1098
1099L$128_enc_msg_x8_check_remainder:
1100	cmpq	$0,%r10
1101	je	L$128_enc_msg_x8_out
1102
1103L$128_enc_msg_x8_loop2:
1104
1105
1106	vmovdqa	%xmm0,%xmm1
1107	vpaddd	one(%rip),%xmm0,%xmm0
1108
1109	vpxor	(%rcx),%xmm1,%xmm1
1110	vaesenc	16(%rcx),%xmm1,%xmm1
1111	vaesenc	32(%rcx),%xmm1,%xmm1
1112	vaesenc	48(%rcx),%xmm1,%xmm1
1113	vaesenc	64(%rcx),%xmm1,%xmm1
1114	vaesenc	80(%rcx),%xmm1,%xmm1
1115	vaesenc	96(%rcx),%xmm1,%xmm1
1116	vaesenc	112(%rcx),%xmm1,%xmm1
1117	vaesenc	128(%rcx),%xmm1,%xmm1
1118	vaesenc	144(%rcx),%xmm1,%xmm1
1119	vaesenclast	160(%rcx),%xmm1,%xmm1
1120
1121
1122	vpxor	(%rdi),%xmm1,%xmm1
1123
1124	vmovdqu	%xmm1,(%rsi)
1125
1126	addq	$16,%rdi
1127	addq	$16,%rsi
1128
1129	decq	%r10
1130	jne	L$128_enc_msg_x8_loop2
1131
1132L$128_enc_msg_x8_out:
1133	movq	%rbp,%rsp
1134
1135	popq	%rbp
1136
1137	popq	%r13
1138
1139	popq	%r12
1140
1141	ret
1142
1143
1144.globl	_aes128gcmsiv_dec
1145.private_extern _aes128gcmsiv_dec
1146
1147.p2align	4
1148_aes128gcmsiv_dec:
1149
1150_CET_ENDBR
1151	testq	$~15,%r9
1152	jnz	L$128_dec_start
1153	ret
1154
1155L$128_dec_start:
1156	vzeroupper
1157	vmovdqa	(%rdx),%xmm0
1158
1159
1160	vmovdqu	16(%rdx),%xmm15
1161	vpor	OR_MASK(%rip),%xmm15,%xmm15
1162	movq	%rdx,%rax
1163
1164	leaq	32(%rax),%rax
1165	leaq	32(%rcx),%rcx
1166
1167	andq	$~15,%r9
1168
1169
1170	cmpq	$96,%r9
1171	jb	L$128_dec_loop2
1172
1173
1174	subq	$96,%r9
1175	vmovdqa	%xmm15,%xmm7
1176	vpaddd	one(%rip),%xmm7,%xmm8
1177	vpaddd	two(%rip),%xmm7,%xmm9
1178	vpaddd	one(%rip),%xmm9,%xmm10
1179	vpaddd	two(%rip),%xmm9,%xmm11
1180	vpaddd	one(%rip),%xmm11,%xmm12
1181	vpaddd	two(%rip),%xmm11,%xmm15
1182
1183	vpxor	(%r8),%xmm7,%xmm7
1184	vpxor	(%r8),%xmm8,%xmm8
1185	vpxor	(%r8),%xmm9,%xmm9
1186	vpxor	(%r8),%xmm10,%xmm10
1187	vpxor	(%r8),%xmm11,%xmm11
1188	vpxor	(%r8),%xmm12,%xmm12
1189
1190	vmovdqu	16(%r8),%xmm4
1191	vaesenc	%xmm4,%xmm7,%xmm7
1192	vaesenc	%xmm4,%xmm8,%xmm8
1193	vaesenc	%xmm4,%xmm9,%xmm9
1194	vaesenc	%xmm4,%xmm10,%xmm10
1195	vaesenc	%xmm4,%xmm11,%xmm11
1196	vaesenc	%xmm4,%xmm12,%xmm12
1197
1198	vmovdqu	32(%r8),%xmm4
1199	vaesenc	%xmm4,%xmm7,%xmm7
1200	vaesenc	%xmm4,%xmm8,%xmm8
1201	vaesenc	%xmm4,%xmm9,%xmm9
1202	vaesenc	%xmm4,%xmm10,%xmm10
1203	vaesenc	%xmm4,%xmm11,%xmm11
1204	vaesenc	%xmm4,%xmm12,%xmm12
1205
1206	vmovdqu	48(%r8),%xmm4
1207	vaesenc	%xmm4,%xmm7,%xmm7
1208	vaesenc	%xmm4,%xmm8,%xmm8
1209	vaesenc	%xmm4,%xmm9,%xmm9
1210	vaesenc	%xmm4,%xmm10,%xmm10
1211	vaesenc	%xmm4,%xmm11,%xmm11
1212	vaesenc	%xmm4,%xmm12,%xmm12
1213
1214	vmovdqu	64(%r8),%xmm4
1215	vaesenc	%xmm4,%xmm7,%xmm7
1216	vaesenc	%xmm4,%xmm8,%xmm8
1217	vaesenc	%xmm4,%xmm9,%xmm9
1218	vaesenc	%xmm4,%xmm10,%xmm10
1219	vaesenc	%xmm4,%xmm11,%xmm11
1220	vaesenc	%xmm4,%xmm12,%xmm12
1221
1222	vmovdqu	80(%r8),%xmm4
1223	vaesenc	%xmm4,%xmm7,%xmm7
1224	vaesenc	%xmm4,%xmm8,%xmm8
1225	vaesenc	%xmm4,%xmm9,%xmm9
1226	vaesenc	%xmm4,%xmm10,%xmm10
1227	vaesenc	%xmm4,%xmm11,%xmm11
1228	vaesenc	%xmm4,%xmm12,%xmm12
1229
1230	vmovdqu	96(%r8),%xmm4
1231	vaesenc	%xmm4,%xmm7,%xmm7
1232	vaesenc	%xmm4,%xmm8,%xmm8
1233	vaesenc	%xmm4,%xmm9,%xmm9
1234	vaesenc	%xmm4,%xmm10,%xmm10
1235	vaesenc	%xmm4,%xmm11,%xmm11
1236	vaesenc	%xmm4,%xmm12,%xmm12
1237
1238	vmovdqu	112(%r8),%xmm4
1239	vaesenc	%xmm4,%xmm7,%xmm7
1240	vaesenc	%xmm4,%xmm8,%xmm8
1241	vaesenc	%xmm4,%xmm9,%xmm9
1242	vaesenc	%xmm4,%xmm10,%xmm10
1243	vaesenc	%xmm4,%xmm11,%xmm11
1244	vaesenc	%xmm4,%xmm12,%xmm12
1245
1246	vmovdqu	128(%r8),%xmm4
1247	vaesenc	%xmm4,%xmm7,%xmm7
1248	vaesenc	%xmm4,%xmm8,%xmm8
1249	vaesenc	%xmm4,%xmm9,%xmm9
1250	vaesenc	%xmm4,%xmm10,%xmm10
1251	vaesenc	%xmm4,%xmm11,%xmm11
1252	vaesenc	%xmm4,%xmm12,%xmm12
1253
1254	vmovdqu	144(%r8),%xmm4
1255	vaesenc	%xmm4,%xmm7,%xmm7
1256	vaesenc	%xmm4,%xmm8,%xmm8
1257	vaesenc	%xmm4,%xmm9,%xmm9
1258	vaesenc	%xmm4,%xmm10,%xmm10
1259	vaesenc	%xmm4,%xmm11,%xmm11
1260	vaesenc	%xmm4,%xmm12,%xmm12
1261
1262	vmovdqu	160(%r8),%xmm4
1263	vaesenclast	%xmm4,%xmm7,%xmm7
1264	vaesenclast	%xmm4,%xmm8,%xmm8
1265	vaesenclast	%xmm4,%xmm9,%xmm9
1266	vaesenclast	%xmm4,%xmm10,%xmm10
1267	vaesenclast	%xmm4,%xmm11,%xmm11
1268	vaesenclast	%xmm4,%xmm12,%xmm12
1269
1270
1271	vpxor	0(%rdi),%xmm7,%xmm7
1272	vpxor	16(%rdi),%xmm8,%xmm8
1273	vpxor	32(%rdi),%xmm9,%xmm9
1274	vpxor	48(%rdi),%xmm10,%xmm10
1275	vpxor	64(%rdi),%xmm11,%xmm11
1276	vpxor	80(%rdi),%xmm12,%xmm12
1277
1278	vmovdqu	%xmm7,0(%rsi)
1279	vmovdqu	%xmm8,16(%rsi)
1280	vmovdqu	%xmm9,32(%rsi)
1281	vmovdqu	%xmm10,48(%rsi)
1282	vmovdqu	%xmm11,64(%rsi)
1283	vmovdqu	%xmm12,80(%rsi)
1284
1285	addq	$96,%rdi
1286	addq	$96,%rsi
1287	jmp	L$128_dec_loop1
1288
1289
1290.p2align	6
1291L$128_dec_loop1:
1292	cmpq	$96,%r9
1293	jb	L$128_dec_finish_96
1294	subq	$96,%r9
1295
1296	vmovdqa	%xmm12,%xmm6
1297	vmovdqa	%xmm11,16-32(%rax)
1298	vmovdqa	%xmm10,32-32(%rax)
1299	vmovdqa	%xmm9,48-32(%rax)
1300	vmovdqa	%xmm8,64-32(%rax)
1301	vmovdqa	%xmm7,80-32(%rax)
1302
1303	vmovdqa	%xmm15,%xmm7
1304	vpaddd	one(%rip),%xmm7,%xmm8
1305	vpaddd	two(%rip),%xmm7,%xmm9
1306	vpaddd	one(%rip),%xmm9,%xmm10
1307	vpaddd	two(%rip),%xmm9,%xmm11
1308	vpaddd	one(%rip),%xmm11,%xmm12
1309	vpaddd	two(%rip),%xmm11,%xmm15
1310
1311	vmovdqa	(%r8),%xmm4
1312	vpxor	%xmm4,%xmm7,%xmm7
1313	vpxor	%xmm4,%xmm8,%xmm8
1314	vpxor	%xmm4,%xmm9,%xmm9
1315	vpxor	%xmm4,%xmm10,%xmm10
1316	vpxor	%xmm4,%xmm11,%xmm11
1317	vpxor	%xmm4,%xmm12,%xmm12
1318
1319	vmovdqu	0-32(%rcx),%xmm4
1320	vpclmulqdq	$0x11,%xmm4,%xmm6,%xmm2
1321	vpclmulqdq	$0x00,%xmm4,%xmm6,%xmm3
1322	vpclmulqdq	$0x01,%xmm4,%xmm6,%xmm1
1323	vpclmulqdq	$0x10,%xmm4,%xmm6,%xmm4
1324	vpxor	%xmm4,%xmm1,%xmm1
1325
1326	vmovdqu	16(%r8),%xmm4
1327	vaesenc	%xmm4,%xmm7,%xmm7
1328	vaesenc	%xmm4,%xmm8,%xmm8
1329	vaesenc	%xmm4,%xmm9,%xmm9
1330	vaesenc	%xmm4,%xmm10,%xmm10
1331	vaesenc	%xmm4,%xmm11,%xmm11
1332	vaesenc	%xmm4,%xmm12,%xmm12
1333
1334	vmovdqu	-16(%rax),%xmm6
1335	vmovdqu	-16(%rcx),%xmm13
1336
1337	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1338	vpxor	%xmm4,%xmm1,%xmm1
1339	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1340	vpxor	%xmm4,%xmm2,%xmm2
1341	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1342	vpxor	%xmm4,%xmm3,%xmm3
1343	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1344	vpxor	%xmm4,%xmm1,%xmm1
1345
1346
1347	vmovdqu	32(%r8),%xmm4
1348	vaesenc	%xmm4,%xmm7,%xmm7
1349	vaesenc	%xmm4,%xmm8,%xmm8
1350	vaesenc	%xmm4,%xmm9,%xmm9
1351	vaesenc	%xmm4,%xmm10,%xmm10
1352	vaesenc	%xmm4,%xmm11,%xmm11
1353	vaesenc	%xmm4,%xmm12,%xmm12
1354
1355	vmovdqu	0(%rax),%xmm6
1356	vmovdqu	0(%rcx),%xmm13
1357
1358	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1359	vpxor	%xmm4,%xmm1,%xmm1
1360	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1361	vpxor	%xmm4,%xmm2,%xmm2
1362	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1363	vpxor	%xmm4,%xmm3,%xmm3
1364	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1365	vpxor	%xmm4,%xmm1,%xmm1
1366
1367
1368	vmovdqu	48(%r8),%xmm4
1369	vaesenc	%xmm4,%xmm7,%xmm7
1370	vaesenc	%xmm4,%xmm8,%xmm8
1371	vaesenc	%xmm4,%xmm9,%xmm9
1372	vaesenc	%xmm4,%xmm10,%xmm10
1373	vaesenc	%xmm4,%xmm11,%xmm11
1374	vaesenc	%xmm4,%xmm12,%xmm12
1375
1376	vmovdqu	16(%rax),%xmm6
1377	vmovdqu	16(%rcx),%xmm13
1378
1379	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1380	vpxor	%xmm4,%xmm1,%xmm1
1381	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1382	vpxor	%xmm4,%xmm2,%xmm2
1383	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1384	vpxor	%xmm4,%xmm3,%xmm3
1385	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1386	vpxor	%xmm4,%xmm1,%xmm1
1387
1388
1389	vmovdqu	64(%r8),%xmm4
1390	vaesenc	%xmm4,%xmm7,%xmm7
1391	vaesenc	%xmm4,%xmm8,%xmm8
1392	vaesenc	%xmm4,%xmm9,%xmm9
1393	vaesenc	%xmm4,%xmm10,%xmm10
1394	vaesenc	%xmm4,%xmm11,%xmm11
1395	vaesenc	%xmm4,%xmm12,%xmm12
1396
1397	vmovdqu	32(%rax),%xmm6
1398	vmovdqu	32(%rcx),%xmm13
1399
1400	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1401	vpxor	%xmm4,%xmm1,%xmm1
1402	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1403	vpxor	%xmm4,%xmm2,%xmm2
1404	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1405	vpxor	%xmm4,%xmm3,%xmm3
1406	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1407	vpxor	%xmm4,%xmm1,%xmm1
1408
1409
1410	vmovdqu	80(%r8),%xmm4
1411	vaesenc	%xmm4,%xmm7,%xmm7
1412	vaesenc	%xmm4,%xmm8,%xmm8
1413	vaesenc	%xmm4,%xmm9,%xmm9
1414	vaesenc	%xmm4,%xmm10,%xmm10
1415	vaesenc	%xmm4,%xmm11,%xmm11
1416	vaesenc	%xmm4,%xmm12,%xmm12
1417
1418	vmovdqu	96(%r8),%xmm4
1419	vaesenc	%xmm4,%xmm7,%xmm7
1420	vaesenc	%xmm4,%xmm8,%xmm8
1421	vaesenc	%xmm4,%xmm9,%xmm9
1422	vaesenc	%xmm4,%xmm10,%xmm10
1423	vaesenc	%xmm4,%xmm11,%xmm11
1424	vaesenc	%xmm4,%xmm12,%xmm12
1425
1426	vmovdqu	112(%r8),%xmm4
1427	vaesenc	%xmm4,%xmm7,%xmm7
1428	vaesenc	%xmm4,%xmm8,%xmm8
1429	vaesenc	%xmm4,%xmm9,%xmm9
1430	vaesenc	%xmm4,%xmm10,%xmm10
1431	vaesenc	%xmm4,%xmm11,%xmm11
1432	vaesenc	%xmm4,%xmm12,%xmm12
1433
1434
1435	vmovdqa	80-32(%rax),%xmm6
1436	vpxor	%xmm0,%xmm6,%xmm6
1437	vmovdqu	80-32(%rcx),%xmm5
1438
1439	vpclmulqdq	$0x01,%xmm5,%xmm6,%xmm4
1440	vpxor	%xmm4,%xmm1,%xmm1
1441	vpclmulqdq	$0x11,%xmm5,%xmm6,%xmm4
1442	vpxor	%xmm4,%xmm2,%xmm2
1443	vpclmulqdq	$0x00,%xmm5,%xmm6,%xmm4
1444	vpxor	%xmm4,%xmm3,%xmm3
1445	vpclmulqdq	$0x10,%xmm5,%xmm6,%xmm4
1446	vpxor	%xmm4,%xmm1,%xmm1
1447
1448	vmovdqu	128(%r8),%xmm4
1449	vaesenc	%xmm4,%xmm7,%xmm7
1450	vaesenc	%xmm4,%xmm8,%xmm8
1451	vaesenc	%xmm4,%xmm9,%xmm9
1452	vaesenc	%xmm4,%xmm10,%xmm10
1453	vaesenc	%xmm4,%xmm11,%xmm11
1454	vaesenc	%xmm4,%xmm12,%xmm12
1455
1456
1457	vpsrldq	$8,%xmm1,%xmm4
1458	vpxor	%xmm4,%xmm2,%xmm5
1459	vpslldq	$8,%xmm1,%xmm4
1460	vpxor	%xmm4,%xmm3,%xmm0
1461
1462	vmovdqa	poly(%rip),%xmm3
1463
1464	vmovdqu	144(%r8),%xmm4
1465	vaesenc	%xmm4,%xmm7,%xmm7
1466	vaesenc	%xmm4,%xmm8,%xmm8
1467	vaesenc	%xmm4,%xmm9,%xmm9
1468	vaesenc	%xmm4,%xmm10,%xmm10
1469	vaesenc	%xmm4,%xmm11,%xmm11
1470	vaesenc	%xmm4,%xmm12,%xmm12
1471
1472	vmovdqu	160(%r8),%xmm6
1473	vpalignr	$8,%xmm0,%xmm0,%xmm2
1474	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
1475	vpxor	%xmm0,%xmm2,%xmm0
1476
1477	vpxor	0(%rdi),%xmm6,%xmm4
1478	vaesenclast	%xmm4,%xmm7,%xmm7
1479	vpxor	16(%rdi),%xmm6,%xmm4
1480	vaesenclast	%xmm4,%xmm8,%xmm8
1481	vpxor	32(%rdi),%xmm6,%xmm4
1482	vaesenclast	%xmm4,%xmm9,%xmm9
1483	vpxor	48(%rdi),%xmm6,%xmm4
1484	vaesenclast	%xmm4,%xmm10,%xmm10
1485	vpxor	64(%rdi),%xmm6,%xmm4
1486	vaesenclast	%xmm4,%xmm11,%xmm11
1487	vpxor	80(%rdi),%xmm6,%xmm4
1488	vaesenclast	%xmm4,%xmm12,%xmm12
1489
1490	vpalignr	$8,%xmm0,%xmm0,%xmm2
1491	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
1492	vpxor	%xmm0,%xmm2,%xmm0
1493
1494	vmovdqu	%xmm7,0(%rsi)
1495	vmovdqu	%xmm8,16(%rsi)
1496	vmovdqu	%xmm9,32(%rsi)
1497	vmovdqu	%xmm10,48(%rsi)
1498	vmovdqu	%xmm11,64(%rsi)
1499	vmovdqu	%xmm12,80(%rsi)
1500
1501	vpxor	%xmm5,%xmm0,%xmm0
1502
1503	leaq	96(%rdi),%rdi
1504	leaq	96(%rsi),%rsi
1505	jmp	L$128_dec_loop1
1506
1507L$128_dec_finish_96:
1508	vmovdqa	%xmm12,%xmm6
1509	vmovdqa	%xmm11,16-32(%rax)
1510	vmovdqa	%xmm10,32-32(%rax)
1511	vmovdqa	%xmm9,48-32(%rax)
1512	vmovdqa	%xmm8,64-32(%rax)
1513	vmovdqa	%xmm7,80-32(%rax)
1514
1515	vmovdqu	0-32(%rcx),%xmm4
1516	vpclmulqdq	$0x10,%xmm4,%xmm6,%xmm1
1517	vpclmulqdq	$0x11,%xmm4,%xmm6,%xmm2
1518	vpclmulqdq	$0x00,%xmm4,%xmm6,%xmm3
1519	vpclmulqdq	$0x01,%xmm4,%xmm6,%xmm4
1520	vpxor	%xmm4,%xmm1,%xmm1
1521
1522	vmovdqu	-16(%rax),%xmm6
1523	vmovdqu	-16(%rcx),%xmm13
1524
1525	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1526	vpxor	%xmm4,%xmm1,%xmm1
1527	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1528	vpxor	%xmm4,%xmm2,%xmm2
1529	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1530	vpxor	%xmm4,%xmm3,%xmm3
1531	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1532	vpxor	%xmm4,%xmm1,%xmm1
1533
1534	vmovdqu	0(%rax),%xmm6
1535	vmovdqu	0(%rcx),%xmm13
1536
1537	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1538	vpxor	%xmm4,%xmm1,%xmm1
1539	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1540	vpxor	%xmm4,%xmm2,%xmm2
1541	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1542	vpxor	%xmm4,%xmm3,%xmm3
1543	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1544	vpxor	%xmm4,%xmm1,%xmm1
1545
1546	vmovdqu	16(%rax),%xmm6
1547	vmovdqu	16(%rcx),%xmm13
1548
1549	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1550	vpxor	%xmm4,%xmm1,%xmm1
1551	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1552	vpxor	%xmm4,%xmm2,%xmm2
1553	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1554	vpxor	%xmm4,%xmm3,%xmm3
1555	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1556	vpxor	%xmm4,%xmm1,%xmm1
1557
1558	vmovdqu	32(%rax),%xmm6
1559	vmovdqu	32(%rcx),%xmm13
1560
1561	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
1562	vpxor	%xmm4,%xmm1,%xmm1
1563	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
1564	vpxor	%xmm4,%xmm2,%xmm2
1565	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
1566	vpxor	%xmm4,%xmm3,%xmm3
1567	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
1568	vpxor	%xmm4,%xmm1,%xmm1
1569
1570
1571	vmovdqu	80-32(%rax),%xmm6
1572	vpxor	%xmm0,%xmm6,%xmm6
1573	vmovdqu	80-32(%rcx),%xmm5
1574	vpclmulqdq	$0x11,%xmm5,%xmm6,%xmm4
1575	vpxor	%xmm4,%xmm2,%xmm2
1576	vpclmulqdq	$0x00,%xmm5,%xmm6,%xmm4
1577	vpxor	%xmm4,%xmm3,%xmm3
1578	vpclmulqdq	$0x10,%xmm5,%xmm6,%xmm4
1579	vpxor	%xmm4,%xmm1,%xmm1
1580	vpclmulqdq	$0x01,%xmm5,%xmm6,%xmm4
1581	vpxor	%xmm4,%xmm1,%xmm1
1582
1583	vpsrldq	$8,%xmm1,%xmm4
1584	vpxor	%xmm4,%xmm2,%xmm5
1585	vpslldq	$8,%xmm1,%xmm4
1586	vpxor	%xmm4,%xmm3,%xmm0
1587
1588	vmovdqa	poly(%rip),%xmm3
1589
1590	vpalignr	$8,%xmm0,%xmm0,%xmm2
1591	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
1592	vpxor	%xmm0,%xmm2,%xmm0
1593
1594	vpalignr	$8,%xmm0,%xmm0,%xmm2
1595	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
1596	vpxor	%xmm0,%xmm2,%xmm0
1597
1598	vpxor	%xmm5,%xmm0,%xmm0
1599
1600L$128_dec_loop2:
1601
1602
1603
1604	cmpq	$16,%r9
1605	jb	L$128_dec_out
1606	subq	$16,%r9
1607
1608	vmovdqa	%xmm15,%xmm2
1609	vpaddd	one(%rip),%xmm15,%xmm15
1610
1611	vpxor	0(%r8),%xmm2,%xmm2
1612	vaesenc	16(%r8),%xmm2,%xmm2
1613	vaesenc	32(%r8),%xmm2,%xmm2
1614	vaesenc	48(%r8),%xmm2,%xmm2
1615	vaesenc	64(%r8),%xmm2,%xmm2
1616	vaesenc	80(%r8),%xmm2,%xmm2
1617	vaesenc	96(%r8),%xmm2,%xmm2
1618	vaesenc	112(%r8),%xmm2,%xmm2
1619	vaesenc	128(%r8),%xmm2,%xmm2
1620	vaesenc	144(%r8),%xmm2,%xmm2
1621	vaesenclast	160(%r8),%xmm2,%xmm2
1622	vpxor	(%rdi),%xmm2,%xmm2
1623	vmovdqu	%xmm2,(%rsi)
1624	addq	$16,%rdi
1625	addq	$16,%rsi
1626
1627	vpxor	%xmm2,%xmm0,%xmm0
1628	vmovdqa	-32(%rcx),%xmm1
1629	call	GFMUL
1630
1631	jmp	L$128_dec_loop2
1632
1633L$128_dec_out:
1634	vmovdqu	%xmm0,(%rdx)
1635	ret
1636
1637
1638.globl	_aes128gcmsiv_ecb_enc_block
1639.private_extern _aes128gcmsiv_ecb_enc_block
1640
1641.p2align	4
1642_aes128gcmsiv_ecb_enc_block:
1643
1644_CET_ENDBR
1645	vmovdqa	(%rdi),%xmm1
1646
1647	vpxor	(%rdx),%xmm1,%xmm1
1648	vaesenc	16(%rdx),%xmm1,%xmm1
1649	vaesenc	32(%rdx),%xmm1,%xmm1
1650	vaesenc	48(%rdx),%xmm1,%xmm1
1651	vaesenc	64(%rdx),%xmm1,%xmm1
1652	vaesenc	80(%rdx),%xmm1,%xmm1
1653	vaesenc	96(%rdx),%xmm1,%xmm1
1654	vaesenc	112(%rdx),%xmm1,%xmm1
1655	vaesenc	128(%rdx),%xmm1,%xmm1
1656	vaesenc	144(%rdx),%xmm1,%xmm1
1657	vaesenclast	160(%rdx),%xmm1,%xmm1
1658
1659	vmovdqa	%xmm1,(%rsi)
1660
1661	ret
1662
1663
1664.globl	_aes256gcmsiv_aes_ks_enc_x1
1665.private_extern _aes256gcmsiv_aes_ks_enc_x1
1666
1667.p2align	4
1668_aes256gcmsiv_aes_ks_enc_x1:
1669
1670_CET_ENDBR
1671	vmovdqa	con1(%rip),%xmm0
1672	vmovdqa	mask(%rip),%xmm15
1673	vmovdqa	(%rdi),%xmm8
1674	vmovdqa	(%rcx),%xmm1
1675	vmovdqa	16(%rcx),%xmm3
1676	vpxor	%xmm1,%xmm8,%xmm8
1677	vaesenc	%xmm3,%xmm8,%xmm8
1678	vmovdqu	%xmm1,(%rdx)
1679	vmovdqu	%xmm3,16(%rdx)
1680	vpxor	%xmm14,%xmm14,%xmm14
1681
1682	vpshufb	%xmm15,%xmm3,%xmm2
1683	vaesenclast	%xmm0,%xmm2,%xmm2
1684	vpslld	$1,%xmm0,%xmm0
1685	vpslldq	$4,%xmm1,%xmm4
1686	vpxor	%xmm4,%xmm1,%xmm1
1687	vpslldq	$4,%xmm4,%xmm4
1688	vpxor	%xmm4,%xmm1,%xmm1
1689	vpslldq	$4,%xmm4,%xmm4
1690	vpxor	%xmm4,%xmm1,%xmm1
1691	vpxor	%xmm2,%xmm1,%xmm1
1692	vaesenc	%xmm1,%xmm8,%xmm8
1693	vmovdqu	%xmm1,32(%rdx)
1694
1695	vpshufd	$0xff,%xmm1,%xmm2
1696	vaesenclast	%xmm14,%xmm2,%xmm2
1697	vpslldq	$4,%xmm3,%xmm4
1698	vpxor	%xmm4,%xmm3,%xmm3
1699	vpslldq	$4,%xmm4,%xmm4
1700	vpxor	%xmm4,%xmm3,%xmm3
1701	vpslldq	$4,%xmm4,%xmm4
1702	vpxor	%xmm4,%xmm3,%xmm3
1703	vpxor	%xmm2,%xmm3,%xmm3
1704	vaesenc	%xmm3,%xmm8,%xmm8
1705	vmovdqu	%xmm3,48(%rdx)
1706
1707	vpshufb	%xmm15,%xmm3,%xmm2
1708	vaesenclast	%xmm0,%xmm2,%xmm2
1709	vpslld	$1,%xmm0,%xmm0
1710	vpslldq	$4,%xmm1,%xmm4
1711	vpxor	%xmm4,%xmm1,%xmm1
1712	vpslldq	$4,%xmm4,%xmm4
1713	vpxor	%xmm4,%xmm1,%xmm1
1714	vpslldq	$4,%xmm4,%xmm4
1715	vpxor	%xmm4,%xmm1,%xmm1
1716	vpxor	%xmm2,%xmm1,%xmm1
1717	vaesenc	%xmm1,%xmm8,%xmm8
1718	vmovdqu	%xmm1,64(%rdx)
1719
1720	vpshufd	$0xff,%xmm1,%xmm2
1721	vaesenclast	%xmm14,%xmm2,%xmm2
1722	vpslldq	$4,%xmm3,%xmm4
1723	vpxor	%xmm4,%xmm3,%xmm3
1724	vpslldq	$4,%xmm4,%xmm4
1725	vpxor	%xmm4,%xmm3,%xmm3
1726	vpslldq	$4,%xmm4,%xmm4
1727	vpxor	%xmm4,%xmm3,%xmm3
1728	vpxor	%xmm2,%xmm3,%xmm3
1729	vaesenc	%xmm3,%xmm8,%xmm8
1730	vmovdqu	%xmm3,80(%rdx)
1731
1732	vpshufb	%xmm15,%xmm3,%xmm2
1733	vaesenclast	%xmm0,%xmm2,%xmm2
1734	vpslld	$1,%xmm0,%xmm0
1735	vpslldq	$4,%xmm1,%xmm4
1736	vpxor	%xmm4,%xmm1,%xmm1
1737	vpslldq	$4,%xmm4,%xmm4
1738	vpxor	%xmm4,%xmm1,%xmm1
1739	vpslldq	$4,%xmm4,%xmm4
1740	vpxor	%xmm4,%xmm1,%xmm1
1741	vpxor	%xmm2,%xmm1,%xmm1
1742	vaesenc	%xmm1,%xmm8,%xmm8
1743	vmovdqu	%xmm1,96(%rdx)
1744
1745	vpshufd	$0xff,%xmm1,%xmm2
1746	vaesenclast	%xmm14,%xmm2,%xmm2
1747	vpslldq	$4,%xmm3,%xmm4
1748	vpxor	%xmm4,%xmm3,%xmm3
1749	vpslldq	$4,%xmm4,%xmm4
1750	vpxor	%xmm4,%xmm3,%xmm3
1751	vpslldq	$4,%xmm4,%xmm4
1752	vpxor	%xmm4,%xmm3,%xmm3
1753	vpxor	%xmm2,%xmm3,%xmm3
1754	vaesenc	%xmm3,%xmm8,%xmm8
1755	vmovdqu	%xmm3,112(%rdx)
1756
1757	vpshufb	%xmm15,%xmm3,%xmm2
1758	vaesenclast	%xmm0,%xmm2,%xmm2
1759	vpslld	$1,%xmm0,%xmm0
1760	vpslldq	$4,%xmm1,%xmm4
1761	vpxor	%xmm4,%xmm1,%xmm1
1762	vpslldq	$4,%xmm4,%xmm4
1763	vpxor	%xmm4,%xmm1,%xmm1
1764	vpslldq	$4,%xmm4,%xmm4
1765	vpxor	%xmm4,%xmm1,%xmm1
1766	vpxor	%xmm2,%xmm1,%xmm1
1767	vaesenc	%xmm1,%xmm8,%xmm8
1768	vmovdqu	%xmm1,128(%rdx)
1769
1770	vpshufd	$0xff,%xmm1,%xmm2
1771	vaesenclast	%xmm14,%xmm2,%xmm2
1772	vpslldq	$4,%xmm3,%xmm4
1773	vpxor	%xmm4,%xmm3,%xmm3
1774	vpslldq	$4,%xmm4,%xmm4
1775	vpxor	%xmm4,%xmm3,%xmm3
1776	vpslldq	$4,%xmm4,%xmm4
1777	vpxor	%xmm4,%xmm3,%xmm3
1778	vpxor	%xmm2,%xmm3,%xmm3
1779	vaesenc	%xmm3,%xmm8,%xmm8
1780	vmovdqu	%xmm3,144(%rdx)
1781
1782	vpshufb	%xmm15,%xmm3,%xmm2
1783	vaesenclast	%xmm0,%xmm2,%xmm2
1784	vpslld	$1,%xmm0,%xmm0
1785	vpslldq	$4,%xmm1,%xmm4
1786	vpxor	%xmm4,%xmm1,%xmm1
1787	vpslldq	$4,%xmm4,%xmm4
1788	vpxor	%xmm4,%xmm1,%xmm1
1789	vpslldq	$4,%xmm4,%xmm4
1790	vpxor	%xmm4,%xmm1,%xmm1
1791	vpxor	%xmm2,%xmm1,%xmm1
1792	vaesenc	%xmm1,%xmm8,%xmm8
1793	vmovdqu	%xmm1,160(%rdx)
1794
1795	vpshufd	$0xff,%xmm1,%xmm2
1796	vaesenclast	%xmm14,%xmm2,%xmm2
1797	vpslldq	$4,%xmm3,%xmm4
1798	vpxor	%xmm4,%xmm3,%xmm3
1799	vpslldq	$4,%xmm4,%xmm4
1800	vpxor	%xmm4,%xmm3,%xmm3
1801	vpslldq	$4,%xmm4,%xmm4
1802	vpxor	%xmm4,%xmm3,%xmm3
1803	vpxor	%xmm2,%xmm3,%xmm3
1804	vaesenc	%xmm3,%xmm8,%xmm8
1805	vmovdqu	%xmm3,176(%rdx)
1806
1807	vpshufb	%xmm15,%xmm3,%xmm2
1808	vaesenclast	%xmm0,%xmm2,%xmm2
1809	vpslld	$1,%xmm0,%xmm0
1810	vpslldq	$4,%xmm1,%xmm4
1811	vpxor	%xmm4,%xmm1,%xmm1
1812	vpslldq	$4,%xmm4,%xmm4
1813	vpxor	%xmm4,%xmm1,%xmm1
1814	vpslldq	$4,%xmm4,%xmm4
1815	vpxor	%xmm4,%xmm1,%xmm1
1816	vpxor	%xmm2,%xmm1,%xmm1
1817	vaesenc	%xmm1,%xmm8,%xmm8
1818	vmovdqu	%xmm1,192(%rdx)
1819
1820	vpshufd	$0xff,%xmm1,%xmm2
1821	vaesenclast	%xmm14,%xmm2,%xmm2
1822	vpslldq	$4,%xmm3,%xmm4
1823	vpxor	%xmm4,%xmm3,%xmm3
1824	vpslldq	$4,%xmm4,%xmm4
1825	vpxor	%xmm4,%xmm3,%xmm3
1826	vpslldq	$4,%xmm4,%xmm4
1827	vpxor	%xmm4,%xmm3,%xmm3
1828	vpxor	%xmm2,%xmm3,%xmm3
1829	vaesenc	%xmm3,%xmm8,%xmm8
1830	vmovdqu	%xmm3,208(%rdx)
1831
1832	vpshufb	%xmm15,%xmm3,%xmm2
1833	vaesenclast	%xmm0,%xmm2,%xmm2
1834	vpslldq	$4,%xmm1,%xmm4
1835	vpxor	%xmm4,%xmm1,%xmm1
1836	vpslldq	$4,%xmm4,%xmm4
1837	vpxor	%xmm4,%xmm1,%xmm1
1838	vpslldq	$4,%xmm4,%xmm4
1839	vpxor	%xmm4,%xmm1,%xmm1
1840	vpxor	%xmm2,%xmm1,%xmm1
1841	vaesenclast	%xmm1,%xmm8,%xmm8
1842	vmovdqu	%xmm1,224(%rdx)
1843
1844	vmovdqa	%xmm8,(%rsi)
1845	ret
1846
1847
1848.globl	_aes256gcmsiv_ecb_enc_block
1849.private_extern _aes256gcmsiv_ecb_enc_block
1850
1851.p2align	4
1852_aes256gcmsiv_ecb_enc_block:
1853
1854_CET_ENDBR
1855	vmovdqa	(%rdi),%xmm1
1856	vpxor	(%rdx),%xmm1,%xmm1
1857	vaesenc	16(%rdx),%xmm1,%xmm1
1858	vaesenc	32(%rdx),%xmm1,%xmm1
1859	vaesenc	48(%rdx),%xmm1,%xmm1
1860	vaesenc	64(%rdx),%xmm1,%xmm1
1861	vaesenc	80(%rdx),%xmm1,%xmm1
1862	vaesenc	96(%rdx),%xmm1,%xmm1
1863	vaesenc	112(%rdx),%xmm1,%xmm1
1864	vaesenc	128(%rdx),%xmm1,%xmm1
1865	vaesenc	144(%rdx),%xmm1,%xmm1
1866	vaesenc	160(%rdx),%xmm1,%xmm1
1867	vaesenc	176(%rdx),%xmm1,%xmm1
1868	vaesenc	192(%rdx),%xmm1,%xmm1
1869	vaesenc	208(%rdx),%xmm1,%xmm1
1870	vaesenclast	224(%rdx),%xmm1,%xmm1
1871	vmovdqa	%xmm1,(%rsi)
1872	ret
1873
1874
1875.globl	_aes256gcmsiv_enc_msg_x4
1876.private_extern _aes256gcmsiv_enc_msg_x4
1877
1878.p2align	4
1879_aes256gcmsiv_enc_msg_x4:
1880
1881_CET_ENDBR
1882	testq	%r8,%r8
1883	jnz	L$256_enc_msg_x4_start
1884	ret
1885
1886L$256_enc_msg_x4_start:
1887	movq	%r8,%r10
1888	shrq	$4,%r8
1889	shlq	$60,%r10
1890	jz	L$256_enc_msg_x4_start2
1891	addq	$1,%r8
1892
1893L$256_enc_msg_x4_start2:
1894	movq	%r8,%r10
1895	shlq	$62,%r10
1896	shrq	$62,%r10
1897
1898
1899	vmovdqa	(%rdx),%xmm15
1900	vpor	OR_MASK(%rip),%xmm15,%xmm15
1901
1902	vmovdqa	four(%rip),%xmm4
1903	vmovdqa	%xmm15,%xmm0
1904	vpaddd	one(%rip),%xmm15,%xmm1
1905	vpaddd	two(%rip),%xmm15,%xmm2
1906	vpaddd	three(%rip),%xmm15,%xmm3
1907
1908	shrq	$2,%r8
1909	je	L$256_enc_msg_x4_check_remainder
1910
1911	subq	$64,%rsi
1912	subq	$64,%rdi
1913
1914L$256_enc_msg_x4_loop1:
1915	addq	$64,%rsi
1916	addq	$64,%rdi
1917
1918	vmovdqa	%xmm0,%xmm5
1919	vmovdqa	%xmm1,%xmm6
1920	vmovdqa	%xmm2,%xmm7
1921	vmovdqa	%xmm3,%xmm8
1922
1923	vpxor	(%rcx),%xmm5,%xmm5
1924	vpxor	(%rcx),%xmm6,%xmm6
1925	vpxor	(%rcx),%xmm7,%xmm7
1926	vpxor	(%rcx),%xmm8,%xmm8
1927
1928	vmovdqu	16(%rcx),%xmm12
1929	vaesenc	%xmm12,%xmm5,%xmm5
1930	vaesenc	%xmm12,%xmm6,%xmm6
1931	vaesenc	%xmm12,%xmm7,%xmm7
1932	vaesenc	%xmm12,%xmm8,%xmm8
1933
1934	vpaddd	%xmm4,%xmm0,%xmm0
1935	vmovdqu	32(%rcx),%xmm12
1936	vaesenc	%xmm12,%xmm5,%xmm5
1937	vaesenc	%xmm12,%xmm6,%xmm6
1938	vaesenc	%xmm12,%xmm7,%xmm7
1939	vaesenc	%xmm12,%xmm8,%xmm8
1940
1941	vpaddd	%xmm4,%xmm1,%xmm1
1942	vmovdqu	48(%rcx),%xmm12
1943	vaesenc	%xmm12,%xmm5,%xmm5
1944	vaesenc	%xmm12,%xmm6,%xmm6
1945	vaesenc	%xmm12,%xmm7,%xmm7
1946	vaesenc	%xmm12,%xmm8,%xmm8
1947
1948	vpaddd	%xmm4,%xmm2,%xmm2
1949	vmovdqu	64(%rcx),%xmm12
1950	vaesenc	%xmm12,%xmm5,%xmm5
1951	vaesenc	%xmm12,%xmm6,%xmm6
1952	vaesenc	%xmm12,%xmm7,%xmm7
1953	vaesenc	%xmm12,%xmm8,%xmm8
1954
1955	vpaddd	%xmm4,%xmm3,%xmm3
1956
1957	vmovdqu	80(%rcx),%xmm12
1958	vaesenc	%xmm12,%xmm5,%xmm5
1959	vaesenc	%xmm12,%xmm6,%xmm6
1960	vaesenc	%xmm12,%xmm7,%xmm7
1961	vaesenc	%xmm12,%xmm8,%xmm8
1962
1963	vmovdqu	96(%rcx),%xmm12
1964	vaesenc	%xmm12,%xmm5,%xmm5
1965	vaesenc	%xmm12,%xmm6,%xmm6
1966	vaesenc	%xmm12,%xmm7,%xmm7
1967	vaesenc	%xmm12,%xmm8,%xmm8
1968
1969	vmovdqu	112(%rcx),%xmm12
1970	vaesenc	%xmm12,%xmm5,%xmm5
1971	vaesenc	%xmm12,%xmm6,%xmm6
1972	vaesenc	%xmm12,%xmm7,%xmm7
1973	vaesenc	%xmm12,%xmm8,%xmm8
1974
1975	vmovdqu	128(%rcx),%xmm12
1976	vaesenc	%xmm12,%xmm5,%xmm5
1977	vaesenc	%xmm12,%xmm6,%xmm6
1978	vaesenc	%xmm12,%xmm7,%xmm7
1979	vaesenc	%xmm12,%xmm8,%xmm8
1980
1981	vmovdqu	144(%rcx),%xmm12
1982	vaesenc	%xmm12,%xmm5,%xmm5
1983	vaesenc	%xmm12,%xmm6,%xmm6
1984	vaesenc	%xmm12,%xmm7,%xmm7
1985	vaesenc	%xmm12,%xmm8,%xmm8
1986
1987	vmovdqu	160(%rcx),%xmm12
1988	vaesenc	%xmm12,%xmm5,%xmm5
1989	vaesenc	%xmm12,%xmm6,%xmm6
1990	vaesenc	%xmm12,%xmm7,%xmm7
1991	vaesenc	%xmm12,%xmm8,%xmm8
1992
1993	vmovdqu	176(%rcx),%xmm12
1994	vaesenc	%xmm12,%xmm5,%xmm5
1995	vaesenc	%xmm12,%xmm6,%xmm6
1996	vaesenc	%xmm12,%xmm7,%xmm7
1997	vaesenc	%xmm12,%xmm8,%xmm8
1998
1999	vmovdqu	192(%rcx),%xmm12
2000	vaesenc	%xmm12,%xmm5,%xmm5
2001	vaesenc	%xmm12,%xmm6,%xmm6
2002	vaesenc	%xmm12,%xmm7,%xmm7
2003	vaesenc	%xmm12,%xmm8,%xmm8
2004
2005	vmovdqu	208(%rcx),%xmm12
2006	vaesenc	%xmm12,%xmm5,%xmm5
2007	vaesenc	%xmm12,%xmm6,%xmm6
2008	vaesenc	%xmm12,%xmm7,%xmm7
2009	vaesenc	%xmm12,%xmm8,%xmm8
2010
2011	vmovdqu	224(%rcx),%xmm12
2012	vaesenclast	%xmm12,%xmm5,%xmm5
2013	vaesenclast	%xmm12,%xmm6,%xmm6
2014	vaesenclast	%xmm12,%xmm7,%xmm7
2015	vaesenclast	%xmm12,%xmm8,%xmm8
2016
2017
2018
2019	vpxor	0(%rdi),%xmm5,%xmm5
2020	vpxor	16(%rdi),%xmm6,%xmm6
2021	vpxor	32(%rdi),%xmm7,%xmm7
2022	vpxor	48(%rdi),%xmm8,%xmm8
2023
2024	subq	$1,%r8
2025
2026	vmovdqu	%xmm5,0(%rsi)
2027	vmovdqu	%xmm6,16(%rsi)
2028	vmovdqu	%xmm7,32(%rsi)
2029	vmovdqu	%xmm8,48(%rsi)
2030
2031	jne	L$256_enc_msg_x4_loop1
2032
2033	addq	$64,%rsi
2034	addq	$64,%rdi
2035
2036L$256_enc_msg_x4_check_remainder:
2037	cmpq	$0,%r10
2038	je	L$256_enc_msg_x4_out
2039
2040L$256_enc_msg_x4_loop2:
2041
2042
2043
2044	vmovdqa	%xmm0,%xmm5
2045	vpaddd	one(%rip),%xmm0,%xmm0
2046	vpxor	(%rcx),%xmm5,%xmm5
2047	vaesenc	16(%rcx),%xmm5,%xmm5
2048	vaesenc	32(%rcx),%xmm5,%xmm5
2049	vaesenc	48(%rcx),%xmm5,%xmm5
2050	vaesenc	64(%rcx),%xmm5,%xmm5
2051	vaesenc	80(%rcx),%xmm5,%xmm5
2052	vaesenc	96(%rcx),%xmm5,%xmm5
2053	vaesenc	112(%rcx),%xmm5,%xmm5
2054	vaesenc	128(%rcx),%xmm5,%xmm5
2055	vaesenc	144(%rcx),%xmm5,%xmm5
2056	vaesenc	160(%rcx),%xmm5,%xmm5
2057	vaesenc	176(%rcx),%xmm5,%xmm5
2058	vaesenc	192(%rcx),%xmm5,%xmm5
2059	vaesenc	208(%rcx),%xmm5,%xmm5
2060	vaesenclast	224(%rcx),%xmm5,%xmm5
2061
2062
2063	vpxor	(%rdi),%xmm5,%xmm5
2064
2065	vmovdqu	%xmm5,(%rsi)
2066
2067	addq	$16,%rdi
2068	addq	$16,%rsi
2069
2070	subq	$1,%r10
2071	jne	L$256_enc_msg_x4_loop2
2072
2073L$256_enc_msg_x4_out:
2074	ret
2075
2076
2077.globl	_aes256gcmsiv_enc_msg_x8
2078.private_extern _aes256gcmsiv_enc_msg_x8
2079
2080.p2align	4
2081_aes256gcmsiv_enc_msg_x8:
2082
2083_CET_ENDBR
2084	testq	%r8,%r8
2085	jnz	L$256_enc_msg_x8_start
2086	ret
2087
2088L$256_enc_msg_x8_start:
2089
2090	movq	%rsp,%r11
2091	subq	$16,%r11
2092	andq	$-64,%r11
2093
2094	movq	%r8,%r10
2095	shrq	$4,%r8
2096	shlq	$60,%r10
2097	jz	L$256_enc_msg_x8_start2
2098	addq	$1,%r8
2099
2100L$256_enc_msg_x8_start2:
2101	movq	%r8,%r10
2102	shlq	$61,%r10
2103	shrq	$61,%r10
2104
2105
2106	vmovdqa	(%rdx),%xmm1
2107	vpor	OR_MASK(%rip),%xmm1,%xmm1
2108
2109
2110	vpaddd	seven(%rip),%xmm1,%xmm0
2111	vmovdqa	%xmm0,(%r11)
2112	vpaddd	one(%rip),%xmm1,%xmm9
2113	vpaddd	two(%rip),%xmm1,%xmm10
2114	vpaddd	three(%rip),%xmm1,%xmm11
2115	vpaddd	four(%rip),%xmm1,%xmm12
2116	vpaddd	five(%rip),%xmm1,%xmm13
2117	vpaddd	six(%rip),%xmm1,%xmm14
2118	vmovdqa	%xmm1,%xmm0
2119
2120	shrq	$3,%r8
2121	jz	L$256_enc_msg_x8_check_remainder
2122
2123	subq	$128,%rsi
2124	subq	$128,%rdi
2125
2126L$256_enc_msg_x8_loop1:
2127	addq	$128,%rsi
2128	addq	$128,%rdi
2129
2130	vmovdqa	%xmm0,%xmm1
2131	vmovdqa	%xmm9,%xmm2
2132	vmovdqa	%xmm10,%xmm3
2133	vmovdqa	%xmm11,%xmm4
2134	vmovdqa	%xmm12,%xmm5
2135	vmovdqa	%xmm13,%xmm6
2136	vmovdqa	%xmm14,%xmm7
2137
2138	vmovdqa	(%r11),%xmm8
2139
2140	vpxor	(%rcx),%xmm1,%xmm1
2141	vpxor	(%rcx),%xmm2,%xmm2
2142	vpxor	(%rcx),%xmm3,%xmm3
2143	vpxor	(%rcx),%xmm4,%xmm4
2144	vpxor	(%rcx),%xmm5,%xmm5
2145	vpxor	(%rcx),%xmm6,%xmm6
2146	vpxor	(%rcx),%xmm7,%xmm7
2147	vpxor	(%rcx),%xmm8,%xmm8
2148
2149	vmovdqu	16(%rcx),%xmm15
2150	vaesenc	%xmm15,%xmm1,%xmm1
2151	vaesenc	%xmm15,%xmm2,%xmm2
2152	vaesenc	%xmm15,%xmm3,%xmm3
2153	vaesenc	%xmm15,%xmm4,%xmm4
2154	vaesenc	%xmm15,%xmm5,%xmm5
2155	vaesenc	%xmm15,%xmm6,%xmm6
2156	vaesenc	%xmm15,%xmm7,%xmm7
2157	vaesenc	%xmm15,%xmm8,%xmm8
2158
2159	vmovdqa	(%r11),%xmm14
2160	vpaddd	eight(%rip),%xmm14,%xmm14
2161	vmovdqa	%xmm14,(%r11)
2162	vmovdqu	32(%rcx),%xmm15
2163	vaesenc	%xmm15,%xmm1,%xmm1
2164	vaesenc	%xmm15,%xmm2,%xmm2
2165	vaesenc	%xmm15,%xmm3,%xmm3
2166	vaesenc	%xmm15,%xmm4,%xmm4
2167	vaesenc	%xmm15,%xmm5,%xmm5
2168	vaesenc	%xmm15,%xmm6,%xmm6
2169	vaesenc	%xmm15,%xmm7,%xmm7
2170	vaesenc	%xmm15,%xmm8,%xmm8
2171
2172	vpsubd	one(%rip),%xmm14,%xmm14
2173	vmovdqu	48(%rcx),%xmm15
2174	vaesenc	%xmm15,%xmm1,%xmm1
2175	vaesenc	%xmm15,%xmm2,%xmm2
2176	vaesenc	%xmm15,%xmm3,%xmm3
2177	vaesenc	%xmm15,%xmm4,%xmm4
2178	vaesenc	%xmm15,%xmm5,%xmm5
2179	vaesenc	%xmm15,%xmm6,%xmm6
2180	vaesenc	%xmm15,%xmm7,%xmm7
2181	vaesenc	%xmm15,%xmm8,%xmm8
2182
2183	vpaddd	eight(%rip),%xmm0,%xmm0
2184	vmovdqu	64(%rcx),%xmm15
2185	vaesenc	%xmm15,%xmm1,%xmm1
2186	vaesenc	%xmm15,%xmm2,%xmm2
2187	vaesenc	%xmm15,%xmm3,%xmm3
2188	vaesenc	%xmm15,%xmm4,%xmm4
2189	vaesenc	%xmm15,%xmm5,%xmm5
2190	vaesenc	%xmm15,%xmm6,%xmm6
2191	vaesenc	%xmm15,%xmm7,%xmm7
2192	vaesenc	%xmm15,%xmm8,%xmm8
2193
2194	vpaddd	eight(%rip),%xmm9,%xmm9
2195	vmovdqu	80(%rcx),%xmm15
2196	vaesenc	%xmm15,%xmm1,%xmm1
2197	vaesenc	%xmm15,%xmm2,%xmm2
2198	vaesenc	%xmm15,%xmm3,%xmm3
2199	vaesenc	%xmm15,%xmm4,%xmm4
2200	vaesenc	%xmm15,%xmm5,%xmm5
2201	vaesenc	%xmm15,%xmm6,%xmm6
2202	vaesenc	%xmm15,%xmm7,%xmm7
2203	vaesenc	%xmm15,%xmm8,%xmm8
2204
2205	vpaddd	eight(%rip),%xmm10,%xmm10
2206	vmovdqu	96(%rcx),%xmm15
2207	vaesenc	%xmm15,%xmm1,%xmm1
2208	vaesenc	%xmm15,%xmm2,%xmm2
2209	vaesenc	%xmm15,%xmm3,%xmm3
2210	vaesenc	%xmm15,%xmm4,%xmm4
2211	vaesenc	%xmm15,%xmm5,%xmm5
2212	vaesenc	%xmm15,%xmm6,%xmm6
2213	vaesenc	%xmm15,%xmm7,%xmm7
2214	vaesenc	%xmm15,%xmm8,%xmm8
2215
2216	vpaddd	eight(%rip),%xmm11,%xmm11
2217	vmovdqu	112(%rcx),%xmm15
2218	vaesenc	%xmm15,%xmm1,%xmm1
2219	vaesenc	%xmm15,%xmm2,%xmm2
2220	vaesenc	%xmm15,%xmm3,%xmm3
2221	vaesenc	%xmm15,%xmm4,%xmm4
2222	vaesenc	%xmm15,%xmm5,%xmm5
2223	vaesenc	%xmm15,%xmm6,%xmm6
2224	vaesenc	%xmm15,%xmm7,%xmm7
2225	vaesenc	%xmm15,%xmm8,%xmm8
2226
2227	vpaddd	eight(%rip),%xmm12,%xmm12
2228	vmovdqu	128(%rcx),%xmm15
2229	vaesenc	%xmm15,%xmm1,%xmm1
2230	vaesenc	%xmm15,%xmm2,%xmm2
2231	vaesenc	%xmm15,%xmm3,%xmm3
2232	vaesenc	%xmm15,%xmm4,%xmm4
2233	vaesenc	%xmm15,%xmm5,%xmm5
2234	vaesenc	%xmm15,%xmm6,%xmm6
2235	vaesenc	%xmm15,%xmm7,%xmm7
2236	vaesenc	%xmm15,%xmm8,%xmm8
2237
2238	vpaddd	eight(%rip),%xmm13,%xmm13
2239	vmovdqu	144(%rcx),%xmm15
2240	vaesenc	%xmm15,%xmm1,%xmm1
2241	vaesenc	%xmm15,%xmm2,%xmm2
2242	vaesenc	%xmm15,%xmm3,%xmm3
2243	vaesenc	%xmm15,%xmm4,%xmm4
2244	vaesenc	%xmm15,%xmm5,%xmm5
2245	vaesenc	%xmm15,%xmm6,%xmm6
2246	vaesenc	%xmm15,%xmm7,%xmm7
2247	vaesenc	%xmm15,%xmm8,%xmm8
2248
2249	vmovdqu	160(%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	176(%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	192(%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	208(%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	224(%rcx),%xmm15
2290	vaesenclast	%xmm15,%xmm1,%xmm1
2291	vaesenclast	%xmm15,%xmm2,%xmm2
2292	vaesenclast	%xmm15,%xmm3,%xmm3
2293	vaesenclast	%xmm15,%xmm4,%xmm4
2294	vaesenclast	%xmm15,%xmm5,%xmm5
2295	vaesenclast	%xmm15,%xmm6,%xmm6
2296	vaesenclast	%xmm15,%xmm7,%xmm7
2297	vaesenclast	%xmm15,%xmm8,%xmm8
2298
2299
2300
2301	vpxor	0(%rdi),%xmm1,%xmm1
2302	vpxor	16(%rdi),%xmm2,%xmm2
2303	vpxor	32(%rdi),%xmm3,%xmm3
2304	vpxor	48(%rdi),%xmm4,%xmm4
2305	vpxor	64(%rdi),%xmm5,%xmm5
2306	vpxor	80(%rdi),%xmm6,%xmm6
2307	vpxor	96(%rdi),%xmm7,%xmm7
2308	vpxor	112(%rdi),%xmm8,%xmm8
2309
2310	subq	$1,%r8
2311
2312	vmovdqu	%xmm1,0(%rsi)
2313	vmovdqu	%xmm2,16(%rsi)
2314	vmovdqu	%xmm3,32(%rsi)
2315	vmovdqu	%xmm4,48(%rsi)
2316	vmovdqu	%xmm5,64(%rsi)
2317	vmovdqu	%xmm6,80(%rsi)
2318	vmovdqu	%xmm7,96(%rsi)
2319	vmovdqu	%xmm8,112(%rsi)
2320
2321	jne	L$256_enc_msg_x8_loop1
2322
2323	addq	$128,%rsi
2324	addq	$128,%rdi
2325
2326L$256_enc_msg_x8_check_remainder:
2327	cmpq	$0,%r10
2328	je	L$256_enc_msg_x8_out
2329
2330L$256_enc_msg_x8_loop2:
2331
2332
2333	vmovdqa	%xmm0,%xmm1
2334	vpaddd	one(%rip),%xmm0,%xmm0
2335
2336	vpxor	(%rcx),%xmm1,%xmm1
2337	vaesenc	16(%rcx),%xmm1,%xmm1
2338	vaesenc	32(%rcx),%xmm1,%xmm1
2339	vaesenc	48(%rcx),%xmm1,%xmm1
2340	vaesenc	64(%rcx),%xmm1,%xmm1
2341	vaesenc	80(%rcx),%xmm1,%xmm1
2342	vaesenc	96(%rcx),%xmm1,%xmm1
2343	vaesenc	112(%rcx),%xmm1,%xmm1
2344	vaesenc	128(%rcx),%xmm1,%xmm1
2345	vaesenc	144(%rcx),%xmm1,%xmm1
2346	vaesenc	160(%rcx),%xmm1,%xmm1
2347	vaesenc	176(%rcx),%xmm1,%xmm1
2348	vaesenc	192(%rcx),%xmm1,%xmm1
2349	vaesenc	208(%rcx),%xmm1,%xmm1
2350	vaesenclast	224(%rcx),%xmm1,%xmm1
2351
2352
2353	vpxor	(%rdi),%xmm1,%xmm1
2354
2355	vmovdqu	%xmm1,(%rsi)
2356
2357	addq	$16,%rdi
2358	addq	$16,%rsi
2359	subq	$1,%r10
2360	jnz	L$256_enc_msg_x8_loop2
2361
2362L$256_enc_msg_x8_out:
2363	ret
2364
2365
2366
2367.globl	_aes256gcmsiv_dec
2368.private_extern _aes256gcmsiv_dec
2369
2370.p2align	4
2371_aes256gcmsiv_dec:
2372
2373_CET_ENDBR
2374	testq	$~15,%r9
2375	jnz	L$256_dec_start
2376	ret
2377
2378L$256_dec_start:
2379	vzeroupper
2380	vmovdqa	(%rdx),%xmm0
2381
2382
2383	vmovdqu	16(%rdx),%xmm15
2384	vpor	OR_MASK(%rip),%xmm15,%xmm15
2385	movq	%rdx,%rax
2386
2387	leaq	32(%rax),%rax
2388	leaq	32(%rcx),%rcx
2389
2390	andq	$~15,%r9
2391
2392
2393	cmpq	$96,%r9
2394	jb	L$256_dec_loop2
2395
2396
2397	subq	$96,%r9
2398	vmovdqa	%xmm15,%xmm7
2399	vpaddd	one(%rip),%xmm7,%xmm8
2400	vpaddd	two(%rip),%xmm7,%xmm9
2401	vpaddd	one(%rip),%xmm9,%xmm10
2402	vpaddd	two(%rip),%xmm9,%xmm11
2403	vpaddd	one(%rip),%xmm11,%xmm12
2404	vpaddd	two(%rip),%xmm11,%xmm15
2405
2406	vpxor	(%r8),%xmm7,%xmm7
2407	vpxor	(%r8),%xmm8,%xmm8
2408	vpxor	(%r8),%xmm9,%xmm9
2409	vpxor	(%r8),%xmm10,%xmm10
2410	vpxor	(%r8),%xmm11,%xmm11
2411	vpxor	(%r8),%xmm12,%xmm12
2412
2413	vmovdqu	16(%r8),%xmm4
2414	vaesenc	%xmm4,%xmm7,%xmm7
2415	vaesenc	%xmm4,%xmm8,%xmm8
2416	vaesenc	%xmm4,%xmm9,%xmm9
2417	vaesenc	%xmm4,%xmm10,%xmm10
2418	vaesenc	%xmm4,%xmm11,%xmm11
2419	vaesenc	%xmm4,%xmm12,%xmm12
2420
2421	vmovdqu	32(%r8),%xmm4
2422	vaesenc	%xmm4,%xmm7,%xmm7
2423	vaesenc	%xmm4,%xmm8,%xmm8
2424	vaesenc	%xmm4,%xmm9,%xmm9
2425	vaesenc	%xmm4,%xmm10,%xmm10
2426	vaesenc	%xmm4,%xmm11,%xmm11
2427	vaesenc	%xmm4,%xmm12,%xmm12
2428
2429	vmovdqu	48(%r8),%xmm4
2430	vaesenc	%xmm4,%xmm7,%xmm7
2431	vaesenc	%xmm4,%xmm8,%xmm8
2432	vaesenc	%xmm4,%xmm9,%xmm9
2433	vaesenc	%xmm4,%xmm10,%xmm10
2434	vaesenc	%xmm4,%xmm11,%xmm11
2435	vaesenc	%xmm4,%xmm12,%xmm12
2436
2437	vmovdqu	64(%r8),%xmm4
2438	vaesenc	%xmm4,%xmm7,%xmm7
2439	vaesenc	%xmm4,%xmm8,%xmm8
2440	vaesenc	%xmm4,%xmm9,%xmm9
2441	vaesenc	%xmm4,%xmm10,%xmm10
2442	vaesenc	%xmm4,%xmm11,%xmm11
2443	vaesenc	%xmm4,%xmm12,%xmm12
2444
2445	vmovdqu	80(%r8),%xmm4
2446	vaesenc	%xmm4,%xmm7,%xmm7
2447	vaesenc	%xmm4,%xmm8,%xmm8
2448	vaesenc	%xmm4,%xmm9,%xmm9
2449	vaesenc	%xmm4,%xmm10,%xmm10
2450	vaesenc	%xmm4,%xmm11,%xmm11
2451	vaesenc	%xmm4,%xmm12,%xmm12
2452
2453	vmovdqu	96(%r8),%xmm4
2454	vaesenc	%xmm4,%xmm7,%xmm7
2455	vaesenc	%xmm4,%xmm8,%xmm8
2456	vaesenc	%xmm4,%xmm9,%xmm9
2457	vaesenc	%xmm4,%xmm10,%xmm10
2458	vaesenc	%xmm4,%xmm11,%xmm11
2459	vaesenc	%xmm4,%xmm12,%xmm12
2460
2461	vmovdqu	112(%r8),%xmm4
2462	vaesenc	%xmm4,%xmm7,%xmm7
2463	vaesenc	%xmm4,%xmm8,%xmm8
2464	vaesenc	%xmm4,%xmm9,%xmm9
2465	vaesenc	%xmm4,%xmm10,%xmm10
2466	vaesenc	%xmm4,%xmm11,%xmm11
2467	vaesenc	%xmm4,%xmm12,%xmm12
2468
2469	vmovdqu	128(%r8),%xmm4
2470	vaesenc	%xmm4,%xmm7,%xmm7
2471	vaesenc	%xmm4,%xmm8,%xmm8
2472	vaesenc	%xmm4,%xmm9,%xmm9
2473	vaesenc	%xmm4,%xmm10,%xmm10
2474	vaesenc	%xmm4,%xmm11,%xmm11
2475	vaesenc	%xmm4,%xmm12,%xmm12
2476
2477	vmovdqu	144(%r8),%xmm4
2478	vaesenc	%xmm4,%xmm7,%xmm7
2479	vaesenc	%xmm4,%xmm8,%xmm8
2480	vaesenc	%xmm4,%xmm9,%xmm9
2481	vaesenc	%xmm4,%xmm10,%xmm10
2482	vaesenc	%xmm4,%xmm11,%xmm11
2483	vaesenc	%xmm4,%xmm12,%xmm12
2484
2485	vmovdqu	160(%r8),%xmm4
2486	vaesenc	%xmm4,%xmm7,%xmm7
2487	vaesenc	%xmm4,%xmm8,%xmm8
2488	vaesenc	%xmm4,%xmm9,%xmm9
2489	vaesenc	%xmm4,%xmm10,%xmm10
2490	vaesenc	%xmm4,%xmm11,%xmm11
2491	vaesenc	%xmm4,%xmm12,%xmm12
2492
2493	vmovdqu	176(%r8),%xmm4
2494	vaesenc	%xmm4,%xmm7,%xmm7
2495	vaesenc	%xmm4,%xmm8,%xmm8
2496	vaesenc	%xmm4,%xmm9,%xmm9
2497	vaesenc	%xmm4,%xmm10,%xmm10
2498	vaesenc	%xmm4,%xmm11,%xmm11
2499	vaesenc	%xmm4,%xmm12,%xmm12
2500
2501	vmovdqu	192(%r8),%xmm4
2502	vaesenc	%xmm4,%xmm7,%xmm7
2503	vaesenc	%xmm4,%xmm8,%xmm8
2504	vaesenc	%xmm4,%xmm9,%xmm9
2505	vaesenc	%xmm4,%xmm10,%xmm10
2506	vaesenc	%xmm4,%xmm11,%xmm11
2507	vaesenc	%xmm4,%xmm12,%xmm12
2508
2509	vmovdqu	208(%r8),%xmm4
2510	vaesenc	%xmm4,%xmm7,%xmm7
2511	vaesenc	%xmm4,%xmm8,%xmm8
2512	vaesenc	%xmm4,%xmm9,%xmm9
2513	vaesenc	%xmm4,%xmm10,%xmm10
2514	vaesenc	%xmm4,%xmm11,%xmm11
2515	vaesenc	%xmm4,%xmm12,%xmm12
2516
2517	vmovdqu	224(%r8),%xmm4
2518	vaesenclast	%xmm4,%xmm7,%xmm7
2519	vaesenclast	%xmm4,%xmm8,%xmm8
2520	vaesenclast	%xmm4,%xmm9,%xmm9
2521	vaesenclast	%xmm4,%xmm10,%xmm10
2522	vaesenclast	%xmm4,%xmm11,%xmm11
2523	vaesenclast	%xmm4,%xmm12,%xmm12
2524
2525
2526	vpxor	0(%rdi),%xmm7,%xmm7
2527	vpxor	16(%rdi),%xmm8,%xmm8
2528	vpxor	32(%rdi),%xmm9,%xmm9
2529	vpxor	48(%rdi),%xmm10,%xmm10
2530	vpxor	64(%rdi),%xmm11,%xmm11
2531	vpxor	80(%rdi),%xmm12,%xmm12
2532
2533	vmovdqu	%xmm7,0(%rsi)
2534	vmovdqu	%xmm8,16(%rsi)
2535	vmovdqu	%xmm9,32(%rsi)
2536	vmovdqu	%xmm10,48(%rsi)
2537	vmovdqu	%xmm11,64(%rsi)
2538	vmovdqu	%xmm12,80(%rsi)
2539
2540	addq	$96,%rdi
2541	addq	$96,%rsi
2542	jmp	L$256_dec_loop1
2543
2544
2545.p2align	6
2546L$256_dec_loop1:
2547	cmpq	$96,%r9
2548	jb	L$256_dec_finish_96
2549	subq	$96,%r9
2550
2551	vmovdqa	%xmm12,%xmm6
2552	vmovdqa	%xmm11,16-32(%rax)
2553	vmovdqa	%xmm10,32-32(%rax)
2554	vmovdqa	%xmm9,48-32(%rax)
2555	vmovdqa	%xmm8,64-32(%rax)
2556	vmovdqa	%xmm7,80-32(%rax)
2557
2558	vmovdqa	%xmm15,%xmm7
2559	vpaddd	one(%rip),%xmm7,%xmm8
2560	vpaddd	two(%rip),%xmm7,%xmm9
2561	vpaddd	one(%rip),%xmm9,%xmm10
2562	vpaddd	two(%rip),%xmm9,%xmm11
2563	vpaddd	one(%rip),%xmm11,%xmm12
2564	vpaddd	two(%rip),%xmm11,%xmm15
2565
2566	vmovdqa	(%r8),%xmm4
2567	vpxor	%xmm4,%xmm7,%xmm7
2568	vpxor	%xmm4,%xmm8,%xmm8
2569	vpxor	%xmm4,%xmm9,%xmm9
2570	vpxor	%xmm4,%xmm10,%xmm10
2571	vpxor	%xmm4,%xmm11,%xmm11
2572	vpxor	%xmm4,%xmm12,%xmm12
2573
2574	vmovdqu	0-32(%rcx),%xmm4
2575	vpclmulqdq	$0x11,%xmm4,%xmm6,%xmm2
2576	vpclmulqdq	$0x00,%xmm4,%xmm6,%xmm3
2577	vpclmulqdq	$0x01,%xmm4,%xmm6,%xmm1
2578	vpclmulqdq	$0x10,%xmm4,%xmm6,%xmm4
2579	vpxor	%xmm4,%xmm1,%xmm1
2580
2581	vmovdqu	16(%r8),%xmm4
2582	vaesenc	%xmm4,%xmm7,%xmm7
2583	vaesenc	%xmm4,%xmm8,%xmm8
2584	vaesenc	%xmm4,%xmm9,%xmm9
2585	vaesenc	%xmm4,%xmm10,%xmm10
2586	vaesenc	%xmm4,%xmm11,%xmm11
2587	vaesenc	%xmm4,%xmm12,%xmm12
2588
2589	vmovdqu	-16(%rax),%xmm6
2590	vmovdqu	-16(%rcx),%xmm13
2591
2592	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2593	vpxor	%xmm4,%xmm1,%xmm1
2594	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2595	vpxor	%xmm4,%xmm2,%xmm2
2596	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2597	vpxor	%xmm4,%xmm3,%xmm3
2598	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2599	vpxor	%xmm4,%xmm1,%xmm1
2600
2601
2602	vmovdqu	32(%r8),%xmm4
2603	vaesenc	%xmm4,%xmm7,%xmm7
2604	vaesenc	%xmm4,%xmm8,%xmm8
2605	vaesenc	%xmm4,%xmm9,%xmm9
2606	vaesenc	%xmm4,%xmm10,%xmm10
2607	vaesenc	%xmm4,%xmm11,%xmm11
2608	vaesenc	%xmm4,%xmm12,%xmm12
2609
2610	vmovdqu	0(%rax),%xmm6
2611	vmovdqu	0(%rcx),%xmm13
2612
2613	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2614	vpxor	%xmm4,%xmm1,%xmm1
2615	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2616	vpxor	%xmm4,%xmm2,%xmm2
2617	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2618	vpxor	%xmm4,%xmm3,%xmm3
2619	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2620	vpxor	%xmm4,%xmm1,%xmm1
2621
2622
2623	vmovdqu	48(%r8),%xmm4
2624	vaesenc	%xmm4,%xmm7,%xmm7
2625	vaesenc	%xmm4,%xmm8,%xmm8
2626	vaesenc	%xmm4,%xmm9,%xmm9
2627	vaesenc	%xmm4,%xmm10,%xmm10
2628	vaesenc	%xmm4,%xmm11,%xmm11
2629	vaesenc	%xmm4,%xmm12,%xmm12
2630
2631	vmovdqu	16(%rax),%xmm6
2632	vmovdqu	16(%rcx),%xmm13
2633
2634	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2635	vpxor	%xmm4,%xmm1,%xmm1
2636	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2637	vpxor	%xmm4,%xmm2,%xmm2
2638	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2639	vpxor	%xmm4,%xmm3,%xmm3
2640	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2641	vpxor	%xmm4,%xmm1,%xmm1
2642
2643
2644	vmovdqu	64(%r8),%xmm4
2645	vaesenc	%xmm4,%xmm7,%xmm7
2646	vaesenc	%xmm4,%xmm8,%xmm8
2647	vaesenc	%xmm4,%xmm9,%xmm9
2648	vaesenc	%xmm4,%xmm10,%xmm10
2649	vaesenc	%xmm4,%xmm11,%xmm11
2650	vaesenc	%xmm4,%xmm12,%xmm12
2651
2652	vmovdqu	32(%rax),%xmm6
2653	vmovdqu	32(%rcx),%xmm13
2654
2655	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2656	vpxor	%xmm4,%xmm1,%xmm1
2657	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2658	vpxor	%xmm4,%xmm2,%xmm2
2659	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2660	vpxor	%xmm4,%xmm3,%xmm3
2661	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2662	vpxor	%xmm4,%xmm1,%xmm1
2663
2664
2665	vmovdqu	80(%r8),%xmm4
2666	vaesenc	%xmm4,%xmm7,%xmm7
2667	vaesenc	%xmm4,%xmm8,%xmm8
2668	vaesenc	%xmm4,%xmm9,%xmm9
2669	vaesenc	%xmm4,%xmm10,%xmm10
2670	vaesenc	%xmm4,%xmm11,%xmm11
2671	vaesenc	%xmm4,%xmm12,%xmm12
2672
2673	vmovdqu	96(%r8),%xmm4
2674	vaesenc	%xmm4,%xmm7,%xmm7
2675	vaesenc	%xmm4,%xmm8,%xmm8
2676	vaesenc	%xmm4,%xmm9,%xmm9
2677	vaesenc	%xmm4,%xmm10,%xmm10
2678	vaesenc	%xmm4,%xmm11,%xmm11
2679	vaesenc	%xmm4,%xmm12,%xmm12
2680
2681	vmovdqu	112(%r8),%xmm4
2682	vaesenc	%xmm4,%xmm7,%xmm7
2683	vaesenc	%xmm4,%xmm8,%xmm8
2684	vaesenc	%xmm4,%xmm9,%xmm9
2685	vaesenc	%xmm4,%xmm10,%xmm10
2686	vaesenc	%xmm4,%xmm11,%xmm11
2687	vaesenc	%xmm4,%xmm12,%xmm12
2688
2689
2690	vmovdqa	80-32(%rax),%xmm6
2691	vpxor	%xmm0,%xmm6,%xmm6
2692	vmovdqu	80-32(%rcx),%xmm5
2693
2694	vpclmulqdq	$0x01,%xmm5,%xmm6,%xmm4
2695	vpxor	%xmm4,%xmm1,%xmm1
2696	vpclmulqdq	$0x11,%xmm5,%xmm6,%xmm4
2697	vpxor	%xmm4,%xmm2,%xmm2
2698	vpclmulqdq	$0x00,%xmm5,%xmm6,%xmm4
2699	vpxor	%xmm4,%xmm3,%xmm3
2700	vpclmulqdq	$0x10,%xmm5,%xmm6,%xmm4
2701	vpxor	%xmm4,%xmm1,%xmm1
2702
2703	vmovdqu	128(%r8),%xmm4
2704	vaesenc	%xmm4,%xmm7,%xmm7
2705	vaesenc	%xmm4,%xmm8,%xmm8
2706	vaesenc	%xmm4,%xmm9,%xmm9
2707	vaesenc	%xmm4,%xmm10,%xmm10
2708	vaesenc	%xmm4,%xmm11,%xmm11
2709	vaesenc	%xmm4,%xmm12,%xmm12
2710
2711
2712	vpsrldq	$8,%xmm1,%xmm4
2713	vpxor	%xmm4,%xmm2,%xmm5
2714	vpslldq	$8,%xmm1,%xmm4
2715	vpxor	%xmm4,%xmm3,%xmm0
2716
2717	vmovdqa	poly(%rip),%xmm3
2718
2719	vmovdqu	144(%r8),%xmm4
2720	vaesenc	%xmm4,%xmm7,%xmm7
2721	vaesenc	%xmm4,%xmm8,%xmm8
2722	vaesenc	%xmm4,%xmm9,%xmm9
2723	vaesenc	%xmm4,%xmm10,%xmm10
2724	vaesenc	%xmm4,%xmm11,%xmm11
2725	vaesenc	%xmm4,%xmm12,%xmm12
2726
2727	vmovdqu	160(%r8),%xmm4
2728	vaesenc	%xmm4,%xmm7,%xmm7
2729	vaesenc	%xmm4,%xmm8,%xmm8
2730	vaesenc	%xmm4,%xmm9,%xmm9
2731	vaesenc	%xmm4,%xmm10,%xmm10
2732	vaesenc	%xmm4,%xmm11,%xmm11
2733	vaesenc	%xmm4,%xmm12,%xmm12
2734
2735	vmovdqu	176(%r8),%xmm4
2736	vaesenc	%xmm4,%xmm7,%xmm7
2737	vaesenc	%xmm4,%xmm8,%xmm8
2738	vaesenc	%xmm4,%xmm9,%xmm9
2739	vaesenc	%xmm4,%xmm10,%xmm10
2740	vaesenc	%xmm4,%xmm11,%xmm11
2741	vaesenc	%xmm4,%xmm12,%xmm12
2742
2743	vmovdqu	192(%r8),%xmm4
2744	vaesenc	%xmm4,%xmm7,%xmm7
2745	vaesenc	%xmm4,%xmm8,%xmm8
2746	vaesenc	%xmm4,%xmm9,%xmm9
2747	vaesenc	%xmm4,%xmm10,%xmm10
2748	vaesenc	%xmm4,%xmm11,%xmm11
2749	vaesenc	%xmm4,%xmm12,%xmm12
2750
2751	vmovdqu	208(%r8),%xmm4
2752	vaesenc	%xmm4,%xmm7,%xmm7
2753	vaesenc	%xmm4,%xmm8,%xmm8
2754	vaesenc	%xmm4,%xmm9,%xmm9
2755	vaesenc	%xmm4,%xmm10,%xmm10
2756	vaesenc	%xmm4,%xmm11,%xmm11
2757	vaesenc	%xmm4,%xmm12,%xmm12
2758
2759	vmovdqu	224(%r8),%xmm6
2760	vpalignr	$8,%xmm0,%xmm0,%xmm2
2761	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
2762	vpxor	%xmm0,%xmm2,%xmm0
2763
2764	vpxor	0(%rdi),%xmm6,%xmm4
2765	vaesenclast	%xmm4,%xmm7,%xmm7
2766	vpxor	16(%rdi),%xmm6,%xmm4
2767	vaesenclast	%xmm4,%xmm8,%xmm8
2768	vpxor	32(%rdi),%xmm6,%xmm4
2769	vaesenclast	%xmm4,%xmm9,%xmm9
2770	vpxor	48(%rdi),%xmm6,%xmm4
2771	vaesenclast	%xmm4,%xmm10,%xmm10
2772	vpxor	64(%rdi),%xmm6,%xmm4
2773	vaesenclast	%xmm4,%xmm11,%xmm11
2774	vpxor	80(%rdi),%xmm6,%xmm4
2775	vaesenclast	%xmm4,%xmm12,%xmm12
2776
2777	vpalignr	$8,%xmm0,%xmm0,%xmm2
2778	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
2779	vpxor	%xmm0,%xmm2,%xmm0
2780
2781	vmovdqu	%xmm7,0(%rsi)
2782	vmovdqu	%xmm8,16(%rsi)
2783	vmovdqu	%xmm9,32(%rsi)
2784	vmovdqu	%xmm10,48(%rsi)
2785	vmovdqu	%xmm11,64(%rsi)
2786	vmovdqu	%xmm12,80(%rsi)
2787
2788	vpxor	%xmm5,%xmm0,%xmm0
2789
2790	leaq	96(%rdi),%rdi
2791	leaq	96(%rsi),%rsi
2792	jmp	L$256_dec_loop1
2793
2794L$256_dec_finish_96:
2795	vmovdqa	%xmm12,%xmm6
2796	vmovdqa	%xmm11,16-32(%rax)
2797	vmovdqa	%xmm10,32-32(%rax)
2798	vmovdqa	%xmm9,48-32(%rax)
2799	vmovdqa	%xmm8,64-32(%rax)
2800	vmovdqa	%xmm7,80-32(%rax)
2801
2802	vmovdqu	0-32(%rcx),%xmm4
2803	vpclmulqdq	$0x10,%xmm4,%xmm6,%xmm1
2804	vpclmulqdq	$0x11,%xmm4,%xmm6,%xmm2
2805	vpclmulqdq	$0x00,%xmm4,%xmm6,%xmm3
2806	vpclmulqdq	$0x01,%xmm4,%xmm6,%xmm4
2807	vpxor	%xmm4,%xmm1,%xmm1
2808
2809	vmovdqu	-16(%rax),%xmm6
2810	vmovdqu	-16(%rcx),%xmm13
2811
2812	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2813	vpxor	%xmm4,%xmm1,%xmm1
2814	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2815	vpxor	%xmm4,%xmm2,%xmm2
2816	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2817	vpxor	%xmm4,%xmm3,%xmm3
2818	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2819	vpxor	%xmm4,%xmm1,%xmm1
2820
2821	vmovdqu	0(%rax),%xmm6
2822	vmovdqu	0(%rcx),%xmm13
2823
2824	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2825	vpxor	%xmm4,%xmm1,%xmm1
2826	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2827	vpxor	%xmm4,%xmm2,%xmm2
2828	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2829	vpxor	%xmm4,%xmm3,%xmm3
2830	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2831	vpxor	%xmm4,%xmm1,%xmm1
2832
2833	vmovdqu	16(%rax),%xmm6
2834	vmovdqu	16(%rcx),%xmm13
2835
2836	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2837	vpxor	%xmm4,%xmm1,%xmm1
2838	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2839	vpxor	%xmm4,%xmm2,%xmm2
2840	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2841	vpxor	%xmm4,%xmm3,%xmm3
2842	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2843	vpxor	%xmm4,%xmm1,%xmm1
2844
2845	vmovdqu	32(%rax),%xmm6
2846	vmovdqu	32(%rcx),%xmm13
2847
2848	vpclmulqdq	$0x10,%xmm13,%xmm6,%xmm4
2849	vpxor	%xmm4,%xmm1,%xmm1
2850	vpclmulqdq	$0x11,%xmm13,%xmm6,%xmm4
2851	vpxor	%xmm4,%xmm2,%xmm2
2852	vpclmulqdq	$0x00,%xmm13,%xmm6,%xmm4
2853	vpxor	%xmm4,%xmm3,%xmm3
2854	vpclmulqdq	$0x01,%xmm13,%xmm6,%xmm4
2855	vpxor	%xmm4,%xmm1,%xmm1
2856
2857
2858	vmovdqu	80-32(%rax),%xmm6
2859	vpxor	%xmm0,%xmm6,%xmm6
2860	vmovdqu	80-32(%rcx),%xmm5
2861	vpclmulqdq	$0x11,%xmm5,%xmm6,%xmm4
2862	vpxor	%xmm4,%xmm2,%xmm2
2863	vpclmulqdq	$0x00,%xmm5,%xmm6,%xmm4
2864	vpxor	%xmm4,%xmm3,%xmm3
2865	vpclmulqdq	$0x10,%xmm5,%xmm6,%xmm4
2866	vpxor	%xmm4,%xmm1,%xmm1
2867	vpclmulqdq	$0x01,%xmm5,%xmm6,%xmm4
2868	vpxor	%xmm4,%xmm1,%xmm1
2869
2870	vpsrldq	$8,%xmm1,%xmm4
2871	vpxor	%xmm4,%xmm2,%xmm5
2872	vpslldq	$8,%xmm1,%xmm4
2873	vpxor	%xmm4,%xmm3,%xmm0
2874
2875	vmovdqa	poly(%rip),%xmm3
2876
2877	vpalignr	$8,%xmm0,%xmm0,%xmm2
2878	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
2879	vpxor	%xmm0,%xmm2,%xmm0
2880
2881	vpalignr	$8,%xmm0,%xmm0,%xmm2
2882	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm0
2883	vpxor	%xmm0,%xmm2,%xmm0
2884
2885	vpxor	%xmm5,%xmm0,%xmm0
2886
2887L$256_dec_loop2:
2888
2889
2890
2891	cmpq	$16,%r9
2892	jb	L$256_dec_out
2893	subq	$16,%r9
2894
2895	vmovdqa	%xmm15,%xmm2
2896	vpaddd	one(%rip),%xmm15,%xmm15
2897
2898	vpxor	0(%r8),%xmm2,%xmm2
2899	vaesenc	16(%r8),%xmm2,%xmm2
2900	vaesenc	32(%r8),%xmm2,%xmm2
2901	vaesenc	48(%r8),%xmm2,%xmm2
2902	vaesenc	64(%r8),%xmm2,%xmm2
2903	vaesenc	80(%r8),%xmm2,%xmm2
2904	vaesenc	96(%r8),%xmm2,%xmm2
2905	vaesenc	112(%r8),%xmm2,%xmm2
2906	vaesenc	128(%r8),%xmm2,%xmm2
2907	vaesenc	144(%r8),%xmm2,%xmm2
2908	vaesenc	160(%r8),%xmm2,%xmm2
2909	vaesenc	176(%r8),%xmm2,%xmm2
2910	vaesenc	192(%r8),%xmm2,%xmm2
2911	vaesenc	208(%r8),%xmm2,%xmm2
2912	vaesenclast	224(%r8),%xmm2,%xmm2
2913	vpxor	(%rdi),%xmm2,%xmm2
2914	vmovdqu	%xmm2,(%rsi)
2915	addq	$16,%rdi
2916	addq	$16,%rsi
2917
2918	vpxor	%xmm2,%xmm0,%xmm0
2919	vmovdqa	-32(%rcx),%xmm1
2920	call	GFMUL
2921
2922	jmp	L$256_dec_loop2
2923
2924L$256_dec_out:
2925	vmovdqu	%xmm0,(%rdx)
2926	ret
2927
2928
2929.globl	_aes256gcmsiv_kdf
2930.private_extern _aes256gcmsiv_kdf
2931
2932.p2align	4
2933_aes256gcmsiv_kdf:
2934
2935_CET_ENDBR
2936
2937
2938
2939
2940	vmovdqa	(%rdx),%xmm1
2941	vmovdqa	0(%rdi),%xmm4
2942	vmovdqa	and_mask(%rip),%xmm11
2943	vmovdqa	one(%rip),%xmm8
2944	vpshufd	$0x90,%xmm4,%xmm4
2945	vpand	%xmm11,%xmm4,%xmm4
2946	vpaddd	%xmm8,%xmm4,%xmm6
2947	vpaddd	%xmm8,%xmm6,%xmm7
2948	vpaddd	%xmm8,%xmm7,%xmm11
2949	vpaddd	%xmm8,%xmm11,%xmm12
2950	vpaddd	%xmm8,%xmm12,%xmm13
2951
2952	vpxor	%xmm1,%xmm4,%xmm4
2953	vpxor	%xmm1,%xmm6,%xmm6
2954	vpxor	%xmm1,%xmm7,%xmm7
2955	vpxor	%xmm1,%xmm11,%xmm11
2956	vpxor	%xmm1,%xmm12,%xmm12
2957	vpxor	%xmm1,%xmm13,%xmm13
2958
2959	vmovdqa	16(%rdx),%xmm1
2960	vaesenc	%xmm1,%xmm4,%xmm4
2961	vaesenc	%xmm1,%xmm6,%xmm6
2962	vaesenc	%xmm1,%xmm7,%xmm7
2963	vaesenc	%xmm1,%xmm11,%xmm11
2964	vaesenc	%xmm1,%xmm12,%xmm12
2965	vaesenc	%xmm1,%xmm13,%xmm13
2966
2967	vmovdqa	32(%rdx),%xmm2
2968	vaesenc	%xmm2,%xmm4,%xmm4
2969	vaesenc	%xmm2,%xmm6,%xmm6
2970	vaesenc	%xmm2,%xmm7,%xmm7
2971	vaesenc	%xmm2,%xmm11,%xmm11
2972	vaesenc	%xmm2,%xmm12,%xmm12
2973	vaesenc	%xmm2,%xmm13,%xmm13
2974
2975	vmovdqa	48(%rdx),%xmm1
2976	vaesenc	%xmm1,%xmm4,%xmm4
2977	vaesenc	%xmm1,%xmm6,%xmm6
2978	vaesenc	%xmm1,%xmm7,%xmm7
2979	vaesenc	%xmm1,%xmm11,%xmm11
2980	vaesenc	%xmm1,%xmm12,%xmm12
2981	vaesenc	%xmm1,%xmm13,%xmm13
2982
2983	vmovdqa	64(%rdx),%xmm2
2984	vaesenc	%xmm2,%xmm4,%xmm4
2985	vaesenc	%xmm2,%xmm6,%xmm6
2986	vaesenc	%xmm2,%xmm7,%xmm7
2987	vaesenc	%xmm2,%xmm11,%xmm11
2988	vaesenc	%xmm2,%xmm12,%xmm12
2989	vaesenc	%xmm2,%xmm13,%xmm13
2990
2991	vmovdqa	80(%rdx),%xmm1
2992	vaesenc	%xmm1,%xmm4,%xmm4
2993	vaesenc	%xmm1,%xmm6,%xmm6
2994	vaesenc	%xmm1,%xmm7,%xmm7
2995	vaesenc	%xmm1,%xmm11,%xmm11
2996	vaesenc	%xmm1,%xmm12,%xmm12
2997	vaesenc	%xmm1,%xmm13,%xmm13
2998
2999	vmovdqa	96(%rdx),%xmm2
3000	vaesenc	%xmm2,%xmm4,%xmm4
3001	vaesenc	%xmm2,%xmm6,%xmm6
3002	vaesenc	%xmm2,%xmm7,%xmm7
3003	vaesenc	%xmm2,%xmm11,%xmm11
3004	vaesenc	%xmm2,%xmm12,%xmm12
3005	vaesenc	%xmm2,%xmm13,%xmm13
3006
3007	vmovdqa	112(%rdx),%xmm1
3008	vaesenc	%xmm1,%xmm4,%xmm4
3009	vaesenc	%xmm1,%xmm6,%xmm6
3010	vaesenc	%xmm1,%xmm7,%xmm7
3011	vaesenc	%xmm1,%xmm11,%xmm11
3012	vaesenc	%xmm1,%xmm12,%xmm12
3013	vaesenc	%xmm1,%xmm13,%xmm13
3014
3015	vmovdqa	128(%rdx),%xmm2
3016	vaesenc	%xmm2,%xmm4,%xmm4
3017	vaesenc	%xmm2,%xmm6,%xmm6
3018	vaesenc	%xmm2,%xmm7,%xmm7
3019	vaesenc	%xmm2,%xmm11,%xmm11
3020	vaesenc	%xmm2,%xmm12,%xmm12
3021	vaesenc	%xmm2,%xmm13,%xmm13
3022
3023	vmovdqa	144(%rdx),%xmm1
3024	vaesenc	%xmm1,%xmm4,%xmm4
3025	vaesenc	%xmm1,%xmm6,%xmm6
3026	vaesenc	%xmm1,%xmm7,%xmm7
3027	vaesenc	%xmm1,%xmm11,%xmm11
3028	vaesenc	%xmm1,%xmm12,%xmm12
3029	vaesenc	%xmm1,%xmm13,%xmm13
3030
3031	vmovdqa	160(%rdx),%xmm2
3032	vaesenc	%xmm2,%xmm4,%xmm4
3033	vaesenc	%xmm2,%xmm6,%xmm6
3034	vaesenc	%xmm2,%xmm7,%xmm7
3035	vaesenc	%xmm2,%xmm11,%xmm11
3036	vaesenc	%xmm2,%xmm12,%xmm12
3037	vaesenc	%xmm2,%xmm13,%xmm13
3038
3039	vmovdqa	176(%rdx),%xmm1
3040	vaesenc	%xmm1,%xmm4,%xmm4
3041	vaesenc	%xmm1,%xmm6,%xmm6
3042	vaesenc	%xmm1,%xmm7,%xmm7
3043	vaesenc	%xmm1,%xmm11,%xmm11
3044	vaesenc	%xmm1,%xmm12,%xmm12
3045	vaesenc	%xmm1,%xmm13,%xmm13
3046
3047	vmovdqa	192(%rdx),%xmm2
3048	vaesenc	%xmm2,%xmm4,%xmm4
3049	vaesenc	%xmm2,%xmm6,%xmm6
3050	vaesenc	%xmm2,%xmm7,%xmm7
3051	vaesenc	%xmm2,%xmm11,%xmm11
3052	vaesenc	%xmm2,%xmm12,%xmm12
3053	vaesenc	%xmm2,%xmm13,%xmm13
3054
3055	vmovdqa	208(%rdx),%xmm1
3056	vaesenc	%xmm1,%xmm4,%xmm4
3057	vaesenc	%xmm1,%xmm6,%xmm6
3058	vaesenc	%xmm1,%xmm7,%xmm7
3059	vaesenc	%xmm1,%xmm11,%xmm11
3060	vaesenc	%xmm1,%xmm12,%xmm12
3061	vaesenc	%xmm1,%xmm13,%xmm13
3062
3063	vmovdqa	224(%rdx),%xmm2
3064	vaesenclast	%xmm2,%xmm4,%xmm4
3065	vaesenclast	%xmm2,%xmm6,%xmm6
3066	vaesenclast	%xmm2,%xmm7,%xmm7
3067	vaesenclast	%xmm2,%xmm11,%xmm11
3068	vaesenclast	%xmm2,%xmm12,%xmm12
3069	vaesenclast	%xmm2,%xmm13,%xmm13
3070
3071
3072	vmovdqa	%xmm4,0(%rsi)
3073	vmovdqa	%xmm6,16(%rsi)
3074	vmovdqa	%xmm7,32(%rsi)
3075	vmovdqa	%xmm11,48(%rsi)
3076	vmovdqa	%xmm12,64(%rsi)
3077	vmovdqa	%xmm13,80(%rsi)
3078	ret
3079
3080
3081#endif
3082