xref: /freebsd/sys/crypto/openssl/amd64/aesni-xts-avx512.S (revision 4757b351ea9d59d71d4a38b82506d2d16fcd560d)
1/* Do not modify. This file is auto-generated from aesni-xts-avx512.pl. */
2.text
3
4.globl	aesni_xts_avx512_eligible
5.type	aesni_xts_avx512_eligible,@function
6.align	32
7aesni_xts_avx512_eligible:
8	movl	OPENSSL_ia32cap_P+8(%rip),%ecx
9	xorl	%eax,%eax
10
11	andl	$0xc0030000,%ecx
12	cmpl	$0xc0030000,%ecx
13	jne	.L_done
14	movl	OPENSSL_ia32cap_P+12(%rip),%ecx
15
16	andl	$0x640,%ecx
17	cmpl	$0x640,%ecx
18	cmovel	%ecx,%eax
19.L_done:
20	.byte	0xf3,0xc3
21.size	aesni_xts_avx512_eligible, .-aesni_xts_avx512_eligible
22.globl	aesni_xts_128_encrypt_avx512
23.hidden	aesni_xts_128_encrypt_avx512
24.type	aesni_xts_128_encrypt_avx512,@function
25.align	32
26aesni_xts_128_encrypt_avx512:
27.cfi_startproc
28.byte	243,15,30,250
29	pushq	%rbp
30	movq	%rsp,%rbp
31	subq	$136,%rsp
32	andq	$0xffffffffffffffc0,%rsp
33	movq	%rbx,128(%rsp)
34	movq	$0x87,%r10
35	vmovdqu	(%r9),%xmm1
36	vpxor	(%r8),%xmm1,%xmm1
37	vaesenc	16(%r8),%xmm1,%xmm1
38	vaesenc	32(%r8),%xmm1,%xmm1
39	vaesenc	48(%r8),%xmm1,%xmm1
40	vaesenc	64(%r8),%xmm1,%xmm1
41	vaesenc	80(%r8),%xmm1,%xmm1
42	vaesenc	96(%r8),%xmm1,%xmm1
43	vaesenc	112(%r8),%xmm1,%xmm1
44	vaesenc	128(%r8),%xmm1,%xmm1
45	vaesenc	144(%r8),%xmm1,%xmm1
46	vaesenclast	160(%r8),%xmm1,%xmm1
47	vmovdqa	%xmm1,(%rsp)
48
49	cmpq	$0x80,%rdx
50	jl	.L_less_than_128_bytes_hEgxyDlCngwrfFe
51	vpbroadcastq	%r10,%zmm25
52	cmpq	$0x100,%rdx
53	jge	.L_start_by16_hEgxyDlCngwrfFe
54	cmpq	$0x80,%rdx
55	jge	.L_start_by8_hEgxyDlCngwrfFe
56
57.L_do_n_blocks_hEgxyDlCngwrfFe:
58	cmpq	$0x0,%rdx
59	je	.L_ret_hEgxyDlCngwrfFe
60	cmpq	$0x70,%rdx
61	jge	.L_remaining_num_blocks_is_7_hEgxyDlCngwrfFe
62	cmpq	$0x60,%rdx
63	jge	.L_remaining_num_blocks_is_6_hEgxyDlCngwrfFe
64	cmpq	$0x50,%rdx
65	jge	.L_remaining_num_blocks_is_5_hEgxyDlCngwrfFe
66	cmpq	$0x40,%rdx
67	jge	.L_remaining_num_blocks_is_4_hEgxyDlCngwrfFe
68	cmpq	$0x30,%rdx
69	jge	.L_remaining_num_blocks_is_3_hEgxyDlCngwrfFe
70	cmpq	$0x20,%rdx
71	jge	.L_remaining_num_blocks_is_2_hEgxyDlCngwrfFe
72	cmpq	$0x10,%rdx
73	jge	.L_remaining_num_blocks_is_1_hEgxyDlCngwrfFe
74	vmovdqa	%xmm0,%xmm8
75	vmovdqa	%xmm9,%xmm0
76	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
77
78.L_remaining_num_blocks_is_7_hEgxyDlCngwrfFe:
79	movq	$0x0000ffffffffffff,%r8
80	kmovq	%r8,%k1
81	vmovdqu8	(%rdi),%zmm1
82	vmovdqu8	64(%rdi),%zmm2{%k1}
83	addq	$0x70,%rdi
84	vbroadcasti32x4	(%rcx),%zmm0
85	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
86	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
87	vbroadcasti32x4	16(%rcx),%zmm0
88	vaesenc	%zmm0,%zmm1,%zmm1
89	vaesenc	%zmm0,%zmm2,%zmm2
90
91
92	vbroadcasti32x4	32(%rcx),%zmm0
93	vaesenc	%zmm0,%zmm1,%zmm1
94	vaesenc	%zmm0,%zmm2,%zmm2
95
96
97	vbroadcasti32x4	48(%rcx),%zmm0
98	vaesenc	%zmm0,%zmm1,%zmm1
99	vaesenc	%zmm0,%zmm2,%zmm2
100
101	vbroadcasti32x4	64(%rcx),%zmm0
102	vaesenc	%zmm0,%zmm1,%zmm1
103	vaesenc	%zmm0,%zmm2,%zmm2
104
105
106	vbroadcasti32x4	80(%rcx),%zmm0
107	vaesenc	%zmm0,%zmm1,%zmm1
108	vaesenc	%zmm0,%zmm2,%zmm2
109
110
111	vbroadcasti32x4	96(%rcx),%zmm0
112	vaesenc	%zmm0,%zmm1,%zmm1
113	vaesenc	%zmm0,%zmm2,%zmm2
114
115
116	vbroadcasti32x4	112(%rcx),%zmm0
117	vaesenc	%zmm0,%zmm1,%zmm1
118	vaesenc	%zmm0,%zmm2,%zmm2
119
120
121	vbroadcasti32x4	128(%rcx),%zmm0
122	vaesenc	%zmm0,%zmm1,%zmm1
123	vaesenc	%zmm0,%zmm2,%zmm2
124
125
126	vbroadcasti32x4	144(%rcx),%zmm0
127	vaesenc	%zmm0,%zmm1,%zmm1
128	vaesenc	%zmm0,%zmm2,%zmm2
129
130	vbroadcasti32x4	160(%rcx),%zmm0
131	vaesenclast	%zmm0,%zmm1,%zmm1
132	vaesenclast	%zmm0,%zmm2,%zmm2
133	vpxorq	%zmm9,%zmm1,%zmm1
134	vpxorq	%zmm10,%zmm2,%zmm2
135	vmovdqu8	%zmm1,(%rsi)
136	vmovdqu8	%zmm2,64(%rsi){%k1}
137	addq	$0x70,%rsi
138	vextracti32x4	$0x2,%zmm2,%xmm8
139	vextracti32x4	$0x3,%zmm10,%xmm0
140	andq	$0xf,%rdx
141	je	.L_ret_hEgxyDlCngwrfFe
142	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
143
144.L_remaining_num_blocks_is_6_hEgxyDlCngwrfFe:
145	vmovdqu8	(%rdi),%zmm1
146	vmovdqu8	64(%rdi),%ymm2
147	addq	$0x60,%rdi
148	vbroadcasti32x4	(%rcx),%zmm0
149	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
150	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
151	vbroadcasti32x4	16(%rcx),%zmm0
152	vaesenc	%zmm0,%zmm1,%zmm1
153	vaesenc	%zmm0,%zmm2,%zmm2
154
155
156	vbroadcasti32x4	32(%rcx),%zmm0
157	vaesenc	%zmm0,%zmm1,%zmm1
158	vaesenc	%zmm0,%zmm2,%zmm2
159
160
161	vbroadcasti32x4	48(%rcx),%zmm0
162	vaesenc	%zmm0,%zmm1,%zmm1
163	vaesenc	%zmm0,%zmm2,%zmm2
164
165	vbroadcasti32x4	64(%rcx),%zmm0
166	vaesenc	%zmm0,%zmm1,%zmm1
167	vaesenc	%zmm0,%zmm2,%zmm2
168
169
170	vbroadcasti32x4	80(%rcx),%zmm0
171	vaesenc	%zmm0,%zmm1,%zmm1
172	vaesenc	%zmm0,%zmm2,%zmm2
173
174
175	vbroadcasti32x4	96(%rcx),%zmm0
176	vaesenc	%zmm0,%zmm1,%zmm1
177	vaesenc	%zmm0,%zmm2,%zmm2
178
179
180	vbroadcasti32x4	112(%rcx),%zmm0
181	vaesenc	%zmm0,%zmm1,%zmm1
182	vaesenc	%zmm0,%zmm2,%zmm2
183
184
185	vbroadcasti32x4	128(%rcx),%zmm0
186	vaesenc	%zmm0,%zmm1,%zmm1
187	vaesenc	%zmm0,%zmm2,%zmm2
188
189
190	vbroadcasti32x4	144(%rcx),%zmm0
191	vaesenc	%zmm0,%zmm1,%zmm1
192	vaesenc	%zmm0,%zmm2,%zmm2
193
194	vbroadcasti32x4	160(%rcx),%zmm0
195	vaesenclast	%zmm0,%zmm1,%zmm1
196	vaesenclast	%zmm0,%zmm2,%zmm2
197	vpxorq	%zmm9,%zmm1,%zmm1
198	vpxorq	%zmm10,%zmm2,%zmm2
199	vmovdqu8	%zmm1,(%rsi)
200	vmovdqu8	%ymm2,64(%rsi)
201	addq	$0x60,%rsi
202	vextracti32x4	$0x1,%zmm2,%xmm8
203	vextracti32x4	$0x2,%zmm10,%xmm0
204	andq	$0xf,%rdx
205	je	.L_ret_hEgxyDlCngwrfFe
206	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
207
208.L_remaining_num_blocks_is_5_hEgxyDlCngwrfFe:
209	vmovdqu8	(%rdi),%zmm1
210	vmovdqu	64(%rdi),%xmm2
211	addq	$0x50,%rdi
212	vbroadcasti32x4	(%rcx),%zmm0
213	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
214	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
215	vbroadcasti32x4	16(%rcx),%zmm0
216	vaesenc	%zmm0,%zmm1,%zmm1
217	vaesenc	%zmm0,%zmm2,%zmm2
218
219
220	vbroadcasti32x4	32(%rcx),%zmm0
221	vaesenc	%zmm0,%zmm1,%zmm1
222	vaesenc	%zmm0,%zmm2,%zmm2
223
224
225	vbroadcasti32x4	48(%rcx),%zmm0
226	vaesenc	%zmm0,%zmm1,%zmm1
227	vaesenc	%zmm0,%zmm2,%zmm2
228
229	vbroadcasti32x4	64(%rcx),%zmm0
230	vaesenc	%zmm0,%zmm1,%zmm1
231	vaesenc	%zmm0,%zmm2,%zmm2
232
233
234	vbroadcasti32x4	80(%rcx),%zmm0
235	vaesenc	%zmm0,%zmm1,%zmm1
236	vaesenc	%zmm0,%zmm2,%zmm2
237
238
239	vbroadcasti32x4	96(%rcx),%zmm0
240	vaesenc	%zmm0,%zmm1,%zmm1
241	vaesenc	%zmm0,%zmm2,%zmm2
242
243
244	vbroadcasti32x4	112(%rcx),%zmm0
245	vaesenc	%zmm0,%zmm1,%zmm1
246	vaesenc	%zmm0,%zmm2,%zmm2
247
248
249	vbroadcasti32x4	128(%rcx),%zmm0
250	vaesenc	%zmm0,%zmm1,%zmm1
251	vaesenc	%zmm0,%zmm2,%zmm2
252
253
254	vbroadcasti32x4	144(%rcx),%zmm0
255	vaesenc	%zmm0,%zmm1,%zmm1
256	vaesenc	%zmm0,%zmm2,%zmm2
257
258	vbroadcasti32x4	160(%rcx),%zmm0
259	vaesenclast	%zmm0,%zmm1,%zmm1
260	vaesenclast	%zmm0,%zmm2,%zmm2
261	vpxorq	%zmm9,%zmm1,%zmm1
262	vpxorq	%zmm10,%zmm2,%zmm2
263	vmovdqu8	%zmm1,(%rsi)
264	vmovdqu	%xmm2,64(%rsi)
265	addq	$0x50,%rsi
266	vmovdqa	%xmm2,%xmm8
267	vextracti32x4	$0x1,%zmm10,%xmm0
268	andq	$0xf,%rdx
269	je	.L_ret_hEgxyDlCngwrfFe
270	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
271
272.L_remaining_num_blocks_is_4_hEgxyDlCngwrfFe:
273	vmovdqu8	(%rdi),%zmm1
274	addq	$0x40,%rdi
275	vbroadcasti32x4	(%rcx),%zmm0
276	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
277	vbroadcasti32x4	16(%rcx),%zmm0
278	vaesenc	%zmm0,%zmm1,%zmm1
279	vbroadcasti32x4	32(%rcx),%zmm0
280	vaesenc	%zmm0,%zmm1,%zmm1
281	vbroadcasti32x4	48(%rcx),%zmm0
282	vaesenc	%zmm0,%zmm1,%zmm1
283	vbroadcasti32x4	64(%rcx),%zmm0
284	vaesenc	%zmm0,%zmm1,%zmm1
285	vbroadcasti32x4	80(%rcx),%zmm0
286	vaesenc	%zmm0,%zmm1,%zmm1
287	vbroadcasti32x4	96(%rcx),%zmm0
288	vaesenc	%zmm0,%zmm1,%zmm1
289	vbroadcasti32x4	112(%rcx),%zmm0
290	vaesenc	%zmm0,%zmm1,%zmm1
291	vbroadcasti32x4	128(%rcx),%zmm0
292	vaesenc	%zmm0,%zmm1,%zmm1
293	vbroadcasti32x4	144(%rcx),%zmm0
294	vaesenc	%zmm0,%zmm1,%zmm1
295	vbroadcasti32x4	160(%rcx),%zmm0
296	vaesenclast	%zmm0,%zmm1,%zmm1
297	vpxorq	%zmm9,%zmm1,%zmm1
298	vmovdqu8	%zmm1,(%rsi)
299	addq	$0x40,%rsi
300	vextracti32x4	$0x3,%zmm1,%xmm8
301	vmovdqa64	%xmm10,%xmm0
302	andq	$0xf,%rdx
303	je	.L_ret_hEgxyDlCngwrfFe
304	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
305.L_remaining_num_blocks_is_3_hEgxyDlCngwrfFe:
306	movq	$-1,%r8
307	shrq	$0x10,%r8
308	kmovq	%r8,%k1
309	vmovdqu8	(%rdi),%zmm1{%k1}
310	addq	$0x30,%rdi
311	vbroadcasti32x4	(%rcx),%zmm0
312	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
313	vbroadcasti32x4	16(%rcx),%zmm0
314	vaesenc	%zmm0,%zmm1,%zmm1
315	vbroadcasti32x4	32(%rcx),%zmm0
316	vaesenc	%zmm0,%zmm1,%zmm1
317	vbroadcasti32x4	48(%rcx),%zmm0
318	vaesenc	%zmm0,%zmm1,%zmm1
319	vbroadcasti32x4	64(%rcx),%zmm0
320	vaesenc	%zmm0,%zmm1,%zmm1
321	vbroadcasti32x4	80(%rcx),%zmm0
322	vaesenc	%zmm0,%zmm1,%zmm1
323	vbroadcasti32x4	96(%rcx),%zmm0
324	vaesenc	%zmm0,%zmm1,%zmm1
325	vbroadcasti32x4	112(%rcx),%zmm0
326	vaesenc	%zmm0,%zmm1,%zmm1
327	vbroadcasti32x4	128(%rcx),%zmm0
328	vaesenc	%zmm0,%zmm1,%zmm1
329	vbroadcasti32x4	144(%rcx),%zmm0
330	vaesenc	%zmm0,%zmm1,%zmm1
331	vbroadcasti32x4	160(%rcx),%zmm0
332	vaesenclast	%zmm0,%zmm1,%zmm1
333	vpxorq	%zmm9,%zmm1,%zmm1
334	vmovdqu8	%zmm1,(%rsi){%k1}
335	addq	$0x30,%rsi
336	vextracti32x4	$0x2,%zmm1,%xmm8
337	vextracti32x4	$0x3,%zmm9,%xmm0
338	andq	$0xf,%rdx
339	je	.L_ret_hEgxyDlCngwrfFe
340	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
341.L_remaining_num_blocks_is_2_hEgxyDlCngwrfFe:
342	vmovdqu8	(%rdi),%ymm1
343	addq	$0x20,%rdi
344	vbroadcasti32x4	(%rcx),%ymm0
345	vpternlogq	$0x96,%ymm0,%ymm9,%ymm1
346	vbroadcasti32x4	16(%rcx),%ymm0
347	vaesenc	%ymm0,%ymm1,%ymm1
348	vbroadcasti32x4	32(%rcx),%ymm0
349	vaesenc	%ymm0,%ymm1,%ymm1
350	vbroadcasti32x4	48(%rcx),%ymm0
351	vaesenc	%ymm0,%ymm1,%ymm1
352	vbroadcasti32x4	64(%rcx),%ymm0
353	vaesenc	%ymm0,%ymm1,%ymm1
354	vbroadcasti32x4	80(%rcx),%ymm0
355	vaesenc	%ymm0,%ymm1,%ymm1
356	vbroadcasti32x4	96(%rcx),%ymm0
357	vaesenc	%ymm0,%ymm1,%ymm1
358	vbroadcasti32x4	112(%rcx),%ymm0
359	vaesenc	%ymm0,%ymm1,%ymm1
360	vbroadcasti32x4	128(%rcx),%ymm0
361	vaesenc	%ymm0,%ymm1,%ymm1
362	vbroadcasti32x4	144(%rcx),%ymm0
363	vaesenc	%ymm0,%ymm1,%ymm1
364	vbroadcasti32x4	160(%rcx),%ymm0
365	vaesenclast	%ymm0,%ymm1,%ymm1
366	vpxorq	%ymm9,%ymm1,%ymm1
367	vmovdqu	%ymm1,(%rsi)
368	addq	$0x20,%rsi
369	vextracti32x4	$0x1,%zmm1,%xmm8
370	vextracti32x4	$0x2,%zmm9,%xmm0
371	andq	$0xf,%rdx
372	je	.L_ret_hEgxyDlCngwrfFe
373	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
374.L_remaining_num_blocks_is_1_hEgxyDlCngwrfFe:
375	vmovdqu	(%rdi),%xmm1
376	addq	$0x10,%rdi
377	vpxor	%xmm9,%xmm1,%xmm1
378	vpxor	(%rcx),%xmm1,%xmm1
379	vaesenc	16(%rcx),%xmm1,%xmm1
380	vaesenc	32(%rcx),%xmm1,%xmm1
381	vaesenc	48(%rcx),%xmm1,%xmm1
382	vaesenc	64(%rcx),%xmm1,%xmm1
383	vaesenc	80(%rcx),%xmm1,%xmm1
384	vaesenc	96(%rcx),%xmm1,%xmm1
385	vaesenc	112(%rcx),%xmm1,%xmm1
386	vaesenc	128(%rcx),%xmm1,%xmm1
387	vaesenc	144(%rcx),%xmm1,%xmm1
388	vaesenclast	160(%rcx),%xmm1,%xmm1
389	vpxor	%xmm9,%xmm1,%xmm1
390	vmovdqu	%xmm1,(%rsi)
391	addq	$0x10,%rsi
392	vmovdqa	%xmm1,%xmm8
393	vextracti32x4	$0x1,%zmm9,%xmm0
394	andq	$0xf,%rdx
395	je	.L_ret_hEgxyDlCngwrfFe
396	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
397
398
399.L_start_by16_hEgxyDlCngwrfFe:
400	vbroadcasti32x4	(%rsp),%zmm0
401	vbroadcasti32x4	shufb_15_7(%rip),%zmm8
402	movq	$0xaa,%r8
403	kmovq	%r8,%k2
404	vpshufb	%zmm8,%zmm0,%zmm1
405	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
406	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
407	vpclmulqdq	$0x0,%zmm25,%zmm2,%zmm3
408	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
409	vpxord	%zmm4,%zmm3,%zmm9
410	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
411	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
412	vpclmulqdq	$0x0,%zmm25,%zmm6,%zmm7
413	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
414	vpxord	%zmm5,%zmm7,%zmm10
415	vpsrldq	$0xf,%zmm9,%zmm13
416	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
417	vpslldq	$0x1,%zmm9,%zmm11
418	vpxord	%zmm14,%zmm11,%zmm11
419	vpsrldq	$0xf,%zmm10,%zmm15
420	vpclmulqdq	$0x0,%zmm25,%zmm15,%zmm16
421	vpslldq	$0x1,%zmm10,%zmm12
422	vpxord	%zmm16,%zmm12,%zmm12
423
424.L_main_loop_run_16_hEgxyDlCngwrfFe:
425	vmovdqu8	(%rdi),%zmm1
426	vmovdqu8	64(%rdi),%zmm2
427	vmovdqu8	128(%rdi),%zmm3
428	vmovdqu8	192(%rdi),%zmm4
429	addq	$0x100,%rdi
430	vpxorq	%zmm9,%zmm1,%zmm1
431	vpxorq	%zmm10,%zmm2,%zmm2
432	vpxorq	%zmm11,%zmm3,%zmm3
433	vpxorq	%zmm12,%zmm4,%zmm4
434	vbroadcasti32x4	(%rcx),%zmm0
435	vpxorq	%zmm0,%zmm1,%zmm1
436	vpxorq	%zmm0,%zmm2,%zmm2
437	vpxorq	%zmm0,%zmm3,%zmm3
438	vpxorq	%zmm0,%zmm4,%zmm4
439	vpsrldq	$0xf,%zmm11,%zmm13
440	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
441	vpslldq	$0x1,%zmm11,%zmm15
442	vpxord	%zmm14,%zmm15,%zmm15
443	vbroadcasti32x4	16(%rcx),%zmm0
444	vaesenc	%zmm0,%zmm1,%zmm1
445	vaesenc	%zmm0,%zmm2,%zmm2
446	vaesenc	%zmm0,%zmm3,%zmm3
447	vaesenc	%zmm0,%zmm4,%zmm4
448	vbroadcasti32x4	32(%rcx),%zmm0
449	vaesenc	%zmm0,%zmm1,%zmm1
450	vaesenc	%zmm0,%zmm2,%zmm2
451	vaesenc	%zmm0,%zmm3,%zmm3
452	vaesenc	%zmm0,%zmm4,%zmm4
453	vbroadcasti32x4	48(%rcx),%zmm0
454	vaesenc	%zmm0,%zmm1,%zmm1
455	vaesenc	%zmm0,%zmm2,%zmm2
456	vaesenc	%zmm0,%zmm3,%zmm3
457	vaesenc	%zmm0,%zmm4,%zmm4
458	vpsrldq	$0xf,%zmm12,%zmm13
459	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
460	vpslldq	$0x1,%zmm12,%zmm16
461	vpxord	%zmm14,%zmm16,%zmm16
462	vbroadcasti32x4	64(%rcx),%zmm0
463	vaesenc	%zmm0,%zmm1,%zmm1
464	vaesenc	%zmm0,%zmm2,%zmm2
465	vaesenc	%zmm0,%zmm3,%zmm3
466	vaesenc	%zmm0,%zmm4,%zmm4
467	vbroadcasti32x4	80(%rcx),%zmm0
468	vaesenc	%zmm0,%zmm1,%zmm1
469	vaesenc	%zmm0,%zmm2,%zmm2
470	vaesenc	%zmm0,%zmm3,%zmm3
471	vaesenc	%zmm0,%zmm4,%zmm4
472	vbroadcasti32x4	96(%rcx),%zmm0
473	vaesenc	%zmm0,%zmm1,%zmm1
474	vaesenc	%zmm0,%zmm2,%zmm2
475	vaesenc	%zmm0,%zmm3,%zmm3
476	vaesenc	%zmm0,%zmm4,%zmm4
477	vpsrldq	$0xf,%zmm15,%zmm13
478	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
479	vpslldq	$0x1,%zmm15,%zmm17
480	vpxord	%zmm14,%zmm17,%zmm17
481	vbroadcasti32x4	112(%rcx),%zmm0
482	vaesenc	%zmm0,%zmm1,%zmm1
483	vaesenc	%zmm0,%zmm2,%zmm2
484	vaesenc	%zmm0,%zmm3,%zmm3
485	vaesenc	%zmm0,%zmm4,%zmm4
486	vbroadcasti32x4	128(%rcx),%zmm0
487	vaesenc	%zmm0,%zmm1,%zmm1
488	vaesenc	%zmm0,%zmm2,%zmm2
489	vaesenc	%zmm0,%zmm3,%zmm3
490	vaesenc	%zmm0,%zmm4,%zmm4
491	vbroadcasti32x4	144(%rcx),%zmm0
492	vaesenc	%zmm0,%zmm1,%zmm1
493	vaesenc	%zmm0,%zmm2,%zmm2
494	vaesenc	%zmm0,%zmm3,%zmm3
495	vaesenc	%zmm0,%zmm4,%zmm4
496	vpsrldq	$0xf,%zmm16,%zmm13
497	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
498	vpslldq	$0x1,%zmm16,%zmm18
499	vpxord	%zmm14,%zmm18,%zmm18
500	vbroadcasti32x4	160(%rcx),%zmm0
501	vaesenclast	%zmm0,%zmm1,%zmm1
502	vaesenclast	%zmm0,%zmm2,%zmm2
503	vaesenclast	%zmm0,%zmm3,%zmm3
504	vaesenclast	%zmm0,%zmm4,%zmm4
505	vpxorq	%zmm9,%zmm1,%zmm1
506	vpxorq	%zmm10,%zmm2,%zmm2
507	vpxorq	%zmm11,%zmm3,%zmm3
508	vpxorq	%zmm12,%zmm4,%zmm4
509
510	vmovdqa32	%zmm15,%zmm9
511	vmovdqa32	%zmm16,%zmm10
512	vmovdqa32	%zmm17,%zmm11
513	vmovdqa32	%zmm18,%zmm12
514	vmovdqu8	%zmm1,(%rsi)
515	vmovdqu8	%zmm2,64(%rsi)
516	vmovdqu8	%zmm3,128(%rsi)
517	vmovdqu8	%zmm4,192(%rsi)
518	addq	$0x100,%rsi
519	subq	$0x100,%rdx
520	cmpq	$0x100,%rdx
521	jae	.L_main_loop_run_16_hEgxyDlCngwrfFe
522	cmpq	$0x80,%rdx
523	jae	.L_main_loop_run_8_hEgxyDlCngwrfFe
524	vextracti32x4	$0x3,%zmm4,%xmm0
525	jmp	.L_do_n_blocks_hEgxyDlCngwrfFe
526
527.L_start_by8_hEgxyDlCngwrfFe:
528	vbroadcasti32x4	(%rsp),%zmm0
529	vbroadcasti32x4	shufb_15_7(%rip),%zmm8
530	movq	$0xaa,%r8
531	kmovq	%r8,%k2
532	vpshufb	%zmm8,%zmm0,%zmm1
533	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
534	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
535	vpclmulqdq	$0x0,%zmm25,%zmm2,%zmm3
536	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
537	vpxord	%zmm4,%zmm3,%zmm9
538	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
539	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
540	vpclmulqdq	$0x0,%zmm25,%zmm6,%zmm7
541	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
542	vpxord	%zmm5,%zmm7,%zmm10
543
544.L_main_loop_run_8_hEgxyDlCngwrfFe:
545	vmovdqu8	(%rdi),%zmm1
546	vmovdqu8	64(%rdi),%zmm2
547	addq	$0x80,%rdi
548	vbroadcasti32x4	(%rcx),%zmm0
549	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
550	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
551	vpsrldq	$0xf,%zmm9,%zmm13
552	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
553	vpslldq	$0x1,%zmm9,%zmm15
554	vpxord	%zmm14,%zmm15,%zmm15
555	vbroadcasti32x4	16(%rcx),%zmm0
556	vaesenc	%zmm0,%zmm1,%zmm1
557	vaesenc	%zmm0,%zmm2,%zmm2
558
559
560	vbroadcasti32x4	32(%rcx),%zmm0
561	vaesenc	%zmm0,%zmm1,%zmm1
562	vaesenc	%zmm0,%zmm2,%zmm2
563
564
565	vbroadcasti32x4	48(%rcx),%zmm0
566	vaesenc	%zmm0,%zmm1,%zmm1
567	vaesenc	%zmm0,%zmm2,%zmm2
568	vpsrldq	$0xf,%zmm10,%zmm13
569	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
570	vpslldq	$0x1,%zmm10,%zmm16
571	vpxord	%zmm14,%zmm16,%zmm16
572
573	vbroadcasti32x4	64(%rcx),%zmm0
574	vaesenc	%zmm0,%zmm1,%zmm1
575	vaesenc	%zmm0,%zmm2,%zmm2
576
577
578	vbroadcasti32x4	80(%rcx),%zmm0
579	vaesenc	%zmm0,%zmm1,%zmm1
580	vaesenc	%zmm0,%zmm2,%zmm2
581
582
583	vbroadcasti32x4	96(%rcx),%zmm0
584	vaesenc	%zmm0,%zmm1,%zmm1
585	vaesenc	%zmm0,%zmm2,%zmm2
586
587
588	vbroadcasti32x4	112(%rcx),%zmm0
589	vaesenc	%zmm0,%zmm1,%zmm1
590	vaesenc	%zmm0,%zmm2,%zmm2
591
592
593	vbroadcasti32x4	128(%rcx),%zmm0
594	vaesenc	%zmm0,%zmm1,%zmm1
595	vaesenc	%zmm0,%zmm2,%zmm2
596
597
598	vbroadcasti32x4	144(%rcx),%zmm0
599	vaesenc	%zmm0,%zmm1,%zmm1
600	vaesenc	%zmm0,%zmm2,%zmm2
601
602	vbroadcasti32x4	160(%rcx),%zmm0
603	vaesenclast	%zmm0,%zmm1,%zmm1
604	vaesenclast	%zmm0,%zmm2,%zmm2
605	vpxorq	%zmm9,%zmm1,%zmm1
606	vpxorq	%zmm10,%zmm2,%zmm2
607	vmovdqa32	%zmm15,%zmm9
608	vmovdqa32	%zmm16,%zmm10
609	vmovdqu8	%zmm1,(%rsi)
610	vmovdqu8	%zmm2,64(%rsi)
611	addq	$0x80,%rsi
612	subq	$0x80,%rdx
613	cmpq	$0x80,%rdx
614	jae	.L_main_loop_run_8_hEgxyDlCngwrfFe
615	vextracti32x4	$0x3,%zmm2,%xmm0
616	jmp	.L_do_n_blocks_hEgxyDlCngwrfFe
617
618.L_steal_cipher_hEgxyDlCngwrfFe:
619	vmovdqa	%xmm8,%xmm2
620	leaq	vpshufb_shf_table(%rip),%rax
621	vmovdqu	(%rax,%rdx,1),%xmm10
622	vpshufb	%xmm10,%xmm8,%xmm8
623	vmovdqu	-16(%rdi,%rdx,1),%xmm3
624	vmovdqu	%xmm8,-16(%rsi,%rdx,1)
625	leaq	vpshufb_shf_table(%rip),%rax
626	addq	$16,%rax
627	subq	%rdx,%rax
628	vmovdqu	(%rax),%xmm10
629	vpxor	mask1(%rip),%xmm10,%xmm10
630	vpshufb	%xmm10,%xmm3,%xmm3
631	vpblendvb	%xmm10,%xmm2,%xmm3,%xmm3
632	vpxor	%xmm0,%xmm3,%xmm8
633	vpxor	(%rcx),%xmm8,%xmm8
634	vaesenc	16(%rcx),%xmm8,%xmm8
635	vaesenc	32(%rcx),%xmm8,%xmm8
636	vaesenc	48(%rcx),%xmm8,%xmm8
637	vaesenc	64(%rcx),%xmm8,%xmm8
638	vaesenc	80(%rcx),%xmm8,%xmm8
639	vaesenc	96(%rcx),%xmm8,%xmm8
640	vaesenc	112(%rcx),%xmm8,%xmm8
641	vaesenc	128(%rcx),%xmm8,%xmm8
642	vaesenc	144(%rcx),%xmm8,%xmm8
643	vaesenclast	160(%rcx),%xmm8,%xmm8
644	vpxor	%xmm0,%xmm8,%xmm8
645	vmovdqu	%xmm8,-16(%rsi)
646.L_ret_hEgxyDlCngwrfFe:
647	movq	128(%rsp),%rbx
648	xorq	%r8,%r8
649	movq	%r8,128(%rsp)
650
651	vpxorq	%zmm0,%zmm0,%zmm0
652	movq	%rbp,%rsp
653	popq	%rbp
654	vzeroupper
655	.byte	0xf3,0xc3
656
657.L_less_than_128_bytes_hEgxyDlCngwrfFe:
658	vpbroadcastq	%r10,%zmm25
659	cmpq	$0x10,%rdx
660	jb	.L_ret_hEgxyDlCngwrfFe
661	vbroadcasti32x4	(%rsp),%zmm0
662	vbroadcasti32x4	shufb_15_7(%rip),%zmm8
663	movl	$0xaa,%r8d
664	kmovq	%r8,%k2
665	movq	%rdx,%r8
666	andq	$0x70,%r8
667	cmpq	$0x60,%r8
668	je	.L_num_blocks_is_6_hEgxyDlCngwrfFe
669	cmpq	$0x50,%r8
670	je	.L_num_blocks_is_5_hEgxyDlCngwrfFe
671	cmpq	$0x40,%r8
672	je	.L_num_blocks_is_4_hEgxyDlCngwrfFe
673	cmpq	$0x30,%r8
674	je	.L_num_blocks_is_3_hEgxyDlCngwrfFe
675	cmpq	$0x20,%r8
676	je	.L_num_blocks_is_2_hEgxyDlCngwrfFe
677	cmpq	$0x10,%r8
678	je	.L_num_blocks_is_1_hEgxyDlCngwrfFe
679
680.L_num_blocks_is_7_hEgxyDlCngwrfFe:
681	vpshufb	%zmm8,%zmm0,%zmm1
682	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
683	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
684	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
685	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
686	vpxord	%zmm4,%zmm3,%zmm9
687	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
688	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
689	vpclmulqdq	$0x00,%zmm25,%zmm6,%zmm7
690	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
691	vpxord	%zmm5,%zmm7,%zmm10
692	movq	$0x0000ffffffffffff,%r8
693	kmovq	%r8,%k1
694	vmovdqu8	0(%rdi),%zmm1
695	vmovdqu8	64(%rdi),%zmm2{%k1}
696
697	addq	$0x70,%rdi
698	vbroadcasti32x4	(%rcx),%zmm0
699	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
700	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
701	vbroadcasti32x4	16(%rcx),%zmm0
702	vaesenc	%zmm0,%zmm1,%zmm1
703	vaesenc	%zmm0,%zmm2,%zmm2
704
705
706	vbroadcasti32x4	32(%rcx),%zmm0
707	vaesenc	%zmm0,%zmm1,%zmm1
708	vaesenc	%zmm0,%zmm2,%zmm2
709
710
711	vbroadcasti32x4	48(%rcx),%zmm0
712	vaesenc	%zmm0,%zmm1,%zmm1
713	vaesenc	%zmm0,%zmm2,%zmm2
714
715	vbroadcasti32x4	64(%rcx),%zmm0
716	vaesenc	%zmm0,%zmm1,%zmm1
717	vaesenc	%zmm0,%zmm2,%zmm2
718
719
720	vbroadcasti32x4	80(%rcx),%zmm0
721	vaesenc	%zmm0,%zmm1,%zmm1
722	vaesenc	%zmm0,%zmm2,%zmm2
723
724
725	vbroadcasti32x4	96(%rcx),%zmm0
726	vaesenc	%zmm0,%zmm1,%zmm1
727	vaesenc	%zmm0,%zmm2,%zmm2
728
729
730	vbroadcasti32x4	112(%rcx),%zmm0
731	vaesenc	%zmm0,%zmm1,%zmm1
732	vaesenc	%zmm0,%zmm2,%zmm2
733
734
735	vbroadcasti32x4	128(%rcx),%zmm0
736	vaesenc	%zmm0,%zmm1,%zmm1
737	vaesenc	%zmm0,%zmm2,%zmm2
738
739
740	vbroadcasti32x4	144(%rcx),%zmm0
741	vaesenc	%zmm0,%zmm1,%zmm1
742	vaesenc	%zmm0,%zmm2,%zmm2
743
744	vbroadcasti32x4	160(%rcx),%zmm0
745	vaesenclast	%zmm0,%zmm1,%zmm1
746	vaesenclast	%zmm0,%zmm2,%zmm2
747	vpxorq	%zmm9,%zmm1,%zmm1
748	vpxorq	%zmm10,%zmm2,%zmm2
749	vmovdqu8	%zmm1,0(%rsi)
750	vmovdqu8	%zmm2,64(%rsi){%k1}
751	addq	$0x70,%rsi
752	vextracti32x4	$0x2,%zmm2,%xmm8
753	vextracti32x4	$0x3,%zmm10,%xmm0
754	andq	$0xf,%rdx
755	je	.L_ret_hEgxyDlCngwrfFe
756	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
757.L_num_blocks_is_6_hEgxyDlCngwrfFe:
758	vpshufb	%zmm8,%zmm0,%zmm1
759	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
760	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
761	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
762	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
763	vpxord	%zmm4,%zmm3,%zmm9
764	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
765	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
766	vpclmulqdq	$0x00,%zmm25,%zmm6,%zmm7
767	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
768	vpxord	%zmm5,%zmm7,%zmm10
769	vmovdqu8	0(%rdi),%zmm1
770	vmovdqu8	64(%rdi),%ymm2
771	addq	$96,%rdi
772	vbroadcasti32x4	(%rcx),%zmm0
773	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
774	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
775	vbroadcasti32x4	16(%rcx),%zmm0
776	vaesenc	%zmm0,%zmm1,%zmm1
777	vaesenc	%zmm0,%zmm2,%zmm2
778
779
780	vbroadcasti32x4	32(%rcx),%zmm0
781	vaesenc	%zmm0,%zmm1,%zmm1
782	vaesenc	%zmm0,%zmm2,%zmm2
783
784
785	vbroadcasti32x4	48(%rcx),%zmm0
786	vaesenc	%zmm0,%zmm1,%zmm1
787	vaesenc	%zmm0,%zmm2,%zmm2
788
789	vbroadcasti32x4	64(%rcx),%zmm0
790	vaesenc	%zmm0,%zmm1,%zmm1
791	vaesenc	%zmm0,%zmm2,%zmm2
792
793
794	vbroadcasti32x4	80(%rcx),%zmm0
795	vaesenc	%zmm0,%zmm1,%zmm1
796	vaesenc	%zmm0,%zmm2,%zmm2
797
798
799	vbroadcasti32x4	96(%rcx),%zmm0
800	vaesenc	%zmm0,%zmm1,%zmm1
801	vaesenc	%zmm0,%zmm2,%zmm2
802
803
804	vbroadcasti32x4	112(%rcx),%zmm0
805	vaesenc	%zmm0,%zmm1,%zmm1
806	vaesenc	%zmm0,%zmm2,%zmm2
807
808
809	vbroadcasti32x4	128(%rcx),%zmm0
810	vaesenc	%zmm0,%zmm1,%zmm1
811	vaesenc	%zmm0,%zmm2,%zmm2
812
813
814	vbroadcasti32x4	144(%rcx),%zmm0
815	vaesenc	%zmm0,%zmm1,%zmm1
816	vaesenc	%zmm0,%zmm2,%zmm2
817
818	vbroadcasti32x4	160(%rcx),%zmm0
819	vaesenclast	%zmm0,%zmm1,%zmm1
820	vaesenclast	%zmm0,%zmm2,%zmm2
821	vpxorq	%zmm9,%zmm1,%zmm1
822	vpxorq	%zmm10,%zmm2,%zmm2
823	vmovdqu8	%zmm1,0(%rsi)
824	vmovdqu8	%ymm2,64(%rsi)
825	addq	$96,%rsi
826
827	vextracti32x4	$0x1,%ymm2,%xmm8
828	vextracti32x4	$0x2,%zmm10,%xmm0
829	andq	$0xf,%rdx
830	je	.L_ret_hEgxyDlCngwrfFe
831	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
832.L_num_blocks_is_5_hEgxyDlCngwrfFe:
833	vpshufb	%zmm8,%zmm0,%zmm1
834	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
835	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
836	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
837	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
838	vpxord	%zmm4,%zmm3,%zmm9
839	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
840	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
841	vpclmulqdq	$0x00,%zmm25,%zmm6,%zmm7
842	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
843	vpxord	%zmm5,%zmm7,%zmm10
844	vmovdqu8	0(%rdi),%zmm1
845	vmovdqu8	64(%rdi),%xmm2
846	addq	$80,%rdi
847	vbroadcasti32x4	(%rcx),%zmm0
848	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
849	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
850	vbroadcasti32x4	16(%rcx),%zmm0
851	vaesenc	%zmm0,%zmm1,%zmm1
852	vaesenc	%zmm0,%zmm2,%zmm2
853
854
855	vbroadcasti32x4	32(%rcx),%zmm0
856	vaesenc	%zmm0,%zmm1,%zmm1
857	vaesenc	%zmm0,%zmm2,%zmm2
858
859
860	vbroadcasti32x4	48(%rcx),%zmm0
861	vaesenc	%zmm0,%zmm1,%zmm1
862	vaesenc	%zmm0,%zmm2,%zmm2
863
864	vbroadcasti32x4	64(%rcx),%zmm0
865	vaesenc	%zmm0,%zmm1,%zmm1
866	vaesenc	%zmm0,%zmm2,%zmm2
867
868
869	vbroadcasti32x4	80(%rcx),%zmm0
870	vaesenc	%zmm0,%zmm1,%zmm1
871	vaesenc	%zmm0,%zmm2,%zmm2
872
873
874	vbroadcasti32x4	96(%rcx),%zmm0
875	vaesenc	%zmm0,%zmm1,%zmm1
876	vaesenc	%zmm0,%zmm2,%zmm2
877
878
879	vbroadcasti32x4	112(%rcx),%zmm0
880	vaesenc	%zmm0,%zmm1,%zmm1
881	vaesenc	%zmm0,%zmm2,%zmm2
882
883
884	vbroadcasti32x4	128(%rcx),%zmm0
885	vaesenc	%zmm0,%zmm1,%zmm1
886	vaesenc	%zmm0,%zmm2,%zmm2
887
888
889	vbroadcasti32x4	144(%rcx),%zmm0
890	vaesenc	%zmm0,%zmm1,%zmm1
891	vaesenc	%zmm0,%zmm2,%zmm2
892
893	vbroadcasti32x4	160(%rcx),%zmm0
894	vaesenclast	%zmm0,%zmm1,%zmm1
895	vaesenclast	%zmm0,%zmm2,%zmm2
896	vpxorq	%zmm9,%zmm1,%zmm1
897	vpxorq	%zmm10,%zmm2,%zmm2
898	vmovdqu8	%zmm1,0(%rsi)
899	vmovdqu8	%xmm2,64(%rsi)
900	addq	$80,%rsi
901
902	vmovdqa	%xmm2,%xmm8
903	vextracti32x4	$0x1,%zmm10,%xmm0
904	andq	$0xf,%rdx
905	je	.L_ret_hEgxyDlCngwrfFe
906	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
907.L_num_blocks_is_4_hEgxyDlCngwrfFe:
908	vpshufb	%zmm8,%zmm0,%zmm1
909	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
910	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
911	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
912	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
913	vpxord	%zmm4,%zmm3,%zmm9
914	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
915	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
916	vpclmulqdq	$0x00,%zmm25,%zmm6,%zmm7
917	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
918	vpxord	%zmm5,%zmm7,%zmm10
919	vmovdqu8	0(%rdi),%zmm1
920	addq	$64,%rdi
921	vbroadcasti32x4	(%rcx),%zmm0
922	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
923	vbroadcasti32x4	16(%rcx),%zmm0
924	vaesenc	%zmm0,%zmm1,%zmm1
925	vbroadcasti32x4	32(%rcx),%zmm0
926	vaesenc	%zmm0,%zmm1,%zmm1
927	vbroadcasti32x4	48(%rcx),%zmm0
928	vaesenc	%zmm0,%zmm1,%zmm1
929	vbroadcasti32x4	64(%rcx),%zmm0
930	vaesenc	%zmm0,%zmm1,%zmm1
931	vbroadcasti32x4	80(%rcx),%zmm0
932	vaesenc	%zmm0,%zmm1,%zmm1
933	vbroadcasti32x4	96(%rcx),%zmm0
934	vaesenc	%zmm0,%zmm1,%zmm1
935	vbroadcasti32x4	112(%rcx),%zmm0
936	vaesenc	%zmm0,%zmm1,%zmm1
937	vbroadcasti32x4	128(%rcx),%zmm0
938	vaesenc	%zmm0,%zmm1,%zmm1
939	vbroadcasti32x4	144(%rcx),%zmm0
940	vaesenc	%zmm0,%zmm1,%zmm1
941	vbroadcasti32x4	160(%rcx),%zmm0
942	vaesenclast	%zmm0,%zmm1,%zmm1
943	vpxorq	%zmm9,%zmm1,%zmm1
944	vmovdqu8	%zmm1,0(%rsi)
945	addq	$64,%rsi
946	vextracti32x4	$0x3,%zmm1,%xmm8
947	vmovdqa	%xmm10,%xmm0
948	andq	$0xf,%rdx
949	je	.L_ret_hEgxyDlCngwrfFe
950	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
951.L_num_blocks_is_3_hEgxyDlCngwrfFe:
952	vpshufb	%zmm8,%zmm0,%zmm1
953	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
954	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
955	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
956	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
957	vpxord	%zmm4,%zmm3,%zmm9
958	movq	$0x0000ffffffffffff,%r8
959	kmovq	%r8,%k1
960	vmovdqu8	0(%rdi),%zmm1{%k1}
961	addq	$48,%rdi
962	vbroadcasti32x4	(%rcx),%zmm0
963	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
964	vbroadcasti32x4	16(%rcx),%zmm0
965	vaesenc	%zmm0,%zmm1,%zmm1
966	vbroadcasti32x4	32(%rcx),%zmm0
967	vaesenc	%zmm0,%zmm1,%zmm1
968	vbroadcasti32x4	48(%rcx),%zmm0
969	vaesenc	%zmm0,%zmm1,%zmm1
970	vbroadcasti32x4	64(%rcx),%zmm0
971	vaesenc	%zmm0,%zmm1,%zmm1
972	vbroadcasti32x4	80(%rcx),%zmm0
973	vaesenc	%zmm0,%zmm1,%zmm1
974	vbroadcasti32x4	96(%rcx),%zmm0
975	vaesenc	%zmm0,%zmm1,%zmm1
976	vbroadcasti32x4	112(%rcx),%zmm0
977	vaesenc	%zmm0,%zmm1,%zmm1
978	vbroadcasti32x4	128(%rcx),%zmm0
979	vaesenc	%zmm0,%zmm1,%zmm1
980	vbroadcasti32x4	144(%rcx),%zmm0
981	vaesenc	%zmm0,%zmm1,%zmm1
982	vbroadcasti32x4	160(%rcx),%zmm0
983	vaesenclast	%zmm0,%zmm1,%zmm1
984	vpxorq	%zmm9,%zmm1,%zmm1
985	vmovdqu8	%zmm1,0(%rsi){%k1}
986	addq	$48,%rsi
987	vextracti32x4	$2,%zmm1,%xmm8
988	vextracti32x4	$3,%zmm9,%xmm0
989	andq	$0xf,%rdx
990	je	.L_ret_hEgxyDlCngwrfFe
991	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
992.L_num_blocks_is_2_hEgxyDlCngwrfFe:
993	vpshufb	%zmm8,%zmm0,%zmm1
994	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
995	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
996	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
997	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
998	vpxord	%zmm4,%zmm3,%zmm9
999
1000	vmovdqu8	0(%rdi),%ymm1
1001	addq	$32,%rdi
1002	vbroadcasti32x4	(%rcx),%ymm0
1003	vpternlogq	$0x96,%ymm0,%ymm9,%ymm1
1004	vbroadcasti32x4	16(%rcx),%ymm0
1005	vaesenc	%ymm0,%ymm1,%ymm1
1006	vbroadcasti32x4	32(%rcx),%ymm0
1007	vaesenc	%ymm0,%ymm1,%ymm1
1008	vbroadcasti32x4	48(%rcx),%ymm0
1009	vaesenc	%ymm0,%ymm1,%ymm1
1010	vbroadcasti32x4	64(%rcx),%ymm0
1011	vaesenc	%ymm0,%ymm1,%ymm1
1012	vbroadcasti32x4	80(%rcx),%ymm0
1013	vaesenc	%ymm0,%ymm1,%ymm1
1014	vbroadcasti32x4	96(%rcx),%ymm0
1015	vaesenc	%ymm0,%ymm1,%ymm1
1016	vbroadcasti32x4	112(%rcx),%ymm0
1017	vaesenc	%ymm0,%ymm1,%ymm1
1018	vbroadcasti32x4	128(%rcx),%ymm0
1019	vaesenc	%ymm0,%ymm1,%ymm1
1020	vbroadcasti32x4	144(%rcx),%ymm0
1021	vaesenc	%ymm0,%ymm1,%ymm1
1022	vbroadcasti32x4	160(%rcx),%ymm0
1023	vaesenclast	%ymm0,%ymm1,%ymm1
1024	vpxorq	%ymm9,%ymm1,%ymm1
1025	vmovdqu8	%ymm1,0(%rsi)
1026	addq	$32,%rsi
1027
1028	vextracti32x4	$1,%ymm1,%xmm8
1029	vextracti32x4	$2,%zmm9,%xmm0
1030	andq	$0xf,%rdx
1031	je	.L_ret_hEgxyDlCngwrfFe
1032	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
1033.L_num_blocks_is_1_hEgxyDlCngwrfFe:
1034	vpshufb	%zmm8,%zmm0,%zmm1
1035	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
1036	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
1037	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
1038	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
1039	vpxord	%zmm4,%zmm3,%zmm9
1040
1041	vmovdqu8	0(%rdi),%xmm1
1042	addq	$16,%rdi
1043	vbroadcasti32x4	(%rcx),%ymm0
1044	vpternlogq	$0x96,%ymm0,%ymm9,%ymm1
1045	vbroadcasti32x4	16(%rcx),%ymm0
1046	vaesenc	%ymm0,%ymm1,%ymm1
1047	vbroadcasti32x4	32(%rcx),%ymm0
1048	vaesenc	%ymm0,%ymm1,%ymm1
1049	vbroadcasti32x4	48(%rcx),%ymm0
1050	vaesenc	%ymm0,%ymm1,%ymm1
1051	vbroadcasti32x4	64(%rcx),%ymm0
1052	vaesenc	%ymm0,%ymm1,%ymm1
1053	vbroadcasti32x4	80(%rcx),%ymm0
1054	vaesenc	%ymm0,%ymm1,%ymm1
1055	vbroadcasti32x4	96(%rcx),%ymm0
1056	vaesenc	%ymm0,%ymm1,%ymm1
1057	vbroadcasti32x4	112(%rcx),%ymm0
1058	vaesenc	%ymm0,%ymm1,%ymm1
1059	vbroadcasti32x4	128(%rcx),%ymm0
1060	vaesenc	%ymm0,%ymm1,%ymm1
1061	vbroadcasti32x4	144(%rcx),%ymm0
1062	vaesenc	%ymm0,%ymm1,%ymm1
1063	vbroadcasti32x4	160(%rcx),%ymm0
1064	vaesenclast	%ymm0,%ymm1,%ymm1
1065	vpxorq	%ymm9,%ymm1,%ymm1
1066	vmovdqu8	%xmm1,0(%rsi)
1067	addq	$16,%rsi
1068
1069	vmovdqa	%xmm1,%xmm8
1070	vextracti32x4	$1,%zmm9,%xmm0
1071	andq	$0xf,%rdx
1072	je	.L_ret_hEgxyDlCngwrfFe
1073	jmp	.L_steal_cipher_hEgxyDlCngwrfFe
1074.cfi_endproc
1075.globl	aesni_xts_128_decrypt_avx512
1076.hidden	aesni_xts_128_decrypt_avx512
1077.type	aesni_xts_128_decrypt_avx512,@function
1078.align	32
1079aesni_xts_128_decrypt_avx512:
1080.cfi_startproc
1081.byte	243,15,30,250
1082	pushq	%rbp
1083	movq	%rsp,%rbp
1084	subq	$136,%rsp
1085	andq	$0xffffffffffffffc0,%rsp
1086	movq	%rbx,128(%rsp)
1087	movq	$0x87,%r10
1088	vmovdqu	(%r9),%xmm1
1089	vpxor	(%r8),%xmm1,%xmm1
1090	vaesenc	16(%r8),%xmm1,%xmm1
1091	vaesenc	32(%r8),%xmm1,%xmm1
1092	vaesenc	48(%r8),%xmm1,%xmm1
1093	vaesenc	64(%r8),%xmm1,%xmm1
1094	vaesenc	80(%r8),%xmm1,%xmm1
1095	vaesenc	96(%r8),%xmm1,%xmm1
1096	vaesenc	112(%r8),%xmm1,%xmm1
1097	vaesenc	128(%r8),%xmm1,%xmm1
1098	vaesenc	144(%r8),%xmm1,%xmm1
1099	vaesenclast	160(%r8),%xmm1,%xmm1
1100	vmovdqa	%xmm1,(%rsp)
1101
1102	cmpq	$0x80,%rdx
1103	jb	.L_less_than_128_bytes_amivrujEyduiFoi
1104	vpbroadcastq	%r10,%zmm25
1105	cmpq	$0x100,%rdx
1106	jge	.L_start_by16_amivrujEyduiFoi
1107	jmp	.L_start_by8_amivrujEyduiFoi
1108
1109.L_do_n_blocks_amivrujEyduiFoi:
1110	cmpq	$0x0,%rdx
1111	je	.L_ret_amivrujEyduiFoi
1112	cmpq	$0x70,%rdx
1113	jge	.L_remaining_num_blocks_is_7_amivrujEyduiFoi
1114	cmpq	$0x60,%rdx
1115	jge	.L_remaining_num_blocks_is_6_amivrujEyduiFoi
1116	cmpq	$0x50,%rdx
1117	jge	.L_remaining_num_blocks_is_5_amivrujEyduiFoi
1118	cmpq	$0x40,%rdx
1119	jge	.L_remaining_num_blocks_is_4_amivrujEyduiFoi
1120	cmpq	$0x30,%rdx
1121	jge	.L_remaining_num_blocks_is_3_amivrujEyduiFoi
1122	cmpq	$0x20,%rdx
1123	jge	.L_remaining_num_blocks_is_2_amivrujEyduiFoi
1124	cmpq	$0x10,%rdx
1125	jge	.L_remaining_num_blocks_is_1_amivrujEyduiFoi
1126
1127
1128	vmovdqu	%xmm5,%xmm1
1129
1130	vpxor	%xmm9,%xmm1,%xmm1
1131	vmovdqu	(%rcx),%xmm0
1132	vpxor	%xmm0,%xmm1,%xmm1
1133	vmovdqu	16(%rcx),%xmm0
1134	vaesdec	%xmm0,%xmm1,%xmm1
1135	vmovdqu	32(%rcx),%xmm0
1136	vaesdec	%xmm0,%xmm1,%xmm1
1137	vmovdqu	48(%rcx),%xmm0
1138	vaesdec	%xmm0,%xmm1,%xmm1
1139	vmovdqu	64(%rcx),%xmm0
1140	vaesdec	%xmm0,%xmm1,%xmm1
1141	vmovdqu	80(%rcx),%xmm0
1142	vaesdec	%xmm0,%xmm1,%xmm1
1143	vmovdqu	96(%rcx),%xmm0
1144	vaesdec	%xmm0,%xmm1,%xmm1
1145	vmovdqu	112(%rcx),%xmm0
1146	vaesdec	%xmm0,%xmm1,%xmm1
1147	vmovdqu	128(%rcx),%xmm0
1148	vaesdec	%xmm0,%xmm1,%xmm1
1149	vmovdqu	144(%rcx),%xmm0
1150	vaesdec	%xmm0,%xmm1,%xmm1
1151	vmovdqu	160(%rcx),%xmm0
1152	vaesdeclast	%xmm0,%xmm1,%xmm1
1153	vpxor	%xmm9,%xmm1,%xmm1
1154	vmovdqu	%xmm1,-16(%rsi)
1155	vmovdqa	%xmm1,%xmm8
1156
1157
1158	movq	$0x1,%r8
1159	kmovq	%r8,%k1
1160	vpsllq	$0x3f,%xmm9,%xmm13
1161	vpsraq	$0x3f,%xmm13,%xmm14
1162	vpandq	%xmm25,%xmm14,%xmm5
1163	vpxorq	%xmm5,%xmm9,%xmm9{%k1}
1164	vpsrldq	$0x8,%xmm9,%xmm10
1165.byte	98, 211, 181, 8, 115, 194, 1
1166	vpslldq	$0x8,%xmm13,%xmm13
1167	vpxorq	%xmm13,%xmm0,%xmm0
1168	jmp	.L_steal_cipher_amivrujEyduiFoi
1169
1170.L_remaining_num_blocks_is_7_amivrujEyduiFoi:
1171	movq	$0xffffffffffffffff,%r8
1172	shrq	$0x10,%r8
1173	kmovq	%r8,%k1
1174	vmovdqu8	(%rdi),%zmm1
1175	vmovdqu8	64(%rdi),%zmm2{%k1}
1176	addq	$0x70,%rdi
1177	andq	$0xf,%rdx
1178	je	.L_done_7_remain_amivrujEyduiFoi
1179	vextracti32x4	$0x2,%zmm10,%xmm12
1180	vextracti32x4	$0x3,%zmm10,%xmm13
1181	vinserti32x4	$0x2,%xmm13,%zmm10,%zmm10
1182
1183	vpxorq	%zmm9,%zmm1,%zmm1
1184	vpxorq	%zmm10,%zmm2,%zmm2
1185
1186
1187	vbroadcasti32x4	(%rcx),%zmm0
1188	vpxorq	%zmm0,%zmm1,%zmm1
1189	vpxorq	%zmm0,%zmm2,%zmm2
1190	vbroadcasti32x4	16(%rcx),%zmm0
1191	vaesdec	%zmm0,%zmm1,%zmm1
1192	vaesdec	%zmm0,%zmm2,%zmm2
1193
1194
1195	vbroadcasti32x4	32(%rcx),%zmm0
1196	vaesdec	%zmm0,%zmm1,%zmm1
1197	vaesdec	%zmm0,%zmm2,%zmm2
1198
1199
1200	vbroadcasti32x4	48(%rcx),%zmm0
1201	vaesdec	%zmm0,%zmm1,%zmm1
1202	vaesdec	%zmm0,%zmm2,%zmm2
1203
1204	vbroadcasti32x4	64(%rcx),%zmm0
1205	vaesdec	%zmm0,%zmm1,%zmm1
1206	vaesdec	%zmm0,%zmm2,%zmm2
1207
1208
1209	vbroadcasti32x4	80(%rcx),%zmm0
1210	vaesdec	%zmm0,%zmm1,%zmm1
1211	vaesdec	%zmm0,%zmm2,%zmm2
1212
1213
1214	vbroadcasti32x4	96(%rcx),%zmm0
1215	vaesdec	%zmm0,%zmm1,%zmm1
1216	vaesdec	%zmm0,%zmm2,%zmm2
1217
1218
1219	vbroadcasti32x4	112(%rcx),%zmm0
1220	vaesdec	%zmm0,%zmm1,%zmm1
1221	vaesdec	%zmm0,%zmm2,%zmm2
1222
1223
1224	vbroadcasti32x4	128(%rcx),%zmm0
1225	vaesdec	%zmm0,%zmm1,%zmm1
1226	vaesdec	%zmm0,%zmm2,%zmm2
1227
1228
1229	vbroadcasti32x4	144(%rcx),%zmm0
1230	vaesdec	%zmm0,%zmm1,%zmm1
1231	vaesdec	%zmm0,%zmm2,%zmm2
1232
1233
1234	vbroadcasti32x4	160(%rcx),%zmm0
1235	vaesdeclast	%zmm0,%zmm1,%zmm1
1236	vaesdeclast	%zmm0,%zmm2,%zmm2
1237
1238	vpxorq	%zmm9,%zmm1,%zmm1
1239	vpxorq	%zmm10,%zmm2,%zmm2
1240
1241
1242	vmovdqa32	%zmm15,%zmm9
1243	vmovdqa32	%zmm16,%zmm10
1244	vmovdqu8	%zmm1,(%rsi)
1245	vmovdqu8	%zmm2,64(%rsi){%k1}
1246	addq	$0x70,%rsi
1247	vextracti32x4	$0x2,%zmm2,%xmm8
1248	vmovdqa	%xmm12,%xmm0
1249	jmp	.L_steal_cipher_amivrujEyduiFoi
1250
1251.L_done_7_remain_amivrujEyduiFoi:
1252
1253	vpxorq	%zmm9,%zmm1,%zmm1
1254	vpxorq	%zmm10,%zmm2,%zmm2
1255
1256
1257	vbroadcasti32x4	(%rcx),%zmm0
1258	vpxorq	%zmm0,%zmm1,%zmm1
1259	vpxorq	%zmm0,%zmm2,%zmm2
1260	vbroadcasti32x4	16(%rcx),%zmm0
1261	vaesdec	%zmm0,%zmm1,%zmm1
1262	vaesdec	%zmm0,%zmm2,%zmm2
1263
1264
1265	vbroadcasti32x4	32(%rcx),%zmm0
1266	vaesdec	%zmm0,%zmm1,%zmm1
1267	vaesdec	%zmm0,%zmm2,%zmm2
1268
1269
1270	vbroadcasti32x4	48(%rcx),%zmm0
1271	vaesdec	%zmm0,%zmm1,%zmm1
1272	vaesdec	%zmm0,%zmm2,%zmm2
1273
1274	vbroadcasti32x4	64(%rcx),%zmm0
1275	vaesdec	%zmm0,%zmm1,%zmm1
1276	vaesdec	%zmm0,%zmm2,%zmm2
1277
1278
1279	vbroadcasti32x4	80(%rcx),%zmm0
1280	vaesdec	%zmm0,%zmm1,%zmm1
1281	vaesdec	%zmm0,%zmm2,%zmm2
1282
1283
1284	vbroadcasti32x4	96(%rcx),%zmm0
1285	vaesdec	%zmm0,%zmm1,%zmm1
1286	vaesdec	%zmm0,%zmm2,%zmm2
1287
1288
1289	vbroadcasti32x4	112(%rcx),%zmm0
1290	vaesdec	%zmm0,%zmm1,%zmm1
1291	vaesdec	%zmm0,%zmm2,%zmm2
1292
1293
1294	vbroadcasti32x4	128(%rcx),%zmm0
1295	vaesdec	%zmm0,%zmm1,%zmm1
1296	vaesdec	%zmm0,%zmm2,%zmm2
1297
1298
1299	vbroadcasti32x4	144(%rcx),%zmm0
1300	vaesdec	%zmm0,%zmm1,%zmm1
1301	vaesdec	%zmm0,%zmm2,%zmm2
1302
1303
1304	vbroadcasti32x4	160(%rcx),%zmm0
1305	vaesdeclast	%zmm0,%zmm1,%zmm1
1306	vaesdeclast	%zmm0,%zmm2,%zmm2
1307
1308	vpxorq	%zmm9,%zmm1,%zmm1
1309	vpxorq	%zmm10,%zmm2,%zmm2
1310
1311
1312	vmovdqa32	%zmm15,%zmm9
1313	vmovdqa32	%zmm16,%zmm10
1314	vmovdqu8	%zmm1,(%rsi)
1315	vmovdqu8	%zmm2,64(%rsi){%k1}
1316	jmp	.L_ret_amivrujEyduiFoi
1317
1318.L_remaining_num_blocks_is_6_amivrujEyduiFoi:
1319	vmovdqu8	(%rdi),%zmm1
1320	vmovdqu8	64(%rdi),%ymm2
1321	addq	$0x60,%rdi
1322	andq	$0xf,%rdx
1323	je	.L_done_6_remain_amivrujEyduiFoi
1324	vextracti32x4	$0x1,%zmm10,%xmm12
1325	vextracti32x4	$0x2,%zmm10,%xmm13
1326	vinserti32x4	$0x1,%xmm13,%zmm10,%zmm10
1327
1328	vpxorq	%zmm9,%zmm1,%zmm1
1329	vpxorq	%zmm10,%zmm2,%zmm2
1330
1331
1332	vbroadcasti32x4	(%rcx),%zmm0
1333	vpxorq	%zmm0,%zmm1,%zmm1
1334	vpxorq	%zmm0,%zmm2,%zmm2
1335	vbroadcasti32x4	16(%rcx),%zmm0
1336	vaesdec	%zmm0,%zmm1,%zmm1
1337	vaesdec	%zmm0,%zmm2,%zmm2
1338
1339
1340	vbroadcasti32x4	32(%rcx),%zmm0
1341	vaesdec	%zmm0,%zmm1,%zmm1
1342	vaesdec	%zmm0,%zmm2,%zmm2
1343
1344
1345	vbroadcasti32x4	48(%rcx),%zmm0
1346	vaesdec	%zmm0,%zmm1,%zmm1
1347	vaesdec	%zmm0,%zmm2,%zmm2
1348
1349	vbroadcasti32x4	64(%rcx),%zmm0
1350	vaesdec	%zmm0,%zmm1,%zmm1
1351	vaesdec	%zmm0,%zmm2,%zmm2
1352
1353
1354	vbroadcasti32x4	80(%rcx),%zmm0
1355	vaesdec	%zmm0,%zmm1,%zmm1
1356	vaesdec	%zmm0,%zmm2,%zmm2
1357
1358
1359	vbroadcasti32x4	96(%rcx),%zmm0
1360	vaesdec	%zmm0,%zmm1,%zmm1
1361	vaesdec	%zmm0,%zmm2,%zmm2
1362
1363
1364	vbroadcasti32x4	112(%rcx),%zmm0
1365	vaesdec	%zmm0,%zmm1,%zmm1
1366	vaesdec	%zmm0,%zmm2,%zmm2
1367
1368
1369	vbroadcasti32x4	128(%rcx),%zmm0
1370	vaesdec	%zmm0,%zmm1,%zmm1
1371	vaesdec	%zmm0,%zmm2,%zmm2
1372
1373
1374	vbroadcasti32x4	144(%rcx),%zmm0
1375	vaesdec	%zmm0,%zmm1,%zmm1
1376	vaesdec	%zmm0,%zmm2,%zmm2
1377
1378
1379	vbroadcasti32x4	160(%rcx),%zmm0
1380	vaesdeclast	%zmm0,%zmm1,%zmm1
1381	vaesdeclast	%zmm0,%zmm2,%zmm2
1382
1383	vpxorq	%zmm9,%zmm1,%zmm1
1384	vpxorq	%zmm10,%zmm2,%zmm2
1385
1386
1387	vmovdqa32	%zmm15,%zmm9
1388	vmovdqa32	%zmm16,%zmm10
1389	vmovdqu8	%zmm1,(%rsi)
1390	vmovdqu8	%ymm2,64(%rsi)
1391	addq	$0x60,%rsi
1392	vextracti32x4	$0x1,%zmm2,%xmm8
1393	vmovdqa	%xmm12,%xmm0
1394	jmp	.L_steal_cipher_amivrujEyduiFoi
1395
1396.L_done_6_remain_amivrujEyduiFoi:
1397
1398	vpxorq	%zmm9,%zmm1,%zmm1
1399	vpxorq	%zmm10,%zmm2,%zmm2
1400
1401
1402	vbroadcasti32x4	(%rcx),%zmm0
1403	vpxorq	%zmm0,%zmm1,%zmm1
1404	vpxorq	%zmm0,%zmm2,%zmm2
1405	vbroadcasti32x4	16(%rcx),%zmm0
1406	vaesdec	%zmm0,%zmm1,%zmm1
1407	vaesdec	%zmm0,%zmm2,%zmm2
1408
1409
1410	vbroadcasti32x4	32(%rcx),%zmm0
1411	vaesdec	%zmm0,%zmm1,%zmm1
1412	vaesdec	%zmm0,%zmm2,%zmm2
1413
1414
1415	vbroadcasti32x4	48(%rcx),%zmm0
1416	vaesdec	%zmm0,%zmm1,%zmm1
1417	vaesdec	%zmm0,%zmm2,%zmm2
1418
1419	vbroadcasti32x4	64(%rcx),%zmm0
1420	vaesdec	%zmm0,%zmm1,%zmm1
1421	vaesdec	%zmm0,%zmm2,%zmm2
1422
1423
1424	vbroadcasti32x4	80(%rcx),%zmm0
1425	vaesdec	%zmm0,%zmm1,%zmm1
1426	vaesdec	%zmm0,%zmm2,%zmm2
1427
1428
1429	vbroadcasti32x4	96(%rcx),%zmm0
1430	vaesdec	%zmm0,%zmm1,%zmm1
1431	vaesdec	%zmm0,%zmm2,%zmm2
1432
1433
1434	vbroadcasti32x4	112(%rcx),%zmm0
1435	vaesdec	%zmm0,%zmm1,%zmm1
1436	vaesdec	%zmm0,%zmm2,%zmm2
1437
1438
1439	vbroadcasti32x4	128(%rcx),%zmm0
1440	vaesdec	%zmm0,%zmm1,%zmm1
1441	vaesdec	%zmm0,%zmm2,%zmm2
1442
1443
1444	vbroadcasti32x4	144(%rcx),%zmm0
1445	vaesdec	%zmm0,%zmm1,%zmm1
1446	vaesdec	%zmm0,%zmm2,%zmm2
1447
1448
1449	vbroadcasti32x4	160(%rcx),%zmm0
1450	vaesdeclast	%zmm0,%zmm1,%zmm1
1451	vaesdeclast	%zmm0,%zmm2,%zmm2
1452
1453	vpxorq	%zmm9,%zmm1,%zmm1
1454	vpxorq	%zmm10,%zmm2,%zmm2
1455
1456
1457	vmovdqa32	%zmm15,%zmm9
1458	vmovdqa32	%zmm16,%zmm10
1459	vmovdqu8	%zmm1,(%rsi)
1460	vmovdqu8	%ymm2,64(%rsi)
1461	jmp	.L_ret_amivrujEyduiFoi
1462
1463.L_remaining_num_blocks_is_5_amivrujEyduiFoi:
1464	vmovdqu8	(%rdi),%zmm1
1465	vmovdqu	64(%rdi),%xmm2
1466	addq	$0x50,%rdi
1467	andq	$0xf,%rdx
1468	je	.L_done_5_remain_amivrujEyduiFoi
1469	vmovdqa	%xmm10,%xmm12
1470	vextracti32x4	$0x1,%zmm10,%xmm10
1471
1472	vpxorq	%zmm9,%zmm1,%zmm1
1473	vpxorq	%zmm10,%zmm2,%zmm2
1474
1475
1476	vbroadcasti32x4	(%rcx),%zmm0
1477	vpxorq	%zmm0,%zmm1,%zmm1
1478	vpxorq	%zmm0,%zmm2,%zmm2
1479	vbroadcasti32x4	16(%rcx),%zmm0
1480	vaesdec	%zmm0,%zmm1,%zmm1
1481	vaesdec	%zmm0,%zmm2,%zmm2
1482
1483
1484	vbroadcasti32x4	32(%rcx),%zmm0
1485	vaesdec	%zmm0,%zmm1,%zmm1
1486	vaesdec	%zmm0,%zmm2,%zmm2
1487
1488
1489	vbroadcasti32x4	48(%rcx),%zmm0
1490	vaesdec	%zmm0,%zmm1,%zmm1
1491	vaesdec	%zmm0,%zmm2,%zmm2
1492
1493	vbroadcasti32x4	64(%rcx),%zmm0
1494	vaesdec	%zmm0,%zmm1,%zmm1
1495	vaesdec	%zmm0,%zmm2,%zmm2
1496
1497
1498	vbroadcasti32x4	80(%rcx),%zmm0
1499	vaesdec	%zmm0,%zmm1,%zmm1
1500	vaesdec	%zmm0,%zmm2,%zmm2
1501
1502
1503	vbroadcasti32x4	96(%rcx),%zmm0
1504	vaesdec	%zmm0,%zmm1,%zmm1
1505	vaesdec	%zmm0,%zmm2,%zmm2
1506
1507
1508	vbroadcasti32x4	112(%rcx),%zmm0
1509	vaesdec	%zmm0,%zmm1,%zmm1
1510	vaesdec	%zmm0,%zmm2,%zmm2
1511
1512
1513	vbroadcasti32x4	128(%rcx),%zmm0
1514	vaesdec	%zmm0,%zmm1,%zmm1
1515	vaesdec	%zmm0,%zmm2,%zmm2
1516
1517
1518	vbroadcasti32x4	144(%rcx),%zmm0
1519	vaesdec	%zmm0,%zmm1,%zmm1
1520	vaesdec	%zmm0,%zmm2,%zmm2
1521
1522
1523	vbroadcasti32x4	160(%rcx),%zmm0
1524	vaesdeclast	%zmm0,%zmm1,%zmm1
1525	vaesdeclast	%zmm0,%zmm2,%zmm2
1526
1527	vpxorq	%zmm9,%zmm1,%zmm1
1528	vpxorq	%zmm10,%zmm2,%zmm2
1529
1530
1531	vmovdqa32	%zmm15,%zmm9
1532	vmovdqa32	%zmm16,%zmm10
1533	vmovdqu8	%zmm1,(%rsi)
1534	vmovdqu	%xmm2,64(%rsi)
1535	addq	$0x50,%rsi
1536	vmovdqa	%xmm2,%xmm8
1537	vmovdqa	%xmm12,%xmm0
1538	jmp	.L_steal_cipher_amivrujEyduiFoi
1539
1540.L_done_5_remain_amivrujEyduiFoi:
1541
1542	vpxorq	%zmm9,%zmm1,%zmm1
1543	vpxorq	%zmm10,%zmm2,%zmm2
1544
1545
1546	vbroadcasti32x4	(%rcx),%zmm0
1547	vpxorq	%zmm0,%zmm1,%zmm1
1548	vpxorq	%zmm0,%zmm2,%zmm2
1549	vbroadcasti32x4	16(%rcx),%zmm0
1550	vaesdec	%zmm0,%zmm1,%zmm1
1551	vaesdec	%zmm0,%zmm2,%zmm2
1552
1553
1554	vbroadcasti32x4	32(%rcx),%zmm0
1555	vaesdec	%zmm0,%zmm1,%zmm1
1556	vaesdec	%zmm0,%zmm2,%zmm2
1557
1558
1559	vbroadcasti32x4	48(%rcx),%zmm0
1560	vaesdec	%zmm0,%zmm1,%zmm1
1561	vaesdec	%zmm0,%zmm2,%zmm2
1562
1563	vbroadcasti32x4	64(%rcx),%zmm0
1564	vaesdec	%zmm0,%zmm1,%zmm1
1565	vaesdec	%zmm0,%zmm2,%zmm2
1566
1567
1568	vbroadcasti32x4	80(%rcx),%zmm0
1569	vaesdec	%zmm0,%zmm1,%zmm1
1570	vaesdec	%zmm0,%zmm2,%zmm2
1571
1572
1573	vbroadcasti32x4	96(%rcx),%zmm0
1574	vaesdec	%zmm0,%zmm1,%zmm1
1575	vaesdec	%zmm0,%zmm2,%zmm2
1576
1577
1578	vbroadcasti32x4	112(%rcx),%zmm0
1579	vaesdec	%zmm0,%zmm1,%zmm1
1580	vaesdec	%zmm0,%zmm2,%zmm2
1581
1582
1583	vbroadcasti32x4	128(%rcx),%zmm0
1584	vaesdec	%zmm0,%zmm1,%zmm1
1585	vaesdec	%zmm0,%zmm2,%zmm2
1586
1587
1588	vbroadcasti32x4	144(%rcx),%zmm0
1589	vaesdec	%zmm0,%zmm1,%zmm1
1590	vaesdec	%zmm0,%zmm2,%zmm2
1591
1592
1593	vbroadcasti32x4	160(%rcx),%zmm0
1594	vaesdeclast	%zmm0,%zmm1,%zmm1
1595	vaesdeclast	%zmm0,%zmm2,%zmm2
1596
1597	vpxorq	%zmm9,%zmm1,%zmm1
1598	vpxorq	%zmm10,%zmm2,%zmm2
1599
1600
1601	vmovdqa32	%zmm15,%zmm9
1602	vmovdqa32	%zmm16,%zmm10
1603	vmovdqu8	%zmm1,(%rsi)
1604	vmovdqu8	%xmm2,64(%rsi)
1605	jmp	.L_ret_amivrujEyduiFoi
1606
1607.L_remaining_num_blocks_is_4_amivrujEyduiFoi:
1608	vmovdqu8	(%rdi),%zmm1
1609	addq	$0x40,%rdi
1610	andq	$0xf,%rdx
1611	je	.L_done_4_remain_amivrujEyduiFoi
1612	vextracti32x4	$0x3,%zmm9,%xmm12
1613	vinserti32x4	$0x3,%xmm10,%zmm9,%zmm9
1614
1615	vpxorq	%zmm9,%zmm1,%zmm1
1616	vpxorq	%zmm10,%zmm2,%zmm2
1617
1618
1619	vbroadcasti32x4	(%rcx),%zmm0
1620	vpxorq	%zmm0,%zmm1,%zmm1
1621	vpxorq	%zmm0,%zmm2,%zmm2
1622	vbroadcasti32x4	16(%rcx),%zmm0
1623	vaesdec	%zmm0,%zmm1,%zmm1
1624	vaesdec	%zmm0,%zmm2,%zmm2
1625
1626
1627	vbroadcasti32x4	32(%rcx),%zmm0
1628	vaesdec	%zmm0,%zmm1,%zmm1
1629	vaesdec	%zmm0,%zmm2,%zmm2
1630
1631
1632	vbroadcasti32x4	48(%rcx),%zmm0
1633	vaesdec	%zmm0,%zmm1,%zmm1
1634	vaesdec	%zmm0,%zmm2,%zmm2
1635
1636	vbroadcasti32x4	64(%rcx),%zmm0
1637	vaesdec	%zmm0,%zmm1,%zmm1
1638	vaesdec	%zmm0,%zmm2,%zmm2
1639
1640
1641	vbroadcasti32x4	80(%rcx),%zmm0
1642	vaesdec	%zmm0,%zmm1,%zmm1
1643	vaesdec	%zmm0,%zmm2,%zmm2
1644
1645
1646	vbroadcasti32x4	96(%rcx),%zmm0
1647	vaesdec	%zmm0,%zmm1,%zmm1
1648	vaesdec	%zmm0,%zmm2,%zmm2
1649
1650
1651	vbroadcasti32x4	112(%rcx),%zmm0
1652	vaesdec	%zmm0,%zmm1,%zmm1
1653	vaesdec	%zmm0,%zmm2,%zmm2
1654
1655
1656	vbroadcasti32x4	128(%rcx),%zmm0
1657	vaesdec	%zmm0,%zmm1,%zmm1
1658	vaesdec	%zmm0,%zmm2,%zmm2
1659
1660
1661	vbroadcasti32x4	144(%rcx),%zmm0
1662	vaesdec	%zmm0,%zmm1,%zmm1
1663	vaesdec	%zmm0,%zmm2,%zmm2
1664
1665
1666	vbroadcasti32x4	160(%rcx),%zmm0
1667	vaesdeclast	%zmm0,%zmm1,%zmm1
1668	vaesdeclast	%zmm0,%zmm2,%zmm2
1669
1670	vpxorq	%zmm9,%zmm1,%zmm1
1671	vpxorq	%zmm10,%zmm2,%zmm2
1672
1673
1674	vmovdqa32	%zmm15,%zmm9
1675	vmovdqa32	%zmm16,%zmm10
1676	vmovdqu8	%zmm1,(%rsi)
1677	addq	$0x40,%rsi
1678	vextracti32x4	$0x3,%zmm1,%xmm8
1679	vmovdqa	%xmm12,%xmm0
1680	jmp	.L_steal_cipher_amivrujEyduiFoi
1681
1682.L_done_4_remain_amivrujEyduiFoi:
1683
1684	vpxorq	%zmm9,%zmm1,%zmm1
1685	vpxorq	%zmm10,%zmm2,%zmm2
1686
1687
1688	vbroadcasti32x4	(%rcx),%zmm0
1689	vpxorq	%zmm0,%zmm1,%zmm1
1690	vpxorq	%zmm0,%zmm2,%zmm2
1691	vbroadcasti32x4	16(%rcx),%zmm0
1692	vaesdec	%zmm0,%zmm1,%zmm1
1693	vaesdec	%zmm0,%zmm2,%zmm2
1694
1695
1696	vbroadcasti32x4	32(%rcx),%zmm0
1697	vaesdec	%zmm0,%zmm1,%zmm1
1698	vaesdec	%zmm0,%zmm2,%zmm2
1699
1700
1701	vbroadcasti32x4	48(%rcx),%zmm0
1702	vaesdec	%zmm0,%zmm1,%zmm1
1703	vaesdec	%zmm0,%zmm2,%zmm2
1704
1705	vbroadcasti32x4	64(%rcx),%zmm0
1706	vaesdec	%zmm0,%zmm1,%zmm1
1707	vaesdec	%zmm0,%zmm2,%zmm2
1708
1709
1710	vbroadcasti32x4	80(%rcx),%zmm0
1711	vaesdec	%zmm0,%zmm1,%zmm1
1712	vaesdec	%zmm0,%zmm2,%zmm2
1713
1714
1715	vbroadcasti32x4	96(%rcx),%zmm0
1716	vaesdec	%zmm0,%zmm1,%zmm1
1717	vaesdec	%zmm0,%zmm2,%zmm2
1718
1719
1720	vbroadcasti32x4	112(%rcx),%zmm0
1721	vaesdec	%zmm0,%zmm1,%zmm1
1722	vaesdec	%zmm0,%zmm2,%zmm2
1723
1724
1725	vbroadcasti32x4	128(%rcx),%zmm0
1726	vaesdec	%zmm0,%zmm1,%zmm1
1727	vaesdec	%zmm0,%zmm2,%zmm2
1728
1729
1730	vbroadcasti32x4	144(%rcx),%zmm0
1731	vaesdec	%zmm0,%zmm1,%zmm1
1732	vaesdec	%zmm0,%zmm2,%zmm2
1733
1734
1735	vbroadcasti32x4	160(%rcx),%zmm0
1736	vaesdeclast	%zmm0,%zmm1,%zmm1
1737	vaesdeclast	%zmm0,%zmm2,%zmm2
1738
1739	vpxorq	%zmm9,%zmm1,%zmm1
1740	vpxorq	%zmm10,%zmm2,%zmm2
1741
1742
1743	vmovdqa32	%zmm15,%zmm9
1744	vmovdqa32	%zmm16,%zmm10
1745	vmovdqu8	%zmm1,(%rsi)
1746	jmp	.L_ret_amivrujEyduiFoi
1747
1748.L_remaining_num_blocks_is_3_amivrujEyduiFoi:
1749	vmovdqu	(%rdi),%xmm1
1750	vmovdqu	16(%rdi),%xmm2
1751	vmovdqu	32(%rdi),%xmm3
1752	addq	$0x30,%rdi
1753	andq	$0xf,%rdx
1754	je	.L_done_3_remain_amivrujEyduiFoi
1755	vextracti32x4	$0x2,%zmm9,%xmm13
1756	vextracti32x4	$0x1,%zmm9,%xmm10
1757	vextracti32x4	$0x3,%zmm9,%xmm11
1758	vpxor	%xmm9,%xmm1,%xmm1
1759	vpxor	%xmm10,%xmm2,%xmm2
1760	vpxor	%xmm11,%xmm3,%xmm3
1761	vmovdqu	(%rcx),%xmm0
1762	vpxor	%xmm0,%xmm1,%xmm1
1763	vpxor	%xmm0,%xmm2,%xmm2
1764	vpxor	%xmm0,%xmm3,%xmm3
1765	vmovdqu	16(%rcx),%xmm0
1766	vaesdec	%xmm0,%xmm1,%xmm1
1767	vaesdec	%xmm0,%xmm2,%xmm2
1768	vaesdec	%xmm0,%xmm3,%xmm3
1769	vmovdqu	32(%rcx),%xmm0
1770	vaesdec	%xmm0,%xmm1,%xmm1
1771	vaesdec	%xmm0,%xmm2,%xmm2
1772	vaesdec	%xmm0,%xmm3,%xmm3
1773	vmovdqu	48(%rcx),%xmm0
1774	vaesdec	%xmm0,%xmm1,%xmm1
1775	vaesdec	%xmm0,%xmm2,%xmm2
1776	vaesdec	%xmm0,%xmm3,%xmm3
1777	vmovdqu	64(%rcx),%xmm0
1778	vaesdec	%xmm0,%xmm1,%xmm1
1779	vaesdec	%xmm0,%xmm2,%xmm2
1780	vaesdec	%xmm0,%xmm3,%xmm3
1781	vmovdqu	80(%rcx),%xmm0
1782	vaesdec	%xmm0,%xmm1,%xmm1
1783	vaesdec	%xmm0,%xmm2,%xmm2
1784	vaesdec	%xmm0,%xmm3,%xmm3
1785	vmovdqu	96(%rcx),%xmm0
1786	vaesdec	%xmm0,%xmm1,%xmm1
1787	vaesdec	%xmm0,%xmm2,%xmm2
1788	vaesdec	%xmm0,%xmm3,%xmm3
1789	vmovdqu	112(%rcx),%xmm0
1790	vaesdec	%xmm0,%xmm1,%xmm1
1791	vaesdec	%xmm0,%xmm2,%xmm2
1792	vaesdec	%xmm0,%xmm3,%xmm3
1793	vmovdqu	128(%rcx),%xmm0
1794	vaesdec	%xmm0,%xmm1,%xmm1
1795	vaesdec	%xmm0,%xmm2,%xmm2
1796	vaesdec	%xmm0,%xmm3,%xmm3
1797	vmovdqu	144(%rcx),%xmm0
1798	vaesdec	%xmm0,%xmm1,%xmm1
1799	vaesdec	%xmm0,%xmm2,%xmm2
1800	vaesdec	%xmm0,%xmm3,%xmm3
1801	vmovdqu	160(%rcx),%xmm0
1802	vaesdeclast	%xmm0,%xmm1,%xmm1
1803	vaesdeclast	%xmm0,%xmm2,%xmm2
1804	vaesdeclast	%xmm0,%xmm3,%xmm3
1805	vpxor	%xmm9,%xmm1,%xmm1
1806	vpxor	%xmm10,%xmm2,%xmm2
1807	vpxor	%xmm11,%xmm3,%xmm3
1808	vmovdqu	%xmm1,(%rsi)
1809	vmovdqu	%xmm2,16(%rsi)
1810	vmovdqu	%xmm3,32(%rsi)
1811	addq	$0x30,%rsi
1812	vmovdqa	%xmm3,%xmm8
1813	vmovdqa	%xmm13,%xmm0
1814	jmp	.L_steal_cipher_amivrujEyduiFoi
1815
1816.L_done_3_remain_amivrujEyduiFoi:
1817	vextracti32x4	$0x1,%zmm9,%xmm10
1818	vextracti32x4	$0x2,%zmm9,%xmm11
1819	vpxor	%xmm9,%xmm1,%xmm1
1820	vpxor	%xmm10,%xmm2,%xmm2
1821	vpxor	%xmm11,%xmm3,%xmm3
1822	vmovdqu	(%rcx),%xmm0
1823	vpxor	%xmm0,%xmm1,%xmm1
1824	vpxor	%xmm0,%xmm2,%xmm2
1825	vpxor	%xmm0,%xmm3,%xmm3
1826	vmovdqu	16(%rcx),%xmm0
1827	vaesdec	%xmm0,%xmm1,%xmm1
1828	vaesdec	%xmm0,%xmm2,%xmm2
1829	vaesdec	%xmm0,%xmm3,%xmm3
1830	vmovdqu	32(%rcx),%xmm0
1831	vaesdec	%xmm0,%xmm1,%xmm1
1832	vaesdec	%xmm0,%xmm2,%xmm2
1833	vaesdec	%xmm0,%xmm3,%xmm3
1834	vmovdqu	48(%rcx),%xmm0
1835	vaesdec	%xmm0,%xmm1,%xmm1
1836	vaesdec	%xmm0,%xmm2,%xmm2
1837	vaesdec	%xmm0,%xmm3,%xmm3
1838	vmovdqu	64(%rcx),%xmm0
1839	vaesdec	%xmm0,%xmm1,%xmm1
1840	vaesdec	%xmm0,%xmm2,%xmm2
1841	vaesdec	%xmm0,%xmm3,%xmm3
1842	vmovdqu	80(%rcx),%xmm0
1843	vaesdec	%xmm0,%xmm1,%xmm1
1844	vaesdec	%xmm0,%xmm2,%xmm2
1845	vaesdec	%xmm0,%xmm3,%xmm3
1846	vmovdqu	96(%rcx),%xmm0
1847	vaesdec	%xmm0,%xmm1,%xmm1
1848	vaesdec	%xmm0,%xmm2,%xmm2
1849	vaesdec	%xmm0,%xmm3,%xmm3
1850	vmovdqu	112(%rcx),%xmm0
1851	vaesdec	%xmm0,%xmm1,%xmm1
1852	vaesdec	%xmm0,%xmm2,%xmm2
1853	vaesdec	%xmm0,%xmm3,%xmm3
1854	vmovdqu	128(%rcx),%xmm0
1855	vaesdec	%xmm0,%xmm1,%xmm1
1856	vaesdec	%xmm0,%xmm2,%xmm2
1857	vaesdec	%xmm0,%xmm3,%xmm3
1858	vmovdqu	144(%rcx),%xmm0
1859	vaesdec	%xmm0,%xmm1,%xmm1
1860	vaesdec	%xmm0,%xmm2,%xmm2
1861	vaesdec	%xmm0,%xmm3,%xmm3
1862	vmovdqu	160(%rcx),%xmm0
1863	vaesdeclast	%xmm0,%xmm1,%xmm1
1864	vaesdeclast	%xmm0,%xmm2,%xmm2
1865	vaesdeclast	%xmm0,%xmm3,%xmm3
1866	vpxor	%xmm9,%xmm1,%xmm1
1867	vpxor	%xmm10,%xmm2,%xmm2
1868	vpxor	%xmm11,%xmm3,%xmm3
1869	vmovdqu	%xmm1,(%rsi)
1870	vmovdqu	%xmm2,16(%rsi)
1871	vmovdqu	%xmm3,32(%rsi)
1872	jmp	.L_ret_amivrujEyduiFoi
1873
1874.L_remaining_num_blocks_is_2_amivrujEyduiFoi:
1875	vmovdqu	(%rdi),%xmm1
1876	vmovdqu	16(%rdi),%xmm2
1877	addq	$0x20,%rdi
1878	andq	$0xf,%rdx
1879	je	.L_done_2_remain_amivrujEyduiFoi
1880	vextracti32x4	$0x2,%zmm9,%xmm10
1881	vextracti32x4	$0x1,%zmm9,%xmm12
1882	vpxor	%xmm9,%xmm1,%xmm1
1883	vpxor	%xmm10,%xmm2,%xmm2
1884	vmovdqu	(%rcx),%xmm0
1885	vpxor	%xmm0,%xmm1,%xmm1
1886	vpxor	%xmm0,%xmm2,%xmm2
1887	vmovdqu	16(%rcx),%xmm0
1888	vaesdec	%xmm0,%xmm1,%xmm1
1889	vaesdec	%xmm0,%xmm2,%xmm2
1890	vmovdqu	32(%rcx),%xmm0
1891	vaesdec	%xmm0,%xmm1,%xmm1
1892	vaesdec	%xmm0,%xmm2,%xmm2
1893	vmovdqu	48(%rcx),%xmm0
1894	vaesdec	%xmm0,%xmm1,%xmm1
1895	vaesdec	%xmm0,%xmm2,%xmm2
1896	vmovdqu	64(%rcx),%xmm0
1897	vaesdec	%xmm0,%xmm1,%xmm1
1898	vaesdec	%xmm0,%xmm2,%xmm2
1899	vmovdqu	80(%rcx),%xmm0
1900	vaesdec	%xmm0,%xmm1,%xmm1
1901	vaesdec	%xmm0,%xmm2,%xmm2
1902	vmovdqu	96(%rcx),%xmm0
1903	vaesdec	%xmm0,%xmm1,%xmm1
1904	vaesdec	%xmm0,%xmm2,%xmm2
1905	vmovdqu	112(%rcx),%xmm0
1906	vaesdec	%xmm0,%xmm1,%xmm1
1907	vaesdec	%xmm0,%xmm2,%xmm2
1908	vmovdqu	128(%rcx),%xmm0
1909	vaesdec	%xmm0,%xmm1,%xmm1
1910	vaesdec	%xmm0,%xmm2,%xmm2
1911	vmovdqu	144(%rcx),%xmm0
1912	vaesdec	%xmm0,%xmm1,%xmm1
1913	vaesdec	%xmm0,%xmm2,%xmm2
1914	vmovdqu	160(%rcx),%xmm0
1915	vaesdeclast	%xmm0,%xmm1,%xmm1
1916	vaesdeclast	%xmm0,%xmm2,%xmm2
1917	vpxor	%xmm9,%xmm1,%xmm1
1918	vpxor	%xmm10,%xmm2,%xmm2
1919	vmovdqu	%xmm1,(%rsi)
1920	vmovdqu	%xmm2,16(%rsi)
1921	addq	$0x20,%rsi
1922	vmovdqa	%xmm2,%xmm8
1923	vmovdqa	%xmm12,%xmm0
1924	jmp	.L_steal_cipher_amivrujEyduiFoi
1925
1926.L_done_2_remain_amivrujEyduiFoi:
1927	vextracti32x4	$0x1,%zmm9,%xmm10
1928	vpxor	%xmm9,%xmm1,%xmm1
1929	vpxor	%xmm10,%xmm2,%xmm2
1930	vmovdqu	(%rcx),%xmm0
1931	vpxor	%xmm0,%xmm1,%xmm1
1932	vpxor	%xmm0,%xmm2,%xmm2
1933	vmovdqu	16(%rcx),%xmm0
1934	vaesdec	%xmm0,%xmm1,%xmm1
1935	vaesdec	%xmm0,%xmm2,%xmm2
1936	vmovdqu	32(%rcx),%xmm0
1937	vaesdec	%xmm0,%xmm1,%xmm1
1938	vaesdec	%xmm0,%xmm2,%xmm2
1939	vmovdqu	48(%rcx),%xmm0
1940	vaesdec	%xmm0,%xmm1,%xmm1
1941	vaesdec	%xmm0,%xmm2,%xmm2
1942	vmovdqu	64(%rcx),%xmm0
1943	vaesdec	%xmm0,%xmm1,%xmm1
1944	vaesdec	%xmm0,%xmm2,%xmm2
1945	vmovdqu	80(%rcx),%xmm0
1946	vaesdec	%xmm0,%xmm1,%xmm1
1947	vaesdec	%xmm0,%xmm2,%xmm2
1948	vmovdqu	96(%rcx),%xmm0
1949	vaesdec	%xmm0,%xmm1,%xmm1
1950	vaesdec	%xmm0,%xmm2,%xmm2
1951	vmovdqu	112(%rcx),%xmm0
1952	vaesdec	%xmm0,%xmm1,%xmm1
1953	vaesdec	%xmm0,%xmm2,%xmm2
1954	vmovdqu	128(%rcx),%xmm0
1955	vaesdec	%xmm0,%xmm1,%xmm1
1956	vaesdec	%xmm0,%xmm2,%xmm2
1957	vmovdqu	144(%rcx),%xmm0
1958	vaesdec	%xmm0,%xmm1,%xmm1
1959	vaesdec	%xmm0,%xmm2,%xmm2
1960	vmovdqu	160(%rcx),%xmm0
1961	vaesdeclast	%xmm0,%xmm1,%xmm1
1962	vaesdeclast	%xmm0,%xmm2,%xmm2
1963	vpxor	%xmm9,%xmm1,%xmm1
1964	vpxor	%xmm10,%xmm2,%xmm2
1965	vmovdqu	%xmm1,(%rsi)
1966	vmovdqu	%xmm2,16(%rsi)
1967	jmp	.L_ret_amivrujEyduiFoi
1968
1969.L_remaining_num_blocks_is_1_amivrujEyduiFoi:
1970	vmovdqu	(%rdi),%xmm1
1971	addq	$0x10,%rdi
1972	andq	$0xf,%rdx
1973	je	.L_done_1_remain_amivrujEyduiFoi
1974	vextracti32x4	$0x1,%zmm9,%xmm11
1975	vpxor	%xmm11,%xmm1,%xmm1
1976	vmovdqu	(%rcx),%xmm0
1977	vpxor	%xmm0,%xmm1,%xmm1
1978	vmovdqu	16(%rcx),%xmm0
1979	vaesdec	%xmm0,%xmm1,%xmm1
1980	vmovdqu	32(%rcx),%xmm0
1981	vaesdec	%xmm0,%xmm1,%xmm1
1982	vmovdqu	48(%rcx),%xmm0
1983	vaesdec	%xmm0,%xmm1,%xmm1
1984	vmovdqu	64(%rcx),%xmm0
1985	vaesdec	%xmm0,%xmm1,%xmm1
1986	vmovdqu	80(%rcx),%xmm0
1987	vaesdec	%xmm0,%xmm1,%xmm1
1988	vmovdqu	96(%rcx),%xmm0
1989	vaesdec	%xmm0,%xmm1,%xmm1
1990	vmovdqu	112(%rcx),%xmm0
1991	vaesdec	%xmm0,%xmm1,%xmm1
1992	vmovdqu	128(%rcx),%xmm0
1993	vaesdec	%xmm0,%xmm1,%xmm1
1994	vmovdqu	144(%rcx),%xmm0
1995	vaesdec	%xmm0,%xmm1,%xmm1
1996	vmovdqu	160(%rcx),%xmm0
1997	vaesdeclast	%xmm0,%xmm1,%xmm1
1998	vpxor	%xmm11,%xmm1,%xmm1
1999	vmovdqu	%xmm1,(%rsi)
2000	addq	$0x10,%rsi
2001	vmovdqa	%xmm1,%xmm8
2002	vmovdqa	%xmm9,%xmm0
2003	jmp	.L_steal_cipher_amivrujEyduiFoi
2004
2005.L_done_1_remain_amivrujEyduiFoi:
2006	vpxor	%xmm9,%xmm1,%xmm1
2007	vmovdqu	(%rcx),%xmm0
2008	vpxor	%xmm0,%xmm1,%xmm1
2009	vmovdqu	16(%rcx),%xmm0
2010	vaesdec	%xmm0,%xmm1,%xmm1
2011	vmovdqu	32(%rcx),%xmm0
2012	vaesdec	%xmm0,%xmm1,%xmm1
2013	vmovdqu	48(%rcx),%xmm0
2014	vaesdec	%xmm0,%xmm1,%xmm1
2015	vmovdqu	64(%rcx),%xmm0
2016	vaesdec	%xmm0,%xmm1,%xmm1
2017	vmovdqu	80(%rcx),%xmm0
2018	vaesdec	%xmm0,%xmm1,%xmm1
2019	vmovdqu	96(%rcx),%xmm0
2020	vaesdec	%xmm0,%xmm1,%xmm1
2021	vmovdqu	112(%rcx),%xmm0
2022	vaesdec	%xmm0,%xmm1,%xmm1
2023	vmovdqu	128(%rcx),%xmm0
2024	vaesdec	%xmm0,%xmm1,%xmm1
2025	vmovdqu	144(%rcx),%xmm0
2026	vaesdec	%xmm0,%xmm1,%xmm1
2027	vmovdqu	160(%rcx),%xmm0
2028	vaesdeclast	%xmm0,%xmm1,%xmm1
2029	vpxor	%xmm9,%xmm1,%xmm1
2030	vmovdqu	%xmm1,(%rsi)
2031	jmp	.L_ret_amivrujEyduiFoi
2032
2033.L_start_by16_amivrujEyduiFoi:
2034	vbroadcasti32x4	(%rsp),%zmm0
2035	vbroadcasti32x4	shufb_15_7(%rip),%zmm8
2036	movq	$0xaa,%r8
2037	kmovq	%r8,%k2
2038
2039
2040	vpshufb	%zmm8,%zmm0,%zmm1
2041	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
2042	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
2043	vpclmulqdq	$0x0,%zmm25,%zmm2,%zmm3
2044	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
2045	vpxord	%zmm4,%zmm3,%zmm9
2046
2047
2048	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
2049	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
2050	vpclmulqdq	$0x0,%zmm25,%zmm6,%zmm7
2051	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
2052	vpxord	%zmm5,%zmm7,%zmm10
2053
2054
2055	vpsrldq	$0xf,%zmm9,%zmm13
2056	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
2057	vpslldq	$0x1,%zmm9,%zmm11
2058	vpxord	%zmm14,%zmm11,%zmm11
2059
2060	vpsrldq	$0xf,%zmm10,%zmm15
2061	vpclmulqdq	$0x0,%zmm25,%zmm15,%zmm16
2062	vpslldq	$0x1,%zmm10,%zmm12
2063	vpxord	%zmm16,%zmm12,%zmm12
2064
2065.L_main_loop_run_16_amivrujEyduiFoi:
2066	vmovdqu8	(%rdi),%zmm1
2067	vmovdqu8	64(%rdi),%zmm2
2068	vmovdqu8	128(%rdi),%zmm3
2069	vmovdqu8	192(%rdi),%zmm4
2070	vmovdqu8	240(%rdi),%xmm5
2071	addq	$0x100,%rdi
2072	vpxorq	%zmm9,%zmm1,%zmm1
2073	vpxorq	%zmm10,%zmm2,%zmm2
2074	vpxorq	%zmm11,%zmm3,%zmm3
2075	vpxorq	%zmm12,%zmm4,%zmm4
2076	vbroadcasti32x4	(%rcx),%zmm0
2077	vpxorq	%zmm0,%zmm1,%zmm1
2078	vpxorq	%zmm0,%zmm2,%zmm2
2079	vpxorq	%zmm0,%zmm3,%zmm3
2080	vpxorq	%zmm0,%zmm4,%zmm4
2081	vpsrldq	$0xf,%zmm11,%zmm13
2082	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
2083	vpslldq	$0x1,%zmm11,%zmm15
2084	vpxord	%zmm14,%zmm15,%zmm15
2085	vbroadcasti32x4	16(%rcx),%zmm0
2086	vaesdec	%zmm0,%zmm1,%zmm1
2087	vaesdec	%zmm0,%zmm2,%zmm2
2088	vaesdec	%zmm0,%zmm3,%zmm3
2089	vaesdec	%zmm0,%zmm4,%zmm4
2090	vbroadcasti32x4	32(%rcx),%zmm0
2091	vaesdec	%zmm0,%zmm1,%zmm1
2092	vaesdec	%zmm0,%zmm2,%zmm2
2093	vaesdec	%zmm0,%zmm3,%zmm3
2094	vaesdec	%zmm0,%zmm4,%zmm4
2095	vbroadcasti32x4	48(%rcx),%zmm0
2096	vaesdec	%zmm0,%zmm1,%zmm1
2097	vaesdec	%zmm0,%zmm2,%zmm2
2098	vaesdec	%zmm0,%zmm3,%zmm3
2099	vaesdec	%zmm0,%zmm4,%zmm4
2100	vpsrldq	$0xf,%zmm12,%zmm13
2101	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
2102	vpslldq	$0x1,%zmm12,%zmm16
2103	vpxord	%zmm14,%zmm16,%zmm16
2104	vbroadcasti32x4	64(%rcx),%zmm0
2105	vaesdec	%zmm0,%zmm1,%zmm1
2106	vaesdec	%zmm0,%zmm2,%zmm2
2107	vaesdec	%zmm0,%zmm3,%zmm3
2108	vaesdec	%zmm0,%zmm4,%zmm4
2109	vbroadcasti32x4	80(%rcx),%zmm0
2110	vaesdec	%zmm0,%zmm1,%zmm1
2111	vaesdec	%zmm0,%zmm2,%zmm2
2112	vaesdec	%zmm0,%zmm3,%zmm3
2113	vaesdec	%zmm0,%zmm4,%zmm4
2114	vbroadcasti32x4	96(%rcx),%zmm0
2115	vaesdec	%zmm0,%zmm1,%zmm1
2116	vaesdec	%zmm0,%zmm2,%zmm2
2117	vaesdec	%zmm0,%zmm3,%zmm3
2118	vaesdec	%zmm0,%zmm4,%zmm4
2119	vpsrldq	$0xf,%zmm15,%zmm13
2120	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
2121	vpslldq	$0x1,%zmm15,%zmm17
2122	vpxord	%zmm14,%zmm17,%zmm17
2123	vbroadcasti32x4	112(%rcx),%zmm0
2124	vaesdec	%zmm0,%zmm1,%zmm1
2125	vaesdec	%zmm0,%zmm2,%zmm2
2126	vaesdec	%zmm0,%zmm3,%zmm3
2127	vaesdec	%zmm0,%zmm4,%zmm4
2128	vbroadcasti32x4	128(%rcx),%zmm0
2129	vaesdec	%zmm0,%zmm1,%zmm1
2130	vaesdec	%zmm0,%zmm2,%zmm2
2131	vaesdec	%zmm0,%zmm3,%zmm3
2132	vaesdec	%zmm0,%zmm4,%zmm4
2133	vbroadcasti32x4	144(%rcx),%zmm0
2134	vaesdec	%zmm0,%zmm1,%zmm1
2135	vaesdec	%zmm0,%zmm2,%zmm2
2136	vaesdec	%zmm0,%zmm3,%zmm3
2137	vaesdec	%zmm0,%zmm4,%zmm4
2138	vpsrldq	$0xf,%zmm16,%zmm13
2139	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
2140	vpslldq	$0x1,%zmm16,%zmm18
2141	vpxord	%zmm14,%zmm18,%zmm18
2142	vbroadcasti32x4	160(%rcx),%zmm0
2143	vaesdeclast	%zmm0,%zmm1,%zmm1
2144	vaesdeclast	%zmm0,%zmm2,%zmm2
2145	vaesdeclast	%zmm0,%zmm3,%zmm3
2146	vaesdeclast	%zmm0,%zmm4,%zmm4
2147	vpxorq	%zmm9,%zmm1,%zmm1
2148	vpxorq	%zmm10,%zmm2,%zmm2
2149	vpxorq	%zmm11,%zmm3,%zmm3
2150	vpxorq	%zmm12,%zmm4,%zmm4
2151
2152	vmovdqa32	%zmm15,%zmm9
2153	vmovdqa32	%zmm16,%zmm10
2154	vmovdqa32	%zmm17,%zmm11
2155	vmovdqa32	%zmm18,%zmm12
2156	vmovdqu8	%zmm1,(%rsi)
2157	vmovdqu8	%zmm2,64(%rsi)
2158	vmovdqu8	%zmm3,128(%rsi)
2159	vmovdqu8	%zmm4,192(%rsi)
2160	addq	$0x100,%rsi
2161	subq	$0x100,%rdx
2162	cmpq	$0x100,%rdx
2163	jge	.L_main_loop_run_16_amivrujEyduiFoi
2164
2165	cmpq	$0x80,%rdx
2166	jge	.L_main_loop_run_8_amivrujEyduiFoi
2167	jmp	.L_do_n_blocks_amivrujEyduiFoi
2168
2169.L_start_by8_amivrujEyduiFoi:
2170
2171	vbroadcasti32x4	(%rsp),%zmm0
2172	vbroadcasti32x4	shufb_15_7(%rip),%zmm8
2173	movq	$0xaa,%r8
2174	kmovq	%r8,%k2
2175
2176
2177	vpshufb	%zmm8,%zmm0,%zmm1
2178	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
2179	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
2180	vpclmulqdq	$0x0,%zmm25,%zmm2,%zmm3
2181	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
2182	vpxord	%zmm4,%zmm3,%zmm9
2183
2184
2185	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
2186	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
2187	vpclmulqdq	$0x0,%zmm25,%zmm6,%zmm7
2188	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
2189	vpxord	%zmm5,%zmm7,%zmm10
2190
2191.L_main_loop_run_8_amivrujEyduiFoi:
2192	vmovdqu8	(%rdi),%zmm1
2193	vmovdqu8	64(%rdi),%zmm2
2194	vmovdqu8	112(%rdi),%xmm5
2195	addq	$0x80,%rdi
2196
2197	vpxorq	%zmm9,%zmm1,%zmm1
2198	vpxorq	%zmm10,%zmm2,%zmm2
2199
2200
2201	vbroadcasti32x4	(%rcx),%zmm0
2202	vpxorq	%zmm0,%zmm1,%zmm1
2203	vpxorq	%zmm0,%zmm2,%zmm2
2204	vpsrldq	$0xf,%zmm9,%zmm13
2205	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
2206	vpslldq	$0x1,%zmm9,%zmm15
2207	vpxord	%zmm14,%zmm15,%zmm15
2208	vbroadcasti32x4	16(%rcx),%zmm0
2209	vaesdec	%zmm0,%zmm1,%zmm1
2210	vaesdec	%zmm0,%zmm2,%zmm2
2211
2212
2213	vbroadcasti32x4	32(%rcx),%zmm0
2214	vaesdec	%zmm0,%zmm1,%zmm1
2215	vaesdec	%zmm0,%zmm2,%zmm2
2216
2217
2218	vbroadcasti32x4	48(%rcx),%zmm0
2219	vaesdec	%zmm0,%zmm1,%zmm1
2220	vaesdec	%zmm0,%zmm2,%zmm2
2221	vpsrldq	$0xf,%zmm10,%zmm13
2222	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
2223	vpslldq	$0x1,%zmm10,%zmm16
2224	vpxord	%zmm14,%zmm16,%zmm16
2225
2226	vbroadcasti32x4	64(%rcx),%zmm0
2227	vaesdec	%zmm0,%zmm1,%zmm1
2228	vaesdec	%zmm0,%zmm2,%zmm2
2229
2230
2231	vbroadcasti32x4	80(%rcx),%zmm0
2232	vaesdec	%zmm0,%zmm1,%zmm1
2233	vaesdec	%zmm0,%zmm2,%zmm2
2234
2235
2236	vbroadcasti32x4	96(%rcx),%zmm0
2237	vaesdec	%zmm0,%zmm1,%zmm1
2238	vaesdec	%zmm0,%zmm2,%zmm2
2239
2240
2241	vbroadcasti32x4	112(%rcx),%zmm0
2242	vaesdec	%zmm0,%zmm1,%zmm1
2243	vaesdec	%zmm0,%zmm2,%zmm2
2244
2245
2246	vbroadcasti32x4	128(%rcx),%zmm0
2247	vaesdec	%zmm0,%zmm1,%zmm1
2248	vaesdec	%zmm0,%zmm2,%zmm2
2249
2250
2251	vbroadcasti32x4	144(%rcx),%zmm0
2252	vaesdec	%zmm0,%zmm1,%zmm1
2253	vaesdec	%zmm0,%zmm2,%zmm2
2254
2255
2256	vbroadcasti32x4	160(%rcx),%zmm0
2257	vaesdeclast	%zmm0,%zmm1,%zmm1
2258	vaesdeclast	%zmm0,%zmm2,%zmm2
2259
2260	vpxorq	%zmm9,%zmm1,%zmm1
2261	vpxorq	%zmm10,%zmm2,%zmm2
2262
2263
2264	vmovdqa32	%zmm15,%zmm9
2265	vmovdqa32	%zmm16,%zmm10
2266	vmovdqu8	%zmm1,(%rsi)
2267	vmovdqu8	%zmm2,64(%rsi)
2268	addq	$0x80,%rsi
2269	subq	$0x80,%rdx
2270	cmpq	$0x80,%rdx
2271	jge	.L_main_loop_run_8_amivrujEyduiFoi
2272	jmp	.L_do_n_blocks_amivrujEyduiFoi
2273
2274.L_steal_cipher_amivrujEyduiFoi:
2275
2276	vmovdqa	%xmm8,%xmm2
2277
2278
2279	leaq	vpshufb_shf_table(%rip),%rax
2280	vmovdqu	(%rax,%rdx,1),%xmm10
2281	vpshufb	%xmm10,%xmm8,%xmm8
2282
2283
2284	vmovdqu	-16(%rdi,%rdx,1),%xmm3
2285	vmovdqu	%xmm8,-16(%rsi,%rdx,1)
2286
2287
2288	leaq	vpshufb_shf_table(%rip),%rax
2289	addq	$16,%rax
2290	subq	%rdx,%rax
2291	vmovdqu	(%rax),%xmm10
2292	vpxor	mask1(%rip),%xmm10,%xmm10
2293	vpshufb	%xmm10,%xmm3,%xmm3
2294
2295	vpblendvb	%xmm10,%xmm2,%xmm3,%xmm3
2296
2297
2298	vpxor	%xmm0,%xmm3,%xmm8
2299
2300
2301	vpxor	(%rcx),%xmm8,%xmm8
2302	vaesdec	16(%rcx),%xmm8,%xmm8
2303	vaesdec	32(%rcx),%xmm8,%xmm8
2304	vaesdec	48(%rcx),%xmm8,%xmm8
2305	vaesdec	64(%rcx),%xmm8,%xmm8
2306	vaesdec	80(%rcx),%xmm8,%xmm8
2307	vaesdec	96(%rcx),%xmm8,%xmm8
2308	vaesdec	112(%rcx),%xmm8,%xmm8
2309	vaesdec	128(%rcx),%xmm8,%xmm8
2310	vaesdec	144(%rcx),%xmm8,%xmm8
2311	vaesdeclast	160(%rcx),%xmm8,%xmm8
2312
2313	vpxor	%xmm0,%xmm8,%xmm8
2314
2315.L_done_amivrujEyduiFoi:
2316
2317	vmovdqu	%xmm8,-16(%rsi)
2318.L_ret_amivrujEyduiFoi:
2319	movq	128(%rsp),%rbx
2320	xorq	%r8,%r8
2321	movq	%r8,128(%rsp)
2322
2323	vpxorq	%zmm0,%zmm0,%zmm0
2324	movq	%rbp,%rsp
2325	popq	%rbp
2326	vzeroupper
2327	.byte	0xf3,0xc3
2328
2329.L_less_than_128_bytes_amivrujEyduiFoi:
2330	cmpq	$0x10,%rdx
2331	jb	.L_ret_amivrujEyduiFoi
2332
2333	movq	%rdx,%r8
2334	andq	$0x70,%r8
2335	cmpq	$0x60,%r8
2336	je	.L_num_blocks_is_6_amivrujEyduiFoi
2337	cmpq	$0x50,%r8
2338	je	.L_num_blocks_is_5_amivrujEyduiFoi
2339	cmpq	$0x40,%r8
2340	je	.L_num_blocks_is_4_amivrujEyduiFoi
2341	cmpq	$0x30,%r8
2342	je	.L_num_blocks_is_3_amivrujEyduiFoi
2343	cmpq	$0x20,%r8
2344	je	.L_num_blocks_is_2_amivrujEyduiFoi
2345	cmpq	$0x10,%r8
2346	je	.L_num_blocks_is_1_amivrujEyduiFoi
2347
2348.L_num_blocks_is_7_amivrujEyduiFoi:
2349	vmovdqa	0(%rsp),%xmm9
2350	movq	0(%rsp),%rax
2351	movq	8(%rsp),%rbx
2352	vmovdqu	0(%rdi),%xmm1
2353	xorq	%r11,%r11
2354	shlq	$1,%rax
2355	adcq	%rbx,%rbx
2356	cmovcq	%r10,%r11
2357	xorq	%r11,%rax
2358	movq	%rax,16(%rsp)
2359	movq	%rbx,16 + 8(%rsp)
2360	vmovdqa	16(%rsp),%xmm10
2361	vmovdqu	16(%rdi),%xmm2
2362	xorq	%r11,%r11
2363	shlq	$1,%rax
2364	adcq	%rbx,%rbx
2365	cmovcq	%r10,%r11
2366	xorq	%r11,%rax
2367	movq	%rax,32(%rsp)
2368	movq	%rbx,32 + 8(%rsp)
2369	vmovdqa	32(%rsp),%xmm11
2370	vmovdqu	32(%rdi),%xmm3
2371	xorq	%r11,%r11
2372	shlq	$1,%rax
2373	adcq	%rbx,%rbx
2374	cmovcq	%r10,%r11
2375	xorq	%r11,%rax
2376	movq	%rax,48(%rsp)
2377	movq	%rbx,48 + 8(%rsp)
2378	vmovdqa	48(%rsp),%xmm12
2379	vmovdqu	48(%rdi),%xmm4
2380	xorq	%r11,%r11
2381	shlq	$1,%rax
2382	adcq	%rbx,%rbx
2383	cmovcq	%r10,%r11
2384	xorq	%r11,%rax
2385	movq	%rax,64(%rsp)
2386	movq	%rbx,64 + 8(%rsp)
2387	vmovdqa	64(%rsp),%xmm13
2388	vmovdqu	64(%rdi),%xmm5
2389	xorq	%r11,%r11
2390	shlq	$1,%rax
2391	adcq	%rbx,%rbx
2392	cmovcq	%r10,%r11
2393	xorq	%r11,%rax
2394	movq	%rax,80(%rsp)
2395	movq	%rbx,80 + 8(%rsp)
2396	vmovdqa	80(%rsp),%xmm14
2397	vmovdqu	80(%rdi),%xmm6
2398	xorq	%r11,%r11
2399	shlq	$1,%rax
2400	adcq	%rbx,%rbx
2401	cmovcq	%r10,%r11
2402	xorq	%r11,%rax
2403	movq	%rax,96(%rsp)
2404	movq	%rbx,96 + 8(%rsp)
2405	vmovdqa	96(%rsp),%xmm15
2406	vmovdqu	96(%rdi),%xmm7
2407	addq	$0x70,%rdi
2408	andq	$0xf,%rdx
2409	je	.L_done_7_amivrujEyduiFoi
2410
2411.L_steal_cipher_7_amivrujEyduiFoi:
2412	xorq	%r11,%r11
2413	shlq	$1,%rax
2414	adcq	%rbx,%rbx
2415	cmovcq	%r10,%r11
2416	xorq	%r11,%rax
2417	movq	%rax,16(%rsp)
2418	movq	%rbx,24(%rsp)
2419	vmovdqa64	%xmm15,%xmm16
2420	vmovdqa	16(%rsp),%xmm15
2421	vpxor	%xmm9,%xmm1,%xmm1
2422	vpxor	%xmm10,%xmm2,%xmm2
2423	vpxor	%xmm11,%xmm3,%xmm3
2424	vpxor	%xmm12,%xmm4,%xmm4
2425	vpxor	%xmm13,%xmm5,%xmm5
2426	vpxor	%xmm14,%xmm6,%xmm6
2427	vpxor	%xmm15,%xmm7,%xmm7
2428	vmovdqu	(%rcx),%xmm0
2429	vpxor	%xmm0,%xmm1,%xmm1
2430	vpxor	%xmm0,%xmm2,%xmm2
2431	vpxor	%xmm0,%xmm3,%xmm3
2432	vpxor	%xmm0,%xmm4,%xmm4
2433	vpxor	%xmm0,%xmm5,%xmm5
2434	vpxor	%xmm0,%xmm6,%xmm6
2435	vpxor	%xmm0,%xmm7,%xmm7
2436	vmovdqu	16(%rcx),%xmm0
2437	vaesdec	%xmm0,%xmm1,%xmm1
2438	vaesdec	%xmm0,%xmm2,%xmm2
2439	vaesdec	%xmm0,%xmm3,%xmm3
2440	vaesdec	%xmm0,%xmm4,%xmm4
2441	vaesdec	%xmm0,%xmm5,%xmm5
2442	vaesdec	%xmm0,%xmm6,%xmm6
2443	vaesdec	%xmm0,%xmm7,%xmm7
2444	vmovdqu	32(%rcx),%xmm0
2445	vaesdec	%xmm0,%xmm1,%xmm1
2446	vaesdec	%xmm0,%xmm2,%xmm2
2447	vaesdec	%xmm0,%xmm3,%xmm3
2448	vaesdec	%xmm0,%xmm4,%xmm4
2449	vaesdec	%xmm0,%xmm5,%xmm5
2450	vaesdec	%xmm0,%xmm6,%xmm6
2451	vaesdec	%xmm0,%xmm7,%xmm7
2452	vmovdqu	48(%rcx),%xmm0
2453	vaesdec	%xmm0,%xmm1,%xmm1
2454	vaesdec	%xmm0,%xmm2,%xmm2
2455	vaesdec	%xmm0,%xmm3,%xmm3
2456	vaesdec	%xmm0,%xmm4,%xmm4
2457	vaesdec	%xmm0,%xmm5,%xmm5
2458	vaesdec	%xmm0,%xmm6,%xmm6
2459	vaesdec	%xmm0,%xmm7,%xmm7
2460	vmovdqu	64(%rcx),%xmm0
2461	vaesdec	%xmm0,%xmm1,%xmm1
2462	vaesdec	%xmm0,%xmm2,%xmm2
2463	vaesdec	%xmm0,%xmm3,%xmm3
2464	vaesdec	%xmm0,%xmm4,%xmm4
2465	vaesdec	%xmm0,%xmm5,%xmm5
2466	vaesdec	%xmm0,%xmm6,%xmm6
2467	vaesdec	%xmm0,%xmm7,%xmm7
2468	vmovdqu	80(%rcx),%xmm0
2469	vaesdec	%xmm0,%xmm1,%xmm1
2470	vaesdec	%xmm0,%xmm2,%xmm2
2471	vaesdec	%xmm0,%xmm3,%xmm3
2472	vaesdec	%xmm0,%xmm4,%xmm4
2473	vaesdec	%xmm0,%xmm5,%xmm5
2474	vaesdec	%xmm0,%xmm6,%xmm6
2475	vaesdec	%xmm0,%xmm7,%xmm7
2476	vmovdqu	96(%rcx),%xmm0
2477	vaesdec	%xmm0,%xmm1,%xmm1
2478	vaesdec	%xmm0,%xmm2,%xmm2
2479	vaesdec	%xmm0,%xmm3,%xmm3
2480	vaesdec	%xmm0,%xmm4,%xmm4
2481	vaesdec	%xmm0,%xmm5,%xmm5
2482	vaesdec	%xmm0,%xmm6,%xmm6
2483	vaesdec	%xmm0,%xmm7,%xmm7
2484	vmovdqu	112(%rcx),%xmm0
2485	vaesdec	%xmm0,%xmm1,%xmm1
2486	vaesdec	%xmm0,%xmm2,%xmm2
2487	vaesdec	%xmm0,%xmm3,%xmm3
2488	vaesdec	%xmm0,%xmm4,%xmm4
2489	vaesdec	%xmm0,%xmm5,%xmm5
2490	vaesdec	%xmm0,%xmm6,%xmm6
2491	vaesdec	%xmm0,%xmm7,%xmm7
2492	vmovdqu	128(%rcx),%xmm0
2493	vaesdec	%xmm0,%xmm1,%xmm1
2494	vaesdec	%xmm0,%xmm2,%xmm2
2495	vaesdec	%xmm0,%xmm3,%xmm3
2496	vaesdec	%xmm0,%xmm4,%xmm4
2497	vaesdec	%xmm0,%xmm5,%xmm5
2498	vaesdec	%xmm0,%xmm6,%xmm6
2499	vaesdec	%xmm0,%xmm7,%xmm7
2500	vmovdqu	144(%rcx),%xmm0
2501	vaesdec	%xmm0,%xmm1,%xmm1
2502	vaesdec	%xmm0,%xmm2,%xmm2
2503	vaesdec	%xmm0,%xmm3,%xmm3
2504	vaesdec	%xmm0,%xmm4,%xmm4
2505	vaesdec	%xmm0,%xmm5,%xmm5
2506	vaesdec	%xmm0,%xmm6,%xmm6
2507	vaesdec	%xmm0,%xmm7,%xmm7
2508	vmovdqu	160(%rcx),%xmm0
2509	vaesdeclast	%xmm0,%xmm1,%xmm1
2510	vaesdeclast	%xmm0,%xmm2,%xmm2
2511	vaesdeclast	%xmm0,%xmm3,%xmm3
2512	vaesdeclast	%xmm0,%xmm4,%xmm4
2513	vaesdeclast	%xmm0,%xmm5,%xmm5
2514	vaesdeclast	%xmm0,%xmm6,%xmm6
2515	vaesdeclast	%xmm0,%xmm7,%xmm7
2516	vpxor	%xmm9,%xmm1,%xmm1
2517	vpxor	%xmm10,%xmm2,%xmm2
2518	vpxor	%xmm11,%xmm3,%xmm3
2519	vpxor	%xmm12,%xmm4,%xmm4
2520	vpxor	%xmm13,%xmm5,%xmm5
2521	vpxor	%xmm14,%xmm6,%xmm6
2522	vpxor	%xmm15,%xmm7,%xmm7
2523	vmovdqu	%xmm1,(%rsi)
2524	vmovdqu	%xmm2,16(%rsi)
2525	vmovdqu	%xmm3,32(%rsi)
2526	vmovdqu	%xmm4,48(%rsi)
2527	vmovdqu	%xmm5,64(%rsi)
2528	vmovdqu	%xmm6,80(%rsi)
2529	addq	$0x70,%rsi
2530	vmovdqa64	%xmm16,%xmm0
2531	vmovdqa	%xmm7,%xmm8
2532	jmp	.L_steal_cipher_amivrujEyduiFoi
2533
2534.L_done_7_amivrujEyduiFoi:
2535	vpxor	%xmm9,%xmm1,%xmm1
2536	vpxor	%xmm10,%xmm2,%xmm2
2537	vpxor	%xmm11,%xmm3,%xmm3
2538	vpxor	%xmm12,%xmm4,%xmm4
2539	vpxor	%xmm13,%xmm5,%xmm5
2540	vpxor	%xmm14,%xmm6,%xmm6
2541	vpxor	%xmm15,%xmm7,%xmm7
2542	vmovdqu	(%rcx),%xmm0
2543	vpxor	%xmm0,%xmm1,%xmm1
2544	vpxor	%xmm0,%xmm2,%xmm2
2545	vpxor	%xmm0,%xmm3,%xmm3
2546	vpxor	%xmm0,%xmm4,%xmm4
2547	vpxor	%xmm0,%xmm5,%xmm5
2548	vpxor	%xmm0,%xmm6,%xmm6
2549	vpxor	%xmm0,%xmm7,%xmm7
2550	vmovdqu	16(%rcx),%xmm0
2551	vaesdec	%xmm0,%xmm1,%xmm1
2552	vaesdec	%xmm0,%xmm2,%xmm2
2553	vaesdec	%xmm0,%xmm3,%xmm3
2554	vaesdec	%xmm0,%xmm4,%xmm4
2555	vaesdec	%xmm0,%xmm5,%xmm5
2556	vaesdec	%xmm0,%xmm6,%xmm6
2557	vaesdec	%xmm0,%xmm7,%xmm7
2558	vmovdqu	32(%rcx),%xmm0
2559	vaesdec	%xmm0,%xmm1,%xmm1
2560	vaesdec	%xmm0,%xmm2,%xmm2
2561	vaesdec	%xmm0,%xmm3,%xmm3
2562	vaesdec	%xmm0,%xmm4,%xmm4
2563	vaesdec	%xmm0,%xmm5,%xmm5
2564	vaesdec	%xmm0,%xmm6,%xmm6
2565	vaesdec	%xmm0,%xmm7,%xmm7
2566	vmovdqu	48(%rcx),%xmm0
2567	vaesdec	%xmm0,%xmm1,%xmm1
2568	vaesdec	%xmm0,%xmm2,%xmm2
2569	vaesdec	%xmm0,%xmm3,%xmm3
2570	vaesdec	%xmm0,%xmm4,%xmm4
2571	vaesdec	%xmm0,%xmm5,%xmm5
2572	vaesdec	%xmm0,%xmm6,%xmm6
2573	vaesdec	%xmm0,%xmm7,%xmm7
2574	vmovdqu	64(%rcx),%xmm0
2575	vaesdec	%xmm0,%xmm1,%xmm1
2576	vaesdec	%xmm0,%xmm2,%xmm2
2577	vaesdec	%xmm0,%xmm3,%xmm3
2578	vaesdec	%xmm0,%xmm4,%xmm4
2579	vaesdec	%xmm0,%xmm5,%xmm5
2580	vaesdec	%xmm0,%xmm6,%xmm6
2581	vaesdec	%xmm0,%xmm7,%xmm7
2582	vmovdqu	80(%rcx),%xmm0
2583	vaesdec	%xmm0,%xmm1,%xmm1
2584	vaesdec	%xmm0,%xmm2,%xmm2
2585	vaesdec	%xmm0,%xmm3,%xmm3
2586	vaesdec	%xmm0,%xmm4,%xmm4
2587	vaesdec	%xmm0,%xmm5,%xmm5
2588	vaesdec	%xmm0,%xmm6,%xmm6
2589	vaesdec	%xmm0,%xmm7,%xmm7
2590	vmovdqu	96(%rcx),%xmm0
2591	vaesdec	%xmm0,%xmm1,%xmm1
2592	vaesdec	%xmm0,%xmm2,%xmm2
2593	vaesdec	%xmm0,%xmm3,%xmm3
2594	vaesdec	%xmm0,%xmm4,%xmm4
2595	vaesdec	%xmm0,%xmm5,%xmm5
2596	vaesdec	%xmm0,%xmm6,%xmm6
2597	vaesdec	%xmm0,%xmm7,%xmm7
2598	vmovdqu	112(%rcx),%xmm0
2599	vaesdec	%xmm0,%xmm1,%xmm1
2600	vaesdec	%xmm0,%xmm2,%xmm2
2601	vaesdec	%xmm0,%xmm3,%xmm3
2602	vaesdec	%xmm0,%xmm4,%xmm4
2603	vaesdec	%xmm0,%xmm5,%xmm5
2604	vaesdec	%xmm0,%xmm6,%xmm6
2605	vaesdec	%xmm0,%xmm7,%xmm7
2606	vmovdqu	128(%rcx),%xmm0
2607	vaesdec	%xmm0,%xmm1,%xmm1
2608	vaesdec	%xmm0,%xmm2,%xmm2
2609	vaesdec	%xmm0,%xmm3,%xmm3
2610	vaesdec	%xmm0,%xmm4,%xmm4
2611	vaesdec	%xmm0,%xmm5,%xmm5
2612	vaesdec	%xmm0,%xmm6,%xmm6
2613	vaesdec	%xmm0,%xmm7,%xmm7
2614	vmovdqu	144(%rcx),%xmm0
2615	vaesdec	%xmm0,%xmm1,%xmm1
2616	vaesdec	%xmm0,%xmm2,%xmm2
2617	vaesdec	%xmm0,%xmm3,%xmm3
2618	vaesdec	%xmm0,%xmm4,%xmm4
2619	vaesdec	%xmm0,%xmm5,%xmm5
2620	vaesdec	%xmm0,%xmm6,%xmm6
2621	vaesdec	%xmm0,%xmm7,%xmm7
2622	vmovdqu	160(%rcx),%xmm0
2623	vaesdeclast	%xmm0,%xmm1,%xmm1
2624	vaesdeclast	%xmm0,%xmm2,%xmm2
2625	vaesdeclast	%xmm0,%xmm3,%xmm3
2626	vaesdeclast	%xmm0,%xmm4,%xmm4
2627	vaesdeclast	%xmm0,%xmm5,%xmm5
2628	vaesdeclast	%xmm0,%xmm6,%xmm6
2629	vaesdeclast	%xmm0,%xmm7,%xmm7
2630	vpxor	%xmm9,%xmm1,%xmm1
2631	vpxor	%xmm10,%xmm2,%xmm2
2632	vpxor	%xmm11,%xmm3,%xmm3
2633	vpxor	%xmm12,%xmm4,%xmm4
2634	vpxor	%xmm13,%xmm5,%xmm5
2635	vpxor	%xmm14,%xmm6,%xmm6
2636	vpxor	%xmm15,%xmm7,%xmm7
2637	vmovdqu	%xmm1,(%rsi)
2638	vmovdqu	%xmm2,16(%rsi)
2639	vmovdqu	%xmm3,32(%rsi)
2640	vmovdqu	%xmm4,48(%rsi)
2641	vmovdqu	%xmm5,64(%rsi)
2642	vmovdqu	%xmm6,80(%rsi)
2643	addq	$0x70,%rsi
2644	vmovdqa	%xmm7,%xmm8
2645	jmp	.L_done_amivrujEyduiFoi
2646
2647.L_num_blocks_is_6_amivrujEyduiFoi:
2648	vmovdqa	0(%rsp),%xmm9
2649	movq	0(%rsp),%rax
2650	movq	8(%rsp),%rbx
2651	vmovdqu	0(%rdi),%xmm1
2652	xorq	%r11,%r11
2653	shlq	$1,%rax
2654	adcq	%rbx,%rbx
2655	cmovcq	%r10,%r11
2656	xorq	%r11,%rax
2657	movq	%rax,16(%rsp)
2658	movq	%rbx,16 + 8(%rsp)
2659	vmovdqa	16(%rsp),%xmm10
2660	vmovdqu	16(%rdi),%xmm2
2661	xorq	%r11,%r11
2662	shlq	$1,%rax
2663	adcq	%rbx,%rbx
2664	cmovcq	%r10,%r11
2665	xorq	%r11,%rax
2666	movq	%rax,32(%rsp)
2667	movq	%rbx,32 + 8(%rsp)
2668	vmovdqa	32(%rsp),%xmm11
2669	vmovdqu	32(%rdi),%xmm3
2670	xorq	%r11,%r11
2671	shlq	$1,%rax
2672	adcq	%rbx,%rbx
2673	cmovcq	%r10,%r11
2674	xorq	%r11,%rax
2675	movq	%rax,48(%rsp)
2676	movq	%rbx,48 + 8(%rsp)
2677	vmovdqa	48(%rsp),%xmm12
2678	vmovdqu	48(%rdi),%xmm4
2679	xorq	%r11,%r11
2680	shlq	$1,%rax
2681	adcq	%rbx,%rbx
2682	cmovcq	%r10,%r11
2683	xorq	%r11,%rax
2684	movq	%rax,64(%rsp)
2685	movq	%rbx,64 + 8(%rsp)
2686	vmovdqa	64(%rsp),%xmm13
2687	vmovdqu	64(%rdi),%xmm5
2688	xorq	%r11,%r11
2689	shlq	$1,%rax
2690	adcq	%rbx,%rbx
2691	cmovcq	%r10,%r11
2692	xorq	%r11,%rax
2693	movq	%rax,80(%rsp)
2694	movq	%rbx,80 + 8(%rsp)
2695	vmovdqa	80(%rsp),%xmm14
2696	vmovdqu	80(%rdi),%xmm6
2697	addq	$0x60,%rdi
2698	andq	$0xf,%rdx
2699	je	.L_done_6_amivrujEyduiFoi
2700
2701.L_steal_cipher_6_amivrujEyduiFoi:
2702	xorq	%r11,%r11
2703	shlq	$1,%rax
2704	adcq	%rbx,%rbx
2705	cmovcq	%r10,%r11
2706	xorq	%r11,%rax
2707	movq	%rax,16(%rsp)
2708	movq	%rbx,24(%rsp)
2709	vmovdqa64	%xmm14,%xmm15
2710	vmovdqa	16(%rsp),%xmm14
2711	vpxor	%xmm9,%xmm1,%xmm1
2712	vpxor	%xmm10,%xmm2,%xmm2
2713	vpxor	%xmm11,%xmm3,%xmm3
2714	vpxor	%xmm12,%xmm4,%xmm4
2715	vpxor	%xmm13,%xmm5,%xmm5
2716	vpxor	%xmm14,%xmm6,%xmm6
2717	vmovdqu	(%rcx),%xmm0
2718	vpxor	%xmm0,%xmm1,%xmm1
2719	vpxor	%xmm0,%xmm2,%xmm2
2720	vpxor	%xmm0,%xmm3,%xmm3
2721	vpxor	%xmm0,%xmm4,%xmm4
2722	vpxor	%xmm0,%xmm5,%xmm5
2723	vpxor	%xmm0,%xmm6,%xmm6
2724	vmovdqu	16(%rcx),%xmm0
2725	vaesdec	%xmm0,%xmm1,%xmm1
2726	vaesdec	%xmm0,%xmm2,%xmm2
2727	vaesdec	%xmm0,%xmm3,%xmm3
2728	vaesdec	%xmm0,%xmm4,%xmm4
2729	vaesdec	%xmm0,%xmm5,%xmm5
2730	vaesdec	%xmm0,%xmm6,%xmm6
2731	vmovdqu	32(%rcx),%xmm0
2732	vaesdec	%xmm0,%xmm1,%xmm1
2733	vaesdec	%xmm0,%xmm2,%xmm2
2734	vaesdec	%xmm0,%xmm3,%xmm3
2735	vaesdec	%xmm0,%xmm4,%xmm4
2736	vaesdec	%xmm0,%xmm5,%xmm5
2737	vaesdec	%xmm0,%xmm6,%xmm6
2738	vmovdqu	48(%rcx),%xmm0
2739	vaesdec	%xmm0,%xmm1,%xmm1
2740	vaesdec	%xmm0,%xmm2,%xmm2
2741	vaesdec	%xmm0,%xmm3,%xmm3
2742	vaesdec	%xmm0,%xmm4,%xmm4
2743	vaesdec	%xmm0,%xmm5,%xmm5
2744	vaesdec	%xmm0,%xmm6,%xmm6
2745	vmovdqu	64(%rcx),%xmm0
2746	vaesdec	%xmm0,%xmm1,%xmm1
2747	vaesdec	%xmm0,%xmm2,%xmm2
2748	vaesdec	%xmm0,%xmm3,%xmm3
2749	vaesdec	%xmm0,%xmm4,%xmm4
2750	vaesdec	%xmm0,%xmm5,%xmm5
2751	vaesdec	%xmm0,%xmm6,%xmm6
2752	vmovdqu	80(%rcx),%xmm0
2753	vaesdec	%xmm0,%xmm1,%xmm1
2754	vaesdec	%xmm0,%xmm2,%xmm2
2755	vaesdec	%xmm0,%xmm3,%xmm3
2756	vaesdec	%xmm0,%xmm4,%xmm4
2757	vaesdec	%xmm0,%xmm5,%xmm5
2758	vaesdec	%xmm0,%xmm6,%xmm6
2759	vmovdqu	96(%rcx),%xmm0
2760	vaesdec	%xmm0,%xmm1,%xmm1
2761	vaesdec	%xmm0,%xmm2,%xmm2
2762	vaesdec	%xmm0,%xmm3,%xmm3
2763	vaesdec	%xmm0,%xmm4,%xmm4
2764	vaesdec	%xmm0,%xmm5,%xmm5
2765	vaesdec	%xmm0,%xmm6,%xmm6
2766	vmovdqu	112(%rcx),%xmm0
2767	vaesdec	%xmm0,%xmm1,%xmm1
2768	vaesdec	%xmm0,%xmm2,%xmm2
2769	vaesdec	%xmm0,%xmm3,%xmm3
2770	vaesdec	%xmm0,%xmm4,%xmm4
2771	vaesdec	%xmm0,%xmm5,%xmm5
2772	vaesdec	%xmm0,%xmm6,%xmm6
2773	vmovdqu	128(%rcx),%xmm0
2774	vaesdec	%xmm0,%xmm1,%xmm1
2775	vaesdec	%xmm0,%xmm2,%xmm2
2776	vaesdec	%xmm0,%xmm3,%xmm3
2777	vaesdec	%xmm0,%xmm4,%xmm4
2778	vaesdec	%xmm0,%xmm5,%xmm5
2779	vaesdec	%xmm0,%xmm6,%xmm6
2780	vmovdqu	144(%rcx),%xmm0
2781	vaesdec	%xmm0,%xmm1,%xmm1
2782	vaesdec	%xmm0,%xmm2,%xmm2
2783	vaesdec	%xmm0,%xmm3,%xmm3
2784	vaesdec	%xmm0,%xmm4,%xmm4
2785	vaesdec	%xmm0,%xmm5,%xmm5
2786	vaesdec	%xmm0,%xmm6,%xmm6
2787	vmovdqu	160(%rcx),%xmm0
2788	vaesdeclast	%xmm0,%xmm1,%xmm1
2789	vaesdeclast	%xmm0,%xmm2,%xmm2
2790	vaesdeclast	%xmm0,%xmm3,%xmm3
2791	vaesdeclast	%xmm0,%xmm4,%xmm4
2792	vaesdeclast	%xmm0,%xmm5,%xmm5
2793	vaesdeclast	%xmm0,%xmm6,%xmm6
2794	vpxor	%xmm9,%xmm1,%xmm1
2795	vpxor	%xmm10,%xmm2,%xmm2
2796	vpxor	%xmm11,%xmm3,%xmm3
2797	vpxor	%xmm12,%xmm4,%xmm4
2798	vpxor	%xmm13,%xmm5,%xmm5
2799	vpxor	%xmm14,%xmm6,%xmm6
2800	vmovdqu	%xmm1,(%rsi)
2801	vmovdqu	%xmm2,16(%rsi)
2802	vmovdqu	%xmm3,32(%rsi)
2803	vmovdqu	%xmm4,48(%rsi)
2804	vmovdqu	%xmm5,64(%rsi)
2805	addq	$0x60,%rsi
2806	vmovdqa	%xmm15,%xmm0
2807	vmovdqa	%xmm6,%xmm8
2808	jmp	.L_steal_cipher_amivrujEyduiFoi
2809
2810.L_done_6_amivrujEyduiFoi:
2811	vpxor	%xmm9,%xmm1,%xmm1
2812	vpxor	%xmm10,%xmm2,%xmm2
2813	vpxor	%xmm11,%xmm3,%xmm3
2814	vpxor	%xmm12,%xmm4,%xmm4
2815	vpxor	%xmm13,%xmm5,%xmm5
2816	vpxor	%xmm14,%xmm6,%xmm6
2817	vmovdqu	(%rcx),%xmm0
2818	vpxor	%xmm0,%xmm1,%xmm1
2819	vpxor	%xmm0,%xmm2,%xmm2
2820	vpxor	%xmm0,%xmm3,%xmm3
2821	vpxor	%xmm0,%xmm4,%xmm4
2822	vpxor	%xmm0,%xmm5,%xmm5
2823	vpxor	%xmm0,%xmm6,%xmm6
2824	vmovdqu	16(%rcx),%xmm0
2825	vaesdec	%xmm0,%xmm1,%xmm1
2826	vaesdec	%xmm0,%xmm2,%xmm2
2827	vaesdec	%xmm0,%xmm3,%xmm3
2828	vaesdec	%xmm0,%xmm4,%xmm4
2829	vaesdec	%xmm0,%xmm5,%xmm5
2830	vaesdec	%xmm0,%xmm6,%xmm6
2831	vmovdqu	32(%rcx),%xmm0
2832	vaesdec	%xmm0,%xmm1,%xmm1
2833	vaesdec	%xmm0,%xmm2,%xmm2
2834	vaesdec	%xmm0,%xmm3,%xmm3
2835	vaesdec	%xmm0,%xmm4,%xmm4
2836	vaesdec	%xmm0,%xmm5,%xmm5
2837	vaesdec	%xmm0,%xmm6,%xmm6
2838	vmovdqu	48(%rcx),%xmm0
2839	vaesdec	%xmm0,%xmm1,%xmm1
2840	vaesdec	%xmm0,%xmm2,%xmm2
2841	vaesdec	%xmm0,%xmm3,%xmm3
2842	vaesdec	%xmm0,%xmm4,%xmm4
2843	vaesdec	%xmm0,%xmm5,%xmm5
2844	vaesdec	%xmm0,%xmm6,%xmm6
2845	vmovdqu	64(%rcx),%xmm0
2846	vaesdec	%xmm0,%xmm1,%xmm1
2847	vaesdec	%xmm0,%xmm2,%xmm2
2848	vaesdec	%xmm0,%xmm3,%xmm3
2849	vaesdec	%xmm0,%xmm4,%xmm4
2850	vaesdec	%xmm0,%xmm5,%xmm5
2851	vaesdec	%xmm0,%xmm6,%xmm6
2852	vmovdqu	80(%rcx),%xmm0
2853	vaesdec	%xmm0,%xmm1,%xmm1
2854	vaesdec	%xmm0,%xmm2,%xmm2
2855	vaesdec	%xmm0,%xmm3,%xmm3
2856	vaesdec	%xmm0,%xmm4,%xmm4
2857	vaesdec	%xmm0,%xmm5,%xmm5
2858	vaesdec	%xmm0,%xmm6,%xmm6
2859	vmovdqu	96(%rcx),%xmm0
2860	vaesdec	%xmm0,%xmm1,%xmm1
2861	vaesdec	%xmm0,%xmm2,%xmm2
2862	vaesdec	%xmm0,%xmm3,%xmm3
2863	vaesdec	%xmm0,%xmm4,%xmm4
2864	vaesdec	%xmm0,%xmm5,%xmm5
2865	vaesdec	%xmm0,%xmm6,%xmm6
2866	vmovdqu	112(%rcx),%xmm0
2867	vaesdec	%xmm0,%xmm1,%xmm1
2868	vaesdec	%xmm0,%xmm2,%xmm2
2869	vaesdec	%xmm0,%xmm3,%xmm3
2870	vaesdec	%xmm0,%xmm4,%xmm4
2871	vaesdec	%xmm0,%xmm5,%xmm5
2872	vaesdec	%xmm0,%xmm6,%xmm6
2873	vmovdqu	128(%rcx),%xmm0
2874	vaesdec	%xmm0,%xmm1,%xmm1
2875	vaesdec	%xmm0,%xmm2,%xmm2
2876	vaesdec	%xmm0,%xmm3,%xmm3
2877	vaesdec	%xmm0,%xmm4,%xmm4
2878	vaesdec	%xmm0,%xmm5,%xmm5
2879	vaesdec	%xmm0,%xmm6,%xmm6
2880	vmovdqu	144(%rcx),%xmm0
2881	vaesdec	%xmm0,%xmm1,%xmm1
2882	vaesdec	%xmm0,%xmm2,%xmm2
2883	vaesdec	%xmm0,%xmm3,%xmm3
2884	vaesdec	%xmm0,%xmm4,%xmm4
2885	vaesdec	%xmm0,%xmm5,%xmm5
2886	vaesdec	%xmm0,%xmm6,%xmm6
2887	vmovdqu	160(%rcx),%xmm0
2888	vaesdeclast	%xmm0,%xmm1,%xmm1
2889	vaesdeclast	%xmm0,%xmm2,%xmm2
2890	vaesdeclast	%xmm0,%xmm3,%xmm3
2891	vaesdeclast	%xmm0,%xmm4,%xmm4
2892	vaesdeclast	%xmm0,%xmm5,%xmm5
2893	vaesdeclast	%xmm0,%xmm6,%xmm6
2894	vpxor	%xmm9,%xmm1,%xmm1
2895	vpxor	%xmm10,%xmm2,%xmm2
2896	vpxor	%xmm11,%xmm3,%xmm3
2897	vpxor	%xmm12,%xmm4,%xmm4
2898	vpxor	%xmm13,%xmm5,%xmm5
2899	vpxor	%xmm14,%xmm6,%xmm6
2900	vmovdqu	%xmm1,(%rsi)
2901	vmovdqu	%xmm2,16(%rsi)
2902	vmovdqu	%xmm3,32(%rsi)
2903	vmovdqu	%xmm4,48(%rsi)
2904	vmovdqu	%xmm5,64(%rsi)
2905	addq	$0x60,%rsi
2906	vmovdqa	%xmm6,%xmm8
2907	jmp	.L_done_amivrujEyduiFoi
2908
2909.L_num_blocks_is_5_amivrujEyduiFoi:
2910	vmovdqa	0(%rsp),%xmm9
2911	movq	0(%rsp),%rax
2912	movq	8(%rsp),%rbx
2913	vmovdqu	0(%rdi),%xmm1
2914	xorq	%r11,%r11
2915	shlq	$1,%rax
2916	adcq	%rbx,%rbx
2917	cmovcq	%r10,%r11
2918	xorq	%r11,%rax
2919	movq	%rax,16(%rsp)
2920	movq	%rbx,16 + 8(%rsp)
2921	vmovdqa	16(%rsp),%xmm10
2922	vmovdqu	16(%rdi),%xmm2
2923	xorq	%r11,%r11
2924	shlq	$1,%rax
2925	adcq	%rbx,%rbx
2926	cmovcq	%r10,%r11
2927	xorq	%r11,%rax
2928	movq	%rax,32(%rsp)
2929	movq	%rbx,32 + 8(%rsp)
2930	vmovdqa	32(%rsp),%xmm11
2931	vmovdqu	32(%rdi),%xmm3
2932	xorq	%r11,%r11
2933	shlq	$1,%rax
2934	adcq	%rbx,%rbx
2935	cmovcq	%r10,%r11
2936	xorq	%r11,%rax
2937	movq	%rax,48(%rsp)
2938	movq	%rbx,48 + 8(%rsp)
2939	vmovdqa	48(%rsp),%xmm12
2940	vmovdqu	48(%rdi),%xmm4
2941	xorq	%r11,%r11
2942	shlq	$1,%rax
2943	adcq	%rbx,%rbx
2944	cmovcq	%r10,%r11
2945	xorq	%r11,%rax
2946	movq	%rax,64(%rsp)
2947	movq	%rbx,64 + 8(%rsp)
2948	vmovdqa	64(%rsp),%xmm13
2949	vmovdqu	64(%rdi),%xmm5
2950	addq	$0x50,%rdi
2951	andq	$0xf,%rdx
2952	je	.L_done_5_amivrujEyduiFoi
2953
2954.L_steal_cipher_5_amivrujEyduiFoi:
2955	xorq	%r11,%r11
2956	shlq	$1,%rax
2957	adcq	%rbx,%rbx
2958	cmovcq	%r10,%r11
2959	xorq	%r11,%rax
2960	movq	%rax,16(%rsp)
2961	movq	%rbx,24(%rsp)
2962	vmovdqa64	%xmm13,%xmm14
2963	vmovdqa	16(%rsp),%xmm13
2964	vpxor	%xmm9,%xmm1,%xmm1
2965	vpxor	%xmm10,%xmm2,%xmm2
2966	vpxor	%xmm11,%xmm3,%xmm3
2967	vpxor	%xmm12,%xmm4,%xmm4
2968	vpxor	%xmm13,%xmm5,%xmm5
2969	vmovdqu	(%rcx),%xmm0
2970	vpxor	%xmm0,%xmm1,%xmm1
2971	vpxor	%xmm0,%xmm2,%xmm2
2972	vpxor	%xmm0,%xmm3,%xmm3
2973	vpxor	%xmm0,%xmm4,%xmm4
2974	vpxor	%xmm0,%xmm5,%xmm5
2975	vmovdqu	16(%rcx),%xmm0
2976	vaesdec	%xmm0,%xmm1,%xmm1
2977	vaesdec	%xmm0,%xmm2,%xmm2
2978	vaesdec	%xmm0,%xmm3,%xmm3
2979	vaesdec	%xmm0,%xmm4,%xmm4
2980	vaesdec	%xmm0,%xmm5,%xmm5
2981	vmovdqu	32(%rcx),%xmm0
2982	vaesdec	%xmm0,%xmm1,%xmm1
2983	vaesdec	%xmm0,%xmm2,%xmm2
2984	vaesdec	%xmm0,%xmm3,%xmm3
2985	vaesdec	%xmm0,%xmm4,%xmm4
2986	vaesdec	%xmm0,%xmm5,%xmm5
2987	vmovdqu	48(%rcx),%xmm0
2988	vaesdec	%xmm0,%xmm1,%xmm1
2989	vaesdec	%xmm0,%xmm2,%xmm2
2990	vaesdec	%xmm0,%xmm3,%xmm3
2991	vaesdec	%xmm0,%xmm4,%xmm4
2992	vaesdec	%xmm0,%xmm5,%xmm5
2993	vmovdqu	64(%rcx),%xmm0
2994	vaesdec	%xmm0,%xmm1,%xmm1
2995	vaesdec	%xmm0,%xmm2,%xmm2
2996	vaesdec	%xmm0,%xmm3,%xmm3
2997	vaesdec	%xmm0,%xmm4,%xmm4
2998	vaesdec	%xmm0,%xmm5,%xmm5
2999	vmovdqu	80(%rcx),%xmm0
3000	vaesdec	%xmm0,%xmm1,%xmm1
3001	vaesdec	%xmm0,%xmm2,%xmm2
3002	vaesdec	%xmm0,%xmm3,%xmm3
3003	vaesdec	%xmm0,%xmm4,%xmm4
3004	vaesdec	%xmm0,%xmm5,%xmm5
3005	vmovdqu	96(%rcx),%xmm0
3006	vaesdec	%xmm0,%xmm1,%xmm1
3007	vaesdec	%xmm0,%xmm2,%xmm2
3008	vaesdec	%xmm0,%xmm3,%xmm3
3009	vaesdec	%xmm0,%xmm4,%xmm4
3010	vaesdec	%xmm0,%xmm5,%xmm5
3011	vmovdqu	112(%rcx),%xmm0
3012	vaesdec	%xmm0,%xmm1,%xmm1
3013	vaesdec	%xmm0,%xmm2,%xmm2
3014	vaesdec	%xmm0,%xmm3,%xmm3
3015	vaesdec	%xmm0,%xmm4,%xmm4
3016	vaesdec	%xmm0,%xmm5,%xmm5
3017	vmovdqu	128(%rcx),%xmm0
3018	vaesdec	%xmm0,%xmm1,%xmm1
3019	vaesdec	%xmm0,%xmm2,%xmm2
3020	vaesdec	%xmm0,%xmm3,%xmm3
3021	vaesdec	%xmm0,%xmm4,%xmm4
3022	vaesdec	%xmm0,%xmm5,%xmm5
3023	vmovdqu	144(%rcx),%xmm0
3024	vaesdec	%xmm0,%xmm1,%xmm1
3025	vaesdec	%xmm0,%xmm2,%xmm2
3026	vaesdec	%xmm0,%xmm3,%xmm3
3027	vaesdec	%xmm0,%xmm4,%xmm4
3028	vaesdec	%xmm0,%xmm5,%xmm5
3029	vmovdqu	160(%rcx),%xmm0
3030	vaesdeclast	%xmm0,%xmm1,%xmm1
3031	vaesdeclast	%xmm0,%xmm2,%xmm2
3032	vaesdeclast	%xmm0,%xmm3,%xmm3
3033	vaesdeclast	%xmm0,%xmm4,%xmm4
3034	vaesdeclast	%xmm0,%xmm5,%xmm5
3035	vpxor	%xmm9,%xmm1,%xmm1
3036	vpxor	%xmm10,%xmm2,%xmm2
3037	vpxor	%xmm11,%xmm3,%xmm3
3038	vpxor	%xmm12,%xmm4,%xmm4
3039	vpxor	%xmm13,%xmm5,%xmm5
3040	vmovdqu	%xmm1,(%rsi)
3041	vmovdqu	%xmm2,16(%rsi)
3042	vmovdqu	%xmm3,32(%rsi)
3043	vmovdqu	%xmm4,48(%rsi)
3044	addq	$0x50,%rsi
3045	vmovdqa	%xmm14,%xmm0
3046	vmovdqa	%xmm5,%xmm8
3047	jmp	.L_steal_cipher_amivrujEyduiFoi
3048
3049.L_done_5_amivrujEyduiFoi:
3050	vpxor	%xmm9,%xmm1,%xmm1
3051	vpxor	%xmm10,%xmm2,%xmm2
3052	vpxor	%xmm11,%xmm3,%xmm3
3053	vpxor	%xmm12,%xmm4,%xmm4
3054	vpxor	%xmm13,%xmm5,%xmm5
3055	vmovdqu	(%rcx),%xmm0
3056	vpxor	%xmm0,%xmm1,%xmm1
3057	vpxor	%xmm0,%xmm2,%xmm2
3058	vpxor	%xmm0,%xmm3,%xmm3
3059	vpxor	%xmm0,%xmm4,%xmm4
3060	vpxor	%xmm0,%xmm5,%xmm5
3061	vmovdqu	16(%rcx),%xmm0
3062	vaesdec	%xmm0,%xmm1,%xmm1
3063	vaesdec	%xmm0,%xmm2,%xmm2
3064	vaesdec	%xmm0,%xmm3,%xmm3
3065	vaesdec	%xmm0,%xmm4,%xmm4
3066	vaesdec	%xmm0,%xmm5,%xmm5
3067	vmovdqu	32(%rcx),%xmm0
3068	vaesdec	%xmm0,%xmm1,%xmm1
3069	vaesdec	%xmm0,%xmm2,%xmm2
3070	vaesdec	%xmm0,%xmm3,%xmm3
3071	vaesdec	%xmm0,%xmm4,%xmm4
3072	vaesdec	%xmm0,%xmm5,%xmm5
3073	vmovdqu	48(%rcx),%xmm0
3074	vaesdec	%xmm0,%xmm1,%xmm1
3075	vaesdec	%xmm0,%xmm2,%xmm2
3076	vaesdec	%xmm0,%xmm3,%xmm3
3077	vaesdec	%xmm0,%xmm4,%xmm4
3078	vaesdec	%xmm0,%xmm5,%xmm5
3079	vmovdqu	64(%rcx),%xmm0
3080	vaesdec	%xmm0,%xmm1,%xmm1
3081	vaesdec	%xmm0,%xmm2,%xmm2
3082	vaesdec	%xmm0,%xmm3,%xmm3
3083	vaesdec	%xmm0,%xmm4,%xmm4
3084	vaesdec	%xmm0,%xmm5,%xmm5
3085	vmovdqu	80(%rcx),%xmm0
3086	vaesdec	%xmm0,%xmm1,%xmm1
3087	vaesdec	%xmm0,%xmm2,%xmm2
3088	vaesdec	%xmm0,%xmm3,%xmm3
3089	vaesdec	%xmm0,%xmm4,%xmm4
3090	vaesdec	%xmm0,%xmm5,%xmm5
3091	vmovdqu	96(%rcx),%xmm0
3092	vaesdec	%xmm0,%xmm1,%xmm1
3093	vaesdec	%xmm0,%xmm2,%xmm2
3094	vaesdec	%xmm0,%xmm3,%xmm3
3095	vaesdec	%xmm0,%xmm4,%xmm4
3096	vaesdec	%xmm0,%xmm5,%xmm5
3097	vmovdqu	112(%rcx),%xmm0
3098	vaesdec	%xmm0,%xmm1,%xmm1
3099	vaesdec	%xmm0,%xmm2,%xmm2
3100	vaesdec	%xmm0,%xmm3,%xmm3
3101	vaesdec	%xmm0,%xmm4,%xmm4
3102	vaesdec	%xmm0,%xmm5,%xmm5
3103	vmovdqu	128(%rcx),%xmm0
3104	vaesdec	%xmm0,%xmm1,%xmm1
3105	vaesdec	%xmm0,%xmm2,%xmm2
3106	vaesdec	%xmm0,%xmm3,%xmm3
3107	vaesdec	%xmm0,%xmm4,%xmm4
3108	vaesdec	%xmm0,%xmm5,%xmm5
3109	vmovdqu	144(%rcx),%xmm0
3110	vaesdec	%xmm0,%xmm1,%xmm1
3111	vaesdec	%xmm0,%xmm2,%xmm2
3112	vaesdec	%xmm0,%xmm3,%xmm3
3113	vaesdec	%xmm0,%xmm4,%xmm4
3114	vaesdec	%xmm0,%xmm5,%xmm5
3115	vmovdqu	160(%rcx),%xmm0
3116	vaesdeclast	%xmm0,%xmm1,%xmm1
3117	vaesdeclast	%xmm0,%xmm2,%xmm2
3118	vaesdeclast	%xmm0,%xmm3,%xmm3
3119	vaesdeclast	%xmm0,%xmm4,%xmm4
3120	vaesdeclast	%xmm0,%xmm5,%xmm5
3121	vpxor	%xmm9,%xmm1,%xmm1
3122	vpxor	%xmm10,%xmm2,%xmm2
3123	vpxor	%xmm11,%xmm3,%xmm3
3124	vpxor	%xmm12,%xmm4,%xmm4
3125	vpxor	%xmm13,%xmm5,%xmm5
3126	vmovdqu	%xmm1,(%rsi)
3127	vmovdqu	%xmm2,16(%rsi)
3128	vmovdqu	%xmm3,32(%rsi)
3129	vmovdqu	%xmm4,48(%rsi)
3130	addq	$0x50,%rsi
3131	vmovdqa	%xmm5,%xmm8
3132	jmp	.L_done_amivrujEyduiFoi
3133
3134.L_num_blocks_is_4_amivrujEyduiFoi:
3135	vmovdqa	0(%rsp),%xmm9
3136	movq	0(%rsp),%rax
3137	movq	8(%rsp),%rbx
3138	vmovdqu	0(%rdi),%xmm1
3139	xorq	%r11,%r11
3140	shlq	$1,%rax
3141	adcq	%rbx,%rbx
3142	cmovcq	%r10,%r11
3143	xorq	%r11,%rax
3144	movq	%rax,16(%rsp)
3145	movq	%rbx,16 + 8(%rsp)
3146	vmovdqa	16(%rsp),%xmm10
3147	vmovdqu	16(%rdi),%xmm2
3148	xorq	%r11,%r11
3149	shlq	$1,%rax
3150	adcq	%rbx,%rbx
3151	cmovcq	%r10,%r11
3152	xorq	%r11,%rax
3153	movq	%rax,32(%rsp)
3154	movq	%rbx,32 + 8(%rsp)
3155	vmovdqa	32(%rsp),%xmm11
3156	vmovdqu	32(%rdi),%xmm3
3157	xorq	%r11,%r11
3158	shlq	$1,%rax
3159	adcq	%rbx,%rbx
3160	cmovcq	%r10,%r11
3161	xorq	%r11,%rax
3162	movq	%rax,48(%rsp)
3163	movq	%rbx,48 + 8(%rsp)
3164	vmovdqa	48(%rsp),%xmm12
3165	vmovdqu	48(%rdi),%xmm4
3166	addq	$0x40,%rdi
3167	andq	$0xf,%rdx
3168	je	.L_done_4_amivrujEyduiFoi
3169
3170.L_steal_cipher_4_amivrujEyduiFoi:
3171	xorq	%r11,%r11
3172	shlq	$1,%rax
3173	adcq	%rbx,%rbx
3174	cmovcq	%r10,%r11
3175	xorq	%r11,%rax
3176	movq	%rax,16(%rsp)
3177	movq	%rbx,24(%rsp)
3178	vmovdqa64	%xmm12,%xmm13
3179	vmovdqa	16(%rsp),%xmm12
3180	vpxor	%xmm9,%xmm1,%xmm1
3181	vpxor	%xmm10,%xmm2,%xmm2
3182	vpxor	%xmm11,%xmm3,%xmm3
3183	vpxor	%xmm12,%xmm4,%xmm4
3184	vmovdqu	(%rcx),%xmm0
3185	vpxor	%xmm0,%xmm1,%xmm1
3186	vpxor	%xmm0,%xmm2,%xmm2
3187	vpxor	%xmm0,%xmm3,%xmm3
3188	vpxor	%xmm0,%xmm4,%xmm4
3189	vmovdqu	16(%rcx),%xmm0
3190	vaesdec	%xmm0,%xmm1,%xmm1
3191	vaesdec	%xmm0,%xmm2,%xmm2
3192	vaesdec	%xmm0,%xmm3,%xmm3
3193	vaesdec	%xmm0,%xmm4,%xmm4
3194	vmovdqu	32(%rcx),%xmm0
3195	vaesdec	%xmm0,%xmm1,%xmm1
3196	vaesdec	%xmm0,%xmm2,%xmm2
3197	vaesdec	%xmm0,%xmm3,%xmm3
3198	vaesdec	%xmm0,%xmm4,%xmm4
3199	vmovdqu	48(%rcx),%xmm0
3200	vaesdec	%xmm0,%xmm1,%xmm1
3201	vaesdec	%xmm0,%xmm2,%xmm2
3202	vaesdec	%xmm0,%xmm3,%xmm3
3203	vaesdec	%xmm0,%xmm4,%xmm4
3204	vmovdqu	64(%rcx),%xmm0
3205	vaesdec	%xmm0,%xmm1,%xmm1
3206	vaesdec	%xmm0,%xmm2,%xmm2
3207	vaesdec	%xmm0,%xmm3,%xmm3
3208	vaesdec	%xmm0,%xmm4,%xmm4
3209	vmovdqu	80(%rcx),%xmm0
3210	vaesdec	%xmm0,%xmm1,%xmm1
3211	vaesdec	%xmm0,%xmm2,%xmm2
3212	vaesdec	%xmm0,%xmm3,%xmm3
3213	vaesdec	%xmm0,%xmm4,%xmm4
3214	vmovdqu	96(%rcx),%xmm0
3215	vaesdec	%xmm0,%xmm1,%xmm1
3216	vaesdec	%xmm0,%xmm2,%xmm2
3217	vaesdec	%xmm0,%xmm3,%xmm3
3218	vaesdec	%xmm0,%xmm4,%xmm4
3219	vmovdqu	112(%rcx),%xmm0
3220	vaesdec	%xmm0,%xmm1,%xmm1
3221	vaesdec	%xmm0,%xmm2,%xmm2
3222	vaesdec	%xmm0,%xmm3,%xmm3
3223	vaesdec	%xmm0,%xmm4,%xmm4
3224	vmovdqu	128(%rcx),%xmm0
3225	vaesdec	%xmm0,%xmm1,%xmm1
3226	vaesdec	%xmm0,%xmm2,%xmm2
3227	vaesdec	%xmm0,%xmm3,%xmm3
3228	vaesdec	%xmm0,%xmm4,%xmm4
3229	vmovdqu	144(%rcx),%xmm0
3230	vaesdec	%xmm0,%xmm1,%xmm1
3231	vaesdec	%xmm0,%xmm2,%xmm2
3232	vaesdec	%xmm0,%xmm3,%xmm3
3233	vaesdec	%xmm0,%xmm4,%xmm4
3234	vmovdqu	160(%rcx),%xmm0
3235	vaesdeclast	%xmm0,%xmm1,%xmm1
3236	vaesdeclast	%xmm0,%xmm2,%xmm2
3237	vaesdeclast	%xmm0,%xmm3,%xmm3
3238	vaesdeclast	%xmm0,%xmm4,%xmm4
3239	vpxor	%xmm9,%xmm1,%xmm1
3240	vpxor	%xmm10,%xmm2,%xmm2
3241	vpxor	%xmm11,%xmm3,%xmm3
3242	vpxor	%xmm12,%xmm4,%xmm4
3243	vmovdqu	%xmm1,(%rsi)
3244	vmovdqu	%xmm2,16(%rsi)
3245	vmovdqu	%xmm3,32(%rsi)
3246	addq	$0x40,%rsi
3247	vmovdqa	%xmm13,%xmm0
3248	vmovdqa	%xmm4,%xmm8
3249	jmp	.L_steal_cipher_amivrujEyduiFoi
3250
3251.L_done_4_amivrujEyduiFoi:
3252	vpxor	%xmm9,%xmm1,%xmm1
3253	vpxor	%xmm10,%xmm2,%xmm2
3254	vpxor	%xmm11,%xmm3,%xmm3
3255	vpxor	%xmm12,%xmm4,%xmm4
3256	vmovdqu	(%rcx),%xmm0
3257	vpxor	%xmm0,%xmm1,%xmm1
3258	vpxor	%xmm0,%xmm2,%xmm2
3259	vpxor	%xmm0,%xmm3,%xmm3
3260	vpxor	%xmm0,%xmm4,%xmm4
3261	vmovdqu	16(%rcx),%xmm0
3262	vaesdec	%xmm0,%xmm1,%xmm1
3263	vaesdec	%xmm0,%xmm2,%xmm2
3264	vaesdec	%xmm0,%xmm3,%xmm3
3265	vaesdec	%xmm0,%xmm4,%xmm4
3266	vmovdqu	32(%rcx),%xmm0
3267	vaesdec	%xmm0,%xmm1,%xmm1
3268	vaesdec	%xmm0,%xmm2,%xmm2
3269	vaesdec	%xmm0,%xmm3,%xmm3
3270	vaesdec	%xmm0,%xmm4,%xmm4
3271	vmovdqu	48(%rcx),%xmm0
3272	vaesdec	%xmm0,%xmm1,%xmm1
3273	vaesdec	%xmm0,%xmm2,%xmm2
3274	vaesdec	%xmm0,%xmm3,%xmm3
3275	vaesdec	%xmm0,%xmm4,%xmm4
3276	vmovdqu	64(%rcx),%xmm0
3277	vaesdec	%xmm0,%xmm1,%xmm1
3278	vaesdec	%xmm0,%xmm2,%xmm2
3279	vaesdec	%xmm0,%xmm3,%xmm3
3280	vaesdec	%xmm0,%xmm4,%xmm4
3281	vmovdqu	80(%rcx),%xmm0
3282	vaesdec	%xmm0,%xmm1,%xmm1
3283	vaesdec	%xmm0,%xmm2,%xmm2
3284	vaesdec	%xmm0,%xmm3,%xmm3
3285	vaesdec	%xmm0,%xmm4,%xmm4
3286	vmovdqu	96(%rcx),%xmm0
3287	vaesdec	%xmm0,%xmm1,%xmm1
3288	vaesdec	%xmm0,%xmm2,%xmm2
3289	vaesdec	%xmm0,%xmm3,%xmm3
3290	vaesdec	%xmm0,%xmm4,%xmm4
3291	vmovdqu	112(%rcx),%xmm0
3292	vaesdec	%xmm0,%xmm1,%xmm1
3293	vaesdec	%xmm0,%xmm2,%xmm2
3294	vaesdec	%xmm0,%xmm3,%xmm3
3295	vaesdec	%xmm0,%xmm4,%xmm4
3296	vmovdqu	128(%rcx),%xmm0
3297	vaesdec	%xmm0,%xmm1,%xmm1
3298	vaesdec	%xmm0,%xmm2,%xmm2
3299	vaesdec	%xmm0,%xmm3,%xmm3
3300	vaesdec	%xmm0,%xmm4,%xmm4
3301	vmovdqu	144(%rcx),%xmm0
3302	vaesdec	%xmm0,%xmm1,%xmm1
3303	vaesdec	%xmm0,%xmm2,%xmm2
3304	vaesdec	%xmm0,%xmm3,%xmm3
3305	vaesdec	%xmm0,%xmm4,%xmm4
3306	vmovdqu	160(%rcx),%xmm0
3307	vaesdeclast	%xmm0,%xmm1,%xmm1
3308	vaesdeclast	%xmm0,%xmm2,%xmm2
3309	vaesdeclast	%xmm0,%xmm3,%xmm3
3310	vaesdeclast	%xmm0,%xmm4,%xmm4
3311	vpxor	%xmm9,%xmm1,%xmm1
3312	vpxor	%xmm10,%xmm2,%xmm2
3313	vpxor	%xmm11,%xmm3,%xmm3
3314	vpxor	%xmm12,%xmm4,%xmm4
3315	vmovdqu	%xmm1,(%rsi)
3316	vmovdqu	%xmm2,16(%rsi)
3317	vmovdqu	%xmm3,32(%rsi)
3318	addq	$0x40,%rsi
3319	vmovdqa	%xmm4,%xmm8
3320	jmp	.L_done_amivrujEyduiFoi
3321
3322.L_num_blocks_is_3_amivrujEyduiFoi:
3323	vmovdqa	0(%rsp),%xmm9
3324	movq	0(%rsp),%rax
3325	movq	8(%rsp),%rbx
3326	vmovdqu	0(%rdi),%xmm1
3327	xorq	%r11,%r11
3328	shlq	$1,%rax
3329	adcq	%rbx,%rbx
3330	cmovcq	%r10,%r11
3331	xorq	%r11,%rax
3332	movq	%rax,16(%rsp)
3333	movq	%rbx,16 + 8(%rsp)
3334	vmovdqa	16(%rsp),%xmm10
3335	vmovdqu	16(%rdi),%xmm2
3336	xorq	%r11,%r11
3337	shlq	$1,%rax
3338	adcq	%rbx,%rbx
3339	cmovcq	%r10,%r11
3340	xorq	%r11,%rax
3341	movq	%rax,32(%rsp)
3342	movq	%rbx,32 + 8(%rsp)
3343	vmovdqa	32(%rsp),%xmm11
3344	vmovdqu	32(%rdi),%xmm3
3345	addq	$0x30,%rdi
3346	andq	$0xf,%rdx
3347	je	.L_done_3_amivrujEyduiFoi
3348
3349.L_steal_cipher_3_amivrujEyduiFoi:
3350	xorq	%r11,%r11
3351	shlq	$1,%rax
3352	adcq	%rbx,%rbx
3353	cmovcq	%r10,%r11
3354	xorq	%r11,%rax
3355	movq	%rax,16(%rsp)
3356	movq	%rbx,24(%rsp)
3357	vmovdqa64	%xmm11,%xmm12
3358	vmovdqa	16(%rsp),%xmm11
3359	vpxor	%xmm9,%xmm1,%xmm1
3360	vpxor	%xmm10,%xmm2,%xmm2
3361	vpxor	%xmm11,%xmm3,%xmm3
3362	vmovdqu	(%rcx),%xmm0
3363	vpxor	%xmm0,%xmm1,%xmm1
3364	vpxor	%xmm0,%xmm2,%xmm2
3365	vpxor	%xmm0,%xmm3,%xmm3
3366	vmovdqu	16(%rcx),%xmm0
3367	vaesdec	%xmm0,%xmm1,%xmm1
3368	vaesdec	%xmm0,%xmm2,%xmm2
3369	vaesdec	%xmm0,%xmm3,%xmm3
3370	vmovdqu	32(%rcx),%xmm0
3371	vaesdec	%xmm0,%xmm1,%xmm1
3372	vaesdec	%xmm0,%xmm2,%xmm2
3373	vaesdec	%xmm0,%xmm3,%xmm3
3374	vmovdqu	48(%rcx),%xmm0
3375	vaesdec	%xmm0,%xmm1,%xmm1
3376	vaesdec	%xmm0,%xmm2,%xmm2
3377	vaesdec	%xmm0,%xmm3,%xmm3
3378	vmovdqu	64(%rcx),%xmm0
3379	vaesdec	%xmm0,%xmm1,%xmm1
3380	vaesdec	%xmm0,%xmm2,%xmm2
3381	vaesdec	%xmm0,%xmm3,%xmm3
3382	vmovdqu	80(%rcx),%xmm0
3383	vaesdec	%xmm0,%xmm1,%xmm1
3384	vaesdec	%xmm0,%xmm2,%xmm2
3385	vaesdec	%xmm0,%xmm3,%xmm3
3386	vmovdqu	96(%rcx),%xmm0
3387	vaesdec	%xmm0,%xmm1,%xmm1
3388	vaesdec	%xmm0,%xmm2,%xmm2
3389	vaesdec	%xmm0,%xmm3,%xmm3
3390	vmovdqu	112(%rcx),%xmm0
3391	vaesdec	%xmm0,%xmm1,%xmm1
3392	vaesdec	%xmm0,%xmm2,%xmm2
3393	vaesdec	%xmm0,%xmm3,%xmm3
3394	vmovdqu	128(%rcx),%xmm0
3395	vaesdec	%xmm0,%xmm1,%xmm1
3396	vaesdec	%xmm0,%xmm2,%xmm2
3397	vaesdec	%xmm0,%xmm3,%xmm3
3398	vmovdqu	144(%rcx),%xmm0
3399	vaesdec	%xmm0,%xmm1,%xmm1
3400	vaesdec	%xmm0,%xmm2,%xmm2
3401	vaesdec	%xmm0,%xmm3,%xmm3
3402	vmovdqu	160(%rcx),%xmm0
3403	vaesdeclast	%xmm0,%xmm1,%xmm1
3404	vaesdeclast	%xmm0,%xmm2,%xmm2
3405	vaesdeclast	%xmm0,%xmm3,%xmm3
3406	vpxor	%xmm9,%xmm1,%xmm1
3407	vpxor	%xmm10,%xmm2,%xmm2
3408	vpxor	%xmm11,%xmm3,%xmm3
3409	vmovdqu	%xmm1,(%rsi)
3410	vmovdqu	%xmm2,16(%rsi)
3411	addq	$0x30,%rsi
3412	vmovdqa	%xmm12,%xmm0
3413	vmovdqa	%xmm3,%xmm8
3414	jmp	.L_steal_cipher_amivrujEyduiFoi
3415
3416.L_done_3_amivrujEyduiFoi:
3417	vpxor	%xmm9,%xmm1,%xmm1
3418	vpxor	%xmm10,%xmm2,%xmm2
3419	vpxor	%xmm11,%xmm3,%xmm3
3420	vmovdqu	(%rcx),%xmm0
3421	vpxor	%xmm0,%xmm1,%xmm1
3422	vpxor	%xmm0,%xmm2,%xmm2
3423	vpxor	%xmm0,%xmm3,%xmm3
3424	vmovdqu	16(%rcx),%xmm0
3425	vaesdec	%xmm0,%xmm1,%xmm1
3426	vaesdec	%xmm0,%xmm2,%xmm2
3427	vaesdec	%xmm0,%xmm3,%xmm3
3428	vmovdqu	32(%rcx),%xmm0
3429	vaesdec	%xmm0,%xmm1,%xmm1
3430	vaesdec	%xmm0,%xmm2,%xmm2
3431	vaesdec	%xmm0,%xmm3,%xmm3
3432	vmovdqu	48(%rcx),%xmm0
3433	vaesdec	%xmm0,%xmm1,%xmm1
3434	vaesdec	%xmm0,%xmm2,%xmm2
3435	vaesdec	%xmm0,%xmm3,%xmm3
3436	vmovdqu	64(%rcx),%xmm0
3437	vaesdec	%xmm0,%xmm1,%xmm1
3438	vaesdec	%xmm0,%xmm2,%xmm2
3439	vaesdec	%xmm0,%xmm3,%xmm3
3440	vmovdqu	80(%rcx),%xmm0
3441	vaesdec	%xmm0,%xmm1,%xmm1
3442	vaesdec	%xmm0,%xmm2,%xmm2
3443	vaesdec	%xmm0,%xmm3,%xmm3
3444	vmovdqu	96(%rcx),%xmm0
3445	vaesdec	%xmm0,%xmm1,%xmm1
3446	vaesdec	%xmm0,%xmm2,%xmm2
3447	vaesdec	%xmm0,%xmm3,%xmm3
3448	vmovdqu	112(%rcx),%xmm0
3449	vaesdec	%xmm0,%xmm1,%xmm1
3450	vaesdec	%xmm0,%xmm2,%xmm2
3451	vaesdec	%xmm0,%xmm3,%xmm3
3452	vmovdqu	128(%rcx),%xmm0
3453	vaesdec	%xmm0,%xmm1,%xmm1
3454	vaesdec	%xmm0,%xmm2,%xmm2
3455	vaesdec	%xmm0,%xmm3,%xmm3
3456	vmovdqu	144(%rcx),%xmm0
3457	vaesdec	%xmm0,%xmm1,%xmm1
3458	vaesdec	%xmm0,%xmm2,%xmm2
3459	vaesdec	%xmm0,%xmm3,%xmm3
3460	vmovdqu	160(%rcx),%xmm0
3461	vaesdeclast	%xmm0,%xmm1,%xmm1
3462	vaesdeclast	%xmm0,%xmm2,%xmm2
3463	vaesdeclast	%xmm0,%xmm3,%xmm3
3464	vpxor	%xmm9,%xmm1,%xmm1
3465	vpxor	%xmm10,%xmm2,%xmm2
3466	vpxor	%xmm11,%xmm3,%xmm3
3467	vmovdqu	%xmm1,(%rsi)
3468	vmovdqu	%xmm2,16(%rsi)
3469	addq	$0x30,%rsi
3470	vmovdqa	%xmm3,%xmm8
3471	jmp	.L_done_amivrujEyduiFoi
3472
3473.L_num_blocks_is_2_amivrujEyduiFoi:
3474	vmovdqa	0(%rsp),%xmm9
3475	movq	0(%rsp),%rax
3476	movq	8(%rsp),%rbx
3477	vmovdqu	0(%rdi),%xmm1
3478	xorq	%r11,%r11
3479	shlq	$1,%rax
3480	adcq	%rbx,%rbx
3481	cmovcq	%r10,%r11
3482	xorq	%r11,%rax
3483	movq	%rax,16(%rsp)
3484	movq	%rbx,16 + 8(%rsp)
3485	vmovdqa	16(%rsp),%xmm10
3486	vmovdqu	16(%rdi),%xmm2
3487	addq	$0x20,%rdi
3488	andq	$0xf,%rdx
3489	je	.L_done_2_amivrujEyduiFoi
3490
3491.L_steal_cipher_2_amivrujEyduiFoi:
3492	xorq	%r11,%r11
3493	shlq	$1,%rax
3494	adcq	%rbx,%rbx
3495	cmovcq	%r10,%r11
3496	xorq	%r11,%rax
3497	movq	%rax,16(%rsp)
3498	movq	%rbx,24(%rsp)
3499	vmovdqa64	%xmm10,%xmm11
3500	vmovdqa	16(%rsp),%xmm10
3501	vpxor	%xmm9,%xmm1,%xmm1
3502	vpxor	%xmm10,%xmm2,%xmm2
3503	vmovdqu	(%rcx),%xmm0
3504	vpxor	%xmm0,%xmm1,%xmm1
3505	vpxor	%xmm0,%xmm2,%xmm2
3506	vmovdqu	16(%rcx),%xmm0
3507	vaesdec	%xmm0,%xmm1,%xmm1
3508	vaesdec	%xmm0,%xmm2,%xmm2
3509	vmovdqu	32(%rcx),%xmm0
3510	vaesdec	%xmm0,%xmm1,%xmm1
3511	vaesdec	%xmm0,%xmm2,%xmm2
3512	vmovdqu	48(%rcx),%xmm0
3513	vaesdec	%xmm0,%xmm1,%xmm1
3514	vaesdec	%xmm0,%xmm2,%xmm2
3515	vmovdqu	64(%rcx),%xmm0
3516	vaesdec	%xmm0,%xmm1,%xmm1
3517	vaesdec	%xmm0,%xmm2,%xmm2
3518	vmovdqu	80(%rcx),%xmm0
3519	vaesdec	%xmm0,%xmm1,%xmm1
3520	vaesdec	%xmm0,%xmm2,%xmm2
3521	vmovdqu	96(%rcx),%xmm0
3522	vaesdec	%xmm0,%xmm1,%xmm1
3523	vaesdec	%xmm0,%xmm2,%xmm2
3524	vmovdqu	112(%rcx),%xmm0
3525	vaesdec	%xmm0,%xmm1,%xmm1
3526	vaesdec	%xmm0,%xmm2,%xmm2
3527	vmovdqu	128(%rcx),%xmm0
3528	vaesdec	%xmm0,%xmm1,%xmm1
3529	vaesdec	%xmm0,%xmm2,%xmm2
3530	vmovdqu	144(%rcx),%xmm0
3531	vaesdec	%xmm0,%xmm1,%xmm1
3532	vaesdec	%xmm0,%xmm2,%xmm2
3533	vmovdqu	160(%rcx),%xmm0
3534	vaesdeclast	%xmm0,%xmm1,%xmm1
3535	vaesdeclast	%xmm0,%xmm2,%xmm2
3536	vpxor	%xmm9,%xmm1,%xmm1
3537	vpxor	%xmm10,%xmm2,%xmm2
3538	vmovdqu	%xmm1,(%rsi)
3539	addq	$0x20,%rsi
3540	vmovdqa	%xmm11,%xmm0
3541	vmovdqa	%xmm2,%xmm8
3542	jmp	.L_steal_cipher_amivrujEyduiFoi
3543
3544.L_done_2_amivrujEyduiFoi:
3545	vpxor	%xmm9,%xmm1,%xmm1
3546	vpxor	%xmm10,%xmm2,%xmm2
3547	vmovdqu	(%rcx),%xmm0
3548	vpxor	%xmm0,%xmm1,%xmm1
3549	vpxor	%xmm0,%xmm2,%xmm2
3550	vmovdqu	16(%rcx),%xmm0
3551	vaesdec	%xmm0,%xmm1,%xmm1
3552	vaesdec	%xmm0,%xmm2,%xmm2
3553	vmovdqu	32(%rcx),%xmm0
3554	vaesdec	%xmm0,%xmm1,%xmm1
3555	vaesdec	%xmm0,%xmm2,%xmm2
3556	vmovdqu	48(%rcx),%xmm0
3557	vaesdec	%xmm0,%xmm1,%xmm1
3558	vaesdec	%xmm0,%xmm2,%xmm2
3559	vmovdqu	64(%rcx),%xmm0
3560	vaesdec	%xmm0,%xmm1,%xmm1
3561	vaesdec	%xmm0,%xmm2,%xmm2
3562	vmovdqu	80(%rcx),%xmm0
3563	vaesdec	%xmm0,%xmm1,%xmm1
3564	vaesdec	%xmm0,%xmm2,%xmm2
3565	vmovdqu	96(%rcx),%xmm0
3566	vaesdec	%xmm0,%xmm1,%xmm1
3567	vaesdec	%xmm0,%xmm2,%xmm2
3568	vmovdqu	112(%rcx),%xmm0
3569	vaesdec	%xmm0,%xmm1,%xmm1
3570	vaesdec	%xmm0,%xmm2,%xmm2
3571	vmovdqu	128(%rcx),%xmm0
3572	vaesdec	%xmm0,%xmm1,%xmm1
3573	vaesdec	%xmm0,%xmm2,%xmm2
3574	vmovdqu	144(%rcx),%xmm0
3575	vaesdec	%xmm0,%xmm1,%xmm1
3576	vaesdec	%xmm0,%xmm2,%xmm2
3577	vmovdqu	160(%rcx),%xmm0
3578	vaesdeclast	%xmm0,%xmm1,%xmm1
3579	vaesdeclast	%xmm0,%xmm2,%xmm2
3580	vpxor	%xmm9,%xmm1,%xmm1
3581	vpxor	%xmm10,%xmm2,%xmm2
3582	vmovdqu	%xmm1,(%rsi)
3583	addq	$0x20,%rsi
3584	vmovdqa	%xmm2,%xmm8
3585	jmp	.L_done_amivrujEyduiFoi
3586
3587.L_num_blocks_is_1_amivrujEyduiFoi:
3588	vmovdqa	0(%rsp),%xmm9
3589	movq	0(%rsp),%rax
3590	movq	8(%rsp),%rbx
3591	vmovdqu	0(%rdi),%xmm1
3592	addq	$0x10,%rdi
3593	andq	$0xf,%rdx
3594	je	.L_done_1_amivrujEyduiFoi
3595
3596.L_steal_cipher_1_amivrujEyduiFoi:
3597	xorq	%r11,%r11
3598	shlq	$1,%rax
3599	adcq	%rbx,%rbx
3600	cmovcq	%r10,%r11
3601	xorq	%r11,%rax
3602	movq	%rax,16(%rsp)
3603	movq	%rbx,24(%rsp)
3604	vmovdqa64	%xmm9,%xmm10
3605	vmovdqa	16(%rsp),%xmm9
3606	vpxor	%xmm9,%xmm1,%xmm1
3607	vmovdqu	(%rcx),%xmm0
3608	vpxor	%xmm0,%xmm1,%xmm1
3609	vmovdqu	16(%rcx),%xmm0
3610	vaesdec	%xmm0,%xmm1,%xmm1
3611	vmovdqu	32(%rcx),%xmm0
3612	vaesdec	%xmm0,%xmm1,%xmm1
3613	vmovdqu	48(%rcx),%xmm0
3614	vaesdec	%xmm0,%xmm1,%xmm1
3615	vmovdqu	64(%rcx),%xmm0
3616	vaesdec	%xmm0,%xmm1,%xmm1
3617	vmovdqu	80(%rcx),%xmm0
3618	vaesdec	%xmm0,%xmm1,%xmm1
3619	vmovdqu	96(%rcx),%xmm0
3620	vaesdec	%xmm0,%xmm1,%xmm1
3621	vmovdqu	112(%rcx),%xmm0
3622	vaesdec	%xmm0,%xmm1,%xmm1
3623	vmovdqu	128(%rcx),%xmm0
3624	vaesdec	%xmm0,%xmm1,%xmm1
3625	vmovdqu	144(%rcx),%xmm0
3626	vaesdec	%xmm0,%xmm1,%xmm1
3627	vmovdqu	160(%rcx),%xmm0
3628	vaesdeclast	%xmm0,%xmm1,%xmm1
3629	vpxor	%xmm9,%xmm1,%xmm1
3630	addq	$0x10,%rsi
3631	vmovdqa	%xmm10,%xmm0
3632	vmovdqa	%xmm1,%xmm8
3633	jmp	.L_steal_cipher_amivrujEyduiFoi
3634
3635.L_done_1_amivrujEyduiFoi:
3636	vpxor	%xmm9,%xmm1,%xmm1
3637	vmovdqu	(%rcx),%xmm0
3638	vpxor	%xmm0,%xmm1,%xmm1
3639	vmovdqu	16(%rcx),%xmm0
3640	vaesdec	%xmm0,%xmm1,%xmm1
3641	vmovdqu	32(%rcx),%xmm0
3642	vaesdec	%xmm0,%xmm1,%xmm1
3643	vmovdqu	48(%rcx),%xmm0
3644	vaesdec	%xmm0,%xmm1,%xmm1
3645	vmovdqu	64(%rcx),%xmm0
3646	vaesdec	%xmm0,%xmm1,%xmm1
3647	vmovdqu	80(%rcx),%xmm0
3648	vaesdec	%xmm0,%xmm1,%xmm1
3649	vmovdqu	96(%rcx),%xmm0
3650	vaesdec	%xmm0,%xmm1,%xmm1
3651	vmovdqu	112(%rcx),%xmm0
3652	vaesdec	%xmm0,%xmm1,%xmm1
3653	vmovdqu	128(%rcx),%xmm0
3654	vaesdec	%xmm0,%xmm1,%xmm1
3655	vmovdqu	144(%rcx),%xmm0
3656	vaesdec	%xmm0,%xmm1,%xmm1
3657	vmovdqu	160(%rcx),%xmm0
3658	vaesdeclast	%xmm0,%xmm1,%xmm1
3659	vpxor	%xmm9,%xmm1,%xmm1
3660	addq	$0x10,%rsi
3661	vmovdqa	%xmm1,%xmm8
3662	jmp	.L_done_amivrujEyduiFoi
3663.cfi_endproc
3664.globl	aesni_xts_256_encrypt_avx512
3665.hidden	aesni_xts_256_encrypt_avx512
3666.type	aesni_xts_256_encrypt_avx512,@function
3667.align	32
3668aesni_xts_256_encrypt_avx512:
3669.cfi_startproc
3670.byte	243,15,30,250
3671	pushq	%rbp
3672	movq	%rsp,%rbp
3673	subq	$136,%rsp
3674	andq	$0xffffffffffffffc0,%rsp
3675	movq	%rbx,128(%rsp)
3676	movq	$0x87,%r10
3677	vmovdqu	(%r9),%xmm1
3678	vpxor	(%r8),%xmm1,%xmm1
3679	vaesenc	16(%r8),%xmm1,%xmm1
3680	vaesenc	32(%r8),%xmm1,%xmm1
3681	vaesenc	48(%r8),%xmm1,%xmm1
3682	vaesenc	64(%r8),%xmm1,%xmm1
3683	vaesenc	80(%r8),%xmm1,%xmm1
3684	vaesenc	96(%r8),%xmm1,%xmm1
3685	vaesenc	112(%r8),%xmm1,%xmm1
3686	vaesenc	128(%r8),%xmm1,%xmm1
3687	vaesenc	144(%r8),%xmm1,%xmm1
3688	vaesenc	160(%r8),%xmm1,%xmm1
3689	vaesenc	176(%r8),%xmm1,%xmm1
3690	vaesenc	192(%r8),%xmm1,%xmm1
3691	vaesenc	208(%r8),%xmm1,%xmm1
3692	vaesenclast	224(%r8),%xmm1,%xmm1
3693	vmovdqa	%xmm1,(%rsp)
3694
3695	cmpq	$0x80,%rdx
3696	jl	.L_less_than_128_bytes_wcpqaDvsGlbjGoe
3697	vpbroadcastq	%r10,%zmm25
3698	cmpq	$0x100,%rdx
3699	jge	.L_start_by16_wcpqaDvsGlbjGoe
3700	cmpq	$0x80,%rdx
3701	jge	.L_start_by8_wcpqaDvsGlbjGoe
3702
3703.L_do_n_blocks_wcpqaDvsGlbjGoe:
3704	cmpq	$0x0,%rdx
3705	je	.L_ret_wcpqaDvsGlbjGoe
3706	cmpq	$0x70,%rdx
3707	jge	.L_remaining_num_blocks_is_7_wcpqaDvsGlbjGoe
3708	cmpq	$0x60,%rdx
3709	jge	.L_remaining_num_blocks_is_6_wcpqaDvsGlbjGoe
3710	cmpq	$0x50,%rdx
3711	jge	.L_remaining_num_blocks_is_5_wcpqaDvsGlbjGoe
3712	cmpq	$0x40,%rdx
3713	jge	.L_remaining_num_blocks_is_4_wcpqaDvsGlbjGoe
3714	cmpq	$0x30,%rdx
3715	jge	.L_remaining_num_blocks_is_3_wcpqaDvsGlbjGoe
3716	cmpq	$0x20,%rdx
3717	jge	.L_remaining_num_blocks_is_2_wcpqaDvsGlbjGoe
3718	cmpq	$0x10,%rdx
3719	jge	.L_remaining_num_blocks_is_1_wcpqaDvsGlbjGoe
3720	vmovdqa	%xmm0,%xmm8
3721	vmovdqa	%xmm9,%xmm0
3722	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
3723
3724.L_remaining_num_blocks_is_7_wcpqaDvsGlbjGoe:
3725	movq	$0x0000ffffffffffff,%r8
3726	kmovq	%r8,%k1
3727	vmovdqu8	(%rdi),%zmm1
3728	vmovdqu8	64(%rdi),%zmm2{%k1}
3729	addq	$0x70,%rdi
3730	vbroadcasti32x4	(%rcx),%zmm0
3731	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
3732	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
3733	vbroadcasti32x4	16(%rcx),%zmm0
3734	vaesenc	%zmm0,%zmm1,%zmm1
3735	vaesenc	%zmm0,%zmm2,%zmm2
3736
3737
3738	vbroadcasti32x4	32(%rcx),%zmm0
3739	vaesenc	%zmm0,%zmm1,%zmm1
3740	vaesenc	%zmm0,%zmm2,%zmm2
3741
3742
3743	vbroadcasti32x4	48(%rcx),%zmm0
3744	vaesenc	%zmm0,%zmm1,%zmm1
3745	vaesenc	%zmm0,%zmm2,%zmm2
3746
3747	vbroadcasti32x4	64(%rcx),%zmm0
3748	vaesenc	%zmm0,%zmm1,%zmm1
3749	vaesenc	%zmm0,%zmm2,%zmm2
3750
3751
3752	vbroadcasti32x4	80(%rcx),%zmm0
3753	vaesenc	%zmm0,%zmm1,%zmm1
3754	vaesenc	%zmm0,%zmm2,%zmm2
3755
3756
3757	vbroadcasti32x4	96(%rcx),%zmm0
3758	vaesenc	%zmm0,%zmm1,%zmm1
3759	vaesenc	%zmm0,%zmm2,%zmm2
3760
3761
3762	vbroadcasti32x4	112(%rcx),%zmm0
3763	vaesenc	%zmm0,%zmm1,%zmm1
3764	vaesenc	%zmm0,%zmm2,%zmm2
3765
3766
3767	vbroadcasti32x4	128(%rcx),%zmm0
3768	vaesenc	%zmm0,%zmm1,%zmm1
3769	vaesenc	%zmm0,%zmm2,%zmm2
3770
3771
3772	vbroadcasti32x4	144(%rcx),%zmm0
3773	vaesenc	%zmm0,%zmm1,%zmm1
3774	vaesenc	%zmm0,%zmm2,%zmm2
3775
3776	vbroadcasti32x4	160(%rcx),%zmm0
3777	vaesenc	%zmm0,%zmm1,%zmm1
3778	vaesenc	%zmm0,%zmm2,%zmm2
3779
3780
3781	vbroadcasti32x4	176(%rcx),%zmm0
3782	vaesenc	%zmm0,%zmm1,%zmm1
3783	vaesenc	%zmm0,%zmm2,%zmm2
3784
3785
3786	vbroadcasti32x4	192(%rcx),%zmm0
3787	vaesenc	%zmm0,%zmm1,%zmm1
3788	vaesenc	%zmm0,%zmm2,%zmm2
3789
3790
3791	vbroadcasti32x4	208(%rcx),%zmm0
3792	vaesenc	%zmm0,%zmm1,%zmm1
3793	vaesenc	%zmm0,%zmm2,%zmm2
3794
3795
3796	vbroadcasti32x4	224(%rcx),%zmm0
3797	vaesenclast	%zmm0,%zmm1,%zmm1
3798	vaesenclast	%zmm0,%zmm2,%zmm2
3799	vpxorq	%zmm9,%zmm1,%zmm1
3800	vpxorq	%zmm10,%zmm2,%zmm2
3801	vmovdqu8	%zmm1,(%rsi)
3802	vmovdqu8	%zmm2,64(%rsi){%k1}
3803	addq	$0x70,%rsi
3804	vextracti32x4	$0x2,%zmm2,%xmm8
3805	vextracti32x4	$0x3,%zmm10,%xmm0
3806	andq	$0xf,%rdx
3807	je	.L_ret_wcpqaDvsGlbjGoe
3808	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
3809
3810.L_remaining_num_blocks_is_6_wcpqaDvsGlbjGoe:
3811	vmovdqu8	(%rdi),%zmm1
3812	vmovdqu8	64(%rdi),%ymm2
3813	addq	$0x60,%rdi
3814	vbroadcasti32x4	(%rcx),%zmm0
3815	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
3816	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
3817	vbroadcasti32x4	16(%rcx),%zmm0
3818	vaesenc	%zmm0,%zmm1,%zmm1
3819	vaesenc	%zmm0,%zmm2,%zmm2
3820
3821
3822	vbroadcasti32x4	32(%rcx),%zmm0
3823	vaesenc	%zmm0,%zmm1,%zmm1
3824	vaesenc	%zmm0,%zmm2,%zmm2
3825
3826
3827	vbroadcasti32x4	48(%rcx),%zmm0
3828	vaesenc	%zmm0,%zmm1,%zmm1
3829	vaesenc	%zmm0,%zmm2,%zmm2
3830
3831	vbroadcasti32x4	64(%rcx),%zmm0
3832	vaesenc	%zmm0,%zmm1,%zmm1
3833	vaesenc	%zmm0,%zmm2,%zmm2
3834
3835
3836	vbroadcasti32x4	80(%rcx),%zmm0
3837	vaesenc	%zmm0,%zmm1,%zmm1
3838	vaesenc	%zmm0,%zmm2,%zmm2
3839
3840
3841	vbroadcasti32x4	96(%rcx),%zmm0
3842	vaesenc	%zmm0,%zmm1,%zmm1
3843	vaesenc	%zmm0,%zmm2,%zmm2
3844
3845
3846	vbroadcasti32x4	112(%rcx),%zmm0
3847	vaesenc	%zmm0,%zmm1,%zmm1
3848	vaesenc	%zmm0,%zmm2,%zmm2
3849
3850
3851	vbroadcasti32x4	128(%rcx),%zmm0
3852	vaesenc	%zmm0,%zmm1,%zmm1
3853	vaesenc	%zmm0,%zmm2,%zmm2
3854
3855
3856	vbroadcasti32x4	144(%rcx),%zmm0
3857	vaesenc	%zmm0,%zmm1,%zmm1
3858	vaesenc	%zmm0,%zmm2,%zmm2
3859
3860	vbroadcasti32x4	160(%rcx),%zmm0
3861	vaesenc	%zmm0,%zmm1,%zmm1
3862	vaesenc	%zmm0,%zmm2,%zmm2
3863
3864
3865	vbroadcasti32x4	176(%rcx),%zmm0
3866	vaesenc	%zmm0,%zmm1,%zmm1
3867	vaesenc	%zmm0,%zmm2,%zmm2
3868
3869
3870	vbroadcasti32x4	192(%rcx),%zmm0
3871	vaesenc	%zmm0,%zmm1,%zmm1
3872	vaesenc	%zmm0,%zmm2,%zmm2
3873
3874
3875	vbroadcasti32x4	208(%rcx),%zmm0
3876	vaesenc	%zmm0,%zmm1,%zmm1
3877	vaesenc	%zmm0,%zmm2,%zmm2
3878
3879
3880	vbroadcasti32x4	224(%rcx),%zmm0
3881	vaesenclast	%zmm0,%zmm1,%zmm1
3882	vaesenclast	%zmm0,%zmm2,%zmm2
3883	vpxorq	%zmm9,%zmm1,%zmm1
3884	vpxorq	%zmm10,%zmm2,%zmm2
3885	vmovdqu8	%zmm1,(%rsi)
3886	vmovdqu8	%ymm2,64(%rsi)
3887	addq	$0x60,%rsi
3888	vextracti32x4	$0x1,%zmm2,%xmm8
3889	vextracti32x4	$0x2,%zmm10,%xmm0
3890	andq	$0xf,%rdx
3891	je	.L_ret_wcpqaDvsGlbjGoe
3892	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
3893
3894.L_remaining_num_blocks_is_5_wcpqaDvsGlbjGoe:
3895	vmovdqu8	(%rdi),%zmm1
3896	vmovdqu	64(%rdi),%xmm2
3897	addq	$0x50,%rdi
3898	vbroadcasti32x4	(%rcx),%zmm0
3899	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
3900	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
3901	vbroadcasti32x4	16(%rcx),%zmm0
3902	vaesenc	%zmm0,%zmm1,%zmm1
3903	vaesenc	%zmm0,%zmm2,%zmm2
3904
3905
3906	vbroadcasti32x4	32(%rcx),%zmm0
3907	vaesenc	%zmm0,%zmm1,%zmm1
3908	vaesenc	%zmm0,%zmm2,%zmm2
3909
3910
3911	vbroadcasti32x4	48(%rcx),%zmm0
3912	vaesenc	%zmm0,%zmm1,%zmm1
3913	vaesenc	%zmm0,%zmm2,%zmm2
3914
3915	vbroadcasti32x4	64(%rcx),%zmm0
3916	vaesenc	%zmm0,%zmm1,%zmm1
3917	vaesenc	%zmm0,%zmm2,%zmm2
3918
3919
3920	vbroadcasti32x4	80(%rcx),%zmm0
3921	vaesenc	%zmm0,%zmm1,%zmm1
3922	vaesenc	%zmm0,%zmm2,%zmm2
3923
3924
3925	vbroadcasti32x4	96(%rcx),%zmm0
3926	vaesenc	%zmm0,%zmm1,%zmm1
3927	vaesenc	%zmm0,%zmm2,%zmm2
3928
3929
3930	vbroadcasti32x4	112(%rcx),%zmm0
3931	vaesenc	%zmm0,%zmm1,%zmm1
3932	vaesenc	%zmm0,%zmm2,%zmm2
3933
3934
3935	vbroadcasti32x4	128(%rcx),%zmm0
3936	vaesenc	%zmm0,%zmm1,%zmm1
3937	vaesenc	%zmm0,%zmm2,%zmm2
3938
3939
3940	vbroadcasti32x4	144(%rcx),%zmm0
3941	vaesenc	%zmm0,%zmm1,%zmm1
3942	vaesenc	%zmm0,%zmm2,%zmm2
3943
3944	vbroadcasti32x4	160(%rcx),%zmm0
3945	vaesenc	%zmm0,%zmm1,%zmm1
3946	vaesenc	%zmm0,%zmm2,%zmm2
3947
3948
3949	vbroadcasti32x4	176(%rcx),%zmm0
3950	vaesenc	%zmm0,%zmm1,%zmm1
3951	vaesenc	%zmm0,%zmm2,%zmm2
3952
3953
3954	vbroadcasti32x4	192(%rcx),%zmm0
3955	vaesenc	%zmm0,%zmm1,%zmm1
3956	vaesenc	%zmm0,%zmm2,%zmm2
3957
3958
3959	vbroadcasti32x4	208(%rcx),%zmm0
3960	vaesenc	%zmm0,%zmm1,%zmm1
3961	vaesenc	%zmm0,%zmm2,%zmm2
3962
3963
3964	vbroadcasti32x4	224(%rcx),%zmm0
3965	vaesenclast	%zmm0,%zmm1,%zmm1
3966	vaesenclast	%zmm0,%zmm2,%zmm2
3967	vpxorq	%zmm9,%zmm1,%zmm1
3968	vpxorq	%zmm10,%zmm2,%zmm2
3969	vmovdqu8	%zmm1,(%rsi)
3970	vmovdqu	%xmm2,64(%rsi)
3971	addq	$0x50,%rsi
3972	vmovdqa	%xmm2,%xmm8
3973	vextracti32x4	$0x1,%zmm10,%xmm0
3974	andq	$0xf,%rdx
3975	je	.L_ret_wcpqaDvsGlbjGoe
3976	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
3977
3978.L_remaining_num_blocks_is_4_wcpqaDvsGlbjGoe:
3979	vmovdqu8	(%rdi),%zmm1
3980	addq	$0x40,%rdi
3981	vbroadcasti32x4	(%rcx),%zmm0
3982	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
3983	vbroadcasti32x4	16(%rcx),%zmm0
3984	vaesenc	%zmm0,%zmm1,%zmm1
3985	vbroadcasti32x4	32(%rcx),%zmm0
3986	vaesenc	%zmm0,%zmm1,%zmm1
3987	vbroadcasti32x4	48(%rcx),%zmm0
3988	vaesenc	%zmm0,%zmm1,%zmm1
3989	vbroadcasti32x4	64(%rcx),%zmm0
3990	vaesenc	%zmm0,%zmm1,%zmm1
3991	vbroadcasti32x4	80(%rcx),%zmm0
3992	vaesenc	%zmm0,%zmm1,%zmm1
3993	vbroadcasti32x4	96(%rcx),%zmm0
3994	vaesenc	%zmm0,%zmm1,%zmm1
3995	vbroadcasti32x4	112(%rcx),%zmm0
3996	vaesenc	%zmm0,%zmm1,%zmm1
3997	vbroadcasti32x4	128(%rcx),%zmm0
3998	vaesenc	%zmm0,%zmm1,%zmm1
3999	vbroadcasti32x4	144(%rcx),%zmm0
4000	vaesenc	%zmm0,%zmm1,%zmm1
4001	vbroadcasti32x4	160(%rcx),%zmm0
4002	vaesenc	%zmm0,%zmm1,%zmm1
4003	vbroadcasti32x4	176(%rcx),%zmm0
4004	vaesenc	%zmm0,%zmm1,%zmm1
4005	vbroadcasti32x4	192(%rcx),%zmm0
4006	vaesenc	%zmm0,%zmm1,%zmm1
4007	vbroadcasti32x4	208(%rcx),%zmm0
4008	vaesenc	%zmm0,%zmm1,%zmm1
4009	vbroadcasti32x4	224(%rcx),%zmm0
4010	vaesenclast	%zmm0,%zmm1,%zmm1
4011	vpxorq	%zmm9,%zmm1,%zmm1
4012	vmovdqu8	%zmm1,(%rsi)
4013	addq	$0x40,%rsi
4014	vextracti32x4	$0x3,%zmm1,%xmm8
4015	vmovdqa64	%xmm10,%xmm0
4016	andq	$0xf,%rdx
4017	je	.L_ret_wcpqaDvsGlbjGoe
4018	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
4019.L_remaining_num_blocks_is_3_wcpqaDvsGlbjGoe:
4020	movq	$-1,%r8
4021	shrq	$0x10,%r8
4022	kmovq	%r8,%k1
4023	vmovdqu8	(%rdi),%zmm1{%k1}
4024	addq	$0x30,%rdi
4025	vbroadcasti32x4	(%rcx),%zmm0
4026	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
4027	vbroadcasti32x4	16(%rcx),%zmm0
4028	vaesenc	%zmm0,%zmm1,%zmm1
4029	vbroadcasti32x4	32(%rcx),%zmm0
4030	vaesenc	%zmm0,%zmm1,%zmm1
4031	vbroadcasti32x4	48(%rcx),%zmm0
4032	vaesenc	%zmm0,%zmm1,%zmm1
4033	vbroadcasti32x4	64(%rcx),%zmm0
4034	vaesenc	%zmm0,%zmm1,%zmm1
4035	vbroadcasti32x4	80(%rcx),%zmm0
4036	vaesenc	%zmm0,%zmm1,%zmm1
4037	vbroadcasti32x4	96(%rcx),%zmm0
4038	vaesenc	%zmm0,%zmm1,%zmm1
4039	vbroadcasti32x4	112(%rcx),%zmm0
4040	vaesenc	%zmm0,%zmm1,%zmm1
4041	vbroadcasti32x4	128(%rcx),%zmm0
4042	vaesenc	%zmm0,%zmm1,%zmm1
4043	vbroadcasti32x4	144(%rcx),%zmm0
4044	vaesenc	%zmm0,%zmm1,%zmm1
4045	vbroadcasti32x4	160(%rcx),%zmm0
4046	vaesenc	%zmm0,%zmm1,%zmm1
4047	vbroadcasti32x4	176(%rcx),%zmm0
4048	vaesenc	%zmm0,%zmm1,%zmm1
4049	vbroadcasti32x4	192(%rcx),%zmm0
4050	vaesenc	%zmm0,%zmm1,%zmm1
4051	vbroadcasti32x4	208(%rcx),%zmm0
4052	vaesenc	%zmm0,%zmm1,%zmm1
4053	vbroadcasti32x4	224(%rcx),%zmm0
4054	vaesenclast	%zmm0,%zmm1,%zmm1
4055	vpxorq	%zmm9,%zmm1,%zmm1
4056	vmovdqu8	%zmm1,(%rsi){%k1}
4057	addq	$0x30,%rsi
4058	vextracti32x4	$0x2,%zmm1,%xmm8
4059	vextracti32x4	$0x3,%zmm9,%xmm0
4060	andq	$0xf,%rdx
4061	je	.L_ret_wcpqaDvsGlbjGoe
4062	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
4063.L_remaining_num_blocks_is_2_wcpqaDvsGlbjGoe:
4064	vmovdqu8	(%rdi),%ymm1
4065	addq	$0x20,%rdi
4066	vbroadcasti32x4	(%rcx),%ymm0
4067	vpternlogq	$0x96,%ymm0,%ymm9,%ymm1
4068	vbroadcasti32x4	16(%rcx),%ymm0
4069	vaesenc	%ymm0,%ymm1,%ymm1
4070	vbroadcasti32x4	32(%rcx),%ymm0
4071	vaesenc	%ymm0,%ymm1,%ymm1
4072	vbroadcasti32x4	48(%rcx),%ymm0
4073	vaesenc	%ymm0,%ymm1,%ymm1
4074	vbroadcasti32x4	64(%rcx),%ymm0
4075	vaesenc	%ymm0,%ymm1,%ymm1
4076	vbroadcasti32x4	80(%rcx),%ymm0
4077	vaesenc	%ymm0,%ymm1,%ymm1
4078	vbroadcasti32x4	96(%rcx),%ymm0
4079	vaesenc	%ymm0,%ymm1,%ymm1
4080	vbroadcasti32x4	112(%rcx),%ymm0
4081	vaesenc	%ymm0,%ymm1,%ymm1
4082	vbroadcasti32x4	128(%rcx),%ymm0
4083	vaesenc	%ymm0,%ymm1,%ymm1
4084	vbroadcasti32x4	144(%rcx),%ymm0
4085	vaesenc	%ymm0,%ymm1,%ymm1
4086	vbroadcasti32x4	160(%rcx),%ymm0
4087	vaesenc	%ymm0,%ymm1,%ymm1
4088	vbroadcasti32x4	176(%rcx),%ymm0
4089	vaesenc	%ymm0,%ymm1,%ymm1
4090	vbroadcasti32x4	192(%rcx),%ymm0
4091	vaesenc	%ymm0,%ymm1,%ymm1
4092	vbroadcasti32x4	208(%rcx),%ymm0
4093	vaesenc	%ymm0,%ymm1,%ymm1
4094	vbroadcasti32x4	224(%rcx),%ymm0
4095	vaesenclast	%ymm0,%ymm1,%ymm1
4096	vpxorq	%ymm9,%ymm1,%ymm1
4097	vmovdqu	%ymm1,(%rsi)
4098	addq	$0x20,%rsi
4099	vextracti32x4	$0x1,%zmm1,%xmm8
4100	vextracti32x4	$0x2,%zmm9,%xmm0
4101	andq	$0xf,%rdx
4102	je	.L_ret_wcpqaDvsGlbjGoe
4103	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
4104.L_remaining_num_blocks_is_1_wcpqaDvsGlbjGoe:
4105	vmovdqu	(%rdi),%xmm1
4106	addq	$0x10,%rdi
4107	vpxor	%xmm9,%xmm1,%xmm1
4108	vpxor	(%rcx),%xmm1,%xmm1
4109	vaesenc	16(%rcx),%xmm1,%xmm1
4110	vaesenc	32(%rcx),%xmm1,%xmm1
4111	vaesenc	48(%rcx),%xmm1,%xmm1
4112	vaesenc	64(%rcx),%xmm1,%xmm1
4113	vaesenc	80(%rcx),%xmm1,%xmm1
4114	vaesenc	96(%rcx),%xmm1,%xmm1
4115	vaesenc	112(%rcx),%xmm1,%xmm1
4116	vaesenc	128(%rcx),%xmm1,%xmm1
4117	vaesenc	144(%rcx),%xmm1,%xmm1
4118	vaesenc	160(%rcx),%xmm1,%xmm1
4119	vaesenc	176(%rcx),%xmm1,%xmm1
4120	vaesenc	192(%rcx),%xmm1,%xmm1
4121	vaesenc	208(%rcx),%xmm1,%xmm1
4122	vaesenclast	224(%rcx),%xmm1,%xmm1
4123	vpxor	%xmm9,%xmm1,%xmm1
4124	vmovdqu	%xmm1,(%rsi)
4125	addq	$0x10,%rsi
4126	vmovdqa	%xmm1,%xmm8
4127	vextracti32x4	$0x1,%zmm9,%xmm0
4128	andq	$0xf,%rdx
4129	je	.L_ret_wcpqaDvsGlbjGoe
4130	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
4131
4132
4133.L_start_by16_wcpqaDvsGlbjGoe:
4134	vbroadcasti32x4	(%rsp),%zmm0
4135	vbroadcasti32x4	shufb_15_7(%rip),%zmm8
4136	movq	$0xaa,%r8
4137	kmovq	%r8,%k2
4138	vpshufb	%zmm8,%zmm0,%zmm1
4139	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
4140	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
4141	vpclmulqdq	$0x0,%zmm25,%zmm2,%zmm3
4142	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
4143	vpxord	%zmm4,%zmm3,%zmm9
4144	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
4145	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
4146	vpclmulqdq	$0x0,%zmm25,%zmm6,%zmm7
4147	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
4148	vpxord	%zmm5,%zmm7,%zmm10
4149	vpsrldq	$0xf,%zmm9,%zmm13
4150	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
4151	vpslldq	$0x1,%zmm9,%zmm11
4152	vpxord	%zmm14,%zmm11,%zmm11
4153	vpsrldq	$0xf,%zmm10,%zmm15
4154	vpclmulqdq	$0x0,%zmm25,%zmm15,%zmm16
4155	vpslldq	$0x1,%zmm10,%zmm12
4156	vpxord	%zmm16,%zmm12,%zmm12
4157
4158.L_main_loop_run_16_wcpqaDvsGlbjGoe:
4159	vmovdqu8	(%rdi),%zmm1
4160	vmovdqu8	64(%rdi),%zmm2
4161	vmovdqu8	128(%rdi),%zmm3
4162	vmovdqu8	192(%rdi),%zmm4
4163	addq	$0x100,%rdi
4164	vpxorq	%zmm9,%zmm1,%zmm1
4165	vpxorq	%zmm10,%zmm2,%zmm2
4166	vpxorq	%zmm11,%zmm3,%zmm3
4167	vpxorq	%zmm12,%zmm4,%zmm4
4168	vbroadcasti32x4	(%rcx),%zmm0
4169	vpxorq	%zmm0,%zmm1,%zmm1
4170	vpxorq	%zmm0,%zmm2,%zmm2
4171	vpxorq	%zmm0,%zmm3,%zmm3
4172	vpxorq	%zmm0,%zmm4,%zmm4
4173	vpsrldq	$0xf,%zmm11,%zmm13
4174	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
4175	vpslldq	$0x1,%zmm11,%zmm15
4176	vpxord	%zmm14,%zmm15,%zmm15
4177	vbroadcasti32x4	16(%rcx),%zmm0
4178	vaesenc	%zmm0,%zmm1,%zmm1
4179	vaesenc	%zmm0,%zmm2,%zmm2
4180	vaesenc	%zmm0,%zmm3,%zmm3
4181	vaesenc	%zmm0,%zmm4,%zmm4
4182	vbroadcasti32x4	32(%rcx),%zmm0
4183	vaesenc	%zmm0,%zmm1,%zmm1
4184	vaesenc	%zmm0,%zmm2,%zmm2
4185	vaesenc	%zmm0,%zmm3,%zmm3
4186	vaesenc	%zmm0,%zmm4,%zmm4
4187	vbroadcasti32x4	48(%rcx),%zmm0
4188	vaesenc	%zmm0,%zmm1,%zmm1
4189	vaesenc	%zmm0,%zmm2,%zmm2
4190	vaesenc	%zmm0,%zmm3,%zmm3
4191	vaesenc	%zmm0,%zmm4,%zmm4
4192	vpsrldq	$0xf,%zmm12,%zmm13
4193	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
4194	vpslldq	$0x1,%zmm12,%zmm16
4195	vpxord	%zmm14,%zmm16,%zmm16
4196	vbroadcasti32x4	64(%rcx),%zmm0
4197	vaesenc	%zmm0,%zmm1,%zmm1
4198	vaesenc	%zmm0,%zmm2,%zmm2
4199	vaesenc	%zmm0,%zmm3,%zmm3
4200	vaesenc	%zmm0,%zmm4,%zmm4
4201	vbroadcasti32x4	80(%rcx),%zmm0
4202	vaesenc	%zmm0,%zmm1,%zmm1
4203	vaesenc	%zmm0,%zmm2,%zmm2
4204	vaesenc	%zmm0,%zmm3,%zmm3
4205	vaesenc	%zmm0,%zmm4,%zmm4
4206	vbroadcasti32x4	96(%rcx),%zmm0
4207	vaesenc	%zmm0,%zmm1,%zmm1
4208	vaesenc	%zmm0,%zmm2,%zmm2
4209	vaesenc	%zmm0,%zmm3,%zmm3
4210	vaesenc	%zmm0,%zmm4,%zmm4
4211	vpsrldq	$0xf,%zmm15,%zmm13
4212	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
4213	vpslldq	$0x1,%zmm15,%zmm17
4214	vpxord	%zmm14,%zmm17,%zmm17
4215	vbroadcasti32x4	112(%rcx),%zmm0
4216	vaesenc	%zmm0,%zmm1,%zmm1
4217	vaesenc	%zmm0,%zmm2,%zmm2
4218	vaesenc	%zmm0,%zmm3,%zmm3
4219	vaesenc	%zmm0,%zmm4,%zmm4
4220	vbroadcasti32x4	128(%rcx),%zmm0
4221	vaesenc	%zmm0,%zmm1,%zmm1
4222	vaesenc	%zmm0,%zmm2,%zmm2
4223	vaesenc	%zmm0,%zmm3,%zmm3
4224	vaesenc	%zmm0,%zmm4,%zmm4
4225	vbroadcasti32x4	144(%rcx),%zmm0
4226	vaesenc	%zmm0,%zmm1,%zmm1
4227	vaesenc	%zmm0,%zmm2,%zmm2
4228	vaesenc	%zmm0,%zmm3,%zmm3
4229	vaesenc	%zmm0,%zmm4,%zmm4
4230	vpsrldq	$0xf,%zmm16,%zmm13
4231	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
4232	vpslldq	$0x1,%zmm16,%zmm18
4233	vpxord	%zmm14,%zmm18,%zmm18
4234	vbroadcasti32x4	160(%rcx),%zmm0
4235	vaesenc	%zmm0,%zmm1,%zmm1
4236	vaesenc	%zmm0,%zmm2,%zmm2
4237	vaesenc	%zmm0,%zmm3,%zmm3
4238	vaesenc	%zmm0,%zmm4,%zmm4
4239	vbroadcasti32x4	176(%rcx),%zmm0
4240	vaesenc	%zmm0,%zmm1,%zmm1
4241	vaesenc	%zmm0,%zmm2,%zmm2
4242	vaesenc	%zmm0,%zmm3,%zmm3
4243	vaesenc	%zmm0,%zmm4,%zmm4
4244	vbroadcasti32x4	192(%rcx),%zmm0
4245	vaesenc	%zmm0,%zmm1,%zmm1
4246	vaesenc	%zmm0,%zmm2,%zmm2
4247	vaesenc	%zmm0,%zmm3,%zmm3
4248	vaesenc	%zmm0,%zmm4,%zmm4
4249	vbroadcasti32x4	208(%rcx),%zmm0
4250	vaesenc	%zmm0,%zmm1,%zmm1
4251	vaesenc	%zmm0,%zmm2,%zmm2
4252	vaesenc	%zmm0,%zmm3,%zmm3
4253	vaesenc	%zmm0,%zmm4,%zmm4
4254	vbroadcasti32x4	224(%rcx),%zmm0
4255	vaesenclast	%zmm0,%zmm1,%zmm1
4256	vaesenclast	%zmm0,%zmm2,%zmm2
4257	vaesenclast	%zmm0,%zmm3,%zmm3
4258	vaesenclast	%zmm0,%zmm4,%zmm4
4259	vpxorq	%zmm9,%zmm1,%zmm1
4260	vpxorq	%zmm10,%zmm2,%zmm2
4261	vpxorq	%zmm11,%zmm3,%zmm3
4262	vpxorq	%zmm12,%zmm4,%zmm4
4263
4264	vmovdqa32	%zmm15,%zmm9
4265	vmovdqa32	%zmm16,%zmm10
4266	vmovdqa32	%zmm17,%zmm11
4267	vmovdqa32	%zmm18,%zmm12
4268	vmovdqu8	%zmm1,(%rsi)
4269	vmovdqu8	%zmm2,64(%rsi)
4270	vmovdqu8	%zmm3,128(%rsi)
4271	vmovdqu8	%zmm4,192(%rsi)
4272	addq	$0x100,%rsi
4273	subq	$0x100,%rdx
4274	cmpq	$0x100,%rdx
4275	jae	.L_main_loop_run_16_wcpqaDvsGlbjGoe
4276	cmpq	$0x80,%rdx
4277	jae	.L_main_loop_run_8_wcpqaDvsGlbjGoe
4278	vextracti32x4	$0x3,%zmm4,%xmm0
4279	jmp	.L_do_n_blocks_wcpqaDvsGlbjGoe
4280
4281.L_start_by8_wcpqaDvsGlbjGoe:
4282	vbroadcasti32x4	(%rsp),%zmm0
4283	vbroadcasti32x4	shufb_15_7(%rip),%zmm8
4284	movq	$0xaa,%r8
4285	kmovq	%r8,%k2
4286	vpshufb	%zmm8,%zmm0,%zmm1
4287	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
4288	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
4289	vpclmulqdq	$0x0,%zmm25,%zmm2,%zmm3
4290	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
4291	vpxord	%zmm4,%zmm3,%zmm9
4292	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
4293	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
4294	vpclmulqdq	$0x0,%zmm25,%zmm6,%zmm7
4295	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
4296	vpxord	%zmm5,%zmm7,%zmm10
4297
4298.L_main_loop_run_8_wcpqaDvsGlbjGoe:
4299	vmovdqu8	(%rdi),%zmm1
4300	vmovdqu8	64(%rdi),%zmm2
4301	addq	$0x80,%rdi
4302	vbroadcasti32x4	(%rcx),%zmm0
4303	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
4304	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
4305	vpsrldq	$0xf,%zmm9,%zmm13
4306	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
4307	vpslldq	$0x1,%zmm9,%zmm15
4308	vpxord	%zmm14,%zmm15,%zmm15
4309	vbroadcasti32x4	16(%rcx),%zmm0
4310	vaesenc	%zmm0,%zmm1,%zmm1
4311	vaesenc	%zmm0,%zmm2,%zmm2
4312
4313
4314	vbroadcasti32x4	32(%rcx),%zmm0
4315	vaesenc	%zmm0,%zmm1,%zmm1
4316	vaesenc	%zmm0,%zmm2,%zmm2
4317
4318
4319	vbroadcasti32x4	48(%rcx),%zmm0
4320	vaesenc	%zmm0,%zmm1,%zmm1
4321	vaesenc	%zmm0,%zmm2,%zmm2
4322	vpsrldq	$0xf,%zmm10,%zmm13
4323	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
4324	vpslldq	$0x1,%zmm10,%zmm16
4325	vpxord	%zmm14,%zmm16,%zmm16
4326
4327	vbroadcasti32x4	64(%rcx),%zmm0
4328	vaesenc	%zmm0,%zmm1,%zmm1
4329	vaesenc	%zmm0,%zmm2,%zmm2
4330
4331
4332	vbroadcasti32x4	80(%rcx),%zmm0
4333	vaesenc	%zmm0,%zmm1,%zmm1
4334	vaesenc	%zmm0,%zmm2,%zmm2
4335
4336
4337	vbroadcasti32x4	96(%rcx),%zmm0
4338	vaesenc	%zmm0,%zmm1,%zmm1
4339	vaesenc	%zmm0,%zmm2,%zmm2
4340
4341
4342	vbroadcasti32x4	112(%rcx),%zmm0
4343	vaesenc	%zmm0,%zmm1,%zmm1
4344	vaesenc	%zmm0,%zmm2,%zmm2
4345
4346
4347	vbroadcasti32x4	128(%rcx),%zmm0
4348	vaesenc	%zmm0,%zmm1,%zmm1
4349	vaesenc	%zmm0,%zmm2,%zmm2
4350
4351
4352	vbroadcasti32x4	144(%rcx),%zmm0
4353	vaesenc	%zmm0,%zmm1,%zmm1
4354	vaesenc	%zmm0,%zmm2,%zmm2
4355
4356	vbroadcasti32x4	160(%rcx),%zmm0
4357	vaesenc	%zmm0,%zmm1,%zmm1
4358	vaesenc	%zmm0,%zmm2,%zmm2
4359
4360
4361	vbroadcasti32x4	176(%rcx),%zmm0
4362	vaesenc	%zmm0,%zmm1,%zmm1
4363	vaesenc	%zmm0,%zmm2,%zmm2
4364
4365
4366	vbroadcasti32x4	192(%rcx),%zmm0
4367	vaesenc	%zmm0,%zmm1,%zmm1
4368	vaesenc	%zmm0,%zmm2,%zmm2
4369
4370
4371	vbroadcasti32x4	208(%rcx),%zmm0
4372	vaesenc	%zmm0,%zmm1,%zmm1
4373	vaesenc	%zmm0,%zmm2,%zmm2
4374
4375
4376	vbroadcasti32x4	224(%rcx),%zmm0
4377	vaesenclast	%zmm0,%zmm1,%zmm1
4378	vaesenclast	%zmm0,%zmm2,%zmm2
4379	vpxorq	%zmm9,%zmm1,%zmm1
4380	vpxorq	%zmm10,%zmm2,%zmm2
4381	vmovdqa32	%zmm15,%zmm9
4382	vmovdqa32	%zmm16,%zmm10
4383	vmovdqu8	%zmm1,(%rsi)
4384	vmovdqu8	%zmm2,64(%rsi)
4385	addq	$0x80,%rsi
4386	subq	$0x80,%rdx
4387	cmpq	$0x80,%rdx
4388	jae	.L_main_loop_run_8_wcpqaDvsGlbjGoe
4389	vextracti32x4	$0x3,%zmm2,%xmm0
4390	jmp	.L_do_n_blocks_wcpqaDvsGlbjGoe
4391
4392.L_steal_cipher_wcpqaDvsGlbjGoe:
4393	vmovdqa	%xmm8,%xmm2
4394	leaq	vpshufb_shf_table(%rip),%rax
4395	vmovdqu	(%rax,%rdx,1),%xmm10
4396	vpshufb	%xmm10,%xmm8,%xmm8
4397	vmovdqu	-16(%rdi,%rdx,1),%xmm3
4398	vmovdqu	%xmm8,-16(%rsi,%rdx,1)
4399	leaq	vpshufb_shf_table(%rip),%rax
4400	addq	$16,%rax
4401	subq	%rdx,%rax
4402	vmovdqu	(%rax),%xmm10
4403	vpxor	mask1(%rip),%xmm10,%xmm10
4404	vpshufb	%xmm10,%xmm3,%xmm3
4405	vpblendvb	%xmm10,%xmm2,%xmm3,%xmm3
4406	vpxor	%xmm0,%xmm3,%xmm8
4407	vpxor	(%rcx),%xmm8,%xmm8
4408	vaesenc	16(%rcx),%xmm8,%xmm8
4409	vaesenc	32(%rcx),%xmm8,%xmm8
4410	vaesenc	48(%rcx),%xmm8,%xmm8
4411	vaesenc	64(%rcx),%xmm8,%xmm8
4412	vaesenc	80(%rcx),%xmm8,%xmm8
4413	vaesenc	96(%rcx),%xmm8,%xmm8
4414	vaesenc	112(%rcx),%xmm8,%xmm8
4415	vaesenc	128(%rcx),%xmm8,%xmm8
4416	vaesenc	144(%rcx),%xmm8,%xmm8
4417	vaesenc	160(%rcx),%xmm8,%xmm8
4418	vaesenc	176(%rcx),%xmm8,%xmm8
4419	vaesenc	192(%rcx),%xmm8,%xmm8
4420	vaesenc	208(%rcx),%xmm8,%xmm8
4421	vaesenclast	224(%rcx),%xmm8,%xmm8
4422	vpxor	%xmm0,%xmm8,%xmm8
4423	vmovdqu	%xmm8,-16(%rsi)
4424.L_ret_wcpqaDvsGlbjGoe:
4425	movq	128(%rsp),%rbx
4426	xorq	%r8,%r8
4427	movq	%r8,128(%rsp)
4428
4429	vpxorq	%zmm0,%zmm0,%zmm0
4430	movq	%rbp,%rsp
4431	popq	%rbp
4432	vzeroupper
4433	.byte	0xf3,0xc3
4434
4435.L_less_than_128_bytes_wcpqaDvsGlbjGoe:
4436	vpbroadcastq	%r10,%zmm25
4437	cmpq	$0x10,%rdx
4438	jb	.L_ret_wcpqaDvsGlbjGoe
4439	vbroadcasti32x4	(%rsp),%zmm0
4440	vbroadcasti32x4	shufb_15_7(%rip),%zmm8
4441	movl	$0xaa,%r8d
4442	kmovq	%r8,%k2
4443	movq	%rdx,%r8
4444	andq	$0x70,%r8
4445	cmpq	$0x60,%r8
4446	je	.L_num_blocks_is_6_wcpqaDvsGlbjGoe
4447	cmpq	$0x50,%r8
4448	je	.L_num_blocks_is_5_wcpqaDvsGlbjGoe
4449	cmpq	$0x40,%r8
4450	je	.L_num_blocks_is_4_wcpqaDvsGlbjGoe
4451	cmpq	$0x30,%r8
4452	je	.L_num_blocks_is_3_wcpqaDvsGlbjGoe
4453	cmpq	$0x20,%r8
4454	je	.L_num_blocks_is_2_wcpqaDvsGlbjGoe
4455	cmpq	$0x10,%r8
4456	je	.L_num_blocks_is_1_wcpqaDvsGlbjGoe
4457
4458.L_num_blocks_is_7_wcpqaDvsGlbjGoe:
4459	vpshufb	%zmm8,%zmm0,%zmm1
4460	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
4461	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
4462	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
4463	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
4464	vpxord	%zmm4,%zmm3,%zmm9
4465	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
4466	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
4467	vpclmulqdq	$0x00,%zmm25,%zmm6,%zmm7
4468	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
4469	vpxord	%zmm5,%zmm7,%zmm10
4470	movq	$0x0000ffffffffffff,%r8
4471	kmovq	%r8,%k1
4472	vmovdqu8	0(%rdi),%zmm1
4473	vmovdqu8	64(%rdi),%zmm2{%k1}
4474
4475	addq	$0x70,%rdi
4476	vbroadcasti32x4	(%rcx),%zmm0
4477	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
4478	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
4479	vbroadcasti32x4	16(%rcx),%zmm0
4480	vaesenc	%zmm0,%zmm1,%zmm1
4481	vaesenc	%zmm0,%zmm2,%zmm2
4482
4483
4484	vbroadcasti32x4	32(%rcx),%zmm0
4485	vaesenc	%zmm0,%zmm1,%zmm1
4486	vaesenc	%zmm0,%zmm2,%zmm2
4487
4488
4489	vbroadcasti32x4	48(%rcx),%zmm0
4490	vaesenc	%zmm0,%zmm1,%zmm1
4491	vaesenc	%zmm0,%zmm2,%zmm2
4492
4493	vbroadcasti32x4	64(%rcx),%zmm0
4494	vaesenc	%zmm0,%zmm1,%zmm1
4495	vaesenc	%zmm0,%zmm2,%zmm2
4496
4497
4498	vbroadcasti32x4	80(%rcx),%zmm0
4499	vaesenc	%zmm0,%zmm1,%zmm1
4500	vaesenc	%zmm0,%zmm2,%zmm2
4501
4502
4503	vbroadcasti32x4	96(%rcx),%zmm0
4504	vaesenc	%zmm0,%zmm1,%zmm1
4505	vaesenc	%zmm0,%zmm2,%zmm2
4506
4507
4508	vbroadcasti32x4	112(%rcx),%zmm0
4509	vaesenc	%zmm0,%zmm1,%zmm1
4510	vaesenc	%zmm0,%zmm2,%zmm2
4511
4512
4513	vbroadcasti32x4	128(%rcx),%zmm0
4514	vaesenc	%zmm0,%zmm1,%zmm1
4515	vaesenc	%zmm0,%zmm2,%zmm2
4516
4517
4518	vbroadcasti32x4	144(%rcx),%zmm0
4519	vaesenc	%zmm0,%zmm1,%zmm1
4520	vaesenc	%zmm0,%zmm2,%zmm2
4521
4522	vbroadcasti32x4	160(%rcx),%zmm0
4523	vaesenc	%zmm0,%zmm1,%zmm1
4524	vaesenc	%zmm0,%zmm2,%zmm2
4525
4526
4527	vbroadcasti32x4	176(%rcx),%zmm0
4528	vaesenc	%zmm0,%zmm1,%zmm1
4529	vaesenc	%zmm0,%zmm2,%zmm2
4530
4531
4532	vbroadcasti32x4	192(%rcx),%zmm0
4533	vaesenc	%zmm0,%zmm1,%zmm1
4534	vaesenc	%zmm0,%zmm2,%zmm2
4535
4536
4537	vbroadcasti32x4	208(%rcx),%zmm0
4538	vaesenc	%zmm0,%zmm1,%zmm1
4539	vaesenc	%zmm0,%zmm2,%zmm2
4540
4541
4542	vbroadcasti32x4	224(%rcx),%zmm0
4543	vaesenclast	%zmm0,%zmm1,%zmm1
4544	vaesenclast	%zmm0,%zmm2,%zmm2
4545	vpxorq	%zmm9,%zmm1,%zmm1
4546	vpxorq	%zmm10,%zmm2,%zmm2
4547	vmovdqu8	%zmm1,0(%rsi)
4548	vmovdqu8	%zmm2,64(%rsi){%k1}
4549	addq	$0x70,%rsi
4550	vextracti32x4	$0x2,%zmm2,%xmm8
4551	vextracti32x4	$0x3,%zmm10,%xmm0
4552	andq	$0xf,%rdx
4553	je	.L_ret_wcpqaDvsGlbjGoe
4554	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
4555.L_num_blocks_is_6_wcpqaDvsGlbjGoe:
4556	vpshufb	%zmm8,%zmm0,%zmm1
4557	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
4558	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
4559	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
4560	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
4561	vpxord	%zmm4,%zmm3,%zmm9
4562	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
4563	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
4564	vpclmulqdq	$0x00,%zmm25,%zmm6,%zmm7
4565	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
4566	vpxord	%zmm5,%zmm7,%zmm10
4567	vmovdqu8	0(%rdi),%zmm1
4568	vmovdqu8	64(%rdi),%ymm2
4569	addq	$96,%rdi
4570	vbroadcasti32x4	(%rcx),%zmm0
4571	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
4572	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
4573	vbroadcasti32x4	16(%rcx),%zmm0
4574	vaesenc	%zmm0,%zmm1,%zmm1
4575	vaesenc	%zmm0,%zmm2,%zmm2
4576
4577
4578	vbroadcasti32x4	32(%rcx),%zmm0
4579	vaesenc	%zmm0,%zmm1,%zmm1
4580	vaesenc	%zmm0,%zmm2,%zmm2
4581
4582
4583	vbroadcasti32x4	48(%rcx),%zmm0
4584	vaesenc	%zmm0,%zmm1,%zmm1
4585	vaesenc	%zmm0,%zmm2,%zmm2
4586
4587	vbroadcasti32x4	64(%rcx),%zmm0
4588	vaesenc	%zmm0,%zmm1,%zmm1
4589	vaesenc	%zmm0,%zmm2,%zmm2
4590
4591
4592	vbroadcasti32x4	80(%rcx),%zmm0
4593	vaesenc	%zmm0,%zmm1,%zmm1
4594	vaesenc	%zmm0,%zmm2,%zmm2
4595
4596
4597	vbroadcasti32x4	96(%rcx),%zmm0
4598	vaesenc	%zmm0,%zmm1,%zmm1
4599	vaesenc	%zmm0,%zmm2,%zmm2
4600
4601
4602	vbroadcasti32x4	112(%rcx),%zmm0
4603	vaesenc	%zmm0,%zmm1,%zmm1
4604	vaesenc	%zmm0,%zmm2,%zmm2
4605
4606
4607	vbroadcasti32x4	128(%rcx),%zmm0
4608	vaesenc	%zmm0,%zmm1,%zmm1
4609	vaesenc	%zmm0,%zmm2,%zmm2
4610
4611
4612	vbroadcasti32x4	144(%rcx),%zmm0
4613	vaesenc	%zmm0,%zmm1,%zmm1
4614	vaesenc	%zmm0,%zmm2,%zmm2
4615
4616	vbroadcasti32x4	160(%rcx),%zmm0
4617	vaesenc	%zmm0,%zmm1,%zmm1
4618	vaesenc	%zmm0,%zmm2,%zmm2
4619
4620
4621	vbroadcasti32x4	176(%rcx),%zmm0
4622	vaesenc	%zmm0,%zmm1,%zmm1
4623	vaesenc	%zmm0,%zmm2,%zmm2
4624
4625
4626	vbroadcasti32x4	192(%rcx),%zmm0
4627	vaesenc	%zmm0,%zmm1,%zmm1
4628	vaesenc	%zmm0,%zmm2,%zmm2
4629
4630
4631	vbroadcasti32x4	208(%rcx),%zmm0
4632	vaesenc	%zmm0,%zmm1,%zmm1
4633	vaesenc	%zmm0,%zmm2,%zmm2
4634
4635
4636	vbroadcasti32x4	224(%rcx),%zmm0
4637	vaesenclast	%zmm0,%zmm1,%zmm1
4638	vaesenclast	%zmm0,%zmm2,%zmm2
4639	vpxorq	%zmm9,%zmm1,%zmm1
4640	vpxorq	%zmm10,%zmm2,%zmm2
4641	vmovdqu8	%zmm1,0(%rsi)
4642	vmovdqu8	%ymm2,64(%rsi)
4643	addq	$96,%rsi
4644
4645	vextracti32x4	$0x1,%ymm2,%xmm8
4646	vextracti32x4	$0x2,%zmm10,%xmm0
4647	andq	$0xf,%rdx
4648	je	.L_ret_wcpqaDvsGlbjGoe
4649	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
4650.L_num_blocks_is_5_wcpqaDvsGlbjGoe:
4651	vpshufb	%zmm8,%zmm0,%zmm1
4652	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
4653	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
4654	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
4655	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
4656	vpxord	%zmm4,%zmm3,%zmm9
4657	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
4658	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
4659	vpclmulqdq	$0x00,%zmm25,%zmm6,%zmm7
4660	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
4661	vpxord	%zmm5,%zmm7,%zmm10
4662	vmovdqu8	0(%rdi),%zmm1
4663	vmovdqu8	64(%rdi),%xmm2
4664	addq	$80,%rdi
4665	vbroadcasti32x4	(%rcx),%zmm0
4666	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
4667	vpternlogq	$0x96,%zmm0,%zmm10,%zmm2
4668	vbroadcasti32x4	16(%rcx),%zmm0
4669	vaesenc	%zmm0,%zmm1,%zmm1
4670	vaesenc	%zmm0,%zmm2,%zmm2
4671
4672
4673	vbroadcasti32x4	32(%rcx),%zmm0
4674	vaesenc	%zmm0,%zmm1,%zmm1
4675	vaesenc	%zmm0,%zmm2,%zmm2
4676
4677
4678	vbroadcasti32x4	48(%rcx),%zmm0
4679	vaesenc	%zmm0,%zmm1,%zmm1
4680	vaesenc	%zmm0,%zmm2,%zmm2
4681
4682	vbroadcasti32x4	64(%rcx),%zmm0
4683	vaesenc	%zmm0,%zmm1,%zmm1
4684	vaesenc	%zmm0,%zmm2,%zmm2
4685
4686
4687	vbroadcasti32x4	80(%rcx),%zmm0
4688	vaesenc	%zmm0,%zmm1,%zmm1
4689	vaesenc	%zmm0,%zmm2,%zmm2
4690
4691
4692	vbroadcasti32x4	96(%rcx),%zmm0
4693	vaesenc	%zmm0,%zmm1,%zmm1
4694	vaesenc	%zmm0,%zmm2,%zmm2
4695
4696
4697	vbroadcasti32x4	112(%rcx),%zmm0
4698	vaesenc	%zmm0,%zmm1,%zmm1
4699	vaesenc	%zmm0,%zmm2,%zmm2
4700
4701
4702	vbroadcasti32x4	128(%rcx),%zmm0
4703	vaesenc	%zmm0,%zmm1,%zmm1
4704	vaesenc	%zmm0,%zmm2,%zmm2
4705
4706
4707	vbroadcasti32x4	144(%rcx),%zmm0
4708	vaesenc	%zmm0,%zmm1,%zmm1
4709	vaesenc	%zmm0,%zmm2,%zmm2
4710
4711	vbroadcasti32x4	160(%rcx),%zmm0
4712	vaesenc	%zmm0,%zmm1,%zmm1
4713	vaesenc	%zmm0,%zmm2,%zmm2
4714
4715
4716	vbroadcasti32x4	176(%rcx),%zmm0
4717	vaesenc	%zmm0,%zmm1,%zmm1
4718	vaesenc	%zmm0,%zmm2,%zmm2
4719
4720
4721	vbroadcasti32x4	192(%rcx),%zmm0
4722	vaesenc	%zmm0,%zmm1,%zmm1
4723	vaesenc	%zmm0,%zmm2,%zmm2
4724
4725
4726	vbroadcasti32x4	208(%rcx),%zmm0
4727	vaesenc	%zmm0,%zmm1,%zmm1
4728	vaesenc	%zmm0,%zmm2,%zmm2
4729
4730
4731	vbroadcasti32x4	224(%rcx),%zmm0
4732	vaesenclast	%zmm0,%zmm1,%zmm1
4733	vaesenclast	%zmm0,%zmm2,%zmm2
4734	vpxorq	%zmm9,%zmm1,%zmm1
4735	vpxorq	%zmm10,%zmm2,%zmm2
4736	vmovdqu8	%zmm1,0(%rsi)
4737	vmovdqu8	%xmm2,64(%rsi)
4738	addq	$80,%rsi
4739
4740	vmovdqa	%xmm2,%xmm8
4741	vextracti32x4	$0x1,%zmm10,%xmm0
4742	andq	$0xf,%rdx
4743	je	.L_ret_wcpqaDvsGlbjGoe
4744	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
4745.L_num_blocks_is_4_wcpqaDvsGlbjGoe:
4746	vpshufb	%zmm8,%zmm0,%zmm1
4747	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
4748	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
4749	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
4750	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
4751	vpxord	%zmm4,%zmm3,%zmm9
4752	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
4753	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
4754	vpclmulqdq	$0x00,%zmm25,%zmm6,%zmm7
4755	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
4756	vpxord	%zmm5,%zmm7,%zmm10
4757	vmovdqu8	0(%rdi),%zmm1
4758	addq	$64,%rdi
4759	vbroadcasti32x4	(%rcx),%zmm0
4760	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
4761	vbroadcasti32x4	16(%rcx),%zmm0
4762	vaesenc	%zmm0,%zmm1,%zmm1
4763	vbroadcasti32x4	32(%rcx),%zmm0
4764	vaesenc	%zmm0,%zmm1,%zmm1
4765	vbroadcasti32x4	48(%rcx),%zmm0
4766	vaesenc	%zmm0,%zmm1,%zmm1
4767	vbroadcasti32x4	64(%rcx),%zmm0
4768	vaesenc	%zmm0,%zmm1,%zmm1
4769	vbroadcasti32x4	80(%rcx),%zmm0
4770	vaesenc	%zmm0,%zmm1,%zmm1
4771	vbroadcasti32x4	96(%rcx),%zmm0
4772	vaesenc	%zmm0,%zmm1,%zmm1
4773	vbroadcasti32x4	112(%rcx),%zmm0
4774	vaesenc	%zmm0,%zmm1,%zmm1
4775	vbroadcasti32x4	128(%rcx),%zmm0
4776	vaesenc	%zmm0,%zmm1,%zmm1
4777	vbroadcasti32x4	144(%rcx),%zmm0
4778	vaesenc	%zmm0,%zmm1,%zmm1
4779	vbroadcasti32x4	160(%rcx),%zmm0
4780	vaesenc	%zmm0,%zmm1,%zmm1
4781	vbroadcasti32x4	176(%rcx),%zmm0
4782	vaesenc	%zmm0,%zmm1,%zmm1
4783	vbroadcasti32x4	192(%rcx),%zmm0
4784	vaesenc	%zmm0,%zmm1,%zmm1
4785	vbroadcasti32x4	208(%rcx),%zmm0
4786	vaesenc	%zmm0,%zmm1,%zmm1
4787	vbroadcasti32x4	224(%rcx),%zmm0
4788	vaesenclast	%zmm0,%zmm1,%zmm1
4789	vpxorq	%zmm9,%zmm1,%zmm1
4790	vmovdqu8	%zmm1,0(%rsi)
4791	addq	$64,%rsi
4792	vextracti32x4	$0x3,%zmm1,%xmm8
4793	vmovdqa	%xmm10,%xmm0
4794	andq	$0xf,%rdx
4795	je	.L_ret_wcpqaDvsGlbjGoe
4796	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
4797.L_num_blocks_is_3_wcpqaDvsGlbjGoe:
4798	vpshufb	%zmm8,%zmm0,%zmm1
4799	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
4800	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
4801	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
4802	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
4803	vpxord	%zmm4,%zmm3,%zmm9
4804	movq	$0x0000ffffffffffff,%r8
4805	kmovq	%r8,%k1
4806	vmovdqu8	0(%rdi),%zmm1{%k1}
4807	addq	$48,%rdi
4808	vbroadcasti32x4	(%rcx),%zmm0
4809	vpternlogq	$0x96,%zmm0,%zmm9,%zmm1
4810	vbroadcasti32x4	16(%rcx),%zmm0
4811	vaesenc	%zmm0,%zmm1,%zmm1
4812	vbroadcasti32x4	32(%rcx),%zmm0
4813	vaesenc	%zmm0,%zmm1,%zmm1
4814	vbroadcasti32x4	48(%rcx),%zmm0
4815	vaesenc	%zmm0,%zmm1,%zmm1
4816	vbroadcasti32x4	64(%rcx),%zmm0
4817	vaesenc	%zmm0,%zmm1,%zmm1
4818	vbroadcasti32x4	80(%rcx),%zmm0
4819	vaesenc	%zmm0,%zmm1,%zmm1
4820	vbroadcasti32x4	96(%rcx),%zmm0
4821	vaesenc	%zmm0,%zmm1,%zmm1
4822	vbroadcasti32x4	112(%rcx),%zmm0
4823	vaesenc	%zmm0,%zmm1,%zmm1
4824	vbroadcasti32x4	128(%rcx),%zmm0
4825	vaesenc	%zmm0,%zmm1,%zmm1
4826	vbroadcasti32x4	144(%rcx),%zmm0
4827	vaesenc	%zmm0,%zmm1,%zmm1
4828	vbroadcasti32x4	160(%rcx),%zmm0
4829	vaesenc	%zmm0,%zmm1,%zmm1
4830	vbroadcasti32x4	176(%rcx),%zmm0
4831	vaesenc	%zmm0,%zmm1,%zmm1
4832	vbroadcasti32x4	192(%rcx),%zmm0
4833	vaesenc	%zmm0,%zmm1,%zmm1
4834	vbroadcasti32x4	208(%rcx),%zmm0
4835	vaesenc	%zmm0,%zmm1,%zmm1
4836	vbroadcasti32x4	224(%rcx),%zmm0
4837	vaesenclast	%zmm0,%zmm1,%zmm1
4838	vpxorq	%zmm9,%zmm1,%zmm1
4839	vmovdqu8	%zmm1,0(%rsi){%k1}
4840	addq	$48,%rsi
4841	vextracti32x4	$2,%zmm1,%xmm8
4842	vextracti32x4	$3,%zmm9,%xmm0
4843	andq	$0xf,%rdx
4844	je	.L_ret_wcpqaDvsGlbjGoe
4845	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
4846.L_num_blocks_is_2_wcpqaDvsGlbjGoe:
4847	vpshufb	%zmm8,%zmm0,%zmm1
4848	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
4849	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
4850	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
4851	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
4852	vpxord	%zmm4,%zmm3,%zmm9
4853
4854	vmovdqu8	0(%rdi),%ymm1
4855	addq	$32,%rdi
4856	vbroadcasti32x4	(%rcx),%ymm0
4857	vpternlogq	$0x96,%ymm0,%ymm9,%ymm1
4858	vbroadcasti32x4	16(%rcx),%ymm0
4859	vaesenc	%ymm0,%ymm1,%ymm1
4860	vbroadcasti32x4	32(%rcx),%ymm0
4861	vaesenc	%ymm0,%ymm1,%ymm1
4862	vbroadcasti32x4	48(%rcx),%ymm0
4863	vaesenc	%ymm0,%ymm1,%ymm1
4864	vbroadcasti32x4	64(%rcx),%ymm0
4865	vaesenc	%ymm0,%ymm1,%ymm1
4866	vbroadcasti32x4	80(%rcx),%ymm0
4867	vaesenc	%ymm0,%ymm1,%ymm1
4868	vbroadcasti32x4	96(%rcx),%ymm0
4869	vaesenc	%ymm0,%ymm1,%ymm1
4870	vbroadcasti32x4	112(%rcx),%ymm0
4871	vaesenc	%ymm0,%ymm1,%ymm1
4872	vbroadcasti32x4	128(%rcx),%ymm0
4873	vaesenc	%ymm0,%ymm1,%ymm1
4874	vbroadcasti32x4	144(%rcx),%ymm0
4875	vaesenc	%ymm0,%ymm1,%ymm1
4876	vbroadcasti32x4	160(%rcx),%ymm0
4877	vaesenc	%ymm0,%ymm1,%ymm1
4878	vbroadcasti32x4	176(%rcx),%ymm0
4879	vaesenc	%ymm0,%ymm1,%ymm1
4880	vbroadcasti32x4	192(%rcx),%ymm0
4881	vaesenc	%ymm0,%ymm1,%ymm1
4882	vbroadcasti32x4	208(%rcx),%ymm0
4883	vaesenc	%ymm0,%ymm1,%ymm1
4884	vbroadcasti32x4	224(%rcx),%ymm0
4885	vaesenclast	%ymm0,%ymm1,%ymm1
4886	vpxorq	%ymm9,%ymm1,%ymm1
4887	vmovdqu8	%ymm1,0(%rsi)
4888	addq	$32,%rsi
4889
4890	vextracti32x4	$1,%ymm1,%xmm8
4891	vextracti32x4	$2,%zmm9,%xmm0
4892	andq	$0xf,%rdx
4893	je	.L_ret_wcpqaDvsGlbjGoe
4894	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
4895.L_num_blocks_is_1_wcpqaDvsGlbjGoe:
4896	vpshufb	%zmm8,%zmm0,%zmm1
4897	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
4898	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
4899	vpclmulqdq	$0x00,%zmm25,%zmm2,%zmm3
4900	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
4901	vpxord	%zmm4,%zmm3,%zmm9
4902
4903	vmovdqu8	0(%rdi),%xmm1
4904	addq	$16,%rdi
4905	vbroadcasti32x4	(%rcx),%ymm0
4906	vpternlogq	$0x96,%ymm0,%ymm9,%ymm1
4907	vbroadcasti32x4	16(%rcx),%ymm0
4908	vaesenc	%ymm0,%ymm1,%ymm1
4909	vbroadcasti32x4	32(%rcx),%ymm0
4910	vaesenc	%ymm0,%ymm1,%ymm1
4911	vbroadcasti32x4	48(%rcx),%ymm0
4912	vaesenc	%ymm0,%ymm1,%ymm1
4913	vbroadcasti32x4	64(%rcx),%ymm0
4914	vaesenc	%ymm0,%ymm1,%ymm1
4915	vbroadcasti32x4	80(%rcx),%ymm0
4916	vaesenc	%ymm0,%ymm1,%ymm1
4917	vbroadcasti32x4	96(%rcx),%ymm0
4918	vaesenc	%ymm0,%ymm1,%ymm1
4919	vbroadcasti32x4	112(%rcx),%ymm0
4920	vaesenc	%ymm0,%ymm1,%ymm1
4921	vbroadcasti32x4	128(%rcx),%ymm0
4922	vaesenc	%ymm0,%ymm1,%ymm1
4923	vbroadcasti32x4	144(%rcx),%ymm0
4924	vaesenc	%ymm0,%ymm1,%ymm1
4925	vbroadcasti32x4	160(%rcx),%ymm0
4926	vaesenc	%ymm0,%ymm1,%ymm1
4927	vbroadcasti32x4	176(%rcx),%ymm0
4928	vaesenc	%ymm0,%ymm1,%ymm1
4929	vbroadcasti32x4	192(%rcx),%ymm0
4930	vaesenc	%ymm0,%ymm1,%ymm1
4931	vbroadcasti32x4	208(%rcx),%ymm0
4932	vaesenc	%ymm0,%ymm1,%ymm1
4933	vbroadcasti32x4	224(%rcx),%ymm0
4934	vaesenclast	%ymm0,%ymm1,%ymm1
4935	vpxorq	%ymm9,%ymm1,%ymm1
4936	vmovdqu8	%xmm1,0(%rsi)
4937	addq	$16,%rsi
4938
4939	vmovdqa	%xmm1,%xmm8
4940	vextracti32x4	$1,%zmm9,%xmm0
4941	andq	$0xf,%rdx
4942	je	.L_ret_wcpqaDvsGlbjGoe
4943	jmp	.L_steal_cipher_wcpqaDvsGlbjGoe
4944.cfi_endproc
4945.globl	aesni_xts_256_decrypt_avx512
4946.hidden	aesni_xts_256_decrypt_avx512
4947.type	aesni_xts_256_decrypt_avx512,@function
4948.align	32
4949aesni_xts_256_decrypt_avx512:
4950.cfi_startproc
4951.byte	243,15,30,250
4952	pushq	%rbp
4953	movq	%rsp,%rbp
4954	subq	$136,%rsp
4955	andq	$0xffffffffffffffc0,%rsp
4956	movq	%rbx,128(%rsp)
4957	movq	$0x87,%r10
4958	vmovdqu	(%r9),%xmm1
4959	vpxor	(%r8),%xmm1,%xmm1
4960	vaesenc	16(%r8),%xmm1,%xmm1
4961	vaesenc	32(%r8),%xmm1,%xmm1
4962	vaesenc	48(%r8),%xmm1,%xmm1
4963	vaesenc	64(%r8),%xmm1,%xmm1
4964	vaesenc	80(%r8),%xmm1,%xmm1
4965	vaesenc	96(%r8),%xmm1,%xmm1
4966	vaesenc	112(%r8),%xmm1,%xmm1
4967	vaesenc	128(%r8),%xmm1,%xmm1
4968	vaesenc	144(%r8),%xmm1,%xmm1
4969	vaesenc	160(%r8),%xmm1,%xmm1
4970	vaesenc	176(%r8),%xmm1,%xmm1
4971	vaesenc	192(%r8),%xmm1,%xmm1
4972	vaesenc	208(%r8),%xmm1,%xmm1
4973	vaesenclast	224(%r8),%xmm1,%xmm1
4974	vmovdqa	%xmm1,(%rsp)
4975
4976	cmpq	$0x80,%rdx
4977	jb	.L_less_than_128_bytes_EmbgEptodyewbFa
4978	vpbroadcastq	%r10,%zmm25
4979	cmpq	$0x100,%rdx
4980	jge	.L_start_by16_EmbgEptodyewbFa
4981	jmp	.L_start_by8_EmbgEptodyewbFa
4982
4983.L_do_n_blocks_EmbgEptodyewbFa:
4984	cmpq	$0x0,%rdx
4985	je	.L_ret_EmbgEptodyewbFa
4986	cmpq	$0x70,%rdx
4987	jge	.L_remaining_num_blocks_is_7_EmbgEptodyewbFa
4988	cmpq	$0x60,%rdx
4989	jge	.L_remaining_num_blocks_is_6_EmbgEptodyewbFa
4990	cmpq	$0x50,%rdx
4991	jge	.L_remaining_num_blocks_is_5_EmbgEptodyewbFa
4992	cmpq	$0x40,%rdx
4993	jge	.L_remaining_num_blocks_is_4_EmbgEptodyewbFa
4994	cmpq	$0x30,%rdx
4995	jge	.L_remaining_num_blocks_is_3_EmbgEptodyewbFa
4996	cmpq	$0x20,%rdx
4997	jge	.L_remaining_num_blocks_is_2_EmbgEptodyewbFa
4998	cmpq	$0x10,%rdx
4999	jge	.L_remaining_num_blocks_is_1_EmbgEptodyewbFa
5000
5001
5002	vmovdqu	%xmm5,%xmm1
5003
5004	vpxor	%xmm9,%xmm1,%xmm1
5005	vmovdqu	(%rcx),%xmm0
5006	vpxor	%xmm0,%xmm1,%xmm1
5007	vmovdqu	16(%rcx),%xmm0
5008	vaesdec	%xmm0,%xmm1,%xmm1
5009	vmovdqu	32(%rcx),%xmm0
5010	vaesdec	%xmm0,%xmm1,%xmm1
5011	vmovdqu	48(%rcx),%xmm0
5012	vaesdec	%xmm0,%xmm1,%xmm1
5013	vmovdqu	64(%rcx),%xmm0
5014	vaesdec	%xmm0,%xmm1,%xmm1
5015	vmovdqu	80(%rcx),%xmm0
5016	vaesdec	%xmm0,%xmm1,%xmm1
5017	vmovdqu	96(%rcx),%xmm0
5018	vaesdec	%xmm0,%xmm1,%xmm1
5019	vmovdqu	112(%rcx),%xmm0
5020	vaesdec	%xmm0,%xmm1,%xmm1
5021	vmovdqu	128(%rcx),%xmm0
5022	vaesdec	%xmm0,%xmm1,%xmm1
5023	vmovdqu	144(%rcx),%xmm0
5024	vaesdec	%xmm0,%xmm1,%xmm1
5025	vmovdqu	160(%rcx),%xmm0
5026	vaesdec	%xmm0,%xmm1,%xmm1
5027	vmovdqu	176(%rcx),%xmm0
5028	vaesdec	%xmm0,%xmm1,%xmm1
5029	vmovdqu	192(%rcx),%xmm0
5030	vaesdec	%xmm0,%xmm1,%xmm1
5031	vmovdqu	208(%rcx),%xmm0
5032	vaesdec	%xmm0,%xmm1,%xmm1
5033	vmovdqu	224(%rcx),%xmm0
5034	vaesdeclast	%xmm0,%xmm1,%xmm1
5035	vpxor	%xmm9,%xmm1,%xmm1
5036	vmovdqu	%xmm1,-16(%rsi)
5037	vmovdqa	%xmm1,%xmm8
5038
5039
5040	movq	$0x1,%r8
5041	kmovq	%r8,%k1
5042	vpsllq	$0x3f,%xmm9,%xmm13
5043	vpsraq	$0x3f,%xmm13,%xmm14
5044	vpandq	%xmm25,%xmm14,%xmm5
5045	vpxorq	%xmm5,%xmm9,%xmm9{%k1}
5046	vpsrldq	$0x8,%xmm9,%xmm10
5047.byte	98, 211, 181, 8, 115, 194, 1
5048	vpslldq	$0x8,%xmm13,%xmm13
5049	vpxorq	%xmm13,%xmm0,%xmm0
5050	jmp	.L_steal_cipher_EmbgEptodyewbFa
5051
5052.L_remaining_num_blocks_is_7_EmbgEptodyewbFa:
5053	movq	$0xffffffffffffffff,%r8
5054	shrq	$0x10,%r8
5055	kmovq	%r8,%k1
5056	vmovdqu8	(%rdi),%zmm1
5057	vmovdqu8	64(%rdi),%zmm2{%k1}
5058	addq	$0x70,%rdi
5059	andq	$0xf,%rdx
5060	je	.L_done_7_remain_EmbgEptodyewbFa
5061	vextracti32x4	$0x2,%zmm10,%xmm12
5062	vextracti32x4	$0x3,%zmm10,%xmm13
5063	vinserti32x4	$0x2,%xmm13,%zmm10,%zmm10
5064
5065	vpxorq	%zmm9,%zmm1,%zmm1
5066	vpxorq	%zmm10,%zmm2,%zmm2
5067
5068
5069	vbroadcasti32x4	(%rcx),%zmm0
5070	vpxorq	%zmm0,%zmm1,%zmm1
5071	vpxorq	%zmm0,%zmm2,%zmm2
5072	vbroadcasti32x4	16(%rcx),%zmm0
5073	vaesdec	%zmm0,%zmm1,%zmm1
5074	vaesdec	%zmm0,%zmm2,%zmm2
5075
5076
5077	vbroadcasti32x4	32(%rcx),%zmm0
5078	vaesdec	%zmm0,%zmm1,%zmm1
5079	vaesdec	%zmm0,%zmm2,%zmm2
5080
5081
5082	vbroadcasti32x4	48(%rcx),%zmm0
5083	vaesdec	%zmm0,%zmm1,%zmm1
5084	vaesdec	%zmm0,%zmm2,%zmm2
5085
5086	vbroadcasti32x4	64(%rcx),%zmm0
5087	vaesdec	%zmm0,%zmm1,%zmm1
5088	vaesdec	%zmm0,%zmm2,%zmm2
5089
5090
5091	vbroadcasti32x4	80(%rcx),%zmm0
5092	vaesdec	%zmm0,%zmm1,%zmm1
5093	vaesdec	%zmm0,%zmm2,%zmm2
5094
5095
5096	vbroadcasti32x4	96(%rcx),%zmm0
5097	vaesdec	%zmm0,%zmm1,%zmm1
5098	vaesdec	%zmm0,%zmm2,%zmm2
5099
5100
5101	vbroadcasti32x4	112(%rcx),%zmm0
5102	vaesdec	%zmm0,%zmm1,%zmm1
5103	vaesdec	%zmm0,%zmm2,%zmm2
5104
5105
5106	vbroadcasti32x4	128(%rcx),%zmm0
5107	vaesdec	%zmm0,%zmm1,%zmm1
5108	vaesdec	%zmm0,%zmm2,%zmm2
5109
5110
5111	vbroadcasti32x4	144(%rcx),%zmm0
5112	vaesdec	%zmm0,%zmm1,%zmm1
5113	vaesdec	%zmm0,%zmm2,%zmm2
5114
5115
5116	vbroadcasti32x4	160(%rcx),%zmm0
5117	vaesdec	%zmm0,%zmm1,%zmm1
5118	vaesdec	%zmm0,%zmm2,%zmm2
5119
5120
5121	vbroadcasti32x4	176(%rcx),%zmm0
5122	vaesdec	%zmm0,%zmm1,%zmm1
5123	vaesdec	%zmm0,%zmm2,%zmm2
5124
5125
5126	vbroadcasti32x4	192(%rcx),%zmm0
5127	vaesdec	%zmm0,%zmm1,%zmm1
5128	vaesdec	%zmm0,%zmm2,%zmm2
5129
5130
5131	vbroadcasti32x4	208(%rcx),%zmm0
5132	vaesdec	%zmm0,%zmm1,%zmm1
5133	vaesdec	%zmm0,%zmm2,%zmm2
5134
5135
5136	vbroadcasti32x4	224(%rcx),%zmm0
5137	vaesdeclast	%zmm0,%zmm1,%zmm1
5138	vaesdeclast	%zmm0,%zmm2,%zmm2
5139
5140	vpxorq	%zmm9,%zmm1,%zmm1
5141	vpxorq	%zmm10,%zmm2,%zmm2
5142
5143
5144	vmovdqa32	%zmm15,%zmm9
5145	vmovdqa32	%zmm16,%zmm10
5146	vmovdqu8	%zmm1,(%rsi)
5147	vmovdqu8	%zmm2,64(%rsi){%k1}
5148	addq	$0x70,%rsi
5149	vextracti32x4	$0x2,%zmm2,%xmm8
5150	vmovdqa	%xmm12,%xmm0
5151	jmp	.L_steal_cipher_EmbgEptodyewbFa
5152
5153.L_done_7_remain_EmbgEptodyewbFa:
5154
5155	vpxorq	%zmm9,%zmm1,%zmm1
5156	vpxorq	%zmm10,%zmm2,%zmm2
5157
5158
5159	vbroadcasti32x4	(%rcx),%zmm0
5160	vpxorq	%zmm0,%zmm1,%zmm1
5161	vpxorq	%zmm0,%zmm2,%zmm2
5162	vbroadcasti32x4	16(%rcx),%zmm0
5163	vaesdec	%zmm0,%zmm1,%zmm1
5164	vaesdec	%zmm0,%zmm2,%zmm2
5165
5166
5167	vbroadcasti32x4	32(%rcx),%zmm0
5168	vaesdec	%zmm0,%zmm1,%zmm1
5169	vaesdec	%zmm0,%zmm2,%zmm2
5170
5171
5172	vbroadcasti32x4	48(%rcx),%zmm0
5173	vaesdec	%zmm0,%zmm1,%zmm1
5174	vaesdec	%zmm0,%zmm2,%zmm2
5175
5176	vbroadcasti32x4	64(%rcx),%zmm0
5177	vaesdec	%zmm0,%zmm1,%zmm1
5178	vaesdec	%zmm0,%zmm2,%zmm2
5179
5180
5181	vbroadcasti32x4	80(%rcx),%zmm0
5182	vaesdec	%zmm0,%zmm1,%zmm1
5183	vaesdec	%zmm0,%zmm2,%zmm2
5184
5185
5186	vbroadcasti32x4	96(%rcx),%zmm0
5187	vaesdec	%zmm0,%zmm1,%zmm1
5188	vaesdec	%zmm0,%zmm2,%zmm2
5189
5190
5191	vbroadcasti32x4	112(%rcx),%zmm0
5192	vaesdec	%zmm0,%zmm1,%zmm1
5193	vaesdec	%zmm0,%zmm2,%zmm2
5194
5195
5196	vbroadcasti32x4	128(%rcx),%zmm0
5197	vaesdec	%zmm0,%zmm1,%zmm1
5198	vaesdec	%zmm0,%zmm2,%zmm2
5199
5200
5201	vbroadcasti32x4	144(%rcx),%zmm0
5202	vaesdec	%zmm0,%zmm1,%zmm1
5203	vaesdec	%zmm0,%zmm2,%zmm2
5204
5205
5206	vbroadcasti32x4	160(%rcx),%zmm0
5207	vaesdec	%zmm0,%zmm1,%zmm1
5208	vaesdec	%zmm0,%zmm2,%zmm2
5209
5210
5211	vbroadcasti32x4	176(%rcx),%zmm0
5212	vaesdec	%zmm0,%zmm1,%zmm1
5213	vaesdec	%zmm0,%zmm2,%zmm2
5214
5215
5216	vbroadcasti32x4	192(%rcx),%zmm0
5217	vaesdec	%zmm0,%zmm1,%zmm1
5218	vaesdec	%zmm0,%zmm2,%zmm2
5219
5220
5221	vbroadcasti32x4	208(%rcx),%zmm0
5222	vaesdec	%zmm0,%zmm1,%zmm1
5223	vaesdec	%zmm0,%zmm2,%zmm2
5224
5225
5226	vbroadcasti32x4	224(%rcx),%zmm0
5227	vaesdeclast	%zmm0,%zmm1,%zmm1
5228	vaesdeclast	%zmm0,%zmm2,%zmm2
5229
5230	vpxorq	%zmm9,%zmm1,%zmm1
5231	vpxorq	%zmm10,%zmm2,%zmm2
5232
5233
5234	vmovdqa32	%zmm15,%zmm9
5235	vmovdqa32	%zmm16,%zmm10
5236	vmovdqu8	%zmm1,(%rsi)
5237	vmovdqu8	%zmm2,64(%rsi){%k1}
5238	jmp	.L_ret_EmbgEptodyewbFa
5239
5240.L_remaining_num_blocks_is_6_EmbgEptodyewbFa:
5241	vmovdqu8	(%rdi),%zmm1
5242	vmovdqu8	64(%rdi),%ymm2
5243	addq	$0x60,%rdi
5244	andq	$0xf,%rdx
5245	je	.L_done_6_remain_EmbgEptodyewbFa
5246	vextracti32x4	$0x1,%zmm10,%xmm12
5247	vextracti32x4	$0x2,%zmm10,%xmm13
5248	vinserti32x4	$0x1,%xmm13,%zmm10,%zmm10
5249
5250	vpxorq	%zmm9,%zmm1,%zmm1
5251	vpxorq	%zmm10,%zmm2,%zmm2
5252
5253
5254	vbroadcasti32x4	(%rcx),%zmm0
5255	vpxorq	%zmm0,%zmm1,%zmm1
5256	vpxorq	%zmm0,%zmm2,%zmm2
5257	vbroadcasti32x4	16(%rcx),%zmm0
5258	vaesdec	%zmm0,%zmm1,%zmm1
5259	vaesdec	%zmm0,%zmm2,%zmm2
5260
5261
5262	vbroadcasti32x4	32(%rcx),%zmm0
5263	vaesdec	%zmm0,%zmm1,%zmm1
5264	vaesdec	%zmm0,%zmm2,%zmm2
5265
5266
5267	vbroadcasti32x4	48(%rcx),%zmm0
5268	vaesdec	%zmm0,%zmm1,%zmm1
5269	vaesdec	%zmm0,%zmm2,%zmm2
5270
5271	vbroadcasti32x4	64(%rcx),%zmm0
5272	vaesdec	%zmm0,%zmm1,%zmm1
5273	vaesdec	%zmm0,%zmm2,%zmm2
5274
5275
5276	vbroadcasti32x4	80(%rcx),%zmm0
5277	vaesdec	%zmm0,%zmm1,%zmm1
5278	vaesdec	%zmm0,%zmm2,%zmm2
5279
5280
5281	vbroadcasti32x4	96(%rcx),%zmm0
5282	vaesdec	%zmm0,%zmm1,%zmm1
5283	vaesdec	%zmm0,%zmm2,%zmm2
5284
5285
5286	vbroadcasti32x4	112(%rcx),%zmm0
5287	vaesdec	%zmm0,%zmm1,%zmm1
5288	vaesdec	%zmm0,%zmm2,%zmm2
5289
5290
5291	vbroadcasti32x4	128(%rcx),%zmm0
5292	vaesdec	%zmm0,%zmm1,%zmm1
5293	vaesdec	%zmm0,%zmm2,%zmm2
5294
5295
5296	vbroadcasti32x4	144(%rcx),%zmm0
5297	vaesdec	%zmm0,%zmm1,%zmm1
5298	vaesdec	%zmm0,%zmm2,%zmm2
5299
5300
5301	vbroadcasti32x4	160(%rcx),%zmm0
5302	vaesdec	%zmm0,%zmm1,%zmm1
5303	vaesdec	%zmm0,%zmm2,%zmm2
5304
5305
5306	vbroadcasti32x4	176(%rcx),%zmm0
5307	vaesdec	%zmm0,%zmm1,%zmm1
5308	vaesdec	%zmm0,%zmm2,%zmm2
5309
5310
5311	vbroadcasti32x4	192(%rcx),%zmm0
5312	vaesdec	%zmm0,%zmm1,%zmm1
5313	vaesdec	%zmm0,%zmm2,%zmm2
5314
5315
5316	vbroadcasti32x4	208(%rcx),%zmm0
5317	vaesdec	%zmm0,%zmm1,%zmm1
5318	vaesdec	%zmm0,%zmm2,%zmm2
5319
5320
5321	vbroadcasti32x4	224(%rcx),%zmm0
5322	vaesdeclast	%zmm0,%zmm1,%zmm1
5323	vaesdeclast	%zmm0,%zmm2,%zmm2
5324
5325	vpxorq	%zmm9,%zmm1,%zmm1
5326	vpxorq	%zmm10,%zmm2,%zmm2
5327
5328
5329	vmovdqa32	%zmm15,%zmm9
5330	vmovdqa32	%zmm16,%zmm10
5331	vmovdqu8	%zmm1,(%rsi)
5332	vmovdqu8	%ymm2,64(%rsi)
5333	addq	$0x60,%rsi
5334	vextracti32x4	$0x1,%zmm2,%xmm8
5335	vmovdqa	%xmm12,%xmm0
5336	jmp	.L_steal_cipher_EmbgEptodyewbFa
5337
5338.L_done_6_remain_EmbgEptodyewbFa:
5339
5340	vpxorq	%zmm9,%zmm1,%zmm1
5341	vpxorq	%zmm10,%zmm2,%zmm2
5342
5343
5344	vbroadcasti32x4	(%rcx),%zmm0
5345	vpxorq	%zmm0,%zmm1,%zmm1
5346	vpxorq	%zmm0,%zmm2,%zmm2
5347	vbroadcasti32x4	16(%rcx),%zmm0
5348	vaesdec	%zmm0,%zmm1,%zmm1
5349	vaesdec	%zmm0,%zmm2,%zmm2
5350
5351
5352	vbroadcasti32x4	32(%rcx),%zmm0
5353	vaesdec	%zmm0,%zmm1,%zmm1
5354	vaesdec	%zmm0,%zmm2,%zmm2
5355
5356
5357	vbroadcasti32x4	48(%rcx),%zmm0
5358	vaesdec	%zmm0,%zmm1,%zmm1
5359	vaesdec	%zmm0,%zmm2,%zmm2
5360
5361	vbroadcasti32x4	64(%rcx),%zmm0
5362	vaesdec	%zmm0,%zmm1,%zmm1
5363	vaesdec	%zmm0,%zmm2,%zmm2
5364
5365
5366	vbroadcasti32x4	80(%rcx),%zmm0
5367	vaesdec	%zmm0,%zmm1,%zmm1
5368	vaesdec	%zmm0,%zmm2,%zmm2
5369
5370
5371	vbroadcasti32x4	96(%rcx),%zmm0
5372	vaesdec	%zmm0,%zmm1,%zmm1
5373	vaesdec	%zmm0,%zmm2,%zmm2
5374
5375
5376	vbroadcasti32x4	112(%rcx),%zmm0
5377	vaesdec	%zmm0,%zmm1,%zmm1
5378	vaesdec	%zmm0,%zmm2,%zmm2
5379
5380
5381	vbroadcasti32x4	128(%rcx),%zmm0
5382	vaesdec	%zmm0,%zmm1,%zmm1
5383	vaesdec	%zmm0,%zmm2,%zmm2
5384
5385
5386	vbroadcasti32x4	144(%rcx),%zmm0
5387	vaesdec	%zmm0,%zmm1,%zmm1
5388	vaesdec	%zmm0,%zmm2,%zmm2
5389
5390
5391	vbroadcasti32x4	160(%rcx),%zmm0
5392	vaesdec	%zmm0,%zmm1,%zmm1
5393	vaesdec	%zmm0,%zmm2,%zmm2
5394
5395
5396	vbroadcasti32x4	176(%rcx),%zmm0
5397	vaesdec	%zmm0,%zmm1,%zmm1
5398	vaesdec	%zmm0,%zmm2,%zmm2
5399
5400
5401	vbroadcasti32x4	192(%rcx),%zmm0
5402	vaesdec	%zmm0,%zmm1,%zmm1
5403	vaesdec	%zmm0,%zmm2,%zmm2
5404
5405
5406	vbroadcasti32x4	208(%rcx),%zmm0
5407	vaesdec	%zmm0,%zmm1,%zmm1
5408	vaesdec	%zmm0,%zmm2,%zmm2
5409
5410
5411	vbroadcasti32x4	224(%rcx),%zmm0
5412	vaesdeclast	%zmm0,%zmm1,%zmm1
5413	vaesdeclast	%zmm0,%zmm2,%zmm2
5414
5415	vpxorq	%zmm9,%zmm1,%zmm1
5416	vpxorq	%zmm10,%zmm2,%zmm2
5417
5418
5419	vmovdqa32	%zmm15,%zmm9
5420	vmovdqa32	%zmm16,%zmm10
5421	vmovdqu8	%zmm1,(%rsi)
5422	vmovdqu8	%ymm2,64(%rsi)
5423	jmp	.L_ret_EmbgEptodyewbFa
5424
5425.L_remaining_num_blocks_is_5_EmbgEptodyewbFa:
5426	vmovdqu8	(%rdi),%zmm1
5427	vmovdqu	64(%rdi),%xmm2
5428	addq	$0x50,%rdi
5429	andq	$0xf,%rdx
5430	je	.L_done_5_remain_EmbgEptodyewbFa
5431	vmovdqa	%xmm10,%xmm12
5432	vextracti32x4	$0x1,%zmm10,%xmm10
5433
5434	vpxorq	%zmm9,%zmm1,%zmm1
5435	vpxorq	%zmm10,%zmm2,%zmm2
5436
5437
5438	vbroadcasti32x4	(%rcx),%zmm0
5439	vpxorq	%zmm0,%zmm1,%zmm1
5440	vpxorq	%zmm0,%zmm2,%zmm2
5441	vbroadcasti32x4	16(%rcx),%zmm0
5442	vaesdec	%zmm0,%zmm1,%zmm1
5443	vaesdec	%zmm0,%zmm2,%zmm2
5444
5445
5446	vbroadcasti32x4	32(%rcx),%zmm0
5447	vaesdec	%zmm0,%zmm1,%zmm1
5448	vaesdec	%zmm0,%zmm2,%zmm2
5449
5450
5451	vbroadcasti32x4	48(%rcx),%zmm0
5452	vaesdec	%zmm0,%zmm1,%zmm1
5453	vaesdec	%zmm0,%zmm2,%zmm2
5454
5455	vbroadcasti32x4	64(%rcx),%zmm0
5456	vaesdec	%zmm0,%zmm1,%zmm1
5457	vaesdec	%zmm0,%zmm2,%zmm2
5458
5459
5460	vbroadcasti32x4	80(%rcx),%zmm0
5461	vaesdec	%zmm0,%zmm1,%zmm1
5462	vaesdec	%zmm0,%zmm2,%zmm2
5463
5464
5465	vbroadcasti32x4	96(%rcx),%zmm0
5466	vaesdec	%zmm0,%zmm1,%zmm1
5467	vaesdec	%zmm0,%zmm2,%zmm2
5468
5469
5470	vbroadcasti32x4	112(%rcx),%zmm0
5471	vaesdec	%zmm0,%zmm1,%zmm1
5472	vaesdec	%zmm0,%zmm2,%zmm2
5473
5474
5475	vbroadcasti32x4	128(%rcx),%zmm0
5476	vaesdec	%zmm0,%zmm1,%zmm1
5477	vaesdec	%zmm0,%zmm2,%zmm2
5478
5479
5480	vbroadcasti32x4	144(%rcx),%zmm0
5481	vaesdec	%zmm0,%zmm1,%zmm1
5482	vaesdec	%zmm0,%zmm2,%zmm2
5483
5484
5485	vbroadcasti32x4	160(%rcx),%zmm0
5486	vaesdec	%zmm0,%zmm1,%zmm1
5487	vaesdec	%zmm0,%zmm2,%zmm2
5488
5489
5490	vbroadcasti32x4	176(%rcx),%zmm0
5491	vaesdec	%zmm0,%zmm1,%zmm1
5492	vaesdec	%zmm0,%zmm2,%zmm2
5493
5494
5495	vbroadcasti32x4	192(%rcx),%zmm0
5496	vaesdec	%zmm0,%zmm1,%zmm1
5497	vaesdec	%zmm0,%zmm2,%zmm2
5498
5499
5500	vbroadcasti32x4	208(%rcx),%zmm0
5501	vaesdec	%zmm0,%zmm1,%zmm1
5502	vaesdec	%zmm0,%zmm2,%zmm2
5503
5504
5505	vbroadcasti32x4	224(%rcx),%zmm0
5506	vaesdeclast	%zmm0,%zmm1,%zmm1
5507	vaesdeclast	%zmm0,%zmm2,%zmm2
5508
5509	vpxorq	%zmm9,%zmm1,%zmm1
5510	vpxorq	%zmm10,%zmm2,%zmm2
5511
5512
5513	vmovdqa32	%zmm15,%zmm9
5514	vmovdqa32	%zmm16,%zmm10
5515	vmovdqu8	%zmm1,(%rsi)
5516	vmovdqu	%xmm2,64(%rsi)
5517	addq	$0x50,%rsi
5518	vmovdqa	%xmm2,%xmm8
5519	vmovdqa	%xmm12,%xmm0
5520	jmp	.L_steal_cipher_EmbgEptodyewbFa
5521
5522.L_done_5_remain_EmbgEptodyewbFa:
5523
5524	vpxorq	%zmm9,%zmm1,%zmm1
5525	vpxorq	%zmm10,%zmm2,%zmm2
5526
5527
5528	vbroadcasti32x4	(%rcx),%zmm0
5529	vpxorq	%zmm0,%zmm1,%zmm1
5530	vpxorq	%zmm0,%zmm2,%zmm2
5531	vbroadcasti32x4	16(%rcx),%zmm0
5532	vaesdec	%zmm0,%zmm1,%zmm1
5533	vaesdec	%zmm0,%zmm2,%zmm2
5534
5535
5536	vbroadcasti32x4	32(%rcx),%zmm0
5537	vaesdec	%zmm0,%zmm1,%zmm1
5538	vaesdec	%zmm0,%zmm2,%zmm2
5539
5540
5541	vbroadcasti32x4	48(%rcx),%zmm0
5542	vaesdec	%zmm0,%zmm1,%zmm1
5543	vaesdec	%zmm0,%zmm2,%zmm2
5544
5545	vbroadcasti32x4	64(%rcx),%zmm0
5546	vaesdec	%zmm0,%zmm1,%zmm1
5547	vaesdec	%zmm0,%zmm2,%zmm2
5548
5549
5550	vbroadcasti32x4	80(%rcx),%zmm0
5551	vaesdec	%zmm0,%zmm1,%zmm1
5552	vaesdec	%zmm0,%zmm2,%zmm2
5553
5554
5555	vbroadcasti32x4	96(%rcx),%zmm0
5556	vaesdec	%zmm0,%zmm1,%zmm1
5557	vaesdec	%zmm0,%zmm2,%zmm2
5558
5559
5560	vbroadcasti32x4	112(%rcx),%zmm0
5561	vaesdec	%zmm0,%zmm1,%zmm1
5562	vaesdec	%zmm0,%zmm2,%zmm2
5563
5564
5565	vbroadcasti32x4	128(%rcx),%zmm0
5566	vaesdec	%zmm0,%zmm1,%zmm1
5567	vaesdec	%zmm0,%zmm2,%zmm2
5568
5569
5570	vbroadcasti32x4	144(%rcx),%zmm0
5571	vaesdec	%zmm0,%zmm1,%zmm1
5572	vaesdec	%zmm0,%zmm2,%zmm2
5573
5574
5575	vbroadcasti32x4	160(%rcx),%zmm0
5576	vaesdec	%zmm0,%zmm1,%zmm1
5577	vaesdec	%zmm0,%zmm2,%zmm2
5578
5579
5580	vbroadcasti32x4	176(%rcx),%zmm0
5581	vaesdec	%zmm0,%zmm1,%zmm1
5582	vaesdec	%zmm0,%zmm2,%zmm2
5583
5584
5585	vbroadcasti32x4	192(%rcx),%zmm0
5586	vaesdec	%zmm0,%zmm1,%zmm1
5587	vaesdec	%zmm0,%zmm2,%zmm2
5588
5589
5590	vbroadcasti32x4	208(%rcx),%zmm0
5591	vaesdec	%zmm0,%zmm1,%zmm1
5592	vaesdec	%zmm0,%zmm2,%zmm2
5593
5594
5595	vbroadcasti32x4	224(%rcx),%zmm0
5596	vaesdeclast	%zmm0,%zmm1,%zmm1
5597	vaesdeclast	%zmm0,%zmm2,%zmm2
5598
5599	vpxorq	%zmm9,%zmm1,%zmm1
5600	vpxorq	%zmm10,%zmm2,%zmm2
5601
5602
5603	vmovdqa32	%zmm15,%zmm9
5604	vmovdqa32	%zmm16,%zmm10
5605	vmovdqu8	%zmm1,(%rsi)
5606	vmovdqu8	%xmm2,64(%rsi)
5607	jmp	.L_ret_EmbgEptodyewbFa
5608
5609.L_remaining_num_blocks_is_4_EmbgEptodyewbFa:
5610	vmovdqu8	(%rdi),%zmm1
5611	addq	$0x40,%rdi
5612	andq	$0xf,%rdx
5613	je	.L_done_4_remain_EmbgEptodyewbFa
5614	vextracti32x4	$0x3,%zmm9,%xmm12
5615	vinserti32x4	$0x3,%xmm10,%zmm9,%zmm9
5616
5617	vpxorq	%zmm9,%zmm1,%zmm1
5618	vpxorq	%zmm10,%zmm2,%zmm2
5619
5620
5621	vbroadcasti32x4	(%rcx),%zmm0
5622	vpxorq	%zmm0,%zmm1,%zmm1
5623	vpxorq	%zmm0,%zmm2,%zmm2
5624	vbroadcasti32x4	16(%rcx),%zmm0
5625	vaesdec	%zmm0,%zmm1,%zmm1
5626	vaesdec	%zmm0,%zmm2,%zmm2
5627
5628
5629	vbroadcasti32x4	32(%rcx),%zmm0
5630	vaesdec	%zmm0,%zmm1,%zmm1
5631	vaesdec	%zmm0,%zmm2,%zmm2
5632
5633
5634	vbroadcasti32x4	48(%rcx),%zmm0
5635	vaesdec	%zmm0,%zmm1,%zmm1
5636	vaesdec	%zmm0,%zmm2,%zmm2
5637
5638	vbroadcasti32x4	64(%rcx),%zmm0
5639	vaesdec	%zmm0,%zmm1,%zmm1
5640	vaesdec	%zmm0,%zmm2,%zmm2
5641
5642
5643	vbroadcasti32x4	80(%rcx),%zmm0
5644	vaesdec	%zmm0,%zmm1,%zmm1
5645	vaesdec	%zmm0,%zmm2,%zmm2
5646
5647
5648	vbroadcasti32x4	96(%rcx),%zmm0
5649	vaesdec	%zmm0,%zmm1,%zmm1
5650	vaesdec	%zmm0,%zmm2,%zmm2
5651
5652
5653	vbroadcasti32x4	112(%rcx),%zmm0
5654	vaesdec	%zmm0,%zmm1,%zmm1
5655	vaesdec	%zmm0,%zmm2,%zmm2
5656
5657
5658	vbroadcasti32x4	128(%rcx),%zmm0
5659	vaesdec	%zmm0,%zmm1,%zmm1
5660	vaesdec	%zmm0,%zmm2,%zmm2
5661
5662
5663	vbroadcasti32x4	144(%rcx),%zmm0
5664	vaesdec	%zmm0,%zmm1,%zmm1
5665	vaesdec	%zmm0,%zmm2,%zmm2
5666
5667
5668	vbroadcasti32x4	160(%rcx),%zmm0
5669	vaesdec	%zmm0,%zmm1,%zmm1
5670	vaesdec	%zmm0,%zmm2,%zmm2
5671
5672
5673	vbroadcasti32x4	176(%rcx),%zmm0
5674	vaesdec	%zmm0,%zmm1,%zmm1
5675	vaesdec	%zmm0,%zmm2,%zmm2
5676
5677
5678	vbroadcasti32x4	192(%rcx),%zmm0
5679	vaesdec	%zmm0,%zmm1,%zmm1
5680	vaesdec	%zmm0,%zmm2,%zmm2
5681
5682
5683	vbroadcasti32x4	208(%rcx),%zmm0
5684	vaesdec	%zmm0,%zmm1,%zmm1
5685	vaesdec	%zmm0,%zmm2,%zmm2
5686
5687
5688	vbroadcasti32x4	224(%rcx),%zmm0
5689	vaesdeclast	%zmm0,%zmm1,%zmm1
5690	vaesdeclast	%zmm0,%zmm2,%zmm2
5691
5692	vpxorq	%zmm9,%zmm1,%zmm1
5693	vpxorq	%zmm10,%zmm2,%zmm2
5694
5695
5696	vmovdqa32	%zmm15,%zmm9
5697	vmovdqa32	%zmm16,%zmm10
5698	vmovdqu8	%zmm1,(%rsi)
5699	addq	$0x40,%rsi
5700	vextracti32x4	$0x3,%zmm1,%xmm8
5701	vmovdqa	%xmm12,%xmm0
5702	jmp	.L_steal_cipher_EmbgEptodyewbFa
5703
5704.L_done_4_remain_EmbgEptodyewbFa:
5705
5706	vpxorq	%zmm9,%zmm1,%zmm1
5707	vpxorq	%zmm10,%zmm2,%zmm2
5708
5709
5710	vbroadcasti32x4	(%rcx),%zmm0
5711	vpxorq	%zmm0,%zmm1,%zmm1
5712	vpxorq	%zmm0,%zmm2,%zmm2
5713	vbroadcasti32x4	16(%rcx),%zmm0
5714	vaesdec	%zmm0,%zmm1,%zmm1
5715	vaesdec	%zmm0,%zmm2,%zmm2
5716
5717
5718	vbroadcasti32x4	32(%rcx),%zmm0
5719	vaesdec	%zmm0,%zmm1,%zmm1
5720	vaesdec	%zmm0,%zmm2,%zmm2
5721
5722
5723	vbroadcasti32x4	48(%rcx),%zmm0
5724	vaesdec	%zmm0,%zmm1,%zmm1
5725	vaesdec	%zmm0,%zmm2,%zmm2
5726
5727	vbroadcasti32x4	64(%rcx),%zmm0
5728	vaesdec	%zmm0,%zmm1,%zmm1
5729	vaesdec	%zmm0,%zmm2,%zmm2
5730
5731
5732	vbroadcasti32x4	80(%rcx),%zmm0
5733	vaesdec	%zmm0,%zmm1,%zmm1
5734	vaesdec	%zmm0,%zmm2,%zmm2
5735
5736
5737	vbroadcasti32x4	96(%rcx),%zmm0
5738	vaesdec	%zmm0,%zmm1,%zmm1
5739	vaesdec	%zmm0,%zmm2,%zmm2
5740
5741
5742	vbroadcasti32x4	112(%rcx),%zmm0
5743	vaesdec	%zmm0,%zmm1,%zmm1
5744	vaesdec	%zmm0,%zmm2,%zmm2
5745
5746
5747	vbroadcasti32x4	128(%rcx),%zmm0
5748	vaesdec	%zmm0,%zmm1,%zmm1
5749	vaesdec	%zmm0,%zmm2,%zmm2
5750
5751
5752	vbroadcasti32x4	144(%rcx),%zmm0
5753	vaesdec	%zmm0,%zmm1,%zmm1
5754	vaesdec	%zmm0,%zmm2,%zmm2
5755
5756
5757	vbroadcasti32x4	160(%rcx),%zmm0
5758	vaesdec	%zmm0,%zmm1,%zmm1
5759	vaesdec	%zmm0,%zmm2,%zmm2
5760
5761
5762	vbroadcasti32x4	176(%rcx),%zmm0
5763	vaesdec	%zmm0,%zmm1,%zmm1
5764	vaesdec	%zmm0,%zmm2,%zmm2
5765
5766
5767	vbroadcasti32x4	192(%rcx),%zmm0
5768	vaesdec	%zmm0,%zmm1,%zmm1
5769	vaesdec	%zmm0,%zmm2,%zmm2
5770
5771
5772	vbroadcasti32x4	208(%rcx),%zmm0
5773	vaesdec	%zmm0,%zmm1,%zmm1
5774	vaesdec	%zmm0,%zmm2,%zmm2
5775
5776
5777	vbroadcasti32x4	224(%rcx),%zmm0
5778	vaesdeclast	%zmm0,%zmm1,%zmm1
5779	vaesdeclast	%zmm0,%zmm2,%zmm2
5780
5781	vpxorq	%zmm9,%zmm1,%zmm1
5782	vpxorq	%zmm10,%zmm2,%zmm2
5783
5784
5785	vmovdqa32	%zmm15,%zmm9
5786	vmovdqa32	%zmm16,%zmm10
5787	vmovdqu8	%zmm1,(%rsi)
5788	jmp	.L_ret_EmbgEptodyewbFa
5789
5790.L_remaining_num_blocks_is_3_EmbgEptodyewbFa:
5791	vmovdqu	(%rdi),%xmm1
5792	vmovdqu	16(%rdi),%xmm2
5793	vmovdqu	32(%rdi),%xmm3
5794	addq	$0x30,%rdi
5795	andq	$0xf,%rdx
5796	je	.L_done_3_remain_EmbgEptodyewbFa
5797	vextracti32x4	$0x2,%zmm9,%xmm13
5798	vextracti32x4	$0x1,%zmm9,%xmm10
5799	vextracti32x4	$0x3,%zmm9,%xmm11
5800	vpxor	%xmm9,%xmm1,%xmm1
5801	vpxor	%xmm10,%xmm2,%xmm2
5802	vpxor	%xmm11,%xmm3,%xmm3
5803	vmovdqu	(%rcx),%xmm0
5804	vpxor	%xmm0,%xmm1,%xmm1
5805	vpxor	%xmm0,%xmm2,%xmm2
5806	vpxor	%xmm0,%xmm3,%xmm3
5807	vmovdqu	16(%rcx),%xmm0
5808	vaesdec	%xmm0,%xmm1,%xmm1
5809	vaesdec	%xmm0,%xmm2,%xmm2
5810	vaesdec	%xmm0,%xmm3,%xmm3
5811	vmovdqu	32(%rcx),%xmm0
5812	vaesdec	%xmm0,%xmm1,%xmm1
5813	vaesdec	%xmm0,%xmm2,%xmm2
5814	vaesdec	%xmm0,%xmm3,%xmm3
5815	vmovdqu	48(%rcx),%xmm0
5816	vaesdec	%xmm0,%xmm1,%xmm1
5817	vaesdec	%xmm0,%xmm2,%xmm2
5818	vaesdec	%xmm0,%xmm3,%xmm3
5819	vmovdqu	64(%rcx),%xmm0
5820	vaesdec	%xmm0,%xmm1,%xmm1
5821	vaesdec	%xmm0,%xmm2,%xmm2
5822	vaesdec	%xmm0,%xmm3,%xmm3
5823	vmovdqu	80(%rcx),%xmm0
5824	vaesdec	%xmm0,%xmm1,%xmm1
5825	vaesdec	%xmm0,%xmm2,%xmm2
5826	vaesdec	%xmm0,%xmm3,%xmm3
5827	vmovdqu	96(%rcx),%xmm0
5828	vaesdec	%xmm0,%xmm1,%xmm1
5829	vaesdec	%xmm0,%xmm2,%xmm2
5830	vaesdec	%xmm0,%xmm3,%xmm3
5831	vmovdqu	112(%rcx),%xmm0
5832	vaesdec	%xmm0,%xmm1,%xmm1
5833	vaesdec	%xmm0,%xmm2,%xmm2
5834	vaesdec	%xmm0,%xmm3,%xmm3
5835	vmovdqu	128(%rcx),%xmm0
5836	vaesdec	%xmm0,%xmm1,%xmm1
5837	vaesdec	%xmm0,%xmm2,%xmm2
5838	vaesdec	%xmm0,%xmm3,%xmm3
5839	vmovdqu	144(%rcx),%xmm0
5840	vaesdec	%xmm0,%xmm1,%xmm1
5841	vaesdec	%xmm0,%xmm2,%xmm2
5842	vaesdec	%xmm0,%xmm3,%xmm3
5843	vmovdqu	160(%rcx),%xmm0
5844	vaesdec	%xmm0,%xmm1,%xmm1
5845	vaesdec	%xmm0,%xmm2,%xmm2
5846	vaesdec	%xmm0,%xmm3,%xmm3
5847	vmovdqu	176(%rcx),%xmm0
5848	vaesdec	%xmm0,%xmm1,%xmm1
5849	vaesdec	%xmm0,%xmm2,%xmm2
5850	vaesdec	%xmm0,%xmm3,%xmm3
5851	vmovdqu	192(%rcx),%xmm0
5852	vaesdec	%xmm0,%xmm1,%xmm1
5853	vaesdec	%xmm0,%xmm2,%xmm2
5854	vaesdec	%xmm0,%xmm3,%xmm3
5855	vmovdqu	208(%rcx),%xmm0
5856	vaesdec	%xmm0,%xmm1,%xmm1
5857	vaesdec	%xmm0,%xmm2,%xmm2
5858	vaesdec	%xmm0,%xmm3,%xmm3
5859	vmovdqu	224(%rcx),%xmm0
5860	vaesdeclast	%xmm0,%xmm1,%xmm1
5861	vaesdeclast	%xmm0,%xmm2,%xmm2
5862	vaesdeclast	%xmm0,%xmm3,%xmm3
5863	vpxor	%xmm9,%xmm1,%xmm1
5864	vpxor	%xmm10,%xmm2,%xmm2
5865	vpxor	%xmm11,%xmm3,%xmm3
5866	vmovdqu	%xmm1,(%rsi)
5867	vmovdqu	%xmm2,16(%rsi)
5868	vmovdqu	%xmm3,32(%rsi)
5869	addq	$0x30,%rsi
5870	vmovdqa	%xmm3,%xmm8
5871	vmovdqa	%xmm13,%xmm0
5872	jmp	.L_steal_cipher_EmbgEptodyewbFa
5873
5874.L_done_3_remain_EmbgEptodyewbFa:
5875	vextracti32x4	$0x1,%zmm9,%xmm10
5876	vextracti32x4	$0x2,%zmm9,%xmm11
5877	vpxor	%xmm9,%xmm1,%xmm1
5878	vpxor	%xmm10,%xmm2,%xmm2
5879	vpxor	%xmm11,%xmm3,%xmm3
5880	vmovdqu	(%rcx),%xmm0
5881	vpxor	%xmm0,%xmm1,%xmm1
5882	vpxor	%xmm0,%xmm2,%xmm2
5883	vpxor	%xmm0,%xmm3,%xmm3
5884	vmovdqu	16(%rcx),%xmm0
5885	vaesdec	%xmm0,%xmm1,%xmm1
5886	vaesdec	%xmm0,%xmm2,%xmm2
5887	vaesdec	%xmm0,%xmm3,%xmm3
5888	vmovdqu	32(%rcx),%xmm0
5889	vaesdec	%xmm0,%xmm1,%xmm1
5890	vaesdec	%xmm0,%xmm2,%xmm2
5891	vaesdec	%xmm0,%xmm3,%xmm3
5892	vmovdqu	48(%rcx),%xmm0
5893	vaesdec	%xmm0,%xmm1,%xmm1
5894	vaesdec	%xmm0,%xmm2,%xmm2
5895	vaesdec	%xmm0,%xmm3,%xmm3
5896	vmovdqu	64(%rcx),%xmm0
5897	vaesdec	%xmm0,%xmm1,%xmm1
5898	vaesdec	%xmm0,%xmm2,%xmm2
5899	vaesdec	%xmm0,%xmm3,%xmm3
5900	vmovdqu	80(%rcx),%xmm0
5901	vaesdec	%xmm0,%xmm1,%xmm1
5902	vaesdec	%xmm0,%xmm2,%xmm2
5903	vaesdec	%xmm0,%xmm3,%xmm3
5904	vmovdqu	96(%rcx),%xmm0
5905	vaesdec	%xmm0,%xmm1,%xmm1
5906	vaesdec	%xmm0,%xmm2,%xmm2
5907	vaesdec	%xmm0,%xmm3,%xmm3
5908	vmovdqu	112(%rcx),%xmm0
5909	vaesdec	%xmm0,%xmm1,%xmm1
5910	vaesdec	%xmm0,%xmm2,%xmm2
5911	vaesdec	%xmm0,%xmm3,%xmm3
5912	vmovdqu	128(%rcx),%xmm0
5913	vaesdec	%xmm0,%xmm1,%xmm1
5914	vaesdec	%xmm0,%xmm2,%xmm2
5915	vaesdec	%xmm0,%xmm3,%xmm3
5916	vmovdqu	144(%rcx),%xmm0
5917	vaesdec	%xmm0,%xmm1,%xmm1
5918	vaesdec	%xmm0,%xmm2,%xmm2
5919	vaesdec	%xmm0,%xmm3,%xmm3
5920	vmovdqu	160(%rcx),%xmm0
5921	vaesdec	%xmm0,%xmm1,%xmm1
5922	vaesdec	%xmm0,%xmm2,%xmm2
5923	vaesdec	%xmm0,%xmm3,%xmm3
5924	vmovdqu	176(%rcx),%xmm0
5925	vaesdec	%xmm0,%xmm1,%xmm1
5926	vaesdec	%xmm0,%xmm2,%xmm2
5927	vaesdec	%xmm0,%xmm3,%xmm3
5928	vmovdqu	192(%rcx),%xmm0
5929	vaesdec	%xmm0,%xmm1,%xmm1
5930	vaesdec	%xmm0,%xmm2,%xmm2
5931	vaesdec	%xmm0,%xmm3,%xmm3
5932	vmovdqu	208(%rcx),%xmm0
5933	vaesdec	%xmm0,%xmm1,%xmm1
5934	vaesdec	%xmm0,%xmm2,%xmm2
5935	vaesdec	%xmm0,%xmm3,%xmm3
5936	vmovdqu	224(%rcx),%xmm0
5937	vaesdeclast	%xmm0,%xmm1,%xmm1
5938	vaesdeclast	%xmm0,%xmm2,%xmm2
5939	vaesdeclast	%xmm0,%xmm3,%xmm3
5940	vpxor	%xmm9,%xmm1,%xmm1
5941	vpxor	%xmm10,%xmm2,%xmm2
5942	vpxor	%xmm11,%xmm3,%xmm3
5943	vmovdqu	%xmm1,(%rsi)
5944	vmovdqu	%xmm2,16(%rsi)
5945	vmovdqu	%xmm3,32(%rsi)
5946	jmp	.L_ret_EmbgEptodyewbFa
5947
5948.L_remaining_num_blocks_is_2_EmbgEptodyewbFa:
5949	vmovdqu	(%rdi),%xmm1
5950	vmovdqu	16(%rdi),%xmm2
5951	addq	$0x20,%rdi
5952	andq	$0xf,%rdx
5953	je	.L_done_2_remain_EmbgEptodyewbFa
5954	vextracti32x4	$0x2,%zmm9,%xmm10
5955	vextracti32x4	$0x1,%zmm9,%xmm12
5956	vpxor	%xmm9,%xmm1,%xmm1
5957	vpxor	%xmm10,%xmm2,%xmm2
5958	vmovdqu	(%rcx),%xmm0
5959	vpxor	%xmm0,%xmm1,%xmm1
5960	vpxor	%xmm0,%xmm2,%xmm2
5961	vmovdqu	16(%rcx),%xmm0
5962	vaesdec	%xmm0,%xmm1,%xmm1
5963	vaesdec	%xmm0,%xmm2,%xmm2
5964	vmovdqu	32(%rcx),%xmm0
5965	vaesdec	%xmm0,%xmm1,%xmm1
5966	vaesdec	%xmm0,%xmm2,%xmm2
5967	vmovdqu	48(%rcx),%xmm0
5968	vaesdec	%xmm0,%xmm1,%xmm1
5969	vaesdec	%xmm0,%xmm2,%xmm2
5970	vmovdqu	64(%rcx),%xmm0
5971	vaesdec	%xmm0,%xmm1,%xmm1
5972	vaesdec	%xmm0,%xmm2,%xmm2
5973	vmovdqu	80(%rcx),%xmm0
5974	vaesdec	%xmm0,%xmm1,%xmm1
5975	vaesdec	%xmm0,%xmm2,%xmm2
5976	vmovdqu	96(%rcx),%xmm0
5977	vaesdec	%xmm0,%xmm1,%xmm1
5978	vaesdec	%xmm0,%xmm2,%xmm2
5979	vmovdqu	112(%rcx),%xmm0
5980	vaesdec	%xmm0,%xmm1,%xmm1
5981	vaesdec	%xmm0,%xmm2,%xmm2
5982	vmovdqu	128(%rcx),%xmm0
5983	vaesdec	%xmm0,%xmm1,%xmm1
5984	vaesdec	%xmm0,%xmm2,%xmm2
5985	vmovdqu	144(%rcx),%xmm0
5986	vaesdec	%xmm0,%xmm1,%xmm1
5987	vaesdec	%xmm0,%xmm2,%xmm2
5988	vmovdqu	160(%rcx),%xmm0
5989	vaesdec	%xmm0,%xmm1,%xmm1
5990	vaesdec	%xmm0,%xmm2,%xmm2
5991	vmovdqu	176(%rcx),%xmm0
5992	vaesdec	%xmm0,%xmm1,%xmm1
5993	vaesdec	%xmm0,%xmm2,%xmm2
5994	vmovdqu	192(%rcx),%xmm0
5995	vaesdec	%xmm0,%xmm1,%xmm1
5996	vaesdec	%xmm0,%xmm2,%xmm2
5997	vmovdqu	208(%rcx),%xmm0
5998	vaesdec	%xmm0,%xmm1,%xmm1
5999	vaesdec	%xmm0,%xmm2,%xmm2
6000	vmovdqu	224(%rcx),%xmm0
6001	vaesdeclast	%xmm0,%xmm1,%xmm1
6002	vaesdeclast	%xmm0,%xmm2,%xmm2
6003	vpxor	%xmm9,%xmm1,%xmm1
6004	vpxor	%xmm10,%xmm2,%xmm2
6005	vmovdqu	%xmm1,(%rsi)
6006	vmovdqu	%xmm2,16(%rsi)
6007	addq	$0x20,%rsi
6008	vmovdqa	%xmm2,%xmm8
6009	vmovdqa	%xmm12,%xmm0
6010	jmp	.L_steal_cipher_EmbgEptodyewbFa
6011
6012.L_done_2_remain_EmbgEptodyewbFa:
6013	vextracti32x4	$0x1,%zmm9,%xmm10
6014	vpxor	%xmm9,%xmm1,%xmm1
6015	vpxor	%xmm10,%xmm2,%xmm2
6016	vmovdqu	(%rcx),%xmm0
6017	vpxor	%xmm0,%xmm1,%xmm1
6018	vpxor	%xmm0,%xmm2,%xmm2
6019	vmovdqu	16(%rcx),%xmm0
6020	vaesdec	%xmm0,%xmm1,%xmm1
6021	vaesdec	%xmm0,%xmm2,%xmm2
6022	vmovdqu	32(%rcx),%xmm0
6023	vaesdec	%xmm0,%xmm1,%xmm1
6024	vaesdec	%xmm0,%xmm2,%xmm2
6025	vmovdqu	48(%rcx),%xmm0
6026	vaesdec	%xmm0,%xmm1,%xmm1
6027	vaesdec	%xmm0,%xmm2,%xmm2
6028	vmovdqu	64(%rcx),%xmm0
6029	vaesdec	%xmm0,%xmm1,%xmm1
6030	vaesdec	%xmm0,%xmm2,%xmm2
6031	vmovdqu	80(%rcx),%xmm0
6032	vaesdec	%xmm0,%xmm1,%xmm1
6033	vaesdec	%xmm0,%xmm2,%xmm2
6034	vmovdqu	96(%rcx),%xmm0
6035	vaesdec	%xmm0,%xmm1,%xmm1
6036	vaesdec	%xmm0,%xmm2,%xmm2
6037	vmovdqu	112(%rcx),%xmm0
6038	vaesdec	%xmm0,%xmm1,%xmm1
6039	vaesdec	%xmm0,%xmm2,%xmm2
6040	vmovdqu	128(%rcx),%xmm0
6041	vaesdec	%xmm0,%xmm1,%xmm1
6042	vaesdec	%xmm0,%xmm2,%xmm2
6043	vmovdqu	144(%rcx),%xmm0
6044	vaesdec	%xmm0,%xmm1,%xmm1
6045	vaesdec	%xmm0,%xmm2,%xmm2
6046	vmovdqu	160(%rcx),%xmm0
6047	vaesdec	%xmm0,%xmm1,%xmm1
6048	vaesdec	%xmm0,%xmm2,%xmm2
6049	vmovdqu	176(%rcx),%xmm0
6050	vaesdec	%xmm0,%xmm1,%xmm1
6051	vaesdec	%xmm0,%xmm2,%xmm2
6052	vmovdqu	192(%rcx),%xmm0
6053	vaesdec	%xmm0,%xmm1,%xmm1
6054	vaesdec	%xmm0,%xmm2,%xmm2
6055	vmovdqu	208(%rcx),%xmm0
6056	vaesdec	%xmm0,%xmm1,%xmm1
6057	vaesdec	%xmm0,%xmm2,%xmm2
6058	vmovdqu	224(%rcx),%xmm0
6059	vaesdeclast	%xmm0,%xmm1,%xmm1
6060	vaesdeclast	%xmm0,%xmm2,%xmm2
6061	vpxor	%xmm9,%xmm1,%xmm1
6062	vpxor	%xmm10,%xmm2,%xmm2
6063	vmovdqu	%xmm1,(%rsi)
6064	vmovdqu	%xmm2,16(%rsi)
6065	jmp	.L_ret_EmbgEptodyewbFa
6066
6067.L_remaining_num_blocks_is_1_EmbgEptodyewbFa:
6068	vmovdqu	(%rdi),%xmm1
6069	addq	$0x10,%rdi
6070	andq	$0xf,%rdx
6071	je	.L_done_1_remain_EmbgEptodyewbFa
6072	vextracti32x4	$0x1,%zmm9,%xmm11
6073	vpxor	%xmm11,%xmm1,%xmm1
6074	vmovdqu	(%rcx),%xmm0
6075	vpxor	%xmm0,%xmm1,%xmm1
6076	vmovdqu	16(%rcx),%xmm0
6077	vaesdec	%xmm0,%xmm1,%xmm1
6078	vmovdqu	32(%rcx),%xmm0
6079	vaesdec	%xmm0,%xmm1,%xmm1
6080	vmovdqu	48(%rcx),%xmm0
6081	vaesdec	%xmm0,%xmm1,%xmm1
6082	vmovdqu	64(%rcx),%xmm0
6083	vaesdec	%xmm0,%xmm1,%xmm1
6084	vmovdqu	80(%rcx),%xmm0
6085	vaesdec	%xmm0,%xmm1,%xmm1
6086	vmovdqu	96(%rcx),%xmm0
6087	vaesdec	%xmm0,%xmm1,%xmm1
6088	vmovdqu	112(%rcx),%xmm0
6089	vaesdec	%xmm0,%xmm1,%xmm1
6090	vmovdqu	128(%rcx),%xmm0
6091	vaesdec	%xmm0,%xmm1,%xmm1
6092	vmovdqu	144(%rcx),%xmm0
6093	vaesdec	%xmm0,%xmm1,%xmm1
6094	vmovdqu	160(%rcx),%xmm0
6095	vaesdec	%xmm0,%xmm1,%xmm1
6096	vmovdqu	176(%rcx),%xmm0
6097	vaesdec	%xmm0,%xmm1,%xmm1
6098	vmovdqu	192(%rcx),%xmm0
6099	vaesdec	%xmm0,%xmm1,%xmm1
6100	vmovdqu	208(%rcx),%xmm0
6101	vaesdec	%xmm0,%xmm1,%xmm1
6102	vmovdqu	224(%rcx),%xmm0
6103	vaesdeclast	%xmm0,%xmm1,%xmm1
6104	vpxor	%xmm11,%xmm1,%xmm1
6105	vmovdqu	%xmm1,(%rsi)
6106	addq	$0x10,%rsi
6107	vmovdqa	%xmm1,%xmm8
6108	vmovdqa	%xmm9,%xmm0
6109	jmp	.L_steal_cipher_EmbgEptodyewbFa
6110
6111.L_done_1_remain_EmbgEptodyewbFa:
6112	vpxor	%xmm9,%xmm1,%xmm1
6113	vmovdqu	(%rcx),%xmm0
6114	vpxor	%xmm0,%xmm1,%xmm1
6115	vmovdqu	16(%rcx),%xmm0
6116	vaesdec	%xmm0,%xmm1,%xmm1
6117	vmovdqu	32(%rcx),%xmm0
6118	vaesdec	%xmm0,%xmm1,%xmm1
6119	vmovdqu	48(%rcx),%xmm0
6120	vaesdec	%xmm0,%xmm1,%xmm1
6121	vmovdqu	64(%rcx),%xmm0
6122	vaesdec	%xmm0,%xmm1,%xmm1
6123	vmovdqu	80(%rcx),%xmm0
6124	vaesdec	%xmm0,%xmm1,%xmm1
6125	vmovdqu	96(%rcx),%xmm0
6126	vaesdec	%xmm0,%xmm1,%xmm1
6127	vmovdqu	112(%rcx),%xmm0
6128	vaesdec	%xmm0,%xmm1,%xmm1
6129	vmovdqu	128(%rcx),%xmm0
6130	vaesdec	%xmm0,%xmm1,%xmm1
6131	vmovdqu	144(%rcx),%xmm0
6132	vaesdec	%xmm0,%xmm1,%xmm1
6133	vmovdqu	160(%rcx),%xmm0
6134	vaesdec	%xmm0,%xmm1,%xmm1
6135	vmovdqu	176(%rcx),%xmm0
6136	vaesdec	%xmm0,%xmm1,%xmm1
6137	vmovdqu	192(%rcx),%xmm0
6138	vaesdec	%xmm0,%xmm1,%xmm1
6139	vmovdqu	208(%rcx),%xmm0
6140	vaesdec	%xmm0,%xmm1,%xmm1
6141	vmovdqu	224(%rcx),%xmm0
6142	vaesdeclast	%xmm0,%xmm1,%xmm1
6143	vpxor	%xmm9,%xmm1,%xmm1
6144	vmovdqu	%xmm1,(%rsi)
6145	jmp	.L_ret_EmbgEptodyewbFa
6146
6147.L_start_by16_EmbgEptodyewbFa:
6148	vbroadcasti32x4	(%rsp),%zmm0
6149	vbroadcasti32x4	shufb_15_7(%rip),%zmm8
6150	movq	$0xaa,%r8
6151	kmovq	%r8,%k2
6152
6153
6154	vpshufb	%zmm8,%zmm0,%zmm1
6155	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
6156	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
6157	vpclmulqdq	$0x0,%zmm25,%zmm2,%zmm3
6158	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
6159	vpxord	%zmm4,%zmm3,%zmm9
6160
6161
6162	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
6163	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
6164	vpclmulqdq	$0x0,%zmm25,%zmm6,%zmm7
6165	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
6166	vpxord	%zmm5,%zmm7,%zmm10
6167
6168
6169	vpsrldq	$0xf,%zmm9,%zmm13
6170	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
6171	vpslldq	$0x1,%zmm9,%zmm11
6172	vpxord	%zmm14,%zmm11,%zmm11
6173
6174	vpsrldq	$0xf,%zmm10,%zmm15
6175	vpclmulqdq	$0x0,%zmm25,%zmm15,%zmm16
6176	vpslldq	$0x1,%zmm10,%zmm12
6177	vpxord	%zmm16,%zmm12,%zmm12
6178
6179.L_main_loop_run_16_EmbgEptodyewbFa:
6180	vmovdqu8	(%rdi),%zmm1
6181	vmovdqu8	64(%rdi),%zmm2
6182	vmovdqu8	128(%rdi),%zmm3
6183	vmovdqu8	192(%rdi),%zmm4
6184	vmovdqu8	240(%rdi),%xmm5
6185	addq	$0x100,%rdi
6186	vpxorq	%zmm9,%zmm1,%zmm1
6187	vpxorq	%zmm10,%zmm2,%zmm2
6188	vpxorq	%zmm11,%zmm3,%zmm3
6189	vpxorq	%zmm12,%zmm4,%zmm4
6190	vbroadcasti32x4	(%rcx),%zmm0
6191	vpxorq	%zmm0,%zmm1,%zmm1
6192	vpxorq	%zmm0,%zmm2,%zmm2
6193	vpxorq	%zmm0,%zmm3,%zmm3
6194	vpxorq	%zmm0,%zmm4,%zmm4
6195	vpsrldq	$0xf,%zmm11,%zmm13
6196	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
6197	vpslldq	$0x1,%zmm11,%zmm15
6198	vpxord	%zmm14,%zmm15,%zmm15
6199	vbroadcasti32x4	16(%rcx),%zmm0
6200	vaesdec	%zmm0,%zmm1,%zmm1
6201	vaesdec	%zmm0,%zmm2,%zmm2
6202	vaesdec	%zmm0,%zmm3,%zmm3
6203	vaesdec	%zmm0,%zmm4,%zmm4
6204	vbroadcasti32x4	32(%rcx),%zmm0
6205	vaesdec	%zmm0,%zmm1,%zmm1
6206	vaesdec	%zmm0,%zmm2,%zmm2
6207	vaesdec	%zmm0,%zmm3,%zmm3
6208	vaesdec	%zmm0,%zmm4,%zmm4
6209	vbroadcasti32x4	48(%rcx),%zmm0
6210	vaesdec	%zmm0,%zmm1,%zmm1
6211	vaesdec	%zmm0,%zmm2,%zmm2
6212	vaesdec	%zmm0,%zmm3,%zmm3
6213	vaesdec	%zmm0,%zmm4,%zmm4
6214	vpsrldq	$0xf,%zmm12,%zmm13
6215	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
6216	vpslldq	$0x1,%zmm12,%zmm16
6217	vpxord	%zmm14,%zmm16,%zmm16
6218	vbroadcasti32x4	64(%rcx),%zmm0
6219	vaesdec	%zmm0,%zmm1,%zmm1
6220	vaesdec	%zmm0,%zmm2,%zmm2
6221	vaesdec	%zmm0,%zmm3,%zmm3
6222	vaesdec	%zmm0,%zmm4,%zmm4
6223	vbroadcasti32x4	80(%rcx),%zmm0
6224	vaesdec	%zmm0,%zmm1,%zmm1
6225	vaesdec	%zmm0,%zmm2,%zmm2
6226	vaesdec	%zmm0,%zmm3,%zmm3
6227	vaesdec	%zmm0,%zmm4,%zmm4
6228	vbroadcasti32x4	96(%rcx),%zmm0
6229	vaesdec	%zmm0,%zmm1,%zmm1
6230	vaesdec	%zmm0,%zmm2,%zmm2
6231	vaesdec	%zmm0,%zmm3,%zmm3
6232	vaesdec	%zmm0,%zmm4,%zmm4
6233	vpsrldq	$0xf,%zmm15,%zmm13
6234	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
6235	vpslldq	$0x1,%zmm15,%zmm17
6236	vpxord	%zmm14,%zmm17,%zmm17
6237	vbroadcasti32x4	112(%rcx),%zmm0
6238	vaesdec	%zmm0,%zmm1,%zmm1
6239	vaesdec	%zmm0,%zmm2,%zmm2
6240	vaesdec	%zmm0,%zmm3,%zmm3
6241	vaesdec	%zmm0,%zmm4,%zmm4
6242	vbroadcasti32x4	128(%rcx),%zmm0
6243	vaesdec	%zmm0,%zmm1,%zmm1
6244	vaesdec	%zmm0,%zmm2,%zmm2
6245	vaesdec	%zmm0,%zmm3,%zmm3
6246	vaesdec	%zmm0,%zmm4,%zmm4
6247	vbroadcasti32x4	144(%rcx),%zmm0
6248	vaesdec	%zmm0,%zmm1,%zmm1
6249	vaesdec	%zmm0,%zmm2,%zmm2
6250	vaesdec	%zmm0,%zmm3,%zmm3
6251	vaesdec	%zmm0,%zmm4,%zmm4
6252	vpsrldq	$0xf,%zmm16,%zmm13
6253	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
6254	vpslldq	$0x1,%zmm16,%zmm18
6255	vpxord	%zmm14,%zmm18,%zmm18
6256	vbroadcasti32x4	160(%rcx),%zmm0
6257	vaesdec	%zmm0,%zmm1,%zmm1
6258	vaesdec	%zmm0,%zmm2,%zmm2
6259	vaesdec	%zmm0,%zmm3,%zmm3
6260	vaesdec	%zmm0,%zmm4,%zmm4
6261	vbroadcasti32x4	176(%rcx),%zmm0
6262	vaesdec	%zmm0,%zmm1,%zmm1
6263	vaesdec	%zmm0,%zmm2,%zmm2
6264	vaesdec	%zmm0,%zmm3,%zmm3
6265	vaesdec	%zmm0,%zmm4,%zmm4
6266	vbroadcasti32x4	192(%rcx),%zmm0
6267	vaesdec	%zmm0,%zmm1,%zmm1
6268	vaesdec	%zmm0,%zmm2,%zmm2
6269	vaesdec	%zmm0,%zmm3,%zmm3
6270	vaesdec	%zmm0,%zmm4,%zmm4
6271	vbroadcasti32x4	208(%rcx),%zmm0
6272	vaesdec	%zmm0,%zmm1,%zmm1
6273	vaesdec	%zmm0,%zmm2,%zmm2
6274	vaesdec	%zmm0,%zmm3,%zmm3
6275	vaesdec	%zmm0,%zmm4,%zmm4
6276	vbroadcasti32x4	224(%rcx),%zmm0
6277	vaesdeclast	%zmm0,%zmm1,%zmm1
6278	vaesdeclast	%zmm0,%zmm2,%zmm2
6279	vaesdeclast	%zmm0,%zmm3,%zmm3
6280	vaesdeclast	%zmm0,%zmm4,%zmm4
6281	vpxorq	%zmm9,%zmm1,%zmm1
6282	vpxorq	%zmm10,%zmm2,%zmm2
6283	vpxorq	%zmm11,%zmm3,%zmm3
6284	vpxorq	%zmm12,%zmm4,%zmm4
6285
6286	vmovdqa32	%zmm15,%zmm9
6287	vmovdqa32	%zmm16,%zmm10
6288	vmovdqa32	%zmm17,%zmm11
6289	vmovdqa32	%zmm18,%zmm12
6290	vmovdqu8	%zmm1,(%rsi)
6291	vmovdqu8	%zmm2,64(%rsi)
6292	vmovdqu8	%zmm3,128(%rsi)
6293	vmovdqu8	%zmm4,192(%rsi)
6294	addq	$0x100,%rsi
6295	subq	$0x100,%rdx
6296	cmpq	$0x100,%rdx
6297	jge	.L_main_loop_run_16_EmbgEptodyewbFa
6298
6299	cmpq	$0x80,%rdx
6300	jge	.L_main_loop_run_8_EmbgEptodyewbFa
6301	jmp	.L_do_n_blocks_EmbgEptodyewbFa
6302
6303.L_start_by8_EmbgEptodyewbFa:
6304
6305	vbroadcasti32x4	(%rsp),%zmm0
6306	vbroadcasti32x4	shufb_15_7(%rip),%zmm8
6307	movq	$0xaa,%r8
6308	kmovq	%r8,%k2
6309
6310
6311	vpshufb	%zmm8,%zmm0,%zmm1
6312	vpsllvq	const_dq3210(%rip),%zmm0,%zmm4
6313	vpsrlvq	const_dq5678(%rip),%zmm1,%zmm2
6314	vpclmulqdq	$0x0,%zmm25,%zmm2,%zmm3
6315	vpxorq	%zmm2,%zmm4,%zmm4{%k2}
6316	vpxord	%zmm4,%zmm3,%zmm9
6317
6318
6319	vpsllvq	const_dq7654(%rip),%zmm0,%zmm5
6320	vpsrlvq	const_dq1234(%rip),%zmm1,%zmm6
6321	vpclmulqdq	$0x0,%zmm25,%zmm6,%zmm7
6322	vpxorq	%zmm6,%zmm5,%zmm5{%k2}
6323	vpxord	%zmm5,%zmm7,%zmm10
6324
6325.L_main_loop_run_8_EmbgEptodyewbFa:
6326	vmovdqu8	(%rdi),%zmm1
6327	vmovdqu8	64(%rdi),%zmm2
6328	vmovdqu8	112(%rdi),%xmm5
6329	addq	$0x80,%rdi
6330
6331	vpxorq	%zmm9,%zmm1,%zmm1
6332	vpxorq	%zmm10,%zmm2,%zmm2
6333
6334
6335	vbroadcasti32x4	(%rcx),%zmm0
6336	vpxorq	%zmm0,%zmm1,%zmm1
6337	vpxorq	%zmm0,%zmm2,%zmm2
6338	vpsrldq	$0xf,%zmm9,%zmm13
6339	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
6340	vpslldq	$0x1,%zmm9,%zmm15
6341	vpxord	%zmm14,%zmm15,%zmm15
6342	vbroadcasti32x4	16(%rcx),%zmm0
6343	vaesdec	%zmm0,%zmm1,%zmm1
6344	vaesdec	%zmm0,%zmm2,%zmm2
6345
6346
6347	vbroadcasti32x4	32(%rcx),%zmm0
6348	vaesdec	%zmm0,%zmm1,%zmm1
6349	vaesdec	%zmm0,%zmm2,%zmm2
6350
6351
6352	vbroadcasti32x4	48(%rcx),%zmm0
6353	vaesdec	%zmm0,%zmm1,%zmm1
6354	vaesdec	%zmm0,%zmm2,%zmm2
6355	vpsrldq	$0xf,%zmm10,%zmm13
6356	vpclmulqdq	$0x0,%zmm25,%zmm13,%zmm14
6357	vpslldq	$0x1,%zmm10,%zmm16
6358	vpxord	%zmm14,%zmm16,%zmm16
6359
6360	vbroadcasti32x4	64(%rcx),%zmm0
6361	vaesdec	%zmm0,%zmm1,%zmm1
6362	vaesdec	%zmm0,%zmm2,%zmm2
6363
6364
6365	vbroadcasti32x4	80(%rcx),%zmm0
6366	vaesdec	%zmm0,%zmm1,%zmm1
6367	vaesdec	%zmm0,%zmm2,%zmm2
6368
6369
6370	vbroadcasti32x4	96(%rcx),%zmm0
6371	vaesdec	%zmm0,%zmm1,%zmm1
6372	vaesdec	%zmm0,%zmm2,%zmm2
6373
6374
6375	vbroadcasti32x4	112(%rcx),%zmm0
6376	vaesdec	%zmm0,%zmm1,%zmm1
6377	vaesdec	%zmm0,%zmm2,%zmm2
6378
6379
6380	vbroadcasti32x4	128(%rcx),%zmm0
6381	vaesdec	%zmm0,%zmm1,%zmm1
6382	vaesdec	%zmm0,%zmm2,%zmm2
6383
6384
6385	vbroadcasti32x4	144(%rcx),%zmm0
6386	vaesdec	%zmm0,%zmm1,%zmm1
6387	vaesdec	%zmm0,%zmm2,%zmm2
6388
6389
6390	vbroadcasti32x4	160(%rcx),%zmm0
6391	vaesdec	%zmm0,%zmm1,%zmm1
6392	vaesdec	%zmm0,%zmm2,%zmm2
6393
6394
6395	vbroadcasti32x4	176(%rcx),%zmm0
6396	vaesdec	%zmm0,%zmm1,%zmm1
6397	vaesdec	%zmm0,%zmm2,%zmm2
6398
6399
6400	vbroadcasti32x4	192(%rcx),%zmm0
6401	vaesdec	%zmm0,%zmm1,%zmm1
6402	vaesdec	%zmm0,%zmm2,%zmm2
6403
6404
6405	vbroadcasti32x4	208(%rcx),%zmm0
6406	vaesdec	%zmm0,%zmm1,%zmm1
6407	vaesdec	%zmm0,%zmm2,%zmm2
6408
6409
6410	vbroadcasti32x4	224(%rcx),%zmm0
6411	vaesdeclast	%zmm0,%zmm1,%zmm1
6412	vaesdeclast	%zmm0,%zmm2,%zmm2
6413
6414	vpxorq	%zmm9,%zmm1,%zmm1
6415	vpxorq	%zmm10,%zmm2,%zmm2
6416
6417
6418	vmovdqa32	%zmm15,%zmm9
6419	vmovdqa32	%zmm16,%zmm10
6420	vmovdqu8	%zmm1,(%rsi)
6421	vmovdqu8	%zmm2,64(%rsi)
6422	addq	$0x80,%rsi
6423	subq	$0x80,%rdx
6424	cmpq	$0x80,%rdx
6425	jge	.L_main_loop_run_8_EmbgEptodyewbFa
6426	jmp	.L_do_n_blocks_EmbgEptodyewbFa
6427
6428.L_steal_cipher_EmbgEptodyewbFa:
6429
6430	vmovdqa	%xmm8,%xmm2
6431
6432
6433	leaq	vpshufb_shf_table(%rip),%rax
6434	vmovdqu	(%rax,%rdx,1),%xmm10
6435	vpshufb	%xmm10,%xmm8,%xmm8
6436
6437
6438	vmovdqu	-16(%rdi,%rdx,1),%xmm3
6439	vmovdqu	%xmm8,-16(%rsi,%rdx,1)
6440
6441
6442	leaq	vpshufb_shf_table(%rip),%rax
6443	addq	$16,%rax
6444	subq	%rdx,%rax
6445	vmovdqu	(%rax),%xmm10
6446	vpxor	mask1(%rip),%xmm10,%xmm10
6447	vpshufb	%xmm10,%xmm3,%xmm3
6448
6449	vpblendvb	%xmm10,%xmm2,%xmm3,%xmm3
6450
6451
6452	vpxor	%xmm0,%xmm3,%xmm8
6453
6454
6455	vpxor	(%rcx),%xmm8,%xmm8
6456	vaesdec	16(%rcx),%xmm8,%xmm8
6457	vaesdec	32(%rcx),%xmm8,%xmm8
6458	vaesdec	48(%rcx),%xmm8,%xmm8
6459	vaesdec	64(%rcx),%xmm8,%xmm8
6460	vaesdec	80(%rcx),%xmm8,%xmm8
6461	vaesdec	96(%rcx),%xmm8,%xmm8
6462	vaesdec	112(%rcx),%xmm8,%xmm8
6463	vaesdec	128(%rcx),%xmm8,%xmm8
6464	vaesdec	144(%rcx),%xmm8,%xmm8
6465	vaesdec	160(%rcx),%xmm8,%xmm8
6466	vaesdec	176(%rcx),%xmm8,%xmm8
6467	vaesdec	192(%rcx),%xmm8,%xmm8
6468	vaesdec	208(%rcx),%xmm8,%xmm8
6469	vaesdeclast	224(%rcx),%xmm8,%xmm8
6470
6471	vpxor	%xmm0,%xmm8,%xmm8
6472
6473.L_done_EmbgEptodyewbFa:
6474
6475	vmovdqu	%xmm8,-16(%rsi)
6476.L_ret_EmbgEptodyewbFa:
6477	movq	128(%rsp),%rbx
6478	xorq	%r8,%r8
6479	movq	%r8,128(%rsp)
6480
6481	vpxorq	%zmm0,%zmm0,%zmm0
6482	movq	%rbp,%rsp
6483	popq	%rbp
6484	vzeroupper
6485	.byte	0xf3,0xc3
6486
6487.L_less_than_128_bytes_EmbgEptodyewbFa:
6488	cmpq	$0x10,%rdx
6489	jb	.L_ret_EmbgEptodyewbFa
6490
6491	movq	%rdx,%r8
6492	andq	$0x70,%r8
6493	cmpq	$0x60,%r8
6494	je	.L_num_blocks_is_6_EmbgEptodyewbFa
6495	cmpq	$0x50,%r8
6496	je	.L_num_blocks_is_5_EmbgEptodyewbFa
6497	cmpq	$0x40,%r8
6498	je	.L_num_blocks_is_4_EmbgEptodyewbFa
6499	cmpq	$0x30,%r8
6500	je	.L_num_blocks_is_3_EmbgEptodyewbFa
6501	cmpq	$0x20,%r8
6502	je	.L_num_blocks_is_2_EmbgEptodyewbFa
6503	cmpq	$0x10,%r8
6504	je	.L_num_blocks_is_1_EmbgEptodyewbFa
6505
6506.L_num_blocks_is_7_EmbgEptodyewbFa:
6507	vmovdqa	0(%rsp),%xmm9
6508	movq	0(%rsp),%rax
6509	movq	8(%rsp),%rbx
6510	vmovdqu	0(%rdi),%xmm1
6511	xorq	%r11,%r11
6512	shlq	$1,%rax
6513	adcq	%rbx,%rbx
6514	cmovcq	%r10,%r11
6515	xorq	%r11,%rax
6516	movq	%rax,16(%rsp)
6517	movq	%rbx,16 + 8(%rsp)
6518	vmovdqa	16(%rsp),%xmm10
6519	vmovdqu	16(%rdi),%xmm2
6520	xorq	%r11,%r11
6521	shlq	$1,%rax
6522	adcq	%rbx,%rbx
6523	cmovcq	%r10,%r11
6524	xorq	%r11,%rax
6525	movq	%rax,32(%rsp)
6526	movq	%rbx,32 + 8(%rsp)
6527	vmovdqa	32(%rsp),%xmm11
6528	vmovdqu	32(%rdi),%xmm3
6529	xorq	%r11,%r11
6530	shlq	$1,%rax
6531	adcq	%rbx,%rbx
6532	cmovcq	%r10,%r11
6533	xorq	%r11,%rax
6534	movq	%rax,48(%rsp)
6535	movq	%rbx,48 + 8(%rsp)
6536	vmovdqa	48(%rsp),%xmm12
6537	vmovdqu	48(%rdi),%xmm4
6538	xorq	%r11,%r11
6539	shlq	$1,%rax
6540	adcq	%rbx,%rbx
6541	cmovcq	%r10,%r11
6542	xorq	%r11,%rax
6543	movq	%rax,64(%rsp)
6544	movq	%rbx,64 + 8(%rsp)
6545	vmovdqa	64(%rsp),%xmm13
6546	vmovdqu	64(%rdi),%xmm5
6547	xorq	%r11,%r11
6548	shlq	$1,%rax
6549	adcq	%rbx,%rbx
6550	cmovcq	%r10,%r11
6551	xorq	%r11,%rax
6552	movq	%rax,80(%rsp)
6553	movq	%rbx,80 + 8(%rsp)
6554	vmovdqa	80(%rsp),%xmm14
6555	vmovdqu	80(%rdi),%xmm6
6556	xorq	%r11,%r11
6557	shlq	$1,%rax
6558	adcq	%rbx,%rbx
6559	cmovcq	%r10,%r11
6560	xorq	%r11,%rax
6561	movq	%rax,96(%rsp)
6562	movq	%rbx,96 + 8(%rsp)
6563	vmovdqa	96(%rsp),%xmm15
6564	vmovdqu	96(%rdi),%xmm7
6565	addq	$0x70,%rdi
6566	andq	$0xf,%rdx
6567	je	.L_done_7_EmbgEptodyewbFa
6568
6569.L_steal_cipher_7_EmbgEptodyewbFa:
6570	xorq	%r11,%r11
6571	shlq	$1,%rax
6572	adcq	%rbx,%rbx
6573	cmovcq	%r10,%r11
6574	xorq	%r11,%rax
6575	movq	%rax,16(%rsp)
6576	movq	%rbx,24(%rsp)
6577	vmovdqa64	%xmm15,%xmm16
6578	vmovdqa	16(%rsp),%xmm15
6579	vpxor	%xmm9,%xmm1,%xmm1
6580	vpxor	%xmm10,%xmm2,%xmm2
6581	vpxor	%xmm11,%xmm3,%xmm3
6582	vpxor	%xmm12,%xmm4,%xmm4
6583	vpxor	%xmm13,%xmm5,%xmm5
6584	vpxor	%xmm14,%xmm6,%xmm6
6585	vpxor	%xmm15,%xmm7,%xmm7
6586	vmovdqu	(%rcx),%xmm0
6587	vpxor	%xmm0,%xmm1,%xmm1
6588	vpxor	%xmm0,%xmm2,%xmm2
6589	vpxor	%xmm0,%xmm3,%xmm3
6590	vpxor	%xmm0,%xmm4,%xmm4
6591	vpxor	%xmm0,%xmm5,%xmm5
6592	vpxor	%xmm0,%xmm6,%xmm6
6593	vpxor	%xmm0,%xmm7,%xmm7
6594	vmovdqu	16(%rcx),%xmm0
6595	vaesdec	%xmm0,%xmm1,%xmm1
6596	vaesdec	%xmm0,%xmm2,%xmm2
6597	vaesdec	%xmm0,%xmm3,%xmm3
6598	vaesdec	%xmm0,%xmm4,%xmm4
6599	vaesdec	%xmm0,%xmm5,%xmm5
6600	vaesdec	%xmm0,%xmm6,%xmm6
6601	vaesdec	%xmm0,%xmm7,%xmm7
6602	vmovdqu	32(%rcx),%xmm0
6603	vaesdec	%xmm0,%xmm1,%xmm1
6604	vaesdec	%xmm0,%xmm2,%xmm2
6605	vaesdec	%xmm0,%xmm3,%xmm3
6606	vaesdec	%xmm0,%xmm4,%xmm4
6607	vaesdec	%xmm0,%xmm5,%xmm5
6608	vaesdec	%xmm0,%xmm6,%xmm6
6609	vaesdec	%xmm0,%xmm7,%xmm7
6610	vmovdqu	48(%rcx),%xmm0
6611	vaesdec	%xmm0,%xmm1,%xmm1
6612	vaesdec	%xmm0,%xmm2,%xmm2
6613	vaesdec	%xmm0,%xmm3,%xmm3
6614	vaesdec	%xmm0,%xmm4,%xmm4
6615	vaesdec	%xmm0,%xmm5,%xmm5
6616	vaesdec	%xmm0,%xmm6,%xmm6
6617	vaesdec	%xmm0,%xmm7,%xmm7
6618	vmovdqu	64(%rcx),%xmm0
6619	vaesdec	%xmm0,%xmm1,%xmm1
6620	vaesdec	%xmm0,%xmm2,%xmm2
6621	vaesdec	%xmm0,%xmm3,%xmm3
6622	vaesdec	%xmm0,%xmm4,%xmm4
6623	vaesdec	%xmm0,%xmm5,%xmm5
6624	vaesdec	%xmm0,%xmm6,%xmm6
6625	vaesdec	%xmm0,%xmm7,%xmm7
6626	vmovdqu	80(%rcx),%xmm0
6627	vaesdec	%xmm0,%xmm1,%xmm1
6628	vaesdec	%xmm0,%xmm2,%xmm2
6629	vaesdec	%xmm0,%xmm3,%xmm3
6630	vaesdec	%xmm0,%xmm4,%xmm4
6631	vaesdec	%xmm0,%xmm5,%xmm5
6632	vaesdec	%xmm0,%xmm6,%xmm6
6633	vaesdec	%xmm0,%xmm7,%xmm7
6634	vmovdqu	96(%rcx),%xmm0
6635	vaesdec	%xmm0,%xmm1,%xmm1
6636	vaesdec	%xmm0,%xmm2,%xmm2
6637	vaesdec	%xmm0,%xmm3,%xmm3
6638	vaesdec	%xmm0,%xmm4,%xmm4
6639	vaesdec	%xmm0,%xmm5,%xmm5
6640	vaesdec	%xmm0,%xmm6,%xmm6
6641	vaesdec	%xmm0,%xmm7,%xmm7
6642	vmovdqu	112(%rcx),%xmm0
6643	vaesdec	%xmm0,%xmm1,%xmm1
6644	vaesdec	%xmm0,%xmm2,%xmm2
6645	vaesdec	%xmm0,%xmm3,%xmm3
6646	vaesdec	%xmm0,%xmm4,%xmm4
6647	vaesdec	%xmm0,%xmm5,%xmm5
6648	vaesdec	%xmm0,%xmm6,%xmm6
6649	vaesdec	%xmm0,%xmm7,%xmm7
6650	vmovdqu	128(%rcx),%xmm0
6651	vaesdec	%xmm0,%xmm1,%xmm1
6652	vaesdec	%xmm0,%xmm2,%xmm2
6653	vaesdec	%xmm0,%xmm3,%xmm3
6654	vaesdec	%xmm0,%xmm4,%xmm4
6655	vaesdec	%xmm0,%xmm5,%xmm5
6656	vaesdec	%xmm0,%xmm6,%xmm6
6657	vaesdec	%xmm0,%xmm7,%xmm7
6658	vmovdqu	144(%rcx),%xmm0
6659	vaesdec	%xmm0,%xmm1,%xmm1
6660	vaesdec	%xmm0,%xmm2,%xmm2
6661	vaesdec	%xmm0,%xmm3,%xmm3
6662	vaesdec	%xmm0,%xmm4,%xmm4
6663	vaesdec	%xmm0,%xmm5,%xmm5
6664	vaesdec	%xmm0,%xmm6,%xmm6
6665	vaesdec	%xmm0,%xmm7,%xmm7
6666	vmovdqu	160(%rcx),%xmm0
6667	vaesdec	%xmm0,%xmm1,%xmm1
6668	vaesdec	%xmm0,%xmm2,%xmm2
6669	vaesdec	%xmm0,%xmm3,%xmm3
6670	vaesdec	%xmm0,%xmm4,%xmm4
6671	vaesdec	%xmm0,%xmm5,%xmm5
6672	vaesdec	%xmm0,%xmm6,%xmm6
6673	vaesdec	%xmm0,%xmm7,%xmm7
6674	vmovdqu	176(%rcx),%xmm0
6675	vaesdec	%xmm0,%xmm1,%xmm1
6676	vaesdec	%xmm0,%xmm2,%xmm2
6677	vaesdec	%xmm0,%xmm3,%xmm3
6678	vaesdec	%xmm0,%xmm4,%xmm4
6679	vaesdec	%xmm0,%xmm5,%xmm5
6680	vaesdec	%xmm0,%xmm6,%xmm6
6681	vaesdec	%xmm0,%xmm7,%xmm7
6682	vmovdqu	192(%rcx),%xmm0
6683	vaesdec	%xmm0,%xmm1,%xmm1
6684	vaesdec	%xmm0,%xmm2,%xmm2
6685	vaesdec	%xmm0,%xmm3,%xmm3
6686	vaesdec	%xmm0,%xmm4,%xmm4
6687	vaesdec	%xmm0,%xmm5,%xmm5
6688	vaesdec	%xmm0,%xmm6,%xmm6
6689	vaesdec	%xmm0,%xmm7,%xmm7
6690	vmovdqu	208(%rcx),%xmm0
6691	vaesdec	%xmm0,%xmm1,%xmm1
6692	vaesdec	%xmm0,%xmm2,%xmm2
6693	vaesdec	%xmm0,%xmm3,%xmm3
6694	vaesdec	%xmm0,%xmm4,%xmm4
6695	vaesdec	%xmm0,%xmm5,%xmm5
6696	vaesdec	%xmm0,%xmm6,%xmm6
6697	vaesdec	%xmm0,%xmm7,%xmm7
6698	vmovdqu	224(%rcx),%xmm0
6699	vaesdeclast	%xmm0,%xmm1,%xmm1
6700	vaesdeclast	%xmm0,%xmm2,%xmm2
6701	vaesdeclast	%xmm0,%xmm3,%xmm3
6702	vaesdeclast	%xmm0,%xmm4,%xmm4
6703	vaesdeclast	%xmm0,%xmm5,%xmm5
6704	vaesdeclast	%xmm0,%xmm6,%xmm6
6705	vaesdeclast	%xmm0,%xmm7,%xmm7
6706	vpxor	%xmm9,%xmm1,%xmm1
6707	vpxor	%xmm10,%xmm2,%xmm2
6708	vpxor	%xmm11,%xmm3,%xmm3
6709	vpxor	%xmm12,%xmm4,%xmm4
6710	vpxor	%xmm13,%xmm5,%xmm5
6711	vpxor	%xmm14,%xmm6,%xmm6
6712	vpxor	%xmm15,%xmm7,%xmm7
6713	vmovdqu	%xmm1,(%rsi)
6714	vmovdqu	%xmm2,16(%rsi)
6715	vmovdqu	%xmm3,32(%rsi)
6716	vmovdqu	%xmm4,48(%rsi)
6717	vmovdqu	%xmm5,64(%rsi)
6718	vmovdqu	%xmm6,80(%rsi)
6719	addq	$0x70,%rsi
6720	vmovdqa64	%xmm16,%xmm0
6721	vmovdqa	%xmm7,%xmm8
6722	jmp	.L_steal_cipher_EmbgEptodyewbFa
6723
6724.L_done_7_EmbgEptodyewbFa:
6725	vpxor	%xmm9,%xmm1,%xmm1
6726	vpxor	%xmm10,%xmm2,%xmm2
6727	vpxor	%xmm11,%xmm3,%xmm3
6728	vpxor	%xmm12,%xmm4,%xmm4
6729	vpxor	%xmm13,%xmm5,%xmm5
6730	vpxor	%xmm14,%xmm6,%xmm6
6731	vpxor	%xmm15,%xmm7,%xmm7
6732	vmovdqu	(%rcx),%xmm0
6733	vpxor	%xmm0,%xmm1,%xmm1
6734	vpxor	%xmm0,%xmm2,%xmm2
6735	vpxor	%xmm0,%xmm3,%xmm3
6736	vpxor	%xmm0,%xmm4,%xmm4
6737	vpxor	%xmm0,%xmm5,%xmm5
6738	vpxor	%xmm0,%xmm6,%xmm6
6739	vpxor	%xmm0,%xmm7,%xmm7
6740	vmovdqu	16(%rcx),%xmm0
6741	vaesdec	%xmm0,%xmm1,%xmm1
6742	vaesdec	%xmm0,%xmm2,%xmm2
6743	vaesdec	%xmm0,%xmm3,%xmm3
6744	vaesdec	%xmm0,%xmm4,%xmm4
6745	vaesdec	%xmm0,%xmm5,%xmm5
6746	vaesdec	%xmm0,%xmm6,%xmm6
6747	vaesdec	%xmm0,%xmm7,%xmm7
6748	vmovdqu	32(%rcx),%xmm0
6749	vaesdec	%xmm0,%xmm1,%xmm1
6750	vaesdec	%xmm0,%xmm2,%xmm2
6751	vaesdec	%xmm0,%xmm3,%xmm3
6752	vaesdec	%xmm0,%xmm4,%xmm4
6753	vaesdec	%xmm0,%xmm5,%xmm5
6754	vaesdec	%xmm0,%xmm6,%xmm6
6755	vaesdec	%xmm0,%xmm7,%xmm7
6756	vmovdqu	48(%rcx),%xmm0
6757	vaesdec	%xmm0,%xmm1,%xmm1
6758	vaesdec	%xmm0,%xmm2,%xmm2
6759	vaesdec	%xmm0,%xmm3,%xmm3
6760	vaesdec	%xmm0,%xmm4,%xmm4
6761	vaesdec	%xmm0,%xmm5,%xmm5
6762	vaesdec	%xmm0,%xmm6,%xmm6
6763	vaesdec	%xmm0,%xmm7,%xmm7
6764	vmovdqu	64(%rcx),%xmm0
6765	vaesdec	%xmm0,%xmm1,%xmm1
6766	vaesdec	%xmm0,%xmm2,%xmm2
6767	vaesdec	%xmm0,%xmm3,%xmm3
6768	vaesdec	%xmm0,%xmm4,%xmm4
6769	vaesdec	%xmm0,%xmm5,%xmm5
6770	vaesdec	%xmm0,%xmm6,%xmm6
6771	vaesdec	%xmm0,%xmm7,%xmm7
6772	vmovdqu	80(%rcx),%xmm0
6773	vaesdec	%xmm0,%xmm1,%xmm1
6774	vaesdec	%xmm0,%xmm2,%xmm2
6775	vaesdec	%xmm0,%xmm3,%xmm3
6776	vaesdec	%xmm0,%xmm4,%xmm4
6777	vaesdec	%xmm0,%xmm5,%xmm5
6778	vaesdec	%xmm0,%xmm6,%xmm6
6779	vaesdec	%xmm0,%xmm7,%xmm7
6780	vmovdqu	96(%rcx),%xmm0
6781	vaesdec	%xmm0,%xmm1,%xmm1
6782	vaesdec	%xmm0,%xmm2,%xmm2
6783	vaesdec	%xmm0,%xmm3,%xmm3
6784	vaesdec	%xmm0,%xmm4,%xmm4
6785	vaesdec	%xmm0,%xmm5,%xmm5
6786	vaesdec	%xmm0,%xmm6,%xmm6
6787	vaesdec	%xmm0,%xmm7,%xmm7
6788	vmovdqu	112(%rcx),%xmm0
6789	vaesdec	%xmm0,%xmm1,%xmm1
6790	vaesdec	%xmm0,%xmm2,%xmm2
6791	vaesdec	%xmm0,%xmm3,%xmm3
6792	vaesdec	%xmm0,%xmm4,%xmm4
6793	vaesdec	%xmm0,%xmm5,%xmm5
6794	vaesdec	%xmm0,%xmm6,%xmm6
6795	vaesdec	%xmm0,%xmm7,%xmm7
6796	vmovdqu	128(%rcx),%xmm0
6797	vaesdec	%xmm0,%xmm1,%xmm1
6798	vaesdec	%xmm0,%xmm2,%xmm2
6799	vaesdec	%xmm0,%xmm3,%xmm3
6800	vaesdec	%xmm0,%xmm4,%xmm4
6801	vaesdec	%xmm0,%xmm5,%xmm5
6802	vaesdec	%xmm0,%xmm6,%xmm6
6803	vaesdec	%xmm0,%xmm7,%xmm7
6804	vmovdqu	144(%rcx),%xmm0
6805	vaesdec	%xmm0,%xmm1,%xmm1
6806	vaesdec	%xmm0,%xmm2,%xmm2
6807	vaesdec	%xmm0,%xmm3,%xmm3
6808	vaesdec	%xmm0,%xmm4,%xmm4
6809	vaesdec	%xmm0,%xmm5,%xmm5
6810	vaesdec	%xmm0,%xmm6,%xmm6
6811	vaesdec	%xmm0,%xmm7,%xmm7
6812	vmovdqu	160(%rcx),%xmm0
6813	vaesdec	%xmm0,%xmm1,%xmm1
6814	vaesdec	%xmm0,%xmm2,%xmm2
6815	vaesdec	%xmm0,%xmm3,%xmm3
6816	vaesdec	%xmm0,%xmm4,%xmm4
6817	vaesdec	%xmm0,%xmm5,%xmm5
6818	vaesdec	%xmm0,%xmm6,%xmm6
6819	vaesdec	%xmm0,%xmm7,%xmm7
6820	vmovdqu	176(%rcx),%xmm0
6821	vaesdec	%xmm0,%xmm1,%xmm1
6822	vaesdec	%xmm0,%xmm2,%xmm2
6823	vaesdec	%xmm0,%xmm3,%xmm3
6824	vaesdec	%xmm0,%xmm4,%xmm4
6825	vaesdec	%xmm0,%xmm5,%xmm5
6826	vaesdec	%xmm0,%xmm6,%xmm6
6827	vaesdec	%xmm0,%xmm7,%xmm7
6828	vmovdqu	192(%rcx),%xmm0
6829	vaesdec	%xmm0,%xmm1,%xmm1
6830	vaesdec	%xmm0,%xmm2,%xmm2
6831	vaesdec	%xmm0,%xmm3,%xmm3
6832	vaesdec	%xmm0,%xmm4,%xmm4
6833	vaesdec	%xmm0,%xmm5,%xmm5
6834	vaesdec	%xmm0,%xmm6,%xmm6
6835	vaesdec	%xmm0,%xmm7,%xmm7
6836	vmovdqu	208(%rcx),%xmm0
6837	vaesdec	%xmm0,%xmm1,%xmm1
6838	vaesdec	%xmm0,%xmm2,%xmm2
6839	vaesdec	%xmm0,%xmm3,%xmm3
6840	vaesdec	%xmm0,%xmm4,%xmm4
6841	vaesdec	%xmm0,%xmm5,%xmm5
6842	vaesdec	%xmm0,%xmm6,%xmm6
6843	vaesdec	%xmm0,%xmm7,%xmm7
6844	vmovdqu	224(%rcx),%xmm0
6845	vaesdeclast	%xmm0,%xmm1,%xmm1
6846	vaesdeclast	%xmm0,%xmm2,%xmm2
6847	vaesdeclast	%xmm0,%xmm3,%xmm3
6848	vaesdeclast	%xmm0,%xmm4,%xmm4
6849	vaesdeclast	%xmm0,%xmm5,%xmm5
6850	vaesdeclast	%xmm0,%xmm6,%xmm6
6851	vaesdeclast	%xmm0,%xmm7,%xmm7
6852	vpxor	%xmm9,%xmm1,%xmm1
6853	vpxor	%xmm10,%xmm2,%xmm2
6854	vpxor	%xmm11,%xmm3,%xmm3
6855	vpxor	%xmm12,%xmm4,%xmm4
6856	vpxor	%xmm13,%xmm5,%xmm5
6857	vpxor	%xmm14,%xmm6,%xmm6
6858	vpxor	%xmm15,%xmm7,%xmm7
6859	vmovdqu	%xmm1,(%rsi)
6860	vmovdqu	%xmm2,16(%rsi)
6861	vmovdqu	%xmm3,32(%rsi)
6862	vmovdqu	%xmm4,48(%rsi)
6863	vmovdqu	%xmm5,64(%rsi)
6864	vmovdqu	%xmm6,80(%rsi)
6865	addq	$0x70,%rsi
6866	vmovdqa	%xmm7,%xmm8
6867	jmp	.L_done_EmbgEptodyewbFa
6868
6869.L_num_blocks_is_6_EmbgEptodyewbFa:
6870	vmovdqa	0(%rsp),%xmm9
6871	movq	0(%rsp),%rax
6872	movq	8(%rsp),%rbx
6873	vmovdqu	0(%rdi),%xmm1
6874	xorq	%r11,%r11
6875	shlq	$1,%rax
6876	adcq	%rbx,%rbx
6877	cmovcq	%r10,%r11
6878	xorq	%r11,%rax
6879	movq	%rax,16(%rsp)
6880	movq	%rbx,16 + 8(%rsp)
6881	vmovdqa	16(%rsp),%xmm10
6882	vmovdqu	16(%rdi),%xmm2
6883	xorq	%r11,%r11
6884	shlq	$1,%rax
6885	adcq	%rbx,%rbx
6886	cmovcq	%r10,%r11
6887	xorq	%r11,%rax
6888	movq	%rax,32(%rsp)
6889	movq	%rbx,32 + 8(%rsp)
6890	vmovdqa	32(%rsp),%xmm11
6891	vmovdqu	32(%rdi),%xmm3
6892	xorq	%r11,%r11
6893	shlq	$1,%rax
6894	adcq	%rbx,%rbx
6895	cmovcq	%r10,%r11
6896	xorq	%r11,%rax
6897	movq	%rax,48(%rsp)
6898	movq	%rbx,48 + 8(%rsp)
6899	vmovdqa	48(%rsp),%xmm12
6900	vmovdqu	48(%rdi),%xmm4
6901	xorq	%r11,%r11
6902	shlq	$1,%rax
6903	adcq	%rbx,%rbx
6904	cmovcq	%r10,%r11
6905	xorq	%r11,%rax
6906	movq	%rax,64(%rsp)
6907	movq	%rbx,64 + 8(%rsp)
6908	vmovdqa	64(%rsp),%xmm13
6909	vmovdqu	64(%rdi),%xmm5
6910	xorq	%r11,%r11
6911	shlq	$1,%rax
6912	adcq	%rbx,%rbx
6913	cmovcq	%r10,%r11
6914	xorq	%r11,%rax
6915	movq	%rax,80(%rsp)
6916	movq	%rbx,80 + 8(%rsp)
6917	vmovdqa	80(%rsp),%xmm14
6918	vmovdqu	80(%rdi),%xmm6
6919	addq	$0x60,%rdi
6920	andq	$0xf,%rdx
6921	je	.L_done_6_EmbgEptodyewbFa
6922
6923.L_steal_cipher_6_EmbgEptodyewbFa:
6924	xorq	%r11,%r11
6925	shlq	$1,%rax
6926	adcq	%rbx,%rbx
6927	cmovcq	%r10,%r11
6928	xorq	%r11,%rax
6929	movq	%rax,16(%rsp)
6930	movq	%rbx,24(%rsp)
6931	vmovdqa64	%xmm14,%xmm15
6932	vmovdqa	16(%rsp),%xmm14
6933	vpxor	%xmm9,%xmm1,%xmm1
6934	vpxor	%xmm10,%xmm2,%xmm2
6935	vpxor	%xmm11,%xmm3,%xmm3
6936	vpxor	%xmm12,%xmm4,%xmm4
6937	vpxor	%xmm13,%xmm5,%xmm5
6938	vpxor	%xmm14,%xmm6,%xmm6
6939	vmovdqu	(%rcx),%xmm0
6940	vpxor	%xmm0,%xmm1,%xmm1
6941	vpxor	%xmm0,%xmm2,%xmm2
6942	vpxor	%xmm0,%xmm3,%xmm3
6943	vpxor	%xmm0,%xmm4,%xmm4
6944	vpxor	%xmm0,%xmm5,%xmm5
6945	vpxor	%xmm0,%xmm6,%xmm6
6946	vmovdqu	16(%rcx),%xmm0
6947	vaesdec	%xmm0,%xmm1,%xmm1
6948	vaesdec	%xmm0,%xmm2,%xmm2
6949	vaesdec	%xmm0,%xmm3,%xmm3
6950	vaesdec	%xmm0,%xmm4,%xmm4
6951	vaesdec	%xmm0,%xmm5,%xmm5
6952	vaesdec	%xmm0,%xmm6,%xmm6
6953	vmovdqu	32(%rcx),%xmm0
6954	vaesdec	%xmm0,%xmm1,%xmm1
6955	vaesdec	%xmm0,%xmm2,%xmm2
6956	vaesdec	%xmm0,%xmm3,%xmm3
6957	vaesdec	%xmm0,%xmm4,%xmm4
6958	vaesdec	%xmm0,%xmm5,%xmm5
6959	vaesdec	%xmm0,%xmm6,%xmm6
6960	vmovdqu	48(%rcx),%xmm0
6961	vaesdec	%xmm0,%xmm1,%xmm1
6962	vaesdec	%xmm0,%xmm2,%xmm2
6963	vaesdec	%xmm0,%xmm3,%xmm3
6964	vaesdec	%xmm0,%xmm4,%xmm4
6965	vaesdec	%xmm0,%xmm5,%xmm5
6966	vaesdec	%xmm0,%xmm6,%xmm6
6967	vmovdqu	64(%rcx),%xmm0
6968	vaesdec	%xmm0,%xmm1,%xmm1
6969	vaesdec	%xmm0,%xmm2,%xmm2
6970	vaesdec	%xmm0,%xmm3,%xmm3
6971	vaesdec	%xmm0,%xmm4,%xmm4
6972	vaesdec	%xmm0,%xmm5,%xmm5
6973	vaesdec	%xmm0,%xmm6,%xmm6
6974	vmovdqu	80(%rcx),%xmm0
6975	vaesdec	%xmm0,%xmm1,%xmm1
6976	vaesdec	%xmm0,%xmm2,%xmm2
6977	vaesdec	%xmm0,%xmm3,%xmm3
6978	vaesdec	%xmm0,%xmm4,%xmm4
6979	vaesdec	%xmm0,%xmm5,%xmm5
6980	vaesdec	%xmm0,%xmm6,%xmm6
6981	vmovdqu	96(%rcx),%xmm0
6982	vaesdec	%xmm0,%xmm1,%xmm1
6983	vaesdec	%xmm0,%xmm2,%xmm2
6984	vaesdec	%xmm0,%xmm3,%xmm3
6985	vaesdec	%xmm0,%xmm4,%xmm4
6986	vaesdec	%xmm0,%xmm5,%xmm5
6987	vaesdec	%xmm0,%xmm6,%xmm6
6988	vmovdqu	112(%rcx),%xmm0
6989	vaesdec	%xmm0,%xmm1,%xmm1
6990	vaesdec	%xmm0,%xmm2,%xmm2
6991	vaesdec	%xmm0,%xmm3,%xmm3
6992	vaesdec	%xmm0,%xmm4,%xmm4
6993	vaesdec	%xmm0,%xmm5,%xmm5
6994	vaesdec	%xmm0,%xmm6,%xmm6
6995	vmovdqu	128(%rcx),%xmm0
6996	vaesdec	%xmm0,%xmm1,%xmm1
6997	vaesdec	%xmm0,%xmm2,%xmm2
6998	vaesdec	%xmm0,%xmm3,%xmm3
6999	vaesdec	%xmm0,%xmm4,%xmm4
7000	vaesdec	%xmm0,%xmm5,%xmm5
7001	vaesdec	%xmm0,%xmm6,%xmm6
7002	vmovdqu	144(%rcx),%xmm0
7003	vaesdec	%xmm0,%xmm1,%xmm1
7004	vaesdec	%xmm0,%xmm2,%xmm2
7005	vaesdec	%xmm0,%xmm3,%xmm3
7006	vaesdec	%xmm0,%xmm4,%xmm4
7007	vaesdec	%xmm0,%xmm5,%xmm5
7008	vaesdec	%xmm0,%xmm6,%xmm6
7009	vmovdqu	160(%rcx),%xmm0
7010	vaesdec	%xmm0,%xmm1,%xmm1
7011	vaesdec	%xmm0,%xmm2,%xmm2
7012	vaesdec	%xmm0,%xmm3,%xmm3
7013	vaesdec	%xmm0,%xmm4,%xmm4
7014	vaesdec	%xmm0,%xmm5,%xmm5
7015	vaesdec	%xmm0,%xmm6,%xmm6
7016	vmovdqu	176(%rcx),%xmm0
7017	vaesdec	%xmm0,%xmm1,%xmm1
7018	vaesdec	%xmm0,%xmm2,%xmm2
7019	vaesdec	%xmm0,%xmm3,%xmm3
7020	vaesdec	%xmm0,%xmm4,%xmm4
7021	vaesdec	%xmm0,%xmm5,%xmm5
7022	vaesdec	%xmm0,%xmm6,%xmm6
7023	vmovdqu	192(%rcx),%xmm0
7024	vaesdec	%xmm0,%xmm1,%xmm1
7025	vaesdec	%xmm0,%xmm2,%xmm2
7026	vaesdec	%xmm0,%xmm3,%xmm3
7027	vaesdec	%xmm0,%xmm4,%xmm4
7028	vaesdec	%xmm0,%xmm5,%xmm5
7029	vaesdec	%xmm0,%xmm6,%xmm6
7030	vmovdqu	208(%rcx),%xmm0
7031	vaesdec	%xmm0,%xmm1,%xmm1
7032	vaesdec	%xmm0,%xmm2,%xmm2
7033	vaesdec	%xmm0,%xmm3,%xmm3
7034	vaesdec	%xmm0,%xmm4,%xmm4
7035	vaesdec	%xmm0,%xmm5,%xmm5
7036	vaesdec	%xmm0,%xmm6,%xmm6
7037	vmovdqu	224(%rcx),%xmm0
7038	vaesdeclast	%xmm0,%xmm1,%xmm1
7039	vaesdeclast	%xmm0,%xmm2,%xmm2
7040	vaesdeclast	%xmm0,%xmm3,%xmm3
7041	vaesdeclast	%xmm0,%xmm4,%xmm4
7042	vaesdeclast	%xmm0,%xmm5,%xmm5
7043	vaesdeclast	%xmm0,%xmm6,%xmm6
7044	vpxor	%xmm9,%xmm1,%xmm1
7045	vpxor	%xmm10,%xmm2,%xmm2
7046	vpxor	%xmm11,%xmm3,%xmm3
7047	vpxor	%xmm12,%xmm4,%xmm4
7048	vpxor	%xmm13,%xmm5,%xmm5
7049	vpxor	%xmm14,%xmm6,%xmm6
7050	vmovdqu	%xmm1,(%rsi)
7051	vmovdqu	%xmm2,16(%rsi)
7052	vmovdqu	%xmm3,32(%rsi)
7053	vmovdqu	%xmm4,48(%rsi)
7054	vmovdqu	%xmm5,64(%rsi)
7055	addq	$0x60,%rsi
7056	vmovdqa	%xmm15,%xmm0
7057	vmovdqa	%xmm6,%xmm8
7058	jmp	.L_steal_cipher_EmbgEptodyewbFa
7059
7060.L_done_6_EmbgEptodyewbFa:
7061	vpxor	%xmm9,%xmm1,%xmm1
7062	vpxor	%xmm10,%xmm2,%xmm2
7063	vpxor	%xmm11,%xmm3,%xmm3
7064	vpxor	%xmm12,%xmm4,%xmm4
7065	vpxor	%xmm13,%xmm5,%xmm5
7066	vpxor	%xmm14,%xmm6,%xmm6
7067	vmovdqu	(%rcx),%xmm0
7068	vpxor	%xmm0,%xmm1,%xmm1
7069	vpxor	%xmm0,%xmm2,%xmm2
7070	vpxor	%xmm0,%xmm3,%xmm3
7071	vpxor	%xmm0,%xmm4,%xmm4
7072	vpxor	%xmm0,%xmm5,%xmm5
7073	vpxor	%xmm0,%xmm6,%xmm6
7074	vmovdqu	16(%rcx),%xmm0
7075	vaesdec	%xmm0,%xmm1,%xmm1
7076	vaesdec	%xmm0,%xmm2,%xmm2
7077	vaesdec	%xmm0,%xmm3,%xmm3
7078	vaesdec	%xmm0,%xmm4,%xmm4
7079	vaesdec	%xmm0,%xmm5,%xmm5
7080	vaesdec	%xmm0,%xmm6,%xmm6
7081	vmovdqu	32(%rcx),%xmm0
7082	vaesdec	%xmm0,%xmm1,%xmm1
7083	vaesdec	%xmm0,%xmm2,%xmm2
7084	vaesdec	%xmm0,%xmm3,%xmm3
7085	vaesdec	%xmm0,%xmm4,%xmm4
7086	vaesdec	%xmm0,%xmm5,%xmm5
7087	vaesdec	%xmm0,%xmm6,%xmm6
7088	vmovdqu	48(%rcx),%xmm0
7089	vaesdec	%xmm0,%xmm1,%xmm1
7090	vaesdec	%xmm0,%xmm2,%xmm2
7091	vaesdec	%xmm0,%xmm3,%xmm3
7092	vaesdec	%xmm0,%xmm4,%xmm4
7093	vaesdec	%xmm0,%xmm5,%xmm5
7094	vaesdec	%xmm0,%xmm6,%xmm6
7095	vmovdqu	64(%rcx),%xmm0
7096	vaesdec	%xmm0,%xmm1,%xmm1
7097	vaesdec	%xmm0,%xmm2,%xmm2
7098	vaesdec	%xmm0,%xmm3,%xmm3
7099	vaesdec	%xmm0,%xmm4,%xmm4
7100	vaesdec	%xmm0,%xmm5,%xmm5
7101	vaesdec	%xmm0,%xmm6,%xmm6
7102	vmovdqu	80(%rcx),%xmm0
7103	vaesdec	%xmm0,%xmm1,%xmm1
7104	vaesdec	%xmm0,%xmm2,%xmm2
7105	vaesdec	%xmm0,%xmm3,%xmm3
7106	vaesdec	%xmm0,%xmm4,%xmm4
7107	vaesdec	%xmm0,%xmm5,%xmm5
7108	vaesdec	%xmm0,%xmm6,%xmm6
7109	vmovdqu	96(%rcx),%xmm0
7110	vaesdec	%xmm0,%xmm1,%xmm1
7111	vaesdec	%xmm0,%xmm2,%xmm2
7112	vaesdec	%xmm0,%xmm3,%xmm3
7113	vaesdec	%xmm0,%xmm4,%xmm4
7114	vaesdec	%xmm0,%xmm5,%xmm5
7115	vaesdec	%xmm0,%xmm6,%xmm6
7116	vmovdqu	112(%rcx),%xmm0
7117	vaesdec	%xmm0,%xmm1,%xmm1
7118	vaesdec	%xmm0,%xmm2,%xmm2
7119	vaesdec	%xmm0,%xmm3,%xmm3
7120	vaesdec	%xmm0,%xmm4,%xmm4
7121	vaesdec	%xmm0,%xmm5,%xmm5
7122	vaesdec	%xmm0,%xmm6,%xmm6
7123	vmovdqu	128(%rcx),%xmm0
7124	vaesdec	%xmm0,%xmm1,%xmm1
7125	vaesdec	%xmm0,%xmm2,%xmm2
7126	vaesdec	%xmm0,%xmm3,%xmm3
7127	vaesdec	%xmm0,%xmm4,%xmm4
7128	vaesdec	%xmm0,%xmm5,%xmm5
7129	vaesdec	%xmm0,%xmm6,%xmm6
7130	vmovdqu	144(%rcx),%xmm0
7131	vaesdec	%xmm0,%xmm1,%xmm1
7132	vaesdec	%xmm0,%xmm2,%xmm2
7133	vaesdec	%xmm0,%xmm3,%xmm3
7134	vaesdec	%xmm0,%xmm4,%xmm4
7135	vaesdec	%xmm0,%xmm5,%xmm5
7136	vaesdec	%xmm0,%xmm6,%xmm6
7137	vmovdqu	160(%rcx),%xmm0
7138	vaesdec	%xmm0,%xmm1,%xmm1
7139	vaesdec	%xmm0,%xmm2,%xmm2
7140	vaesdec	%xmm0,%xmm3,%xmm3
7141	vaesdec	%xmm0,%xmm4,%xmm4
7142	vaesdec	%xmm0,%xmm5,%xmm5
7143	vaesdec	%xmm0,%xmm6,%xmm6
7144	vmovdqu	176(%rcx),%xmm0
7145	vaesdec	%xmm0,%xmm1,%xmm1
7146	vaesdec	%xmm0,%xmm2,%xmm2
7147	vaesdec	%xmm0,%xmm3,%xmm3
7148	vaesdec	%xmm0,%xmm4,%xmm4
7149	vaesdec	%xmm0,%xmm5,%xmm5
7150	vaesdec	%xmm0,%xmm6,%xmm6
7151	vmovdqu	192(%rcx),%xmm0
7152	vaesdec	%xmm0,%xmm1,%xmm1
7153	vaesdec	%xmm0,%xmm2,%xmm2
7154	vaesdec	%xmm0,%xmm3,%xmm3
7155	vaesdec	%xmm0,%xmm4,%xmm4
7156	vaesdec	%xmm0,%xmm5,%xmm5
7157	vaesdec	%xmm0,%xmm6,%xmm6
7158	vmovdqu	208(%rcx),%xmm0
7159	vaesdec	%xmm0,%xmm1,%xmm1
7160	vaesdec	%xmm0,%xmm2,%xmm2
7161	vaesdec	%xmm0,%xmm3,%xmm3
7162	vaesdec	%xmm0,%xmm4,%xmm4
7163	vaesdec	%xmm0,%xmm5,%xmm5
7164	vaesdec	%xmm0,%xmm6,%xmm6
7165	vmovdqu	224(%rcx),%xmm0
7166	vaesdeclast	%xmm0,%xmm1,%xmm1
7167	vaesdeclast	%xmm0,%xmm2,%xmm2
7168	vaesdeclast	%xmm0,%xmm3,%xmm3
7169	vaesdeclast	%xmm0,%xmm4,%xmm4
7170	vaesdeclast	%xmm0,%xmm5,%xmm5
7171	vaesdeclast	%xmm0,%xmm6,%xmm6
7172	vpxor	%xmm9,%xmm1,%xmm1
7173	vpxor	%xmm10,%xmm2,%xmm2
7174	vpxor	%xmm11,%xmm3,%xmm3
7175	vpxor	%xmm12,%xmm4,%xmm4
7176	vpxor	%xmm13,%xmm5,%xmm5
7177	vpxor	%xmm14,%xmm6,%xmm6
7178	vmovdqu	%xmm1,(%rsi)
7179	vmovdqu	%xmm2,16(%rsi)
7180	vmovdqu	%xmm3,32(%rsi)
7181	vmovdqu	%xmm4,48(%rsi)
7182	vmovdqu	%xmm5,64(%rsi)
7183	addq	$0x60,%rsi
7184	vmovdqa	%xmm6,%xmm8
7185	jmp	.L_done_EmbgEptodyewbFa
7186
7187.L_num_blocks_is_5_EmbgEptodyewbFa:
7188	vmovdqa	0(%rsp),%xmm9
7189	movq	0(%rsp),%rax
7190	movq	8(%rsp),%rbx
7191	vmovdqu	0(%rdi),%xmm1
7192	xorq	%r11,%r11
7193	shlq	$1,%rax
7194	adcq	%rbx,%rbx
7195	cmovcq	%r10,%r11
7196	xorq	%r11,%rax
7197	movq	%rax,16(%rsp)
7198	movq	%rbx,16 + 8(%rsp)
7199	vmovdqa	16(%rsp),%xmm10
7200	vmovdqu	16(%rdi),%xmm2
7201	xorq	%r11,%r11
7202	shlq	$1,%rax
7203	adcq	%rbx,%rbx
7204	cmovcq	%r10,%r11
7205	xorq	%r11,%rax
7206	movq	%rax,32(%rsp)
7207	movq	%rbx,32 + 8(%rsp)
7208	vmovdqa	32(%rsp),%xmm11
7209	vmovdqu	32(%rdi),%xmm3
7210	xorq	%r11,%r11
7211	shlq	$1,%rax
7212	adcq	%rbx,%rbx
7213	cmovcq	%r10,%r11
7214	xorq	%r11,%rax
7215	movq	%rax,48(%rsp)
7216	movq	%rbx,48 + 8(%rsp)
7217	vmovdqa	48(%rsp),%xmm12
7218	vmovdqu	48(%rdi),%xmm4
7219	xorq	%r11,%r11
7220	shlq	$1,%rax
7221	adcq	%rbx,%rbx
7222	cmovcq	%r10,%r11
7223	xorq	%r11,%rax
7224	movq	%rax,64(%rsp)
7225	movq	%rbx,64 + 8(%rsp)
7226	vmovdqa	64(%rsp),%xmm13
7227	vmovdqu	64(%rdi),%xmm5
7228	addq	$0x50,%rdi
7229	andq	$0xf,%rdx
7230	je	.L_done_5_EmbgEptodyewbFa
7231
7232.L_steal_cipher_5_EmbgEptodyewbFa:
7233	xorq	%r11,%r11
7234	shlq	$1,%rax
7235	adcq	%rbx,%rbx
7236	cmovcq	%r10,%r11
7237	xorq	%r11,%rax
7238	movq	%rax,16(%rsp)
7239	movq	%rbx,24(%rsp)
7240	vmovdqa64	%xmm13,%xmm14
7241	vmovdqa	16(%rsp),%xmm13
7242	vpxor	%xmm9,%xmm1,%xmm1
7243	vpxor	%xmm10,%xmm2,%xmm2
7244	vpxor	%xmm11,%xmm3,%xmm3
7245	vpxor	%xmm12,%xmm4,%xmm4
7246	vpxor	%xmm13,%xmm5,%xmm5
7247	vmovdqu	(%rcx),%xmm0
7248	vpxor	%xmm0,%xmm1,%xmm1
7249	vpxor	%xmm0,%xmm2,%xmm2
7250	vpxor	%xmm0,%xmm3,%xmm3
7251	vpxor	%xmm0,%xmm4,%xmm4
7252	vpxor	%xmm0,%xmm5,%xmm5
7253	vmovdqu	16(%rcx),%xmm0
7254	vaesdec	%xmm0,%xmm1,%xmm1
7255	vaesdec	%xmm0,%xmm2,%xmm2
7256	vaesdec	%xmm0,%xmm3,%xmm3
7257	vaesdec	%xmm0,%xmm4,%xmm4
7258	vaesdec	%xmm0,%xmm5,%xmm5
7259	vmovdqu	32(%rcx),%xmm0
7260	vaesdec	%xmm0,%xmm1,%xmm1
7261	vaesdec	%xmm0,%xmm2,%xmm2
7262	vaesdec	%xmm0,%xmm3,%xmm3
7263	vaesdec	%xmm0,%xmm4,%xmm4
7264	vaesdec	%xmm0,%xmm5,%xmm5
7265	vmovdqu	48(%rcx),%xmm0
7266	vaesdec	%xmm0,%xmm1,%xmm1
7267	vaesdec	%xmm0,%xmm2,%xmm2
7268	vaesdec	%xmm0,%xmm3,%xmm3
7269	vaesdec	%xmm0,%xmm4,%xmm4
7270	vaesdec	%xmm0,%xmm5,%xmm5
7271	vmovdqu	64(%rcx),%xmm0
7272	vaesdec	%xmm0,%xmm1,%xmm1
7273	vaesdec	%xmm0,%xmm2,%xmm2
7274	vaesdec	%xmm0,%xmm3,%xmm3
7275	vaesdec	%xmm0,%xmm4,%xmm4
7276	vaesdec	%xmm0,%xmm5,%xmm5
7277	vmovdqu	80(%rcx),%xmm0
7278	vaesdec	%xmm0,%xmm1,%xmm1
7279	vaesdec	%xmm0,%xmm2,%xmm2
7280	vaesdec	%xmm0,%xmm3,%xmm3
7281	vaesdec	%xmm0,%xmm4,%xmm4
7282	vaesdec	%xmm0,%xmm5,%xmm5
7283	vmovdqu	96(%rcx),%xmm0
7284	vaesdec	%xmm0,%xmm1,%xmm1
7285	vaesdec	%xmm0,%xmm2,%xmm2
7286	vaesdec	%xmm0,%xmm3,%xmm3
7287	vaesdec	%xmm0,%xmm4,%xmm4
7288	vaesdec	%xmm0,%xmm5,%xmm5
7289	vmovdqu	112(%rcx),%xmm0
7290	vaesdec	%xmm0,%xmm1,%xmm1
7291	vaesdec	%xmm0,%xmm2,%xmm2
7292	vaesdec	%xmm0,%xmm3,%xmm3
7293	vaesdec	%xmm0,%xmm4,%xmm4
7294	vaesdec	%xmm0,%xmm5,%xmm5
7295	vmovdqu	128(%rcx),%xmm0
7296	vaesdec	%xmm0,%xmm1,%xmm1
7297	vaesdec	%xmm0,%xmm2,%xmm2
7298	vaesdec	%xmm0,%xmm3,%xmm3
7299	vaesdec	%xmm0,%xmm4,%xmm4
7300	vaesdec	%xmm0,%xmm5,%xmm5
7301	vmovdqu	144(%rcx),%xmm0
7302	vaesdec	%xmm0,%xmm1,%xmm1
7303	vaesdec	%xmm0,%xmm2,%xmm2
7304	vaesdec	%xmm0,%xmm3,%xmm3
7305	vaesdec	%xmm0,%xmm4,%xmm4
7306	vaesdec	%xmm0,%xmm5,%xmm5
7307	vmovdqu	160(%rcx),%xmm0
7308	vaesdec	%xmm0,%xmm1,%xmm1
7309	vaesdec	%xmm0,%xmm2,%xmm2
7310	vaesdec	%xmm0,%xmm3,%xmm3
7311	vaesdec	%xmm0,%xmm4,%xmm4
7312	vaesdec	%xmm0,%xmm5,%xmm5
7313	vmovdqu	176(%rcx),%xmm0
7314	vaesdec	%xmm0,%xmm1,%xmm1
7315	vaesdec	%xmm0,%xmm2,%xmm2
7316	vaesdec	%xmm0,%xmm3,%xmm3
7317	vaesdec	%xmm0,%xmm4,%xmm4
7318	vaesdec	%xmm0,%xmm5,%xmm5
7319	vmovdqu	192(%rcx),%xmm0
7320	vaesdec	%xmm0,%xmm1,%xmm1
7321	vaesdec	%xmm0,%xmm2,%xmm2
7322	vaesdec	%xmm0,%xmm3,%xmm3
7323	vaesdec	%xmm0,%xmm4,%xmm4
7324	vaesdec	%xmm0,%xmm5,%xmm5
7325	vmovdqu	208(%rcx),%xmm0
7326	vaesdec	%xmm0,%xmm1,%xmm1
7327	vaesdec	%xmm0,%xmm2,%xmm2
7328	vaesdec	%xmm0,%xmm3,%xmm3
7329	vaesdec	%xmm0,%xmm4,%xmm4
7330	vaesdec	%xmm0,%xmm5,%xmm5
7331	vmovdqu	224(%rcx),%xmm0
7332	vaesdeclast	%xmm0,%xmm1,%xmm1
7333	vaesdeclast	%xmm0,%xmm2,%xmm2
7334	vaesdeclast	%xmm0,%xmm3,%xmm3
7335	vaesdeclast	%xmm0,%xmm4,%xmm4
7336	vaesdeclast	%xmm0,%xmm5,%xmm5
7337	vpxor	%xmm9,%xmm1,%xmm1
7338	vpxor	%xmm10,%xmm2,%xmm2
7339	vpxor	%xmm11,%xmm3,%xmm3
7340	vpxor	%xmm12,%xmm4,%xmm4
7341	vpxor	%xmm13,%xmm5,%xmm5
7342	vmovdqu	%xmm1,(%rsi)
7343	vmovdqu	%xmm2,16(%rsi)
7344	vmovdqu	%xmm3,32(%rsi)
7345	vmovdqu	%xmm4,48(%rsi)
7346	addq	$0x50,%rsi
7347	vmovdqa	%xmm14,%xmm0
7348	vmovdqa	%xmm5,%xmm8
7349	jmp	.L_steal_cipher_EmbgEptodyewbFa
7350
7351.L_done_5_EmbgEptodyewbFa:
7352	vpxor	%xmm9,%xmm1,%xmm1
7353	vpxor	%xmm10,%xmm2,%xmm2
7354	vpxor	%xmm11,%xmm3,%xmm3
7355	vpxor	%xmm12,%xmm4,%xmm4
7356	vpxor	%xmm13,%xmm5,%xmm5
7357	vmovdqu	(%rcx),%xmm0
7358	vpxor	%xmm0,%xmm1,%xmm1
7359	vpxor	%xmm0,%xmm2,%xmm2
7360	vpxor	%xmm0,%xmm3,%xmm3
7361	vpxor	%xmm0,%xmm4,%xmm4
7362	vpxor	%xmm0,%xmm5,%xmm5
7363	vmovdqu	16(%rcx),%xmm0
7364	vaesdec	%xmm0,%xmm1,%xmm1
7365	vaesdec	%xmm0,%xmm2,%xmm2
7366	vaesdec	%xmm0,%xmm3,%xmm3
7367	vaesdec	%xmm0,%xmm4,%xmm4
7368	vaesdec	%xmm0,%xmm5,%xmm5
7369	vmovdqu	32(%rcx),%xmm0
7370	vaesdec	%xmm0,%xmm1,%xmm1
7371	vaesdec	%xmm0,%xmm2,%xmm2
7372	vaesdec	%xmm0,%xmm3,%xmm3
7373	vaesdec	%xmm0,%xmm4,%xmm4
7374	vaesdec	%xmm0,%xmm5,%xmm5
7375	vmovdqu	48(%rcx),%xmm0
7376	vaesdec	%xmm0,%xmm1,%xmm1
7377	vaesdec	%xmm0,%xmm2,%xmm2
7378	vaesdec	%xmm0,%xmm3,%xmm3
7379	vaesdec	%xmm0,%xmm4,%xmm4
7380	vaesdec	%xmm0,%xmm5,%xmm5
7381	vmovdqu	64(%rcx),%xmm0
7382	vaesdec	%xmm0,%xmm1,%xmm1
7383	vaesdec	%xmm0,%xmm2,%xmm2
7384	vaesdec	%xmm0,%xmm3,%xmm3
7385	vaesdec	%xmm0,%xmm4,%xmm4
7386	vaesdec	%xmm0,%xmm5,%xmm5
7387	vmovdqu	80(%rcx),%xmm0
7388	vaesdec	%xmm0,%xmm1,%xmm1
7389	vaesdec	%xmm0,%xmm2,%xmm2
7390	vaesdec	%xmm0,%xmm3,%xmm3
7391	vaesdec	%xmm0,%xmm4,%xmm4
7392	vaesdec	%xmm0,%xmm5,%xmm5
7393	vmovdqu	96(%rcx),%xmm0
7394	vaesdec	%xmm0,%xmm1,%xmm1
7395	vaesdec	%xmm0,%xmm2,%xmm2
7396	vaesdec	%xmm0,%xmm3,%xmm3
7397	vaesdec	%xmm0,%xmm4,%xmm4
7398	vaesdec	%xmm0,%xmm5,%xmm5
7399	vmovdqu	112(%rcx),%xmm0
7400	vaesdec	%xmm0,%xmm1,%xmm1
7401	vaesdec	%xmm0,%xmm2,%xmm2
7402	vaesdec	%xmm0,%xmm3,%xmm3
7403	vaesdec	%xmm0,%xmm4,%xmm4
7404	vaesdec	%xmm0,%xmm5,%xmm5
7405	vmovdqu	128(%rcx),%xmm0
7406	vaesdec	%xmm0,%xmm1,%xmm1
7407	vaesdec	%xmm0,%xmm2,%xmm2
7408	vaesdec	%xmm0,%xmm3,%xmm3
7409	vaesdec	%xmm0,%xmm4,%xmm4
7410	vaesdec	%xmm0,%xmm5,%xmm5
7411	vmovdqu	144(%rcx),%xmm0
7412	vaesdec	%xmm0,%xmm1,%xmm1
7413	vaesdec	%xmm0,%xmm2,%xmm2
7414	vaesdec	%xmm0,%xmm3,%xmm3
7415	vaesdec	%xmm0,%xmm4,%xmm4
7416	vaesdec	%xmm0,%xmm5,%xmm5
7417	vmovdqu	160(%rcx),%xmm0
7418	vaesdec	%xmm0,%xmm1,%xmm1
7419	vaesdec	%xmm0,%xmm2,%xmm2
7420	vaesdec	%xmm0,%xmm3,%xmm3
7421	vaesdec	%xmm0,%xmm4,%xmm4
7422	vaesdec	%xmm0,%xmm5,%xmm5
7423	vmovdqu	176(%rcx),%xmm0
7424	vaesdec	%xmm0,%xmm1,%xmm1
7425	vaesdec	%xmm0,%xmm2,%xmm2
7426	vaesdec	%xmm0,%xmm3,%xmm3
7427	vaesdec	%xmm0,%xmm4,%xmm4
7428	vaesdec	%xmm0,%xmm5,%xmm5
7429	vmovdqu	192(%rcx),%xmm0
7430	vaesdec	%xmm0,%xmm1,%xmm1
7431	vaesdec	%xmm0,%xmm2,%xmm2
7432	vaesdec	%xmm0,%xmm3,%xmm3
7433	vaesdec	%xmm0,%xmm4,%xmm4
7434	vaesdec	%xmm0,%xmm5,%xmm5
7435	vmovdqu	208(%rcx),%xmm0
7436	vaesdec	%xmm0,%xmm1,%xmm1
7437	vaesdec	%xmm0,%xmm2,%xmm2
7438	vaesdec	%xmm0,%xmm3,%xmm3
7439	vaesdec	%xmm0,%xmm4,%xmm4
7440	vaesdec	%xmm0,%xmm5,%xmm5
7441	vmovdqu	224(%rcx),%xmm0
7442	vaesdeclast	%xmm0,%xmm1,%xmm1
7443	vaesdeclast	%xmm0,%xmm2,%xmm2
7444	vaesdeclast	%xmm0,%xmm3,%xmm3
7445	vaesdeclast	%xmm0,%xmm4,%xmm4
7446	vaesdeclast	%xmm0,%xmm5,%xmm5
7447	vpxor	%xmm9,%xmm1,%xmm1
7448	vpxor	%xmm10,%xmm2,%xmm2
7449	vpxor	%xmm11,%xmm3,%xmm3
7450	vpxor	%xmm12,%xmm4,%xmm4
7451	vpxor	%xmm13,%xmm5,%xmm5
7452	vmovdqu	%xmm1,(%rsi)
7453	vmovdqu	%xmm2,16(%rsi)
7454	vmovdqu	%xmm3,32(%rsi)
7455	vmovdqu	%xmm4,48(%rsi)
7456	addq	$0x50,%rsi
7457	vmovdqa	%xmm5,%xmm8
7458	jmp	.L_done_EmbgEptodyewbFa
7459
7460.L_num_blocks_is_4_EmbgEptodyewbFa:
7461	vmovdqa	0(%rsp),%xmm9
7462	movq	0(%rsp),%rax
7463	movq	8(%rsp),%rbx
7464	vmovdqu	0(%rdi),%xmm1
7465	xorq	%r11,%r11
7466	shlq	$1,%rax
7467	adcq	%rbx,%rbx
7468	cmovcq	%r10,%r11
7469	xorq	%r11,%rax
7470	movq	%rax,16(%rsp)
7471	movq	%rbx,16 + 8(%rsp)
7472	vmovdqa	16(%rsp),%xmm10
7473	vmovdqu	16(%rdi),%xmm2
7474	xorq	%r11,%r11
7475	shlq	$1,%rax
7476	adcq	%rbx,%rbx
7477	cmovcq	%r10,%r11
7478	xorq	%r11,%rax
7479	movq	%rax,32(%rsp)
7480	movq	%rbx,32 + 8(%rsp)
7481	vmovdqa	32(%rsp),%xmm11
7482	vmovdqu	32(%rdi),%xmm3
7483	xorq	%r11,%r11
7484	shlq	$1,%rax
7485	adcq	%rbx,%rbx
7486	cmovcq	%r10,%r11
7487	xorq	%r11,%rax
7488	movq	%rax,48(%rsp)
7489	movq	%rbx,48 + 8(%rsp)
7490	vmovdqa	48(%rsp),%xmm12
7491	vmovdqu	48(%rdi),%xmm4
7492	addq	$0x40,%rdi
7493	andq	$0xf,%rdx
7494	je	.L_done_4_EmbgEptodyewbFa
7495
7496.L_steal_cipher_4_EmbgEptodyewbFa:
7497	xorq	%r11,%r11
7498	shlq	$1,%rax
7499	adcq	%rbx,%rbx
7500	cmovcq	%r10,%r11
7501	xorq	%r11,%rax
7502	movq	%rax,16(%rsp)
7503	movq	%rbx,24(%rsp)
7504	vmovdqa64	%xmm12,%xmm13
7505	vmovdqa	16(%rsp),%xmm12
7506	vpxor	%xmm9,%xmm1,%xmm1
7507	vpxor	%xmm10,%xmm2,%xmm2
7508	vpxor	%xmm11,%xmm3,%xmm3
7509	vpxor	%xmm12,%xmm4,%xmm4
7510	vmovdqu	(%rcx),%xmm0
7511	vpxor	%xmm0,%xmm1,%xmm1
7512	vpxor	%xmm0,%xmm2,%xmm2
7513	vpxor	%xmm0,%xmm3,%xmm3
7514	vpxor	%xmm0,%xmm4,%xmm4
7515	vmovdqu	16(%rcx),%xmm0
7516	vaesdec	%xmm0,%xmm1,%xmm1
7517	vaesdec	%xmm0,%xmm2,%xmm2
7518	vaesdec	%xmm0,%xmm3,%xmm3
7519	vaesdec	%xmm0,%xmm4,%xmm4
7520	vmovdqu	32(%rcx),%xmm0
7521	vaesdec	%xmm0,%xmm1,%xmm1
7522	vaesdec	%xmm0,%xmm2,%xmm2
7523	vaesdec	%xmm0,%xmm3,%xmm3
7524	vaesdec	%xmm0,%xmm4,%xmm4
7525	vmovdqu	48(%rcx),%xmm0
7526	vaesdec	%xmm0,%xmm1,%xmm1
7527	vaesdec	%xmm0,%xmm2,%xmm2
7528	vaesdec	%xmm0,%xmm3,%xmm3
7529	vaesdec	%xmm0,%xmm4,%xmm4
7530	vmovdqu	64(%rcx),%xmm0
7531	vaesdec	%xmm0,%xmm1,%xmm1
7532	vaesdec	%xmm0,%xmm2,%xmm2
7533	vaesdec	%xmm0,%xmm3,%xmm3
7534	vaesdec	%xmm0,%xmm4,%xmm4
7535	vmovdqu	80(%rcx),%xmm0
7536	vaesdec	%xmm0,%xmm1,%xmm1
7537	vaesdec	%xmm0,%xmm2,%xmm2
7538	vaesdec	%xmm0,%xmm3,%xmm3
7539	vaesdec	%xmm0,%xmm4,%xmm4
7540	vmovdqu	96(%rcx),%xmm0
7541	vaesdec	%xmm0,%xmm1,%xmm1
7542	vaesdec	%xmm0,%xmm2,%xmm2
7543	vaesdec	%xmm0,%xmm3,%xmm3
7544	vaesdec	%xmm0,%xmm4,%xmm4
7545	vmovdqu	112(%rcx),%xmm0
7546	vaesdec	%xmm0,%xmm1,%xmm1
7547	vaesdec	%xmm0,%xmm2,%xmm2
7548	vaesdec	%xmm0,%xmm3,%xmm3
7549	vaesdec	%xmm0,%xmm4,%xmm4
7550	vmovdqu	128(%rcx),%xmm0
7551	vaesdec	%xmm0,%xmm1,%xmm1
7552	vaesdec	%xmm0,%xmm2,%xmm2
7553	vaesdec	%xmm0,%xmm3,%xmm3
7554	vaesdec	%xmm0,%xmm4,%xmm4
7555	vmovdqu	144(%rcx),%xmm0
7556	vaesdec	%xmm0,%xmm1,%xmm1
7557	vaesdec	%xmm0,%xmm2,%xmm2
7558	vaesdec	%xmm0,%xmm3,%xmm3
7559	vaesdec	%xmm0,%xmm4,%xmm4
7560	vmovdqu	160(%rcx),%xmm0
7561	vaesdec	%xmm0,%xmm1,%xmm1
7562	vaesdec	%xmm0,%xmm2,%xmm2
7563	vaesdec	%xmm0,%xmm3,%xmm3
7564	vaesdec	%xmm0,%xmm4,%xmm4
7565	vmovdqu	176(%rcx),%xmm0
7566	vaesdec	%xmm0,%xmm1,%xmm1
7567	vaesdec	%xmm0,%xmm2,%xmm2
7568	vaesdec	%xmm0,%xmm3,%xmm3
7569	vaesdec	%xmm0,%xmm4,%xmm4
7570	vmovdqu	192(%rcx),%xmm0
7571	vaesdec	%xmm0,%xmm1,%xmm1
7572	vaesdec	%xmm0,%xmm2,%xmm2
7573	vaesdec	%xmm0,%xmm3,%xmm3
7574	vaesdec	%xmm0,%xmm4,%xmm4
7575	vmovdqu	208(%rcx),%xmm0
7576	vaesdec	%xmm0,%xmm1,%xmm1
7577	vaesdec	%xmm0,%xmm2,%xmm2
7578	vaesdec	%xmm0,%xmm3,%xmm3
7579	vaesdec	%xmm0,%xmm4,%xmm4
7580	vmovdqu	224(%rcx),%xmm0
7581	vaesdeclast	%xmm0,%xmm1,%xmm1
7582	vaesdeclast	%xmm0,%xmm2,%xmm2
7583	vaesdeclast	%xmm0,%xmm3,%xmm3
7584	vaesdeclast	%xmm0,%xmm4,%xmm4
7585	vpxor	%xmm9,%xmm1,%xmm1
7586	vpxor	%xmm10,%xmm2,%xmm2
7587	vpxor	%xmm11,%xmm3,%xmm3
7588	vpxor	%xmm12,%xmm4,%xmm4
7589	vmovdqu	%xmm1,(%rsi)
7590	vmovdqu	%xmm2,16(%rsi)
7591	vmovdqu	%xmm3,32(%rsi)
7592	addq	$0x40,%rsi
7593	vmovdqa	%xmm13,%xmm0
7594	vmovdqa	%xmm4,%xmm8
7595	jmp	.L_steal_cipher_EmbgEptodyewbFa
7596
7597.L_done_4_EmbgEptodyewbFa:
7598	vpxor	%xmm9,%xmm1,%xmm1
7599	vpxor	%xmm10,%xmm2,%xmm2
7600	vpxor	%xmm11,%xmm3,%xmm3
7601	vpxor	%xmm12,%xmm4,%xmm4
7602	vmovdqu	(%rcx),%xmm0
7603	vpxor	%xmm0,%xmm1,%xmm1
7604	vpxor	%xmm0,%xmm2,%xmm2
7605	vpxor	%xmm0,%xmm3,%xmm3
7606	vpxor	%xmm0,%xmm4,%xmm4
7607	vmovdqu	16(%rcx),%xmm0
7608	vaesdec	%xmm0,%xmm1,%xmm1
7609	vaesdec	%xmm0,%xmm2,%xmm2
7610	vaesdec	%xmm0,%xmm3,%xmm3
7611	vaesdec	%xmm0,%xmm4,%xmm4
7612	vmovdqu	32(%rcx),%xmm0
7613	vaesdec	%xmm0,%xmm1,%xmm1
7614	vaesdec	%xmm0,%xmm2,%xmm2
7615	vaesdec	%xmm0,%xmm3,%xmm3
7616	vaesdec	%xmm0,%xmm4,%xmm4
7617	vmovdqu	48(%rcx),%xmm0
7618	vaesdec	%xmm0,%xmm1,%xmm1
7619	vaesdec	%xmm0,%xmm2,%xmm2
7620	vaesdec	%xmm0,%xmm3,%xmm3
7621	vaesdec	%xmm0,%xmm4,%xmm4
7622	vmovdqu	64(%rcx),%xmm0
7623	vaesdec	%xmm0,%xmm1,%xmm1
7624	vaesdec	%xmm0,%xmm2,%xmm2
7625	vaesdec	%xmm0,%xmm3,%xmm3
7626	vaesdec	%xmm0,%xmm4,%xmm4
7627	vmovdqu	80(%rcx),%xmm0
7628	vaesdec	%xmm0,%xmm1,%xmm1
7629	vaesdec	%xmm0,%xmm2,%xmm2
7630	vaesdec	%xmm0,%xmm3,%xmm3
7631	vaesdec	%xmm0,%xmm4,%xmm4
7632	vmovdqu	96(%rcx),%xmm0
7633	vaesdec	%xmm0,%xmm1,%xmm1
7634	vaesdec	%xmm0,%xmm2,%xmm2
7635	vaesdec	%xmm0,%xmm3,%xmm3
7636	vaesdec	%xmm0,%xmm4,%xmm4
7637	vmovdqu	112(%rcx),%xmm0
7638	vaesdec	%xmm0,%xmm1,%xmm1
7639	vaesdec	%xmm0,%xmm2,%xmm2
7640	vaesdec	%xmm0,%xmm3,%xmm3
7641	vaesdec	%xmm0,%xmm4,%xmm4
7642	vmovdqu	128(%rcx),%xmm0
7643	vaesdec	%xmm0,%xmm1,%xmm1
7644	vaesdec	%xmm0,%xmm2,%xmm2
7645	vaesdec	%xmm0,%xmm3,%xmm3
7646	vaesdec	%xmm0,%xmm4,%xmm4
7647	vmovdqu	144(%rcx),%xmm0
7648	vaesdec	%xmm0,%xmm1,%xmm1
7649	vaesdec	%xmm0,%xmm2,%xmm2
7650	vaesdec	%xmm0,%xmm3,%xmm3
7651	vaesdec	%xmm0,%xmm4,%xmm4
7652	vmovdqu	160(%rcx),%xmm0
7653	vaesdec	%xmm0,%xmm1,%xmm1
7654	vaesdec	%xmm0,%xmm2,%xmm2
7655	vaesdec	%xmm0,%xmm3,%xmm3
7656	vaesdec	%xmm0,%xmm4,%xmm4
7657	vmovdqu	176(%rcx),%xmm0
7658	vaesdec	%xmm0,%xmm1,%xmm1
7659	vaesdec	%xmm0,%xmm2,%xmm2
7660	vaesdec	%xmm0,%xmm3,%xmm3
7661	vaesdec	%xmm0,%xmm4,%xmm4
7662	vmovdqu	192(%rcx),%xmm0
7663	vaesdec	%xmm0,%xmm1,%xmm1
7664	vaesdec	%xmm0,%xmm2,%xmm2
7665	vaesdec	%xmm0,%xmm3,%xmm3
7666	vaesdec	%xmm0,%xmm4,%xmm4
7667	vmovdqu	208(%rcx),%xmm0
7668	vaesdec	%xmm0,%xmm1,%xmm1
7669	vaesdec	%xmm0,%xmm2,%xmm2
7670	vaesdec	%xmm0,%xmm3,%xmm3
7671	vaesdec	%xmm0,%xmm4,%xmm4
7672	vmovdqu	224(%rcx),%xmm0
7673	vaesdeclast	%xmm0,%xmm1,%xmm1
7674	vaesdeclast	%xmm0,%xmm2,%xmm2
7675	vaesdeclast	%xmm0,%xmm3,%xmm3
7676	vaesdeclast	%xmm0,%xmm4,%xmm4
7677	vpxor	%xmm9,%xmm1,%xmm1
7678	vpxor	%xmm10,%xmm2,%xmm2
7679	vpxor	%xmm11,%xmm3,%xmm3
7680	vpxor	%xmm12,%xmm4,%xmm4
7681	vmovdqu	%xmm1,(%rsi)
7682	vmovdqu	%xmm2,16(%rsi)
7683	vmovdqu	%xmm3,32(%rsi)
7684	addq	$0x40,%rsi
7685	vmovdqa	%xmm4,%xmm8
7686	jmp	.L_done_EmbgEptodyewbFa
7687
7688.L_num_blocks_is_3_EmbgEptodyewbFa:
7689	vmovdqa	0(%rsp),%xmm9
7690	movq	0(%rsp),%rax
7691	movq	8(%rsp),%rbx
7692	vmovdqu	0(%rdi),%xmm1
7693	xorq	%r11,%r11
7694	shlq	$1,%rax
7695	adcq	%rbx,%rbx
7696	cmovcq	%r10,%r11
7697	xorq	%r11,%rax
7698	movq	%rax,16(%rsp)
7699	movq	%rbx,16 + 8(%rsp)
7700	vmovdqa	16(%rsp),%xmm10
7701	vmovdqu	16(%rdi),%xmm2
7702	xorq	%r11,%r11
7703	shlq	$1,%rax
7704	adcq	%rbx,%rbx
7705	cmovcq	%r10,%r11
7706	xorq	%r11,%rax
7707	movq	%rax,32(%rsp)
7708	movq	%rbx,32 + 8(%rsp)
7709	vmovdqa	32(%rsp),%xmm11
7710	vmovdqu	32(%rdi),%xmm3
7711	addq	$0x30,%rdi
7712	andq	$0xf,%rdx
7713	je	.L_done_3_EmbgEptodyewbFa
7714
7715.L_steal_cipher_3_EmbgEptodyewbFa:
7716	xorq	%r11,%r11
7717	shlq	$1,%rax
7718	adcq	%rbx,%rbx
7719	cmovcq	%r10,%r11
7720	xorq	%r11,%rax
7721	movq	%rax,16(%rsp)
7722	movq	%rbx,24(%rsp)
7723	vmovdqa64	%xmm11,%xmm12
7724	vmovdqa	16(%rsp),%xmm11
7725	vpxor	%xmm9,%xmm1,%xmm1
7726	vpxor	%xmm10,%xmm2,%xmm2
7727	vpxor	%xmm11,%xmm3,%xmm3
7728	vmovdqu	(%rcx),%xmm0
7729	vpxor	%xmm0,%xmm1,%xmm1
7730	vpxor	%xmm0,%xmm2,%xmm2
7731	vpxor	%xmm0,%xmm3,%xmm3
7732	vmovdqu	16(%rcx),%xmm0
7733	vaesdec	%xmm0,%xmm1,%xmm1
7734	vaesdec	%xmm0,%xmm2,%xmm2
7735	vaesdec	%xmm0,%xmm3,%xmm3
7736	vmovdqu	32(%rcx),%xmm0
7737	vaesdec	%xmm0,%xmm1,%xmm1
7738	vaesdec	%xmm0,%xmm2,%xmm2
7739	vaesdec	%xmm0,%xmm3,%xmm3
7740	vmovdqu	48(%rcx),%xmm0
7741	vaesdec	%xmm0,%xmm1,%xmm1
7742	vaesdec	%xmm0,%xmm2,%xmm2
7743	vaesdec	%xmm0,%xmm3,%xmm3
7744	vmovdqu	64(%rcx),%xmm0
7745	vaesdec	%xmm0,%xmm1,%xmm1
7746	vaesdec	%xmm0,%xmm2,%xmm2
7747	vaesdec	%xmm0,%xmm3,%xmm3
7748	vmovdqu	80(%rcx),%xmm0
7749	vaesdec	%xmm0,%xmm1,%xmm1
7750	vaesdec	%xmm0,%xmm2,%xmm2
7751	vaesdec	%xmm0,%xmm3,%xmm3
7752	vmovdqu	96(%rcx),%xmm0
7753	vaesdec	%xmm0,%xmm1,%xmm1
7754	vaesdec	%xmm0,%xmm2,%xmm2
7755	vaesdec	%xmm0,%xmm3,%xmm3
7756	vmovdqu	112(%rcx),%xmm0
7757	vaesdec	%xmm0,%xmm1,%xmm1
7758	vaesdec	%xmm0,%xmm2,%xmm2
7759	vaesdec	%xmm0,%xmm3,%xmm3
7760	vmovdqu	128(%rcx),%xmm0
7761	vaesdec	%xmm0,%xmm1,%xmm1
7762	vaesdec	%xmm0,%xmm2,%xmm2
7763	vaesdec	%xmm0,%xmm3,%xmm3
7764	vmovdqu	144(%rcx),%xmm0
7765	vaesdec	%xmm0,%xmm1,%xmm1
7766	vaesdec	%xmm0,%xmm2,%xmm2
7767	vaesdec	%xmm0,%xmm3,%xmm3
7768	vmovdqu	160(%rcx),%xmm0
7769	vaesdec	%xmm0,%xmm1,%xmm1
7770	vaesdec	%xmm0,%xmm2,%xmm2
7771	vaesdec	%xmm0,%xmm3,%xmm3
7772	vmovdqu	176(%rcx),%xmm0
7773	vaesdec	%xmm0,%xmm1,%xmm1
7774	vaesdec	%xmm0,%xmm2,%xmm2
7775	vaesdec	%xmm0,%xmm3,%xmm3
7776	vmovdqu	192(%rcx),%xmm0
7777	vaesdec	%xmm0,%xmm1,%xmm1
7778	vaesdec	%xmm0,%xmm2,%xmm2
7779	vaesdec	%xmm0,%xmm3,%xmm3
7780	vmovdqu	208(%rcx),%xmm0
7781	vaesdec	%xmm0,%xmm1,%xmm1
7782	vaesdec	%xmm0,%xmm2,%xmm2
7783	vaesdec	%xmm0,%xmm3,%xmm3
7784	vmovdqu	224(%rcx),%xmm0
7785	vaesdeclast	%xmm0,%xmm1,%xmm1
7786	vaesdeclast	%xmm0,%xmm2,%xmm2
7787	vaesdeclast	%xmm0,%xmm3,%xmm3
7788	vpxor	%xmm9,%xmm1,%xmm1
7789	vpxor	%xmm10,%xmm2,%xmm2
7790	vpxor	%xmm11,%xmm3,%xmm3
7791	vmovdqu	%xmm1,(%rsi)
7792	vmovdqu	%xmm2,16(%rsi)
7793	addq	$0x30,%rsi
7794	vmovdqa	%xmm12,%xmm0
7795	vmovdqa	%xmm3,%xmm8
7796	jmp	.L_steal_cipher_EmbgEptodyewbFa
7797
7798.L_done_3_EmbgEptodyewbFa:
7799	vpxor	%xmm9,%xmm1,%xmm1
7800	vpxor	%xmm10,%xmm2,%xmm2
7801	vpxor	%xmm11,%xmm3,%xmm3
7802	vmovdqu	(%rcx),%xmm0
7803	vpxor	%xmm0,%xmm1,%xmm1
7804	vpxor	%xmm0,%xmm2,%xmm2
7805	vpxor	%xmm0,%xmm3,%xmm3
7806	vmovdqu	16(%rcx),%xmm0
7807	vaesdec	%xmm0,%xmm1,%xmm1
7808	vaesdec	%xmm0,%xmm2,%xmm2
7809	vaesdec	%xmm0,%xmm3,%xmm3
7810	vmovdqu	32(%rcx),%xmm0
7811	vaesdec	%xmm0,%xmm1,%xmm1
7812	vaesdec	%xmm0,%xmm2,%xmm2
7813	vaesdec	%xmm0,%xmm3,%xmm3
7814	vmovdqu	48(%rcx),%xmm0
7815	vaesdec	%xmm0,%xmm1,%xmm1
7816	vaesdec	%xmm0,%xmm2,%xmm2
7817	vaesdec	%xmm0,%xmm3,%xmm3
7818	vmovdqu	64(%rcx),%xmm0
7819	vaesdec	%xmm0,%xmm1,%xmm1
7820	vaesdec	%xmm0,%xmm2,%xmm2
7821	vaesdec	%xmm0,%xmm3,%xmm3
7822	vmovdqu	80(%rcx),%xmm0
7823	vaesdec	%xmm0,%xmm1,%xmm1
7824	vaesdec	%xmm0,%xmm2,%xmm2
7825	vaesdec	%xmm0,%xmm3,%xmm3
7826	vmovdqu	96(%rcx),%xmm0
7827	vaesdec	%xmm0,%xmm1,%xmm1
7828	vaesdec	%xmm0,%xmm2,%xmm2
7829	vaesdec	%xmm0,%xmm3,%xmm3
7830	vmovdqu	112(%rcx),%xmm0
7831	vaesdec	%xmm0,%xmm1,%xmm1
7832	vaesdec	%xmm0,%xmm2,%xmm2
7833	vaesdec	%xmm0,%xmm3,%xmm3
7834	vmovdqu	128(%rcx),%xmm0
7835	vaesdec	%xmm0,%xmm1,%xmm1
7836	vaesdec	%xmm0,%xmm2,%xmm2
7837	vaesdec	%xmm0,%xmm3,%xmm3
7838	vmovdqu	144(%rcx),%xmm0
7839	vaesdec	%xmm0,%xmm1,%xmm1
7840	vaesdec	%xmm0,%xmm2,%xmm2
7841	vaesdec	%xmm0,%xmm3,%xmm3
7842	vmovdqu	160(%rcx),%xmm0
7843	vaesdec	%xmm0,%xmm1,%xmm1
7844	vaesdec	%xmm0,%xmm2,%xmm2
7845	vaesdec	%xmm0,%xmm3,%xmm3
7846	vmovdqu	176(%rcx),%xmm0
7847	vaesdec	%xmm0,%xmm1,%xmm1
7848	vaesdec	%xmm0,%xmm2,%xmm2
7849	vaesdec	%xmm0,%xmm3,%xmm3
7850	vmovdqu	192(%rcx),%xmm0
7851	vaesdec	%xmm0,%xmm1,%xmm1
7852	vaesdec	%xmm0,%xmm2,%xmm2
7853	vaesdec	%xmm0,%xmm3,%xmm3
7854	vmovdqu	208(%rcx),%xmm0
7855	vaesdec	%xmm0,%xmm1,%xmm1
7856	vaesdec	%xmm0,%xmm2,%xmm2
7857	vaesdec	%xmm0,%xmm3,%xmm3
7858	vmovdqu	224(%rcx),%xmm0
7859	vaesdeclast	%xmm0,%xmm1,%xmm1
7860	vaesdeclast	%xmm0,%xmm2,%xmm2
7861	vaesdeclast	%xmm0,%xmm3,%xmm3
7862	vpxor	%xmm9,%xmm1,%xmm1
7863	vpxor	%xmm10,%xmm2,%xmm2
7864	vpxor	%xmm11,%xmm3,%xmm3
7865	vmovdqu	%xmm1,(%rsi)
7866	vmovdqu	%xmm2,16(%rsi)
7867	addq	$0x30,%rsi
7868	vmovdqa	%xmm3,%xmm8
7869	jmp	.L_done_EmbgEptodyewbFa
7870
7871.L_num_blocks_is_2_EmbgEptodyewbFa:
7872	vmovdqa	0(%rsp),%xmm9
7873	movq	0(%rsp),%rax
7874	movq	8(%rsp),%rbx
7875	vmovdqu	0(%rdi),%xmm1
7876	xorq	%r11,%r11
7877	shlq	$1,%rax
7878	adcq	%rbx,%rbx
7879	cmovcq	%r10,%r11
7880	xorq	%r11,%rax
7881	movq	%rax,16(%rsp)
7882	movq	%rbx,16 + 8(%rsp)
7883	vmovdqa	16(%rsp),%xmm10
7884	vmovdqu	16(%rdi),%xmm2
7885	addq	$0x20,%rdi
7886	andq	$0xf,%rdx
7887	je	.L_done_2_EmbgEptodyewbFa
7888
7889.L_steal_cipher_2_EmbgEptodyewbFa:
7890	xorq	%r11,%r11
7891	shlq	$1,%rax
7892	adcq	%rbx,%rbx
7893	cmovcq	%r10,%r11
7894	xorq	%r11,%rax
7895	movq	%rax,16(%rsp)
7896	movq	%rbx,24(%rsp)
7897	vmovdqa64	%xmm10,%xmm11
7898	vmovdqa	16(%rsp),%xmm10
7899	vpxor	%xmm9,%xmm1,%xmm1
7900	vpxor	%xmm10,%xmm2,%xmm2
7901	vmovdqu	(%rcx),%xmm0
7902	vpxor	%xmm0,%xmm1,%xmm1
7903	vpxor	%xmm0,%xmm2,%xmm2
7904	vmovdqu	16(%rcx),%xmm0
7905	vaesdec	%xmm0,%xmm1,%xmm1
7906	vaesdec	%xmm0,%xmm2,%xmm2
7907	vmovdqu	32(%rcx),%xmm0
7908	vaesdec	%xmm0,%xmm1,%xmm1
7909	vaesdec	%xmm0,%xmm2,%xmm2
7910	vmovdqu	48(%rcx),%xmm0
7911	vaesdec	%xmm0,%xmm1,%xmm1
7912	vaesdec	%xmm0,%xmm2,%xmm2
7913	vmovdqu	64(%rcx),%xmm0
7914	vaesdec	%xmm0,%xmm1,%xmm1
7915	vaesdec	%xmm0,%xmm2,%xmm2
7916	vmovdqu	80(%rcx),%xmm0
7917	vaesdec	%xmm0,%xmm1,%xmm1
7918	vaesdec	%xmm0,%xmm2,%xmm2
7919	vmovdqu	96(%rcx),%xmm0
7920	vaesdec	%xmm0,%xmm1,%xmm1
7921	vaesdec	%xmm0,%xmm2,%xmm2
7922	vmovdqu	112(%rcx),%xmm0
7923	vaesdec	%xmm0,%xmm1,%xmm1
7924	vaesdec	%xmm0,%xmm2,%xmm2
7925	vmovdqu	128(%rcx),%xmm0
7926	vaesdec	%xmm0,%xmm1,%xmm1
7927	vaesdec	%xmm0,%xmm2,%xmm2
7928	vmovdqu	144(%rcx),%xmm0
7929	vaesdec	%xmm0,%xmm1,%xmm1
7930	vaesdec	%xmm0,%xmm2,%xmm2
7931	vmovdqu	160(%rcx),%xmm0
7932	vaesdec	%xmm0,%xmm1,%xmm1
7933	vaesdec	%xmm0,%xmm2,%xmm2
7934	vmovdqu	176(%rcx),%xmm0
7935	vaesdec	%xmm0,%xmm1,%xmm1
7936	vaesdec	%xmm0,%xmm2,%xmm2
7937	vmovdqu	192(%rcx),%xmm0
7938	vaesdec	%xmm0,%xmm1,%xmm1
7939	vaesdec	%xmm0,%xmm2,%xmm2
7940	vmovdqu	208(%rcx),%xmm0
7941	vaesdec	%xmm0,%xmm1,%xmm1
7942	vaesdec	%xmm0,%xmm2,%xmm2
7943	vmovdqu	224(%rcx),%xmm0
7944	vaesdeclast	%xmm0,%xmm1,%xmm1
7945	vaesdeclast	%xmm0,%xmm2,%xmm2
7946	vpxor	%xmm9,%xmm1,%xmm1
7947	vpxor	%xmm10,%xmm2,%xmm2
7948	vmovdqu	%xmm1,(%rsi)
7949	addq	$0x20,%rsi
7950	vmovdqa	%xmm11,%xmm0
7951	vmovdqa	%xmm2,%xmm8
7952	jmp	.L_steal_cipher_EmbgEptodyewbFa
7953
7954.L_done_2_EmbgEptodyewbFa:
7955	vpxor	%xmm9,%xmm1,%xmm1
7956	vpxor	%xmm10,%xmm2,%xmm2
7957	vmovdqu	(%rcx),%xmm0
7958	vpxor	%xmm0,%xmm1,%xmm1
7959	vpxor	%xmm0,%xmm2,%xmm2
7960	vmovdqu	16(%rcx),%xmm0
7961	vaesdec	%xmm0,%xmm1,%xmm1
7962	vaesdec	%xmm0,%xmm2,%xmm2
7963	vmovdqu	32(%rcx),%xmm0
7964	vaesdec	%xmm0,%xmm1,%xmm1
7965	vaesdec	%xmm0,%xmm2,%xmm2
7966	vmovdqu	48(%rcx),%xmm0
7967	vaesdec	%xmm0,%xmm1,%xmm1
7968	vaesdec	%xmm0,%xmm2,%xmm2
7969	vmovdqu	64(%rcx),%xmm0
7970	vaesdec	%xmm0,%xmm1,%xmm1
7971	vaesdec	%xmm0,%xmm2,%xmm2
7972	vmovdqu	80(%rcx),%xmm0
7973	vaesdec	%xmm0,%xmm1,%xmm1
7974	vaesdec	%xmm0,%xmm2,%xmm2
7975	vmovdqu	96(%rcx),%xmm0
7976	vaesdec	%xmm0,%xmm1,%xmm1
7977	vaesdec	%xmm0,%xmm2,%xmm2
7978	vmovdqu	112(%rcx),%xmm0
7979	vaesdec	%xmm0,%xmm1,%xmm1
7980	vaesdec	%xmm0,%xmm2,%xmm2
7981	vmovdqu	128(%rcx),%xmm0
7982	vaesdec	%xmm0,%xmm1,%xmm1
7983	vaesdec	%xmm0,%xmm2,%xmm2
7984	vmovdqu	144(%rcx),%xmm0
7985	vaesdec	%xmm0,%xmm1,%xmm1
7986	vaesdec	%xmm0,%xmm2,%xmm2
7987	vmovdqu	160(%rcx),%xmm0
7988	vaesdec	%xmm0,%xmm1,%xmm1
7989	vaesdec	%xmm0,%xmm2,%xmm2
7990	vmovdqu	176(%rcx),%xmm0
7991	vaesdec	%xmm0,%xmm1,%xmm1
7992	vaesdec	%xmm0,%xmm2,%xmm2
7993	vmovdqu	192(%rcx),%xmm0
7994	vaesdec	%xmm0,%xmm1,%xmm1
7995	vaesdec	%xmm0,%xmm2,%xmm2
7996	vmovdqu	208(%rcx),%xmm0
7997	vaesdec	%xmm0,%xmm1,%xmm1
7998	vaesdec	%xmm0,%xmm2,%xmm2
7999	vmovdqu	224(%rcx),%xmm0
8000	vaesdeclast	%xmm0,%xmm1,%xmm1
8001	vaesdeclast	%xmm0,%xmm2,%xmm2
8002	vpxor	%xmm9,%xmm1,%xmm1
8003	vpxor	%xmm10,%xmm2,%xmm2
8004	vmovdqu	%xmm1,(%rsi)
8005	addq	$0x20,%rsi
8006	vmovdqa	%xmm2,%xmm8
8007	jmp	.L_done_EmbgEptodyewbFa
8008
8009.L_num_blocks_is_1_EmbgEptodyewbFa:
8010	vmovdqa	0(%rsp),%xmm9
8011	movq	0(%rsp),%rax
8012	movq	8(%rsp),%rbx
8013	vmovdqu	0(%rdi),%xmm1
8014	addq	$0x10,%rdi
8015	andq	$0xf,%rdx
8016	je	.L_done_1_EmbgEptodyewbFa
8017
8018.L_steal_cipher_1_EmbgEptodyewbFa:
8019	xorq	%r11,%r11
8020	shlq	$1,%rax
8021	adcq	%rbx,%rbx
8022	cmovcq	%r10,%r11
8023	xorq	%r11,%rax
8024	movq	%rax,16(%rsp)
8025	movq	%rbx,24(%rsp)
8026	vmovdqa64	%xmm9,%xmm10
8027	vmovdqa	16(%rsp),%xmm9
8028	vpxor	%xmm9,%xmm1,%xmm1
8029	vmovdqu	(%rcx),%xmm0
8030	vpxor	%xmm0,%xmm1,%xmm1
8031	vmovdqu	16(%rcx),%xmm0
8032	vaesdec	%xmm0,%xmm1,%xmm1
8033	vmovdqu	32(%rcx),%xmm0
8034	vaesdec	%xmm0,%xmm1,%xmm1
8035	vmovdqu	48(%rcx),%xmm0
8036	vaesdec	%xmm0,%xmm1,%xmm1
8037	vmovdqu	64(%rcx),%xmm0
8038	vaesdec	%xmm0,%xmm1,%xmm1
8039	vmovdqu	80(%rcx),%xmm0
8040	vaesdec	%xmm0,%xmm1,%xmm1
8041	vmovdqu	96(%rcx),%xmm0
8042	vaesdec	%xmm0,%xmm1,%xmm1
8043	vmovdqu	112(%rcx),%xmm0
8044	vaesdec	%xmm0,%xmm1,%xmm1
8045	vmovdqu	128(%rcx),%xmm0
8046	vaesdec	%xmm0,%xmm1,%xmm1
8047	vmovdqu	144(%rcx),%xmm0
8048	vaesdec	%xmm0,%xmm1,%xmm1
8049	vmovdqu	160(%rcx),%xmm0
8050	vaesdec	%xmm0,%xmm1,%xmm1
8051	vmovdqu	176(%rcx),%xmm0
8052	vaesdec	%xmm0,%xmm1,%xmm1
8053	vmovdqu	192(%rcx),%xmm0
8054	vaesdec	%xmm0,%xmm1,%xmm1
8055	vmovdqu	208(%rcx),%xmm0
8056	vaesdec	%xmm0,%xmm1,%xmm1
8057	vmovdqu	224(%rcx),%xmm0
8058	vaesdeclast	%xmm0,%xmm1,%xmm1
8059	vpxor	%xmm9,%xmm1,%xmm1
8060	addq	$0x10,%rsi
8061	vmovdqa	%xmm10,%xmm0
8062	vmovdqa	%xmm1,%xmm8
8063	jmp	.L_steal_cipher_EmbgEptodyewbFa
8064
8065.L_done_1_EmbgEptodyewbFa:
8066	vpxor	%xmm9,%xmm1,%xmm1
8067	vmovdqu	(%rcx),%xmm0
8068	vpxor	%xmm0,%xmm1,%xmm1
8069	vmovdqu	16(%rcx),%xmm0
8070	vaesdec	%xmm0,%xmm1,%xmm1
8071	vmovdqu	32(%rcx),%xmm0
8072	vaesdec	%xmm0,%xmm1,%xmm1
8073	vmovdqu	48(%rcx),%xmm0
8074	vaesdec	%xmm0,%xmm1,%xmm1
8075	vmovdqu	64(%rcx),%xmm0
8076	vaesdec	%xmm0,%xmm1,%xmm1
8077	vmovdqu	80(%rcx),%xmm0
8078	vaesdec	%xmm0,%xmm1,%xmm1
8079	vmovdqu	96(%rcx),%xmm0
8080	vaesdec	%xmm0,%xmm1,%xmm1
8081	vmovdqu	112(%rcx),%xmm0
8082	vaesdec	%xmm0,%xmm1,%xmm1
8083	vmovdqu	128(%rcx),%xmm0
8084	vaesdec	%xmm0,%xmm1,%xmm1
8085	vmovdqu	144(%rcx),%xmm0
8086	vaesdec	%xmm0,%xmm1,%xmm1
8087	vmovdqu	160(%rcx),%xmm0
8088	vaesdec	%xmm0,%xmm1,%xmm1
8089	vmovdqu	176(%rcx),%xmm0
8090	vaesdec	%xmm0,%xmm1,%xmm1
8091	vmovdqu	192(%rcx),%xmm0
8092	vaesdec	%xmm0,%xmm1,%xmm1
8093	vmovdqu	208(%rcx),%xmm0
8094	vaesdec	%xmm0,%xmm1,%xmm1
8095	vmovdqu	224(%rcx),%xmm0
8096	vaesdeclast	%xmm0,%xmm1,%xmm1
8097	vpxor	%xmm9,%xmm1,%xmm1
8098	addq	$0x10,%rsi
8099	vmovdqa	%xmm1,%xmm8
8100	jmp	.L_done_EmbgEptodyewbFa
8101.cfi_endproc
8102.section	.rodata
8103.align	16
8104
8105vpshufb_shf_table:
8106.quad	0x8786858483828100, 0x8f8e8d8c8b8a8988
8107.quad	0x0706050403020100, 0x000e0d0c0b0a0908
8108
8109mask1:
8110.quad	0x8080808080808080, 0x8080808080808080
8111
8112const_dq3210:
8113.quad	0, 0, 1, 1, 2, 2, 3, 3
8114const_dq5678:
8115.quad	8, 8, 7, 7, 6, 6, 5, 5
8116const_dq7654:
8117.quad	4, 4, 5, 5, 6, 6, 7, 7
8118const_dq1234:
8119.quad	4, 4, 3, 3, 2, 2, 1, 1
8120
8121shufb_15_7:
8122.byte	15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 7, 0xff, 0xff
8123.byte	0xff, 0xff, 0xff, 0xff, 0xff
8124
8125.text
8126	.section ".note.gnu.property", "a"
8127	.p2align 3
8128	.long 1f - 0f
8129	.long 4f - 1f
8130	.long 5
81310:
8132	# "GNU" encoded with .byte, since .asciz isn't supported
8133	# on Solaris.
8134	.byte 0x47
8135	.byte 0x4e
8136	.byte 0x55
8137	.byte 0
81381:
8139	.p2align 3
8140	.long 0xc0000002
8141	.long 3f - 2f
81422:
8143	.long 3
81443:
8145	.p2align 3
81464:
8147