• 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#include <openssl/asm_base.h>
5
6#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && defined(__APPLE__)
7.section	__DATA,__const
8.p2align	4
9
10
11L$bswap_mask:
12.quad	0x08090a0b0c0d0e0f, 0x0001020304050607
13
14
15
16
17
18
19
20
21L$gfpoly:
22.quad	1, 0xc200000000000000
23
24
25L$gfpoly_and_internal_carrybit:
26.quad	1, 0xc200000000000001
27
28.p2align	5
29
30L$ctr_pattern:
31.quad	0, 0
32.quad	1, 0
33L$inc_2blocks:
34.quad	2, 0
35.quad	2, 0
36
37.text
38.globl	_gcm_init_vpclmulqdq_avx2
39.private_extern _gcm_init_vpclmulqdq_avx2
40
41.p2align	5
42_gcm_init_vpclmulqdq_avx2:
43
44
45_CET_ENDBR
46
47
48
49
50
51	vpshufd	$0x4e,(%rsi),%xmm3
52
53
54
55
56
57	vpshufd	$0xd3,%xmm3,%xmm0
58	vpsrad	$31,%xmm0,%xmm0
59	vpaddq	%xmm3,%xmm3,%xmm3
60	vpand	L$gfpoly_and_internal_carrybit(%rip),%xmm0,%xmm0
61	vpxor	%xmm0,%xmm3,%xmm3
62
63	vbroadcasti128	L$gfpoly(%rip),%ymm6
64
65
66	vpclmulqdq	$0x00,%xmm3,%xmm3,%xmm0
67	vpclmulqdq	$0x01,%xmm3,%xmm3,%xmm1
68	vpclmulqdq	$0x10,%xmm3,%xmm3,%xmm2
69	vpxor	%xmm2,%xmm1,%xmm1
70	vpclmulqdq	$0x01,%xmm0,%xmm6,%xmm2
71	vpshufd	$0x4e,%xmm0,%xmm0
72	vpxor	%xmm0,%xmm1,%xmm1
73	vpxor	%xmm2,%xmm1,%xmm1
74	vpclmulqdq	$0x11,%xmm3,%xmm3,%xmm5
75	vpclmulqdq	$0x01,%xmm1,%xmm6,%xmm0
76	vpshufd	$0x4e,%xmm1,%xmm1
77	vpxor	%xmm1,%xmm5,%xmm5
78	vpxor	%xmm0,%xmm5,%xmm5
79
80
81
82	vinserti128	$1,%xmm3,%ymm5,%ymm3
83	vinserti128	$1,%xmm5,%ymm5,%ymm5
84
85
86	vpclmulqdq	$0x00,%ymm5,%ymm3,%ymm0
87	vpclmulqdq	$0x01,%ymm5,%ymm3,%ymm1
88	vpclmulqdq	$0x10,%ymm5,%ymm3,%ymm2
89	vpxor	%ymm2,%ymm1,%ymm1
90	vpclmulqdq	$0x01,%ymm0,%ymm6,%ymm2
91	vpshufd	$0x4e,%ymm0,%ymm0
92	vpxor	%ymm0,%ymm1,%ymm1
93	vpxor	%ymm2,%ymm1,%ymm1
94	vpclmulqdq	$0x11,%ymm5,%ymm3,%ymm4
95	vpclmulqdq	$0x01,%ymm1,%ymm6,%ymm0
96	vpshufd	$0x4e,%ymm1,%ymm1
97	vpxor	%ymm1,%ymm4,%ymm4
98	vpxor	%ymm0,%ymm4,%ymm4
99
100
101
102	vmovdqu	%ymm3,96(%rdi)
103	vmovdqu	%ymm4,64(%rdi)
104
105
106
107	vpunpcklqdq	%ymm3,%ymm4,%ymm0
108	vpunpckhqdq	%ymm3,%ymm4,%ymm1
109	vpxor	%ymm1,%ymm0,%ymm0
110	vmovdqu	%ymm0,128+32(%rdi)
111
112
113	vpclmulqdq	$0x00,%ymm5,%ymm4,%ymm0
114	vpclmulqdq	$0x01,%ymm5,%ymm4,%ymm1
115	vpclmulqdq	$0x10,%ymm5,%ymm4,%ymm2
116	vpxor	%ymm2,%ymm1,%ymm1
117	vpclmulqdq	$0x01,%ymm0,%ymm6,%ymm2
118	vpshufd	$0x4e,%ymm0,%ymm0
119	vpxor	%ymm0,%ymm1,%ymm1
120	vpxor	%ymm2,%ymm1,%ymm1
121	vpclmulqdq	$0x11,%ymm5,%ymm4,%ymm3
122	vpclmulqdq	$0x01,%ymm1,%ymm6,%ymm0
123	vpshufd	$0x4e,%ymm1,%ymm1
124	vpxor	%ymm1,%ymm3,%ymm3
125	vpxor	%ymm0,%ymm3,%ymm3
126
127	vpclmulqdq	$0x00,%ymm5,%ymm3,%ymm0
128	vpclmulqdq	$0x01,%ymm5,%ymm3,%ymm1
129	vpclmulqdq	$0x10,%ymm5,%ymm3,%ymm2
130	vpxor	%ymm2,%ymm1,%ymm1
131	vpclmulqdq	$0x01,%ymm0,%ymm6,%ymm2
132	vpshufd	$0x4e,%ymm0,%ymm0
133	vpxor	%ymm0,%ymm1,%ymm1
134	vpxor	%ymm2,%ymm1,%ymm1
135	vpclmulqdq	$0x11,%ymm5,%ymm3,%ymm4
136	vpclmulqdq	$0x01,%ymm1,%ymm6,%ymm0
137	vpshufd	$0x4e,%ymm1,%ymm1
138	vpxor	%ymm1,%ymm4,%ymm4
139	vpxor	%ymm0,%ymm4,%ymm4
140
141	vmovdqu	%ymm3,32(%rdi)
142	vmovdqu	%ymm4,0(%rdi)
143
144
145
146	vpunpcklqdq	%ymm3,%ymm4,%ymm0
147	vpunpckhqdq	%ymm3,%ymm4,%ymm1
148	vpxor	%ymm1,%ymm0,%ymm0
149	vmovdqu	%ymm0,128(%rdi)
150
151	vzeroupper
152	ret
153
154
155
156.globl	_gcm_gmult_vpclmulqdq_avx2
157.private_extern _gcm_gmult_vpclmulqdq_avx2
158
159.p2align	5
160_gcm_gmult_vpclmulqdq_avx2:
161
162
163_CET_ENDBR
164
165
166
167	vmovdqu	(%rdi),%xmm0
168	vmovdqu	L$bswap_mask(%rip),%xmm1
169	vmovdqu	128-16(%rsi),%xmm2
170	vmovdqu	L$gfpoly(%rip),%xmm3
171	vpshufb	%xmm1,%xmm0,%xmm0
172
173	vpclmulqdq	$0x00,%xmm2,%xmm0,%xmm4
174	vpclmulqdq	$0x01,%xmm2,%xmm0,%xmm5
175	vpclmulqdq	$0x10,%xmm2,%xmm0,%xmm6
176	vpxor	%xmm6,%xmm5,%xmm5
177	vpclmulqdq	$0x01,%xmm4,%xmm3,%xmm6
178	vpshufd	$0x4e,%xmm4,%xmm4
179	vpxor	%xmm4,%xmm5,%xmm5
180	vpxor	%xmm6,%xmm5,%xmm5
181	vpclmulqdq	$0x11,%xmm2,%xmm0,%xmm0
182	vpclmulqdq	$0x01,%xmm5,%xmm3,%xmm4
183	vpshufd	$0x4e,%xmm5,%xmm5
184	vpxor	%xmm5,%xmm0,%xmm0
185	vpxor	%xmm4,%xmm0,%xmm0
186
187
188	vpshufb	%xmm1,%xmm0,%xmm0
189	vmovdqu	%xmm0,(%rdi)
190	ret
191
192
193
194.globl	_gcm_ghash_vpclmulqdq_avx2
195.private_extern _gcm_ghash_vpclmulqdq_avx2
196
197.p2align	5
198_gcm_ghash_vpclmulqdq_avx2:
199
200
201_CET_ENDBR
202
203
204
205	vbroadcasti128	L$bswap_mask(%rip),%ymm6
206	vmovdqu	(%rdi),%xmm5
207	vpshufb	%xmm6,%xmm5,%xmm5
208	vbroadcasti128	L$gfpoly(%rip),%ymm7
209
210
211	cmpq	$32,%rcx
212	jb	L$ghash_lastblock
213
214	cmpq	$127,%rcx
215	jbe	L$ghash_loop_1x
216
217
218	vmovdqu	128(%rsi),%ymm8
219	vmovdqu	128+32(%rsi),%ymm9
220L$ghash_loop_4x:
221
222	vmovdqu	0(%rdx),%ymm1
223	vpshufb	%ymm6,%ymm1,%ymm1
224	vmovdqu	0(%rsi),%ymm2
225	vpxor	%ymm5,%ymm1,%ymm1
226	vpclmulqdq	$0x00,%ymm2,%ymm1,%ymm3
227	vpclmulqdq	$0x11,%ymm2,%ymm1,%ymm5
228	vpunpckhqdq	%ymm1,%ymm1,%ymm0
229	vpxor	%ymm1,%ymm0,%ymm0
230	vpclmulqdq	$0x00,%ymm8,%ymm0,%ymm4
231
232	vmovdqu	32(%rdx),%ymm1
233	vpshufb	%ymm6,%ymm1,%ymm1
234	vmovdqu	32(%rsi),%ymm2
235	vpclmulqdq	$0x00,%ymm2,%ymm1,%ymm0
236	vpxor	%ymm0,%ymm3,%ymm3
237	vpclmulqdq	$0x11,%ymm2,%ymm1,%ymm0
238	vpxor	%ymm0,%ymm5,%ymm5
239	vpunpckhqdq	%ymm1,%ymm1,%ymm0
240	vpxor	%ymm1,%ymm0,%ymm0
241	vpclmulqdq	$0x10,%ymm8,%ymm0,%ymm0
242	vpxor	%ymm0,%ymm4,%ymm4
243
244	vmovdqu	64(%rdx),%ymm1
245	vpshufb	%ymm6,%ymm1,%ymm1
246	vmovdqu	64(%rsi),%ymm2
247	vpclmulqdq	$0x00,%ymm2,%ymm1,%ymm0
248	vpxor	%ymm0,%ymm3,%ymm3
249	vpclmulqdq	$0x11,%ymm2,%ymm1,%ymm0
250	vpxor	%ymm0,%ymm5,%ymm5
251	vpunpckhqdq	%ymm1,%ymm1,%ymm0
252	vpxor	%ymm1,%ymm0,%ymm0
253	vpclmulqdq	$0x00,%ymm9,%ymm0,%ymm0
254	vpxor	%ymm0,%ymm4,%ymm4
255
256
257	vmovdqu	96(%rdx),%ymm1
258	vpshufb	%ymm6,%ymm1,%ymm1
259	vmovdqu	96(%rsi),%ymm2
260	vpclmulqdq	$0x00,%ymm2,%ymm1,%ymm0
261	vpxor	%ymm0,%ymm3,%ymm3
262	vpclmulqdq	$0x11,%ymm2,%ymm1,%ymm0
263	vpxor	%ymm0,%ymm5,%ymm5
264	vpunpckhqdq	%ymm1,%ymm1,%ymm0
265	vpxor	%ymm1,%ymm0,%ymm0
266	vpclmulqdq	$0x10,%ymm9,%ymm0,%ymm0
267	vpxor	%ymm0,%ymm4,%ymm4
268
269	vpxor	%ymm3,%ymm4,%ymm4
270	vpxor	%ymm5,%ymm4,%ymm4
271
272
273	vbroadcasti128	L$gfpoly(%rip),%ymm2
274	vpclmulqdq	$0x01,%ymm3,%ymm2,%ymm0
275	vpshufd	$0x4e,%ymm3,%ymm3
276	vpxor	%ymm3,%ymm4,%ymm4
277	vpxor	%ymm0,%ymm4,%ymm4
278
279	vpclmulqdq	$0x01,%ymm4,%ymm2,%ymm0
280	vpshufd	$0x4e,%ymm4,%ymm4
281	vpxor	%ymm4,%ymm5,%ymm5
282	vpxor	%ymm0,%ymm5,%ymm5
283	vextracti128	$1,%ymm5,%xmm0
284	vpxor	%xmm0,%xmm5,%xmm5
285
286	subq	$-128,%rdx
287	addq	$-128,%rcx
288	cmpq	$127,%rcx
289	ja	L$ghash_loop_4x
290
291
292	cmpq	$32,%rcx
293	jb	L$ghash_loop_1x_done
294L$ghash_loop_1x:
295	vmovdqu	(%rdx),%ymm0
296	vpshufb	%ymm6,%ymm0,%ymm0
297	vpxor	%ymm0,%ymm5,%ymm5
298	vmovdqu	128-32(%rsi),%ymm0
299	vpclmulqdq	$0x00,%ymm0,%ymm5,%ymm1
300	vpclmulqdq	$0x01,%ymm0,%ymm5,%ymm2
301	vpclmulqdq	$0x10,%ymm0,%ymm5,%ymm3
302	vpxor	%ymm3,%ymm2,%ymm2
303	vpclmulqdq	$0x01,%ymm1,%ymm7,%ymm3
304	vpshufd	$0x4e,%ymm1,%ymm1
305	vpxor	%ymm1,%ymm2,%ymm2
306	vpxor	%ymm3,%ymm2,%ymm2
307	vpclmulqdq	$0x11,%ymm0,%ymm5,%ymm5
308	vpclmulqdq	$0x01,%ymm2,%ymm7,%ymm1
309	vpshufd	$0x4e,%ymm2,%ymm2
310	vpxor	%ymm2,%ymm5,%ymm5
311	vpxor	%ymm1,%ymm5,%ymm5
312
313	vextracti128	$1,%ymm5,%xmm0
314	vpxor	%xmm0,%xmm5,%xmm5
315	addq	$32,%rdx
316	subq	$32,%rcx
317	cmpq	$32,%rcx
318	jae	L$ghash_loop_1x
319L$ghash_loop_1x_done:
320
321
322	vzeroupper
323
324
325L$ghash_lastblock:
326	testq	%rcx,%rcx
327	jz	L$ghash_done
328	vmovdqu	(%rdx),%xmm0
329	vpshufb	%xmm6,%xmm0,%xmm0
330	vpxor	%xmm0,%xmm5,%xmm5
331	vmovdqu	128-16(%rsi),%xmm0
332	vpclmulqdq	$0x00,%xmm0,%xmm5,%xmm1
333	vpclmulqdq	$0x01,%xmm0,%xmm5,%xmm2
334	vpclmulqdq	$0x10,%xmm0,%xmm5,%xmm3
335	vpxor	%xmm3,%xmm2,%xmm2
336	vpclmulqdq	$0x01,%xmm1,%xmm7,%xmm3
337	vpshufd	$0x4e,%xmm1,%xmm1
338	vpxor	%xmm1,%xmm2,%xmm2
339	vpxor	%xmm3,%xmm2,%xmm2
340	vpclmulqdq	$0x11,%xmm0,%xmm5,%xmm5
341	vpclmulqdq	$0x01,%xmm2,%xmm7,%xmm1
342	vpshufd	$0x4e,%xmm2,%xmm2
343	vpxor	%xmm2,%xmm5,%xmm5
344	vpxor	%xmm1,%xmm5,%xmm5
345
346
347L$ghash_done:
348
349	vpshufb	%xmm6,%xmm5,%xmm5
350	vmovdqu	%xmm5,(%rdi)
351	ret
352
353
354
355.globl	_aes_gcm_enc_update_vaes_avx2
356.private_extern _aes_gcm_enc_update_vaes_avx2
357
358.p2align	5
359_aes_gcm_enc_update_vaes_avx2:
360
361
362_CET_ENDBR
363	pushq	%r12
364
365
366	movq	16(%rsp),%r12
367#ifdef BORINGSSL_DISPATCH_TEST
368
369	movb	$1,_BORINGSSL_function_hit+8(%rip)
370#endif
371	vbroadcasti128	L$bswap_mask(%rip),%ymm0
372
373
374
375	vmovdqu	(%r12),%xmm1
376	vpshufb	%xmm0,%xmm1,%xmm1
377	vbroadcasti128	(%r8),%ymm11
378	vpshufb	%ymm0,%ymm11,%ymm11
379
380
381
382	movl	240(%rcx),%r10d
383	leal	-20(,%r10,4),%r10d
384
385
386
387
388	leaq	96(%rcx,%r10,4),%r11
389	vbroadcasti128	(%rcx),%ymm9
390	vbroadcasti128	(%r11),%ymm10
391
392
393	vpaddd	L$ctr_pattern(%rip),%ymm11,%ymm11
394
395
396
397	cmpq	$127,%rdx
398	jbe	L$crypt_loop_4x_done__func1
399
400	vmovdqu	128(%r9),%ymm7
401	vmovdqu	128+32(%r9),%ymm8
402
403
404
405	vmovdqu	L$inc_2blocks(%rip),%ymm2
406	vpshufb	%ymm0,%ymm11,%ymm12
407	vpaddd	%ymm2,%ymm11,%ymm11
408	vpshufb	%ymm0,%ymm11,%ymm13
409	vpaddd	%ymm2,%ymm11,%ymm11
410	vpshufb	%ymm0,%ymm11,%ymm14
411	vpaddd	%ymm2,%ymm11,%ymm11
412	vpshufb	%ymm0,%ymm11,%ymm15
413	vpaddd	%ymm2,%ymm11,%ymm11
414
415
416	vpxor	%ymm9,%ymm12,%ymm12
417	vpxor	%ymm9,%ymm13,%ymm13
418	vpxor	%ymm9,%ymm14,%ymm14
419	vpxor	%ymm9,%ymm15,%ymm15
420
421	leaq	16(%rcx),%rax
422L$vaesenc_loop_first_4_vecs__func1:
423	vbroadcasti128	(%rax),%ymm2
424	vaesenc	%ymm2,%ymm12,%ymm12
425	vaesenc	%ymm2,%ymm13,%ymm13
426	vaesenc	%ymm2,%ymm14,%ymm14
427	vaesenc	%ymm2,%ymm15,%ymm15
428
429	addq	$16,%rax
430	cmpq	%rax,%r11
431	jne	L$vaesenc_loop_first_4_vecs__func1
432	vpxor	0(%rdi),%ymm10,%ymm2
433	vpxor	32(%rdi),%ymm10,%ymm3
434	vpxor	64(%rdi),%ymm10,%ymm5
435	vpxor	96(%rdi),%ymm10,%ymm6
436	vaesenclast	%ymm2,%ymm12,%ymm12
437	vaesenclast	%ymm3,%ymm13,%ymm13
438	vaesenclast	%ymm5,%ymm14,%ymm14
439	vaesenclast	%ymm6,%ymm15,%ymm15
440	vmovdqu	%ymm12,0(%rsi)
441	vmovdqu	%ymm13,32(%rsi)
442	vmovdqu	%ymm14,64(%rsi)
443	vmovdqu	%ymm15,96(%rsi)
444
445	subq	$-128,%rdi
446	addq	$-128,%rdx
447	cmpq	$127,%rdx
448	jbe	L$ghash_last_ciphertext_4x__func1
449.p2align	4
450L$crypt_loop_4x__func1:
451
452
453
454
455	vmovdqu	L$inc_2blocks(%rip),%ymm2
456	vpshufb	%ymm0,%ymm11,%ymm12
457	vpaddd	%ymm2,%ymm11,%ymm11
458	vpshufb	%ymm0,%ymm11,%ymm13
459	vpaddd	%ymm2,%ymm11,%ymm11
460	vpshufb	%ymm0,%ymm11,%ymm14
461	vpaddd	%ymm2,%ymm11,%ymm11
462	vpshufb	%ymm0,%ymm11,%ymm15
463	vpaddd	%ymm2,%ymm11,%ymm11
464
465
466	vpxor	%ymm9,%ymm12,%ymm12
467	vpxor	%ymm9,%ymm13,%ymm13
468	vpxor	%ymm9,%ymm14,%ymm14
469	vpxor	%ymm9,%ymm15,%ymm15
470
471	cmpl	$24,%r10d
472	jl	L$aes128__func1
473	je	L$aes192__func1
474
475	vbroadcasti128	-208(%r11),%ymm2
476	vaesenc	%ymm2,%ymm12,%ymm12
477	vaesenc	%ymm2,%ymm13,%ymm13
478	vaesenc	%ymm2,%ymm14,%ymm14
479	vaesenc	%ymm2,%ymm15,%ymm15
480
481	vbroadcasti128	-192(%r11),%ymm2
482	vaesenc	%ymm2,%ymm12,%ymm12
483	vaesenc	%ymm2,%ymm13,%ymm13
484	vaesenc	%ymm2,%ymm14,%ymm14
485	vaesenc	%ymm2,%ymm15,%ymm15
486
487L$aes192__func1:
488	vbroadcasti128	-176(%r11),%ymm2
489	vaesenc	%ymm2,%ymm12,%ymm12
490	vaesenc	%ymm2,%ymm13,%ymm13
491	vaesenc	%ymm2,%ymm14,%ymm14
492	vaesenc	%ymm2,%ymm15,%ymm15
493
494	vbroadcasti128	-160(%r11),%ymm2
495	vaesenc	%ymm2,%ymm12,%ymm12
496	vaesenc	%ymm2,%ymm13,%ymm13
497	vaesenc	%ymm2,%ymm14,%ymm14
498	vaesenc	%ymm2,%ymm15,%ymm15
499
500L$aes128__func1:
501
502	vmovdqu	0(%rsi),%ymm3
503	vpshufb	%ymm0,%ymm3,%ymm3
504	vmovdqu	0(%r9),%ymm4
505	vpxor	%ymm1,%ymm3,%ymm3
506	vpclmulqdq	$0x00,%ymm4,%ymm3,%ymm5
507	vpclmulqdq	$0x11,%ymm4,%ymm3,%ymm1
508	vpunpckhqdq	%ymm3,%ymm3,%ymm2
509	vpxor	%ymm3,%ymm2,%ymm2
510	vpclmulqdq	$0x00,%ymm7,%ymm2,%ymm6
511
512	vbroadcasti128	-144(%r11),%ymm2
513	vaesenc	%ymm2,%ymm12,%ymm12
514	vaesenc	%ymm2,%ymm13,%ymm13
515	vaesenc	%ymm2,%ymm14,%ymm14
516	vaesenc	%ymm2,%ymm15,%ymm15
517
518
519	vbroadcasti128	-128(%r11),%ymm2
520	vaesenc	%ymm2,%ymm12,%ymm12
521	vaesenc	%ymm2,%ymm13,%ymm13
522	vaesenc	%ymm2,%ymm14,%ymm14
523	vaesenc	%ymm2,%ymm15,%ymm15
524
525
526	vmovdqu	32(%rsi),%ymm3
527	vpshufb	%ymm0,%ymm3,%ymm3
528	vmovdqu	32(%r9),%ymm4
529	vpclmulqdq	$0x00,%ymm4,%ymm3,%ymm2
530	vpxor	%ymm2,%ymm5,%ymm5
531	vpclmulqdq	$0x11,%ymm4,%ymm3,%ymm2
532	vpxor	%ymm2,%ymm1,%ymm1
533	vpunpckhqdq	%ymm3,%ymm3,%ymm2
534	vpxor	%ymm3,%ymm2,%ymm2
535	vpclmulqdq	$0x10,%ymm7,%ymm2,%ymm2
536	vpxor	%ymm2,%ymm6,%ymm6
537
538	vbroadcasti128	-112(%r11),%ymm2
539	vaesenc	%ymm2,%ymm12,%ymm12
540	vaesenc	%ymm2,%ymm13,%ymm13
541	vaesenc	%ymm2,%ymm14,%ymm14
542	vaesenc	%ymm2,%ymm15,%ymm15
543
544
545	vmovdqu	64(%rsi),%ymm3
546	vpshufb	%ymm0,%ymm3,%ymm3
547	vmovdqu	64(%r9),%ymm4
548
549	vbroadcasti128	-96(%r11),%ymm2
550	vaesenc	%ymm2,%ymm12,%ymm12
551	vaesenc	%ymm2,%ymm13,%ymm13
552	vaesenc	%ymm2,%ymm14,%ymm14
553	vaesenc	%ymm2,%ymm15,%ymm15
554
555	vpclmulqdq	$0x00,%ymm4,%ymm3,%ymm2
556	vpxor	%ymm2,%ymm5,%ymm5
557	vpclmulqdq	$0x11,%ymm4,%ymm3,%ymm2
558	vpxor	%ymm2,%ymm1,%ymm1
559
560	vbroadcasti128	-80(%r11),%ymm2
561	vaesenc	%ymm2,%ymm12,%ymm12
562	vaesenc	%ymm2,%ymm13,%ymm13
563	vaesenc	%ymm2,%ymm14,%ymm14
564	vaesenc	%ymm2,%ymm15,%ymm15
565
566	vpunpckhqdq	%ymm3,%ymm3,%ymm2
567	vpxor	%ymm3,%ymm2,%ymm2
568	vpclmulqdq	$0x00,%ymm8,%ymm2,%ymm2
569	vpxor	%ymm2,%ymm6,%ymm6
570
571
572	vmovdqu	96(%rsi),%ymm3
573	vpshufb	%ymm0,%ymm3,%ymm3
574
575	vbroadcasti128	-64(%r11),%ymm2
576	vaesenc	%ymm2,%ymm12,%ymm12
577	vaesenc	%ymm2,%ymm13,%ymm13
578	vaesenc	%ymm2,%ymm14,%ymm14
579	vaesenc	%ymm2,%ymm15,%ymm15
580
581	vmovdqu	96(%r9),%ymm4
582	vpclmulqdq	$0x00,%ymm4,%ymm3,%ymm2
583	vpxor	%ymm2,%ymm5,%ymm5
584	vpclmulqdq	$0x11,%ymm4,%ymm3,%ymm2
585	vpxor	%ymm2,%ymm1,%ymm1
586	vpunpckhqdq	%ymm3,%ymm3,%ymm2
587	vpxor	%ymm3,%ymm2,%ymm2
588	vpclmulqdq	$0x10,%ymm8,%ymm2,%ymm2
589	vpxor	%ymm2,%ymm6,%ymm6
590
591	vbroadcasti128	-48(%r11),%ymm2
592	vaesenc	%ymm2,%ymm12,%ymm12
593	vaesenc	%ymm2,%ymm13,%ymm13
594	vaesenc	%ymm2,%ymm14,%ymm14
595	vaesenc	%ymm2,%ymm15,%ymm15
596
597
598	vpxor	%ymm5,%ymm6,%ymm6
599	vpxor	%ymm1,%ymm6,%ymm6
600
601
602	vbroadcasti128	L$gfpoly(%rip),%ymm4
603	vpclmulqdq	$0x01,%ymm5,%ymm4,%ymm2
604	vpshufd	$0x4e,%ymm5,%ymm5
605	vpxor	%ymm5,%ymm6,%ymm6
606	vpxor	%ymm2,%ymm6,%ymm6
607
608	vbroadcasti128	-32(%r11),%ymm2
609	vaesenc	%ymm2,%ymm12,%ymm12
610	vaesenc	%ymm2,%ymm13,%ymm13
611	vaesenc	%ymm2,%ymm14,%ymm14
612	vaesenc	%ymm2,%ymm15,%ymm15
613
614
615	vpclmulqdq	$0x01,%ymm6,%ymm4,%ymm2
616	vpshufd	$0x4e,%ymm6,%ymm6
617	vpxor	%ymm6,%ymm1,%ymm1
618	vpxor	%ymm2,%ymm1,%ymm1
619
620	vbroadcasti128	-16(%r11),%ymm2
621	vaesenc	%ymm2,%ymm12,%ymm12
622	vaesenc	%ymm2,%ymm13,%ymm13
623	vaesenc	%ymm2,%ymm14,%ymm14
624	vaesenc	%ymm2,%ymm15,%ymm15
625
626	vextracti128	$1,%ymm1,%xmm2
627	vpxor	%xmm2,%xmm1,%xmm1
628
629
630	subq	$-128,%rsi
631	vpxor	0(%rdi),%ymm10,%ymm2
632	vpxor	32(%rdi),%ymm10,%ymm3
633	vpxor	64(%rdi),%ymm10,%ymm5
634	vpxor	96(%rdi),%ymm10,%ymm6
635	vaesenclast	%ymm2,%ymm12,%ymm12
636	vaesenclast	%ymm3,%ymm13,%ymm13
637	vaesenclast	%ymm5,%ymm14,%ymm14
638	vaesenclast	%ymm6,%ymm15,%ymm15
639	vmovdqu	%ymm12,0(%rsi)
640	vmovdqu	%ymm13,32(%rsi)
641	vmovdqu	%ymm14,64(%rsi)
642	vmovdqu	%ymm15,96(%rsi)
643
644	subq	$-128,%rdi
645
646	addq	$-128,%rdx
647	cmpq	$127,%rdx
648	ja	L$crypt_loop_4x__func1
649L$ghash_last_ciphertext_4x__func1:
650
651	vmovdqu	0(%rsi),%ymm3
652	vpshufb	%ymm0,%ymm3,%ymm3
653	vmovdqu	0(%r9),%ymm4
654	vpxor	%ymm1,%ymm3,%ymm3
655	vpclmulqdq	$0x00,%ymm4,%ymm3,%ymm5
656	vpclmulqdq	$0x11,%ymm4,%ymm3,%ymm1
657	vpunpckhqdq	%ymm3,%ymm3,%ymm2
658	vpxor	%ymm3,%ymm2,%ymm2
659	vpclmulqdq	$0x00,%ymm7,%ymm2,%ymm6
660
661	vmovdqu	32(%rsi),%ymm3
662	vpshufb	%ymm0,%ymm3,%ymm3
663	vmovdqu	32(%r9),%ymm4
664	vpclmulqdq	$0x00,%ymm4,%ymm3,%ymm2
665	vpxor	%ymm2,%ymm5,%ymm5
666	vpclmulqdq	$0x11,%ymm4,%ymm3,%ymm2
667	vpxor	%ymm2,%ymm1,%ymm1
668	vpunpckhqdq	%ymm3,%ymm3,%ymm2
669	vpxor	%ymm3,%ymm2,%ymm2
670	vpclmulqdq	$0x10,%ymm7,%ymm2,%ymm2
671	vpxor	%ymm2,%ymm6,%ymm6
672
673	vmovdqu	64(%rsi),%ymm3
674	vpshufb	%ymm0,%ymm3,%ymm3
675	vmovdqu	64(%r9),%ymm4
676	vpclmulqdq	$0x00,%ymm4,%ymm3,%ymm2
677	vpxor	%ymm2,%ymm5,%ymm5
678	vpclmulqdq	$0x11,%ymm4,%ymm3,%ymm2
679	vpxor	%ymm2,%ymm1,%ymm1
680	vpunpckhqdq	%ymm3,%ymm3,%ymm2
681	vpxor	%ymm3,%ymm2,%ymm2
682	vpclmulqdq	$0x00,%ymm8,%ymm2,%ymm2
683	vpxor	%ymm2,%ymm6,%ymm6
684
685
686	vmovdqu	96(%rsi),%ymm3
687	vpshufb	%ymm0,%ymm3,%ymm3
688	vmovdqu	96(%r9),%ymm4
689	vpclmulqdq	$0x00,%ymm4,%ymm3,%ymm2
690	vpxor	%ymm2,%ymm5,%ymm5
691	vpclmulqdq	$0x11,%ymm4,%ymm3,%ymm2
692	vpxor	%ymm2,%ymm1,%ymm1
693	vpunpckhqdq	%ymm3,%ymm3,%ymm2
694	vpxor	%ymm3,%ymm2,%ymm2
695	vpclmulqdq	$0x10,%ymm8,%ymm2,%ymm2
696	vpxor	%ymm2,%ymm6,%ymm6
697
698	vpxor	%ymm5,%ymm6,%ymm6
699	vpxor	%ymm1,%ymm6,%ymm6
700
701
702	vbroadcasti128	L$gfpoly(%rip),%ymm4
703	vpclmulqdq	$0x01,%ymm5,%ymm4,%ymm2
704	vpshufd	$0x4e,%ymm5,%ymm5
705	vpxor	%ymm5,%ymm6,%ymm6
706	vpxor	%ymm2,%ymm6,%ymm6
707
708	vpclmulqdq	$0x01,%ymm6,%ymm4,%ymm2
709	vpshufd	$0x4e,%ymm6,%ymm6
710	vpxor	%ymm6,%ymm1,%ymm1
711	vpxor	%ymm2,%ymm1,%ymm1
712	vextracti128	$1,%ymm1,%xmm2
713	vpxor	%xmm2,%xmm1,%xmm1
714
715	subq	$-128,%rsi
716L$crypt_loop_4x_done__func1:
717
718	testq	%rdx,%rdx
719	jz	L$done__func1
720
721
722
723
724
725	leaq	128(%r9),%r8
726	subq	%rdx,%r8
727
728
729	vpxor	%xmm5,%xmm5,%xmm5
730	vpxor	%xmm6,%xmm6,%xmm6
731	vpxor	%xmm7,%xmm7,%xmm7
732
733	cmpq	$64,%rdx
734	jb	L$lessthan64bytes__func1
735
736
737	vpshufb	%ymm0,%ymm11,%ymm12
738	vpaddd	L$inc_2blocks(%rip),%ymm11,%ymm11
739	vpshufb	%ymm0,%ymm11,%ymm13
740	vpaddd	L$inc_2blocks(%rip),%ymm11,%ymm11
741	vpxor	%ymm9,%ymm12,%ymm12
742	vpxor	%ymm9,%ymm13,%ymm13
743	leaq	16(%rcx),%rax
744L$vaesenc_loop_tail_1__func1:
745	vbroadcasti128	(%rax),%ymm2
746	vaesenc	%ymm2,%ymm12,%ymm12
747	vaesenc	%ymm2,%ymm13,%ymm13
748	addq	$16,%rax
749	cmpq	%rax,%r11
750	jne	L$vaesenc_loop_tail_1__func1
751	vaesenclast	%ymm10,%ymm12,%ymm12
752	vaesenclast	%ymm10,%ymm13,%ymm13
753
754
755	vmovdqu	0(%rdi),%ymm2
756	vmovdqu	32(%rdi),%ymm3
757	vpxor	%ymm2,%ymm12,%ymm12
758	vpxor	%ymm3,%ymm13,%ymm13
759	vmovdqu	%ymm12,0(%rsi)
760	vmovdqu	%ymm13,32(%rsi)
761
762
763	vpshufb	%ymm0,%ymm12,%ymm12
764	vpshufb	%ymm0,%ymm13,%ymm13
765	vpxor	%ymm1,%ymm12,%ymm12
766	vmovdqu	(%r8),%ymm2
767	vmovdqu	32(%r8),%ymm3
768	vpclmulqdq	$0x00,%ymm2,%ymm12,%ymm5
769	vpclmulqdq	$0x01,%ymm2,%ymm12,%ymm6
770	vpclmulqdq	$0x10,%ymm2,%ymm12,%ymm4
771	vpxor	%ymm4,%ymm6,%ymm6
772	vpclmulqdq	$0x11,%ymm2,%ymm12,%ymm7
773	vpclmulqdq	$0x00,%ymm3,%ymm13,%ymm4
774	vpxor	%ymm4,%ymm5,%ymm5
775	vpclmulqdq	$0x01,%ymm3,%ymm13,%ymm4
776	vpxor	%ymm4,%ymm6,%ymm6
777	vpclmulqdq	$0x10,%ymm3,%ymm13,%ymm4
778	vpxor	%ymm4,%ymm6,%ymm6
779	vpclmulqdq	$0x11,%ymm3,%ymm13,%ymm4
780	vpxor	%ymm4,%ymm7,%ymm7
781
782	addq	$64,%r8
783	addq	$64,%rdi
784	addq	$64,%rsi
785	subq	$64,%rdx
786	jz	L$reduce__func1
787
788	vpxor	%xmm1,%xmm1,%xmm1
789
790
791L$lessthan64bytes__func1:
792	vpshufb	%ymm0,%ymm11,%ymm12
793	vpaddd	L$inc_2blocks(%rip),%ymm11,%ymm11
794	vpshufb	%ymm0,%ymm11,%ymm13
795	vpxor	%ymm9,%ymm12,%ymm12
796	vpxor	%ymm9,%ymm13,%ymm13
797	leaq	16(%rcx),%rax
798L$vaesenc_loop_tail_2__func1:
799	vbroadcasti128	(%rax),%ymm2
800	vaesenc	%ymm2,%ymm12,%ymm12
801	vaesenc	%ymm2,%ymm13,%ymm13
802	addq	$16,%rax
803	cmpq	%rax,%r11
804	jne	L$vaesenc_loop_tail_2__func1
805	vaesenclast	%ymm10,%ymm12,%ymm12
806	vaesenclast	%ymm10,%ymm13,%ymm13
807
808
809
810
811	cmpq	$32,%rdx
812	jb	L$xor_one_block__func1
813	je	L$xor_two_blocks__func1
814
815L$xor_three_blocks__func1:
816	vmovdqu	0(%rdi),%ymm2
817	vmovdqu	32(%rdi),%xmm3
818	vpxor	%ymm2,%ymm12,%ymm12
819	vpxor	%xmm3,%xmm13,%xmm13
820	vmovdqu	%ymm12,0(%rsi)
821	vmovdqu	%xmm13,32(%rsi)
822
823	vpshufb	%ymm0,%ymm12,%ymm12
824	vpshufb	%xmm0,%xmm13,%xmm13
825	vpxor	%ymm1,%ymm12,%ymm12
826	vmovdqu	(%r8),%ymm2
827	vmovdqu	32(%r8),%xmm3
828	vpclmulqdq	$0x00,%xmm3,%xmm13,%xmm4
829	vpxor	%ymm4,%ymm5,%ymm5
830	vpclmulqdq	$0x01,%xmm3,%xmm13,%xmm4
831	vpxor	%ymm4,%ymm6,%ymm6
832	vpclmulqdq	$0x10,%xmm3,%xmm13,%xmm4
833	vpxor	%ymm4,%ymm6,%ymm6
834	vpclmulqdq	$0x11,%xmm3,%xmm13,%xmm4
835	vpxor	%ymm4,%ymm7,%ymm7
836	jmp	L$ghash_mul_one_vec_unreduced__func1
837
838L$xor_two_blocks__func1:
839	vmovdqu	(%rdi),%ymm2
840	vpxor	%ymm2,%ymm12,%ymm12
841	vmovdqu	%ymm12,(%rsi)
842	vpshufb	%ymm0,%ymm12,%ymm12
843	vpxor	%ymm1,%ymm12,%ymm12
844	vmovdqu	(%r8),%ymm2
845	jmp	L$ghash_mul_one_vec_unreduced__func1
846
847L$xor_one_block__func1:
848	vmovdqu	(%rdi),%xmm2
849	vpxor	%xmm2,%xmm12,%xmm12
850	vmovdqu	%xmm12,(%rsi)
851	vpshufb	%xmm0,%xmm12,%xmm12
852	vpxor	%xmm1,%xmm12,%xmm12
853	vmovdqu	(%r8),%xmm2
854
855L$ghash_mul_one_vec_unreduced__func1:
856	vpclmulqdq	$0x00,%ymm2,%ymm12,%ymm4
857	vpxor	%ymm4,%ymm5,%ymm5
858	vpclmulqdq	$0x01,%ymm2,%ymm12,%ymm4
859	vpxor	%ymm4,%ymm6,%ymm6
860	vpclmulqdq	$0x10,%ymm2,%ymm12,%ymm4
861	vpxor	%ymm4,%ymm6,%ymm6
862	vpclmulqdq	$0x11,%ymm2,%ymm12,%ymm4
863	vpxor	%ymm4,%ymm7,%ymm7
864
865L$reduce__func1:
866
867	vbroadcasti128	L$gfpoly(%rip),%ymm2
868	vpclmulqdq	$0x01,%ymm5,%ymm2,%ymm3
869	vpshufd	$0x4e,%ymm5,%ymm5
870	vpxor	%ymm5,%ymm6,%ymm6
871	vpxor	%ymm3,%ymm6,%ymm6
872	vpclmulqdq	$0x01,%ymm6,%ymm2,%ymm3
873	vpshufd	$0x4e,%ymm6,%ymm6
874	vpxor	%ymm6,%ymm7,%ymm7
875	vpxor	%ymm3,%ymm7,%ymm7
876	vextracti128	$1,%ymm7,%xmm1
877	vpxor	%xmm7,%xmm1,%xmm1
878
879L$done__func1:
880
881	vpshufb	%xmm0,%xmm1,%xmm1
882	vmovdqu	%xmm1,(%r12)
883
884	vzeroupper
885	popq	%r12
886
887	ret
888
889
890
891.globl	_aes_gcm_dec_update_vaes_avx2
892.private_extern _aes_gcm_dec_update_vaes_avx2
893
894.p2align	5
895_aes_gcm_dec_update_vaes_avx2:
896
897
898_CET_ENDBR
899	pushq	%r12
900
901
902	movq	16(%rsp),%r12
903	vbroadcasti128	L$bswap_mask(%rip),%ymm0
904
905
906
907	vmovdqu	(%r12),%xmm1
908	vpshufb	%xmm0,%xmm1,%xmm1
909	vbroadcasti128	(%r8),%ymm11
910	vpshufb	%ymm0,%ymm11,%ymm11
911
912
913
914	movl	240(%rcx),%r10d
915	leal	-20(,%r10,4),%r10d
916
917
918
919
920	leaq	96(%rcx,%r10,4),%r11
921	vbroadcasti128	(%rcx),%ymm9
922	vbroadcasti128	(%r11),%ymm10
923
924
925	vpaddd	L$ctr_pattern(%rip),%ymm11,%ymm11
926
927
928
929	cmpq	$127,%rdx
930	jbe	L$crypt_loop_4x_done__func2
931
932	vmovdqu	128(%r9),%ymm7
933	vmovdqu	128+32(%r9),%ymm8
934.p2align	4
935L$crypt_loop_4x__func2:
936
937
938
939
940	vmovdqu	L$inc_2blocks(%rip),%ymm2
941	vpshufb	%ymm0,%ymm11,%ymm12
942	vpaddd	%ymm2,%ymm11,%ymm11
943	vpshufb	%ymm0,%ymm11,%ymm13
944	vpaddd	%ymm2,%ymm11,%ymm11
945	vpshufb	%ymm0,%ymm11,%ymm14
946	vpaddd	%ymm2,%ymm11,%ymm11
947	vpshufb	%ymm0,%ymm11,%ymm15
948	vpaddd	%ymm2,%ymm11,%ymm11
949
950
951	vpxor	%ymm9,%ymm12,%ymm12
952	vpxor	%ymm9,%ymm13,%ymm13
953	vpxor	%ymm9,%ymm14,%ymm14
954	vpxor	%ymm9,%ymm15,%ymm15
955
956	cmpl	$24,%r10d
957	jl	L$aes128__func2
958	je	L$aes192__func2
959
960	vbroadcasti128	-208(%r11),%ymm2
961	vaesenc	%ymm2,%ymm12,%ymm12
962	vaesenc	%ymm2,%ymm13,%ymm13
963	vaesenc	%ymm2,%ymm14,%ymm14
964	vaesenc	%ymm2,%ymm15,%ymm15
965
966	vbroadcasti128	-192(%r11),%ymm2
967	vaesenc	%ymm2,%ymm12,%ymm12
968	vaesenc	%ymm2,%ymm13,%ymm13
969	vaesenc	%ymm2,%ymm14,%ymm14
970	vaesenc	%ymm2,%ymm15,%ymm15
971
972L$aes192__func2:
973	vbroadcasti128	-176(%r11),%ymm2
974	vaesenc	%ymm2,%ymm12,%ymm12
975	vaesenc	%ymm2,%ymm13,%ymm13
976	vaesenc	%ymm2,%ymm14,%ymm14
977	vaesenc	%ymm2,%ymm15,%ymm15
978
979	vbroadcasti128	-160(%r11),%ymm2
980	vaesenc	%ymm2,%ymm12,%ymm12
981	vaesenc	%ymm2,%ymm13,%ymm13
982	vaesenc	%ymm2,%ymm14,%ymm14
983	vaesenc	%ymm2,%ymm15,%ymm15
984
985L$aes128__func2:
986
987	vmovdqu	0(%rdi),%ymm3
988	vpshufb	%ymm0,%ymm3,%ymm3
989	vmovdqu	0(%r9),%ymm4
990	vpxor	%ymm1,%ymm3,%ymm3
991	vpclmulqdq	$0x00,%ymm4,%ymm3,%ymm5
992	vpclmulqdq	$0x11,%ymm4,%ymm3,%ymm1
993	vpunpckhqdq	%ymm3,%ymm3,%ymm2
994	vpxor	%ymm3,%ymm2,%ymm2
995	vpclmulqdq	$0x00,%ymm7,%ymm2,%ymm6
996
997	vbroadcasti128	-144(%r11),%ymm2
998	vaesenc	%ymm2,%ymm12,%ymm12
999	vaesenc	%ymm2,%ymm13,%ymm13
1000	vaesenc	%ymm2,%ymm14,%ymm14
1001	vaesenc	%ymm2,%ymm15,%ymm15
1002
1003
1004	vbroadcasti128	-128(%r11),%ymm2
1005	vaesenc	%ymm2,%ymm12,%ymm12
1006	vaesenc	%ymm2,%ymm13,%ymm13
1007	vaesenc	%ymm2,%ymm14,%ymm14
1008	vaesenc	%ymm2,%ymm15,%ymm15
1009
1010
1011	vmovdqu	32(%rdi),%ymm3
1012	vpshufb	%ymm0,%ymm3,%ymm3
1013	vmovdqu	32(%r9),%ymm4
1014	vpclmulqdq	$0x00,%ymm4,%ymm3,%ymm2
1015	vpxor	%ymm2,%ymm5,%ymm5
1016	vpclmulqdq	$0x11,%ymm4,%ymm3,%ymm2
1017	vpxor	%ymm2,%ymm1,%ymm1
1018	vpunpckhqdq	%ymm3,%ymm3,%ymm2
1019	vpxor	%ymm3,%ymm2,%ymm2
1020	vpclmulqdq	$0x10,%ymm7,%ymm2,%ymm2
1021	vpxor	%ymm2,%ymm6,%ymm6
1022
1023	vbroadcasti128	-112(%r11),%ymm2
1024	vaesenc	%ymm2,%ymm12,%ymm12
1025	vaesenc	%ymm2,%ymm13,%ymm13
1026	vaesenc	%ymm2,%ymm14,%ymm14
1027	vaesenc	%ymm2,%ymm15,%ymm15
1028
1029
1030	vmovdqu	64(%rdi),%ymm3
1031	vpshufb	%ymm0,%ymm3,%ymm3
1032	vmovdqu	64(%r9),%ymm4
1033
1034	vbroadcasti128	-96(%r11),%ymm2
1035	vaesenc	%ymm2,%ymm12,%ymm12
1036	vaesenc	%ymm2,%ymm13,%ymm13
1037	vaesenc	%ymm2,%ymm14,%ymm14
1038	vaesenc	%ymm2,%ymm15,%ymm15
1039
1040	vpclmulqdq	$0x00,%ymm4,%ymm3,%ymm2
1041	vpxor	%ymm2,%ymm5,%ymm5
1042	vpclmulqdq	$0x11,%ymm4,%ymm3,%ymm2
1043	vpxor	%ymm2,%ymm1,%ymm1
1044
1045	vbroadcasti128	-80(%r11),%ymm2
1046	vaesenc	%ymm2,%ymm12,%ymm12
1047	vaesenc	%ymm2,%ymm13,%ymm13
1048	vaesenc	%ymm2,%ymm14,%ymm14
1049	vaesenc	%ymm2,%ymm15,%ymm15
1050
1051	vpunpckhqdq	%ymm3,%ymm3,%ymm2
1052	vpxor	%ymm3,%ymm2,%ymm2
1053	vpclmulqdq	$0x00,%ymm8,%ymm2,%ymm2
1054	vpxor	%ymm2,%ymm6,%ymm6
1055
1056
1057	vmovdqu	96(%rdi),%ymm3
1058	vpshufb	%ymm0,%ymm3,%ymm3
1059
1060	vbroadcasti128	-64(%r11),%ymm2
1061	vaesenc	%ymm2,%ymm12,%ymm12
1062	vaesenc	%ymm2,%ymm13,%ymm13
1063	vaesenc	%ymm2,%ymm14,%ymm14
1064	vaesenc	%ymm2,%ymm15,%ymm15
1065
1066	vmovdqu	96(%r9),%ymm4
1067	vpclmulqdq	$0x00,%ymm4,%ymm3,%ymm2
1068	vpxor	%ymm2,%ymm5,%ymm5
1069	vpclmulqdq	$0x11,%ymm4,%ymm3,%ymm2
1070	vpxor	%ymm2,%ymm1,%ymm1
1071	vpunpckhqdq	%ymm3,%ymm3,%ymm2
1072	vpxor	%ymm3,%ymm2,%ymm2
1073	vpclmulqdq	$0x10,%ymm8,%ymm2,%ymm2
1074	vpxor	%ymm2,%ymm6,%ymm6
1075
1076	vbroadcasti128	-48(%r11),%ymm2
1077	vaesenc	%ymm2,%ymm12,%ymm12
1078	vaesenc	%ymm2,%ymm13,%ymm13
1079	vaesenc	%ymm2,%ymm14,%ymm14
1080	vaesenc	%ymm2,%ymm15,%ymm15
1081
1082
1083	vpxor	%ymm5,%ymm6,%ymm6
1084	vpxor	%ymm1,%ymm6,%ymm6
1085
1086
1087	vbroadcasti128	L$gfpoly(%rip),%ymm4
1088	vpclmulqdq	$0x01,%ymm5,%ymm4,%ymm2
1089	vpshufd	$0x4e,%ymm5,%ymm5
1090	vpxor	%ymm5,%ymm6,%ymm6
1091	vpxor	%ymm2,%ymm6,%ymm6
1092
1093	vbroadcasti128	-32(%r11),%ymm2
1094	vaesenc	%ymm2,%ymm12,%ymm12
1095	vaesenc	%ymm2,%ymm13,%ymm13
1096	vaesenc	%ymm2,%ymm14,%ymm14
1097	vaesenc	%ymm2,%ymm15,%ymm15
1098
1099
1100	vpclmulqdq	$0x01,%ymm6,%ymm4,%ymm2
1101	vpshufd	$0x4e,%ymm6,%ymm6
1102	vpxor	%ymm6,%ymm1,%ymm1
1103	vpxor	%ymm2,%ymm1,%ymm1
1104
1105	vbroadcasti128	-16(%r11),%ymm2
1106	vaesenc	%ymm2,%ymm12,%ymm12
1107	vaesenc	%ymm2,%ymm13,%ymm13
1108	vaesenc	%ymm2,%ymm14,%ymm14
1109	vaesenc	%ymm2,%ymm15,%ymm15
1110
1111	vextracti128	$1,%ymm1,%xmm2
1112	vpxor	%xmm2,%xmm1,%xmm1
1113
1114
1115
1116	vpxor	0(%rdi),%ymm10,%ymm2
1117	vpxor	32(%rdi),%ymm10,%ymm3
1118	vpxor	64(%rdi),%ymm10,%ymm5
1119	vpxor	96(%rdi),%ymm10,%ymm6
1120	vaesenclast	%ymm2,%ymm12,%ymm12
1121	vaesenclast	%ymm3,%ymm13,%ymm13
1122	vaesenclast	%ymm5,%ymm14,%ymm14
1123	vaesenclast	%ymm6,%ymm15,%ymm15
1124	vmovdqu	%ymm12,0(%rsi)
1125	vmovdqu	%ymm13,32(%rsi)
1126	vmovdqu	%ymm14,64(%rsi)
1127	vmovdqu	%ymm15,96(%rsi)
1128
1129	subq	$-128,%rdi
1130	subq	$-128,%rsi
1131	addq	$-128,%rdx
1132	cmpq	$127,%rdx
1133	ja	L$crypt_loop_4x__func2
1134L$crypt_loop_4x_done__func2:
1135
1136	testq	%rdx,%rdx
1137	jz	L$done__func2
1138
1139
1140
1141
1142
1143	leaq	128(%r9),%r8
1144	subq	%rdx,%r8
1145
1146
1147	vpxor	%xmm5,%xmm5,%xmm5
1148	vpxor	%xmm6,%xmm6,%xmm6
1149	vpxor	%xmm7,%xmm7,%xmm7
1150
1151	cmpq	$64,%rdx
1152	jb	L$lessthan64bytes__func2
1153
1154
1155	vpshufb	%ymm0,%ymm11,%ymm12
1156	vpaddd	L$inc_2blocks(%rip),%ymm11,%ymm11
1157	vpshufb	%ymm0,%ymm11,%ymm13
1158	vpaddd	L$inc_2blocks(%rip),%ymm11,%ymm11
1159	vpxor	%ymm9,%ymm12,%ymm12
1160	vpxor	%ymm9,%ymm13,%ymm13
1161	leaq	16(%rcx),%rax
1162L$vaesenc_loop_tail_1__func2:
1163	vbroadcasti128	(%rax),%ymm2
1164	vaesenc	%ymm2,%ymm12,%ymm12
1165	vaesenc	%ymm2,%ymm13,%ymm13
1166	addq	$16,%rax
1167	cmpq	%rax,%r11
1168	jne	L$vaesenc_loop_tail_1__func2
1169	vaesenclast	%ymm10,%ymm12,%ymm12
1170	vaesenclast	%ymm10,%ymm13,%ymm13
1171
1172
1173	vmovdqu	0(%rdi),%ymm2
1174	vmovdqu	32(%rdi),%ymm3
1175	vpxor	%ymm2,%ymm12,%ymm12
1176	vpxor	%ymm3,%ymm13,%ymm13
1177	vmovdqu	%ymm12,0(%rsi)
1178	vmovdqu	%ymm13,32(%rsi)
1179
1180
1181	vpshufb	%ymm0,%ymm2,%ymm12
1182	vpshufb	%ymm0,%ymm3,%ymm13
1183	vpxor	%ymm1,%ymm12,%ymm12
1184	vmovdqu	(%r8),%ymm2
1185	vmovdqu	32(%r8),%ymm3
1186	vpclmulqdq	$0x00,%ymm2,%ymm12,%ymm5
1187	vpclmulqdq	$0x01,%ymm2,%ymm12,%ymm6
1188	vpclmulqdq	$0x10,%ymm2,%ymm12,%ymm4
1189	vpxor	%ymm4,%ymm6,%ymm6
1190	vpclmulqdq	$0x11,%ymm2,%ymm12,%ymm7
1191	vpclmulqdq	$0x00,%ymm3,%ymm13,%ymm4
1192	vpxor	%ymm4,%ymm5,%ymm5
1193	vpclmulqdq	$0x01,%ymm3,%ymm13,%ymm4
1194	vpxor	%ymm4,%ymm6,%ymm6
1195	vpclmulqdq	$0x10,%ymm3,%ymm13,%ymm4
1196	vpxor	%ymm4,%ymm6,%ymm6
1197	vpclmulqdq	$0x11,%ymm3,%ymm13,%ymm4
1198	vpxor	%ymm4,%ymm7,%ymm7
1199
1200	addq	$64,%r8
1201	addq	$64,%rdi
1202	addq	$64,%rsi
1203	subq	$64,%rdx
1204	jz	L$reduce__func2
1205
1206	vpxor	%xmm1,%xmm1,%xmm1
1207
1208
1209L$lessthan64bytes__func2:
1210	vpshufb	%ymm0,%ymm11,%ymm12
1211	vpaddd	L$inc_2blocks(%rip),%ymm11,%ymm11
1212	vpshufb	%ymm0,%ymm11,%ymm13
1213	vpxor	%ymm9,%ymm12,%ymm12
1214	vpxor	%ymm9,%ymm13,%ymm13
1215	leaq	16(%rcx),%rax
1216L$vaesenc_loop_tail_2__func2:
1217	vbroadcasti128	(%rax),%ymm2
1218	vaesenc	%ymm2,%ymm12,%ymm12
1219	vaesenc	%ymm2,%ymm13,%ymm13
1220	addq	$16,%rax
1221	cmpq	%rax,%r11
1222	jne	L$vaesenc_loop_tail_2__func2
1223	vaesenclast	%ymm10,%ymm12,%ymm12
1224	vaesenclast	%ymm10,%ymm13,%ymm13
1225
1226
1227
1228
1229	cmpq	$32,%rdx
1230	jb	L$xor_one_block__func2
1231	je	L$xor_two_blocks__func2
1232
1233L$xor_three_blocks__func2:
1234	vmovdqu	0(%rdi),%ymm2
1235	vmovdqu	32(%rdi),%xmm3
1236	vpxor	%ymm2,%ymm12,%ymm12
1237	vpxor	%xmm3,%xmm13,%xmm13
1238	vmovdqu	%ymm12,0(%rsi)
1239	vmovdqu	%xmm13,32(%rsi)
1240
1241	vpshufb	%ymm0,%ymm2,%ymm12
1242	vpshufb	%xmm0,%xmm3,%xmm13
1243	vpxor	%ymm1,%ymm12,%ymm12
1244	vmovdqu	(%r8),%ymm2
1245	vmovdqu	32(%r8),%xmm3
1246	vpclmulqdq	$0x00,%xmm3,%xmm13,%xmm4
1247	vpxor	%ymm4,%ymm5,%ymm5
1248	vpclmulqdq	$0x01,%xmm3,%xmm13,%xmm4
1249	vpxor	%ymm4,%ymm6,%ymm6
1250	vpclmulqdq	$0x10,%xmm3,%xmm13,%xmm4
1251	vpxor	%ymm4,%ymm6,%ymm6
1252	vpclmulqdq	$0x11,%xmm3,%xmm13,%xmm4
1253	vpxor	%ymm4,%ymm7,%ymm7
1254	jmp	L$ghash_mul_one_vec_unreduced__func2
1255
1256L$xor_two_blocks__func2:
1257	vmovdqu	(%rdi),%ymm2
1258	vpxor	%ymm2,%ymm12,%ymm12
1259	vmovdqu	%ymm12,(%rsi)
1260	vpshufb	%ymm0,%ymm2,%ymm12
1261	vpxor	%ymm1,%ymm12,%ymm12
1262	vmovdqu	(%r8),%ymm2
1263	jmp	L$ghash_mul_one_vec_unreduced__func2
1264
1265L$xor_one_block__func2:
1266	vmovdqu	(%rdi),%xmm2
1267	vpxor	%xmm2,%xmm12,%xmm12
1268	vmovdqu	%xmm12,(%rsi)
1269	vpshufb	%xmm0,%xmm2,%xmm12
1270	vpxor	%xmm1,%xmm12,%xmm12
1271	vmovdqu	(%r8),%xmm2
1272
1273L$ghash_mul_one_vec_unreduced__func2:
1274	vpclmulqdq	$0x00,%ymm2,%ymm12,%ymm4
1275	vpxor	%ymm4,%ymm5,%ymm5
1276	vpclmulqdq	$0x01,%ymm2,%ymm12,%ymm4
1277	vpxor	%ymm4,%ymm6,%ymm6
1278	vpclmulqdq	$0x10,%ymm2,%ymm12,%ymm4
1279	vpxor	%ymm4,%ymm6,%ymm6
1280	vpclmulqdq	$0x11,%ymm2,%ymm12,%ymm4
1281	vpxor	%ymm4,%ymm7,%ymm7
1282
1283L$reduce__func2:
1284
1285	vbroadcasti128	L$gfpoly(%rip),%ymm2
1286	vpclmulqdq	$0x01,%ymm5,%ymm2,%ymm3
1287	vpshufd	$0x4e,%ymm5,%ymm5
1288	vpxor	%ymm5,%ymm6,%ymm6
1289	vpxor	%ymm3,%ymm6,%ymm6
1290	vpclmulqdq	$0x01,%ymm6,%ymm2,%ymm3
1291	vpshufd	$0x4e,%ymm6,%ymm6
1292	vpxor	%ymm6,%ymm7,%ymm7
1293	vpxor	%ymm3,%ymm7,%ymm7
1294	vextracti128	$1,%ymm7,%xmm1
1295	vpxor	%xmm7,%xmm1,%xmm1
1296
1297L$done__func2:
1298
1299	vpshufb	%xmm0,%xmm1,%xmm1
1300	vmovdqu	%xmm1,(%r12)
1301
1302	vzeroupper
1303	popq	%r12
1304
1305	ret
1306
1307
1308
1309#endif
1310