aesni-mb-x86_64.S revision 290207
1290207Sjkim	# $FreeBSD: head/secure/lib/libcrypto/amd64/aesni-mb-x86_64.S 290207 2015-10-30 20:51:33Z jkim $
2290207Sjkim.text
3290207Sjkim
4290207Sjkim
5290207Sjkim
6290207Sjkim.globl	aesni_multi_cbc_encrypt
7290207Sjkim.type	aesni_multi_cbc_encrypt,@function
8290207Sjkim.align	32
9290207Sjkimaesni_multi_cbc_encrypt:
10290207Sjkim	movq	%rsp,%rax
11290207Sjkim	pushq	%rbx
12290207Sjkim	pushq	%rbp
13290207Sjkim	pushq	%r12
14290207Sjkim	pushq	%r13
15290207Sjkim	pushq	%r14
16290207Sjkim	pushq	%r15
17290207Sjkim
18290207Sjkim
19290207Sjkim
20290207Sjkim
21290207Sjkim
22290207Sjkim
23290207Sjkim	subq	$48,%rsp
24290207Sjkim	andq	$-64,%rsp
25290207Sjkim	movq	%rax,16(%rsp)
26290207Sjkim
27290207Sjkim.Lenc4x_body:
28290207Sjkim	movdqu	(%rsi),%xmm12
29290207Sjkim	leaq	120(%rsi),%rsi
30290207Sjkim	leaq	80(%rdi),%rdi
31290207Sjkim
32290207Sjkim.Lenc4x_loop_grande:
33290207Sjkim	movl	%edx,24(%rsp)
34290207Sjkim	xorl	%edx,%edx
35290207Sjkim	movl	-64(%rdi),%ecx
36290207Sjkim	movq	-80(%rdi),%r8
37290207Sjkim	cmpl	%edx,%ecx
38290207Sjkim	movq	-72(%rdi),%r12
39290207Sjkim	cmovgl	%ecx,%edx
40290207Sjkim	testl	%ecx,%ecx
41290207Sjkim	movdqu	-56(%rdi),%xmm2
42290207Sjkim	movl	%ecx,32(%rsp)
43290207Sjkim	cmovleq	%rsp,%r8
44290207Sjkim	movl	-24(%rdi),%ecx
45290207Sjkim	movq	-40(%rdi),%r9
46290207Sjkim	cmpl	%edx,%ecx
47290207Sjkim	movq	-32(%rdi),%r13
48290207Sjkim	cmovgl	%ecx,%edx
49290207Sjkim	testl	%ecx,%ecx
50290207Sjkim	movdqu	-16(%rdi),%xmm3
51290207Sjkim	movl	%ecx,36(%rsp)
52290207Sjkim	cmovleq	%rsp,%r9
53290207Sjkim	movl	16(%rdi),%ecx
54290207Sjkim	movq	0(%rdi),%r10
55290207Sjkim	cmpl	%edx,%ecx
56290207Sjkim	movq	8(%rdi),%r14
57290207Sjkim	cmovgl	%ecx,%edx
58290207Sjkim	testl	%ecx,%ecx
59290207Sjkim	movdqu	24(%rdi),%xmm4
60290207Sjkim	movl	%ecx,40(%rsp)
61290207Sjkim	cmovleq	%rsp,%r10
62290207Sjkim	movl	56(%rdi),%ecx
63290207Sjkim	movq	40(%rdi),%r11
64290207Sjkim	cmpl	%edx,%ecx
65290207Sjkim	movq	48(%rdi),%r15
66290207Sjkim	cmovgl	%ecx,%edx
67290207Sjkim	testl	%ecx,%ecx
68290207Sjkim	movdqu	64(%rdi),%xmm5
69290207Sjkim	movl	%ecx,44(%rsp)
70290207Sjkim	cmovleq	%rsp,%r11
71290207Sjkim	testl	%edx,%edx
72290207Sjkim	jz	.Lenc4x_done
73290207Sjkim
74290207Sjkim	movups	16-120(%rsi),%xmm1
75290207Sjkim	pxor	%xmm12,%xmm2
76290207Sjkim	movups	32-120(%rsi),%xmm0
77290207Sjkim	pxor	%xmm12,%xmm3
78290207Sjkim	movl	240-120(%rsi),%eax
79290207Sjkim	pxor	%xmm12,%xmm4
80290207Sjkim	movdqu	(%r8),%xmm6
81290207Sjkim	pxor	%xmm12,%xmm5
82290207Sjkim	movdqu	(%r9),%xmm7
83290207Sjkim	pxor	%xmm6,%xmm2
84290207Sjkim	movdqu	(%r10),%xmm8
85290207Sjkim	pxor	%xmm7,%xmm3
86290207Sjkim	movdqu	(%r11),%xmm9
87290207Sjkim	pxor	%xmm8,%xmm4
88290207Sjkim	pxor	%xmm9,%xmm5
89290207Sjkim	movdqa	32(%rsp),%xmm10
90290207Sjkim	xorq	%rbx,%rbx
91290207Sjkim	jmp	.Loop_enc4x
92290207Sjkim
93290207Sjkim.align	32
94290207Sjkim.Loop_enc4x:
95290207Sjkim	addq	$16,%rbx
96290207Sjkim	leaq	16(%rsp),%rbp
97290207Sjkim	movl	$1,%ecx
98290207Sjkim	subq	%rbx,%rbp
99290207Sjkim
100290207Sjkim.byte	102,15,56,220,209
101290207Sjkim	prefetcht0	31(%r8,%rbx,1)
102290207Sjkim	prefetcht0	31(%r9,%rbx,1)
103290207Sjkim.byte	102,15,56,220,217
104290207Sjkim	prefetcht0	31(%r10,%rbx,1)
105290207Sjkim	prefetcht0	31(%r10,%rbx,1)
106290207Sjkim.byte	102,15,56,220,225
107290207Sjkim.byte	102,15,56,220,233
108290207Sjkim	movups	48-120(%rsi),%xmm1
109290207Sjkim	cmpl	32(%rsp),%ecx
110290207Sjkim.byte	102,15,56,220,208
111290207Sjkim.byte	102,15,56,220,216
112290207Sjkim.byte	102,15,56,220,224
113290207Sjkim	cmovgeq	%rbp,%r8
114290207Sjkim	cmovgq	%rbp,%r12
115290207Sjkim.byte	102,15,56,220,232
116290207Sjkim	movups	-56(%rsi),%xmm0
117290207Sjkim	cmpl	36(%rsp),%ecx
118290207Sjkim.byte	102,15,56,220,209
119290207Sjkim.byte	102,15,56,220,217
120290207Sjkim.byte	102,15,56,220,225
121290207Sjkim	cmovgeq	%rbp,%r9
122290207Sjkim	cmovgq	%rbp,%r13
123290207Sjkim.byte	102,15,56,220,233
124290207Sjkim	movups	-40(%rsi),%xmm1
125290207Sjkim	cmpl	40(%rsp),%ecx
126290207Sjkim.byte	102,15,56,220,208
127290207Sjkim.byte	102,15,56,220,216
128290207Sjkim.byte	102,15,56,220,224
129290207Sjkim	cmovgeq	%rbp,%r10
130290207Sjkim	cmovgq	%rbp,%r14
131290207Sjkim.byte	102,15,56,220,232
132290207Sjkim	movups	-24(%rsi),%xmm0
133290207Sjkim	cmpl	44(%rsp),%ecx
134290207Sjkim.byte	102,15,56,220,209
135290207Sjkim.byte	102,15,56,220,217
136290207Sjkim.byte	102,15,56,220,225
137290207Sjkim	cmovgeq	%rbp,%r11
138290207Sjkim	cmovgq	%rbp,%r15
139290207Sjkim.byte	102,15,56,220,233
140290207Sjkim	movups	-8(%rsi),%xmm1
141290207Sjkim	movdqa	%xmm10,%xmm11
142290207Sjkim.byte	102,15,56,220,208
143290207Sjkim	prefetcht0	15(%r12,%rbx,1)
144290207Sjkim	prefetcht0	15(%r13,%rbx,1)
145290207Sjkim.byte	102,15,56,220,216
146290207Sjkim	prefetcht0	15(%r14,%rbx,1)
147290207Sjkim	prefetcht0	15(%r15,%rbx,1)
148290207Sjkim.byte	102,15,56,220,224
149290207Sjkim.byte	102,15,56,220,232
150290207Sjkim	movups	128-120(%rsi),%xmm0
151290207Sjkim	pxor	%xmm12,%xmm12
152290207Sjkim
153290207Sjkim.byte	102,15,56,220,209
154290207Sjkim	pcmpgtd	%xmm12,%xmm11
155290207Sjkim	movdqu	-120(%rsi),%xmm12
156290207Sjkim.byte	102,15,56,220,217
157290207Sjkim	paddd	%xmm11,%xmm10
158290207Sjkim	movdqa	%xmm10,32(%rsp)
159290207Sjkim.byte	102,15,56,220,225
160290207Sjkim.byte	102,15,56,220,233
161290207Sjkim	movups	144-120(%rsi),%xmm1
162290207Sjkim
163290207Sjkim	cmpl	$11,%eax
164290207Sjkim
165290207Sjkim.byte	102,15,56,220,208
166290207Sjkim.byte	102,15,56,220,216
167290207Sjkim.byte	102,15,56,220,224
168290207Sjkim.byte	102,15,56,220,232
169290207Sjkim	movups	160-120(%rsi),%xmm0
170290207Sjkim
171290207Sjkim	jb	.Lenc4x_tail
172290207Sjkim
173290207Sjkim.byte	102,15,56,220,209
174290207Sjkim.byte	102,15,56,220,217
175290207Sjkim.byte	102,15,56,220,225
176290207Sjkim.byte	102,15,56,220,233
177290207Sjkim	movups	176-120(%rsi),%xmm1
178290207Sjkim
179290207Sjkim.byte	102,15,56,220,208
180290207Sjkim.byte	102,15,56,220,216
181290207Sjkim.byte	102,15,56,220,224
182290207Sjkim.byte	102,15,56,220,232
183290207Sjkim	movups	192-120(%rsi),%xmm0
184290207Sjkim
185290207Sjkim	je	.Lenc4x_tail
186290207Sjkim
187290207Sjkim.byte	102,15,56,220,209
188290207Sjkim.byte	102,15,56,220,217
189290207Sjkim.byte	102,15,56,220,225
190290207Sjkim.byte	102,15,56,220,233
191290207Sjkim	movups	208-120(%rsi),%xmm1
192290207Sjkim
193290207Sjkim.byte	102,15,56,220,208
194290207Sjkim.byte	102,15,56,220,216
195290207Sjkim.byte	102,15,56,220,224
196290207Sjkim.byte	102,15,56,220,232
197290207Sjkim	movups	224-120(%rsi),%xmm0
198290207Sjkim	jmp	.Lenc4x_tail
199290207Sjkim
200290207Sjkim.align	32
201290207Sjkim.Lenc4x_tail:
202290207Sjkim.byte	102,15,56,220,209
203290207Sjkim.byte	102,15,56,220,217
204290207Sjkim.byte	102,15,56,220,225
205290207Sjkim.byte	102,15,56,220,233
206290207Sjkim	movdqu	(%r8,%rbx,1),%xmm6
207290207Sjkim	movdqu	16-120(%rsi),%xmm1
208290207Sjkim
209290207Sjkim.byte	102,15,56,221,208
210290207Sjkim	movdqu	(%r9,%rbx,1),%xmm7
211290207Sjkim	pxor	%xmm12,%xmm6
212290207Sjkim.byte	102,15,56,221,216
213290207Sjkim	movdqu	(%r10,%rbx,1),%xmm8
214290207Sjkim	pxor	%xmm12,%xmm7
215290207Sjkim.byte	102,15,56,221,224
216290207Sjkim	movdqu	(%r11,%rbx,1),%xmm9
217290207Sjkim	pxor	%xmm12,%xmm8
218290207Sjkim.byte	102,15,56,221,232
219290207Sjkim	movdqu	32-120(%rsi),%xmm0
220290207Sjkim	pxor	%xmm12,%xmm9
221290207Sjkim
222290207Sjkim	movups	%xmm2,-16(%r12,%rbx,1)
223290207Sjkim	pxor	%xmm6,%xmm2
224290207Sjkim	movups	%xmm3,-16(%r13,%rbx,1)
225290207Sjkim	pxor	%xmm7,%xmm3
226290207Sjkim	movups	%xmm4,-16(%r14,%rbx,1)
227290207Sjkim	pxor	%xmm8,%xmm4
228290207Sjkim	movups	%xmm5,-16(%r15,%rbx,1)
229290207Sjkim	pxor	%xmm9,%xmm5
230290207Sjkim
231290207Sjkim	decl	%edx
232290207Sjkim	jnz	.Loop_enc4x
233290207Sjkim
234290207Sjkim	movq	16(%rsp),%rax
235290207Sjkim	movl	24(%rsp),%edx
236290207Sjkim
237290207Sjkim
238290207Sjkim
239290207Sjkim
240290207Sjkim
241290207Sjkim
242290207Sjkim
243290207Sjkim
244290207Sjkim
245290207Sjkim
246290207Sjkim	leaq	160(%rdi),%rdi
247290207Sjkim	decl	%edx
248290207Sjkim	jnz	.Lenc4x_loop_grande
249290207Sjkim
250290207Sjkim.Lenc4x_done:
251290207Sjkim	movq	-48(%rax),%r15
252290207Sjkim	movq	-40(%rax),%r14
253290207Sjkim	movq	-32(%rax),%r13
254290207Sjkim	movq	-24(%rax),%r12
255290207Sjkim	movq	-16(%rax),%rbp
256290207Sjkim	movq	-8(%rax),%rbx
257290207Sjkim	leaq	(%rax),%rsp
258290207Sjkim.Lenc4x_epilogue:
259290207Sjkim	.byte	0xf3,0xc3
260290207Sjkim.size	aesni_multi_cbc_encrypt,.-aesni_multi_cbc_encrypt
261290207Sjkim
262290207Sjkim.globl	aesni_multi_cbc_decrypt
263290207Sjkim.type	aesni_multi_cbc_decrypt,@function
264290207Sjkim.align	32
265290207Sjkimaesni_multi_cbc_decrypt:
266290207Sjkim	movq	%rsp,%rax
267290207Sjkim	pushq	%rbx
268290207Sjkim	pushq	%rbp
269290207Sjkim	pushq	%r12
270290207Sjkim	pushq	%r13
271290207Sjkim	pushq	%r14
272290207Sjkim	pushq	%r15
273290207Sjkim
274290207Sjkim
275290207Sjkim
276290207Sjkim
277290207Sjkim
278290207Sjkim
279290207Sjkim	subq	$48,%rsp
280290207Sjkim	andq	$-64,%rsp
281290207Sjkim	movq	%rax,16(%rsp)
282290207Sjkim
283290207Sjkim.Ldec4x_body:
284290207Sjkim	movdqu	(%rsi),%xmm12
285290207Sjkim	leaq	120(%rsi),%rsi
286290207Sjkim	leaq	80(%rdi),%rdi
287290207Sjkim
288290207Sjkim.Ldec4x_loop_grande:
289290207Sjkim	movl	%edx,24(%rsp)
290290207Sjkim	xorl	%edx,%edx
291290207Sjkim	movl	-64(%rdi),%ecx
292290207Sjkim	movq	-80(%rdi),%r8
293290207Sjkim	cmpl	%edx,%ecx
294290207Sjkim	movq	-72(%rdi),%r12
295290207Sjkim	cmovgl	%ecx,%edx
296290207Sjkim	testl	%ecx,%ecx
297290207Sjkim	movdqu	-56(%rdi),%xmm6
298290207Sjkim	movl	%ecx,32(%rsp)
299290207Sjkim	cmovleq	%rsp,%r8
300290207Sjkim	movl	-24(%rdi),%ecx
301290207Sjkim	movq	-40(%rdi),%r9
302290207Sjkim	cmpl	%edx,%ecx
303290207Sjkim	movq	-32(%rdi),%r13
304290207Sjkim	cmovgl	%ecx,%edx
305290207Sjkim	testl	%ecx,%ecx
306290207Sjkim	movdqu	-16(%rdi),%xmm7
307290207Sjkim	movl	%ecx,36(%rsp)
308290207Sjkim	cmovleq	%rsp,%r9
309290207Sjkim	movl	16(%rdi),%ecx
310290207Sjkim	movq	0(%rdi),%r10
311290207Sjkim	cmpl	%edx,%ecx
312290207Sjkim	movq	8(%rdi),%r14
313290207Sjkim	cmovgl	%ecx,%edx
314290207Sjkim	testl	%ecx,%ecx
315290207Sjkim	movdqu	24(%rdi),%xmm8
316290207Sjkim	movl	%ecx,40(%rsp)
317290207Sjkim	cmovleq	%rsp,%r10
318290207Sjkim	movl	56(%rdi),%ecx
319290207Sjkim	movq	40(%rdi),%r11
320290207Sjkim	cmpl	%edx,%ecx
321290207Sjkim	movq	48(%rdi),%r15
322290207Sjkim	cmovgl	%ecx,%edx
323290207Sjkim	testl	%ecx,%ecx
324290207Sjkim	movdqu	64(%rdi),%xmm9
325290207Sjkim	movl	%ecx,44(%rsp)
326290207Sjkim	cmovleq	%rsp,%r11
327290207Sjkim	testl	%edx,%edx
328290207Sjkim	jz	.Ldec4x_done
329290207Sjkim
330290207Sjkim	movups	16-120(%rsi),%xmm1
331290207Sjkim	movups	32-120(%rsi),%xmm0
332290207Sjkim	movl	240-120(%rsi),%eax
333290207Sjkim	movdqu	(%r8),%xmm2
334290207Sjkim	movdqu	(%r9),%xmm3
335290207Sjkim	pxor	%xmm12,%xmm2
336290207Sjkim	movdqu	(%r10),%xmm4
337290207Sjkim	pxor	%xmm12,%xmm3
338290207Sjkim	movdqu	(%r11),%xmm5
339290207Sjkim	pxor	%xmm12,%xmm4
340290207Sjkim	pxor	%xmm12,%xmm5
341290207Sjkim	movdqa	32(%rsp),%xmm10
342290207Sjkim	xorq	%rbx,%rbx
343290207Sjkim	jmp	.Loop_dec4x
344290207Sjkim
345290207Sjkim.align	32
346290207Sjkim.Loop_dec4x:
347290207Sjkim	addq	$16,%rbx
348290207Sjkim	leaq	16(%rsp),%rbp
349290207Sjkim	movl	$1,%ecx
350290207Sjkim	subq	%rbx,%rbp
351290207Sjkim
352290207Sjkim.byte	102,15,56,222,209
353290207Sjkim	prefetcht0	31(%r8,%rbx,1)
354290207Sjkim	prefetcht0	31(%r9,%rbx,1)
355290207Sjkim.byte	102,15,56,222,217
356290207Sjkim	prefetcht0	31(%r10,%rbx,1)
357290207Sjkim	prefetcht0	31(%r11,%rbx,1)
358290207Sjkim.byte	102,15,56,222,225
359290207Sjkim.byte	102,15,56,222,233
360290207Sjkim	movups	48-120(%rsi),%xmm1
361290207Sjkim	cmpl	32(%rsp),%ecx
362290207Sjkim.byte	102,15,56,222,208
363290207Sjkim.byte	102,15,56,222,216
364290207Sjkim.byte	102,15,56,222,224
365290207Sjkim	cmovgeq	%rbp,%r8
366290207Sjkim	cmovgq	%rbp,%r12
367290207Sjkim.byte	102,15,56,222,232
368290207Sjkim	movups	-56(%rsi),%xmm0
369290207Sjkim	cmpl	36(%rsp),%ecx
370290207Sjkim.byte	102,15,56,222,209
371290207Sjkim.byte	102,15,56,222,217
372290207Sjkim.byte	102,15,56,222,225
373290207Sjkim	cmovgeq	%rbp,%r9
374290207Sjkim	cmovgq	%rbp,%r13
375290207Sjkim.byte	102,15,56,222,233
376290207Sjkim	movups	-40(%rsi),%xmm1
377290207Sjkim	cmpl	40(%rsp),%ecx
378290207Sjkim.byte	102,15,56,222,208
379290207Sjkim.byte	102,15,56,222,216
380290207Sjkim.byte	102,15,56,222,224
381290207Sjkim	cmovgeq	%rbp,%r10
382290207Sjkim	cmovgq	%rbp,%r14
383290207Sjkim.byte	102,15,56,222,232
384290207Sjkim	movups	-24(%rsi),%xmm0
385290207Sjkim	cmpl	44(%rsp),%ecx
386290207Sjkim.byte	102,15,56,222,209
387290207Sjkim.byte	102,15,56,222,217
388290207Sjkim.byte	102,15,56,222,225
389290207Sjkim	cmovgeq	%rbp,%r11
390290207Sjkim	cmovgq	%rbp,%r15
391290207Sjkim.byte	102,15,56,222,233
392290207Sjkim	movups	-8(%rsi),%xmm1
393290207Sjkim	movdqa	%xmm10,%xmm11
394290207Sjkim.byte	102,15,56,222,208
395290207Sjkim	prefetcht0	15(%r12,%rbx,1)
396290207Sjkim	prefetcht0	15(%r13,%rbx,1)
397290207Sjkim.byte	102,15,56,222,216
398290207Sjkim	prefetcht0	15(%r14,%rbx,1)
399290207Sjkim	prefetcht0	15(%r15,%rbx,1)
400290207Sjkim.byte	102,15,56,222,224
401290207Sjkim.byte	102,15,56,222,232
402290207Sjkim	movups	128-120(%rsi),%xmm0
403290207Sjkim	pxor	%xmm12,%xmm12
404290207Sjkim
405290207Sjkim.byte	102,15,56,222,209
406290207Sjkim	pcmpgtd	%xmm12,%xmm11
407290207Sjkim	movdqu	-120(%rsi),%xmm12
408290207Sjkim.byte	102,15,56,222,217
409290207Sjkim	paddd	%xmm11,%xmm10
410290207Sjkim	movdqa	%xmm10,32(%rsp)
411290207Sjkim.byte	102,15,56,222,225
412290207Sjkim.byte	102,15,56,222,233
413290207Sjkim	movups	144-120(%rsi),%xmm1
414290207Sjkim
415290207Sjkim	cmpl	$11,%eax
416290207Sjkim
417290207Sjkim.byte	102,15,56,222,208
418290207Sjkim.byte	102,15,56,222,216
419290207Sjkim.byte	102,15,56,222,224
420290207Sjkim.byte	102,15,56,222,232
421290207Sjkim	movups	160-120(%rsi),%xmm0
422290207Sjkim
423290207Sjkim	jb	.Ldec4x_tail
424290207Sjkim
425290207Sjkim.byte	102,15,56,222,209
426290207Sjkim.byte	102,15,56,222,217
427290207Sjkim.byte	102,15,56,222,225
428290207Sjkim.byte	102,15,56,222,233
429290207Sjkim	movups	176-120(%rsi),%xmm1
430290207Sjkim
431290207Sjkim.byte	102,15,56,222,208
432290207Sjkim.byte	102,15,56,222,216
433290207Sjkim.byte	102,15,56,222,224
434290207Sjkim.byte	102,15,56,222,232
435290207Sjkim	movups	192-120(%rsi),%xmm0
436290207Sjkim
437290207Sjkim	je	.Ldec4x_tail
438290207Sjkim
439290207Sjkim.byte	102,15,56,222,209
440290207Sjkim.byte	102,15,56,222,217
441290207Sjkim.byte	102,15,56,222,225
442290207Sjkim.byte	102,15,56,222,233
443290207Sjkim	movups	208-120(%rsi),%xmm1
444290207Sjkim
445290207Sjkim.byte	102,15,56,222,208
446290207Sjkim.byte	102,15,56,222,216
447290207Sjkim.byte	102,15,56,222,224
448290207Sjkim.byte	102,15,56,222,232
449290207Sjkim	movups	224-120(%rsi),%xmm0
450290207Sjkim	jmp	.Ldec4x_tail
451290207Sjkim
452290207Sjkim.align	32
453290207Sjkim.Ldec4x_tail:
454290207Sjkim.byte	102,15,56,222,209
455290207Sjkim.byte	102,15,56,222,217
456290207Sjkim.byte	102,15,56,222,225
457290207Sjkim	pxor	%xmm0,%xmm6
458290207Sjkim	pxor	%xmm0,%xmm7
459290207Sjkim.byte	102,15,56,222,233
460290207Sjkim	movdqu	16-120(%rsi),%xmm1
461290207Sjkim	pxor	%xmm0,%xmm8
462290207Sjkim	pxor	%xmm0,%xmm9
463290207Sjkim	movdqu	32-120(%rsi),%xmm0
464290207Sjkim
465290207Sjkim.byte	102,15,56,223,214
466290207Sjkim.byte	102,15,56,223,223
467290207Sjkim	movdqu	-16(%r8,%rbx,1),%xmm6
468290207Sjkim	movdqu	-16(%r9,%rbx,1),%xmm7
469290207Sjkim.byte	102,65,15,56,223,224
470290207Sjkim.byte	102,65,15,56,223,233
471290207Sjkim	movdqu	-16(%r10,%rbx,1),%xmm8
472290207Sjkim	movdqu	-16(%r11,%rbx,1),%xmm9
473290207Sjkim
474290207Sjkim	movups	%xmm2,-16(%r12,%rbx,1)
475290207Sjkim	movdqu	(%r8,%rbx,1),%xmm2
476290207Sjkim	movups	%xmm3,-16(%r13,%rbx,1)
477290207Sjkim	movdqu	(%r9,%rbx,1),%xmm3
478290207Sjkim	pxor	%xmm12,%xmm2
479290207Sjkim	movups	%xmm4,-16(%r14,%rbx,1)
480290207Sjkim	movdqu	(%r10,%rbx,1),%xmm4
481290207Sjkim	pxor	%xmm12,%xmm3
482290207Sjkim	movups	%xmm5,-16(%r15,%rbx,1)
483290207Sjkim	movdqu	(%r11,%rbx,1),%xmm5
484290207Sjkim	pxor	%xmm12,%xmm4
485290207Sjkim	pxor	%xmm12,%xmm5
486290207Sjkim
487290207Sjkim	decl	%edx
488290207Sjkim	jnz	.Loop_dec4x
489290207Sjkim
490290207Sjkim	movq	16(%rsp),%rax
491290207Sjkim	movl	24(%rsp),%edx
492290207Sjkim
493290207Sjkim	leaq	160(%rdi),%rdi
494290207Sjkim	decl	%edx
495290207Sjkim	jnz	.Ldec4x_loop_grande
496290207Sjkim
497290207Sjkim.Ldec4x_done:
498290207Sjkim	movq	-48(%rax),%r15
499290207Sjkim	movq	-40(%rax),%r14
500290207Sjkim	movq	-32(%rax),%r13
501290207Sjkim	movq	-24(%rax),%r12
502290207Sjkim	movq	-16(%rax),%rbp
503290207Sjkim	movq	-8(%rax),%rbx
504290207Sjkim	leaq	(%rax),%rsp
505290207Sjkim.Ldec4x_epilogue:
506290207Sjkim	.byte	0xf3,0xc3
507290207Sjkim.size	aesni_multi_cbc_decrypt,.-aesni_multi_cbc_decrypt
508