aesni-mb-x86_64.S revision 305153
1/* $FreeBSD: stable/11/secure/lib/libcrypto/amd64/aesni-mb-x86_64.S 305153 2016-08-31 20:33:59Z jkim $ */
2/* Do not modify. This file is auto-generated from aesni-mb-x86_64.pl. */
3.text
4
5
6
7.globl	aesni_multi_cbc_encrypt
8.type	aesni_multi_cbc_encrypt,@function
9.align	32
10aesni_multi_cbc_encrypt:
11	cmpl	$2,%edx
12	jb	.Lenc_non_avx
13	movl	OPENSSL_ia32cap_P+4(%rip),%ecx
14	testl	$268435456,%ecx
15	jnz	_avx_cbc_enc_shortcut
16	jmp	.Lenc_non_avx
17.align	16
18.Lenc_non_avx:
19	movq	%rsp,%rax
20	pushq	%rbx
21	pushq	%rbp
22	pushq	%r12
23	pushq	%r13
24	pushq	%r14
25	pushq	%r15
26
27
28
29
30
31
32	subq	$48,%rsp
33	andq	$-64,%rsp
34	movq	%rax,16(%rsp)
35
36.Lenc4x_body:
37	movdqu	(%rsi),%xmm12
38	leaq	120(%rsi),%rsi
39	leaq	80(%rdi),%rdi
40
41.Lenc4x_loop_grande:
42	movl	%edx,24(%rsp)
43	xorl	%edx,%edx
44	movl	-64(%rdi),%ecx
45	movq	-80(%rdi),%r8
46	cmpl	%edx,%ecx
47	movq	-72(%rdi),%r12
48	cmovgl	%ecx,%edx
49	testl	%ecx,%ecx
50	movdqu	-56(%rdi),%xmm2
51	movl	%ecx,32(%rsp)
52	cmovleq	%rsp,%r8
53	movl	-24(%rdi),%ecx
54	movq	-40(%rdi),%r9
55	cmpl	%edx,%ecx
56	movq	-32(%rdi),%r13
57	cmovgl	%ecx,%edx
58	testl	%ecx,%ecx
59	movdqu	-16(%rdi),%xmm3
60	movl	%ecx,36(%rsp)
61	cmovleq	%rsp,%r9
62	movl	16(%rdi),%ecx
63	movq	0(%rdi),%r10
64	cmpl	%edx,%ecx
65	movq	8(%rdi),%r14
66	cmovgl	%ecx,%edx
67	testl	%ecx,%ecx
68	movdqu	24(%rdi),%xmm4
69	movl	%ecx,40(%rsp)
70	cmovleq	%rsp,%r10
71	movl	56(%rdi),%ecx
72	movq	40(%rdi),%r11
73	cmpl	%edx,%ecx
74	movq	48(%rdi),%r15
75	cmovgl	%ecx,%edx
76	testl	%ecx,%ecx
77	movdqu	64(%rdi),%xmm5
78	movl	%ecx,44(%rsp)
79	cmovleq	%rsp,%r11
80	testl	%edx,%edx
81	jz	.Lenc4x_done
82
83	movups	16-120(%rsi),%xmm1
84	pxor	%xmm12,%xmm2
85	movups	32-120(%rsi),%xmm0
86	pxor	%xmm12,%xmm3
87	movl	240-120(%rsi),%eax
88	pxor	%xmm12,%xmm4
89	movdqu	(%r8),%xmm6
90	pxor	%xmm12,%xmm5
91	movdqu	(%r9),%xmm7
92	pxor	%xmm6,%xmm2
93	movdqu	(%r10),%xmm8
94	pxor	%xmm7,%xmm3
95	movdqu	(%r11),%xmm9
96	pxor	%xmm8,%xmm4
97	pxor	%xmm9,%xmm5
98	movdqa	32(%rsp),%xmm10
99	xorq	%rbx,%rbx
100	jmp	.Loop_enc4x
101
102.align	32
103.Loop_enc4x:
104	addq	$16,%rbx
105	leaq	16(%rsp),%rbp
106	movl	$1,%ecx
107	subq	%rbx,%rbp
108
109.byte	102,15,56,220,209
110	prefetcht0	31(%r8,%rbx,1)
111	prefetcht0	31(%r9,%rbx,1)
112.byte	102,15,56,220,217
113	prefetcht0	31(%r10,%rbx,1)
114	prefetcht0	31(%r10,%rbx,1)
115.byte	102,15,56,220,225
116.byte	102,15,56,220,233
117	movups	48-120(%rsi),%xmm1
118	cmpl	32(%rsp),%ecx
119.byte	102,15,56,220,208
120.byte	102,15,56,220,216
121.byte	102,15,56,220,224
122	cmovgeq	%rbp,%r8
123	cmovgq	%rbp,%r12
124.byte	102,15,56,220,232
125	movups	-56(%rsi),%xmm0
126	cmpl	36(%rsp),%ecx
127.byte	102,15,56,220,209
128.byte	102,15,56,220,217
129.byte	102,15,56,220,225
130	cmovgeq	%rbp,%r9
131	cmovgq	%rbp,%r13
132.byte	102,15,56,220,233
133	movups	-40(%rsi),%xmm1
134	cmpl	40(%rsp),%ecx
135.byte	102,15,56,220,208
136.byte	102,15,56,220,216
137.byte	102,15,56,220,224
138	cmovgeq	%rbp,%r10
139	cmovgq	%rbp,%r14
140.byte	102,15,56,220,232
141	movups	-24(%rsi),%xmm0
142	cmpl	44(%rsp),%ecx
143.byte	102,15,56,220,209
144.byte	102,15,56,220,217
145.byte	102,15,56,220,225
146	cmovgeq	%rbp,%r11
147	cmovgq	%rbp,%r15
148.byte	102,15,56,220,233
149	movups	-8(%rsi),%xmm1
150	movdqa	%xmm10,%xmm11
151.byte	102,15,56,220,208
152	prefetcht0	15(%r12,%rbx,1)
153	prefetcht0	15(%r13,%rbx,1)
154.byte	102,15,56,220,216
155	prefetcht0	15(%r14,%rbx,1)
156	prefetcht0	15(%r15,%rbx,1)
157.byte	102,15,56,220,224
158.byte	102,15,56,220,232
159	movups	128-120(%rsi),%xmm0
160	pxor	%xmm12,%xmm12
161
162.byte	102,15,56,220,209
163	pcmpgtd	%xmm12,%xmm11
164	movdqu	-120(%rsi),%xmm12
165.byte	102,15,56,220,217
166	paddd	%xmm11,%xmm10
167	movdqa	%xmm10,32(%rsp)
168.byte	102,15,56,220,225
169.byte	102,15,56,220,233
170	movups	144-120(%rsi),%xmm1
171
172	cmpl	$11,%eax
173
174.byte	102,15,56,220,208
175.byte	102,15,56,220,216
176.byte	102,15,56,220,224
177.byte	102,15,56,220,232
178	movups	160-120(%rsi),%xmm0
179
180	jb	.Lenc4x_tail
181
182.byte	102,15,56,220,209
183.byte	102,15,56,220,217
184.byte	102,15,56,220,225
185.byte	102,15,56,220,233
186	movups	176-120(%rsi),%xmm1
187
188.byte	102,15,56,220,208
189.byte	102,15,56,220,216
190.byte	102,15,56,220,224
191.byte	102,15,56,220,232
192	movups	192-120(%rsi),%xmm0
193
194	je	.Lenc4x_tail
195
196.byte	102,15,56,220,209
197.byte	102,15,56,220,217
198.byte	102,15,56,220,225
199.byte	102,15,56,220,233
200	movups	208-120(%rsi),%xmm1
201
202.byte	102,15,56,220,208
203.byte	102,15,56,220,216
204.byte	102,15,56,220,224
205.byte	102,15,56,220,232
206	movups	224-120(%rsi),%xmm0
207	jmp	.Lenc4x_tail
208
209.align	32
210.Lenc4x_tail:
211.byte	102,15,56,220,209
212.byte	102,15,56,220,217
213.byte	102,15,56,220,225
214.byte	102,15,56,220,233
215	movdqu	(%r8,%rbx,1),%xmm6
216	movdqu	16-120(%rsi),%xmm1
217
218.byte	102,15,56,221,208
219	movdqu	(%r9,%rbx,1),%xmm7
220	pxor	%xmm12,%xmm6
221.byte	102,15,56,221,216
222	movdqu	(%r10,%rbx,1),%xmm8
223	pxor	%xmm12,%xmm7
224.byte	102,15,56,221,224
225	movdqu	(%r11,%rbx,1),%xmm9
226	pxor	%xmm12,%xmm8
227.byte	102,15,56,221,232
228	movdqu	32-120(%rsi),%xmm0
229	pxor	%xmm12,%xmm9
230
231	movups	%xmm2,-16(%r12,%rbx,1)
232	pxor	%xmm6,%xmm2
233	movups	%xmm3,-16(%r13,%rbx,1)
234	pxor	%xmm7,%xmm3
235	movups	%xmm4,-16(%r14,%rbx,1)
236	pxor	%xmm8,%xmm4
237	movups	%xmm5,-16(%r15,%rbx,1)
238	pxor	%xmm9,%xmm5
239
240	decl	%edx
241	jnz	.Loop_enc4x
242
243	movq	16(%rsp),%rax
244	movl	24(%rsp),%edx
245
246
247
248
249
250
251
252
253
254
255	leaq	160(%rdi),%rdi
256	decl	%edx
257	jnz	.Lenc4x_loop_grande
258
259.Lenc4x_done:
260	movq	-48(%rax),%r15
261	movq	-40(%rax),%r14
262	movq	-32(%rax),%r13
263	movq	-24(%rax),%r12
264	movq	-16(%rax),%rbp
265	movq	-8(%rax),%rbx
266	leaq	(%rax),%rsp
267.Lenc4x_epilogue:
268	.byte	0xf3,0xc3
269.size	aesni_multi_cbc_encrypt,.-aesni_multi_cbc_encrypt
270
271.globl	aesni_multi_cbc_decrypt
272.type	aesni_multi_cbc_decrypt,@function
273.align	32
274aesni_multi_cbc_decrypt:
275	cmpl	$2,%edx
276	jb	.Ldec_non_avx
277	movl	OPENSSL_ia32cap_P+4(%rip),%ecx
278	testl	$268435456,%ecx
279	jnz	_avx_cbc_dec_shortcut
280	jmp	.Ldec_non_avx
281.align	16
282.Ldec_non_avx:
283	movq	%rsp,%rax
284	pushq	%rbx
285	pushq	%rbp
286	pushq	%r12
287	pushq	%r13
288	pushq	%r14
289	pushq	%r15
290
291
292
293
294
295
296	subq	$48,%rsp
297	andq	$-64,%rsp
298	movq	%rax,16(%rsp)
299
300.Ldec4x_body:
301	movdqu	(%rsi),%xmm12
302	leaq	120(%rsi),%rsi
303	leaq	80(%rdi),%rdi
304
305.Ldec4x_loop_grande:
306	movl	%edx,24(%rsp)
307	xorl	%edx,%edx
308	movl	-64(%rdi),%ecx
309	movq	-80(%rdi),%r8
310	cmpl	%edx,%ecx
311	movq	-72(%rdi),%r12
312	cmovgl	%ecx,%edx
313	testl	%ecx,%ecx
314	movdqu	-56(%rdi),%xmm6
315	movl	%ecx,32(%rsp)
316	cmovleq	%rsp,%r8
317	movl	-24(%rdi),%ecx
318	movq	-40(%rdi),%r9
319	cmpl	%edx,%ecx
320	movq	-32(%rdi),%r13
321	cmovgl	%ecx,%edx
322	testl	%ecx,%ecx
323	movdqu	-16(%rdi),%xmm7
324	movl	%ecx,36(%rsp)
325	cmovleq	%rsp,%r9
326	movl	16(%rdi),%ecx
327	movq	0(%rdi),%r10
328	cmpl	%edx,%ecx
329	movq	8(%rdi),%r14
330	cmovgl	%ecx,%edx
331	testl	%ecx,%ecx
332	movdqu	24(%rdi),%xmm8
333	movl	%ecx,40(%rsp)
334	cmovleq	%rsp,%r10
335	movl	56(%rdi),%ecx
336	movq	40(%rdi),%r11
337	cmpl	%edx,%ecx
338	movq	48(%rdi),%r15
339	cmovgl	%ecx,%edx
340	testl	%ecx,%ecx
341	movdqu	64(%rdi),%xmm9
342	movl	%ecx,44(%rsp)
343	cmovleq	%rsp,%r11
344	testl	%edx,%edx
345	jz	.Ldec4x_done
346
347	movups	16-120(%rsi),%xmm1
348	movups	32-120(%rsi),%xmm0
349	movl	240-120(%rsi),%eax
350	movdqu	(%r8),%xmm2
351	movdqu	(%r9),%xmm3
352	pxor	%xmm12,%xmm2
353	movdqu	(%r10),%xmm4
354	pxor	%xmm12,%xmm3
355	movdqu	(%r11),%xmm5
356	pxor	%xmm12,%xmm4
357	pxor	%xmm12,%xmm5
358	movdqa	32(%rsp),%xmm10
359	xorq	%rbx,%rbx
360	jmp	.Loop_dec4x
361
362.align	32
363.Loop_dec4x:
364	addq	$16,%rbx
365	leaq	16(%rsp),%rbp
366	movl	$1,%ecx
367	subq	%rbx,%rbp
368
369.byte	102,15,56,222,209
370	prefetcht0	31(%r8,%rbx,1)
371	prefetcht0	31(%r9,%rbx,1)
372.byte	102,15,56,222,217
373	prefetcht0	31(%r10,%rbx,1)
374	prefetcht0	31(%r11,%rbx,1)
375.byte	102,15,56,222,225
376.byte	102,15,56,222,233
377	movups	48-120(%rsi),%xmm1
378	cmpl	32(%rsp),%ecx
379.byte	102,15,56,222,208
380.byte	102,15,56,222,216
381.byte	102,15,56,222,224
382	cmovgeq	%rbp,%r8
383	cmovgq	%rbp,%r12
384.byte	102,15,56,222,232
385	movups	-56(%rsi),%xmm0
386	cmpl	36(%rsp),%ecx
387.byte	102,15,56,222,209
388.byte	102,15,56,222,217
389.byte	102,15,56,222,225
390	cmovgeq	%rbp,%r9
391	cmovgq	%rbp,%r13
392.byte	102,15,56,222,233
393	movups	-40(%rsi),%xmm1
394	cmpl	40(%rsp),%ecx
395.byte	102,15,56,222,208
396.byte	102,15,56,222,216
397.byte	102,15,56,222,224
398	cmovgeq	%rbp,%r10
399	cmovgq	%rbp,%r14
400.byte	102,15,56,222,232
401	movups	-24(%rsi),%xmm0
402	cmpl	44(%rsp),%ecx
403.byte	102,15,56,222,209
404.byte	102,15,56,222,217
405.byte	102,15,56,222,225
406	cmovgeq	%rbp,%r11
407	cmovgq	%rbp,%r15
408.byte	102,15,56,222,233
409	movups	-8(%rsi),%xmm1
410	movdqa	%xmm10,%xmm11
411.byte	102,15,56,222,208
412	prefetcht0	15(%r12,%rbx,1)
413	prefetcht0	15(%r13,%rbx,1)
414.byte	102,15,56,222,216
415	prefetcht0	15(%r14,%rbx,1)
416	prefetcht0	15(%r15,%rbx,1)
417.byte	102,15,56,222,224
418.byte	102,15,56,222,232
419	movups	128-120(%rsi),%xmm0
420	pxor	%xmm12,%xmm12
421
422.byte	102,15,56,222,209
423	pcmpgtd	%xmm12,%xmm11
424	movdqu	-120(%rsi),%xmm12
425.byte	102,15,56,222,217
426	paddd	%xmm11,%xmm10
427	movdqa	%xmm10,32(%rsp)
428.byte	102,15,56,222,225
429.byte	102,15,56,222,233
430	movups	144-120(%rsi),%xmm1
431
432	cmpl	$11,%eax
433
434.byte	102,15,56,222,208
435.byte	102,15,56,222,216
436.byte	102,15,56,222,224
437.byte	102,15,56,222,232
438	movups	160-120(%rsi),%xmm0
439
440	jb	.Ldec4x_tail
441
442.byte	102,15,56,222,209
443.byte	102,15,56,222,217
444.byte	102,15,56,222,225
445.byte	102,15,56,222,233
446	movups	176-120(%rsi),%xmm1
447
448.byte	102,15,56,222,208
449.byte	102,15,56,222,216
450.byte	102,15,56,222,224
451.byte	102,15,56,222,232
452	movups	192-120(%rsi),%xmm0
453
454	je	.Ldec4x_tail
455
456.byte	102,15,56,222,209
457.byte	102,15,56,222,217
458.byte	102,15,56,222,225
459.byte	102,15,56,222,233
460	movups	208-120(%rsi),%xmm1
461
462.byte	102,15,56,222,208
463.byte	102,15,56,222,216
464.byte	102,15,56,222,224
465.byte	102,15,56,222,232
466	movups	224-120(%rsi),%xmm0
467	jmp	.Ldec4x_tail
468
469.align	32
470.Ldec4x_tail:
471.byte	102,15,56,222,209
472.byte	102,15,56,222,217
473.byte	102,15,56,222,225
474	pxor	%xmm0,%xmm6
475	pxor	%xmm0,%xmm7
476.byte	102,15,56,222,233
477	movdqu	16-120(%rsi),%xmm1
478	pxor	%xmm0,%xmm8
479	pxor	%xmm0,%xmm9
480	movdqu	32-120(%rsi),%xmm0
481
482.byte	102,15,56,223,214
483.byte	102,15,56,223,223
484	movdqu	-16(%r8,%rbx,1),%xmm6
485	movdqu	-16(%r9,%rbx,1),%xmm7
486.byte	102,65,15,56,223,224
487.byte	102,65,15,56,223,233
488	movdqu	-16(%r10,%rbx,1),%xmm8
489	movdqu	-16(%r11,%rbx,1),%xmm9
490
491	movups	%xmm2,-16(%r12,%rbx,1)
492	movdqu	(%r8,%rbx,1),%xmm2
493	movups	%xmm3,-16(%r13,%rbx,1)
494	movdqu	(%r9,%rbx,1),%xmm3
495	pxor	%xmm12,%xmm2
496	movups	%xmm4,-16(%r14,%rbx,1)
497	movdqu	(%r10,%rbx,1),%xmm4
498	pxor	%xmm12,%xmm3
499	movups	%xmm5,-16(%r15,%rbx,1)
500	movdqu	(%r11,%rbx,1),%xmm5
501	pxor	%xmm12,%xmm4
502	pxor	%xmm12,%xmm5
503
504	decl	%edx
505	jnz	.Loop_dec4x
506
507	movq	16(%rsp),%rax
508	movl	24(%rsp),%edx
509
510	leaq	160(%rdi),%rdi
511	decl	%edx
512	jnz	.Ldec4x_loop_grande
513
514.Ldec4x_done:
515	movq	-48(%rax),%r15
516	movq	-40(%rax),%r14
517	movq	-32(%rax),%r13
518	movq	-24(%rax),%r12
519	movq	-16(%rax),%rbp
520	movq	-8(%rax),%rbx
521	leaq	(%rax),%rsp
522.Ldec4x_epilogue:
523	.byte	0xf3,0xc3
524.size	aesni_multi_cbc_decrypt,.-aesni_multi_cbc_decrypt
525.type	aesni_multi_cbc_encrypt_avx,@function
526.align	32
527aesni_multi_cbc_encrypt_avx:
528_avx_cbc_enc_shortcut:
529	movq	%rsp,%rax
530	pushq	%rbx
531	pushq	%rbp
532	pushq	%r12
533	pushq	%r13
534	pushq	%r14
535	pushq	%r15
536
537
538
539
540
541
542
543
544	subq	$192,%rsp
545	andq	$-128,%rsp
546	movq	%rax,16(%rsp)
547
548.Lenc8x_body:
549	vzeroupper
550	vmovdqu	(%rsi),%xmm15
551	leaq	120(%rsi),%rsi
552	leaq	160(%rdi),%rdi
553	shrl	$1,%edx
554
555.Lenc8x_loop_grande:
556
557	xorl	%edx,%edx
558	movl	-144(%rdi),%ecx
559	movq	-160(%rdi),%r8
560	cmpl	%edx,%ecx
561	movq	-152(%rdi),%rbx
562	cmovgl	%ecx,%edx
563	testl	%ecx,%ecx
564	vmovdqu	-136(%rdi),%xmm2
565	movl	%ecx,32(%rsp)
566	cmovleq	%rsp,%r8
567	subq	%r8,%rbx
568	movq	%rbx,64(%rsp)
569	movl	-104(%rdi),%ecx
570	movq	-120(%rdi),%r9
571	cmpl	%edx,%ecx
572	movq	-112(%rdi),%rbp
573	cmovgl	%ecx,%edx
574	testl	%ecx,%ecx
575	vmovdqu	-96(%rdi),%xmm3
576	movl	%ecx,36(%rsp)
577	cmovleq	%rsp,%r9
578	subq	%r9,%rbp
579	movq	%rbp,72(%rsp)
580	movl	-64(%rdi),%ecx
581	movq	-80(%rdi),%r10
582	cmpl	%edx,%ecx
583	movq	-72(%rdi),%rbp
584	cmovgl	%ecx,%edx
585	testl	%ecx,%ecx
586	vmovdqu	-56(%rdi),%xmm4
587	movl	%ecx,40(%rsp)
588	cmovleq	%rsp,%r10
589	subq	%r10,%rbp
590	movq	%rbp,80(%rsp)
591	movl	-24(%rdi),%ecx
592	movq	-40(%rdi),%r11
593	cmpl	%edx,%ecx
594	movq	-32(%rdi),%rbp
595	cmovgl	%ecx,%edx
596	testl	%ecx,%ecx
597	vmovdqu	-16(%rdi),%xmm5
598	movl	%ecx,44(%rsp)
599	cmovleq	%rsp,%r11
600	subq	%r11,%rbp
601	movq	%rbp,88(%rsp)
602	movl	16(%rdi),%ecx
603	movq	0(%rdi),%r12
604	cmpl	%edx,%ecx
605	movq	8(%rdi),%rbp
606	cmovgl	%ecx,%edx
607	testl	%ecx,%ecx
608	vmovdqu	24(%rdi),%xmm6
609	movl	%ecx,48(%rsp)
610	cmovleq	%rsp,%r12
611	subq	%r12,%rbp
612	movq	%rbp,96(%rsp)
613	movl	56(%rdi),%ecx
614	movq	40(%rdi),%r13
615	cmpl	%edx,%ecx
616	movq	48(%rdi),%rbp
617	cmovgl	%ecx,%edx
618	testl	%ecx,%ecx
619	vmovdqu	64(%rdi),%xmm7
620	movl	%ecx,52(%rsp)
621	cmovleq	%rsp,%r13
622	subq	%r13,%rbp
623	movq	%rbp,104(%rsp)
624	movl	96(%rdi),%ecx
625	movq	80(%rdi),%r14
626	cmpl	%edx,%ecx
627	movq	88(%rdi),%rbp
628	cmovgl	%ecx,%edx
629	testl	%ecx,%ecx
630	vmovdqu	104(%rdi),%xmm8
631	movl	%ecx,56(%rsp)
632	cmovleq	%rsp,%r14
633	subq	%r14,%rbp
634	movq	%rbp,112(%rsp)
635	movl	136(%rdi),%ecx
636	movq	120(%rdi),%r15
637	cmpl	%edx,%ecx
638	movq	128(%rdi),%rbp
639	cmovgl	%ecx,%edx
640	testl	%ecx,%ecx
641	vmovdqu	144(%rdi),%xmm9
642	movl	%ecx,60(%rsp)
643	cmovleq	%rsp,%r15
644	subq	%r15,%rbp
645	movq	%rbp,120(%rsp)
646	testl	%edx,%edx
647	jz	.Lenc8x_done
648
649	vmovups	16-120(%rsi),%xmm1
650	vmovups	32-120(%rsi),%xmm0
651	movl	240-120(%rsi),%eax
652
653	vpxor	(%r8),%xmm15,%xmm10
654	leaq	128(%rsp),%rbp
655	vpxor	(%r9),%xmm15,%xmm11
656	vpxor	(%r10),%xmm15,%xmm12
657	vpxor	(%r11),%xmm15,%xmm13
658	vpxor	%xmm10,%xmm2,%xmm2
659	vpxor	(%r12),%xmm15,%xmm10
660	vpxor	%xmm11,%xmm3,%xmm3
661	vpxor	(%r13),%xmm15,%xmm11
662	vpxor	%xmm12,%xmm4,%xmm4
663	vpxor	(%r14),%xmm15,%xmm12
664	vpxor	%xmm13,%xmm5,%xmm5
665	vpxor	(%r15),%xmm15,%xmm13
666	vpxor	%xmm10,%xmm6,%xmm6
667	movl	$1,%ecx
668	vpxor	%xmm11,%xmm7,%xmm7
669	vpxor	%xmm12,%xmm8,%xmm8
670	vpxor	%xmm13,%xmm9,%xmm9
671	jmp	.Loop_enc8x
672
673.align	32
674.Loop_enc8x:
675	vaesenc	%xmm1,%xmm2,%xmm2
676	cmpl	32+0(%rsp),%ecx
677	vaesenc	%xmm1,%xmm3,%xmm3
678	prefetcht0	31(%r8)
679	vaesenc	%xmm1,%xmm4,%xmm4
680	vaesenc	%xmm1,%xmm5,%xmm5
681	leaq	(%r8,%rbx,1),%rbx
682	cmovgeq	%rsp,%r8
683	vaesenc	%xmm1,%xmm6,%xmm6
684	cmovgq	%rsp,%rbx
685	vaesenc	%xmm1,%xmm7,%xmm7
686	subq	%r8,%rbx
687	vaesenc	%xmm1,%xmm8,%xmm8
688	vpxor	16(%r8),%xmm15,%xmm10
689	movq	%rbx,64+0(%rsp)
690	vaesenc	%xmm1,%xmm9,%xmm9
691	vmovups	-72(%rsi),%xmm1
692	leaq	16(%r8,%rbx,1),%r8
693	vmovdqu	%xmm10,0(%rbp)
694	vaesenc	%xmm0,%xmm2,%xmm2
695	cmpl	32+4(%rsp),%ecx
696	movq	64+8(%rsp),%rbx
697	vaesenc	%xmm0,%xmm3,%xmm3
698	prefetcht0	31(%r9)
699	vaesenc	%xmm0,%xmm4,%xmm4
700	vaesenc	%xmm0,%xmm5,%xmm5
701	leaq	(%r9,%rbx,1),%rbx
702	cmovgeq	%rsp,%r9
703	vaesenc	%xmm0,%xmm6,%xmm6
704	cmovgq	%rsp,%rbx
705	vaesenc	%xmm0,%xmm7,%xmm7
706	subq	%r9,%rbx
707	vaesenc	%xmm0,%xmm8,%xmm8
708	vpxor	16(%r9),%xmm15,%xmm11
709	movq	%rbx,64+8(%rsp)
710	vaesenc	%xmm0,%xmm9,%xmm9
711	vmovups	-56(%rsi),%xmm0
712	leaq	16(%r9,%rbx,1),%r9
713	vmovdqu	%xmm11,16(%rbp)
714	vaesenc	%xmm1,%xmm2,%xmm2
715	cmpl	32+8(%rsp),%ecx
716	movq	64+16(%rsp),%rbx
717	vaesenc	%xmm1,%xmm3,%xmm3
718	prefetcht0	31(%r10)
719	vaesenc	%xmm1,%xmm4,%xmm4
720	prefetcht0	15(%r8)
721	vaesenc	%xmm1,%xmm5,%xmm5
722	leaq	(%r10,%rbx,1),%rbx
723	cmovgeq	%rsp,%r10
724	vaesenc	%xmm1,%xmm6,%xmm6
725	cmovgq	%rsp,%rbx
726	vaesenc	%xmm1,%xmm7,%xmm7
727	subq	%r10,%rbx
728	vaesenc	%xmm1,%xmm8,%xmm8
729	vpxor	16(%r10),%xmm15,%xmm12
730	movq	%rbx,64+16(%rsp)
731	vaesenc	%xmm1,%xmm9,%xmm9
732	vmovups	-40(%rsi),%xmm1
733	leaq	16(%r10,%rbx,1),%r10
734	vmovdqu	%xmm12,32(%rbp)
735	vaesenc	%xmm0,%xmm2,%xmm2
736	cmpl	32+12(%rsp),%ecx
737	movq	64+24(%rsp),%rbx
738	vaesenc	%xmm0,%xmm3,%xmm3
739	prefetcht0	31(%r11)
740	vaesenc	%xmm0,%xmm4,%xmm4
741	prefetcht0	15(%r9)
742	vaesenc	%xmm0,%xmm5,%xmm5
743	leaq	(%r11,%rbx,1),%rbx
744	cmovgeq	%rsp,%r11
745	vaesenc	%xmm0,%xmm6,%xmm6
746	cmovgq	%rsp,%rbx
747	vaesenc	%xmm0,%xmm7,%xmm7
748	subq	%r11,%rbx
749	vaesenc	%xmm0,%xmm8,%xmm8
750	vpxor	16(%r11),%xmm15,%xmm13
751	movq	%rbx,64+24(%rsp)
752	vaesenc	%xmm0,%xmm9,%xmm9
753	vmovups	-24(%rsi),%xmm0
754	leaq	16(%r11,%rbx,1),%r11
755	vmovdqu	%xmm13,48(%rbp)
756	vaesenc	%xmm1,%xmm2,%xmm2
757	cmpl	32+16(%rsp),%ecx
758	movq	64+32(%rsp),%rbx
759	vaesenc	%xmm1,%xmm3,%xmm3
760	prefetcht0	31(%r12)
761	vaesenc	%xmm1,%xmm4,%xmm4
762	prefetcht0	15(%r10)
763	vaesenc	%xmm1,%xmm5,%xmm5
764	leaq	(%r12,%rbx,1),%rbx
765	cmovgeq	%rsp,%r12
766	vaesenc	%xmm1,%xmm6,%xmm6
767	cmovgq	%rsp,%rbx
768	vaesenc	%xmm1,%xmm7,%xmm7
769	subq	%r12,%rbx
770	vaesenc	%xmm1,%xmm8,%xmm8
771	vpxor	16(%r12),%xmm15,%xmm10
772	movq	%rbx,64+32(%rsp)
773	vaesenc	%xmm1,%xmm9,%xmm9
774	vmovups	-8(%rsi),%xmm1
775	leaq	16(%r12,%rbx,1),%r12
776	vaesenc	%xmm0,%xmm2,%xmm2
777	cmpl	32+20(%rsp),%ecx
778	movq	64+40(%rsp),%rbx
779	vaesenc	%xmm0,%xmm3,%xmm3
780	prefetcht0	31(%r13)
781	vaesenc	%xmm0,%xmm4,%xmm4
782	prefetcht0	15(%r11)
783	vaesenc	%xmm0,%xmm5,%xmm5
784	leaq	(%rbx,%r13,1),%rbx
785	cmovgeq	%rsp,%r13
786	vaesenc	%xmm0,%xmm6,%xmm6
787	cmovgq	%rsp,%rbx
788	vaesenc	%xmm0,%xmm7,%xmm7
789	subq	%r13,%rbx
790	vaesenc	%xmm0,%xmm8,%xmm8
791	vpxor	16(%r13),%xmm15,%xmm11
792	movq	%rbx,64+40(%rsp)
793	vaesenc	%xmm0,%xmm9,%xmm9
794	vmovups	8(%rsi),%xmm0
795	leaq	16(%r13,%rbx,1),%r13
796	vaesenc	%xmm1,%xmm2,%xmm2
797	cmpl	32+24(%rsp),%ecx
798	movq	64+48(%rsp),%rbx
799	vaesenc	%xmm1,%xmm3,%xmm3
800	prefetcht0	31(%r14)
801	vaesenc	%xmm1,%xmm4,%xmm4
802	prefetcht0	15(%r12)
803	vaesenc	%xmm1,%xmm5,%xmm5
804	leaq	(%r14,%rbx,1),%rbx
805	cmovgeq	%rsp,%r14
806	vaesenc	%xmm1,%xmm6,%xmm6
807	cmovgq	%rsp,%rbx
808	vaesenc	%xmm1,%xmm7,%xmm7
809	subq	%r14,%rbx
810	vaesenc	%xmm1,%xmm8,%xmm8
811	vpxor	16(%r14),%xmm15,%xmm12
812	movq	%rbx,64+48(%rsp)
813	vaesenc	%xmm1,%xmm9,%xmm9
814	vmovups	24(%rsi),%xmm1
815	leaq	16(%r14,%rbx,1),%r14
816	vaesenc	%xmm0,%xmm2,%xmm2
817	cmpl	32+28(%rsp),%ecx
818	movq	64+56(%rsp),%rbx
819	vaesenc	%xmm0,%xmm3,%xmm3
820	prefetcht0	31(%r15)
821	vaesenc	%xmm0,%xmm4,%xmm4
822	prefetcht0	15(%r13)
823	vaesenc	%xmm0,%xmm5,%xmm5
824	leaq	(%r15,%rbx,1),%rbx
825	cmovgeq	%rsp,%r15
826	vaesenc	%xmm0,%xmm6,%xmm6
827	cmovgq	%rsp,%rbx
828	vaesenc	%xmm0,%xmm7,%xmm7
829	subq	%r15,%rbx
830	vaesenc	%xmm0,%xmm8,%xmm8
831	vpxor	16(%r15),%xmm15,%xmm13
832	movq	%rbx,64+56(%rsp)
833	vaesenc	%xmm0,%xmm9,%xmm9
834	vmovups	40(%rsi),%xmm0
835	leaq	16(%r15,%rbx,1),%r15
836	vmovdqu	32(%rsp),%xmm14
837	prefetcht0	15(%r14)
838	prefetcht0	15(%r15)
839	cmpl	$11,%eax
840	jb	.Lenc8x_tail
841
842	vaesenc	%xmm1,%xmm2,%xmm2
843	vaesenc	%xmm1,%xmm3,%xmm3
844	vaesenc	%xmm1,%xmm4,%xmm4
845	vaesenc	%xmm1,%xmm5,%xmm5
846	vaesenc	%xmm1,%xmm6,%xmm6
847	vaesenc	%xmm1,%xmm7,%xmm7
848	vaesenc	%xmm1,%xmm8,%xmm8
849	vaesenc	%xmm1,%xmm9,%xmm9
850	vmovups	176-120(%rsi),%xmm1
851
852	vaesenc	%xmm0,%xmm2,%xmm2
853	vaesenc	%xmm0,%xmm3,%xmm3
854	vaesenc	%xmm0,%xmm4,%xmm4
855	vaesenc	%xmm0,%xmm5,%xmm5
856	vaesenc	%xmm0,%xmm6,%xmm6
857	vaesenc	%xmm0,%xmm7,%xmm7
858	vaesenc	%xmm0,%xmm8,%xmm8
859	vaesenc	%xmm0,%xmm9,%xmm9
860	vmovups	192-120(%rsi),%xmm0
861	je	.Lenc8x_tail
862
863	vaesenc	%xmm1,%xmm2,%xmm2
864	vaesenc	%xmm1,%xmm3,%xmm3
865	vaesenc	%xmm1,%xmm4,%xmm4
866	vaesenc	%xmm1,%xmm5,%xmm5
867	vaesenc	%xmm1,%xmm6,%xmm6
868	vaesenc	%xmm1,%xmm7,%xmm7
869	vaesenc	%xmm1,%xmm8,%xmm8
870	vaesenc	%xmm1,%xmm9,%xmm9
871	vmovups	208-120(%rsi),%xmm1
872
873	vaesenc	%xmm0,%xmm2,%xmm2
874	vaesenc	%xmm0,%xmm3,%xmm3
875	vaesenc	%xmm0,%xmm4,%xmm4
876	vaesenc	%xmm0,%xmm5,%xmm5
877	vaesenc	%xmm0,%xmm6,%xmm6
878	vaesenc	%xmm0,%xmm7,%xmm7
879	vaesenc	%xmm0,%xmm8,%xmm8
880	vaesenc	%xmm0,%xmm9,%xmm9
881	vmovups	224-120(%rsi),%xmm0
882
883.Lenc8x_tail:
884	vaesenc	%xmm1,%xmm2,%xmm2
885	vpxor	%xmm15,%xmm15,%xmm15
886	vaesenc	%xmm1,%xmm3,%xmm3
887	vaesenc	%xmm1,%xmm4,%xmm4
888	vpcmpgtd	%xmm15,%xmm14,%xmm15
889	vaesenc	%xmm1,%xmm5,%xmm5
890	vaesenc	%xmm1,%xmm6,%xmm6
891	vpaddd	%xmm14,%xmm15,%xmm15
892	vmovdqu	48(%rsp),%xmm14
893	vaesenc	%xmm1,%xmm7,%xmm7
894	movq	64(%rsp),%rbx
895	vaesenc	%xmm1,%xmm8,%xmm8
896	vaesenc	%xmm1,%xmm9,%xmm9
897	vmovups	16-120(%rsi),%xmm1
898
899	vaesenclast	%xmm0,%xmm2,%xmm2
900	vmovdqa	%xmm15,32(%rsp)
901	vpxor	%xmm15,%xmm15,%xmm15
902	vaesenclast	%xmm0,%xmm3,%xmm3
903	vaesenclast	%xmm0,%xmm4,%xmm4
904	vpcmpgtd	%xmm15,%xmm14,%xmm15
905	vaesenclast	%xmm0,%xmm5,%xmm5
906	vaesenclast	%xmm0,%xmm6,%xmm6
907	vpaddd	%xmm15,%xmm14,%xmm14
908	vmovdqu	-120(%rsi),%xmm15
909	vaesenclast	%xmm0,%xmm7,%xmm7
910	vaesenclast	%xmm0,%xmm8,%xmm8
911	vmovdqa	%xmm14,48(%rsp)
912	vaesenclast	%xmm0,%xmm9,%xmm9
913	vmovups	32-120(%rsi),%xmm0
914
915	vmovups	%xmm2,-16(%r8)
916	subq	%rbx,%r8
917	vpxor	0(%rbp),%xmm2,%xmm2
918	vmovups	%xmm3,-16(%r9)
919	subq	72(%rsp),%r9
920	vpxor	16(%rbp),%xmm3,%xmm3
921	vmovups	%xmm4,-16(%r10)
922	subq	80(%rsp),%r10
923	vpxor	32(%rbp),%xmm4,%xmm4
924	vmovups	%xmm5,-16(%r11)
925	subq	88(%rsp),%r11
926	vpxor	48(%rbp),%xmm5,%xmm5
927	vmovups	%xmm6,-16(%r12)
928	subq	96(%rsp),%r12
929	vpxor	%xmm10,%xmm6,%xmm6
930	vmovups	%xmm7,-16(%r13)
931	subq	104(%rsp),%r13
932	vpxor	%xmm11,%xmm7,%xmm7
933	vmovups	%xmm8,-16(%r14)
934	subq	112(%rsp),%r14
935	vpxor	%xmm12,%xmm8,%xmm8
936	vmovups	%xmm9,-16(%r15)
937	subq	120(%rsp),%r15
938	vpxor	%xmm13,%xmm9,%xmm9
939
940	decl	%edx
941	jnz	.Loop_enc8x
942
943	movq	16(%rsp),%rax
944
945
946
947
948
949.Lenc8x_done:
950	vzeroupper
951	movq	-48(%rax),%r15
952	movq	-40(%rax),%r14
953	movq	-32(%rax),%r13
954	movq	-24(%rax),%r12
955	movq	-16(%rax),%rbp
956	movq	-8(%rax),%rbx
957	leaq	(%rax),%rsp
958.Lenc8x_epilogue:
959	.byte	0xf3,0xc3
960.size	aesni_multi_cbc_encrypt_avx,.-aesni_multi_cbc_encrypt_avx
961
962.type	aesni_multi_cbc_decrypt_avx,@function
963.align	32
964aesni_multi_cbc_decrypt_avx:
965_avx_cbc_dec_shortcut:
966	movq	%rsp,%rax
967	pushq	%rbx
968	pushq	%rbp
969	pushq	%r12
970	pushq	%r13
971	pushq	%r14
972	pushq	%r15
973
974
975
976
977
978
979
980
981
982	subq	$256,%rsp
983	andq	$-256,%rsp
984	subq	$192,%rsp
985	movq	%rax,16(%rsp)
986
987.Ldec8x_body:
988	vzeroupper
989	vmovdqu	(%rsi),%xmm15
990	leaq	120(%rsi),%rsi
991	leaq	160(%rdi),%rdi
992	shrl	$1,%edx
993
994.Ldec8x_loop_grande:
995
996	xorl	%edx,%edx
997	movl	-144(%rdi),%ecx
998	movq	-160(%rdi),%r8
999	cmpl	%edx,%ecx
1000	movq	-152(%rdi),%rbx
1001	cmovgl	%ecx,%edx
1002	testl	%ecx,%ecx
1003	vmovdqu	-136(%rdi),%xmm2
1004	movl	%ecx,32(%rsp)
1005	cmovleq	%rsp,%r8
1006	subq	%r8,%rbx
1007	movq	%rbx,64(%rsp)
1008	vmovdqu	%xmm2,192(%rsp)
1009	movl	-104(%rdi),%ecx
1010	movq	-120(%rdi),%r9
1011	cmpl	%edx,%ecx
1012	movq	-112(%rdi),%rbp
1013	cmovgl	%ecx,%edx
1014	testl	%ecx,%ecx
1015	vmovdqu	-96(%rdi),%xmm3
1016	movl	%ecx,36(%rsp)
1017	cmovleq	%rsp,%r9
1018	subq	%r9,%rbp
1019	movq	%rbp,72(%rsp)
1020	vmovdqu	%xmm3,208(%rsp)
1021	movl	-64(%rdi),%ecx
1022	movq	-80(%rdi),%r10
1023	cmpl	%edx,%ecx
1024	movq	-72(%rdi),%rbp
1025	cmovgl	%ecx,%edx
1026	testl	%ecx,%ecx
1027	vmovdqu	-56(%rdi),%xmm4
1028	movl	%ecx,40(%rsp)
1029	cmovleq	%rsp,%r10
1030	subq	%r10,%rbp
1031	movq	%rbp,80(%rsp)
1032	vmovdqu	%xmm4,224(%rsp)
1033	movl	-24(%rdi),%ecx
1034	movq	-40(%rdi),%r11
1035	cmpl	%edx,%ecx
1036	movq	-32(%rdi),%rbp
1037	cmovgl	%ecx,%edx
1038	testl	%ecx,%ecx
1039	vmovdqu	-16(%rdi),%xmm5
1040	movl	%ecx,44(%rsp)
1041	cmovleq	%rsp,%r11
1042	subq	%r11,%rbp
1043	movq	%rbp,88(%rsp)
1044	vmovdqu	%xmm5,240(%rsp)
1045	movl	16(%rdi),%ecx
1046	movq	0(%rdi),%r12
1047	cmpl	%edx,%ecx
1048	movq	8(%rdi),%rbp
1049	cmovgl	%ecx,%edx
1050	testl	%ecx,%ecx
1051	vmovdqu	24(%rdi),%xmm6
1052	movl	%ecx,48(%rsp)
1053	cmovleq	%rsp,%r12
1054	subq	%r12,%rbp
1055	movq	%rbp,96(%rsp)
1056	vmovdqu	%xmm6,256(%rsp)
1057	movl	56(%rdi),%ecx
1058	movq	40(%rdi),%r13
1059	cmpl	%edx,%ecx
1060	movq	48(%rdi),%rbp
1061	cmovgl	%ecx,%edx
1062	testl	%ecx,%ecx
1063	vmovdqu	64(%rdi),%xmm7
1064	movl	%ecx,52(%rsp)
1065	cmovleq	%rsp,%r13
1066	subq	%r13,%rbp
1067	movq	%rbp,104(%rsp)
1068	vmovdqu	%xmm7,272(%rsp)
1069	movl	96(%rdi),%ecx
1070	movq	80(%rdi),%r14
1071	cmpl	%edx,%ecx
1072	movq	88(%rdi),%rbp
1073	cmovgl	%ecx,%edx
1074	testl	%ecx,%ecx
1075	vmovdqu	104(%rdi),%xmm8
1076	movl	%ecx,56(%rsp)
1077	cmovleq	%rsp,%r14
1078	subq	%r14,%rbp
1079	movq	%rbp,112(%rsp)
1080	vmovdqu	%xmm8,288(%rsp)
1081	movl	136(%rdi),%ecx
1082	movq	120(%rdi),%r15
1083	cmpl	%edx,%ecx
1084	movq	128(%rdi),%rbp
1085	cmovgl	%ecx,%edx
1086	testl	%ecx,%ecx
1087	vmovdqu	144(%rdi),%xmm9
1088	movl	%ecx,60(%rsp)
1089	cmovleq	%rsp,%r15
1090	subq	%r15,%rbp
1091	movq	%rbp,120(%rsp)
1092	vmovdqu	%xmm9,304(%rsp)
1093	testl	%edx,%edx
1094	jz	.Ldec8x_done
1095
1096	vmovups	16-120(%rsi),%xmm1
1097	vmovups	32-120(%rsi),%xmm0
1098	movl	240-120(%rsi),%eax
1099	leaq	192+128(%rsp),%rbp
1100
1101	vmovdqu	(%r8),%xmm2
1102	vmovdqu	(%r9),%xmm3
1103	vmovdqu	(%r10),%xmm4
1104	vmovdqu	(%r11),%xmm5
1105	vmovdqu	(%r12),%xmm6
1106	vmovdqu	(%r13),%xmm7
1107	vmovdqu	(%r14),%xmm8
1108	vmovdqu	(%r15),%xmm9
1109	vmovdqu	%xmm2,0(%rbp)
1110	vpxor	%xmm15,%xmm2,%xmm2
1111	vmovdqu	%xmm3,16(%rbp)
1112	vpxor	%xmm15,%xmm3,%xmm3
1113	vmovdqu	%xmm4,32(%rbp)
1114	vpxor	%xmm15,%xmm4,%xmm4
1115	vmovdqu	%xmm5,48(%rbp)
1116	vpxor	%xmm15,%xmm5,%xmm5
1117	vmovdqu	%xmm6,64(%rbp)
1118	vpxor	%xmm15,%xmm6,%xmm6
1119	vmovdqu	%xmm7,80(%rbp)
1120	vpxor	%xmm15,%xmm7,%xmm7
1121	vmovdqu	%xmm8,96(%rbp)
1122	vpxor	%xmm15,%xmm8,%xmm8
1123	vmovdqu	%xmm9,112(%rbp)
1124	vpxor	%xmm15,%xmm9,%xmm9
1125	xorq	$0x80,%rbp
1126	movl	$1,%ecx
1127	jmp	.Loop_dec8x
1128
1129.align	32
1130.Loop_dec8x:
1131	vaesdec	%xmm1,%xmm2,%xmm2
1132	cmpl	32+0(%rsp),%ecx
1133	vaesdec	%xmm1,%xmm3,%xmm3
1134	prefetcht0	31(%r8)
1135	vaesdec	%xmm1,%xmm4,%xmm4
1136	vaesdec	%xmm1,%xmm5,%xmm5
1137	leaq	(%r8,%rbx,1),%rbx
1138	cmovgeq	%rsp,%r8
1139	vaesdec	%xmm1,%xmm6,%xmm6
1140	cmovgq	%rsp,%rbx
1141	vaesdec	%xmm1,%xmm7,%xmm7
1142	subq	%r8,%rbx
1143	vaesdec	%xmm1,%xmm8,%xmm8
1144	vmovdqu	16(%r8),%xmm10
1145	movq	%rbx,64+0(%rsp)
1146	vaesdec	%xmm1,%xmm9,%xmm9
1147	vmovups	-72(%rsi),%xmm1
1148	leaq	16(%r8,%rbx,1),%r8
1149	vmovdqu	%xmm10,128(%rsp)
1150	vaesdec	%xmm0,%xmm2,%xmm2
1151	cmpl	32+4(%rsp),%ecx
1152	movq	64+8(%rsp),%rbx
1153	vaesdec	%xmm0,%xmm3,%xmm3
1154	prefetcht0	31(%r9)
1155	vaesdec	%xmm0,%xmm4,%xmm4
1156	vaesdec	%xmm0,%xmm5,%xmm5
1157	leaq	(%r9,%rbx,1),%rbx
1158	cmovgeq	%rsp,%r9
1159	vaesdec	%xmm0,%xmm6,%xmm6
1160	cmovgq	%rsp,%rbx
1161	vaesdec	%xmm0,%xmm7,%xmm7
1162	subq	%r9,%rbx
1163	vaesdec	%xmm0,%xmm8,%xmm8
1164	vmovdqu	16(%r9),%xmm11
1165	movq	%rbx,64+8(%rsp)
1166	vaesdec	%xmm0,%xmm9,%xmm9
1167	vmovups	-56(%rsi),%xmm0
1168	leaq	16(%r9,%rbx,1),%r9
1169	vmovdqu	%xmm11,144(%rsp)
1170	vaesdec	%xmm1,%xmm2,%xmm2
1171	cmpl	32+8(%rsp),%ecx
1172	movq	64+16(%rsp),%rbx
1173	vaesdec	%xmm1,%xmm3,%xmm3
1174	prefetcht0	31(%r10)
1175	vaesdec	%xmm1,%xmm4,%xmm4
1176	prefetcht0	15(%r8)
1177	vaesdec	%xmm1,%xmm5,%xmm5
1178	leaq	(%r10,%rbx,1),%rbx
1179	cmovgeq	%rsp,%r10
1180	vaesdec	%xmm1,%xmm6,%xmm6
1181	cmovgq	%rsp,%rbx
1182	vaesdec	%xmm1,%xmm7,%xmm7
1183	subq	%r10,%rbx
1184	vaesdec	%xmm1,%xmm8,%xmm8
1185	vmovdqu	16(%r10),%xmm12
1186	movq	%rbx,64+16(%rsp)
1187	vaesdec	%xmm1,%xmm9,%xmm9
1188	vmovups	-40(%rsi),%xmm1
1189	leaq	16(%r10,%rbx,1),%r10
1190	vmovdqu	%xmm12,160(%rsp)
1191	vaesdec	%xmm0,%xmm2,%xmm2
1192	cmpl	32+12(%rsp),%ecx
1193	movq	64+24(%rsp),%rbx
1194	vaesdec	%xmm0,%xmm3,%xmm3
1195	prefetcht0	31(%r11)
1196	vaesdec	%xmm0,%xmm4,%xmm4
1197	prefetcht0	15(%r9)
1198	vaesdec	%xmm0,%xmm5,%xmm5
1199	leaq	(%r11,%rbx,1),%rbx
1200	cmovgeq	%rsp,%r11
1201	vaesdec	%xmm0,%xmm6,%xmm6
1202	cmovgq	%rsp,%rbx
1203	vaesdec	%xmm0,%xmm7,%xmm7
1204	subq	%r11,%rbx
1205	vaesdec	%xmm0,%xmm8,%xmm8
1206	vmovdqu	16(%r11),%xmm13
1207	movq	%rbx,64+24(%rsp)
1208	vaesdec	%xmm0,%xmm9,%xmm9
1209	vmovups	-24(%rsi),%xmm0
1210	leaq	16(%r11,%rbx,1),%r11
1211	vmovdqu	%xmm13,176(%rsp)
1212	vaesdec	%xmm1,%xmm2,%xmm2
1213	cmpl	32+16(%rsp),%ecx
1214	movq	64+32(%rsp),%rbx
1215	vaesdec	%xmm1,%xmm3,%xmm3
1216	prefetcht0	31(%r12)
1217	vaesdec	%xmm1,%xmm4,%xmm4
1218	prefetcht0	15(%r10)
1219	vaesdec	%xmm1,%xmm5,%xmm5
1220	leaq	(%r12,%rbx,1),%rbx
1221	cmovgeq	%rsp,%r12
1222	vaesdec	%xmm1,%xmm6,%xmm6
1223	cmovgq	%rsp,%rbx
1224	vaesdec	%xmm1,%xmm7,%xmm7
1225	subq	%r12,%rbx
1226	vaesdec	%xmm1,%xmm8,%xmm8
1227	vmovdqu	16(%r12),%xmm10
1228	movq	%rbx,64+32(%rsp)
1229	vaesdec	%xmm1,%xmm9,%xmm9
1230	vmovups	-8(%rsi),%xmm1
1231	leaq	16(%r12,%rbx,1),%r12
1232	vaesdec	%xmm0,%xmm2,%xmm2
1233	cmpl	32+20(%rsp),%ecx
1234	movq	64+40(%rsp),%rbx
1235	vaesdec	%xmm0,%xmm3,%xmm3
1236	prefetcht0	31(%r13)
1237	vaesdec	%xmm0,%xmm4,%xmm4
1238	prefetcht0	15(%r11)
1239	vaesdec	%xmm0,%xmm5,%xmm5
1240	leaq	(%rbx,%r13,1),%rbx
1241	cmovgeq	%rsp,%r13
1242	vaesdec	%xmm0,%xmm6,%xmm6
1243	cmovgq	%rsp,%rbx
1244	vaesdec	%xmm0,%xmm7,%xmm7
1245	subq	%r13,%rbx
1246	vaesdec	%xmm0,%xmm8,%xmm8
1247	vmovdqu	16(%r13),%xmm11
1248	movq	%rbx,64+40(%rsp)
1249	vaesdec	%xmm0,%xmm9,%xmm9
1250	vmovups	8(%rsi),%xmm0
1251	leaq	16(%r13,%rbx,1),%r13
1252	vaesdec	%xmm1,%xmm2,%xmm2
1253	cmpl	32+24(%rsp),%ecx
1254	movq	64+48(%rsp),%rbx
1255	vaesdec	%xmm1,%xmm3,%xmm3
1256	prefetcht0	31(%r14)
1257	vaesdec	%xmm1,%xmm4,%xmm4
1258	prefetcht0	15(%r12)
1259	vaesdec	%xmm1,%xmm5,%xmm5
1260	leaq	(%r14,%rbx,1),%rbx
1261	cmovgeq	%rsp,%r14
1262	vaesdec	%xmm1,%xmm6,%xmm6
1263	cmovgq	%rsp,%rbx
1264	vaesdec	%xmm1,%xmm7,%xmm7
1265	subq	%r14,%rbx
1266	vaesdec	%xmm1,%xmm8,%xmm8
1267	vmovdqu	16(%r14),%xmm12
1268	movq	%rbx,64+48(%rsp)
1269	vaesdec	%xmm1,%xmm9,%xmm9
1270	vmovups	24(%rsi),%xmm1
1271	leaq	16(%r14,%rbx,1),%r14
1272	vaesdec	%xmm0,%xmm2,%xmm2
1273	cmpl	32+28(%rsp),%ecx
1274	movq	64+56(%rsp),%rbx
1275	vaesdec	%xmm0,%xmm3,%xmm3
1276	prefetcht0	31(%r15)
1277	vaesdec	%xmm0,%xmm4,%xmm4
1278	prefetcht0	15(%r13)
1279	vaesdec	%xmm0,%xmm5,%xmm5
1280	leaq	(%r15,%rbx,1),%rbx
1281	cmovgeq	%rsp,%r15
1282	vaesdec	%xmm0,%xmm6,%xmm6
1283	cmovgq	%rsp,%rbx
1284	vaesdec	%xmm0,%xmm7,%xmm7
1285	subq	%r15,%rbx
1286	vaesdec	%xmm0,%xmm8,%xmm8
1287	vmovdqu	16(%r15),%xmm13
1288	movq	%rbx,64+56(%rsp)
1289	vaesdec	%xmm0,%xmm9,%xmm9
1290	vmovups	40(%rsi),%xmm0
1291	leaq	16(%r15,%rbx,1),%r15
1292	vmovdqu	32(%rsp),%xmm14
1293	prefetcht0	15(%r14)
1294	prefetcht0	15(%r15)
1295	cmpl	$11,%eax
1296	jb	.Ldec8x_tail
1297
1298	vaesdec	%xmm1,%xmm2,%xmm2
1299	vaesdec	%xmm1,%xmm3,%xmm3
1300	vaesdec	%xmm1,%xmm4,%xmm4
1301	vaesdec	%xmm1,%xmm5,%xmm5
1302	vaesdec	%xmm1,%xmm6,%xmm6
1303	vaesdec	%xmm1,%xmm7,%xmm7
1304	vaesdec	%xmm1,%xmm8,%xmm8
1305	vaesdec	%xmm1,%xmm9,%xmm9
1306	vmovups	176-120(%rsi),%xmm1
1307
1308	vaesdec	%xmm0,%xmm2,%xmm2
1309	vaesdec	%xmm0,%xmm3,%xmm3
1310	vaesdec	%xmm0,%xmm4,%xmm4
1311	vaesdec	%xmm0,%xmm5,%xmm5
1312	vaesdec	%xmm0,%xmm6,%xmm6
1313	vaesdec	%xmm0,%xmm7,%xmm7
1314	vaesdec	%xmm0,%xmm8,%xmm8
1315	vaesdec	%xmm0,%xmm9,%xmm9
1316	vmovups	192-120(%rsi),%xmm0
1317	je	.Ldec8x_tail
1318
1319	vaesdec	%xmm1,%xmm2,%xmm2
1320	vaesdec	%xmm1,%xmm3,%xmm3
1321	vaesdec	%xmm1,%xmm4,%xmm4
1322	vaesdec	%xmm1,%xmm5,%xmm5
1323	vaesdec	%xmm1,%xmm6,%xmm6
1324	vaesdec	%xmm1,%xmm7,%xmm7
1325	vaesdec	%xmm1,%xmm8,%xmm8
1326	vaesdec	%xmm1,%xmm9,%xmm9
1327	vmovups	208-120(%rsi),%xmm1
1328
1329	vaesdec	%xmm0,%xmm2,%xmm2
1330	vaesdec	%xmm0,%xmm3,%xmm3
1331	vaesdec	%xmm0,%xmm4,%xmm4
1332	vaesdec	%xmm0,%xmm5,%xmm5
1333	vaesdec	%xmm0,%xmm6,%xmm6
1334	vaesdec	%xmm0,%xmm7,%xmm7
1335	vaesdec	%xmm0,%xmm8,%xmm8
1336	vaesdec	%xmm0,%xmm9,%xmm9
1337	vmovups	224-120(%rsi),%xmm0
1338
1339.Ldec8x_tail:
1340	vaesdec	%xmm1,%xmm2,%xmm2
1341	vpxor	%xmm15,%xmm15,%xmm15
1342	vaesdec	%xmm1,%xmm3,%xmm3
1343	vaesdec	%xmm1,%xmm4,%xmm4
1344	vpcmpgtd	%xmm15,%xmm14,%xmm15
1345	vaesdec	%xmm1,%xmm5,%xmm5
1346	vaesdec	%xmm1,%xmm6,%xmm6
1347	vpaddd	%xmm14,%xmm15,%xmm15
1348	vmovdqu	48(%rsp),%xmm14
1349	vaesdec	%xmm1,%xmm7,%xmm7
1350	movq	64(%rsp),%rbx
1351	vaesdec	%xmm1,%xmm8,%xmm8
1352	vaesdec	%xmm1,%xmm9,%xmm9
1353	vmovups	16-120(%rsi),%xmm1
1354
1355	vaesdeclast	%xmm0,%xmm2,%xmm2
1356	vmovdqa	%xmm15,32(%rsp)
1357	vpxor	%xmm15,%xmm15,%xmm15
1358	vaesdeclast	%xmm0,%xmm3,%xmm3
1359	vpxor	0(%rbp),%xmm2,%xmm2
1360	vaesdeclast	%xmm0,%xmm4,%xmm4
1361	vpxor	16(%rbp),%xmm3,%xmm3
1362	vpcmpgtd	%xmm15,%xmm14,%xmm15
1363	vaesdeclast	%xmm0,%xmm5,%xmm5
1364	vpxor	32(%rbp),%xmm4,%xmm4
1365	vaesdeclast	%xmm0,%xmm6,%xmm6
1366	vpxor	48(%rbp),%xmm5,%xmm5
1367	vpaddd	%xmm15,%xmm14,%xmm14
1368	vmovdqu	-120(%rsi),%xmm15
1369	vaesdeclast	%xmm0,%xmm7,%xmm7
1370	vpxor	64(%rbp),%xmm6,%xmm6
1371	vaesdeclast	%xmm0,%xmm8,%xmm8
1372	vpxor	80(%rbp),%xmm7,%xmm7
1373	vmovdqa	%xmm14,48(%rsp)
1374	vaesdeclast	%xmm0,%xmm9,%xmm9
1375	vpxor	96(%rbp),%xmm8,%xmm8
1376	vmovups	32-120(%rsi),%xmm0
1377
1378	vmovups	%xmm2,-16(%r8)
1379	subq	%rbx,%r8
1380	vmovdqu	128+0(%rsp),%xmm2
1381	vpxor	112(%rbp),%xmm9,%xmm9
1382	vmovups	%xmm3,-16(%r9)
1383	subq	72(%rsp),%r9
1384	vmovdqu	%xmm2,0(%rbp)
1385	vpxor	%xmm15,%xmm2,%xmm2
1386	vmovdqu	128+16(%rsp),%xmm3
1387	vmovups	%xmm4,-16(%r10)
1388	subq	80(%rsp),%r10
1389	vmovdqu	%xmm3,16(%rbp)
1390	vpxor	%xmm15,%xmm3,%xmm3
1391	vmovdqu	128+32(%rsp),%xmm4
1392	vmovups	%xmm5,-16(%r11)
1393	subq	88(%rsp),%r11
1394	vmovdqu	%xmm4,32(%rbp)
1395	vpxor	%xmm15,%xmm4,%xmm4
1396	vmovdqu	128+48(%rsp),%xmm5
1397	vmovups	%xmm6,-16(%r12)
1398	subq	96(%rsp),%r12
1399	vmovdqu	%xmm5,48(%rbp)
1400	vpxor	%xmm15,%xmm5,%xmm5
1401	vmovdqu	%xmm10,64(%rbp)
1402	vpxor	%xmm10,%xmm15,%xmm6
1403	vmovups	%xmm7,-16(%r13)
1404	subq	104(%rsp),%r13
1405	vmovdqu	%xmm11,80(%rbp)
1406	vpxor	%xmm11,%xmm15,%xmm7
1407	vmovups	%xmm8,-16(%r14)
1408	subq	112(%rsp),%r14
1409	vmovdqu	%xmm12,96(%rbp)
1410	vpxor	%xmm12,%xmm15,%xmm8
1411	vmovups	%xmm9,-16(%r15)
1412	subq	120(%rsp),%r15
1413	vmovdqu	%xmm13,112(%rbp)
1414	vpxor	%xmm13,%xmm15,%xmm9
1415
1416	xorq	$128,%rbp
1417	decl	%edx
1418	jnz	.Loop_dec8x
1419
1420	movq	16(%rsp),%rax
1421
1422
1423
1424
1425
1426.Ldec8x_done:
1427	vzeroupper
1428	movq	-48(%rax),%r15
1429	movq	-40(%rax),%r14
1430	movq	-32(%rax),%r13
1431	movq	-24(%rax),%r12
1432	movq	-16(%rax),%rbp
1433	movq	-8(%rax),%rbx
1434	leaq	(%rax),%rsp
1435.Ldec8x_epilogue:
1436	.byte	0xf3,0xc3
1437.size	aesni_multi_cbc_decrypt_avx,.-aesni_multi_cbc_decrypt_avx
1438