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