• 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#include "ring_core_generated/prefix_symbols_asm.h"
12.text
13
14.type	_aesni_ctr32_ghash_6x,@function
15.align	32
16_aesni_ctr32_ghash_6x:
17.cfi_startproc
18	vmovdqu	32(%r11),%xmm2
19	subq	$6,%rdx
20	vpxor	%xmm4,%xmm4,%xmm4
21	vmovdqu	0-128(%rcx),%xmm15
22	vpaddb	%xmm2,%xmm1,%xmm10
23	vpaddb	%xmm2,%xmm10,%xmm11
24	vpaddb	%xmm2,%xmm11,%xmm12
25	vpaddb	%xmm2,%xmm12,%xmm13
26	vpaddb	%xmm2,%xmm13,%xmm14
27	vpxor	%xmm15,%xmm1,%xmm9
28	vmovdqu	%xmm4,16+8(%rsp)
29	jmp	.Loop6x
30
31.align	32
32.Loop6x:
33	addl	$100663296,%ebx
34	jc	.Lhandle_ctr32
35	vmovdqu	0-32(%r9),%xmm3
36	vpaddb	%xmm2,%xmm14,%xmm1
37	vpxor	%xmm15,%xmm10,%xmm10
38	vpxor	%xmm15,%xmm11,%xmm11
39
40.Lresume_ctr32:
41	vmovdqu	%xmm1,(%r8)
42	vpclmulqdq	$0x10,%xmm3,%xmm7,%xmm5
43	vpxor	%xmm15,%xmm12,%xmm12
44	vmovups	16-128(%rcx),%xmm2
45	vpclmulqdq	$0x01,%xmm3,%xmm7,%xmm6
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63	xorq	%r12,%r12
64	cmpq	%r14,%r15
65
66	vaesenc	%xmm2,%xmm9,%xmm9
67	vmovdqu	48+8(%rsp),%xmm0
68	vpxor	%xmm15,%xmm13,%xmm13
69	vpclmulqdq	$0x00,%xmm3,%xmm7,%xmm1
70	vaesenc	%xmm2,%xmm10,%xmm10
71	vpxor	%xmm15,%xmm14,%xmm14
72	setnc	%r12b
73	vpclmulqdq	$0x11,%xmm3,%xmm7,%xmm7
74	vaesenc	%xmm2,%xmm11,%xmm11
75	vmovdqu	16-32(%r9),%xmm3
76	negq	%r12
77	vaesenc	%xmm2,%xmm12,%xmm12
78	vpxor	%xmm5,%xmm6,%xmm6
79	vpclmulqdq	$0x00,%xmm3,%xmm0,%xmm5
80	vpxor	%xmm4,%xmm8,%xmm8
81	vaesenc	%xmm2,%xmm13,%xmm13
82	vpxor	%xmm5,%xmm1,%xmm4
83	andq	$0x60,%r12
84	vmovups	32-128(%rcx),%xmm15
85	vpclmulqdq	$0x10,%xmm3,%xmm0,%xmm1
86	vaesenc	%xmm2,%xmm14,%xmm14
87
88	vpclmulqdq	$0x01,%xmm3,%xmm0,%xmm2
89	leaq	(%r14,%r12,1),%r14
90	vaesenc	%xmm15,%xmm9,%xmm9
91	vpxor	16+8(%rsp),%xmm8,%xmm8
92	vpclmulqdq	$0x11,%xmm3,%xmm0,%xmm3
93	vmovdqu	64+8(%rsp),%xmm0
94	vaesenc	%xmm15,%xmm10,%xmm10
95	movbeq	88(%r14),%r13
96	vaesenc	%xmm15,%xmm11,%xmm11
97	movbeq	80(%r14),%r12
98	vaesenc	%xmm15,%xmm12,%xmm12
99	movq	%r13,32+8(%rsp)
100	vaesenc	%xmm15,%xmm13,%xmm13
101	movq	%r12,40+8(%rsp)
102	vmovdqu	48-32(%r9),%xmm5
103	vaesenc	%xmm15,%xmm14,%xmm14
104
105	vmovups	48-128(%rcx),%xmm15
106	vpxor	%xmm1,%xmm6,%xmm6
107	vpclmulqdq	$0x00,%xmm5,%xmm0,%xmm1
108	vaesenc	%xmm15,%xmm9,%xmm9
109	vpxor	%xmm2,%xmm6,%xmm6
110	vpclmulqdq	$0x10,%xmm5,%xmm0,%xmm2
111	vaesenc	%xmm15,%xmm10,%xmm10
112	vpxor	%xmm3,%xmm7,%xmm7
113	vpclmulqdq	$0x01,%xmm5,%xmm0,%xmm3
114	vaesenc	%xmm15,%xmm11,%xmm11
115	vpclmulqdq	$0x11,%xmm5,%xmm0,%xmm5
116	vmovdqu	80+8(%rsp),%xmm0
117	vaesenc	%xmm15,%xmm12,%xmm12
118	vaesenc	%xmm15,%xmm13,%xmm13
119	vpxor	%xmm1,%xmm4,%xmm4
120	vmovdqu	64-32(%r9),%xmm1
121	vaesenc	%xmm15,%xmm14,%xmm14
122
123	vmovups	64-128(%rcx),%xmm15
124	vpxor	%xmm2,%xmm6,%xmm6
125	vpclmulqdq	$0x00,%xmm1,%xmm0,%xmm2
126	vaesenc	%xmm15,%xmm9,%xmm9
127	vpxor	%xmm3,%xmm6,%xmm6
128	vpclmulqdq	$0x10,%xmm1,%xmm0,%xmm3
129	vaesenc	%xmm15,%xmm10,%xmm10
130	movbeq	72(%r14),%r13
131	vpxor	%xmm5,%xmm7,%xmm7
132	vpclmulqdq	$0x01,%xmm1,%xmm0,%xmm5
133	vaesenc	%xmm15,%xmm11,%xmm11
134	movbeq	64(%r14),%r12
135	vpclmulqdq	$0x11,%xmm1,%xmm0,%xmm1
136	vmovdqu	96+8(%rsp),%xmm0
137	vaesenc	%xmm15,%xmm12,%xmm12
138	movq	%r13,48+8(%rsp)
139	vaesenc	%xmm15,%xmm13,%xmm13
140	movq	%r12,56+8(%rsp)
141	vpxor	%xmm2,%xmm4,%xmm4
142	vmovdqu	96-32(%r9),%xmm2
143	vaesenc	%xmm15,%xmm14,%xmm14
144
145	vmovups	80-128(%rcx),%xmm15
146	vpxor	%xmm3,%xmm6,%xmm6
147	vpclmulqdq	$0x00,%xmm2,%xmm0,%xmm3
148	vaesenc	%xmm15,%xmm9,%xmm9
149	vpxor	%xmm5,%xmm6,%xmm6
150	vpclmulqdq	$0x10,%xmm2,%xmm0,%xmm5
151	vaesenc	%xmm15,%xmm10,%xmm10
152	movbeq	56(%r14),%r13
153	vpxor	%xmm1,%xmm7,%xmm7
154	vpclmulqdq	$0x01,%xmm2,%xmm0,%xmm1
155	vpxor	112+8(%rsp),%xmm8,%xmm8
156	vaesenc	%xmm15,%xmm11,%xmm11
157	movbeq	48(%r14),%r12
158	vpclmulqdq	$0x11,%xmm2,%xmm0,%xmm2
159	vaesenc	%xmm15,%xmm12,%xmm12
160	movq	%r13,64+8(%rsp)
161	vaesenc	%xmm15,%xmm13,%xmm13
162	movq	%r12,72+8(%rsp)
163	vpxor	%xmm3,%xmm4,%xmm4
164	vmovdqu	112-32(%r9),%xmm3
165	vaesenc	%xmm15,%xmm14,%xmm14
166
167	vmovups	96-128(%rcx),%xmm15
168	vpxor	%xmm5,%xmm6,%xmm6
169	vpclmulqdq	$0x10,%xmm3,%xmm8,%xmm5
170	vaesenc	%xmm15,%xmm9,%xmm9
171	vpxor	%xmm1,%xmm6,%xmm6
172	vpclmulqdq	$0x01,%xmm3,%xmm8,%xmm1
173	vaesenc	%xmm15,%xmm10,%xmm10
174	movbeq	40(%r14),%r13
175	vpxor	%xmm2,%xmm7,%xmm7
176	vpclmulqdq	$0x00,%xmm3,%xmm8,%xmm2
177	vaesenc	%xmm15,%xmm11,%xmm11
178	movbeq	32(%r14),%r12
179	vpclmulqdq	$0x11,%xmm3,%xmm8,%xmm8
180	vaesenc	%xmm15,%xmm12,%xmm12
181	movq	%r13,80+8(%rsp)
182	vaesenc	%xmm15,%xmm13,%xmm13
183	movq	%r12,88+8(%rsp)
184	vpxor	%xmm5,%xmm6,%xmm6
185	vaesenc	%xmm15,%xmm14,%xmm14
186	vpxor	%xmm1,%xmm6,%xmm6
187
188	vmovups	112-128(%rcx),%xmm15
189	vpslldq	$8,%xmm6,%xmm5
190	vpxor	%xmm2,%xmm4,%xmm4
191	vmovdqu	16(%r11),%xmm3
192
193	vaesenc	%xmm15,%xmm9,%xmm9
194	vpxor	%xmm8,%xmm7,%xmm7
195	vaesenc	%xmm15,%xmm10,%xmm10
196	vpxor	%xmm5,%xmm4,%xmm4
197	movbeq	24(%r14),%r13
198	vaesenc	%xmm15,%xmm11,%xmm11
199	movbeq	16(%r14),%r12
200	vpalignr	$8,%xmm4,%xmm4,%xmm0
201	vpclmulqdq	$0x10,%xmm3,%xmm4,%xmm4
202	movq	%r13,96+8(%rsp)
203	vaesenc	%xmm15,%xmm12,%xmm12
204	movq	%r12,104+8(%rsp)
205	vaesenc	%xmm15,%xmm13,%xmm13
206	vmovups	128-128(%rcx),%xmm1
207	vaesenc	%xmm15,%xmm14,%xmm14
208
209	vaesenc	%xmm1,%xmm9,%xmm9
210	vmovups	144-128(%rcx),%xmm15
211	vaesenc	%xmm1,%xmm10,%xmm10
212	vpsrldq	$8,%xmm6,%xmm6
213	vaesenc	%xmm1,%xmm11,%xmm11
214	vpxor	%xmm6,%xmm7,%xmm7
215	vaesenc	%xmm1,%xmm12,%xmm12
216	vpxor	%xmm0,%xmm4,%xmm4
217	movbeq	8(%r14),%r13
218	vaesenc	%xmm1,%xmm13,%xmm13
219	movbeq	0(%r14),%r12
220	vaesenc	%xmm1,%xmm14,%xmm14
221	vmovups	160-128(%rcx),%xmm1
222	cmpl	$11,%ebp
223	jb	.Lenc_tail
224
225	vaesenc	%xmm15,%xmm9,%xmm9
226	vaesenc	%xmm15,%xmm10,%xmm10
227	vaesenc	%xmm15,%xmm11,%xmm11
228	vaesenc	%xmm15,%xmm12,%xmm12
229	vaesenc	%xmm15,%xmm13,%xmm13
230	vaesenc	%xmm15,%xmm14,%xmm14
231
232	vaesenc	%xmm1,%xmm9,%xmm9
233	vaesenc	%xmm1,%xmm10,%xmm10
234	vaesenc	%xmm1,%xmm11,%xmm11
235	vaesenc	%xmm1,%xmm12,%xmm12
236	vaesenc	%xmm1,%xmm13,%xmm13
237	vmovups	176-128(%rcx),%xmm15
238	vaesenc	%xmm1,%xmm14,%xmm14
239	vmovups	192-128(%rcx),%xmm1
240
241
242	vaesenc	%xmm15,%xmm9,%xmm9
243	vaesenc	%xmm15,%xmm10,%xmm10
244	vaesenc	%xmm15,%xmm11,%xmm11
245	vaesenc	%xmm15,%xmm12,%xmm12
246	vaesenc	%xmm15,%xmm13,%xmm13
247	vaesenc	%xmm15,%xmm14,%xmm14
248
249	vaesenc	%xmm1,%xmm9,%xmm9
250	vaesenc	%xmm1,%xmm10,%xmm10
251	vaesenc	%xmm1,%xmm11,%xmm11
252	vaesenc	%xmm1,%xmm12,%xmm12
253	vaesenc	%xmm1,%xmm13,%xmm13
254	vmovups	208-128(%rcx),%xmm15
255	vaesenc	%xmm1,%xmm14,%xmm14
256	vmovups	224-128(%rcx),%xmm1
257	jmp	.Lenc_tail
258
259.align	32
260.Lhandle_ctr32:
261	vmovdqu	(%r11),%xmm0
262	vpshufb	%xmm0,%xmm1,%xmm6
263	vmovdqu	48(%r11),%xmm5
264	vpaddd	64(%r11),%xmm6,%xmm10
265	vpaddd	%xmm5,%xmm6,%xmm11
266	vmovdqu	0-32(%r9),%xmm3
267	vpaddd	%xmm5,%xmm10,%xmm12
268	vpshufb	%xmm0,%xmm10,%xmm10
269	vpaddd	%xmm5,%xmm11,%xmm13
270	vpshufb	%xmm0,%xmm11,%xmm11
271	vpxor	%xmm15,%xmm10,%xmm10
272	vpaddd	%xmm5,%xmm12,%xmm14
273	vpshufb	%xmm0,%xmm12,%xmm12
274	vpxor	%xmm15,%xmm11,%xmm11
275	vpaddd	%xmm5,%xmm13,%xmm1
276	vpshufb	%xmm0,%xmm13,%xmm13
277	vpshufb	%xmm0,%xmm14,%xmm14
278	vpshufb	%xmm0,%xmm1,%xmm1
279	jmp	.Lresume_ctr32
280
281.align	32
282.Lenc_tail:
283	vaesenc	%xmm15,%xmm9,%xmm9
284	vmovdqu	%xmm7,16+8(%rsp)
285	vpalignr	$8,%xmm4,%xmm4,%xmm8
286	vaesenc	%xmm15,%xmm10,%xmm10
287	vpclmulqdq	$0x10,%xmm3,%xmm4,%xmm4
288	vpxor	0(%rdi),%xmm1,%xmm2
289	vaesenc	%xmm15,%xmm11,%xmm11
290	vpxor	16(%rdi),%xmm1,%xmm0
291	vaesenc	%xmm15,%xmm12,%xmm12
292	vpxor	32(%rdi),%xmm1,%xmm5
293	vaesenc	%xmm15,%xmm13,%xmm13
294	vpxor	48(%rdi),%xmm1,%xmm6
295	vaesenc	%xmm15,%xmm14,%xmm14
296	vpxor	64(%rdi),%xmm1,%xmm7
297	vpxor	80(%rdi),%xmm1,%xmm3
298	vmovdqu	(%r8),%xmm1
299
300	vaesenclast	%xmm2,%xmm9,%xmm9
301	vmovdqu	32(%r11),%xmm2
302	vaesenclast	%xmm0,%xmm10,%xmm10
303	vpaddb	%xmm2,%xmm1,%xmm0
304	movq	%r13,112+8(%rsp)
305	leaq	96(%rdi),%rdi
306	vaesenclast	%xmm5,%xmm11,%xmm11
307	vpaddb	%xmm2,%xmm0,%xmm5
308	movq	%r12,120+8(%rsp)
309	leaq	96(%rsi),%rsi
310	vmovdqu	0-128(%rcx),%xmm15
311	vaesenclast	%xmm6,%xmm12,%xmm12
312	vpaddb	%xmm2,%xmm5,%xmm6
313	vaesenclast	%xmm7,%xmm13,%xmm13
314	vpaddb	%xmm2,%xmm6,%xmm7
315	vaesenclast	%xmm3,%xmm14,%xmm14
316	vpaddb	%xmm2,%xmm7,%xmm3
317
318	addq	$0x60,%r10
319	subq	$0x6,%rdx
320	jc	.L6x_done
321
322	vmovups	%xmm9,-96(%rsi)
323	vpxor	%xmm15,%xmm1,%xmm9
324	vmovups	%xmm10,-80(%rsi)
325	vmovdqa	%xmm0,%xmm10
326	vmovups	%xmm11,-64(%rsi)
327	vmovdqa	%xmm5,%xmm11
328	vmovups	%xmm12,-48(%rsi)
329	vmovdqa	%xmm6,%xmm12
330	vmovups	%xmm13,-32(%rsi)
331	vmovdqa	%xmm7,%xmm13
332	vmovups	%xmm14,-16(%rsi)
333	vmovdqa	%xmm3,%xmm14
334	vmovdqu	32+8(%rsp),%xmm7
335	jmp	.Loop6x
336
337.L6x_done:
338	vpxor	16+8(%rsp),%xmm8,%xmm8
339	vpxor	%xmm4,%xmm8,%xmm8
340
341	.byte	0xf3,0xc3
342.cfi_endproc
343.size	_aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x
344.globl	aesni_gcm_decrypt
345.hidden aesni_gcm_decrypt
346.type	aesni_gcm_decrypt,@function
347.align	32
348aesni_gcm_decrypt:
349.cfi_startproc
350	xorq	%r10,%r10
351
352
353
354	cmpq	$0x60,%rdx
355	jb	.Lgcm_dec_abort
356
357	leaq	(%rsp),%rax
358.cfi_def_cfa_register	%rax
359	pushq	%rbx
360.cfi_offset	%rbx,-16
361	pushq	%rbp
362.cfi_offset	%rbp,-24
363	pushq	%r12
364.cfi_offset	%r12,-32
365	pushq	%r13
366.cfi_offset	%r13,-40
367	pushq	%r14
368.cfi_offset	%r14,-48
369	pushq	%r15
370.cfi_offset	%r15,-56
371	vzeroupper
372
373	vmovdqu	(%r8),%xmm1
374	addq	$-128,%rsp
375	movl	12(%r8),%ebx
376	leaq	.Lbswap_mask(%rip),%r11
377	leaq	-128(%rcx),%r14
378	movq	$0xf80,%r15
379	vmovdqu	(%r9),%xmm8
380	andq	$-128,%rsp
381	vmovdqu	(%r11),%xmm0
382	leaq	128(%rcx),%rcx
383	leaq	32+32(%r9),%r9
384	movl	240-128(%rcx),%ebp
385	vpshufb	%xmm0,%xmm8,%xmm8
386
387	andq	%r15,%r14
388	andq	%rsp,%r15
389	subq	%r14,%r15
390	jc	.Ldec_no_key_aliasing
391	cmpq	$768,%r15
392	jnc	.Ldec_no_key_aliasing
393	subq	%r15,%rsp
394.Ldec_no_key_aliasing:
395
396	vmovdqu	80(%rdi),%xmm7
397	leaq	(%rdi),%r14
398	vmovdqu	64(%rdi),%xmm4
399
400
401
402
403
404
405
406	leaq	-192(%rdi,%rdx,1),%r15
407
408	vmovdqu	48(%rdi),%xmm5
409	shrq	$4,%rdx
410	xorq	%r10,%r10
411	vmovdqu	32(%rdi),%xmm6
412	vpshufb	%xmm0,%xmm7,%xmm7
413	vmovdqu	16(%rdi),%xmm2
414	vpshufb	%xmm0,%xmm4,%xmm4
415	vmovdqu	(%rdi),%xmm3
416	vpshufb	%xmm0,%xmm5,%xmm5
417	vmovdqu	%xmm4,48(%rsp)
418	vpshufb	%xmm0,%xmm6,%xmm6
419	vmovdqu	%xmm5,64(%rsp)
420	vpshufb	%xmm0,%xmm2,%xmm2
421	vmovdqu	%xmm6,80(%rsp)
422	vpshufb	%xmm0,%xmm3,%xmm3
423	vmovdqu	%xmm2,96(%rsp)
424	vmovdqu	%xmm3,112(%rsp)
425
426	call	_aesni_ctr32_ghash_6x
427
428	vmovups	%xmm9,-96(%rsi)
429	vmovups	%xmm10,-80(%rsi)
430	vmovups	%xmm11,-64(%rsi)
431	vmovups	%xmm12,-48(%rsi)
432	vmovups	%xmm13,-32(%rsi)
433	vmovups	%xmm14,-16(%rsi)
434
435	vpshufb	(%r11),%xmm8,%xmm8
436	vmovdqu	%xmm8,-64(%r9)
437
438	vzeroupper
439	movq	-48(%rax),%r15
440.cfi_restore	%r15
441	movq	-40(%rax),%r14
442.cfi_restore	%r14
443	movq	-32(%rax),%r13
444.cfi_restore	%r13
445	movq	-24(%rax),%r12
446.cfi_restore	%r12
447	movq	-16(%rax),%rbp
448.cfi_restore	%rbp
449	movq	-8(%rax),%rbx
450.cfi_restore	%rbx
451	leaq	(%rax),%rsp
452.cfi_def_cfa_register	%rsp
453.Lgcm_dec_abort:
454	movq	%r10,%rax
455	.byte	0xf3,0xc3
456.cfi_endproc
457.size	aesni_gcm_decrypt,.-aesni_gcm_decrypt
458.type	_aesni_ctr32_6x,@function
459.align	32
460_aesni_ctr32_6x:
461.cfi_startproc
462	vmovdqu	0-128(%rcx),%xmm4
463	vmovdqu	32(%r11),%xmm2
464	leaq	-1(%rbp),%r13
465	vmovups	16-128(%rcx),%xmm15
466	leaq	32-128(%rcx),%r12
467	vpxor	%xmm4,%xmm1,%xmm9
468	addl	$100663296,%ebx
469	jc	.Lhandle_ctr32_2
470	vpaddb	%xmm2,%xmm1,%xmm10
471	vpaddb	%xmm2,%xmm10,%xmm11
472	vpxor	%xmm4,%xmm10,%xmm10
473	vpaddb	%xmm2,%xmm11,%xmm12
474	vpxor	%xmm4,%xmm11,%xmm11
475	vpaddb	%xmm2,%xmm12,%xmm13
476	vpxor	%xmm4,%xmm12,%xmm12
477	vpaddb	%xmm2,%xmm13,%xmm14
478	vpxor	%xmm4,%xmm13,%xmm13
479	vpaddb	%xmm2,%xmm14,%xmm1
480	vpxor	%xmm4,%xmm14,%xmm14
481	jmp	.Loop_ctr32
482
483.align	16
484.Loop_ctr32:
485	vaesenc	%xmm15,%xmm9,%xmm9
486	vaesenc	%xmm15,%xmm10,%xmm10
487	vaesenc	%xmm15,%xmm11,%xmm11
488	vaesenc	%xmm15,%xmm12,%xmm12
489	vaesenc	%xmm15,%xmm13,%xmm13
490	vaesenc	%xmm15,%xmm14,%xmm14
491	vmovups	(%r12),%xmm15
492	leaq	16(%r12),%r12
493	decl	%r13d
494	jnz	.Loop_ctr32
495
496	vmovdqu	(%r12),%xmm3
497	vaesenc	%xmm15,%xmm9,%xmm9
498	vpxor	0(%rdi),%xmm3,%xmm4
499	vaesenc	%xmm15,%xmm10,%xmm10
500	vpxor	16(%rdi),%xmm3,%xmm5
501	vaesenc	%xmm15,%xmm11,%xmm11
502	vpxor	32(%rdi),%xmm3,%xmm6
503	vaesenc	%xmm15,%xmm12,%xmm12
504	vpxor	48(%rdi),%xmm3,%xmm8
505	vaesenc	%xmm15,%xmm13,%xmm13
506	vpxor	64(%rdi),%xmm3,%xmm2
507	vaesenc	%xmm15,%xmm14,%xmm14
508	vpxor	80(%rdi),%xmm3,%xmm3
509	leaq	96(%rdi),%rdi
510
511	vaesenclast	%xmm4,%xmm9,%xmm9
512	vaesenclast	%xmm5,%xmm10,%xmm10
513	vaesenclast	%xmm6,%xmm11,%xmm11
514	vaesenclast	%xmm8,%xmm12,%xmm12
515	vaesenclast	%xmm2,%xmm13,%xmm13
516	vaesenclast	%xmm3,%xmm14,%xmm14
517	vmovups	%xmm9,0(%rsi)
518	vmovups	%xmm10,16(%rsi)
519	vmovups	%xmm11,32(%rsi)
520	vmovups	%xmm12,48(%rsi)
521	vmovups	%xmm13,64(%rsi)
522	vmovups	%xmm14,80(%rsi)
523	leaq	96(%rsi),%rsi
524
525	.byte	0xf3,0xc3
526.align	32
527.Lhandle_ctr32_2:
528	vpshufb	%xmm0,%xmm1,%xmm6
529	vmovdqu	48(%r11),%xmm5
530	vpaddd	64(%r11),%xmm6,%xmm10
531	vpaddd	%xmm5,%xmm6,%xmm11
532	vpaddd	%xmm5,%xmm10,%xmm12
533	vpshufb	%xmm0,%xmm10,%xmm10
534	vpaddd	%xmm5,%xmm11,%xmm13
535	vpshufb	%xmm0,%xmm11,%xmm11
536	vpxor	%xmm4,%xmm10,%xmm10
537	vpaddd	%xmm5,%xmm12,%xmm14
538	vpshufb	%xmm0,%xmm12,%xmm12
539	vpxor	%xmm4,%xmm11,%xmm11
540	vpaddd	%xmm5,%xmm13,%xmm1
541	vpshufb	%xmm0,%xmm13,%xmm13
542	vpxor	%xmm4,%xmm12,%xmm12
543	vpshufb	%xmm0,%xmm14,%xmm14
544	vpxor	%xmm4,%xmm13,%xmm13
545	vpshufb	%xmm0,%xmm1,%xmm1
546	vpxor	%xmm4,%xmm14,%xmm14
547	jmp	.Loop_ctr32
548.cfi_endproc
549.size	_aesni_ctr32_6x,.-_aesni_ctr32_6x
550
551.globl	aesni_gcm_encrypt
552.hidden aesni_gcm_encrypt
553.type	aesni_gcm_encrypt,@function
554.align	32
555aesni_gcm_encrypt:
556.cfi_startproc
557	xorq	%r10,%r10
558
559
560
561
562	cmpq	$288,%rdx
563	jb	.Lgcm_enc_abort
564
565	leaq	(%rsp),%rax
566.cfi_def_cfa_register	%rax
567	pushq	%rbx
568.cfi_offset	%rbx,-16
569	pushq	%rbp
570.cfi_offset	%rbp,-24
571	pushq	%r12
572.cfi_offset	%r12,-32
573	pushq	%r13
574.cfi_offset	%r13,-40
575	pushq	%r14
576.cfi_offset	%r14,-48
577	pushq	%r15
578.cfi_offset	%r15,-56
579	vzeroupper
580
581	vmovdqu	(%r8),%xmm1
582	addq	$-128,%rsp
583	movl	12(%r8),%ebx
584	leaq	.Lbswap_mask(%rip),%r11
585	leaq	-128(%rcx),%r14
586	movq	$0xf80,%r15
587	leaq	128(%rcx),%rcx
588	vmovdqu	(%r11),%xmm0
589	andq	$-128,%rsp
590	movl	240-128(%rcx),%ebp
591
592	andq	%r15,%r14
593	andq	%rsp,%r15
594	subq	%r14,%r15
595	jc	.Lenc_no_key_aliasing
596	cmpq	$768,%r15
597	jnc	.Lenc_no_key_aliasing
598	subq	%r15,%rsp
599.Lenc_no_key_aliasing:
600
601	leaq	(%rsi),%r14
602
603
604
605
606
607
608
609
610	leaq	-192(%rsi,%rdx,1),%r15
611
612	shrq	$4,%rdx
613
614	call	_aesni_ctr32_6x
615	vpshufb	%xmm0,%xmm9,%xmm8
616	vpshufb	%xmm0,%xmm10,%xmm2
617	vmovdqu	%xmm8,112(%rsp)
618	vpshufb	%xmm0,%xmm11,%xmm4
619	vmovdqu	%xmm2,96(%rsp)
620	vpshufb	%xmm0,%xmm12,%xmm5
621	vmovdqu	%xmm4,80(%rsp)
622	vpshufb	%xmm0,%xmm13,%xmm6
623	vmovdqu	%xmm5,64(%rsp)
624	vpshufb	%xmm0,%xmm14,%xmm7
625	vmovdqu	%xmm6,48(%rsp)
626
627	call	_aesni_ctr32_6x
628
629	vmovdqu	(%r9),%xmm8
630	leaq	32+32(%r9),%r9
631	subq	$12,%rdx
632	movq	$192,%r10
633	vpshufb	%xmm0,%xmm8,%xmm8
634
635	call	_aesni_ctr32_ghash_6x
636	vmovdqu	32(%rsp),%xmm7
637	vmovdqu	(%r11),%xmm0
638	vmovdqu	0-32(%r9),%xmm3
639	vpunpckhqdq	%xmm7,%xmm7,%xmm1
640	vmovdqu	32-32(%r9),%xmm15
641	vmovups	%xmm9,-96(%rsi)
642	vpshufb	%xmm0,%xmm9,%xmm9
643	vpxor	%xmm7,%xmm1,%xmm1
644	vmovups	%xmm10,-80(%rsi)
645	vpshufb	%xmm0,%xmm10,%xmm10
646	vmovups	%xmm11,-64(%rsi)
647	vpshufb	%xmm0,%xmm11,%xmm11
648	vmovups	%xmm12,-48(%rsi)
649	vpshufb	%xmm0,%xmm12,%xmm12
650	vmovups	%xmm13,-32(%rsi)
651	vpshufb	%xmm0,%xmm13,%xmm13
652	vmovups	%xmm14,-16(%rsi)
653	vpshufb	%xmm0,%xmm14,%xmm14
654	vmovdqu	%xmm9,16(%rsp)
655	vmovdqu	48(%rsp),%xmm6
656	vmovdqu	16-32(%r9),%xmm0
657	vpunpckhqdq	%xmm6,%xmm6,%xmm2
658	vpclmulqdq	$0x00,%xmm3,%xmm7,%xmm5
659	vpxor	%xmm6,%xmm2,%xmm2
660	vpclmulqdq	$0x11,%xmm3,%xmm7,%xmm7
661	vpclmulqdq	$0x00,%xmm15,%xmm1,%xmm1
662
663	vmovdqu	64(%rsp),%xmm9
664	vpclmulqdq	$0x00,%xmm0,%xmm6,%xmm4
665	vmovdqu	48-32(%r9),%xmm3
666	vpxor	%xmm5,%xmm4,%xmm4
667	vpunpckhqdq	%xmm9,%xmm9,%xmm5
668	vpclmulqdq	$0x11,%xmm0,%xmm6,%xmm6
669	vpxor	%xmm9,%xmm5,%xmm5
670	vpxor	%xmm7,%xmm6,%xmm6
671	vpclmulqdq	$0x10,%xmm15,%xmm2,%xmm2
672	vmovdqu	80-32(%r9),%xmm15
673	vpxor	%xmm1,%xmm2,%xmm2
674
675	vmovdqu	80(%rsp),%xmm1
676	vpclmulqdq	$0x00,%xmm3,%xmm9,%xmm7
677	vmovdqu	64-32(%r9),%xmm0
678	vpxor	%xmm4,%xmm7,%xmm7
679	vpunpckhqdq	%xmm1,%xmm1,%xmm4
680	vpclmulqdq	$0x11,%xmm3,%xmm9,%xmm9
681	vpxor	%xmm1,%xmm4,%xmm4
682	vpxor	%xmm6,%xmm9,%xmm9
683	vpclmulqdq	$0x00,%xmm15,%xmm5,%xmm5
684	vpxor	%xmm2,%xmm5,%xmm5
685
686	vmovdqu	96(%rsp),%xmm2
687	vpclmulqdq	$0x00,%xmm0,%xmm1,%xmm6
688	vmovdqu	96-32(%r9),%xmm3
689	vpxor	%xmm7,%xmm6,%xmm6
690	vpunpckhqdq	%xmm2,%xmm2,%xmm7
691	vpclmulqdq	$0x11,%xmm0,%xmm1,%xmm1
692	vpxor	%xmm2,%xmm7,%xmm7
693	vpxor	%xmm9,%xmm1,%xmm1
694	vpclmulqdq	$0x10,%xmm15,%xmm4,%xmm4
695	vmovdqu	128-32(%r9),%xmm15
696	vpxor	%xmm5,%xmm4,%xmm4
697
698	vpxor	112(%rsp),%xmm8,%xmm8
699	vpclmulqdq	$0x00,%xmm3,%xmm2,%xmm5
700	vmovdqu	112-32(%r9),%xmm0
701	vpunpckhqdq	%xmm8,%xmm8,%xmm9
702	vpxor	%xmm6,%xmm5,%xmm5
703	vpclmulqdq	$0x11,%xmm3,%xmm2,%xmm2
704	vpxor	%xmm8,%xmm9,%xmm9
705	vpxor	%xmm1,%xmm2,%xmm2
706	vpclmulqdq	$0x00,%xmm15,%xmm7,%xmm7
707	vpxor	%xmm4,%xmm7,%xmm4
708
709	vpclmulqdq	$0x00,%xmm0,%xmm8,%xmm6
710	vmovdqu	0-32(%r9),%xmm3
711	vpunpckhqdq	%xmm14,%xmm14,%xmm1
712	vpclmulqdq	$0x11,%xmm0,%xmm8,%xmm8
713	vpxor	%xmm14,%xmm1,%xmm1
714	vpxor	%xmm5,%xmm6,%xmm5
715	vpclmulqdq	$0x10,%xmm15,%xmm9,%xmm9
716	vmovdqu	32-32(%r9),%xmm15
717	vpxor	%xmm2,%xmm8,%xmm7
718	vpxor	%xmm4,%xmm9,%xmm6
719
720	vmovdqu	16-32(%r9),%xmm0
721	vpxor	%xmm5,%xmm7,%xmm9
722	vpclmulqdq	$0x00,%xmm3,%xmm14,%xmm4
723	vpxor	%xmm9,%xmm6,%xmm6
724	vpunpckhqdq	%xmm13,%xmm13,%xmm2
725	vpclmulqdq	$0x11,%xmm3,%xmm14,%xmm14
726	vpxor	%xmm13,%xmm2,%xmm2
727	vpslldq	$8,%xmm6,%xmm9
728	vpclmulqdq	$0x00,%xmm15,%xmm1,%xmm1
729	vpxor	%xmm9,%xmm5,%xmm8
730	vpsrldq	$8,%xmm6,%xmm6
731	vpxor	%xmm6,%xmm7,%xmm7
732
733	vpclmulqdq	$0x00,%xmm0,%xmm13,%xmm5
734	vmovdqu	48-32(%r9),%xmm3
735	vpxor	%xmm4,%xmm5,%xmm5
736	vpunpckhqdq	%xmm12,%xmm12,%xmm9
737	vpclmulqdq	$0x11,%xmm0,%xmm13,%xmm13
738	vpxor	%xmm12,%xmm9,%xmm9
739	vpxor	%xmm14,%xmm13,%xmm13
740	vpalignr	$8,%xmm8,%xmm8,%xmm14
741	vpclmulqdq	$0x10,%xmm15,%xmm2,%xmm2
742	vmovdqu	80-32(%r9),%xmm15
743	vpxor	%xmm1,%xmm2,%xmm2
744
745	vpclmulqdq	$0x00,%xmm3,%xmm12,%xmm4
746	vmovdqu	64-32(%r9),%xmm0
747	vpxor	%xmm5,%xmm4,%xmm4
748	vpunpckhqdq	%xmm11,%xmm11,%xmm1
749	vpclmulqdq	$0x11,%xmm3,%xmm12,%xmm12
750	vpxor	%xmm11,%xmm1,%xmm1
751	vpxor	%xmm13,%xmm12,%xmm12
752	vxorps	16(%rsp),%xmm7,%xmm7
753	vpclmulqdq	$0x00,%xmm15,%xmm9,%xmm9
754	vpxor	%xmm2,%xmm9,%xmm9
755
756	vpclmulqdq	$0x10,16(%r11),%xmm8,%xmm8
757	vxorps	%xmm14,%xmm8,%xmm8
758
759	vpclmulqdq	$0x00,%xmm0,%xmm11,%xmm5
760	vmovdqu	96-32(%r9),%xmm3
761	vpxor	%xmm4,%xmm5,%xmm5
762	vpunpckhqdq	%xmm10,%xmm10,%xmm2
763	vpclmulqdq	$0x11,%xmm0,%xmm11,%xmm11
764	vpxor	%xmm10,%xmm2,%xmm2
765	vpalignr	$8,%xmm8,%xmm8,%xmm14
766	vpxor	%xmm12,%xmm11,%xmm11
767	vpclmulqdq	$0x10,%xmm15,%xmm1,%xmm1
768	vmovdqu	128-32(%r9),%xmm15
769	vpxor	%xmm9,%xmm1,%xmm1
770
771	vxorps	%xmm7,%xmm14,%xmm14
772	vpclmulqdq	$0x10,16(%r11),%xmm8,%xmm8
773	vxorps	%xmm14,%xmm8,%xmm8
774
775	vpclmulqdq	$0x00,%xmm3,%xmm10,%xmm4
776	vmovdqu	112-32(%r9),%xmm0
777	vpxor	%xmm5,%xmm4,%xmm4
778	vpunpckhqdq	%xmm8,%xmm8,%xmm9
779	vpclmulqdq	$0x11,%xmm3,%xmm10,%xmm10
780	vpxor	%xmm8,%xmm9,%xmm9
781	vpxor	%xmm11,%xmm10,%xmm10
782	vpclmulqdq	$0x00,%xmm15,%xmm2,%xmm2
783	vpxor	%xmm1,%xmm2,%xmm2
784
785	vpclmulqdq	$0x00,%xmm0,%xmm8,%xmm5
786	vpclmulqdq	$0x11,%xmm0,%xmm8,%xmm7
787	vpxor	%xmm4,%xmm5,%xmm5
788	vpclmulqdq	$0x10,%xmm15,%xmm9,%xmm6
789	vpxor	%xmm10,%xmm7,%xmm7
790	vpxor	%xmm2,%xmm6,%xmm6
791
792	vpxor	%xmm5,%xmm7,%xmm4
793	vpxor	%xmm4,%xmm6,%xmm6
794	vpslldq	$8,%xmm6,%xmm1
795	vmovdqu	16(%r11),%xmm3
796	vpsrldq	$8,%xmm6,%xmm6
797	vpxor	%xmm1,%xmm5,%xmm8
798	vpxor	%xmm6,%xmm7,%xmm7
799
800	vpalignr	$8,%xmm8,%xmm8,%xmm2
801	vpclmulqdq	$0x10,%xmm3,%xmm8,%xmm8
802	vpxor	%xmm2,%xmm8,%xmm8
803
804	vpalignr	$8,%xmm8,%xmm8,%xmm2
805	vpclmulqdq	$0x10,%xmm3,%xmm8,%xmm8
806	vpxor	%xmm7,%xmm2,%xmm2
807	vpxor	%xmm2,%xmm8,%xmm8
808	vpshufb	(%r11),%xmm8,%xmm8
809	vmovdqu	%xmm8,-64(%r9)
810
811	vzeroupper
812	movq	-48(%rax),%r15
813.cfi_restore	%r15
814	movq	-40(%rax),%r14
815.cfi_restore	%r14
816	movq	-32(%rax),%r13
817.cfi_restore	%r13
818	movq	-24(%rax),%r12
819.cfi_restore	%r12
820	movq	-16(%rax),%rbp
821.cfi_restore	%rbp
822	movq	-8(%rax),%rbx
823.cfi_restore	%rbx
824	leaq	(%rax),%rsp
825.cfi_def_cfa_register	%rsp
826.Lgcm_enc_abort:
827	movq	%r10,%rax
828	.byte	0xf3,0xc3
829.cfi_endproc
830.size	aesni_gcm_encrypt,.-aesni_gcm_encrypt
831.align	64
832.Lbswap_mask:
833.byte	15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
834.Lpoly:
835.byte	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2
836.Lone_msb:
837.byte	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
838.Ltwo_lsb:
839.byte	2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
840.Lone_lsb:
841.byte	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
842.byte	65,69,83,45,78,73,32,71,67,77,32,109,111,100,117,108,101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
843.align	64
844#endif
845.section	.note.GNU-stack,"",@progbits
846