xref: /minix3/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/aesni-x86.S (revision ebfedea0ce5bbe81e252ddf32d732e40fb633fae)
1*ebfedea0SLionel Sambuc#include <machine/asm.h>
2*ebfedea0SLionel Sambuc.text
3*ebfedea0SLionel Sambuc.globl	aesni_encrypt
4*ebfedea0SLionel Sambuc.type	aesni_encrypt,@function
5*ebfedea0SLionel Sambuc.align	16
6*ebfedea0SLionel Sambucaesni_encrypt:
7*ebfedea0SLionel Sambuc.L_aesni_encrypt_begin:
8*ebfedea0SLionel Sambuc	movl	4(%esp),%eax
9*ebfedea0SLionel Sambuc	movl	12(%esp),%edx
10*ebfedea0SLionel Sambuc	movups	(%eax),%xmm2
11*ebfedea0SLionel Sambuc	movl	240(%edx),%ecx
12*ebfedea0SLionel Sambuc	movl	8(%esp),%eax
13*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
14*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
15*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
16*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
17*ebfedea0SLionel Sambuc.L000enc1_loop_1:
18*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
19*ebfedea0SLionel Sambuc	decl	%ecx
20*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
21*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
22*ebfedea0SLionel Sambuc	jnz	.L000enc1_loop_1
23*ebfedea0SLionel Sambuc.byte	102,15,56,221,209
24*ebfedea0SLionel Sambuc	movups	%xmm2,(%eax)
25*ebfedea0SLionel Sambuc	ret
26*ebfedea0SLionel Sambuc.size	aesni_encrypt,.-.L_aesni_encrypt_begin
27*ebfedea0SLionel Sambuc.globl	aesni_decrypt
28*ebfedea0SLionel Sambuc.type	aesni_decrypt,@function
29*ebfedea0SLionel Sambuc.align	16
30*ebfedea0SLionel Sambucaesni_decrypt:
31*ebfedea0SLionel Sambuc.L_aesni_decrypt_begin:
32*ebfedea0SLionel Sambuc	movl	4(%esp),%eax
33*ebfedea0SLionel Sambuc	movl	12(%esp),%edx
34*ebfedea0SLionel Sambuc	movups	(%eax),%xmm2
35*ebfedea0SLionel Sambuc	movl	240(%edx),%ecx
36*ebfedea0SLionel Sambuc	movl	8(%esp),%eax
37*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
38*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
39*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
40*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
41*ebfedea0SLionel Sambuc.L001dec1_loop_2:
42*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
43*ebfedea0SLionel Sambuc	decl	%ecx
44*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
45*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
46*ebfedea0SLionel Sambuc	jnz	.L001dec1_loop_2
47*ebfedea0SLionel Sambuc.byte	102,15,56,223,209
48*ebfedea0SLionel Sambuc	movups	%xmm2,(%eax)
49*ebfedea0SLionel Sambuc	ret
50*ebfedea0SLionel Sambuc.size	aesni_decrypt,.-.L_aesni_decrypt_begin
51*ebfedea0SLionel Sambuc.type	_aesni_encrypt3,@function
52*ebfedea0SLionel Sambuc.align	16
53*ebfedea0SLionel Sambuc_aesni_encrypt3:
54*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
55*ebfedea0SLionel Sambuc	shrl	$1,%ecx
56*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
57*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
58*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
59*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm3
60*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm4
61*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
62*ebfedea0SLionel Sambuc.L002enc3_loop:
63*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
64*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
65*ebfedea0SLionel Sambuc	decl	%ecx
66*ebfedea0SLionel Sambuc.byte	102,15,56,220,225
67*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
68*ebfedea0SLionel Sambuc.byte	102,15,56,220,208
69*ebfedea0SLionel Sambuc.byte	102,15,56,220,216
70*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
71*ebfedea0SLionel Sambuc.byte	102,15,56,220,224
72*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
73*ebfedea0SLionel Sambuc	jnz	.L002enc3_loop
74*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
75*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
76*ebfedea0SLionel Sambuc.byte	102,15,56,220,225
77*ebfedea0SLionel Sambuc.byte	102,15,56,221,208
78*ebfedea0SLionel Sambuc.byte	102,15,56,221,216
79*ebfedea0SLionel Sambuc.byte	102,15,56,221,224
80*ebfedea0SLionel Sambuc	ret
81*ebfedea0SLionel Sambuc.size	_aesni_encrypt3,.-_aesni_encrypt3
82*ebfedea0SLionel Sambuc.type	_aesni_decrypt3,@function
83*ebfedea0SLionel Sambuc.align	16
84*ebfedea0SLionel Sambuc_aesni_decrypt3:
85*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
86*ebfedea0SLionel Sambuc	shrl	$1,%ecx
87*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
88*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
89*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
90*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm3
91*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm4
92*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
93*ebfedea0SLionel Sambuc.L003dec3_loop:
94*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
95*ebfedea0SLionel Sambuc.byte	102,15,56,222,217
96*ebfedea0SLionel Sambuc	decl	%ecx
97*ebfedea0SLionel Sambuc.byte	102,15,56,222,225
98*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
99*ebfedea0SLionel Sambuc.byte	102,15,56,222,208
100*ebfedea0SLionel Sambuc.byte	102,15,56,222,216
101*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
102*ebfedea0SLionel Sambuc.byte	102,15,56,222,224
103*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
104*ebfedea0SLionel Sambuc	jnz	.L003dec3_loop
105*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
106*ebfedea0SLionel Sambuc.byte	102,15,56,222,217
107*ebfedea0SLionel Sambuc.byte	102,15,56,222,225
108*ebfedea0SLionel Sambuc.byte	102,15,56,223,208
109*ebfedea0SLionel Sambuc.byte	102,15,56,223,216
110*ebfedea0SLionel Sambuc.byte	102,15,56,223,224
111*ebfedea0SLionel Sambuc	ret
112*ebfedea0SLionel Sambuc.size	_aesni_decrypt3,.-_aesni_decrypt3
113*ebfedea0SLionel Sambuc.type	_aesni_encrypt4,@function
114*ebfedea0SLionel Sambuc.align	16
115*ebfedea0SLionel Sambuc_aesni_encrypt4:
116*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
117*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
118*ebfedea0SLionel Sambuc	shrl	$1,%ecx
119*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
120*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
121*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm3
122*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm4
123*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm5
124*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
125*ebfedea0SLionel Sambuc.L004enc4_loop:
126*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
127*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
128*ebfedea0SLionel Sambuc	decl	%ecx
129*ebfedea0SLionel Sambuc.byte	102,15,56,220,225
130*ebfedea0SLionel Sambuc.byte	102,15,56,220,233
131*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
132*ebfedea0SLionel Sambuc.byte	102,15,56,220,208
133*ebfedea0SLionel Sambuc.byte	102,15,56,220,216
134*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
135*ebfedea0SLionel Sambuc.byte	102,15,56,220,224
136*ebfedea0SLionel Sambuc.byte	102,15,56,220,232
137*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
138*ebfedea0SLionel Sambuc	jnz	.L004enc4_loop
139*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
140*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
141*ebfedea0SLionel Sambuc.byte	102,15,56,220,225
142*ebfedea0SLionel Sambuc.byte	102,15,56,220,233
143*ebfedea0SLionel Sambuc.byte	102,15,56,221,208
144*ebfedea0SLionel Sambuc.byte	102,15,56,221,216
145*ebfedea0SLionel Sambuc.byte	102,15,56,221,224
146*ebfedea0SLionel Sambuc.byte	102,15,56,221,232
147*ebfedea0SLionel Sambuc	ret
148*ebfedea0SLionel Sambuc.size	_aesni_encrypt4,.-_aesni_encrypt4
149*ebfedea0SLionel Sambuc.type	_aesni_decrypt4,@function
150*ebfedea0SLionel Sambuc.align	16
151*ebfedea0SLionel Sambuc_aesni_decrypt4:
152*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
153*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
154*ebfedea0SLionel Sambuc	shrl	$1,%ecx
155*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
156*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
157*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm3
158*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm4
159*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm5
160*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
161*ebfedea0SLionel Sambuc.L005dec4_loop:
162*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
163*ebfedea0SLionel Sambuc.byte	102,15,56,222,217
164*ebfedea0SLionel Sambuc	decl	%ecx
165*ebfedea0SLionel Sambuc.byte	102,15,56,222,225
166*ebfedea0SLionel Sambuc.byte	102,15,56,222,233
167*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
168*ebfedea0SLionel Sambuc.byte	102,15,56,222,208
169*ebfedea0SLionel Sambuc.byte	102,15,56,222,216
170*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
171*ebfedea0SLionel Sambuc.byte	102,15,56,222,224
172*ebfedea0SLionel Sambuc.byte	102,15,56,222,232
173*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
174*ebfedea0SLionel Sambuc	jnz	.L005dec4_loop
175*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
176*ebfedea0SLionel Sambuc.byte	102,15,56,222,217
177*ebfedea0SLionel Sambuc.byte	102,15,56,222,225
178*ebfedea0SLionel Sambuc.byte	102,15,56,222,233
179*ebfedea0SLionel Sambuc.byte	102,15,56,223,208
180*ebfedea0SLionel Sambuc.byte	102,15,56,223,216
181*ebfedea0SLionel Sambuc.byte	102,15,56,223,224
182*ebfedea0SLionel Sambuc.byte	102,15,56,223,232
183*ebfedea0SLionel Sambuc	ret
184*ebfedea0SLionel Sambuc.size	_aesni_decrypt4,.-_aesni_decrypt4
185*ebfedea0SLionel Sambuc.type	_aesni_encrypt6,@function
186*ebfedea0SLionel Sambuc.align	16
187*ebfedea0SLionel Sambuc_aesni_encrypt6:
188*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
189*ebfedea0SLionel Sambuc	shrl	$1,%ecx
190*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
191*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
192*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
193*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm3
194*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
195*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm4
196*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
197*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm5
198*ebfedea0SLionel Sambuc	decl	%ecx
199*ebfedea0SLionel Sambuc.byte	102,15,56,220,225
200*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm6
201*ebfedea0SLionel Sambuc.byte	102,15,56,220,233
202*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm7
203*ebfedea0SLionel Sambuc.byte	102,15,56,220,241
204*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
205*ebfedea0SLionel Sambuc.byte	102,15,56,220,249
206*ebfedea0SLionel Sambuc	jmp	.L_aesni_encrypt6_enter
207*ebfedea0SLionel Sambuc.align	16
208*ebfedea0SLionel Sambuc.L006enc6_loop:
209*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
210*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
211*ebfedea0SLionel Sambuc	decl	%ecx
212*ebfedea0SLionel Sambuc.byte	102,15,56,220,225
213*ebfedea0SLionel Sambuc.byte	102,15,56,220,233
214*ebfedea0SLionel Sambuc.byte	102,15,56,220,241
215*ebfedea0SLionel Sambuc.byte	102,15,56,220,249
216*ebfedea0SLionel Sambuc.align	16
217*ebfedea0SLionel Sambuc.L_aesni_encrypt6_enter:
218*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
219*ebfedea0SLionel Sambuc.byte	102,15,56,220,208
220*ebfedea0SLionel Sambuc.byte	102,15,56,220,216
221*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
222*ebfedea0SLionel Sambuc.byte	102,15,56,220,224
223*ebfedea0SLionel Sambuc.byte	102,15,56,220,232
224*ebfedea0SLionel Sambuc.byte	102,15,56,220,240
225*ebfedea0SLionel Sambuc.byte	102,15,56,220,248
226*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
227*ebfedea0SLionel Sambuc	jnz	.L006enc6_loop
228*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
229*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
230*ebfedea0SLionel Sambuc.byte	102,15,56,220,225
231*ebfedea0SLionel Sambuc.byte	102,15,56,220,233
232*ebfedea0SLionel Sambuc.byte	102,15,56,220,241
233*ebfedea0SLionel Sambuc.byte	102,15,56,220,249
234*ebfedea0SLionel Sambuc.byte	102,15,56,221,208
235*ebfedea0SLionel Sambuc.byte	102,15,56,221,216
236*ebfedea0SLionel Sambuc.byte	102,15,56,221,224
237*ebfedea0SLionel Sambuc.byte	102,15,56,221,232
238*ebfedea0SLionel Sambuc.byte	102,15,56,221,240
239*ebfedea0SLionel Sambuc.byte	102,15,56,221,248
240*ebfedea0SLionel Sambuc	ret
241*ebfedea0SLionel Sambuc.size	_aesni_encrypt6,.-_aesni_encrypt6
242*ebfedea0SLionel Sambuc.type	_aesni_decrypt6,@function
243*ebfedea0SLionel Sambuc.align	16
244*ebfedea0SLionel Sambuc_aesni_decrypt6:
245*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
246*ebfedea0SLionel Sambuc	shrl	$1,%ecx
247*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
248*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
249*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
250*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm3
251*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
252*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm4
253*ebfedea0SLionel Sambuc.byte	102,15,56,222,217
254*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm5
255*ebfedea0SLionel Sambuc	decl	%ecx
256*ebfedea0SLionel Sambuc.byte	102,15,56,222,225
257*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm6
258*ebfedea0SLionel Sambuc.byte	102,15,56,222,233
259*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm7
260*ebfedea0SLionel Sambuc.byte	102,15,56,222,241
261*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
262*ebfedea0SLionel Sambuc.byte	102,15,56,222,249
263*ebfedea0SLionel Sambuc	jmp	.L_aesni_decrypt6_enter
264*ebfedea0SLionel Sambuc.align	16
265*ebfedea0SLionel Sambuc.L007dec6_loop:
266*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
267*ebfedea0SLionel Sambuc.byte	102,15,56,222,217
268*ebfedea0SLionel Sambuc	decl	%ecx
269*ebfedea0SLionel Sambuc.byte	102,15,56,222,225
270*ebfedea0SLionel Sambuc.byte	102,15,56,222,233
271*ebfedea0SLionel Sambuc.byte	102,15,56,222,241
272*ebfedea0SLionel Sambuc.byte	102,15,56,222,249
273*ebfedea0SLionel Sambuc.align	16
274*ebfedea0SLionel Sambuc.L_aesni_decrypt6_enter:
275*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
276*ebfedea0SLionel Sambuc.byte	102,15,56,222,208
277*ebfedea0SLionel Sambuc.byte	102,15,56,222,216
278*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
279*ebfedea0SLionel Sambuc.byte	102,15,56,222,224
280*ebfedea0SLionel Sambuc.byte	102,15,56,222,232
281*ebfedea0SLionel Sambuc.byte	102,15,56,222,240
282*ebfedea0SLionel Sambuc.byte	102,15,56,222,248
283*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
284*ebfedea0SLionel Sambuc	jnz	.L007dec6_loop
285*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
286*ebfedea0SLionel Sambuc.byte	102,15,56,222,217
287*ebfedea0SLionel Sambuc.byte	102,15,56,222,225
288*ebfedea0SLionel Sambuc.byte	102,15,56,222,233
289*ebfedea0SLionel Sambuc.byte	102,15,56,222,241
290*ebfedea0SLionel Sambuc.byte	102,15,56,222,249
291*ebfedea0SLionel Sambuc.byte	102,15,56,223,208
292*ebfedea0SLionel Sambuc.byte	102,15,56,223,216
293*ebfedea0SLionel Sambuc.byte	102,15,56,223,224
294*ebfedea0SLionel Sambuc.byte	102,15,56,223,232
295*ebfedea0SLionel Sambuc.byte	102,15,56,223,240
296*ebfedea0SLionel Sambuc.byte	102,15,56,223,248
297*ebfedea0SLionel Sambuc	ret
298*ebfedea0SLionel Sambuc.size	_aesni_decrypt6,.-_aesni_decrypt6
299*ebfedea0SLionel Sambuc.globl	aesni_ecb_encrypt
300*ebfedea0SLionel Sambuc.type	aesni_ecb_encrypt,@function
301*ebfedea0SLionel Sambuc.align	16
302*ebfedea0SLionel Sambucaesni_ecb_encrypt:
303*ebfedea0SLionel Sambuc.L_aesni_ecb_encrypt_begin:
304*ebfedea0SLionel Sambuc	pushl	%ebp
305*ebfedea0SLionel Sambuc	pushl	%ebx
306*ebfedea0SLionel Sambuc	pushl	%esi
307*ebfedea0SLionel Sambuc	pushl	%edi
308*ebfedea0SLionel Sambuc	movl	20(%esp),%esi
309*ebfedea0SLionel Sambuc	movl	24(%esp),%edi
310*ebfedea0SLionel Sambuc	movl	28(%esp),%eax
311*ebfedea0SLionel Sambuc	movl	32(%esp),%edx
312*ebfedea0SLionel Sambuc	movl	36(%esp),%ebx
313*ebfedea0SLionel Sambuc	andl	$-16,%eax
314*ebfedea0SLionel Sambuc	jz	.L008ecb_ret
315*ebfedea0SLionel Sambuc	movl	240(%edx),%ecx
316*ebfedea0SLionel Sambuc	testl	%ebx,%ebx
317*ebfedea0SLionel Sambuc	jz	.L009ecb_decrypt
318*ebfedea0SLionel Sambuc	movl	%edx,%ebp
319*ebfedea0SLionel Sambuc	movl	%ecx,%ebx
320*ebfedea0SLionel Sambuc	cmpl	$96,%eax
321*ebfedea0SLionel Sambuc	jb	.L010ecb_enc_tail
322*ebfedea0SLionel Sambuc	movdqu	(%esi),%xmm2
323*ebfedea0SLionel Sambuc	movdqu	16(%esi),%xmm3
324*ebfedea0SLionel Sambuc	movdqu	32(%esi),%xmm4
325*ebfedea0SLionel Sambuc	movdqu	48(%esi),%xmm5
326*ebfedea0SLionel Sambuc	movdqu	64(%esi),%xmm6
327*ebfedea0SLionel Sambuc	movdqu	80(%esi),%xmm7
328*ebfedea0SLionel Sambuc	leal	96(%esi),%esi
329*ebfedea0SLionel Sambuc	subl	$96,%eax
330*ebfedea0SLionel Sambuc	jmp	.L011ecb_enc_loop6_enter
331*ebfedea0SLionel Sambuc.align	16
332*ebfedea0SLionel Sambuc.L012ecb_enc_loop6:
333*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
334*ebfedea0SLionel Sambuc	movdqu	(%esi),%xmm2
335*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
336*ebfedea0SLionel Sambuc	movdqu	16(%esi),%xmm3
337*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
338*ebfedea0SLionel Sambuc	movdqu	32(%esi),%xmm4
339*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
340*ebfedea0SLionel Sambuc	movdqu	48(%esi),%xmm5
341*ebfedea0SLionel Sambuc	movups	%xmm6,64(%edi)
342*ebfedea0SLionel Sambuc	movdqu	64(%esi),%xmm6
343*ebfedea0SLionel Sambuc	movups	%xmm7,80(%edi)
344*ebfedea0SLionel Sambuc	leal	96(%edi),%edi
345*ebfedea0SLionel Sambuc	movdqu	80(%esi),%xmm7
346*ebfedea0SLionel Sambuc	leal	96(%esi),%esi
347*ebfedea0SLionel Sambuc.L011ecb_enc_loop6_enter:
348*ebfedea0SLionel Sambuc	call	_aesni_encrypt6
349*ebfedea0SLionel Sambuc	movl	%ebp,%edx
350*ebfedea0SLionel Sambuc	movl	%ebx,%ecx
351*ebfedea0SLionel Sambuc	subl	$96,%eax
352*ebfedea0SLionel Sambuc	jnc	.L012ecb_enc_loop6
353*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
354*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
355*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
356*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
357*ebfedea0SLionel Sambuc	movups	%xmm6,64(%edi)
358*ebfedea0SLionel Sambuc	movups	%xmm7,80(%edi)
359*ebfedea0SLionel Sambuc	leal	96(%edi),%edi
360*ebfedea0SLionel Sambuc	addl	$96,%eax
361*ebfedea0SLionel Sambuc	jz	.L008ecb_ret
362*ebfedea0SLionel Sambuc.L010ecb_enc_tail:
363*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
364*ebfedea0SLionel Sambuc	cmpl	$32,%eax
365*ebfedea0SLionel Sambuc	jb	.L013ecb_enc_one
366*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm3
367*ebfedea0SLionel Sambuc	je	.L014ecb_enc_two
368*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm4
369*ebfedea0SLionel Sambuc	cmpl	$64,%eax
370*ebfedea0SLionel Sambuc	jb	.L015ecb_enc_three
371*ebfedea0SLionel Sambuc	movups	48(%esi),%xmm5
372*ebfedea0SLionel Sambuc	je	.L016ecb_enc_four
373*ebfedea0SLionel Sambuc	movups	64(%esi),%xmm6
374*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm7
375*ebfedea0SLionel Sambuc	call	_aesni_encrypt6
376*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
377*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
378*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
379*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
380*ebfedea0SLionel Sambuc	movups	%xmm6,64(%edi)
381*ebfedea0SLionel Sambuc	jmp	.L008ecb_ret
382*ebfedea0SLionel Sambuc.align	16
383*ebfedea0SLionel Sambuc.L013ecb_enc_one:
384*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
385*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
386*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
387*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
388*ebfedea0SLionel Sambuc.L017enc1_loop_3:
389*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
390*ebfedea0SLionel Sambuc	decl	%ecx
391*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
392*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
393*ebfedea0SLionel Sambuc	jnz	.L017enc1_loop_3
394*ebfedea0SLionel Sambuc.byte	102,15,56,221,209
395*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
396*ebfedea0SLionel Sambuc	jmp	.L008ecb_ret
397*ebfedea0SLionel Sambuc.align	16
398*ebfedea0SLionel Sambuc.L014ecb_enc_two:
399*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm4
400*ebfedea0SLionel Sambuc	call	_aesni_encrypt3
401*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
402*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
403*ebfedea0SLionel Sambuc	jmp	.L008ecb_ret
404*ebfedea0SLionel Sambuc.align	16
405*ebfedea0SLionel Sambuc.L015ecb_enc_three:
406*ebfedea0SLionel Sambuc	call	_aesni_encrypt3
407*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
408*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
409*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
410*ebfedea0SLionel Sambuc	jmp	.L008ecb_ret
411*ebfedea0SLionel Sambuc.align	16
412*ebfedea0SLionel Sambuc.L016ecb_enc_four:
413*ebfedea0SLionel Sambuc	call	_aesni_encrypt4
414*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
415*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
416*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
417*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
418*ebfedea0SLionel Sambuc	jmp	.L008ecb_ret
419*ebfedea0SLionel Sambuc.align	16
420*ebfedea0SLionel Sambuc.L009ecb_decrypt:
421*ebfedea0SLionel Sambuc	movl	%edx,%ebp
422*ebfedea0SLionel Sambuc	movl	%ecx,%ebx
423*ebfedea0SLionel Sambuc	cmpl	$96,%eax
424*ebfedea0SLionel Sambuc	jb	.L018ecb_dec_tail
425*ebfedea0SLionel Sambuc	movdqu	(%esi),%xmm2
426*ebfedea0SLionel Sambuc	movdqu	16(%esi),%xmm3
427*ebfedea0SLionel Sambuc	movdqu	32(%esi),%xmm4
428*ebfedea0SLionel Sambuc	movdqu	48(%esi),%xmm5
429*ebfedea0SLionel Sambuc	movdqu	64(%esi),%xmm6
430*ebfedea0SLionel Sambuc	movdqu	80(%esi),%xmm7
431*ebfedea0SLionel Sambuc	leal	96(%esi),%esi
432*ebfedea0SLionel Sambuc	subl	$96,%eax
433*ebfedea0SLionel Sambuc	jmp	.L019ecb_dec_loop6_enter
434*ebfedea0SLionel Sambuc.align	16
435*ebfedea0SLionel Sambuc.L020ecb_dec_loop6:
436*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
437*ebfedea0SLionel Sambuc	movdqu	(%esi),%xmm2
438*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
439*ebfedea0SLionel Sambuc	movdqu	16(%esi),%xmm3
440*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
441*ebfedea0SLionel Sambuc	movdqu	32(%esi),%xmm4
442*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
443*ebfedea0SLionel Sambuc	movdqu	48(%esi),%xmm5
444*ebfedea0SLionel Sambuc	movups	%xmm6,64(%edi)
445*ebfedea0SLionel Sambuc	movdqu	64(%esi),%xmm6
446*ebfedea0SLionel Sambuc	movups	%xmm7,80(%edi)
447*ebfedea0SLionel Sambuc	leal	96(%edi),%edi
448*ebfedea0SLionel Sambuc	movdqu	80(%esi),%xmm7
449*ebfedea0SLionel Sambuc	leal	96(%esi),%esi
450*ebfedea0SLionel Sambuc.L019ecb_dec_loop6_enter:
451*ebfedea0SLionel Sambuc	call	_aesni_decrypt6
452*ebfedea0SLionel Sambuc	movl	%ebp,%edx
453*ebfedea0SLionel Sambuc	movl	%ebx,%ecx
454*ebfedea0SLionel Sambuc	subl	$96,%eax
455*ebfedea0SLionel Sambuc	jnc	.L020ecb_dec_loop6
456*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
457*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
458*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
459*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
460*ebfedea0SLionel Sambuc	movups	%xmm6,64(%edi)
461*ebfedea0SLionel Sambuc	movups	%xmm7,80(%edi)
462*ebfedea0SLionel Sambuc	leal	96(%edi),%edi
463*ebfedea0SLionel Sambuc	addl	$96,%eax
464*ebfedea0SLionel Sambuc	jz	.L008ecb_ret
465*ebfedea0SLionel Sambuc.L018ecb_dec_tail:
466*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
467*ebfedea0SLionel Sambuc	cmpl	$32,%eax
468*ebfedea0SLionel Sambuc	jb	.L021ecb_dec_one
469*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm3
470*ebfedea0SLionel Sambuc	je	.L022ecb_dec_two
471*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm4
472*ebfedea0SLionel Sambuc	cmpl	$64,%eax
473*ebfedea0SLionel Sambuc	jb	.L023ecb_dec_three
474*ebfedea0SLionel Sambuc	movups	48(%esi),%xmm5
475*ebfedea0SLionel Sambuc	je	.L024ecb_dec_four
476*ebfedea0SLionel Sambuc	movups	64(%esi),%xmm6
477*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm7
478*ebfedea0SLionel Sambuc	call	_aesni_decrypt6
479*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
480*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
481*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
482*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
483*ebfedea0SLionel Sambuc	movups	%xmm6,64(%edi)
484*ebfedea0SLionel Sambuc	jmp	.L008ecb_ret
485*ebfedea0SLionel Sambuc.align	16
486*ebfedea0SLionel Sambuc.L021ecb_dec_one:
487*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
488*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
489*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
490*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
491*ebfedea0SLionel Sambuc.L025dec1_loop_4:
492*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
493*ebfedea0SLionel Sambuc	decl	%ecx
494*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
495*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
496*ebfedea0SLionel Sambuc	jnz	.L025dec1_loop_4
497*ebfedea0SLionel Sambuc.byte	102,15,56,223,209
498*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
499*ebfedea0SLionel Sambuc	jmp	.L008ecb_ret
500*ebfedea0SLionel Sambuc.align	16
501*ebfedea0SLionel Sambuc.L022ecb_dec_two:
502*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm4
503*ebfedea0SLionel Sambuc	call	_aesni_decrypt3
504*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
505*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
506*ebfedea0SLionel Sambuc	jmp	.L008ecb_ret
507*ebfedea0SLionel Sambuc.align	16
508*ebfedea0SLionel Sambuc.L023ecb_dec_three:
509*ebfedea0SLionel Sambuc	call	_aesni_decrypt3
510*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
511*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
512*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
513*ebfedea0SLionel Sambuc	jmp	.L008ecb_ret
514*ebfedea0SLionel Sambuc.align	16
515*ebfedea0SLionel Sambuc.L024ecb_dec_four:
516*ebfedea0SLionel Sambuc	call	_aesni_decrypt4
517*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
518*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
519*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
520*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
521*ebfedea0SLionel Sambuc.L008ecb_ret:
522*ebfedea0SLionel Sambuc	popl	%edi
523*ebfedea0SLionel Sambuc	popl	%esi
524*ebfedea0SLionel Sambuc	popl	%ebx
525*ebfedea0SLionel Sambuc	popl	%ebp
526*ebfedea0SLionel Sambuc	ret
527*ebfedea0SLionel Sambuc.size	aesni_ecb_encrypt,.-.L_aesni_ecb_encrypt_begin
528*ebfedea0SLionel Sambuc.globl	aesni_ccm64_encrypt_blocks
529*ebfedea0SLionel Sambuc.type	aesni_ccm64_encrypt_blocks,@function
530*ebfedea0SLionel Sambuc.align	16
531*ebfedea0SLionel Sambucaesni_ccm64_encrypt_blocks:
532*ebfedea0SLionel Sambuc.L_aesni_ccm64_encrypt_blocks_begin:
533*ebfedea0SLionel Sambuc	pushl	%ebp
534*ebfedea0SLionel Sambuc	pushl	%ebx
535*ebfedea0SLionel Sambuc	pushl	%esi
536*ebfedea0SLionel Sambuc	pushl	%edi
537*ebfedea0SLionel Sambuc	movl	20(%esp),%esi
538*ebfedea0SLionel Sambuc	movl	24(%esp),%edi
539*ebfedea0SLionel Sambuc	movl	28(%esp),%eax
540*ebfedea0SLionel Sambuc	movl	32(%esp),%edx
541*ebfedea0SLionel Sambuc	movl	36(%esp),%ebx
542*ebfedea0SLionel Sambuc	movl	40(%esp),%ecx
543*ebfedea0SLionel Sambuc	movl	%esp,%ebp
544*ebfedea0SLionel Sambuc	subl	$60,%esp
545*ebfedea0SLionel Sambuc	andl	$-16,%esp
546*ebfedea0SLionel Sambuc	movl	%ebp,48(%esp)
547*ebfedea0SLionel Sambuc	movdqu	(%ebx),%xmm7
548*ebfedea0SLionel Sambuc	movdqu	(%ecx),%xmm3
549*ebfedea0SLionel Sambuc	movl	240(%edx),%ecx
550*ebfedea0SLionel Sambuc	movl	$202182159,(%esp)
551*ebfedea0SLionel Sambuc	movl	$134810123,4(%esp)
552*ebfedea0SLionel Sambuc	movl	$67438087,8(%esp)
553*ebfedea0SLionel Sambuc	movl	$66051,12(%esp)
554*ebfedea0SLionel Sambuc	movl	$1,%ebx
555*ebfedea0SLionel Sambuc	xorl	%ebp,%ebp
556*ebfedea0SLionel Sambuc	movl	%ebx,16(%esp)
557*ebfedea0SLionel Sambuc	movl	%ebp,20(%esp)
558*ebfedea0SLionel Sambuc	movl	%ebp,24(%esp)
559*ebfedea0SLionel Sambuc	movl	%ebp,28(%esp)
560*ebfedea0SLionel Sambuc	shrl	$1,%ecx
561*ebfedea0SLionel Sambuc	leal	(%edx),%ebp
562*ebfedea0SLionel Sambuc	movdqa	(%esp),%xmm5
563*ebfedea0SLionel Sambuc	movdqa	%xmm7,%xmm2
564*ebfedea0SLionel Sambuc	movl	%ecx,%ebx
565*ebfedea0SLionel Sambuc.byte	102,15,56,0,253
566*ebfedea0SLionel Sambuc.L026ccm64_enc_outer:
567*ebfedea0SLionel Sambuc	movups	(%ebp),%xmm0
568*ebfedea0SLionel Sambuc	movl	%ebx,%ecx
569*ebfedea0SLionel Sambuc	movups	(%esi),%xmm6
570*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
571*ebfedea0SLionel Sambuc	movups	16(%ebp),%xmm1
572*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm0
573*ebfedea0SLionel Sambuc	leal	32(%ebp),%edx
574*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm3
575*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
576*ebfedea0SLionel Sambuc.L027ccm64_enc2_loop:
577*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
578*ebfedea0SLionel Sambuc	decl	%ecx
579*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
580*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
581*ebfedea0SLionel Sambuc.byte	102,15,56,220,208
582*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
583*ebfedea0SLionel Sambuc.byte	102,15,56,220,216
584*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
585*ebfedea0SLionel Sambuc	jnz	.L027ccm64_enc2_loop
586*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
587*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
588*ebfedea0SLionel Sambuc	paddq	16(%esp),%xmm7
589*ebfedea0SLionel Sambuc.byte	102,15,56,221,208
590*ebfedea0SLionel Sambuc.byte	102,15,56,221,216
591*ebfedea0SLionel Sambuc	decl	%eax
592*ebfedea0SLionel Sambuc	leal	16(%esi),%esi
593*ebfedea0SLionel Sambuc	xorps	%xmm2,%xmm6
594*ebfedea0SLionel Sambuc	movdqa	%xmm7,%xmm2
595*ebfedea0SLionel Sambuc	movups	%xmm6,(%edi)
596*ebfedea0SLionel Sambuc	leal	16(%edi),%edi
597*ebfedea0SLionel Sambuc.byte	102,15,56,0,213
598*ebfedea0SLionel Sambuc	jnz	.L026ccm64_enc_outer
599*ebfedea0SLionel Sambuc	movl	48(%esp),%esp
600*ebfedea0SLionel Sambuc	movl	40(%esp),%edi
601*ebfedea0SLionel Sambuc	movups	%xmm3,(%edi)
602*ebfedea0SLionel Sambuc	popl	%edi
603*ebfedea0SLionel Sambuc	popl	%esi
604*ebfedea0SLionel Sambuc	popl	%ebx
605*ebfedea0SLionel Sambuc	popl	%ebp
606*ebfedea0SLionel Sambuc	ret
607*ebfedea0SLionel Sambuc.size	aesni_ccm64_encrypt_blocks,.-.L_aesni_ccm64_encrypt_blocks_begin
608*ebfedea0SLionel Sambuc.globl	aesni_ccm64_decrypt_blocks
609*ebfedea0SLionel Sambuc.type	aesni_ccm64_decrypt_blocks,@function
610*ebfedea0SLionel Sambuc.align	16
611*ebfedea0SLionel Sambucaesni_ccm64_decrypt_blocks:
612*ebfedea0SLionel Sambuc.L_aesni_ccm64_decrypt_blocks_begin:
613*ebfedea0SLionel Sambuc	pushl	%ebp
614*ebfedea0SLionel Sambuc	pushl	%ebx
615*ebfedea0SLionel Sambuc	pushl	%esi
616*ebfedea0SLionel Sambuc	pushl	%edi
617*ebfedea0SLionel Sambuc	movl	20(%esp),%esi
618*ebfedea0SLionel Sambuc	movl	24(%esp),%edi
619*ebfedea0SLionel Sambuc	movl	28(%esp),%eax
620*ebfedea0SLionel Sambuc	movl	32(%esp),%edx
621*ebfedea0SLionel Sambuc	movl	36(%esp),%ebx
622*ebfedea0SLionel Sambuc	movl	40(%esp),%ecx
623*ebfedea0SLionel Sambuc	movl	%esp,%ebp
624*ebfedea0SLionel Sambuc	subl	$60,%esp
625*ebfedea0SLionel Sambuc	andl	$-16,%esp
626*ebfedea0SLionel Sambuc	movl	%ebp,48(%esp)
627*ebfedea0SLionel Sambuc	movdqu	(%ebx),%xmm7
628*ebfedea0SLionel Sambuc	movdqu	(%ecx),%xmm3
629*ebfedea0SLionel Sambuc	movl	240(%edx),%ecx
630*ebfedea0SLionel Sambuc	movl	$202182159,(%esp)
631*ebfedea0SLionel Sambuc	movl	$134810123,4(%esp)
632*ebfedea0SLionel Sambuc	movl	$67438087,8(%esp)
633*ebfedea0SLionel Sambuc	movl	$66051,12(%esp)
634*ebfedea0SLionel Sambuc	movl	$1,%ebx
635*ebfedea0SLionel Sambuc	xorl	%ebp,%ebp
636*ebfedea0SLionel Sambuc	movl	%ebx,16(%esp)
637*ebfedea0SLionel Sambuc	movl	%ebp,20(%esp)
638*ebfedea0SLionel Sambuc	movl	%ebp,24(%esp)
639*ebfedea0SLionel Sambuc	movl	%ebp,28(%esp)
640*ebfedea0SLionel Sambuc	movdqa	(%esp),%xmm5
641*ebfedea0SLionel Sambuc	movdqa	%xmm7,%xmm2
642*ebfedea0SLionel Sambuc	movl	%edx,%ebp
643*ebfedea0SLionel Sambuc	movl	%ecx,%ebx
644*ebfedea0SLionel Sambuc.byte	102,15,56,0,253
645*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
646*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
647*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
648*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
649*ebfedea0SLionel Sambuc.L028enc1_loop_5:
650*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
651*ebfedea0SLionel Sambuc	decl	%ecx
652*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
653*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
654*ebfedea0SLionel Sambuc	jnz	.L028enc1_loop_5
655*ebfedea0SLionel Sambuc.byte	102,15,56,221,209
656*ebfedea0SLionel Sambuc	movups	(%esi),%xmm6
657*ebfedea0SLionel Sambuc	paddq	16(%esp),%xmm7
658*ebfedea0SLionel Sambuc	leal	16(%esi),%esi
659*ebfedea0SLionel Sambuc	jmp	.L029ccm64_dec_outer
660*ebfedea0SLionel Sambuc.align	16
661*ebfedea0SLionel Sambuc.L029ccm64_dec_outer:
662*ebfedea0SLionel Sambuc	xorps	%xmm2,%xmm6
663*ebfedea0SLionel Sambuc	movdqa	%xmm7,%xmm2
664*ebfedea0SLionel Sambuc	movl	%ebx,%ecx
665*ebfedea0SLionel Sambuc	movups	%xmm6,(%edi)
666*ebfedea0SLionel Sambuc	leal	16(%edi),%edi
667*ebfedea0SLionel Sambuc.byte	102,15,56,0,213
668*ebfedea0SLionel Sambuc	subl	$1,%eax
669*ebfedea0SLionel Sambuc	jz	.L030ccm64_dec_break
670*ebfedea0SLionel Sambuc	movups	(%ebp),%xmm0
671*ebfedea0SLionel Sambuc	shrl	$1,%ecx
672*ebfedea0SLionel Sambuc	movups	16(%ebp),%xmm1
673*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm6
674*ebfedea0SLionel Sambuc	leal	32(%ebp),%edx
675*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
676*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
677*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
678*ebfedea0SLionel Sambuc.L031ccm64_dec2_loop:
679*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
680*ebfedea0SLionel Sambuc	decl	%ecx
681*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
682*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
683*ebfedea0SLionel Sambuc.byte	102,15,56,220,208
684*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
685*ebfedea0SLionel Sambuc.byte	102,15,56,220,216
686*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
687*ebfedea0SLionel Sambuc	jnz	.L031ccm64_dec2_loop
688*ebfedea0SLionel Sambuc	movups	(%esi),%xmm6
689*ebfedea0SLionel Sambuc	paddq	16(%esp),%xmm7
690*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
691*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
692*ebfedea0SLionel Sambuc	leal	16(%esi),%esi
693*ebfedea0SLionel Sambuc.byte	102,15,56,221,208
694*ebfedea0SLionel Sambuc.byte	102,15,56,221,216
695*ebfedea0SLionel Sambuc	jmp	.L029ccm64_dec_outer
696*ebfedea0SLionel Sambuc.align	16
697*ebfedea0SLionel Sambuc.L030ccm64_dec_break:
698*ebfedea0SLionel Sambuc	movl	%ebp,%edx
699*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
700*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
701*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm6
702*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
703*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
704*ebfedea0SLionel Sambuc.L032enc1_loop_6:
705*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
706*ebfedea0SLionel Sambuc	decl	%ecx
707*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
708*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
709*ebfedea0SLionel Sambuc	jnz	.L032enc1_loop_6
710*ebfedea0SLionel Sambuc.byte	102,15,56,221,217
711*ebfedea0SLionel Sambuc	movl	48(%esp),%esp
712*ebfedea0SLionel Sambuc	movl	40(%esp),%edi
713*ebfedea0SLionel Sambuc	movups	%xmm3,(%edi)
714*ebfedea0SLionel Sambuc	popl	%edi
715*ebfedea0SLionel Sambuc	popl	%esi
716*ebfedea0SLionel Sambuc	popl	%ebx
717*ebfedea0SLionel Sambuc	popl	%ebp
718*ebfedea0SLionel Sambuc	ret
719*ebfedea0SLionel Sambuc.size	aesni_ccm64_decrypt_blocks,.-.L_aesni_ccm64_decrypt_blocks_begin
720*ebfedea0SLionel Sambuc.globl	aesni_ctr32_encrypt_blocks
721*ebfedea0SLionel Sambuc.type	aesni_ctr32_encrypt_blocks,@function
722*ebfedea0SLionel Sambuc.align	16
723*ebfedea0SLionel Sambucaesni_ctr32_encrypt_blocks:
724*ebfedea0SLionel Sambuc.L_aesni_ctr32_encrypt_blocks_begin:
725*ebfedea0SLionel Sambuc	pushl	%ebp
726*ebfedea0SLionel Sambuc	pushl	%ebx
727*ebfedea0SLionel Sambuc	pushl	%esi
728*ebfedea0SLionel Sambuc	pushl	%edi
729*ebfedea0SLionel Sambuc	movl	20(%esp),%esi
730*ebfedea0SLionel Sambuc	movl	24(%esp),%edi
731*ebfedea0SLionel Sambuc	movl	28(%esp),%eax
732*ebfedea0SLionel Sambuc	movl	32(%esp),%edx
733*ebfedea0SLionel Sambuc	movl	36(%esp),%ebx
734*ebfedea0SLionel Sambuc	movl	%esp,%ebp
735*ebfedea0SLionel Sambuc	subl	$88,%esp
736*ebfedea0SLionel Sambuc	andl	$-16,%esp
737*ebfedea0SLionel Sambuc	movl	%ebp,80(%esp)
738*ebfedea0SLionel Sambuc	cmpl	$1,%eax
739*ebfedea0SLionel Sambuc	je	.L033ctr32_one_shortcut
740*ebfedea0SLionel Sambuc	movdqu	(%ebx),%xmm7
741*ebfedea0SLionel Sambuc	movl	$202182159,(%esp)
742*ebfedea0SLionel Sambuc	movl	$134810123,4(%esp)
743*ebfedea0SLionel Sambuc	movl	$67438087,8(%esp)
744*ebfedea0SLionel Sambuc	movl	$66051,12(%esp)
745*ebfedea0SLionel Sambuc	movl	$6,%ecx
746*ebfedea0SLionel Sambuc	xorl	%ebp,%ebp
747*ebfedea0SLionel Sambuc	movl	%ecx,16(%esp)
748*ebfedea0SLionel Sambuc	movl	%ecx,20(%esp)
749*ebfedea0SLionel Sambuc	movl	%ecx,24(%esp)
750*ebfedea0SLionel Sambuc	movl	%ebp,28(%esp)
751*ebfedea0SLionel Sambuc.byte	102,15,58,22,251,3
752*ebfedea0SLionel Sambuc.byte	102,15,58,34,253,3
753*ebfedea0SLionel Sambuc	movl	240(%edx),%ecx
754*ebfedea0SLionel Sambuc	bswap	%ebx
755*ebfedea0SLionel Sambuc	pxor	%xmm1,%xmm1
756*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
757*ebfedea0SLionel Sambuc	movdqa	(%esp),%xmm2
758*ebfedea0SLionel Sambuc.byte	102,15,58,34,203,0
759*ebfedea0SLionel Sambuc	leal	3(%ebx),%ebp
760*ebfedea0SLionel Sambuc.byte	102,15,58,34,197,0
761*ebfedea0SLionel Sambuc	incl	%ebx
762*ebfedea0SLionel Sambuc.byte	102,15,58,34,203,1
763*ebfedea0SLionel Sambuc	incl	%ebp
764*ebfedea0SLionel Sambuc.byte	102,15,58,34,197,1
765*ebfedea0SLionel Sambuc	incl	%ebx
766*ebfedea0SLionel Sambuc.byte	102,15,58,34,203,2
767*ebfedea0SLionel Sambuc	incl	%ebp
768*ebfedea0SLionel Sambuc.byte	102,15,58,34,197,2
769*ebfedea0SLionel Sambuc	movdqa	%xmm1,48(%esp)
770*ebfedea0SLionel Sambuc.byte	102,15,56,0,202
771*ebfedea0SLionel Sambuc	movdqa	%xmm0,64(%esp)
772*ebfedea0SLionel Sambuc.byte	102,15,56,0,194
773*ebfedea0SLionel Sambuc	pshufd	$192,%xmm1,%xmm2
774*ebfedea0SLionel Sambuc	pshufd	$128,%xmm1,%xmm3
775*ebfedea0SLionel Sambuc	cmpl	$6,%eax
776*ebfedea0SLionel Sambuc	jb	.L034ctr32_tail
777*ebfedea0SLionel Sambuc	movdqa	%xmm7,32(%esp)
778*ebfedea0SLionel Sambuc	shrl	$1,%ecx
779*ebfedea0SLionel Sambuc	movl	%edx,%ebp
780*ebfedea0SLionel Sambuc	movl	%ecx,%ebx
781*ebfedea0SLionel Sambuc	subl	$6,%eax
782*ebfedea0SLionel Sambuc	jmp	.L035ctr32_loop6
783*ebfedea0SLionel Sambuc.align	16
784*ebfedea0SLionel Sambuc.L035ctr32_loop6:
785*ebfedea0SLionel Sambuc	pshufd	$64,%xmm1,%xmm4
786*ebfedea0SLionel Sambuc	movdqa	32(%esp),%xmm1
787*ebfedea0SLionel Sambuc	pshufd	$192,%xmm0,%xmm5
788*ebfedea0SLionel Sambuc	por	%xmm1,%xmm2
789*ebfedea0SLionel Sambuc	pshufd	$128,%xmm0,%xmm6
790*ebfedea0SLionel Sambuc	por	%xmm1,%xmm3
791*ebfedea0SLionel Sambuc	pshufd	$64,%xmm0,%xmm7
792*ebfedea0SLionel Sambuc	por	%xmm1,%xmm4
793*ebfedea0SLionel Sambuc	por	%xmm1,%xmm5
794*ebfedea0SLionel Sambuc	por	%xmm1,%xmm6
795*ebfedea0SLionel Sambuc	por	%xmm1,%xmm7
796*ebfedea0SLionel Sambuc	movups	(%ebp),%xmm0
797*ebfedea0SLionel Sambuc	movups	16(%ebp),%xmm1
798*ebfedea0SLionel Sambuc	leal	32(%ebp),%edx
799*ebfedea0SLionel Sambuc	decl	%ecx
800*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm2
801*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm3
802*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
803*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm4
804*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
805*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm5
806*ebfedea0SLionel Sambuc.byte	102,15,56,220,225
807*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm6
808*ebfedea0SLionel Sambuc.byte	102,15,56,220,233
809*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm7
810*ebfedea0SLionel Sambuc.byte	102,15,56,220,241
811*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
812*ebfedea0SLionel Sambuc.byte	102,15,56,220,249
813*ebfedea0SLionel Sambuc	call	.L_aesni_encrypt6_enter
814*ebfedea0SLionel Sambuc	movups	(%esi),%xmm1
815*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm0
816*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm2
817*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm1
818*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm3
819*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
820*ebfedea0SLionel Sambuc	movdqa	16(%esp),%xmm0
821*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm4
822*ebfedea0SLionel Sambuc	movdqa	48(%esp),%xmm1
823*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
824*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
825*ebfedea0SLionel Sambuc	paddd	%xmm0,%xmm1
826*ebfedea0SLionel Sambuc	paddd	64(%esp),%xmm0
827*ebfedea0SLionel Sambuc	movdqa	(%esp),%xmm2
828*ebfedea0SLionel Sambuc	movups	48(%esi),%xmm3
829*ebfedea0SLionel Sambuc	movups	64(%esi),%xmm4
830*ebfedea0SLionel Sambuc	xorps	%xmm3,%xmm5
831*ebfedea0SLionel Sambuc	movups	80(%esi),%xmm3
832*ebfedea0SLionel Sambuc	leal	96(%esi),%esi
833*ebfedea0SLionel Sambuc	movdqa	%xmm1,48(%esp)
834*ebfedea0SLionel Sambuc.byte	102,15,56,0,202
835*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm6
836*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
837*ebfedea0SLionel Sambuc	xorps	%xmm3,%xmm7
838*ebfedea0SLionel Sambuc	movdqa	%xmm0,64(%esp)
839*ebfedea0SLionel Sambuc.byte	102,15,56,0,194
840*ebfedea0SLionel Sambuc	movups	%xmm6,64(%edi)
841*ebfedea0SLionel Sambuc	pshufd	$192,%xmm1,%xmm2
842*ebfedea0SLionel Sambuc	movups	%xmm7,80(%edi)
843*ebfedea0SLionel Sambuc	leal	96(%edi),%edi
844*ebfedea0SLionel Sambuc	movl	%ebx,%ecx
845*ebfedea0SLionel Sambuc	pshufd	$128,%xmm1,%xmm3
846*ebfedea0SLionel Sambuc	subl	$6,%eax
847*ebfedea0SLionel Sambuc	jnc	.L035ctr32_loop6
848*ebfedea0SLionel Sambuc	addl	$6,%eax
849*ebfedea0SLionel Sambuc	jz	.L036ctr32_ret
850*ebfedea0SLionel Sambuc	movl	%ebp,%edx
851*ebfedea0SLionel Sambuc	leal	1(,%ecx,2),%ecx
852*ebfedea0SLionel Sambuc	movdqa	32(%esp),%xmm7
853*ebfedea0SLionel Sambuc.L034ctr32_tail:
854*ebfedea0SLionel Sambuc	por	%xmm7,%xmm2
855*ebfedea0SLionel Sambuc	cmpl	$2,%eax
856*ebfedea0SLionel Sambuc	jb	.L037ctr32_one
857*ebfedea0SLionel Sambuc	pshufd	$64,%xmm1,%xmm4
858*ebfedea0SLionel Sambuc	por	%xmm7,%xmm3
859*ebfedea0SLionel Sambuc	je	.L038ctr32_two
860*ebfedea0SLionel Sambuc	pshufd	$192,%xmm0,%xmm5
861*ebfedea0SLionel Sambuc	por	%xmm7,%xmm4
862*ebfedea0SLionel Sambuc	cmpl	$4,%eax
863*ebfedea0SLionel Sambuc	jb	.L039ctr32_three
864*ebfedea0SLionel Sambuc	pshufd	$128,%xmm0,%xmm6
865*ebfedea0SLionel Sambuc	por	%xmm7,%xmm5
866*ebfedea0SLionel Sambuc	je	.L040ctr32_four
867*ebfedea0SLionel Sambuc	por	%xmm7,%xmm6
868*ebfedea0SLionel Sambuc	call	_aesni_encrypt6
869*ebfedea0SLionel Sambuc	movups	(%esi),%xmm1
870*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm0
871*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm2
872*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm1
873*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm3
874*ebfedea0SLionel Sambuc	movups	48(%esi),%xmm0
875*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm4
876*ebfedea0SLionel Sambuc	movups	64(%esi),%xmm1
877*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm5
878*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
879*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm6
880*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
881*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
882*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
883*ebfedea0SLionel Sambuc	movups	%xmm6,64(%edi)
884*ebfedea0SLionel Sambuc	jmp	.L036ctr32_ret
885*ebfedea0SLionel Sambuc.align	16
886*ebfedea0SLionel Sambuc.L033ctr32_one_shortcut:
887*ebfedea0SLionel Sambuc	movups	(%ebx),%xmm2
888*ebfedea0SLionel Sambuc	movl	240(%edx),%ecx
889*ebfedea0SLionel Sambuc.L037ctr32_one:
890*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
891*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
892*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
893*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
894*ebfedea0SLionel Sambuc.L041enc1_loop_7:
895*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
896*ebfedea0SLionel Sambuc	decl	%ecx
897*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
898*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
899*ebfedea0SLionel Sambuc	jnz	.L041enc1_loop_7
900*ebfedea0SLionel Sambuc.byte	102,15,56,221,209
901*ebfedea0SLionel Sambuc	movups	(%esi),%xmm6
902*ebfedea0SLionel Sambuc	xorps	%xmm2,%xmm6
903*ebfedea0SLionel Sambuc	movups	%xmm6,(%edi)
904*ebfedea0SLionel Sambuc	jmp	.L036ctr32_ret
905*ebfedea0SLionel Sambuc.align	16
906*ebfedea0SLionel Sambuc.L038ctr32_two:
907*ebfedea0SLionel Sambuc	call	_aesni_encrypt3
908*ebfedea0SLionel Sambuc	movups	(%esi),%xmm5
909*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm6
910*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
911*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
912*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
913*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
914*ebfedea0SLionel Sambuc	jmp	.L036ctr32_ret
915*ebfedea0SLionel Sambuc.align	16
916*ebfedea0SLionel Sambuc.L039ctr32_three:
917*ebfedea0SLionel Sambuc	call	_aesni_encrypt3
918*ebfedea0SLionel Sambuc	movups	(%esi),%xmm5
919*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm6
920*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
921*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm7
922*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
923*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
924*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm4
925*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
926*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
927*ebfedea0SLionel Sambuc	jmp	.L036ctr32_ret
928*ebfedea0SLionel Sambuc.align	16
929*ebfedea0SLionel Sambuc.L040ctr32_four:
930*ebfedea0SLionel Sambuc	call	_aesni_encrypt4
931*ebfedea0SLionel Sambuc	movups	(%esi),%xmm6
932*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm7
933*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm1
934*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm2
935*ebfedea0SLionel Sambuc	movups	48(%esi),%xmm0
936*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm3
937*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
938*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm4
939*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
940*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm5
941*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
942*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
943*ebfedea0SLionel Sambuc.L036ctr32_ret:
944*ebfedea0SLionel Sambuc	movl	80(%esp),%esp
945*ebfedea0SLionel Sambuc	popl	%edi
946*ebfedea0SLionel Sambuc	popl	%esi
947*ebfedea0SLionel Sambuc	popl	%ebx
948*ebfedea0SLionel Sambuc	popl	%ebp
949*ebfedea0SLionel Sambuc	ret
950*ebfedea0SLionel Sambuc.size	aesni_ctr32_encrypt_blocks,.-.L_aesni_ctr32_encrypt_blocks_begin
951*ebfedea0SLionel Sambuc.globl	aesni_xts_encrypt
952*ebfedea0SLionel Sambuc.type	aesni_xts_encrypt,@function
953*ebfedea0SLionel Sambuc.align	16
954*ebfedea0SLionel Sambucaesni_xts_encrypt:
955*ebfedea0SLionel Sambuc.L_aesni_xts_encrypt_begin:
956*ebfedea0SLionel Sambuc	pushl	%ebp
957*ebfedea0SLionel Sambuc	pushl	%ebx
958*ebfedea0SLionel Sambuc	pushl	%esi
959*ebfedea0SLionel Sambuc	pushl	%edi
960*ebfedea0SLionel Sambuc	movl	36(%esp),%edx
961*ebfedea0SLionel Sambuc	movl	40(%esp),%esi
962*ebfedea0SLionel Sambuc	movl	240(%edx),%ecx
963*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
964*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
965*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
966*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
967*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
968*ebfedea0SLionel Sambuc.L042enc1_loop_8:
969*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
970*ebfedea0SLionel Sambuc	decl	%ecx
971*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
972*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
973*ebfedea0SLionel Sambuc	jnz	.L042enc1_loop_8
974*ebfedea0SLionel Sambuc.byte	102,15,56,221,209
975*ebfedea0SLionel Sambuc	movl	20(%esp),%esi
976*ebfedea0SLionel Sambuc	movl	24(%esp),%edi
977*ebfedea0SLionel Sambuc	movl	28(%esp),%eax
978*ebfedea0SLionel Sambuc	movl	32(%esp),%edx
979*ebfedea0SLionel Sambuc	movl	%esp,%ebp
980*ebfedea0SLionel Sambuc	subl	$120,%esp
981*ebfedea0SLionel Sambuc	movl	240(%edx),%ecx
982*ebfedea0SLionel Sambuc	andl	$-16,%esp
983*ebfedea0SLionel Sambuc	movl	$135,96(%esp)
984*ebfedea0SLionel Sambuc	movl	$0,100(%esp)
985*ebfedea0SLionel Sambuc	movl	$1,104(%esp)
986*ebfedea0SLionel Sambuc	movl	$0,108(%esp)
987*ebfedea0SLionel Sambuc	movl	%eax,112(%esp)
988*ebfedea0SLionel Sambuc	movl	%ebp,116(%esp)
989*ebfedea0SLionel Sambuc	movdqa	%xmm2,%xmm1
990*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
991*ebfedea0SLionel Sambuc	movdqa	96(%esp),%xmm3
992*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
993*ebfedea0SLionel Sambuc	andl	$-16,%eax
994*ebfedea0SLionel Sambuc	movl	%edx,%ebp
995*ebfedea0SLionel Sambuc	movl	%ecx,%ebx
996*ebfedea0SLionel Sambuc	subl	$96,%eax
997*ebfedea0SLionel Sambuc	jc	.L043xts_enc_short
998*ebfedea0SLionel Sambuc	shrl	$1,%ecx
999*ebfedea0SLionel Sambuc	movl	%ecx,%ebx
1000*ebfedea0SLionel Sambuc	jmp	.L044xts_enc_loop6
1001*ebfedea0SLionel Sambuc.align	16
1002*ebfedea0SLionel Sambuc.L044xts_enc_loop6:
1003*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1004*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1005*ebfedea0SLionel Sambuc	movdqa	%xmm1,(%esp)
1006*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1007*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1008*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1009*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1010*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1011*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1012*ebfedea0SLionel Sambuc	movdqa	%xmm1,16(%esp)
1013*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1014*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1015*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1016*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1017*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1018*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1019*ebfedea0SLionel Sambuc	movdqa	%xmm1,32(%esp)
1020*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1021*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1022*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1023*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1024*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1025*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1026*ebfedea0SLionel Sambuc	movdqa	%xmm1,48(%esp)
1027*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1028*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1029*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1030*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1031*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm7
1032*ebfedea0SLionel Sambuc	movdqa	%xmm1,64(%esp)
1033*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1034*ebfedea0SLionel Sambuc	movups	(%ebp),%xmm0
1035*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm7
1036*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1037*ebfedea0SLionel Sambuc	pxor	%xmm1,%xmm7
1038*ebfedea0SLionel Sambuc	movdqu	16(%esi),%xmm3
1039*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
1040*ebfedea0SLionel Sambuc	movdqu	32(%esi),%xmm4
1041*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm3
1042*ebfedea0SLionel Sambuc	movdqu	48(%esi),%xmm5
1043*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm4
1044*ebfedea0SLionel Sambuc	movdqu	64(%esi),%xmm6
1045*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm5
1046*ebfedea0SLionel Sambuc	movdqu	80(%esi),%xmm1
1047*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm6
1048*ebfedea0SLionel Sambuc	leal	96(%esi),%esi
1049*ebfedea0SLionel Sambuc	pxor	(%esp),%xmm2
1050*ebfedea0SLionel Sambuc	movdqa	%xmm7,80(%esp)
1051*ebfedea0SLionel Sambuc	pxor	%xmm1,%xmm7
1052*ebfedea0SLionel Sambuc	movups	16(%ebp),%xmm1
1053*ebfedea0SLionel Sambuc	leal	32(%ebp),%edx
1054*ebfedea0SLionel Sambuc	pxor	16(%esp),%xmm3
1055*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
1056*ebfedea0SLionel Sambuc	pxor	32(%esp),%xmm4
1057*ebfedea0SLionel Sambuc.byte	102,15,56,220,217
1058*ebfedea0SLionel Sambuc	pxor	48(%esp),%xmm5
1059*ebfedea0SLionel Sambuc	decl	%ecx
1060*ebfedea0SLionel Sambuc.byte	102,15,56,220,225
1061*ebfedea0SLionel Sambuc	pxor	64(%esp),%xmm6
1062*ebfedea0SLionel Sambuc.byte	102,15,56,220,233
1063*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm7
1064*ebfedea0SLionel Sambuc.byte	102,15,56,220,241
1065*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
1066*ebfedea0SLionel Sambuc.byte	102,15,56,220,249
1067*ebfedea0SLionel Sambuc	call	.L_aesni_encrypt6_enter
1068*ebfedea0SLionel Sambuc	movdqa	80(%esp),%xmm1
1069*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1070*ebfedea0SLionel Sambuc	xorps	(%esp),%xmm2
1071*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1072*ebfedea0SLionel Sambuc	xorps	16(%esp),%xmm3
1073*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1074*ebfedea0SLionel Sambuc	xorps	32(%esp),%xmm4
1075*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1076*ebfedea0SLionel Sambuc	xorps	48(%esp),%xmm5
1077*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
1078*ebfedea0SLionel Sambuc	xorps	64(%esp),%xmm6
1079*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
1080*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm7
1081*ebfedea0SLionel Sambuc	movups	%xmm6,64(%edi)
1082*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1083*ebfedea0SLionel Sambuc	movups	%xmm7,80(%edi)
1084*ebfedea0SLionel Sambuc	leal	96(%edi),%edi
1085*ebfedea0SLionel Sambuc	movdqa	96(%esp),%xmm3
1086*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1087*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1088*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1089*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1090*ebfedea0SLionel Sambuc	movl	%ebx,%ecx
1091*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1092*ebfedea0SLionel Sambuc	subl	$96,%eax
1093*ebfedea0SLionel Sambuc	jnc	.L044xts_enc_loop6
1094*ebfedea0SLionel Sambuc	leal	1(,%ecx,2),%ecx
1095*ebfedea0SLionel Sambuc	movl	%ebp,%edx
1096*ebfedea0SLionel Sambuc	movl	%ecx,%ebx
1097*ebfedea0SLionel Sambuc.L043xts_enc_short:
1098*ebfedea0SLionel Sambuc	addl	$96,%eax
1099*ebfedea0SLionel Sambuc	jz	.L045xts_enc_done6x
1100*ebfedea0SLionel Sambuc	movdqa	%xmm1,%xmm5
1101*ebfedea0SLionel Sambuc	cmpl	$32,%eax
1102*ebfedea0SLionel Sambuc	jb	.L046xts_enc_one
1103*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1104*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1105*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1106*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1107*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1108*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1109*ebfedea0SLionel Sambuc	je	.L047xts_enc_two
1110*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1111*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1112*ebfedea0SLionel Sambuc	movdqa	%xmm1,%xmm6
1113*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1114*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1115*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1116*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1117*ebfedea0SLionel Sambuc	cmpl	$64,%eax
1118*ebfedea0SLionel Sambuc	jb	.L048xts_enc_three
1119*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1120*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1121*ebfedea0SLionel Sambuc	movdqa	%xmm1,%xmm7
1122*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1123*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1124*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1125*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1126*ebfedea0SLionel Sambuc	movdqa	%xmm5,(%esp)
1127*ebfedea0SLionel Sambuc	movdqa	%xmm6,16(%esp)
1128*ebfedea0SLionel Sambuc	je	.L049xts_enc_four
1129*ebfedea0SLionel Sambuc	movdqa	%xmm7,32(%esp)
1130*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm7
1131*ebfedea0SLionel Sambuc	movdqa	%xmm1,48(%esp)
1132*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1133*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm7
1134*ebfedea0SLionel Sambuc	pxor	%xmm1,%xmm7
1135*ebfedea0SLionel Sambuc	movdqu	(%esi),%xmm2
1136*ebfedea0SLionel Sambuc	movdqu	16(%esi),%xmm3
1137*ebfedea0SLionel Sambuc	movdqu	32(%esi),%xmm4
1138*ebfedea0SLionel Sambuc	pxor	(%esp),%xmm2
1139*ebfedea0SLionel Sambuc	movdqu	48(%esi),%xmm5
1140*ebfedea0SLionel Sambuc	pxor	16(%esp),%xmm3
1141*ebfedea0SLionel Sambuc	movdqu	64(%esi),%xmm6
1142*ebfedea0SLionel Sambuc	pxor	32(%esp),%xmm4
1143*ebfedea0SLionel Sambuc	leal	80(%esi),%esi
1144*ebfedea0SLionel Sambuc	pxor	48(%esp),%xmm5
1145*ebfedea0SLionel Sambuc	movdqa	%xmm7,64(%esp)
1146*ebfedea0SLionel Sambuc	pxor	%xmm7,%xmm6
1147*ebfedea0SLionel Sambuc	call	_aesni_encrypt6
1148*ebfedea0SLionel Sambuc	movaps	64(%esp),%xmm1
1149*ebfedea0SLionel Sambuc	xorps	(%esp),%xmm2
1150*ebfedea0SLionel Sambuc	xorps	16(%esp),%xmm3
1151*ebfedea0SLionel Sambuc	xorps	32(%esp),%xmm4
1152*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1153*ebfedea0SLionel Sambuc	xorps	48(%esp),%xmm5
1154*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1155*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm6
1156*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
1157*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
1158*ebfedea0SLionel Sambuc	movups	%xmm6,64(%edi)
1159*ebfedea0SLionel Sambuc	leal	80(%edi),%edi
1160*ebfedea0SLionel Sambuc	jmp	.L050xts_enc_done
1161*ebfedea0SLionel Sambuc.align	16
1162*ebfedea0SLionel Sambuc.L046xts_enc_one:
1163*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1164*ebfedea0SLionel Sambuc	leal	16(%esi),%esi
1165*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1166*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
1167*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
1168*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
1169*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
1170*ebfedea0SLionel Sambuc.L051enc1_loop_9:
1171*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
1172*ebfedea0SLionel Sambuc	decl	%ecx
1173*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
1174*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
1175*ebfedea0SLionel Sambuc	jnz	.L051enc1_loop_9
1176*ebfedea0SLionel Sambuc.byte	102,15,56,221,209
1177*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1178*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1179*ebfedea0SLionel Sambuc	leal	16(%edi),%edi
1180*ebfedea0SLionel Sambuc	movdqa	%xmm5,%xmm1
1181*ebfedea0SLionel Sambuc	jmp	.L050xts_enc_done
1182*ebfedea0SLionel Sambuc.align	16
1183*ebfedea0SLionel Sambuc.L047xts_enc_two:
1184*ebfedea0SLionel Sambuc	movaps	%xmm1,%xmm6
1185*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1186*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm3
1187*ebfedea0SLionel Sambuc	leal	32(%esi),%esi
1188*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1189*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
1190*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm4
1191*ebfedea0SLionel Sambuc	call	_aesni_encrypt3
1192*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1193*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
1194*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1195*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1196*ebfedea0SLionel Sambuc	leal	32(%edi),%edi
1197*ebfedea0SLionel Sambuc	movdqa	%xmm6,%xmm1
1198*ebfedea0SLionel Sambuc	jmp	.L050xts_enc_done
1199*ebfedea0SLionel Sambuc.align	16
1200*ebfedea0SLionel Sambuc.L048xts_enc_three:
1201*ebfedea0SLionel Sambuc	movaps	%xmm1,%xmm7
1202*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1203*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm3
1204*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm4
1205*ebfedea0SLionel Sambuc	leal	48(%esi),%esi
1206*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1207*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
1208*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm4
1209*ebfedea0SLionel Sambuc	call	_aesni_encrypt3
1210*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1211*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
1212*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm4
1213*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1214*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1215*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
1216*ebfedea0SLionel Sambuc	leal	48(%edi),%edi
1217*ebfedea0SLionel Sambuc	movdqa	%xmm7,%xmm1
1218*ebfedea0SLionel Sambuc	jmp	.L050xts_enc_done
1219*ebfedea0SLionel Sambuc.align	16
1220*ebfedea0SLionel Sambuc.L049xts_enc_four:
1221*ebfedea0SLionel Sambuc	movaps	%xmm1,%xmm6
1222*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1223*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm3
1224*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm4
1225*ebfedea0SLionel Sambuc	xorps	(%esp),%xmm2
1226*ebfedea0SLionel Sambuc	movups	48(%esi),%xmm5
1227*ebfedea0SLionel Sambuc	leal	64(%esi),%esi
1228*ebfedea0SLionel Sambuc	xorps	16(%esp),%xmm3
1229*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm4
1230*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm5
1231*ebfedea0SLionel Sambuc	call	_aesni_encrypt4
1232*ebfedea0SLionel Sambuc	xorps	(%esp),%xmm2
1233*ebfedea0SLionel Sambuc	xorps	16(%esp),%xmm3
1234*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm4
1235*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1236*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm5
1237*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1238*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
1239*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
1240*ebfedea0SLionel Sambuc	leal	64(%edi),%edi
1241*ebfedea0SLionel Sambuc	movdqa	%xmm6,%xmm1
1242*ebfedea0SLionel Sambuc	jmp	.L050xts_enc_done
1243*ebfedea0SLionel Sambuc.align	16
1244*ebfedea0SLionel Sambuc.L045xts_enc_done6x:
1245*ebfedea0SLionel Sambuc	movl	112(%esp),%eax
1246*ebfedea0SLionel Sambuc	andl	$15,%eax
1247*ebfedea0SLionel Sambuc	jz	.L052xts_enc_ret
1248*ebfedea0SLionel Sambuc	movdqa	%xmm1,%xmm5
1249*ebfedea0SLionel Sambuc	movl	%eax,112(%esp)
1250*ebfedea0SLionel Sambuc	jmp	.L053xts_enc_steal
1251*ebfedea0SLionel Sambuc.align	16
1252*ebfedea0SLionel Sambuc.L050xts_enc_done:
1253*ebfedea0SLionel Sambuc	movl	112(%esp),%eax
1254*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1255*ebfedea0SLionel Sambuc	andl	$15,%eax
1256*ebfedea0SLionel Sambuc	jz	.L052xts_enc_ret
1257*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1258*ebfedea0SLionel Sambuc	movl	%eax,112(%esp)
1259*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm5
1260*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1261*ebfedea0SLionel Sambuc	pand	96(%esp),%xmm5
1262*ebfedea0SLionel Sambuc	pxor	%xmm1,%xmm5
1263*ebfedea0SLionel Sambuc.L053xts_enc_steal:
1264*ebfedea0SLionel Sambuc	movzbl	(%esi),%ecx
1265*ebfedea0SLionel Sambuc	movzbl	-16(%edi),%edx
1266*ebfedea0SLionel Sambuc	leal	1(%esi),%esi
1267*ebfedea0SLionel Sambuc	movb	%cl,-16(%edi)
1268*ebfedea0SLionel Sambuc	movb	%dl,(%edi)
1269*ebfedea0SLionel Sambuc	leal	1(%edi),%edi
1270*ebfedea0SLionel Sambuc	subl	$1,%eax
1271*ebfedea0SLionel Sambuc	jnz	.L053xts_enc_steal
1272*ebfedea0SLionel Sambuc	subl	112(%esp),%edi
1273*ebfedea0SLionel Sambuc	movl	%ebp,%edx
1274*ebfedea0SLionel Sambuc	movl	%ebx,%ecx
1275*ebfedea0SLionel Sambuc	movups	-16(%edi),%xmm2
1276*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1277*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
1278*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
1279*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
1280*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
1281*ebfedea0SLionel Sambuc.L054enc1_loop_10:
1282*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
1283*ebfedea0SLionel Sambuc	decl	%ecx
1284*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
1285*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
1286*ebfedea0SLionel Sambuc	jnz	.L054enc1_loop_10
1287*ebfedea0SLionel Sambuc.byte	102,15,56,221,209
1288*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1289*ebfedea0SLionel Sambuc	movups	%xmm2,-16(%edi)
1290*ebfedea0SLionel Sambuc.L052xts_enc_ret:
1291*ebfedea0SLionel Sambuc	movl	116(%esp),%esp
1292*ebfedea0SLionel Sambuc	popl	%edi
1293*ebfedea0SLionel Sambuc	popl	%esi
1294*ebfedea0SLionel Sambuc	popl	%ebx
1295*ebfedea0SLionel Sambuc	popl	%ebp
1296*ebfedea0SLionel Sambuc	ret
1297*ebfedea0SLionel Sambuc.size	aesni_xts_encrypt,.-.L_aesni_xts_encrypt_begin
1298*ebfedea0SLionel Sambuc.globl	aesni_xts_decrypt
1299*ebfedea0SLionel Sambuc.type	aesni_xts_decrypt,@function
1300*ebfedea0SLionel Sambuc.align	16
1301*ebfedea0SLionel Sambucaesni_xts_decrypt:
1302*ebfedea0SLionel Sambuc.L_aesni_xts_decrypt_begin:
1303*ebfedea0SLionel Sambuc	pushl	%ebp
1304*ebfedea0SLionel Sambuc	pushl	%ebx
1305*ebfedea0SLionel Sambuc	pushl	%esi
1306*ebfedea0SLionel Sambuc	pushl	%edi
1307*ebfedea0SLionel Sambuc	movl	36(%esp),%edx
1308*ebfedea0SLionel Sambuc	movl	40(%esp),%esi
1309*ebfedea0SLionel Sambuc	movl	240(%edx),%ecx
1310*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1311*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
1312*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
1313*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
1314*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
1315*ebfedea0SLionel Sambuc.L055enc1_loop_11:
1316*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
1317*ebfedea0SLionel Sambuc	decl	%ecx
1318*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
1319*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
1320*ebfedea0SLionel Sambuc	jnz	.L055enc1_loop_11
1321*ebfedea0SLionel Sambuc.byte	102,15,56,221,209
1322*ebfedea0SLionel Sambuc	movl	20(%esp),%esi
1323*ebfedea0SLionel Sambuc	movl	24(%esp),%edi
1324*ebfedea0SLionel Sambuc	movl	28(%esp),%eax
1325*ebfedea0SLionel Sambuc	movl	32(%esp),%edx
1326*ebfedea0SLionel Sambuc	movl	%esp,%ebp
1327*ebfedea0SLionel Sambuc	subl	$120,%esp
1328*ebfedea0SLionel Sambuc	andl	$-16,%esp
1329*ebfedea0SLionel Sambuc	xorl	%ebx,%ebx
1330*ebfedea0SLionel Sambuc	testl	$15,%eax
1331*ebfedea0SLionel Sambuc	setnz	%bl
1332*ebfedea0SLionel Sambuc	shll	$4,%ebx
1333*ebfedea0SLionel Sambuc	subl	%ebx,%eax
1334*ebfedea0SLionel Sambuc	movl	$135,96(%esp)
1335*ebfedea0SLionel Sambuc	movl	$0,100(%esp)
1336*ebfedea0SLionel Sambuc	movl	$1,104(%esp)
1337*ebfedea0SLionel Sambuc	movl	$0,108(%esp)
1338*ebfedea0SLionel Sambuc	movl	%eax,112(%esp)
1339*ebfedea0SLionel Sambuc	movl	%ebp,116(%esp)
1340*ebfedea0SLionel Sambuc	movl	240(%edx),%ecx
1341*ebfedea0SLionel Sambuc	movl	%edx,%ebp
1342*ebfedea0SLionel Sambuc	movl	%ecx,%ebx
1343*ebfedea0SLionel Sambuc	movdqa	%xmm2,%xmm1
1344*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1345*ebfedea0SLionel Sambuc	movdqa	96(%esp),%xmm3
1346*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1347*ebfedea0SLionel Sambuc	andl	$-16,%eax
1348*ebfedea0SLionel Sambuc	subl	$96,%eax
1349*ebfedea0SLionel Sambuc	jc	.L056xts_dec_short
1350*ebfedea0SLionel Sambuc	shrl	$1,%ecx
1351*ebfedea0SLionel Sambuc	movl	%ecx,%ebx
1352*ebfedea0SLionel Sambuc	jmp	.L057xts_dec_loop6
1353*ebfedea0SLionel Sambuc.align	16
1354*ebfedea0SLionel Sambuc.L057xts_dec_loop6:
1355*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1356*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1357*ebfedea0SLionel Sambuc	movdqa	%xmm1,(%esp)
1358*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1359*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1360*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1361*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1362*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1363*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1364*ebfedea0SLionel Sambuc	movdqa	%xmm1,16(%esp)
1365*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1366*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1367*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1368*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1369*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1370*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1371*ebfedea0SLionel Sambuc	movdqa	%xmm1,32(%esp)
1372*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1373*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1374*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1375*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1376*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1377*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1378*ebfedea0SLionel Sambuc	movdqa	%xmm1,48(%esp)
1379*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1380*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1381*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1382*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1383*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm7
1384*ebfedea0SLionel Sambuc	movdqa	%xmm1,64(%esp)
1385*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1386*ebfedea0SLionel Sambuc	movups	(%ebp),%xmm0
1387*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm7
1388*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1389*ebfedea0SLionel Sambuc	pxor	%xmm1,%xmm7
1390*ebfedea0SLionel Sambuc	movdqu	16(%esi),%xmm3
1391*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
1392*ebfedea0SLionel Sambuc	movdqu	32(%esi),%xmm4
1393*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm3
1394*ebfedea0SLionel Sambuc	movdqu	48(%esi),%xmm5
1395*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm4
1396*ebfedea0SLionel Sambuc	movdqu	64(%esi),%xmm6
1397*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm5
1398*ebfedea0SLionel Sambuc	movdqu	80(%esi),%xmm1
1399*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm6
1400*ebfedea0SLionel Sambuc	leal	96(%esi),%esi
1401*ebfedea0SLionel Sambuc	pxor	(%esp),%xmm2
1402*ebfedea0SLionel Sambuc	movdqa	%xmm7,80(%esp)
1403*ebfedea0SLionel Sambuc	pxor	%xmm1,%xmm7
1404*ebfedea0SLionel Sambuc	movups	16(%ebp),%xmm1
1405*ebfedea0SLionel Sambuc	leal	32(%ebp),%edx
1406*ebfedea0SLionel Sambuc	pxor	16(%esp),%xmm3
1407*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
1408*ebfedea0SLionel Sambuc	pxor	32(%esp),%xmm4
1409*ebfedea0SLionel Sambuc.byte	102,15,56,222,217
1410*ebfedea0SLionel Sambuc	pxor	48(%esp),%xmm5
1411*ebfedea0SLionel Sambuc	decl	%ecx
1412*ebfedea0SLionel Sambuc.byte	102,15,56,222,225
1413*ebfedea0SLionel Sambuc	pxor	64(%esp),%xmm6
1414*ebfedea0SLionel Sambuc.byte	102,15,56,222,233
1415*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm7
1416*ebfedea0SLionel Sambuc.byte	102,15,56,222,241
1417*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
1418*ebfedea0SLionel Sambuc.byte	102,15,56,222,249
1419*ebfedea0SLionel Sambuc	call	.L_aesni_decrypt6_enter
1420*ebfedea0SLionel Sambuc	movdqa	80(%esp),%xmm1
1421*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1422*ebfedea0SLionel Sambuc	xorps	(%esp),%xmm2
1423*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1424*ebfedea0SLionel Sambuc	xorps	16(%esp),%xmm3
1425*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1426*ebfedea0SLionel Sambuc	xorps	32(%esp),%xmm4
1427*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1428*ebfedea0SLionel Sambuc	xorps	48(%esp),%xmm5
1429*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
1430*ebfedea0SLionel Sambuc	xorps	64(%esp),%xmm6
1431*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
1432*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm7
1433*ebfedea0SLionel Sambuc	movups	%xmm6,64(%edi)
1434*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1435*ebfedea0SLionel Sambuc	movups	%xmm7,80(%edi)
1436*ebfedea0SLionel Sambuc	leal	96(%edi),%edi
1437*ebfedea0SLionel Sambuc	movdqa	96(%esp),%xmm3
1438*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1439*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1440*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1441*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1442*ebfedea0SLionel Sambuc	movl	%ebx,%ecx
1443*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1444*ebfedea0SLionel Sambuc	subl	$96,%eax
1445*ebfedea0SLionel Sambuc	jnc	.L057xts_dec_loop6
1446*ebfedea0SLionel Sambuc	leal	1(,%ecx,2),%ecx
1447*ebfedea0SLionel Sambuc	movl	%ebp,%edx
1448*ebfedea0SLionel Sambuc	movl	%ecx,%ebx
1449*ebfedea0SLionel Sambuc.L056xts_dec_short:
1450*ebfedea0SLionel Sambuc	addl	$96,%eax
1451*ebfedea0SLionel Sambuc	jz	.L058xts_dec_done6x
1452*ebfedea0SLionel Sambuc	movdqa	%xmm1,%xmm5
1453*ebfedea0SLionel Sambuc	cmpl	$32,%eax
1454*ebfedea0SLionel Sambuc	jb	.L059xts_dec_one
1455*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1456*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1457*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1458*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1459*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1460*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1461*ebfedea0SLionel Sambuc	je	.L060xts_dec_two
1462*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1463*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1464*ebfedea0SLionel Sambuc	movdqa	%xmm1,%xmm6
1465*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1466*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1467*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1468*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1469*ebfedea0SLionel Sambuc	cmpl	$64,%eax
1470*ebfedea0SLionel Sambuc	jb	.L061xts_dec_three
1471*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1472*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1473*ebfedea0SLionel Sambuc	movdqa	%xmm1,%xmm7
1474*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1475*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1476*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1477*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1478*ebfedea0SLionel Sambuc	movdqa	%xmm5,(%esp)
1479*ebfedea0SLionel Sambuc	movdqa	%xmm6,16(%esp)
1480*ebfedea0SLionel Sambuc	je	.L062xts_dec_four
1481*ebfedea0SLionel Sambuc	movdqa	%xmm7,32(%esp)
1482*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm7
1483*ebfedea0SLionel Sambuc	movdqa	%xmm1,48(%esp)
1484*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1485*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm7
1486*ebfedea0SLionel Sambuc	pxor	%xmm1,%xmm7
1487*ebfedea0SLionel Sambuc	movdqu	(%esi),%xmm2
1488*ebfedea0SLionel Sambuc	movdqu	16(%esi),%xmm3
1489*ebfedea0SLionel Sambuc	movdqu	32(%esi),%xmm4
1490*ebfedea0SLionel Sambuc	pxor	(%esp),%xmm2
1491*ebfedea0SLionel Sambuc	movdqu	48(%esi),%xmm5
1492*ebfedea0SLionel Sambuc	pxor	16(%esp),%xmm3
1493*ebfedea0SLionel Sambuc	movdqu	64(%esi),%xmm6
1494*ebfedea0SLionel Sambuc	pxor	32(%esp),%xmm4
1495*ebfedea0SLionel Sambuc	leal	80(%esi),%esi
1496*ebfedea0SLionel Sambuc	pxor	48(%esp),%xmm5
1497*ebfedea0SLionel Sambuc	movdqa	%xmm7,64(%esp)
1498*ebfedea0SLionel Sambuc	pxor	%xmm7,%xmm6
1499*ebfedea0SLionel Sambuc	call	_aesni_decrypt6
1500*ebfedea0SLionel Sambuc	movaps	64(%esp),%xmm1
1501*ebfedea0SLionel Sambuc	xorps	(%esp),%xmm2
1502*ebfedea0SLionel Sambuc	xorps	16(%esp),%xmm3
1503*ebfedea0SLionel Sambuc	xorps	32(%esp),%xmm4
1504*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1505*ebfedea0SLionel Sambuc	xorps	48(%esp),%xmm5
1506*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1507*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm6
1508*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
1509*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
1510*ebfedea0SLionel Sambuc	movups	%xmm6,64(%edi)
1511*ebfedea0SLionel Sambuc	leal	80(%edi),%edi
1512*ebfedea0SLionel Sambuc	jmp	.L063xts_dec_done
1513*ebfedea0SLionel Sambuc.align	16
1514*ebfedea0SLionel Sambuc.L059xts_dec_one:
1515*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1516*ebfedea0SLionel Sambuc	leal	16(%esi),%esi
1517*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1518*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
1519*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
1520*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
1521*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
1522*ebfedea0SLionel Sambuc.L064dec1_loop_12:
1523*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
1524*ebfedea0SLionel Sambuc	decl	%ecx
1525*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
1526*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
1527*ebfedea0SLionel Sambuc	jnz	.L064dec1_loop_12
1528*ebfedea0SLionel Sambuc.byte	102,15,56,223,209
1529*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1530*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1531*ebfedea0SLionel Sambuc	leal	16(%edi),%edi
1532*ebfedea0SLionel Sambuc	movdqa	%xmm5,%xmm1
1533*ebfedea0SLionel Sambuc	jmp	.L063xts_dec_done
1534*ebfedea0SLionel Sambuc.align	16
1535*ebfedea0SLionel Sambuc.L060xts_dec_two:
1536*ebfedea0SLionel Sambuc	movaps	%xmm1,%xmm6
1537*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1538*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm3
1539*ebfedea0SLionel Sambuc	leal	32(%esi),%esi
1540*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1541*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
1542*ebfedea0SLionel Sambuc	call	_aesni_decrypt3
1543*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1544*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
1545*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1546*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1547*ebfedea0SLionel Sambuc	leal	32(%edi),%edi
1548*ebfedea0SLionel Sambuc	movdqa	%xmm6,%xmm1
1549*ebfedea0SLionel Sambuc	jmp	.L063xts_dec_done
1550*ebfedea0SLionel Sambuc.align	16
1551*ebfedea0SLionel Sambuc.L061xts_dec_three:
1552*ebfedea0SLionel Sambuc	movaps	%xmm1,%xmm7
1553*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1554*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm3
1555*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm4
1556*ebfedea0SLionel Sambuc	leal	48(%esi),%esi
1557*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1558*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
1559*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm4
1560*ebfedea0SLionel Sambuc	call	_aesni_decrypt3
1561*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1562*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
1563*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm4
1564*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1565*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1566*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
1567*ebfedea0SLionel Sambuc	leal	48(%edi),%edi
1568*ebfedea0SLionel Sambuc	movdqa	%xmm7,%xmm1
1569*ebfedea0SLionel Sambuc	jmp	.L063xts_dec_done
1570*ebfedea0SLionel Sambuc.align	16
1571*ebfedea0SLionel Sambuc.L062xts_dec_four:
1572*ebfedea0SLionel Sambuc	movaps	%xmm1,%xmm6
1573*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1574*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm3
1575*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm4
1576*ebfedea0SLionel Sambuc	xorps	(%esp),%xmm2
1577*ebfedea0SLionel Sambuc	movups	48(%esi),%xmm5
1578*ebfedea0SLionel Sambuc	leal	64(%esi),%esi
1579*ebfedea0SLionel Sambuc	xorps	16(%esp),%xmm3
1580*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm4
1581*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm5
1582*ebfedea0SLionel Sambuc	call	_aesni_decrypt4
1583*ebfedea0SLionel Sambuc	xorps	(%esp),%xmm2
1584*ebfedea0SLionel Sambuc	xorps	16(%esp),%xmm3
1585*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm4
1586*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1587*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm5
1588*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1589*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
1590*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
1591*ebfedea0SLionel Sambuc	leal	64(%edi),%edi
1592*ebfedea0SLionel Sambuc	movdqa	%xmm6,%xmm1
1593*ebfedea0SLionel Sambuc	jmp	.L063xts_dec_done
1594*ebfedea0SLionel Sambuc.align	16
1595*ebfedea0SLionel Sambuc.L058xts_dec_done6x:
1596*ebfedea0SLionel Sambuc	movl	112(%esp),%eax
1597*ebfedea0SLionel Sambuc	andl	$15,%eax
1598*ebfedea0SLionel Sambuc	jz	.L065xts_dec_ret
1599*ebfedea0SLionel Sambuc	movl	%eax,112(%esp)
1600*ebfedea0SLionel Sambuc	jmp	.L066xts_dec_only_one_more
1601*ebfedea0SLionel Sambuc.align	16
1602*ebfedea0SLionel Sambuc.L063xts_dec_done:
1603*ebfedea0SLionel Sambuc	movl	112(%esp),%eax
1604*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1605*ebfedea0SLionel Sambuc	andl	$15,%eax
1606*ebfedea0SLionel Sambuc	jz	.L065xts_dec_ret
1607*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1608*ebfedea0SLionel Sambuc	movl	%eax,112(%esp)
1609*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm2
1610*ebfedea0SLionel Sambuc	pxor	%xmm0,%xmm0
1611*ebfedea0SLionel Sambuc	movdqa	96(%esp),%xmm3
1612*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1613*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm2
1614*ebfedea0SLionel Sambuc	pcmpgtd	%xmm1,%xmm0
1615*ebfedea0SLionel Sambuc	pxor	%xmm2,%xmm1
1616*ebfedea0SLionel Sambuc.L066xts_dec_only_one_more:
1617*ebfedea0SLionel Sambuc	pshufd	$19,%xmm0,%xmm5
1618*ebfedea0SLionel Sambuc	movdqa	%xmm1,%xmm6
1619*ebfedea0SLionel Sambuc	paddq	%xmm1,%xmm1
1620*ebfedea0SLionel Sambuc	pand	%xmm3,%xmm5
1621*ebfedea0SLionel Sambuc	pxor	%xmm1,%xmm5
1622*ebfedea0SLionel Sambuc	movl	%ebp,%edx
1623*ebfedea0SLionel Sambuc	movl	%ebx,%ecx
1624*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1625*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1626*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
1627*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
1628*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
1629*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
1630*ebfedea0SLionel Sambuc.L067dec1_loop_13:
1631*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
1632*ebfedea0SLionel Sambuc	decl	%ecx
1633*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
1634*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
1635*ebfedea0SLionel Sambuc	jnz	.L067dec1_loop_13
1636*ebfedea0SLionel Sambuc.byte	102,15,56,223,209
1637*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm2
1638*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1639*ebfedea0SLionel Sambuc.L068xts_dec_steal:
1640*ebfedea0SLionel Sambuc	movzbl	16(%esi),%ecx
1641*ebfedea0SLionel Sambuc	movzbl	(%edi),%edx
1642*ebfedea0SLionel Sambuc	leal	1(%esi),%esi
1643*ebfedea0SLionel Sambuc	movb	%cl,(%edi)
1644*ebfedea0SLionel Sambuc	movb	%dl,16(%edi)
1645*ebfedea0SLionel Sambuc	leal	1(%edi),%edi
1646*ebfedea0SLionel Sambuc	subl	$1,%eax
1647*ebfedea0SLionel Sambuc	jnz	.L068xts_dec_steal
1648*ebfedea0SLionel Sambuc	subl	112(%esp),%edi
1649*ebfedea0SLionel Sambuc	movl	%ebp,%edx
1650*ebfedea0SLionel Sambuc	movl	%ebx,%ecx
1651*ebfedea0SLionel Sambuc	movups	(%edi),%xmm2
1652*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm2
1653*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
1654*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
1655*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
1656*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
1657*ebfedea0SLionel Sambuc.L069dec1_loop_14:
1658*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
1659*ebfedea0SLionel Sambuc	decl	%ecx
1660*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
1661*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
1662*ebfedea0SLionel Sambuc	jnz	.L069dec1_loop_14
1663*ebfedea0SLionel Sambuc.byte	102,15,56,223,209
1664*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm2
1665*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1666*ebfedea0SLionel Sambuc.L065xts_dec_ret:
1667*ebfedea0SLionel Sambuc	movl	116(%esp),%esp
1668*ebfedea0SLionel Sambuc	popl	%edi
1669*ebfedea0SLionel Sambuc	popl	%esi
1670*ebfedea0SLionel Sambuc	popl	%ebx
1671*ebfedea0SLionel Sambuc	popl	%ebp
1672*ebfedea0SLionel Sambuc	ret
1673*ebfedea0SLionel Sambuc.size	aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin
1674*ebfedea0SLionel Sambuc.globl	aesni_cbc_encrypt
1675*ebfedea0SLionel Sambuc.type	aesni_cbc_encrypt,@function
1676*ebfedea0SLionel Sambuc.align	16
1677*ebfedea0SLionel Sambucaesni_cbc_encrypt:
1678*ebfedea0SLionel Sambuc.L_aesni_cbc_encrypt_begin:
1679*ebfedea0SLionel Sambuc	pushl	%ebp
1680*ebfedea0SLionel Sambuc	pushl	%ebx
1681*ebfedea0SLionel Sambuc	pushl	%esi
1682*ebfedea0SLionel Sambuc	pushl	%edi
1683*ebfedea0SLionel Sambuc	movl	20(%esp),%esi
1684*ebfedea0SLionel Sambuc	movl	%esp,%ebx
1685*ebfedea0SLionel Sambuc	movl	24(%esp),%edi
1686*ebfedea0SLionel Sambuc	subl	$24,%ebx
1687*ebfedea0SLionel Sambuc	movl	28(%esp),%eax
1688*ebfedea0SLionel Sambuc	andl	$-16,%ebx
1689*ebfedea0SLionel Sambuc	movl	32(%esp),%edx
1690*ebfedea0SLionel Sambuc	movl	36(%esp),%ebp
1691*ebfedea0SLionel Sambuc	testl	%eax,%eax
1692*ebfedea0SLionel Sambuc	jz	.L070cbc_abort
1693*ebfedea0SLionel Sambuc	cmpl	$0,40(%esp)
1694*ebfedea0SLionel Sambuc	xchgl	%esp,%ebx
1695*ebfedea0SLionel Sambuc	movups	(%ebp),%xmm7
1696*ebfedea0SLionel Sambuc	movl	240(%edx),%ecx
1697*ebfedea0SLionel Sambuc	movl	%edx,%ebp
1698*ebfedea0SLionel Sambuc	movl	%ebx,16(%esp)
1699*ebfedea0SLionel Sambuc	movl	%ecx,%ebx
1700*ebfedea0SLionel Sambuc	je	.L071cbc_decrypt
1701*ebfedea0SLionel Sambuc	movaps	%xmm7,%xmm2
1702*ebfedea0SLionel Sambuc	cmpl	$16,%eax
1703*ebfedea0SLionel Sambuc	jb	.L072cbc_enc_tail
1704*ebfedea0SLionel Sambuc	subl	$16,%eax
1705*ebfedea0SLionel Sambuc	jmp	.L073cbc_enc_loop
1706*ebfedea0SLionel Sambuc.align	16
1707*ebfedea0SLionel Sambuc.L073cbc_enc_loop:
1708*ebfedea0SLionel Sambuc	movups	(%esi),%xmm7
1709*ebfedea0SLionel Sambuc	leal	16(%esi),%esi
1710*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
1711*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
1712*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm7
1713*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
1714*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm2
1715*ebfedea0SLionel Sambuc.L074enc1_loop_15:
1716*ebfedea0SLionel Sambuc.byte	102,15,56,220,209
1717*ebfedea0SLionel Sambuc	decl	%ecx
1718*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
1719*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
1720*ebfedea0SLionel Sambuc	jnz	.L074enc1_loop_15
1721*ebfedea0SLionel Sambuc.byte	102,15,56,221,209
1722*ebfedea0SLionel Sambuc	movl	%ebx,%ecx
1723*ebfedea0SLionel Sambuc	movl	%ebp,%edx
1724*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1725*ebfedea0SLionel Sambuc	leal	16(%edi),%edi
1726*ebfedea0SLionel Sambuc	subl	$16,%eax
1727*ebfedea0SLionel Sambuc	jnc	.L073cbc_enc_loop
1728*ebfedea0SLionel Sambuc	addl	$16,%eax
1729*ebfedea0SLionel Sambuc	jnz	.L072cbc_enc_tail
1730*ebfedea0SLionel Sambuc	movaps	%xmm2,%xmm7
1731*ebfedea0SLionel Sambuc	jmp	.L075cbc_ret
1732*ebfedea0SLionel Sambuc.L072cbc_enc_tail:
1733*ebfedea0SLionel Sambuc	movl	%eax,%ecx
1734*ebfedea0SLionel Sambuc.long	2767451785
1735*ebfedea0SLionel Sambuc	movl	$16,%ecx
1736*ebfedea0SLionel Sambuc	subl	%eax,%ecx
1737*ebfedea0SLionel Sambuc	xorl	%eax,%eax
1738*ebfedea0SLionel Sambuc.long	2868115081
1739*ebfedea0SLionel Sambuc	leal	-16(%edi),%edi
1740*ebfedea0SLionel Sambuc	movl	%ebx,%ecx
1741*ebfedea0SLionel Sambuc	movl	%edi,%esi
1742*ebfedea0SLionel Sambuc	movl	%ebp,%edx
1743*ebfedea0SLionel Sambuc	jmp	.L073cbc_enc_loop
1744*ebfedea0SLionel Sambuc.align	16
1745*ebfedea0SLionel Sambuc.L071cbc_decrypt:
1746*ebfedea0SLionel Sambuc	cmpl	$80,%eax
1747*ebfedea0SLionel Sambuc	jbe	.L076cbc_dec_tail
1748*ebfedea0SLionel Sambuc	movaps	%xmm7,(%esp)
1749*ebfedea0SLionel Sambuc	subl	$80,%eax
1750*ebfedea0SLionel Sambuc	jmp	.L077cbc_dec_loop6_enter
1751*ebfedea0SLionel Sambuc.align	16
1752*ebfedea0SLionel Sambuc.L078cbc_dec_loop6:
1753*ebfedea0SLionel Sambuc	movaps	%xmm0,(%esp)
1754*ebfedea0SLionel Sambuc	movups	%xmm7,(%edi)
1755*ebfedea0SLionel Sambuc	leal	16(%edi),%edi
1756*ebfedea0SLionel Sambuc.L077cbc_dec_loop6_enter:
1757*ebfedea0SLionel Sambuc	movdqu	(%esi),%xmm2
1758*ebfedea0SLionel Sambuc	movdqu	16(%esi),%xmm3
1759*ebfedea0SLionel Sambuc	movdqu	32(%esi),%xmm4
1760*ebfedea0SLionel Sambuc	movdqu	48(%esi),%xmm5
1761*ebfedea0SLionel Sambuc	movdqu	64(%esi),%xmm6
1762*ebfedea0SLionel Sambuc	movdqu	80(%esi),%xmm7
1763*ebfedea0SLionel Sambuc	call	_aesni_decrypt6
1764*ebfedea0SLionel Sambuc	movups	(%esi),%xmm1
1765*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm0
1766*ebfedea0SLionel Sambuc	xorps	(%esp),%xmm2
1767*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm3
1768*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm1
1769*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm4
1770*ebfedea0SLionel Sambuc	movups	48(%esi),%xmm0
1771*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm5
1772*ebfedea0SLionel Sambuc	movups	64(%esi),%xmm1
1773*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm6
1774*ebfedea0SLionel Sambuc	movups	80(%esi),%xmm0
1775*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm7
1776*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1777*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1778*ebfedea0SLionel Sambuc	leal	96(%esi),%esi
1779*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
1780*ebfedea0SLionel Sambuc	movl	%ebx,%ecx
1781*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
1782*ebfedea0SLionel Sambuc	movl	%ebp,%edx
1783*ebfedea0SLionel Sambuc	movups	%xmm6,64(%edi)
1784*ebfedea0SLionel Sambuc	leal	80(%edi),%edi
1785*ebfedea0SLionel Sambuc	subl	$96,%eax
1786*ebfedea0SLionel Sambuc	ja	.L078cbc_dec_loop6
1787*ebfedea0SLionel Sambuc	movaps	%xmm7,%xmm2
1788*ebfedea0SLionel Sambuc	movaps	%xmm0,%xmm7
1789*ebfedea0SLionel Sambuc	addl	$80,%eax
1790*ebfedea0SLionel Sambuc	jle	.L079cbc_dec_tail_collected
1791*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1792*ebfedea0SLionel Sambuc	leal	16(%edi),%edi
1793*ebfedea0SLionel Sambuc.L076cbc_dec_tail:
1794*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1795*ebfedea0SLionel Sambuc	movaps	%xmm2,%xmm6
1796*ebfedea0SLionel Sambuc	cmpl	$16,%eax
1797*ebfedea0SLionel Sambuc	jbe	.L080cbc_dec_one
1798*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm3
1799*ebfedea0SLionel Sambuc	movaps	%xmm3,%xmm5
1800*ebfedea0SLionel Sambuc	cmpl	$32,%eax
1801*ebfedea0SLionel Sambuc	jbe	.L081cbc_dec_two
1802*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm4
1803*ebfedea0SLionel Sambuc	cmpl	$48,%eax
1804*ebfedea0SLionel Sambuc	jbe	.L082cbc_dec_three
1805*ebfedea0SLionel Sambuc	movups	48(%esi),%xmm5
1806*ebfedea0SLionel Sambuc	cmpl	$64,%eax
1807*ebfedea0SLionel Sambuc	jbe	.L083cbc_dec_four
1808*ebfedea0SLionel Sambuc	movups	64(%esi),%xmm6
1809*ebfedea0SLionel Sambuc	movaps	%xmm7,(%esp)
1810*ebfedea0SLionel Sambuc	movups	(%esi),%xmm2
1811*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm7
1812*ebfedea0SLionel Sambuc	call	_aesni_decrypt6
1813*ebfedea0SLionel Sambuc	movups	(%esi),%xmm1
1814*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm0
1815*ebfedea0SLionel Sambuc	xorps	(%esp),%xmm2
1816*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm3
1817*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm1
1818*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm4
1819*ebfedea0SLionel Sambuc	movups	48(%esi),%xmm0
1820*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm5
1821*ebfedea0SLionel Sambuc	movups	64(%esi),%xmm7
1822*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm6
1823*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1824*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1825*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
1826*ebfedea0SLionel Sambuc	movups	%xmm5,48(%edi)
1827*ebfedea0SLionel Sambuc	leal	64(%edi),%edi
1828*ebfedea0SLionel Sambuc	movaps	%xmm6,%xmm2
1829*ebfedea0SLionel Sambuc	subl	$80,%eax
1830*ebfedea0SLionel Sambuc	jmp	.L079cbc_dec_tail_collected
1831*ebfedea0SLionel Sambuc.align	16
1832*ebfedea0SLionel Sambuc.L080cbc_dec_one:
1833*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
1834*ebfedea0SLionel Sambuc	movups	16(%edx),%xmm1
1835*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
1836*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm2
1837*ebfedea0SLionel Sambuc.L084dec1_loop_16:
1838*ebfedea0SLionel Sambuc.byte	102,15,56,222,209
1839*ebfedea0SLionel Sambuc	decl	%ecx
1840*ebfedea0SLionel Sambuc	movups	(%edx),%xmm1
1841*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
1842*ebfedea0SLionel Sambuc	jnz	.L084dec1_loop_16
1843*ebfedea0SLionel Sambuc.byte	102,15,56,223,209
1844*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm2
1845*ebfedea0SLionel Sambuc	movaps	%xmm6,%xmm7
1846*ebfedea0SLionel Sambuc	subl	$16,%eax
1847*ebfedea0SLionel Sambuc	jmp	.L079cbc_dec_tail_collected
1848*ebfedea0SLionel Sambuc.align	16
1849*ebfedea0SLionel Sambuc.L081cbc_dec_two:
1850*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm4
1851*ebfedea0SLionel Sambuc	call	_aesni_decrypt3
1852*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm2
1853*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
1854*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1855*ebfedea0SLionel Sambuc	movaps	%xmm3,%xmm2
1856*ebfedea0SLionel Sambuc	leal	16(%edi),%edi
1857*ebfedea0SLionel Sambuc	movaps	%xmm5,%xmm7
1858*ebfedea0SLionel Sambuc	subl	$32,%eax
1859*ebfedea0SLionel Sambuc	jmp	.L079cbc_dec_tail_collected
1860*ebfedea0SLionel Sambuc.align	16
1861*ebfedea0SLionel Sambuc.L082cbc_dec_three:
1862*ebfedea0SLionel Sambuc	call	_aesni_decrypt3
1863*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm2
1864*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
1865*ebfedea0SLionel Sambuc	xorps	%xmm5,%xmm4
1866*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1867*ebfedea0SLionel Sambuc	movaps	%xmm4,%xmm2
1868*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1869*ebfedea0SLionel Sambuc	leal	32(%edi),%edi
1870*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm7
1871*ebfedea0SLionel Sambuc	subl	$48,%eax
1872*ebfedea0SLionel Sambuc	jmp	.L079cbc_dec_tail_collected
1873*ebfedea0SLionel Sambuc.align	16
1874*ebfedea0SLionel Sambuc.L083cbc_dec_four:
1875*ebfedea0SLionel Sambuc	call	_aesni_decrypt4
1876*ebfedea0SLionel Sambuc	movups	16(%esi),%xmm1
1877*ebfedea0SLionel Sambuc	movups	32(%esi),%xmm0
1878*ebfedea0SLionel Sambuc	xorps	%xmm7,%xmm2
1879*ebfedea0SLionel Sambuc	movups	48(%esi),%xmm7
1880*ebfedea0SLionel Sambuc	xorps	%xmm6,%xmm3
1881*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1882*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm4
1883*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edi)
1884*ebfedea0SLionel Sambuc	xorps	%xmm0,%xmm5
1885*ebfedea0SLionel Sambuc	movups	%xmm4,32(%edi)
1886*ebfedea0SLionel Sambuc	leal	48(%edi),%edi
1887*ebfedea0SLionel Sambuc	movaps	%xmm5,%xmm2
1888*ebfedea0SLionel Sambuc	subl	$64,%eax
1889*ebfedea0SLionel Sambuc.L079cbc_dec_tail_collected:
1890*ebfedea0SLionel Sambuc	andl	$15,%eax
1891*ebfedea0SLionel Sambuc	jnz	.L085cbc_dec_tail_partial
1892*ebfedea0SLionel Sambuc	movups	%xmm2,(%edi)
1893*ebfedea0SLionel Sambuc	jmp	.L075cbc_ret
1894*ebfedea0SLionel Sambuc.align	16
1895*ebfedea0SLionel Sambuc.L085cbc_dec_tail_partial:
1896*ebfedea0SLionel Sambuc	movaps	%xmm2,(%esp)
1897*ebfedea0SLionel Sambuc	movl	$16,%ecx
1898*ebfedea0SLionel Sambuc	movl	%esp,%esi
1899*ebfedea0SLionel Sambuc	subl	%eax,%ecx
1900*ebfedea0SLionel Sambuc.long	2767451785
1901*ebfedea0SLionel Sambuc.L075cbc_ret:
1902*ebfedea0SLionel Sambuc	movl	16(%esp),%esp
1903*ebfedea0SLionel Sambuc	movl	36(%esp),%ebp
1904*ebfedea0SLionel Sambuc	movups	%xmm7,(%ebp)
1905*ebfedea0SLionel Sambuc.L070cbc_abort:
1906*ebfedea0SLionel Sambuc	popl	%edi
1907*ebfedea0SLionel Sambuc	popl	%esi
1908*ebfedea0SLionel Sambuc	popl	%ebx
1909*ebfedea0SLionel Sambuc	popl	%ebp
1910*ebfedea0SLionel Sambuc	ret
1911*ebfedea0SLionel Sambuc.size	aesni_cbc_encrypt,.-.L_aesni_cbc_encrypt_begin
1912*ebfedea0SLionel Sambuc.type	_aesni_set_encrypt_key,@function
1913*ebfedea0SLionel Sambuc.align	16
1914*ebfedea0SLionel Sambuc_aesni_set_encrypt_key:
1915*ebfedea0SLionel Sambuc	testl	%eax,%eax
1916*ebfedea0SLionel Sambuc	jz	.L086bad_pointer
1917*ebfedea0SLionel Sambuc	testl	%edx,%edx
1918*ebfedea0SLionel Sambuc	jz	.L086bad_pointer
1919*ebfedea0SLionel Sambuc	movups	(%eax),%xmm0
1920*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm4
1921*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
1922*ebfedea0SLionel Sambuc	cmpl	$256,%ecx
1923*ebfedea0SLionel Sambuc	je	.L08714rounds
1924*ebfedea0SLionel Sambuc	cmpl	$192,%ecx
1925*ebfedea0SLionel Sambuc	je	.L08812rounds
1926*ebfedea0SLionel Sambuc	cmpl	$128,%ecx
1927*ebfedea0SLionel Sambuc	jne	.L089bad_keybits
1928*ebfedea0SLionel Sambuc.align	16
1929*ebfedea0SLionel Sambuc.L09010rounds:
1930*ebfedea0SLionel Sambuc	movl	$9,%ecx
1931*ebfedea0SLionel Sambuc	movups	%xmm0,-16(%edx)
1932*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,1
1933*ebfedea0SLionel Sambuc	call	.L091key_128_cold
1934*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,2
1935*ebfedea0SLionel Sambuc	call	.L092key_128
1936*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,4
1937*ebfedea0SLionel Sambuc	call	.L092key_128
1938*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,8
1939*ebfedea0SLionel Sambuc	call	.L092key_128
1940*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,16
1941*ebfedea0SLionel Sambuc	call	.L092key_128
1942*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,32
1943*ebfedea0SLionel Sambuc	call	.L092key_128
1944*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,64
1945*ebfedea0SLionel Sambuc	call	.L092key_128
1946*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,128
1947*ebfedea0SLionel Sambuc	call	.L092key_128
1948*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,27
1949*ebfedea0SLionel Sambuc	call	.L092key_128
1950*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,54
1951*ebfedea0SLionel Sambuc	call	.L092key_128
1952*ebfedea0SLionel Sambuc	movups	%xmm0,(%edx)
1953*ebfedea0SLionel Sambuc	movl	%ecx,80(%edx)
1954*ebfedea0SLionel Sambuc	xorl	%eax,%eax
1955*ebfedea0SLionel Sambuc	ret
1956*ebfedea0SLionel Sambuc.align	16
1957*ebfedea0SLionel Sambuc.L092key_128:
1958*ebfedea0SLionel Sambuc	movups	%xmm0,(%edx)
1959*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
1960*ebfedea0SLionel Sambuc.L091key_128_cold:
1961*ebfedea0SLionel Sambuc	shufps	$16,%xmm0,%xmm4
1962*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm0
1963*ebfedea0SLionel Sambuc	shufps	$140,%xmm0,%xmm4
1964*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm0
1965*ebfedea0SLionel Sambuc	shufps	$255,%xmm1,%xmm1
1966*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm0
1967*ebfedea0SLionel Sambuc	ret
1968*ebfedea0SLionel Sambuc.align	16
1969*ebfedea0SLionel Sambuc.L08812rounds:
1970*ebfedea0SLionel Sambuc	movq	16(%eax),%xmm2
1971*ebfedea0SLionel Sambuc	movl	$11,%ecx
1972*ebfedea0SLionel Sambuc	movups	%xmm0,-16(%edx)
1973*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,1
1974*ebfedea0SLionel Sambuc	call	.L093key_192a_cold
1975*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,2
1976*ebfedea0SLionel Sambuc	call	.L094key_192b
1977*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,4
1978*ebfedea0SLionel Sambuc	call	.L095key_192a
1979*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,8
1980*ebfedea0SLionel Sambuc	call	.L094key_192b
1981*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,16
1982*ebfedea0SLionel Sambuc	call	.L095key_192a
1983*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,32
1984*ebfedea0SLionel Sambuc	call	.L094key_192b
1985*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,64
1986*ebfedea0SLionel Sambuc	call	.L095key_192a
1987*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,128
1988*ebfedea0SLionel Sambuc	call	.L094key_192b
1989*ebfedea0SLionel Sambuc	movups	%xmm0,(%edx)
1990*ebfedea0SLionel Sambuc	movl	%ecx,48(%edx)
1991*ebfedea0SLionel Sambuc	xorl	%eax,%eax
1992*ebfedea0SLionel Sambuc	ret
1993*ebfedea0SLionel Sambuc.align	16
1994*ebfedea0SLionel Sambuc.L095key_192a:
1995*ebfedea0SLionel Sambuc	movups	%xmm0,(%edx)
1996*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
1997*ebfedea0SLionel Sambuc.align	16
1998*ebfedea0SLionel Sambuc.L093key_192a_cold:
1999*ebfedea0SLionel Sambuc	movaps	%xmm2,%xmm5
2000*ebfedea0SLionel Sambuc.L096key_192b_warm:
2001*ebfedea0SLionel Sambuc	shufps	$16,%xmm0,%xmm4
2002*ebfedea0SLionel Sambuc	movdqa	%xmm2,%xmm3
2003*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm0
2004*ebfedea0SLionel Sambuc	shufps	$140,%xmm0,%xmm4
2005*ebfedea0SLionel Sambuc	pslldq	$4,%xmm3
2006*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm0
2007*ebfedea0SLionel Sambuc	pshufd	$85,%xmm1,%xmm1
2008*ebfedea0SLionel Sambuc	pxor	%xmm3,%xmm2
2009*ebfedea0SLionel Sambuc	pxor	%xmm1,%xmm0
2010*ebfedea0SLionel Sambuc	pshufd	$255,%xmm0,%xmm3
2011*ebfedea0SLionel Sambuc	pxor	%xmm3,%xmm2
2012*ebfedea0SLionel Sambuc	ret
2013*ebfedea0SLionel Sambuc.align	16
2014*ebfedea0SLionel Sambuc.L094key_192b:
2015*ebfedea0SLionel Sambuc	movaps	%xmm0,%xmm3
2016*ebfedea0SLionel Sambuc	shufps	$68,%xmm0,%xmm5
2017*ebfedea0SLionel Sambuc	movups	%xmm5,(%edx)
2018*ebfedea0SLionel Sambuc	shufps	$78,%xmm2,%xmm3
2019*ebfedea0SLionel Sambuc	movups	%xmm3,16(%edx)
2020*ebfedea0SLionel Sambuc	leal	32(%edx),%edx
2021*ebfedea0SLionel Sambuc	jmp	.L096key_192b_warm
2022*ebfedea0SLionel Sambuc.align	16
2023*ebfedea0SLionel Sambuc.L08714rounds:
2024*ebfedea0SLionel Sambuc	movups	16(%eax),%xmm2
2025*ebfedea0SLionel Sambuc	movl	$13,%ecx
2026*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
2027*ebfedea0SLionel Sambuc	movups	%xmm0,-32(%edx)
2028*ebfedea0SLionel Sambuc	movups	%xmm2,-16(%edx)
2029*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,1
2030*ebfedea0SLionel Sambuc	call	.L097key_256a_cold
2031*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,1
2032*ebfedea0SLionel Sambuc	call	.L098key_256b
2033*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,2
2034*ebfedea0SLionel Sambuc	call	.L099key_256a
2035*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,2
2036*ebfedea0SLionel Sambuc	call	.L098key_256b
2037*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,4
2038*ebfedea0SLionel Sambuc	call	.L099key_256a
2039*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,4
2040*ebfedea0SLionel Sambuc	call	.L098key_256b
2041*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,8
2042*ebfedea0SLionel Sambuc	call	.L099key_256a
2043*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,8
2044*ebfedea0SLionel Sambuc	call	.L098key_256b
2045*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,16
2046*ebfedea0SLionel Sambuc	call	.L099key_256a
2047*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,16
2048*ebfedea0SLionel Sambuc	call	.L098key_256b
2049*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,32
2050*ebfedea0SLionel Sambuc	call	.L099key_256a
2051*ebfedea0SLionel Sambuc.byte	102,15,58,223,200,32
2052*ebfedea0SLionel Sambuc	call	.L098key_256b
2053*ebfedea0SLionel Sambuc.byte	102,15,58,223,202,64
2054*ebfedea0SLionel Sambuc	call	.L099key_256a
2055*ebfedea0SLionel Sambuc	movups	%xmm0,(%edx)
2056*ebfedea0SLionel Sambuc	movl	%ecx,16(%edx)
2057*ebfedea0SLionel Sambuc	xorl	%eax,%eax
2058*ebfedea0SLionel Sambuc	ret
2059*ebfedea0SLionel Sambuc.align	16
2060*ebfedea0SLionel Sambuc.L099key_256a:
2061*ebfedea0SLionel Sambuc	movups	%xmm2,(%edx)
2062*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
2063*ebfedea0SLionel Sambuc.L097key_256a_cold:
2064*ebfedea0SLionel Sambuc	shufps	$16,%xmm0,%xmm4
2065*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm0
2066*ebfedea0SLionel Sambuc	shufps	$140,%xmm0,%xmm4
2067*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm0
2068*ebfedea0SLionel Sambuc	shufps	$255,%xmm1,%xmm1
2069*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm0
2070*ebfedea0SLionel Sambuc	ret
2071*ebfedea0SLionel Sambuc.align	16
2072*ebfedea0SLionel Sambuc.L098key_256b:
2073*ebfedea0SLionel Sambuc	movups	%xmm0,(%edx)
2074*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
2075*ebfedea0SLionel Sambuc	shufps	$16,%xmm2,%xmm4
2076*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm2
2077*ebfedea0SLionel Sambuc	shufps	$140,%xmm2,%xmm4
2078*ebfedea0SLionel Sambuc	xorps	%xmm4,%xmm2
2079*ebfedea0SLionel Sambuc	shufps	$170,%xmm1,%xmm1
2080*ebfedea0SLionel Sambuc	xorps	%xmm1,%xmm2
2081*ebfedea0SLionel Sambuc	ret
2082*ebfedea0SLionel Sambuc.align	4
2083*ebfedea0SLionel Sambuc.L086bad_pointer:
2084*ebfedea0SLionel Sambuc	movl	$-1,%eax
2085*ebfedea0SLionel Sambuc	ret
2086*ebfedea0SLionel Sambuc.align	4
2087*ebfedea0SLionel Sambuc.L089bad_keybits:
2088*ebfedea0SLionel Sambuc	movl	$-2,%eax
2089*ebfedea0SLionel Sambuc	ret
2090*ebfedea0SLionel Sambuc.size	_aesni_set_encrypt_key,.-_aesni_set_encrypt_key
2091*ebfedea0SLionel Sambuc.globl	aesni_set_encrypt_key
2092*ebfedea0SLionel Sambuc.type	aesni_set_encrypt_key,@function
2093*ebfedea0SLionel Sambuc.align	16
2094*ebfedea0SLionel Sambucaesni_set_encrypt_key:
2095*ebfedea0SLionel Sambuc.L_aesni_set_encrypt_key_begin:
2096*ebfedea0SLionel Sambuc	movl	4(%esp),%eax
2097*ebfedea0SLionel Sambuc	movl	8(%esp),%ecx
2098*ebfedea0SLionel Sambuc	movl	12(%esp),%edx
2099*ebfedea0SLionel Sambuc	call	_aesni_set_encrypt_key
2100*ebfedea0SLionel Sambuc	ret
2101*ebfedea0SLionel Sambuc.size	aesni_set_encrypt_key,.-.L_aesni_set_encrypt_key_begin
2102*ebfedea0SLionel Sambuc.globl	aesni_set_decrypt_key
2103*ebfedea0SLionel Sambuc.type	aesni_set_decrypt_key,@function
2104*ebfedea0SLionel Sambuc.align	16
2105*ebfedea0SLionel Sambucaesni_set_decrypt_key:
2106*ebfedea0SLionel Sambuc.L_aesni_set_decrypt_key_begin:
2107*ebfedea0SLionel Sambuc	movl	4(%esp),%eax
2108*ebfedea0SLionel Sambuc	movl	8(%esp),%ecx
2109*ebfedea0SLionel Sambuc	movl	12(%esp),%edx
2110*ebfedea0SLionel Sambuc	call	_aesni_set_encrypt_key
2111*ebfedea0SLionel Sambuc	movl	12(%esp),%edx
2112*ebfedea0SLionel Sambuc	shll	$4,%ecx
2113*ebfedea0SLionel Sambuc	testl	%eax,%eax
2114*ebfedea0SLionel Sambuc	jnz	.L100dec_key_ret
2115*ebfedea0SLionel Sambuc	leal	16(%edx,%ecx,1),%eax
2116*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
2117*ebfedea0SLionel Sambuc	movups	(%eax),%xmm1
2118*ebfedea0SLionel Sambuc	movups	%xmm0,(%eax)
2119*ebfedea0SLionel Sambuc	movups	%xmm1,(%edx)
2120*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
2121*ebfedea0SLionel Sambuc	leal	-16(%eax),%eax
2122*ebfedea0SLionel Sambuc.L101dec_key_inverse:
2123*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
2124*ebfedea0SLionel Sambuc	movups	(%eax),%xmm1
2125*ebfedea0SLionel Sambuc.byte	102,15,56,219,192
2126*ebfedea0SLionel Sambuc.byte	102,15,56,219,201
2127*ebfedea0SLionel Sambuc	leal	16(%edx),%edx
2128*ebfedea0SLionel Sambuc	leal	-16(%eax),%eax
2129*ebfedea0SLionel Sambuc	movups	%xmm0,16(%eax)
2130*ebfedea0SLionel Sambuc	movups	%xmm1,-16(%edx)
2131*ebfedea0SLionel Sambuc	cmpl	%edx,%eax
2132*ebfedea0SLionel Sambuc	ja	.L101dec_key_inverse
2133*ebfedea0SLionel Sambuc	movups	(%edx),%xmm0
2134*ebfedea0SLionel Sambuc.byte	102,15,56,219,192
2135*ebfedea0SLionel Sambuc	movups	%xmm0,(%edx)
2136*ebfedea0SLionel Sambuc	xorl	%eax,%eax
2137*ebfedea0SLionel Sambuc.L100dec_key_ret:
2138*ebfedea0SLionel Sambuc	ret
2139*ebfedea0SLionel Sambuc.size	aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin
2140*ebfedea0SLionel Sambuc.byte	65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
2141*ebfedea0SLionel Sambuc.byte	83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
2142*ebfedea0SLionel Sambuc.byte	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
2143*ebfedea0SLionel Sambuc.byte	115,108,46,111,114,103,62,0
2144