xref: /freebsd/sys/crypto/openssl/amd64/bsaes-x86_64.S (revision c0855eaa3ee9614804b6bd6a255aa9f71e095f43)
1*c0855eaaSJohn Baldwin/* Do not modify. This file is auto-generated from bsaes-x86_64.pl. */
2*c0855eaaSJohn Baldwin.text
3*c0855eaaSJohn Baldwin
4*c0855eaaSJohn Baldwin
5*c0855eaaSJohn Baldwin
6*c0855eaaSJohn Baldwin
7*c0855eaaSJohn Baldwin.type	_bsaes_encrypt8,@function
8*c0855eaaSJohn Baldwin.align	64
9*c0855eaaSJohn Baldwin_bsaes_encrypt8:
10*c0855eaaSJohn Baldwin.cfi_startproc
11*c0855eaaSJohn Baldwin	leaq	.LBS0(%rip),%r11
12*c0855eaaSJohn Baldwin
13*c0855eaaSJohn Baldwin	movdqa	(%rax),%xmm8
14*c0855eaaSJohn Baldwin	leaq	16(%rax),%rax
15*c0855eaaSJohn Baldwin	movdqa	80(%r11),%xmm7
16*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm15
17*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
18*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm1
19*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm2
20*c0855eaaSJohn Baldwin.byte	102,68,15,56,0,255
21*c0855eaaSJohn Baldwin.byte	102,15,56,0,199
22*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm3
23*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm4
24*c0855eaaSJohn Baldwin.byte	102,15,56,0,207
25*c0855eaaSJohn Baldwin.byte	102,15,56,0,215
26*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm5
27*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm6
28*c0855eaaSJohn Baldwin.byte	102,15,56,0,223
29*c0855eaaSJohn Baldwin.byte	102,15,56,0,231
30*c0855eaaSJohn Baldwin.byte	102,15,56,0,239
31*c0855eaaSJohn Baldwin.byte	102,15,56,0,247
32*c0855eaaSJohn Baldwin_bsaes_encrypt8_bitslice:
33*c0855eaaSJohn Baldwin	movdqa	0(%r11),%xmm7
34*c0855eaaSJohn Baldwin	movdqa	16(%r11),%xmm8
35*c0855eaaSJohn Baldwin	movdqa	%xmm5,%xmm9
36*c0855eaaSJohn Baldwin	psrlq	$1,%xmm5
37*c0855eaaSJohn Baldwin	movdqa	%xmm3,%xmm10
38*c0855eaaSJohn Baldwin	psrlq	$1,%xmm3
39*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm5
40*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm3
41*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm5
42*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm3
43*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm6
44*c0855eaaSJohn Baldwin	psllq	$1,%xmm5
45*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm4
46*c0855eaaSJohn Baldwin	psllq	$1,%xmm3
47*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm5
48*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm3
49*c0855eaaSJohn Baldwin	movdqa	%xmm1,%xmm9
50*c0855eaaSJohn Baldwin	psrlq	$1,%xmm1
51*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm10
52*c0855eaaSJohn Baldwin	psrlq	$1,%xmm15
53*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm1
54*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm15
55*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm1
56*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm15
57*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm2
58*c0855eaaSJohn Baldwin	psllq	$1,%xmm1
59*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm0
60*c0855eaaSJohn Baldwin	psllq	$1,%xmm15
61*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
62*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm15
63*c0855eaaSJohn Baldwin	movdqa	32(%r11),%xmm7
64*c0855eaaSJohn Baldwin	movdqa	%xmm4,%xmm9
65*c0855eaaSJohn Baldwin	psrlq	$2,%xmm4
66*c0855eaaSJohn Baldwin	movdqa	%xmm3,%xmm10
67*c0855eaaSJohn Baldwin	psrlq	$2,%xmm3
68*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm4
69*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm3
70*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm4
71*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm3
72*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm6
73*c0855eaaSJohn Baldwin	psllq	$2,%xmm4
74*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm5
75*c0855eaaSJohn Baldwin	psllq	$2,%xmm3
76*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm4
77*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm3
78*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm9
79*c0855eaaSJohn Baldwin	psrlq	$2,%xmm0
80*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm10
81*c0855eaaSJohn Baldwin	psrlq	$2,%xmm15
82*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm0
83*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm15
84*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm0
85*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm15
86*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm2
87*c0855eaaSJohn Baldwin	psllq	$2,%xmm0
88*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm1
89*c0855eaaSJohn Baldwin	psllq	$2,%xmm15
90*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm0
91*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm15
92*c0855eaaSJohn Baldwin	movdqa	%xmm2,%xmm9
93*c0855eaaSJohn Baldwin	psrlq	$4,%xmm2
94*c0855eaaSJohn Baldwin	movdqa	%xmm1,%xmm10
95*c0855eaaSJohn Baldwin	psrlq	$4,%xmm1
96*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm2
97*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm1
98*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm2
99*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm1
100*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm6
101*c0855eaaSJohn Baldwin	psllq	$4,%xmm2
102*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm5
103*c0855eaaSJohn Baldwin	psllq	$4,%xmm1
104*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm2
105*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm1
106*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm9
107*c0855eaaSJohn Baldwin	psrlq	$4,%xmm0
108*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm10
109*c0855eaaSJohn Baldwin	psrlq	$4,%xmm15
110*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm0
111*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm15
112*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm0
113*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm15
114*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm4
115*c0855eaaSJohn Baldwin	psllq	$4,%xmm0
116*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm3
117*c0855eaaSJohn Baldwin	psllq	$4,%xmm15
118*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm0
119*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm15
120*c0855eaaSJohn Baldwin	decl	%r10d
121*c0855eaaSJohn Baldwin	jmp	.Lenc_sbox
122*c0855eaaSJohn Baldwin.align	16
123*c0855eaaSJohn Baldwin.Lenc_loop:
124*c0855eaaSJohn Baldwin	pxor	0(%rax),%xmm15
125*c0855eaaSJohn Baldwin	pxor	16(%rax),%xmm0
126*c0855eaaSJohn Baldwin	pxor	32(%rax),%xmm1
127*c0855eaaSJohn Baldwin	pxor	48(%rax),%xmm2
128*c0855eaaSJohn Baldwin.byte	102,68,15,56,0,255
129*c0855eaaSJohn Baldwin.byte	102,15,56,0,199
130*c0855eaaSJohn Baldwin	pxor	64(%rax),%xmm3
131*c0855eaaSJohn Baldwin	pxor	80(%rax),%xmm4
132*c0855eaaSJohn Baldwin.byte	102,15,56,0,207
133*c0855eaaSJohn Baldwin.byte	102,15,56,0,215
134*c0855eaaSJohn Baldwin	pxor	96(%rax),%xmm5
135*c0855eaaSJohn Baldwin	pxor	112(%rax),%xmm6
136*c0855eaaSJohn Baldwin.byte	102,15,56,0,223
137*c0855eaaSJohn Baldwin.byte	102,15,56,0,231
138*c0855eaaSJohn Baldwin.byte	102,15,56,0,239
139*c0855eaaSJohn Baldwin.byte	102,15,56,0,247
140*c0855eaaSJohn Baldwin	leaq	128(%rax),%rax
141*c0855eaaSJohn Baldwin.Lenc_sbox:
142*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm4
143*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm1
144*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm2
145*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm5
146*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm4
147*c0855eaaSJohn Baldwin
148*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm5
149*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm2
150*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm6
151*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm2
152*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm3
153*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm2
154*c0855eaaSJohn Baldwin
155*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm1
156*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm0
157*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm10
158*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm9
159*c0855eaaSJohn Baldwin	movdqa	%xmm4,%xmm8
160*c0855eaaSJohn Baldwin	movdqa	%xmm1,%xmm12
161*c0855eaaSJohn Baldwin	movdqa	%xmm5,%xmm11
162*c0855eaaSJohn Baldwin
163*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm10
164*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm9
165*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm8
166*c0855eaaSJohn Baldwin	movdqa	%xmm10,%xmm13
167*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm12
168*c0855eaaSJohn Baldwin	movdqa	%xmm9,%xmm7
169*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm11
170*c0855eaaSJohn Baldwin	movdqa	%xmm10,%xmm14
171*c0855eaaSJohn Baldwin
172*c0855eaaSJohn Baldwin	por	%xmm8,%xmm9
173*c0855eaaSJohn Baldwin	por	%xmm11,%xmm10
174*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm14
175*c0855eaaSJohn Baldwin	pand	%xmm11,%xmm13
176*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm11
177*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm7
178*c0855eaaSJohn Baldwin	pand	%xmm11,%xmm14
179*c0855eaaSJohn Baldwin	movdqa	%xmm2,%xmm11
180*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm11
181*c0855eaaSJohn Baldwin	pand	%xmm11,%xmm12
182*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm10
183*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm9
184*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm12
185*c0855eaaSJohn Baldwin	movdqa	%xmm4,%xmm11
186*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm12
187*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm11
188*c0855eaaSJohn Baldwin	movdqa	%xmm12,%xmm8
189*c0855eaaSJohn Baldwin	pand	%xmm11,%xmm12
190*c0855eaaSJohn Baldwin	por	%xmm11,%xmm8
191*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm7
192*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm10
193*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm9
194*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm8
195*c0855eaaSJohn Baldwin	movdqa	%xmm1,%xmm11
196*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm7
197*c0855eaaSJohn Baldwin	movdqa	%xmm3,%xmm12
198*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm8
199*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm13
200*c0855eaaSJohn Baldwin	pand	%xmm2,%xmm11
201*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm14
202*c0855eaaSJohn Baldwin	pand	%xmm15,%xmm12
203*c0855eaaSJohn Baldwin	pand	%xmm4,%xmm13
204*c0855eaaSJohn Baldwin	por	%xmm5,%xmm14
205*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm10
206*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm9
207*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm8
208*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm7
209*c0855eaaSJohn Baldwin
210*c0855eaaSJohn Baldwin
211*c0855eaaSJohn Baldwin
212*c0855eaaSJohn Baldwin
213*c0855eaaSJohn Baldwin
214*c0855eaaSJohn Baldwin	movdqa	%xmm10,%xmm11
215*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm10
216*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm11
217*c0855eaaSJohn Baldwin
218*c0855eaaSJohn Baldwin	movdqa	%xmm7,%xmm13
219*c0855eaaSJohn Baldwin	movdqa	%xmm11,%xmm14
220*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm13
221*c0855eaaSJohn Baldwin	pand	%xmm13,%xmm14
222*c0855eaaSJohn Baldwin
223*c0855eaaSJohn Baldwin	movdqa	%xmm8,%xmm12
224*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm14
225*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm12
226*c0855eaaSJohn Baldwin
227*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm10
228*c0855eaaSJohn Baldwin
229*c0855eaaSJohn Baldwin	pand	%xmm10,%xmm12
230*c0855eaaSJohn Baldwin
231*c0855eaaSJohn Baldwin	movdqa	%xmm13,%xmm9
232*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm12
233*c0855eaaSJohn Baldwin
234*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm9
235*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm8
236*c0855eaaSJohn Baldwin
237*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm9
238*c0855eaaSJohn Baldwin
239*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm13
240*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm8
241*c0855eaaSJohn Baldwin
242*c0855eaaSJohn Baldwin	pand	%xmm14,%xmm13
243*c0855eaaSJohn Baldwin
244*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm13
245*c0855eaaSJohn Baldwin	movdqa	%xmm5,%xmm11
246*c0855eaaSJohn Baldwin	movdqa	%xmm4,%xmm7
247*c0855eaaSJohn Baldwin	movdqa	%xmm14,%xmm9
248*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm9
249*c0855eaaSJohn Baldwin	pand	%xmm5,%xmm9
250*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm5
251*c0855eaaSJohn Baldwin	pand	%xmm14,%xmm4
252*c0855eaaSJohn Baldwin	pand	%xmm13,%xmm5
253*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm5
254*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm4
255*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm11
256*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm7
257*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm14
258*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm13
259*c0855eaaSJohn Baldwin	movdqa	%xmm14,%xmm10
260*c0855eaaSJohn Baldwin	movdqa	%xmm12,%xmm9
261*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm10
262*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm9
263*c0855eaaSJohn Baldwin	pand	%xmm11,%xmm10
264*c0855eaaSJohn Baldwin	pand	%xmm15,%xmm9
265*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm11
266*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm15
267*c0855eaaSJohn Baldwin	pand	%xmm14,%xmm7
268*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm2
269*c0855eaaSJohn Baldwin	pand	%xmm13,%xmm11
270*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm15
271*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm7
272*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm15
273*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm11
274*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm2
275*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm5
276*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm15
277*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm4
278*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm2
279*c0855eaaSJohn Baldwin
280*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm11
281*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm7
282*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm11
283*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm7
284*c0855eaaSJohn Baldwin	movdqa	%xmm14,%xmm10
285*c0855eaaSJohn Baldwin	movdqa	%xmm12,%xmm9
286*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm10
287*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm9
288*c0855eaaSJohn Baldwin	pand	%xmm11,%xmm10
289*c0855eaaSJohn Baldwin	pand	%xmm3,%xmm9
290*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm11
291*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm3
292*c0855eaaSJohn Baldwin	pand	%xmm14,%xmm7
293*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm1
294*c0855eaaSJohn Baldwin	pand	%xmm13,%xmm11
295*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm3
296*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm7
297*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm3
298*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm11
299*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
300*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm14
301*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm13
302*c0855eaaSJohn Baldwin	movdqa	%xmm14,%xmm10
303*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm10
304*c0855eaaSJohn Baldwin	pand	%xmm6,%xmm10
305*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm6
306*c0855eaaSJohn Baldwin	pand	%xmm14,%xmm0
307*c0855eaaSJohn Baldwin	pand	%xmm13,%xmm6
308*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm6
309*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm0
310*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm6
311*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm3
312*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm0
313*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm1
314*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm6
315*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm0
316*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm3
317*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm5
318*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm15
319*c0855eaaSJohn Baldwin
320*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm0
321*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm4
322*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm1
323*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm2
324*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm3
325*c0855eaaSJohn Baldwin
326*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm5
327*c0855eaaSJohn Baldwin	decl	%r10d
328*c0855eaaSJohn Baldwin	jl	.Lenc_done
329*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm15,%xmm7
330*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm0,%xmm8
331*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm15
332*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm3,%xmm9
333*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
334*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm5,%xmm10
335*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm3
336*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm2,%xmm11
337*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm5
338*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm6,%xmm12
339*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm2
340*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm1,%xmm13
341*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm6
342*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm4,%xmm14
343*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm1
344*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm4
345*c0855eaaSJohn Baldwin
346*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm8
347*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm7
348*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm8
349*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm15,%xmm15
350*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm9
351*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm0,%xmm0
352*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm12
353*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm15
354*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm13
355*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
356*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm11
357*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm2,%xmm7
358*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm14
359*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm6,%xmm8
360*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm10
361*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm5,%xmm2
362*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm10
363*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm4,%xmm6
364*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm11
365*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm1,%xmm5
366*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm7
367*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm3,%xmm1
368*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm8
369*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm2
370*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm6
371*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm5
372*c0855eaaSJohn Baldwin	movdqa	%xmm7,%xmm3
373*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
374*c0855eaaSJohn Baldwin	movdqa	%xmm8,%xmm4
375*c0855eaaSJohn Baldwin	movdqa	48(%r11),%xmm7
376*c0855eaaSJohn Baldwin	jnz	.Lenc_loop
377*c0855eaaSJohn Baldwin	movdqa	64(%r11),%xmm7
378*c0855eaaSJohn Baldwin	jmp	.Lenc_loop
379*c0855eaaSJohn Baldwin.align	16
380*c0855eaaSJohn Baldwin.Lenc_done:
381*c0855eaaSJohn Baldwin	movdqa	0(%r11),%xmm7
382*c0855eaaSJohn Baldwin	movdqa	16(%r11),%xmm8
383*c0855eaaSJohn Baldwin	movdqa	%xmm1,%xmm9
384*c0855eaaSJohn Baldwin	psrlq	$1,%xmm1
385*c0855eaaSJohn Baldwin	movdqa	%xmm2,%xmm10
386*c0855eaaSJohn Baldwin	psrlq	$1,%xmm2
387*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm1
388*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm2
389*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm1
390*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm2
391*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm4
392*c0855eaaSJohn Baldwin	psllq	$1,%xmm1
393*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm6
394*c0855eaaSJohn Baldwin	psllq	$1,%xmm2
395*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
396*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm2
397*c0855eaaSJohn Baldwin	movdqa	%xmm3,%xmm9
398*c0855eaaSJohn Baldwin	psrlq	$1,%xmm3
399*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm10
400*c0855eaaSJohn Baldwin	psrlq	$1,%xmm15
401*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm3
402*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm15
403*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm3
404*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm15
405*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm5
406*c0855eaaSJohn Baldwin	psllq	$1,%xmm3
407*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm0
408*c0855eaaSJohn Baldwin	psllq	$1,%xmm15
409*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm3
410*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm15
411*c0855eaaSJohn Baldwin	movdqa	32(%r11),%xmm7
412*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm9
413*c0855eaaSJohn Baldwin	psrlq	$2,%xmm6
414*c0855eaaSJohn Baldwin	movdqa	%xmm2,%xmm10
415*c0855eaaSJohn Baldwin	psrlq	$2,%xmm2
416*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm6
417*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm2
418*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm6
419*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm2
420*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm4
421*c0855eaaSJohn Baldwin	psllq	$2,%xmm6
422*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm1
423*c0855eaaSJohn Baldwin	psllq	$2,%xmm2
424*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm6
425*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm2
426*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm9
427*c0855eaaSJohn Baldwin	psrlq	$2,%xmm0
428*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm10
429*c0855eaaSJohn Baldwin	psrlq	$2,%xmm15
430*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm0
431*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm15
432*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm0
433*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm15
434*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm5
435*c0855eaaSJohn Baldwin	psllq	$2,%xmm0
436*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm3
437*c0855eaaSJohn Baldwin	psllq	$2,%xmm15
438*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm0
439*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm15
440*c0855eaaSJohn Baldwin	movdqa	%xmm5,%xmm9
441*c0855eaaSJohn Baldwin	psrlq	$4,%xmm5
442*c0855eaaSJohn Baldwin	movdqa	%xmm3,%xmm10
443*c0855eaaSJohn Baldwin	psrlq	$4,%xmm3
444*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm5
445*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm3
446*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm5
447*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm3
448*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm4
449*c0855eaaSJohn Baldwin	psllq	$4,%xmm5
450*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm1
451*c0855eaaSJohn Baldwin	psllq	$4,%xmm3
452*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm5
453*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm3
454*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm9
455*c0855eaaSJohn Baldwin	psrlq	$4,%xmm0
456*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm10
457*c0855eaaSJohn Baldwin	psrlq	$4,%xmm15
458*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm0
459*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm15
460*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm0
461*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm15
462*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm6
463*c0855eaaSJohn Baldwin	psllq	$4,%xmm0
464*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm2
465*c0855eaaSJohn Baldwin	psllq	$4,%xmm15
466*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm0
467*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm15
468*c0855eaaSJohn Baldwin	movdqa	(%rax),%xmm7
469*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm3
470*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm5
471*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm2
472*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm6
473*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm1
474*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm4
475*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm15
476*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm0
477*c0855eaaSJohn Baldwin	.byte	0xf3,0xc3
478*c0855eaaSJohn Baldwin.cfi_endproc
479*c0855eaaSJohn Baldwin.size	_bsaes_encrypt8,.-_bsaes_encrypt8
480*c0855eaaSJohn Baldwin
481*c0855eaaSJohn Baldwin.type	_bsaes_decrypt8,@function
482*c0855eaaSJohn Baldwin.align	64
483*c0855eaaSJohn Baldwin_bsaes_decrypt8:
484*c0855eaaSJohn Baldwin.cfi_startproc
485*c0855eaaSJohn Baldwin	leaq	.LBS0(%rip),%r11
486*c0855eaaSJohn Baldwin
487*c0855eaaSJohn Baldwin	movdqa	(%rax),%xmm8
488*c0855eaaSJohn Baldwin	leaq	16(%rax),%rax
489*c0855eaaSJohn Baldwin	movdqa	-48(%r11),%xmm7
490*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm15
491*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
492*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm1
493*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm2
494*c0855eaaSJohn Baldwin.byte	102,68,15,56,0,255
495*c0855eaaSJohn Baldwin.byte	102,15,56,0,199
496*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm3
497*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm4
498*c0855eaaSJohn Baldwin.byte	102,15,56,0,207
499*c0855eaaSJohn Baldwin.byte	102,15,56,0,215
500*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm5
501*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm6
502*c0855eaaSJohn Baldwin.byte	102,15,56,0,223
503*c0855eaaSJohn Baldwin.byte	102,15,56,0,231
504*c0855eaaSJohn Baldwin.byte	102,15,56,0,239
505*c0855eaaSJohn Baldwin.byte	102,15,56,0,247
506*c0855eaaSJohn Baldwin	movdqa	0(%r11),%xmm7
507*c0855eaaSJohn Baldwin	movdqa	16(%r11),%xmm8
508*c0855eaaSJohn Baldwin	movdqa	%xmm5,%xmm9
509*c0855eaaSJohn Baldwin	psrlq	$1,%xmm5
510*c0855eaaSJohn Baldwin	movdqa	%xmm3,%xmm10
511*c0855eaaSJohn Baldwin	psrlq	$1,%xmm3
512*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm5
513*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm3
514*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm5
515*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm3
516*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm6
517*c0855eaaSJohn Baldwin	psllq	$1,%xmm5
518*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm4
519*c0855eaaSJohn Baldwin	psllq	$1,%xmm3
520*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm5
521*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm3
522*c0855eaaSJohn Baldwin	movdqa	%xmm1,%xmm9
523*c0855eaaSJohn Baldwin	psrlq	$1,%xmm1
524*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm10
525*c0855eaaSJohn Baldwin	psrlq	$1,%xmm15
526*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm1
527*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm15
528*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm1
529*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm15
530*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm2
531*c0855eaaSJohn Baldwin	psllq	$1,%xmm1
532*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm0
533*c0855eaaSJohn Baldwin	psllq	$1,%xmm15
534*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
535*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm15
536*c0855eaaSJohn Baldwin	movdqa	32(%r11),%xmm7
537*c0855eaaSJohn Baldwin	movdqa	%xmm4,%xmm9
538*c0855eaaSJohn Baldwin	psrlq	$2,%xmm4
539*c0855eaaSJohn Baldwin	movdqa	%xmm3,%xmm10
540*c0855eaaSJohn Baldwin	psrlq	$2,%xmm3
541*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm4
542*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm3
543*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm4
544*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm3
545*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm6
546*c0855eaaSJohn Baldwin	psllq	$2,%xmm4
547*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm5
548*c0855eaaSJohn Baldwin	psllq	$2,%xmm3
549*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm4
550*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm3
551*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm9
552*c0855eaaSJohn Baldwin	psrlq	$2,%xmm0
553*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm10
554*c0855eaaSJohn Baldwin	psrlq	$2,%xmm15
555*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm0
556*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm15
557*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm0
558*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm15
559*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm2
560*c0855eaaSJohn Baldwin	psllq	$2,%xmm0
561*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm1
562*c0855eaaSJohn Baldwin	psllq	$2,%xmm15
563*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm0
564*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm15
565*c0855eaaSJohn Baldwin	movdqa	%xmm2,%xmm9
566*c0855eaaSJohn Baldwin	psrlq	$4,%xmm2
567*c0855eaaSJohn Baldwin	movdqa	%xmm1,%xmm10
568*c0855eaaSJohn Baldwin	psrlq	$4,%xmm1
569*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm2
570*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm1
571*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm2
572*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm1
573*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm6
574*c0855eaaSJohn Baldwin	psllq	$4,%xmm2
575*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm5
576*c0855eaaSJohn Baldwin	psllq	$4,%xmm1
577*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm2
578*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm1
579*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm9
580*c0855eaaSJohn Baldwin	psrlq	$4,%xmm0
581*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm10
582*c0855eaaSJohn Baldwin	psrlq	$4,%xmm15
583*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm0
584*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm15
585*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm0
586*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm15
587*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm4
588*c0855eaaSJohn Baldwin	psllq	$4,%xmm0
589*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm3
590*c0855eaaSJohn Baldwin	psllq	$4,%xmm15
591*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm0
592*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm15
593*c0855eaaSJohn Baldwin	decl	%r10d
594*c0855eaaSJohn Baldwin	jmp	.Ldec_sbox
595*c0855eaaSJohn Baldwin.align	16
596*c0855eaaSJohn Baldwin.Ldec_loop:
597*c0855eaaSJohn Baldwin	pxor	0(%rax),%xmm15
598*c0855eaaSJohn Baldwin	pxor	16(%rax),%xmm0
599*c0855eaaSJohn Baldwin	pxor	32(%rax),%xmm1
600*c0855eaaSJohn Baldwin	pxor	48(%rax),%xmm2
601*c0855eaaSJohn Baldwin.byte	102,68,15,56,0,255
602*c0855eaaSJohn Baldwin.byte	102,15,56,0,199
603*c0855eaaSJohn Baldwin	pxor	64(%rax),%xmm3
604*c0855eaaSJohn Baldwin	pxor	80(%rax),%xmm4
605*c0855eaaSJohn Baldwin.byte	102,15,56,0,207
606*c0855eaaSJohn Baldwin.byte	102,15,56,0,215
607*c0855eaaSJohn Baldwin	pxor	96(%rax),%xmm5
608*c0855eaaSJohn Baldwin	pxor	112(%rax),%xmm6
609*c0855eaaSJohn Baldwin.byte	102,15,56,0,223
610*c0855eaaSJohn Baldwin.byte	102,15,56,0,231
611*c0855eaaSJohn Baldwin.byte	102,15,56,0,239
612*c0855eaaSJohn Baldwin.byte	102,15,56,0,247
613*c0855eaaSJohn Baldwin	leaq	128(%rax),%rax
614*c0855eaaSJohn Baldwin.Ldec_sbox:
615*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm2
616*c0855eaaSJohn Baldwin
617*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm3
618*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm1
619*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm5
620*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm6
621*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm0
622*c0855eaaSJohn Baldwin
623*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm15
624*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm1
625*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm2
626*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm4
627*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm0
628*c0855eaaSJohn Baldwin	movdqa	%xmm2,%xmm10
629*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm9
630*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm8
631*c0855eaaSJohn Baldwin	movdqa	%xmm3,%xmm12
632*c0855eaaSJohn Baldwin	movdqa	%xmm4,%xmm11
633*c0855eaaSJohn Baldwin
634*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm10
635*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm9
636*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm8
637*c0855eaaSJohn Baldwin	movdqa	%xmm10,%xmm13
638*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm12
639*c0855eaaSJohn Baldwin	movdqa	%xmm9,%xmm7
640*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm11
641*c0855eaaSJohn Baldwin	movdqa	%xmm10,%xmm14
642*c0855eaaSJohn Baldwin
643*c0855eaaSJohn Baldwin	por	%xmm8,%xmm9
644*c0855eaaSJohn Baldwin	por	%xmm11,%xmm10
645*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm14
646*c0855eaaSJohn Baldwin	pand	%xmm11,%xmm13
647*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm11
648*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm7
649*c0855eaaSJohn Baldwin	pand	%xmm11,%xmm14
650*c0855eaaSJohn Baldwin	movdqa	%xmm5,%xmm11
651*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm11
652*c0855eaaSJohn Baldwin	pand	%xmm11,%xmm12
653*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm10
654*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm9
655*c0855eaaSJohn Baldwin	movdqa	%xmm2,%xmm12
656*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm11
657*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm12
658*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm11
659*c0855eaaSJohn Baldwin	movdqa	%xmm12,%xmm8
660*c0855eaaSJohn Baldwin	pand	%xmm11,%xmm12
661*c0855eaaSJohn Baldwin	por	%xmm11,%xmm8
662*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm7
663*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm10
664*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm9
665*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm8
666*c0855eaaSJohn Baldwin	movdqa	%xmm3,%xmm11
667*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm7
668*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm12
669*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm8
670*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm13
671*c0855eaaSJohn Baldwin	pand	%xmm5,%xmm11
672*c0855eaaSJohn Baldwin	movdqa	%xmm2,%xmm14
673*c0855eaaSJohn Baldwin	pand	%xmm1,%xmm12
674*c0855eaaSJohn Baldwin	pand	%xmm0,%xmm13
675*c0855eaaSJohn Baldwin	por	%xmm4,%xmm14
676*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm10
677*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm9
678*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm8
679*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm7
680*c0855eaaSJohn Baldwin
681*c0855eaaSJohn Baldwin
682*c0855eaaSJohn Baldwin
683*c0855eaaSJohn Baldwin
684*c0855eaaSJohn Baldwin
685*c0855eaaSJohn Baldwin	movdqa	%xmm10,%xmm11
686*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm10
687*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm11
688*c0855eaaSJohn Baldwin
689*c0855eaaSJohn Baldwin	movdqa	%xmm7,%xmm13
690*c0855eaaSJohn Baldwin	movdqa	%xmm11,%xmm14
691*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm13
692*c0855eaaSJohn Baldwin	pand	%xmm13,%xmm14
693*c0855eaaSJohn Baldwin
694*c0855eaaSJohn Baldwin	movdqa	%xmm8,%xmm12
695*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm14
696*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm12
697*c0855eaaSJohn Baldwin
698*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm10
699*c0855eaaSJohn Baldwin
700*c0855eaaSJohn Baldwin	pand	%xmm10,%xmm12
701*c0855eaaSJohn Baldwin
702*c0855eaaSJohn Baldwin	movdqa	%xmm13,%xmm9
703*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm12
704*c0855eaaSJohn Baldwin
705*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm9
706*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm8
707*c0855eaaSJohn Baldwin
708*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm9
709*c0855eaaSJohn Baldwin
710*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm13
711*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm8
712*c0855eaaSJohn Baldwin
713*c0855eaaSJohn Baldwin	pand	%xmm14,%xmm13
714*c0855eaaSJohn Baldwin
715*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm13
716*c0855eaaSJohn Baldwin	movdqa	%xmm4,%xmm11
717*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm7
718*c0855eaaSJohn Baldwin	movdqa	%xmm14,%xmm9
719*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm9
720*c0855eaaSJohn Baldwin	pand	%xmm4,%xmm9
721*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm4
722*c0855eaaSJohn Baldwin	pand	%xmm14,%xmm0
723*c0855eaaSJohn Baldwin	pand	%xmm13,%xmm4
724*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm4
725*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm0
726*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm11
727*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm7
728*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm14
729*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm13
730*c0855eaaSJohn Baldwin	movdqa	%xmm14,%xmm10
731*c0855eaaSJohn Baldwin	movdqa	%xmm12,%xmm9
732*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm10
733*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm9
734*c0855eaaSJohn Baldwin	pand	%xmm11,%xmm10
735*c0855eaaSJohn Baldwin	pand	%xmm1,%xmm9
736*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm11
737*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm1
738*c0855eaaSJohn Baldwin	pand	%xmm14,%xmm7
739*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm5
740*c0855eaaSJohn Baldwin	pand	%xmm13,%xmm11
741*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm1
742*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm7
743*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm1
744*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm11
745*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm5
746*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm4
747*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm1
748*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm0
749*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm5
750*c0855eaaSJohn Baldwin
751*c0855eaaSJohn Baldwin	movdqa	%xmm2,%xmm11
752*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm7
753*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm11
754*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm7
755*c0855eaaSJohn Baldwin	movdqa	%xmm14,%xmm10
756*c0855eaaSJohn Baldwin	movdqa	%xmm12,%xmm9
757*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm10
758*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm9
759*c0855eaaSJohn Baldwin	pand	%xmm11,%xmm10
760*c0855eaaSJohn Baldwin	pand	%xmm15,%xmm9
761*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm11
762*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm15
763*c0855eaaSJohn Baldwin	pand	%xmm14,%xmm7
764*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm3
765*c0855eaaSJohn Baldwin	pand	%xmm13,%xmm11
766*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm15
767*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm7
768*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm15
769*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm11
770*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm3
771*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm14
772*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm13
773*c0855eaaSJohn Baldwin	movdqa	%xmm14,%xmm10
774*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm10
775*c0855eaaSJohn Baldwin	pand	%xmm2,%xmm10
776*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm2
777*c0855eaaSJohn Baldwin	pand	%xmm14,%xmm6
778*c0855eaaSJohn Baldwin	pand	%xmm13,%xmm2
779*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm2
780*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm6
781*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm2
782*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm15
783*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm6
784*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm3
785*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm0
786*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm5
787*c0855eaaSJohn Baldwin
788*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm3
789*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm1
790*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm4
791*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm3
792*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm6
793*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm3
794*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm2
795*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm5
796*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm2
797*c0855eaaSJohn Baldwin
798*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm3
799*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm6
800*c0855eaaSJohn Baldwin	decl	%r10d
801*c0855eaaSJohn Baldwin	jl	.Ldec_done
802*c0855eaaSJohn Baldwin
803*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm15,%xmm7
804*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm2,%xmm13
805*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm7
806*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm4,%xmm14
807*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm13
808*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm0,%xmm8
809*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm14
810*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm5,%xmm9
811*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm8
812*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm3,%xmm10
813*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm9
814*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm15
815*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm0
816*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm1,%xmm11
817*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm10
818*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm5
819*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm3
820*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm6,%xmm12
821*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm11
822*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm0
823*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
824*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm12
825*c0855eaaSJohn Baldwin
826*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm5
827*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm3
828*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm1
829*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm6
830*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm2
831*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm1
832*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm6
833*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm4
834*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm15,%xmm7
835*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm0,%xmm8
836*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm15
837*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm5,%xmm9
838*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
839*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm3,%xmm10
840*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm5
841*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm1,%xmm11
842*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm3
843*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm6,%xmm12
844*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm1
845*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm2,%xmm13
846*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm6
847*c0855eaaSJohn Baldwin	pshufd	$0x93,%xmm4,%xmm14
848*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm2
849*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm4
850*c0855eaaSJohn Baldwin
851*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm8
852*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm7
853*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm8
854*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm15,%xmm15
855*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm9
856*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm0,%xmm0
857*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm12
858*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm15
859*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm13
860*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
861*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm11
862*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm1,%xmm7
863*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm14
864*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm6,%xmm8
865*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm10
866*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm3,%xmm1
867*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm10
868*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm4,%xmm6
869*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm11
870*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm2,%xmm3
871*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm7
872*c0855eaaSJohn Baldwin	pshufd	$0x4E,%xmm5,%xmm2
873*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm8
874*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm10
875*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm6
876*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm13
877*c0855eaaSJohn Baldwin	movdqa	%xmm7,%xmm3
878*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm2
879*c0855eaaSJohn Baldwin	movdqa	%xmm13,%xmm5
880*c0855eaaSJohn Baldwin	movdqa	%xmm8,%xmm4
881*c0855eaaSJohn Baldwin	movdqa	%xmm2,%xmm1
882*c0855eaaSJohn Baldwin	movdqa	%xmm10,%xmm2
883*c0855eaaSJohn Baldwin	movdqa	-16(%r11),%xmm7
884*c0855eaaSJohn Baldwin	jnz	.Ldec_loop
885*c0855eaaSJohn Baldwin	movdqa	-32(%r11),%xmm7
886*c0855eaaSJohn Baldwin	jmp	.Ldec_loop
887*c0855eaaSJohn Baldwin.align	16
888*c0855eaaSJohn Baldwin.Ldec_done:
889*c0855eaaSJohn Baldwin	movdqa	0(%r11),%xmm7
890*c0855eaaSJohn Baldwin	movdqa	16(%r11),%xmm8
891*c0855eaaSJohn Baldwin	movdqa	%xmm2,%xmm9
892*c0855eaaSJohn Baldwin	psrlq	$1,%xmm2
893*c0855eaaSJohn Baldwin	movdqa	%xmm1,%xmm10
894*c0855eaaSJohn Baldwin	psrlq	$1,%xmm1
895*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm2
896*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm1
897*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm2
898*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm1
899*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm4
900*c0855eaaSJohn Baldwin	psllq	$1,%xmm2
901*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm6
902*c0855eaaSJohn Baldwin	psllq	$1,%xmm1
903*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm2
904*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm1
905*c0855eaaSJohn Baldwin	movdqa	%xmm5,%xmm9
906*c0855eaaSJohn Baldwin	psrlq	$1,%xmm5
907*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm10
908*c0855eaaSJohn Baldwin	psrlq	$1,%xmm15
909*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm5
910*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm15
911*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm5
912*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm15
913*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm3
914*c0855eaaSJohn Baldwin	psllq	$1,%xmm5
915*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm0
916*c0855eaaSJohn Baldwin	psllq	$1,%xmm15
917*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm5
918*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm15
919*c0855eaaSJohn Baldwin	movdqa	32(%r11),%xmm7
920*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm9
921*c0855eaaSJohn Baldwin	psrlq	$2,%xmm6
922*c0855eaaSJohn Baldwin	movdqa	%xmm1,%xmm10
923*c0855eaaSJohn Baldwin	psrlq	$2,%xmm1
924*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm6
925*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm1
926*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm6
927*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm1
928*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm4
929*c0855eaaSJohn Baldwin	psllq	$2,%xmm6
930*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm2
931*c0855eaaSJohn Baldwin	psllq	$2,%xmm1
932*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm6
933*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm1
934*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm9
935*c0855eaaSJohn Baldwin	psrlq	$2,%xmm0
936*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm10
937*c0855eaaSJohn Baldwin	psrlq	$2,%xmm15
938*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm0
939*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm15
940*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm0
941*c0855eaaSJohn Baldwin	pand	%xmm8,%xmm15
942*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm3
943*c0855eaaSJohn Baldwin	psllq	$2,%xmm0
944*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm5
945*c0855eaaSJohn Baldwin	psllq	$2,%xmm15
946*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm0
947*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm15
948*c0855eaaSJohn Baldwin	movdqa	%xmm3,%xmm9
949*c0855eaaSJohn Baldwin	psrlq	$4,%xmm3
950*c0855eaaSJohn Baldwin	movdqa	%xmm5,%xmm10
951*c0855eaaSJohn Baldwin	psrlq	$4,%xmm5
952*c0855eaaSJohn Baldwin	pxor	%xmm4,%xmm3
953*c0855eaaSJohn Baldwin	pxor	%xmm2,%xmm5
954*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm3
955*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm5
956*c0855eaaSJohn Baldwin	pxor	%xmm3,%xmm4
957*c0855eaaSJohn Baldwin	psllq	$4,%xmm3
958*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm2
959*c0855eaaSJohn Baldwin	psllq	$4,%xmm5
960*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm3
961*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm5
962*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm9
963*c0855eaaSJohn Baldwin	psrlq	$4,%xmm0
964*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm10
965*c0855eaaSJohn Baldwin	psrlq	$4,%xmm15
966*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm0
967*c0855eaaSJohn Baldwin	pxor	%xmm1,%xmm15
968*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm0
969*c0855eaaSJohn Baldwin	pand	%xmm7,%xmm15
970*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm6
971*c0855eaaSJohn Baldwin	psllq	$4,%xmm0
972*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm1
973*c0855eaaSJohn Baldwin	psllq	$4,%xmm15
974*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm0
975*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm15
976*c0855eaaSJohn Baldwin	movdqa	(%rax),%xmm7
977*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm5
978*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm3
979*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm1
980*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm6
981*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm2
982*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm4
983*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm15
984*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm0
985*c0855eaaSJohn Baldwin	.byte	0xf3,0xc3
986*c0855eaaSJohn Baldwin.cfi_endproc
987*c0855eaaSJohn Baldwin.size	_bsaes_decrypt8,.-_bsaes_decrypt8
988*c0855eaaSJohn Baldwin.type	_bsaes_key_convert,@function
989*c0855eaaSJohn Baldwin.align	16
990*c0855eaaSJohn Baldwin_bsaes_key_convert:
991*c0855eaaSJohn Baldwin.cfi_startproc
992*c0855eaaSJohn Baldwin	leaq	.Lmasks(%rip),%r11
993*c0855eaaSJohn Baldwin	movdqu	(%rcx),%xmm7
994*c0855eaaSJohn Baldwin	leaq	16(%rcx),%rcx
995*c0855eaaSJohn Baldwin	movdqa	0(%r11),%xmm0
996*c0855eaaSJohn Baldwin	movdqa	16(%r11),%xmm1
997*c0855eaaSJohn Baldwin	movdqa	32(%r11),%xmm2
998*c0855eaaSJohn Baldwin	movdqa	48(%r11),%xmm3
999*c0855eaaSJohn Baldwin	movdqa	64(%r11),%xmm4
1000*c0855eaaSJohn Baldwin	pcmpeqd	%xmm5,%xmm5
1001*c0855eaaSJohn Baldwin
1002*c0855eaaSJohn Baldwin	movdqu	(%rcx),%xmm6
1003*c0855eaaSJohn Baldwin	movdqa	%xmm7,(%rax)
1004*c0855eaaSJohn Baldwin	leaq	16(%rax),%rax
1005*c0855eaaSJohn Baldwin	decl	%r10d
1006*c0855eaaSJohn Baldwin	jmp	.Lkey_loop
1007*c0855eaaSJohn Baldwin.align	16
1008*c0855eaaSJohn Baldwin.Lkey_loop:
1009*c0855eaaSJohn Baldwin.byte	102,15,56,0,244
1010*c0855eaaSJohn Baldwin
1011*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm8
1012*c0855eaaSJohn Baldwin	movdqa	%xmm1,%xmm9
1013*c0855eaaSJohn Baldwin
1014*c0855eaaSJohn Baldwin	pand	%xmm6,%xmm8
1015*c0855eaaSJohn Baldwin	pand	%xmm6,%xmm9
1016*c0855eaaSJohn Baldwin	movdqa	%xmm2,%xmm10
1017*c0855eaaSJohn Baldwin	pcmpeqb	%xmm0,%xmm8
1018*c0855eaaSJohn Baldwin	psllq	$4,%xmm0
1019*c0855eaaSJohn Baldwin	movdqa	%xmm3,%xmm11
1020*c0855eaaSJohn Baldwin	pcmpeqb	%xmm1,%xmm9
1021*c0855eaaSJohn Baldwin	psllq	$4,%xmm1
1022*c0855eaaSJohn Baldwin
1023*c0855eaaSJohn Baldwin	pand	%xmm6,%xmm10
1024*c0855eaaSJohn Baldwin	pand	%xmm6,%xmm11
1025*c0855eaaSJohn Baldwin	movdqa	%xmm0,%xmm12
1026*c0855eaaSJohn Baldwin	pcmpeqb	%xmm2,%xmm10
1027*c0855eaaSJohn Baldwin	psllq	$4,%xmm2
1028*c0855eaaSJohn Baldwin	movdqa	%xmm1,%xmm13
1029*c0855eaaSJohn Baldwin	pcmpeqb	%xmm3,%xmm11
1030*c0855eaaSJohn Baldwin	psllq	$4,%xmm3
1031*c0855eaaSJohn Baldwin
1032*c0855eaaSJohn Baldwin	movdqa	%xmm2,%xmm14
1033*c0855eaaSJohn Baldwin	movdqa	%xmm3,%xmm15
1034*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm8
1035*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm9
1036*c0855eaaSJohn Baldwin
1037*c0855eaaSJohn Baldwin	pand	%xmm6,%xmm12
1038*c0855eaaSJohn Baldwin	pand	%xmm6,%xmm13
1039*c0855eaaSJohn Baldwin	movdqa	%xmm8,0(%rax)
1040*c0855eaaSJohn Baldwin	pcmpeqb	%xmm0,%xmm12
1041*c0855eaaSJohn Baldwin	psrlq	$4,%xmm0
1042*c0855eaaSJohn Baldwin	movdqa	%xmm9,16(%rax)
1043*c0855eaaSJohn Baldwin	pcmpeqb	%xmm1,%xmm13
1044*c0855eaaSJohn Baldwin	psrlq	$4,%xmm1
1045*c0855eaaSJohn Baldwin	leaq	16(%rcx),%rcx
1046*c0855eaaSJohn Baldwin
1047*c0855eaaSJohn Baldwin	pand	%xmm6,%xmm14
1048*c0855eaaSJohn Baldwin	pand	%xmm6,%xmm15
1049*c0855eaaSJohn Baldwin	movdqa	%xmm10,32(%rax)
1050*c0855eaaSJohn Baldwin	pcmpeqb	%xmm2,%xmm14
1051*c0855eaaSJohn Baldwin	psrlq	$4,%xmm2
1052*c0855eaaSJohn Baldwin	movdqa	%xmm11,48(%rax)
1053*c0855eaaSJohn Baldwin	pcmpeqb	%xmm3,%xmm15
1054*c0855eaaSJohn Baldwin	psrlq	$4,%xmm3
1055*c0855eaaSJohn Baldwin	movdqu	(%rcx),%xmm6
1056*c0855eaaSJohn Baldwin
1057*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm13
1058*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm14
1059*c0855eaaSJohn Baldwin	movdqa	%xmm12,64(%rax)
1060*c0855eaaSJohn Baldwin	movdqa	%xmm13,80(%rax)
1061*c0855eaaSJohn Baldwin	movdqa	%xmm14,96(%rax)
1062*c0855eaaSJohn Baldwin	movdqa	%xmm15,112(%rax)
1063*c0855eaaSJohn Baldwin	leaq	128(%rax),%rax
1064*c0855eaaSJohn Baldwin	decl	%r10d
1065*c0855eaaSJohn Baldwin	jnz	.Lkey_loop
1066*c0855eaaSJohn Baldwin
1067*c0855eaaSJohn Baldwin	movdqa	80(%r11),%xmm7
1068*c0855eaaSJohn Baldwin
1069*c0855eaaSJohn Baldwin	.byte	0xf3,0xc3
1070*c0855eaaSJohn Baldwin.cfi_endproc
1071*c0855eaaSJohn Baldwin.size	_bsaes_key_convert,.-_bsaes_key_convert
1072*c0855eaaSJohn Baldwin
1073*c0855eaaSJohn Baldwin.globl	ossl_bsaes_cbc_encrypt
1074*c0855eaaSJohn Baldwin.type	ossl_bsaes_cbc_encrypt,@function
1075*c0855eaaSJohn Baldwin.align	16
1076*c0855eaaSJohn Baldwinossl_bsaes_cbc_encrypt:
1077*c0855eaaSJohn Baldwin.cfi_startproc
1078*c0855eaaSJohn Baldwin.byte	243,15,30,250
1079*c0855eaaSJohn Baldwin	cmpl	$0,%r9d
1080*c0855eaaSJohn Baldwin	jne	asm_AES_cbc_encrypt
1081*c0855eaaSJohn Baldwin	cmpq	$128,%rdx
1082*c0855eaaSJohn Baldwin	jb	asm_AES_cbc_encrypt
1083*c0855eaaSJohn Baldwin
1084*c0855eaaSJohn Baldwin	movq	%rsp,%rax
1085*c0855eaaSJohn Baldwin.Lcbc_dec_prologue:
1086*c0855eaaSJohn Baldwin	pushq	%rbp
1087*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1088*c0855eaaSJohn Baldwin.cfi_offset	%rbp,-16
1089*c0855eaaSJohn Baldwin	pushq	%rbx
1090*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1091*c0855eaaSJohn Baldwin.cfi_offset	%rbx,-24
1092*c0855eaaSJohn Baldwin	pushq	%r12
1093*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1094*c0855eaaSJohn Baldwin.cfi_offset	%r12,-32
1095*c0855eaaSJohn Baldwin	pushq	%r13
1096*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1097*c0855eaaSJohn Baldwin.cfi_offset	%r13,-40
1098*c0855eaaSJohn Baldwin	pushq	%r14
1099*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1100*c0855eaaSJohn Baldwin.cfi_offset	%r14,-48
1101*c0855eaaSJohn Baldwin	pushq	%r15
1102*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1103*c0855eaaSJohn Baldwin.cfi_offset	%r15,-56
1104*c0855eaaSJohn Baldwin	leaq	-72(%rsp),%rsp
1105*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	0x48
1106*c0855eaaSJohn Baldwin	movq	%rsp,%rbp
1107*c0855eaaSJohn Baldwin.cfi_def_cfa_register	%rbp
1108*c0855eaaSJohn Baldwin	movl	240(%rcx),%eax
1109*c0855eaaSJohn Baldwin	movq	%rdi,%r12
1110*c0855eaaSJohn Baldwin	movq	%rsi,%r13
1111*c0855eaaSJohn Baldwin	movq	%rdx,%r14
1112*c0855eaaSJohn Baldwin	movq	%rcx,%r15
1113*c0855eaaSJohn Baldwin	movq	%r8,%rbx
1114*c0855eaaSJohn Baldwin	shrq	$4,%r14
1115*c0855eaaSJohn Baldwin
1116*c0855eaaSJohn Baldwin	movl	%eax,%edx
1117*c0855eaaSJohn Baldwin	shlq	$7,%rax
1118*c0855eaaSJohn Baldwin	subq	$96,%rax
1119*c0855eaaSJohn Baldwin	subq	%rax,%rsp
1120*c0855eaaSJohn Baldwin
1121*c0855eaaSJohn Baldwin	movq	%rsp,%rax
1122*c0855eaaSJohn Baldwin	movq	%r15,%rcx
1123*c0855eaaSJohn Baldwin	movl	%edx,%r10d
1124*c0855eaaSJohn Baldwin	call	_bsaes_key_convert
1125*c0855eaaSJohn Baldwin	pxor	(%rsp),%xmm7
1126*c0855eaaSJohn Baldwin	movdqa	%xmm6,(%rax)
1127*c0855eaaSJohn Baldwin	movdqa	%xmm7,(%rsp)
1128*c0855eaaSJohn Baldwin
1129*c0855eaaSJohn Baldwin	movdqu	(%rbx),%xmm14
1130*c0855eaaSJohn Baldwin	subq	$8,%r14
1131*c0855eaaSJohn Baldwin.Lcbc_dec_loop:
1132*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm15
1133*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm0
1134*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm1
1135*c0855eaaSJohn Baldwin	movdqu	48(%r12),%xmm2
1136*c0855eaaSJohn Baldwin	movdqu	64(%r12),%xmm3
1137*c0855eaaSJohn Baldwin	movdqu	80(%r12),%xmm4
1138*c0855eaaSJohn Baldwin	movq	%rsp,%rax
1139*c0855eaaSJohn Baldwin	movdqu	96(%r12),%xmm5
1140*c0855eaaSJohn Baldwin	movl	%edx,%r10d
1141*c0855eaaSJohn Baldwin	movdqu	112(%r12),%xmm6
1142*c0855eaaSJohn Baldwin	movdqa	%xmm14,32(%rbp)
1143*c0855eaaSJohn Baldwin
1144*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
1145*c0855eaaSJohn Baldwin
1146*c0855eaaSJohn Baldwin	pxor	32(%rbp),%xmm15
1147*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm7
1148*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm8
1149*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm0
1150*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm9
1151*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm5
1152*c0855eaaSJohn Baldwin	movdqu	48(%r12),%xmm10
1153*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm3
1154*c0855eaaSJohn Baldwin	movdqu	64(%r12),%xmm11
1155*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm1
1156*c0855eaaSJohn Baldwin	movdqu	80(%r12),%xmm12
1157*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm6
1158*c0855eaaSJohn Baldwin	movdqu	96(%r12),%xmm13
1159*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm2
1160*c0855eaaSJohn Baldwin	movdqu	112(%r12),%xmm14
1161*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm4
1162*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1163*c0855eaaSJohn Baldwin	leaq	128(%r12),%r12
1164*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1165*c0855eaaSJohn Baldwin	movdqu	%xmm5,32(%r13)
1166*c0855eaaSJohn Baldwin	movdqu	%xmm3,48(%r13)
1167*c0855eaaSJohn Baldwin	movdqu	%xmm1,64(%r13)
1168*c0855eaaSJohn Baldwin	movdqu	%xmm6,80(%r13)
1169*c0855eaaSJohn Baldwin	movdqu	%xmm2,96(%r13)
1170*c0855eaaSJohn Baldwin	movdqu	%xmm4,112(%r13)
1171*c0855eaaSJohn Baldwin	leaq	128(%r13),%r13
1172*c0855eaaSJohn Baldwin	subq	$8,%r14
1173*c0855eaaSJohn Baldwin	jnc	.Lcbc_dec_loop
1174*c0855eaaSJohn Baldwin
1175*c0855eaaSJohn Baldwin	addq	$8,%r14
1176*c0855eaaSJohn Baldwin	jz	.Lcbc_dec_done
1177*c0855eaaSJohn Baldwin
1178*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm15
1179*c0855eaaSJohn Baldwin	movq	%rsp,%rax
1180*c0855eaaSJohn Baldwin	movl	%edx,%r10d
1181*c0855eaaSJohn Baldwin	cmpq	$2,%r14
1182*c0855eaaSJohn Baldwin	jb	.Lcbc_dec_one
1183*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm0
1184*c0855eaaSJohn Baldwin	je	.Lcbc_dec_two
1185*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm1
1186*c0855eaaSJohn Baldwin	cmpq	$4,%r14
1187*c0855eaaSJohn Baldwin	jb	.Lcbc_dec_three
1188*c0855eaaSJohn Baldwin	movdqu	48(%r12),%xmm2
1189*c0855eaaSJohn Baldwin	je	.Lcbc_dec_four
1190*c0855eaaSJohn Baldwin	movdqu	64(%r12),%xmm3
1191*c0855eaaSJohn Baldwin	cmpq	$6,%r14
1192*c0855eaaSJohn Baldwin	jb	.Lcbc_dec_five
1193*c0855eaaSJohn Baldwin	movdqu	80(%r12),%xmm4
1194*c0855eaaSJohn Baldwin	je	.Lcbc_dec_six
1195*c0855eaaSJohn Baldwin	movdqu	96(%r12),%xmm5
1196*c0855eaaSJohn Baldwin	movdqa	%xmm14,32(%rbp)
1197*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
1198*c0855eaaSJohn Baldwin	pxor	32(%rbp),%xmm15
1199*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm7
1200*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm8
1201*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm0
1202*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm9
1203*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm5
1204*c0855eaaSJohn Baldwin	movdqu	48(%r12),%xmm10
1205*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm3
1206*c0855eaaSJohn Baldwin	movdqu	64(%r12),%xmm11
1207*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm1
1208*c0855eaaSJohn Baldwin	movdqu	80(%r12),%xmm12
1209*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm6
1210*c0855eaaSJohn Baldwin	movdqu	96(%r12),%xmm14
1211*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm2
1212*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1213*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1214*c0855eaaSJohn Baldwin	movdqu	%xmm5,32(%r13)
1215*c0855eaaSJohn Baldwin	movdqu	%xmm3,48(%r13)
1216*c0855eaaSJohn Baldwin	movdqu	%xmm1,64(%r13)
1217*c0855eaaSJohn Baldwin	movdqu	%xmm6,80(%r13)
1218*c0855eaaSJohn Baldwin	movdqu	%xmm2,96(%r13)
1219*c0855eaaSJohn Baldwin	jmp	.Lcbc_dec_done
1220*c0855eaaSJohn Baldwin.align	16
1221*c0855eaaSJohn Baldwin.Lcbc_dec_six:
1222*c0855eaaSJohn Baldwin	movdqa	%xmm14,32(%rbp)
1223*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
1224*c0855eaaSJohn Baldwin	pxor	32(%rbp),%xmm15
1225*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm7
1226*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm8
1227*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm0
1228*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm9
1229*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm5
1230*c0855eaaSJohn Baldwin	movdqu	48(%r12),%xmm10
1231*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm3
1232*c0855eaaSJohn Baldwin	movdqu	64(%r12),%xmm11
1233*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm1
1234*c0855eaaSJohn Baldwin	movdqu	80(%r12),%xmm14
1235*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm6
1236*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1237*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1238*c0855eaaSJohn Baldwin	movdqu	%xmm5,32(%r13)
1239*c0855eaaSJohn Baldwin	movdqu	%xmm3,48(%r13)
1240*c0855eaaSJohn Baldwin	movdqu	%xmm1,64(%r13)
1241*c0855eaaSJohn Baldwin	movdqu	%xmm6,80(%r13)
1242*c0855eaaSJohn Baldwin	jmp	.Lcbc_dec_done
1243*c0855eaaSJohn Baldwin.align	16
1244*c0855eaaSJohn Baldwin.Lcbc_dec_five:
1245*c0855eaaSJohn Baldwin	movdqa	%xmm14,32(%rbp)
1246*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
1247*c0855eaaSJohn Baldwin	pxor	32(%rbp),%xmm15
1248*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm7
1249*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm8
1250*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm0
1251*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm9
1252*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm5
1253*c0855eaaSJohn Baldwin	movdqu	48(%r12),%xmm10
1254*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm3
1255*c0855eaaSJohn Baldwin	movdqu	64(%r12),%xmm14
1256*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm1
1257*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1258*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1259*c0855eaaSJohn Baldwin	movdqu	%xmm5,32(%r13)
1260*c0855eaaSJohn Baldwin	movdqu	%xmm3,48(%r13)
1261*c0855eaaSJohn Baldwin	movdqu	%xmm1,64(%r13)
1262*c0855eaaSJohn Baldwin	jmp	.Lcbc_dec_done
1263*c0855eaaSJohn Baldwin.align	16
1264*c0855eaaSJohn Baldwin.Lcbc_dec_four:
1265*c0855eaaSJohn Baldwin	movdqa	%xmm14,32(%rbp)
1266*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
1267*c0855eaaSJohn Baldwin	pxor	32(%rbp),%xmm15
1268*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm7
1269*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm8
1270*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm0
1271*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm9
1272*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm5
1273*c0855eaaSJohn Baldwin	movdqu	48(%r12),%xmm14
1274*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm3
1275*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1276*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1277*c0855eaaSJohn Baldwin	movdqu	%xmm5,32(%r13)
1278*c0855eaaSJohn Baldwin	movdqu	%xmm3,48(%r13)
1279*c0855eaaSJohn Baldwin	jmp	.Lcbc_dec_done
1280*c0855eaaSJohn Baldwin.align	16
1281*c0855eaaSJohn Baldwin.Lcbc_dec_three:
1282*c0855eaaSJohn Baldwin	movdqa	%xmm14,32(%rbp)
1283*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
1284*c0855eaaSJohn Baldwin	pxor	32(%rbp),%xmm15
1285*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm7
1286*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm8
1287*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm0
1288*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm14
1289*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm5
1290*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1291*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1292*c0855eaaSJohn Baldwin	movdqu	%xmm5,32(%r13)
1293*c0855eaaSJohn Baldwin	jmp	.Lcbc_dec_done
1294*c0855eaaSJohn Baldwin.align	16
1295*c0855eaaSJohn Baldwin.Lcbc_dec_two:
1296*c0855eaaSJohn Baldwin	movdqa	%xmm14,32(%rbp)
1297*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
1298*c0855eaaSJohn Baldwin	pxor	32(%rbp),%xmm15
1299*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm7
1300*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm14
1301*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm0
1302*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1303*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1304*c0855eaaSJohn Baldwin	jmp	.Lcbc_dec_done
1305*c0855eaaSJohn Baldwin.align	16
1306*c0855eaaSJohn Baldwin.Lcbc_dec_one:
1307*c0855eaaSJohn Baldwin	leaq	(%r12),%rdi
1308*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rsi
1309*c0855eaaSJohn Baldwin	leaq	(%r15),%rdx
1310*c0855eaaSJohn Baldwin	call	asm_AES_decrypt
1311*c0855eaaSJohn Baldwin	pxor	32(%rbp),%xmm14
1312*c0855eaaSJohn Baldwin	movdqu	%xmm14,(%r13)
1313*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm14
1314*c0855eaaSJohn Baldwin
1315*c0855eaaSJohn Baldwin.Lcbc_dec_done:
1316*c0855eaaSJohn Baldwin	movdqu	%xmm14,(%rbx)
1317*c0855eaaSJohn Baldwin	leaq	(%rsp),%rax
1318*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm0
1319*c0855eaaSJohn Baldwin.Lcbc_dec_bzero:
1320*c0855eaaSJohn Baldwin	movdqa	%xmm0,0(%rax)
1321*c0855eaaSJohn Baldwin	movdqa	%xmm0,16(%rax)
1322*c0855eaaSJohn Baldwin	leaq	32(%rax),%rax
1323*c0855eaaSJohn Baldwin	cmpq	%rax,%rbp
1324*c0855eaaSJohn Baldwin	ja	.Lcbc_dec_bzero
1325*c0855eaaSJohn Baldwin
1326*c0855eaaSJohn Baldwin	leaq	120(%rbp),%rax
1327*c0855eaaSJohn Baldwin.cfi_def_cfa	%rax,8
1328*c0855eaaSJohn Baldwin	movq	-48(%rax),%r15
1329*c0855eaaSJohn Baldwin.cfi_restore	%r15
1330*c0855eaaSJohn Baldwin	movq	-40(%rax),%r14
1331*c0855eaaSJohn Baldwin.cfi_restore	%r14
1332*c0855eaaSJohn Baldwin	movq	-32(%rax),%r13
1333*c0855eaaSJohn Baldwin.cfi_restore	%r13
1334*c0855eaaSJohn Baldwin	movq	-24(%rax),%r12
1335*c0855eaaSJohn Baldwin.cfi_restore	%r12
1336*c0855eaaSJohn Baldwin	movq	-16(%rax),%rbx
1337*c0855eaaSJohn Baldwin.cfi_restore	%rbx
1338*c0855eaaSJohn Baldwin	movq	-8(%rax),%rbp
1339*c0855eaaSJohn Baldwin.cfi_restore	%rbp
1340*c0855eaaSJohn Baldwin	leaq	(%rax),%rsp
1341*c0855eaaSJohn Baldwin.cfi_def_cfa_register	%rsp
1342*c0855eaaSJohn Baldwin.Lcbc_dec_epilogue:
1343*c0855eaaSJohn Baldwin	.byte	0xf3,0xc3
1344*c0855eaaSJohn Baldwin.cfi_endproc
1345*c0855eaaSJohn Baldwin.size	ossl_bsaes_cbc_encrypt,.-ossl_bsaes_cbc_encrypt
1346*c0855eaaSJohn Baldwin
1347*c0855eaaSJohn Baldwin.globl	ossl_bsaes_ctr32_encrypt_blocks
1348*c0855eaaSJohn Baldwin.type	ossl_bsaes_ctr32_encrypt_blocks,@function
1349*c0855eaaSJohn Baldwin.align	16
1350*c0855eaaSJohn Baldwinossl_bsaes_ctr32_encrypt_blocks:
1351*c0855eaaSJohn Baldwin.cfi_startproc
1352*c0855eaaSJohn Baldwin.byte	243,15,30,250
1353*c0855eaaSJohn Baldwin	movq	%rsp,%rax
1354*c0855eaaSJohn Baldwin.Lctr_enc_prologue:
1355*c0855eaaSJohn Baldwin	pushq	%rbp
1356*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1357*c0855eaaSJohn Baldwin.cfi_offset	%rbp,-16
1358*c0855eaaSJohn Baldwin	pushq	%rbx
1359*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1360*c0855eaaSJohn Baldwin.cfi_offset	%rbx,-24
1361*c0855eaaSJohn Baldwin	pushq	%r12
1362*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1363*c0855eaaSJohn Baldwin.cfi_offset	%r12,-32
1364*c0855eaaSJohn Baldwin	pushq	%r13
1365*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1366*c0855eaaSJohn Baldwin.cfi_offset	%r13,-40
1367*c0855eaaSJohn Baldwin	pushq	%r14
1368*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1369*c0855eaaSJohn Baldwin.cfi_offset	%r14,-48
1370*c0855eaaSJohn Baldwin	pushq	%r15
1371*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1372*c0855eaaSJohn Baldwin.cfi_offset	%r15,-56
1373*c0855eaaSJohn Baldwin	leaq	-72(%rsp),%rsp
1374*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	0x48
1375*c0855eaaSJohn Baldwin	movq	%rsp,%rbp
1376*c0855eaaSJohn Baldwin.cfi_def_cfa_register	%rbp
1377*c0855eaaSJohn Baldwin	movdqu	(%r8),%xmm0
1378*c0855eaaSJohn Baldwin	movl	240(%rcx),%eax
1379*c0855eaaSJohn Baldwin	movq	%rdi,%r12
1380*c0855eaaSJohn Baldwin	movq	%rsi,%r13
1381*c0855eaaSJohn Baldwin	movq	%rdx,%r14
1382*c0855eaaSJohn Baldwin	movq	%rcx,%r15
1383*c0855eaaSJohn Baldwin	movdqa	%xmm0,32(%rbp)
1384*c0855eaaSJohn Baldwin	cmpq	$8,%rdx
1385*c0855eaaSJohn Baldwin	jb	.Lctr_enc_short
1386*c0855eaaSJohn Baldwin
1387*c0855eaaSJohn Baldwin	movl	%eax,%ebx
1388*c0855eaaSJohn Baldwin	shlq	$7,%rax
1389*c0855eaaSJohn Baldwin	subq	$96,%rax
1390*c0855eaaSJohn Baldwin	subq	%rax,%rsp
1391*c0855eaaSJohn Baldwin
1392*c0855eaaSJohn Baldwin	movq	%rsp,%rax
1393*c0855eaaSJohn Baldwin	movq	%r15,%rcx
1394*c0855eaaSJohn Baldwin	movl	%ebx,%r10d
1395*c0855eaaSJohn Baldwin	call	_bsaes_key_convert
1396*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm7
1397*c0855eaaSJohn Baldwin	movdqa	%xmm7,(%rax)
1398*c0855eaaSJohn Baldwin
1399*c0855eaaSJohn Baldwin	movdqa	(%rsp),%xmm8
1400*c0855eaaSJohn Baldwin	leaq	.LADD1(%rip),%r11
1401*c0855eaaSJohn Baldwin	movdqa	32(%rbp),%xmm15
1402*c0855eaaSJohn Baldwin	movdqa	-32(%r11),%xmm7
1403*c0855eaaSJohn Baldwin.byte	102,68,15,56,0,199
1404*c0855eaaSJohn Baldwin.byte	102,68,15,56,0,255
1405*c0855eaaSJohn Baldwin	movdqa	%xmm8,(%rsp)
1406*c0855eaaSJohn Baldwin	jmp	.Lctr_enc_loop
1407*c0855eaaSJohn Baldwin.align	16
1408*c0855eaaSJohn Baldwin.Lctr_enc_loop:
1409*c0855eaaSJohn Baldwin	movdqa	%xmm15,32(%rbp)
1410*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm0
1411*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm1
1412*c0855eaaSJohn Baldwin	paddd	0(%r11),%xmm0
1413*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm2
1414*c0855eaaSJohn Baldwin	paddd	16(%r11),%xmm1
1415*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm3
1416*c0855eaaSJohn Baldwin	paddd	32(%r11),%xmm2
1417*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm4
1418*c0855eaaSJohn Baldwin	paddd	48(%r11),%xmm3
1419*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm5
1420*c0855eaaSJohn Baldwin	paddd	64(%r11),%xmm4
1421*c0855eaaSJohn Baldwin	movdqa	%xmm15,%xmm6
1422*c0855eaaSJohn Baldwin	paddd	80(%r11),%xmm5
1423*c0855eaaSJohn Baldwin	paddd	96(%r11),%xmm6
1424*c0855eaaSJohn Baldwin
1425*c0855eaaSJohn Baldwin
1426*c0855eaaSJohn Baldwin
1427*c0855eaaSJohn Baldwin	movdqa	(%rsp),%xmm8
1428*c0855eaaSJohn Baldwin	leaq	16(%rsp),%rax
1429*c0855eaaSJohn Baldwin	movdqa	-16(%r11),%xmm7
1430*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm15
1431*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
1432*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm1
1433*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm2
1434*c0855eaaSJohn Baldwin.byte	102,68,15,56,0,255
1435*c0855eaaSJohn Baldwin.byte	102,15,56,0,199
1436*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm3
1437*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm4
1438*c0855eaaSJohn Baldwin.byte	102,15,56,0,207
1439*c0855eaaSJohn Baldwin.byte	102,15,56,0,215
1440*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm5
1441*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm6
1442*c0855eaaSJohn Baldwin.byte	102,15,56,0,223
1443*c0855eaaSJohn Baldwin.byte	102,15,56,0,231
1444*c0855eaaSJohn Baldwin.byte	102,15,56,0,239
1445*c0855eaaSJohn Baldwin.byte	102,15,56,0,247
1446*c0855eaaSJohn Baldwin	leaq	.LBS0(%rip),%r11
1447*c0855eaaSJohn Baldwin	movl	%ebx,%r10d
1448*c0855eaaSJohn Baldwin
1449*c0855eaaSJohn Baldwin	call	_bsaes_encrypt8_bitslice
1450*c0855eaaSJohn Baldwin
1451*c0855eaaSJohn Baldwin	subq	$8,%r14
1452*c0855eaaSJohn Baldwin	jc	.Lctr_enc_loop_done
1453*c0855eaaSJohn Baldwin
1454*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm7
1455*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm8
1456*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm9
1457*c0855eaaSJohn Baldwin	movdqu	48(%r12),%xmm10
1458*c0855eaaSJohn Baldwin	movdqu	64(%r12),%xmm11
1459*c0855eaaSJohn Baldwin	movdqu	80(%r12),%xmm12
1460*c0855eaaSJohn Baldwin	movdqu	96(%r12),%xmm13
1461*c0855eaaSJohn Baldwin	movdqu	112(%r12),%xmm14
1462*c0855eaaSJohn Baldwin	leaq	128(%r12),%r12
1463*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm7
1464*c0855eaaSJohn Baldwin	movdqa	32(%rbp),%xmm15
1465*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
1466*c0855eaaSJohn Baldwin	movdqu	%xmm7,0(%r13)
1467*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm3
1468*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1469*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm5
1470*c0855eaaSJohn Baldwin	movdqu	%xmm3,32(%r13)
1471*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm2
1472*c0855eaaSJohn Baldwin	movdqu	%xmm5,48(%r13)
1473*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm6
1474*c0855eaaSJohn Baldwin	movdqu	%xmm2,64(%r13)
1475*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm1
1476*c0855eaaSJohn Baldwin	movdqu	%xmm6,80(%r13)
1477*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm4
1478*c0855eaaSJohn Baldwin	movdqu	%xmm1,96(%r13)
1479*c0855eaaSJohn Baldwin	leaq	.LADD1(%rip),%r11
1480*c0855eaaSJohn Baldwin	movdqu	%xmm4,112(%r13)
1481*c0855eaaSJohn Baldwin	leaq	128(%r13),%r13
1482*c0855eaaSJohn Baldwin	paddd	112(%r11),%xmm15
1483*c0855eaaSJohn Baldwin	jnz	.Lctr_enc_loop
1484*c0855eaaSJohn Baldwin
1485*c0855eaaSJohn Baldwin	jmp	.Lctr_enc_done
1486*c0855eaaSJohn Baldwin.align	16
1487*c0855eaaSJohn Baldwin.Lctr_enc_loop_done:
1488*c0855eaaSJohn Baldwin	addq	$8,%r14
1489*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm7
1490*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm15
1491*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1492*c0855eaaSJohn Baldwin	cmpq	$2,%r14
1493*c0855eaaSJohn Baldwin	jb	.Lctr_enc_done
1494*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm8
1495*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
1496*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1497*c0855eaaSJohn Baldwin	je	.Lctr_enc_done
1498*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm9
1499*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm3
1500*c0855eaaSJohn Baldwin	movdqu	%xmm3,32(%r13)
1501*c0855eaaSJohn Baldwin	cmpq	$4,%r14
1502*c0855eaaSJohn Baldwin	jb	.Lctr_enc_done
1503*c0855eaaSJohn Baldwin	movdqu	48(%r12),%xmm10
1504*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm5
1505*c0855eaaSJohn Baldwin	movdqu	%xmm5,48(%r13)
1506*c0855eaaSJohn Baldwin	je	.Lctr_enc_done
1507*c0855eaaSJohn Baldwin	movdqu	64(%r12),%xmm11
1508*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm2
1509*c0855eaaSJohn Baldwin	movdqu	%xmm2,64(%r13)
1510*c0855eaaSJohn Baldwin	cmpq	$6,%r14
1511*c0855eaaSJohn Baldwin	jb	.Lctr_enc_done
1512*c0855eaaSJohn Baldwin	movdqu	80(%r12),%xmm12
1513*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm6
1514*c0855eaaSJohn Baldwin	movdqu	%xmm6,80(%r13)
1515*c0855eaaSJohn Baldwin	je	.Lctr_enc_done
1516*c0855eaaSJohn Baldwin	movdqu	96(%r12),%xmm13
1517*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm1
1518*c0855eaaSJohn Baldwin	movdqu	%xmm1,96(%r13)
1519*c0855eaaSJohn Baldwin	jmp	.Lctr_enc_done
1520*c0855eaaSJohn Baldwin
1521*c0855eaaSJohn Baldwin.align	16
1522*c0855eaaSJohn Baldwin.Lctr_enc_short:
1523*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rdi
1524*c0855eaaSJohn Baldwin	leaq	48(%rbp),%rsi
1525*c0855eaaSJohn Baldwin	leaq	(%r15),%rdx
1526*c0855eaaSJohn Baldwin	call	asm_AES_encrypt
1527*c0855eaaSJohn Baldwin	movdqu	(%r12),%xmm0
1528*c0855eaaSJohn Baldwin	leaq	16(%r12),%r12
1529*c0855eaaSJohn Baldwin	movl	44(%rbp),%eax
1530*c0855eaaSJohn Baldwin	bswapl	%eax
1531*c0855eaaSJohn Baldwin	pxor	48(%rbp),%xmm0
1532*c0855eaaSJohn Baldwin	incl	%eax
1533*c0855eaaSJohn Baldwin	movdqu	%xmm0,(%r13)
1534*c0855eaaSJohn Baldwin	bswapl	%eax
1535*c0855eaaSJohn Baldwin	leaq	16(%r13),%r13
1536*c0855eaaSJohn Baldwin	movl	%eax,44(%rsp)
1537*c0855eaaSJohn Baldwin	decq	%r14
1538*c0855eaaSJohn Baldwin	jnz	.Lctr_enc_short
1539*c0855eaaSJohn Baldwin
1540*c0855eaaSJohn Baldwin.Lctr_enc_done:
1541*c0855eaaSJohn Baldwin	leaq	(%rsp),%rax
1542*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm0
1543*c0855eaaSJohn Baldwin.Lctr_enc_bzero:
1544*c0855eaaSJohn Baldwin	movdqa	%xmm0,0(%rax)
1545*c0855eaaSJohn Baldwin	movdqa	%xmm0,16(%rax)
1546*c0855eaaSJohn Baldwin	leaq	32(%rax),%rax
1547*c0855eaaSJohn Baldwin	cmpq	%rax,%rbp
1548*c0855eaaSJohn Baldwin	ja	.Lctr_enc_bzero
1549*c0855eaaSJohn Baldwin
1550*c0855eaaSJohn Baldwin	leaq	120(%rbp),%rax
1551*c0855eaaSJohn Baldwin.cfi_def_cfa	%rax,8
1552*c0855eaaSJohn Baldwin	movq	-48(%rax),%r15
1553*c0855eaaSJohn Baldwin.cfi_restore	%r15
1554*c0855eaaSJohn Baldwin	movq	-40(%rax),%r14
1555*c0855eaaSJohn Baldwin.cfi_restore	%r14
1556*c0855eaaSJohn Baldwin	movq	-32(%rax),%r13
1557*c0855eaaSJohn Baldwin.cfi_restore	%r13
1558*c0855eaaSJohn Baldwin	movq	-24(%rax),%r12
1559*c0855eaaSJohn Baldwin.cfi_restore	%r12
1560*c0855eaaSJohn Baldwin	movq	-16(%rax),%rbx
1561*c0855eaaSJohn Baldwin.cfi_restore	%rbx
1562*c0855eaaSJohn Baldwin	movq	-8(%rax),%rbp
1563*c0855eaaSJohn Baldwin.cfi_restore	%rbp
1564*c0855eaaSJohn Baldwin	leaq	(%rax),%rsp
1565*c0855eaaSJohn Baldwin.cfi_def_cfa_register	%rsp
1566*c0855eaaSJohn Baldwin.Lctr_enc_epilogue:
1567*c0855eaaSJohn Baldwin	.byte	0xf3,0xc3
1568*c0855eaaSJohn Baldwin.cfi_endproc
1569*c0855eaaSJohn Baldwin.size	ossl_bsaes_ctr32_encrypt_blocks,.-ossl_bsaes_ctr32_encrypt_blocks
1570*c0855eaaSJohn Baldwin.globl	ossl_bsaes_xts_encrypt
1571*c0855eaaSJohn Baldwin.type	ossl_bsaes_xts_encrypt,@function
1572*c0855eaaSJohn Baldwin.align	16
1573*c0855eaaSJohn Baldwinossl_bsaes_xts_encrypt:
1574*c0855eaaSJohn Baldwin.cfi_startproc
1575*c0855eaaSJohn Baldwin	movq	%rsp,%rax
1576*c0855eaaSJohn Baldwin.Lxts_enc_prologue:
1577*c0855eaaSJohn Baldwin	pushq	%rbp
1578*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1579*c0855eaaSJohn Baldwin.cfi_offset	%rbp,-16
1580*c0855eaaSJohn Baldwin	pushq	%rbx
1581*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1582*c0855eaaSJohn Baldwin.cfi_offset	%rbx,-24
1583*c0855eaaSJohn Baldwin	pushq	%r12
1584*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1585*c0855eaaSJohn Baldwin.cfi_offset	%r12,-32
1586*c0855eaaSJohn Baldwin	pushq	%r13
1587*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1588*c0855eaaSJohn Baldwin.cfi_offset	%r13,-40
1589*c0855eaaSJohn Baldwin	pushq	%r14
1590*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1591*c0855eaaSJohn Baldwin.cfi_offset	%r14,-48
1592*c0855eaaSJohn Baldwin	pushq	%r15
1593*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
1594*c0855eaaSJohn Baldwin.cfi_offset	%r15,-56
1595*c0855eaaSJohn Baldwin	leaq	-72(%rsp),%rsp
1596*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	0x48
1597*c0855eaaSJohn Baldwin	movq	%rsp,%rbp
1598*c0855eaaSJohn Baldwin.cfi_def_cfa_register	%rbp
1599*c0855eaaSJohn Baldwin	movq	%rdi,%r12
1600*c0855eaaSJohn Baldwin	movq	%rsi,%r13
1601*c0855eaaSJohn Baldwin	movq	%rdx,%r14
1602*c0855eaaSJohn Baldwin	movq	%rcx,%r15
1603*c0855eaaSJohn Baldwin
1604*c0855eaaSJohn Baldwin	leaq	(%r9),%rdi
1605*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rsi
1606*c0855eaaSJohn Baldwin	leaq	(%r8),%rdx
1607*c0855eaaSJohn Baldwin	call	asm_AES_encrypt
1608*c0855eaaSJohn Baldwin
1609*c0855eaaSJohn Baldwin	movl	240(%r15),%eax
1610*c0855eaaSJohn Baldwin	movq	%r14,%rbx
1611*c0855eaaSJohn Baldwin
1612*c0855eaaSJohn Baldwin	movl	%eax,%edx
1613*c0855eaaSJohn Baldwin	shlq	$7,%rax
1614*c0855eaaSJohn Baldwin	subq	$96,%rax
1615*c0855eaaSJohn Baldwin	subq	%rax,%rsp
1616*c0855eaaSJohn Baldwin
1617*c0855eaaSJohn Baldwin	movq	%rsp,%rax
1618*c0855eaaSJohn Baldwin	movq	%r15,%rcx
1619*c0855eaaSJohn Baldwin	movl	%edx,%r10d
1620*c0855eaaSJohn Baldwin	call	_bsaes_key_convert
1621*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm7
1622*c0855eaaSJohn Baldwin	movdqa	%xmm7,(%rax)
1623*c0855eaaSJohn Baldwin
1624*c0855eaaSJohn Baldwin	andq	$-16,%r14
1625*c0855eaaSJohn Baldwin	subq	$0x80,%rsp
1626*c0855eaaSJohn Baldwin	movdqa	32(%rbp),%xmm6
1627*c0855eaaSJohn Baldwin
1628*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1629*c0855eaaSJohn Baldwin	movdqa	.Lxts_magic(%rip),%xmm12
1630*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1631*c0855eaaSJohn Baldwin
1632*c0855eaaSJohn Baldwin	subq	$0x80,%r14
1633*c0855eaaSJohn Baldwin	jc	.Lxts_enc_short
1634*c0855eaaSJohn Baldwin	jmp	.Lxts_enc_loop
1635*c0855eaaSJohn Baldwin
1636*c0855eaaSJohn Baldwin.align	16
1637*c0855eaaSJohn Baldwin.Lxts_enc_loop:
1638*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1639*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1640*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm15
1641*c0855eaaSJohn Baldwin	movdqa	%xmm6,0(%rsp)
1642*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1643*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1644*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1645*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1646*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1647*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1648*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm0
1649*c0855eaaSJohn Baldwin	movdqa	%xmm6,16(%rsp)
1650*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1651*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1652*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1653*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1654*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm7
1655*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1656*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1657*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm1
1658*c0855eaaSJohn Baldwin	movdqa	%xmm6,32(%rsp)
1659*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1660*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1661*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1662*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1663*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm8
1664*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm15
1665*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1666*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1667*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm2
1668*c0855eaaSJohn Baldwin	movdqa	%xmm6,48(%rsp)
1669*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1670*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1671*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1672*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1673*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm9
1674*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
1675*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1676*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1677*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm3
1678*c0855eaaSJohn Baldwin	movdqa	%xmm6,64(%rsp)
1679*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1680*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1681*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1682*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1683*c0855eaaSJohn Baldwin	movdqu	48(%r12),%xmm10
1684*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
1685*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1686*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1687*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm4
1688*c0855eaaSJohn Baldwin	movdqa	%xmm6,80(%rsp)
1689*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1690*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1691*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1692*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1693*c0855eaaSJohn Baldwin	movdqu	64(%r12),%xmm11
1694*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm2
1695*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1696*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1697*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm5
1698*c0855eaaSJohn Baldwin	movdqa	%xmm6,96(%rsp)
1699*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1700*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1701*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1702*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1703*c0855eaaSJohn Baldwin	movdqu	80(%r12),%xmm12
1704*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm3
1705*c0855eaaSJohn Baldwin	movdqu	96(%r12),%xmm13
1706*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm4
1707*c0855eaaSJohn Baldwin	movdqu	112(%r12),%xmm14
1708*c0855eaaSJohn Baldwin	leaq	128(%r12),%r12
1709*c0855eaaSJohn Baldwin	movdqa	%xmm6,112(%rsp)
1710*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm5
1711*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
1712*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm6
1713*c0855eaaSJohn Baldwin	movl	%edx,%r10d
1714*c0855eaaSJohn Baldwin
1715*c0855eaaSJohn Baldwin	call	_bsaes_encrypt8
1716*c0855eaaSJohn Baldwin
1717*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
1718*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
1719*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1720*c0855eaaSJohn Baldwin	pxor	32(%rsp),%xmm3
1721*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1722*c0855eaaSJohn Baldwin	pxor	48(%rsp),%xmm5
1723*c0855eaaSJohn Baldwin	movdqu	%xmm3,32(%r13)
1724*c0855eaaSJohn Baldwin	pxor	64(%rsp),%xmm2
1725*c0855eaaSJohn Baldwin	movdqu	%xmm5,48(%r13)
1726*c0855eaaSJohn Baldwin	pxor	80(%rsp),%xmm6
1727*c0855eaaSJohn Baldwin	movdqu	%xmm2,64(%r13)
1728*c0855eaaSJohn Baldwin	pxor	96(%rsp),%xmm1
1729*c0855eaaSJohn Baldwin	movdqu	%xmm6,80(%r13)
1730*c0855eaaSJohn Baldwin	pxor	112(%rsp),%xmm4
1731*c0855eaaSJohn Baldwin	movdqu	%xmm1,96(%r13)
1732*c0855eaaSJohn Baldwin	movdqu	%xmm4,112(%r13)
1733*c0855eaaSJohn Baldwin	leaq	128(%r13),%r13
1734*c0855eaaSJohn Baldwin
1735*c0855eaaSJohn Baldwin	movdqa	112(%rsp),%xmm6
1736*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1737*c0855eaaSJohn Baldwin	movdqa	.Lxts_magic(%rip),%xmm12
1738*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1739*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1740*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1741*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1742*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1743*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1744*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1745*c0855eaaSJohn Baldwin
1746*c0855eaaSJohn Baldwin	subq	$0x80,%r14
1747*c0855eaaSJohn Baldwin	jnc	.Lxts_enc_loop
1748*c0855eaaSJohn Baldwin
1749*c0855eaaSJohn Baldwin.Lxts_enc_short:
1750*c0855eaaSJohn Baldwin	addq	$0x80,%r14
1751*c0855eaaSJohn Baldwin	jz	.Lxts_enc_done
1752*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1753*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1754*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm15
1755*c0855eaaSJohn Baldwin	movdqa	%xmm6,0(%rsp)
1756*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1757*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1758*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1759*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1760*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1761*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1762*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm0
1763*c0855eaaSJohn Baldwin	movdqa	%xmm6,16(%rsp)
1764*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1765*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1766*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1767*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1768*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm7
1769*c0855eaaSJohn Baldwin	cmpq	$16,%r14
1770*c0855eaaSJohn Baldwin	je	.Lxts_enc_1
1771*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1772*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1773*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm1
1774*c0855eaaSJohn Baldwin	movdqa	%xmm6,32(%rsp)
1775*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1776*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1777*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1778*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1779*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm8
1780*c0855eaaSJohn Baldwin	cmpq	$32,%r14
1781*c0855eaaSJohn Baldwin	je	.Lxts_enc_2
1782*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm15
1783*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1784*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1785*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm2
1786*c0855eaaSJohn Baldwin	movdqa	%xmm6,48(%rsp)
1787*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1788*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1789*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1790*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1791*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm9
1792*c0855eaaSJohn Baldwin	cmpq	$48,%r14
1793*c0855eaaSJohn Baldwin	je	.Lxts_enc_3
1794*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
1795*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1796*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1797*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm3
1798*c0855eaaSJohn Baldwin	movdqa	%xmm6,64(%rsp)
1799*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1800*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1801*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1802*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1803*c0855eaaSJohn Baldwin	movdqu	48(%r12),%xmm10
1804*c0855eaaSJohn Baldwin	cmpq	$64,%r14
1805*c0855eaaSJohn Baldwin	je	.Lxts_enc_4
1806*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
1807*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1808*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1809*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm4
1810*c0855eaaSJohn Baldwin	movdqa	%xmm6,80(%rsp)
1811*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1812*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1813*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1814*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1815*c0855eaaSJohn Baldwin	movdqu	64(%r12),%xmm11
1816*c0855eaaSJohn Baldwin	cmpq	$80,%r14
1817*c0855eaaSJohn Baldwin	je	.Lxts_enc_5
1818*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm2
1819*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
1820*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
1821*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm5
1822*c0855eaaSJohn Baldwin	movdqa	%xmm6,96(%rsp)
1823*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
1824*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
1825*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
1826*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
1827*c0855eaaSJohn Baldwin	movdqu	80(%r12),%xmm12
1828*c0855eaaSJohn Baldwin	cmpq	$96,%r14
1829*c0855eaaSJohn Baldwin	je	.Lxts_enc_6
1830*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm3
1831*c0855eaaSJohn Baldwin	movdqu	96(%r12),%xmm13
1832*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm4
1833*c0855eaaSJohn Baldwin	movdqa	%xmm6,112(%rsp)
1834*c0855eaaSJohn Baldwin	leaq	112(%r12),%r12
1835*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm5
1836*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
1837*c0855eaaSJohn Baldwin	movl	%edx,%r10d
1838*c0855eaaSJohn Baldwin
1839*c0855eaaSJohn Baldwin	call	_bsaes_encrypt8
1840*c0855eaaSJohn Baldwin
1841*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
1842*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
1843*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1844*c0855eaaSJohn Baldwin	pxor	32(%rsp),%xmm3
1845*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1846*c0855eaaSJohn Baldwin	pxor	48(%rsp),%xmm5
1847*c0855eaaSJohn Baldwin	movdqu	%xmm3,32(%r13)
1848*c0855eaaSJohn Baldwin	pxor	64(%rsp),%xmm2
1849*c0855eaaSJohn Baldwin	movdqu	%xmm5,48(%r13)
1850*c0855eaaSJohn Baldwin	pxor	80(%rsp),%xmm6
1851*c0855eaaSJohn Baldwin	movdqu	%xmm2,64(%r13)
1852*c0855eaaSJohn Baldwin	pxor	96(%rsp),%xmm1
1853*c0855eaaSJohn Baldwin	movdqu	%xmm6,80(%r13)
1854*c0855eaaSJohn Baldwin	movdqu	%xmm1,96(%r13)
1855*c0855eaaSJohn Baldwin	leaq	112(%r13),%r13
1856*c0855eaaSJohn Baldwin
1857*c0855eaaSJohn Baldwin	movdqa	112(%rsp),%xmm6
1858*c0855eaaSJohn Baldwin	jmp	.Lxts_enc_done
1859*c0855eaaSJohn Baldwin.align	16
1860*c0855eaaSJohn Baldwin.Lxts_enc_6:
1861*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm3
1862*c0855eaaSJohn Baldwin	leaq	96(%r12),%r12
1863*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm4
1864*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
1865*c0855eaaSJohn Baldwin	movl	%edx,%r10d
1866*c0855eaaSJohn Baldwin
1867*c0855eaaSJohn Baldwin	call	_bsaes_encrypt8
1868*c0855eaaSJohn Baldwin
1869*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
1870*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
1871*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1872*c0855eaaSJohn Baldwin	pxor	32(%rsp),%xmm3
1873*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1874*c0855eaaSJohn Baldwin	pxor	48(%rsp),%xmm5
1875*c0855eaaSJohn Baldwin	movdqu	%xmm3,32(%r13)
1876*c0855eaaSJohn Baldwin	pxor	64(%rsp),%xmm2
1877*c0855eaaSJohn Baldwin	movdqu	%xmm5,48(%r13)
1878*c0855eaaSJohn Baldwin	pxor	80(%rsp),%xmm6
1879*c0855eaaSJohn Baldwin	movdqu	%xmm2,64(%r13)
1880*c0855eaaSJohn Baldwin	movdqu	%xmm6,80(%r13)
1881*c0855eaaSJohn Baldwin	leaq	96(%r13),%r13
1882*c0855eaaSJohn Baldwin
1883*c0855eaaSJohn Baldwin	movdqa	96(%rsp),%xmm6
1884*c0855eaaSJohn Baldwin	jmp	.Lxts_enc_done
1885*c0855eaaSJohn Baldwin.align	16
1886*c0855eaaSJohn Baldwin.Lxts_enc_5:
1887*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm2
1888*c0855eaaSJohn Baldwin	leaq	80(%r12),%r12
1889*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm3
1890*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
1891*c0855eaaSJohn Baldwin	movl	%edx,%r10d
1892*c0855eaaSJohn Baldwin
1893*c0855eaaSJohn Baldwin	call	_bsaes_encrypt8
1894*c0855eaaSJohn Baldwin
1895*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
1896*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
1897*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1898*c0855eaaSJohn Baldwin	pxor	32(%rsp),%xmm3
1899*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1900*c0855eaaSJohn Baldwin	pxor	48(%rsp),%xmm5
1901*c0855eaaSJohn Baldwin	movdqu	%xmm3,32(%r13)
1902*c0855eaaSJohn Baldwin	pxor	64(%rsp),%xmm2
1903*c0855eaaSJohn Baldwin	movdqu	%xmm5,48(%r13)
1904*c0855eaaSJohn Baldwin	movdqu	%xmm2,64(%r13)
1905*c0855eaaSJohn Baldwin	leaq	80(%r13),%r13
1906*c0855eaaSJohn Baldwin
1907*c0855eaaSJohn Baldwin	movdqa	80(%rsp),%xmm6
1908*c0855eaaSJohn Baldwin	jmp	.Lxts_enc_done
1909*c0855eaaSJohn Baldwin.align	16
1910*c0855eaaSJohn Baldwin.Lxts_enc_4:
1911*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
1912*c0855eaaSJohn Baldwin	leaq	64(%r12),%r12
1913*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm2
1914*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
1915*c0855eaaSJohn Baldwin	movl	%edx,%r10d
1916*c0855eaaSJohn Baldwin
1917*c0855eaaSJohn Baldwin	call	_bsaes_encrypt8
1918*c0855eaaSJohn Baldwin
1919*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
1920*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
1921*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1922*c0855eaaSJohn Baldwin	pxor	32(%rsp),%xmm3
1923*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1924*c0855eaaSJohn Baldwin	pxor	48(%rsp),%xmm5
1925*c0855eaaSJohn Baldwin	movdqu	%xmm3,32(%r13)
1926*c0855eaaSJohn Baldwin	movdqu	%xmm5,48(%r13)
1927*c0855eaaSJohn Baldwin	leaq	64(%r13),%r13
1928*c0855eaaSJohn Baldwin
1929*c0855eaaSJohn Baldwin	movdqa	64(%rsp),%xmm6
1930*c0855eaaSJohn Baldwin	jmp	.Lxts_enc_done
1931*c0855eaaSJohn Baldwin.align	16
1932*c0855eaaSJohn Baldwin.Lxts_enc_3:
1933*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
1934*c0855eaaSJohn Baldwin	leaq	48(%r12),%r12
1935*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
1936*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
1937*c0855eaaSJohn Baldwin	movl	%edx,%r10d
1938*c0855eaaSJohn Baldwin
1939*c0855eaaSJohn Baldwin	call	_bsaes_encrypt8
1940*c0855eaaSJohn Baldwin
1941*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
1942*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
1943*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1944*c0855eaaSJohn Baldwin	pxor	32(%rsp),%xmm3
1945*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1946*c0855eaaSJohn Baldwin	movdqu	%xmm3,32(%r13)
1947*c0855eaaSJohn Baldwin	leaq	48(%r13),%r13
1948*c0855eaaSJohn Baldwin
1949*c0855eaaSJohn Baldwin	movdqa	48(%rsp),%xmm6
1950*c0855eaaSJohn Baldwin	jmp	.Lxts_enc_done
1951*c0855eaaSJohn Baldwin.align	16
1952*c0855eaaSJohn Baldwin.Lxts_enc_2:
1953*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm15
1954*c0855eaaSJohn Baldwin	leaq	32(%r12),%r12
1955*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
1956*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
1957*c0855eaaSJohn Baldwin	movl	%edx,%r10d
1958*c0855eaaSJohn Baldwin
1959*c0855eaaSJohn Baldwin	call	_bsaes_encrypt8
1960*c0855eaaSJohn Baldwin
1961*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
1962*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
1963*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1964*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
1965*c0855eaaSJohn Baldwin	leaq	32(%r13),%r13
1966*c0855eaaSJohn Baldwin
1967*c0855eaaSJohn Baldwin	movdqa	32(%rsp),%xmm6
1968*c0855eaaSJohn Baldwin	jmp	.Lxts_enc_done
1969*c0855eaaSJohn Baldwin.align	16
1970*c0855eaaSJohn Baldwin.Lxts_enc_1:
1971*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm7
1972*c0855eaaSJohn Baldwin	leaq	16(%r12),%r12
1973*c0855eaaSJohn Baldwin	movdqa	%xmm7,32(%rbp)
1974*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rdi
1975*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rsi
1976*c0855eaaSJohn Baldwin	leaq	(%r15),%rdx
1977*c0855eaaSJohn Baldwin	call	asm_AES_encrypt
1978*c0855eaaSJohn Baldwin	pxor	32(%rbp),%xmm15
1979*c0855eaaSJohn Baldwin
1980*c0855eaaSJohn Baldwin
1981*c0855eaaSJohn Baldwin
1982*c0855eaaSJohn Baldwin
1983*c0855eaaSJohn Baldwin
1984*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
1985*c0855eaaSJohn Baldwin	leaq	16(%r13),%r13
1986*c0855eaaSJohn Baldwin
1987*c0855eaaSJohn Baldwin	movdqa	16(%rsp),%xmm6
1988*c0855eaaSJohn Baldwin
1989*c0855eaaSJohn Baldwin.Lxts_enc_done:
1990*c0855eaaSJohn Baldwin	andl	$15,%ebx
1991*c0855eaaSJohn Baldwin	jz	.Lxts_enc_ret
1992*c0855eaaSJohn Baldwin	movq	%r13,%rdx
1993*c0855eaaSJohn Baldwin
1994*c0855eaaSJohn Baldwin.Lxts_enc_steal:
1995*c0855eaaSJohn Baldwin	movzbl	(%r12),%eax
1996*c0855eaaSJohn Baldwin	movzbl	-16(%rdx),%ecx
1997*c0855eaaSJohn Baldwin	leaq	1(%r12),%r12
1998*c0855eaaSJohn Baldwin	movb	%al,-16(%rdx)
1999*c0855eaaSJohn Baldwin	movb	%cl,0(%rdx)
2000*c0855eaaSJohn Baldwin	leaq	1(%rdx),%rdx
2001*c0855eaaSJohn Baldwin	subl	$1,%ebx
2002*c0855eaaSJohn Baldwin	jnz	.Lxts_enc_steal
2003*c0855eaaSJohn Baldwin
2004*c0855eaaSJohn Baldwin	movdqu	-16(%r13),%xmm15
2005*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rdi
2006*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm15
2007*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rsi
2008*c0855eaaSJohn Baldwin	movdqa	%xmm15,32(%rbp)
2009*c0855eaaSJohn Baldwin	leaq	(%r15),%rdx
2010*c0855eaaSJohn Baldwin	call	asm_AES_encrypt
2011*c0855eaaSJohn Baldwin	pxor	32(%rbp),%xmm6
2012*c0855eaaSJohn Baldwin	movdqu	%xmm6,-16(%r13)
2013*c0855eaaSJohn Baldwin
2014*c0855eaaSJohn Baldwin.Lxts_enc_ret:
2015*c0855eaaSJohn Baldwin	leaq	(%rsp),%rax
2016*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm0
2017*c0855eaaSJohn Baldwin.Lxts_enc_bzero:
2018*c0855eaaSJohn Baldwin	movdqa	%xmm0,0(%rax)
2019*c0855eaaSJohn Baldwin	movdqa	%xmm0,16(%rax)
2020*c0855eaaSJohn Baldwin	leaq	32(%rax),%rax
2021*c0855eaaSJohn Baldwin	cmpq	%rax,%rbp
2022*c0855eaaSJohn Baldwin	ja	.Lxts_enc_bzero
2023*c0855eaaSJohn Baldwin
2024*c0855eaaSJohn Baldwin	leaq	120(%rbp),%rax
2025*c0855eaaSJohn Baldwin.cfi_def_cfa	%rax,8
2026*c0855eaaSJohn Baldwin	movq	-48(%rax),%r15
2027*c0855eaaSJohn Baldwin.cfi_restore	%r15
2028*c0855eaaSJohn Baldwin	movq	-40(%rax),%r14
2029*c0855eaaSJohn Baldwin.cfi_restore	%r14
2030*c0855eaaSJohn Baldwin	movq	-32(%rax),%r13
2031*c0855eaaSJohn Baldwin.cfi_restore	%r13
2032*c0855eaaSJohn Baldwin	movq	-24(%rax),%r12
2033*c0855eaaSJohn Baldwin.cfi_restore	%r12
2034*c0855eaaSJohn Baldwin	movq	-16(%rax),%rbx
2035*c0855eaaSJohn Baldwin.cfi_restore	%rbx
2036*c0855eaaSJohn Baldwin	movq	-8(%rax),%rbp
2037*c0855eaaSJohn Baldwin.cfi_restore	%rbp
2038*c0855eaaSJohn Baldwin	leaq	(%rax),%rsp
2039*c0855eaaSJohn Baldwin.cfi_def_cfa_register	%rsp
2040*c0855eaaSJohn Baldwin.Lxts_enc_epilogue:
2041*c0855eaaSJohn Baldwin	.byte	0xf3,0xc3
2042*c0855eaaSJohn Baldwin.cfi_endproc
2043*c0855eaaSJohn Baldwin.size	ossl_bsaes_xts_encrypt,.-ossl_bsaes_xts_encrypt
2044*c0855eaaSJohn Baldwin
2045*c0855eaaSJohn Baldwin.globl	ossl_bsaes_xts_decrypt
2046*c0855eaaSJohn Baldwin.type	ossl_bsaes_xts_decrypt,@function
2047*c0855eaaSJohn Baldwin.align	16
2048*c0855eaaSJohn Baldwinossl_bsaes_xts_decrypt:
2049*c0855eaaSJohn Baldwin.cfi_startproc
2050*c0855eaaSJohn Baldwin	movq	%rsp,%rax
2051*c0855eaaSJohn Baldwin.Lxts_dec_prologue:
2052*c0855eaaSJohn Baldwin	pushq	%rbp
2053*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
2054*c0855eaaSJohn Baldwin.cfi_offset	%rbp,-16
2055*c0855eaaSJohn Baldwin	pushq	%rbx
2056*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
2057*c0855eaaSJohn Baldwin.cfi_offset	%rbx,-24
2058*c0855eaaSJohn Baldwin	pushq	%r12
2059*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
2060*c0855eaaSJohn Baldwin.cfi_offset	%r12,-32
2061*c0855eaaSJohn Baldwin	pushq	%r13
2062*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
2063*c0855eaaSJohn Baldwin.cfi_offset	%r13,-40
2064*c0855eaaSJohn Baldwin	pushq	%r14
2065*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
2066*c0855eaaSJohn Baldwin.cfi_offset	%r14,-48
2067*c0855eaaSJohn Baldwin	pushq	%r15
2068*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	8
2069*c0855eaaSJohn Baldwin.cfi_offset	%r15,-56
2070*c0855eaaSJohn Baldwin	leaq	-72(%rsp),%rsp
2071*c0855eaaSJohn Baldwin.cfi_adjust_cfa_offset	0x48
2072*c0855eaaSJohn Baldwin	movq	%rsp,%rbp
2073*c0855eaaSJohn Baldwin	movq	%rdi,%r12
2074*c0855eaaSJohn Baldwin	movq	%rsi,%r13
2075*c0855eaaSJohn Baldwin	movq	%rdx,%r14
2076*c0855eaaSJohn Baldwin	movq	%rcx,%r15
2077*c0855eaaSJohn Baldwin
2078*c0855eaaSJohn Baldwin	leaq	(%r9),%rdi
2079*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rsi
2080*c0855eaaSJohn Baldwin	leaq	(%r8),%rdx
2081*c0855eaaSJohn Baldwin	call	asm_AES_encrypt
2082*c0855eaaSJohn Baldwin
2083*c0855eaaSJohn Baldwin	movl	240(%r15),%eax
2084*c0855eaaSJohn Baldwin	movq	%r14,%rbx
2085*c0855eaaSJohn Baldwin
2086*c0855eaaSJohn Baldwin	movl	%eax,%edx
2087*c0855eaaSJohn Baldwin	shlq	$7,%rax
2088*c0855eaaSJohn Baldwin	subq	$96,%rax
2089*c0855eaaSJohn Baldwin	subq	%rax,%rsp
2090*c0855eaaSJohn Baldwin
2091*c0855eaaSJohn Baldwin	movq	%rsp,%rax
2092*c0855eaaSJohn Baldwin	movq	%r15,%rcx
2093*c0855eaaSJohn Baldwin	movl	%edx,%r10d
2094*c0855eaaSJohn Baldwin	call	_bsaes_key_convert
2095*c0855eaaSJohn Baldwin	pxor	(%rsp),%xmm7
2096*c0855eaaSJohn Baldwin	movdqa	%xmm6,(%rax)
2097*c0855eaaSJohn Baldwin	movdqa	%xmm7,(%rsp)
2098*c0855eaaSJohn Baldwin
2099*c0855eaaSJohn Baldwin	xorl	%eax,%eax
2100*c0855eaaSJohn Baldwin	andq	$-16,%r14
2101*c0855eaaSJohn Baldwin	testl	$15,%ebx
2102*c0855eaaSJohn Baldwin	setnz	%al
2103*c0855eaaSJohn Baldwin	shlq	$4,%rax
2104*c0855eaaSJohn Baldwin	subq	%rax,%r14
2105*c0855eaaSJohn Baldwin
2106*c0855eaaSJohn Baldwin	subq	$0x80,%rsp
2107*c0855eaaSJohn Baldwin	movdqa	32(%rbp),%xmm6
2108*c0855eaaSJohn Baldwin
2109*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2110*c0855eaaSJohn Baldwin	movdqa	.Lxts_magic(%rip),%xmm12
2111*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2112*c0855eaaSJohn Baldwin
2113*c0855eaaSJohn Baldwin	subq	$0x80,%r14
2114*c0855eaaSJohn Baldwin	jc	.Lxts_dec_short
2115*c0855eaaSJohn Baldwin	jmp	.Lxts_dec_loop
2116*c0855eaaSJohn Baldwin
2117*c0855eaaSJohn Baldwin.align	16
2118*c0855eaaSJohn Baldwin.Lxts_dec_loop:
2119*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2120*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2121*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm15
2122*c0855eaaSJohn Baldwin	movdqa	%xmm6,0(%rsp)
2123*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2124*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2125*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2126*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2127*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2128*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2129*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm0
2130*c0855eaaSJohn Baldwin	movdqa	%xmm6,16(%rsp)
2131*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2132*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2133*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2134*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2135*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm7
2136*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2137*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2138*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm1
2139*c0855eaaSJohn Baldwin	movdqa	%xmm6,32(%rsp)
2140*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2141*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2142*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2143*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2144*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm8
2145*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm15
2146*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2147*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2148*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm2
2149*c0855eaaSJohn Baldwin	movdqa	%xmm6,48(%rsp)
2150*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2151*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2152*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2153*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2154*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm9
2155*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
2156*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2157*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2158*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm3
2159*c0855eaaSJohn Baldwin	movdqa	%xmm6,64(%rsp)
2160*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2161*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2162*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2163*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2164*c0855eaaSJohn Baldwin	movdqu	48(%r12),%xmm10
2165*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
2166*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2167*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2168*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm4
2169*c0855eaaSJohn Baldwin	movdqa	%xmm6,80(%rsp)
2170*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2171*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2172*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2173*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2174*c0855eaaSJohn Baldwin	movdqu	64(%r12),%xmm11
2175*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm2
2176*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2177*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2178*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm5
2179*c0855eaaSJohn Baldwin	movdqa	%xmm6,96(%rsp)
2180*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2181*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2182*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2183*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2184*c0855eaaSJohn Baldwin	movdqu	80(%r12),%xmm12
2185*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm3
2186*c0855eaaSJohn Baldwin	movdqu	96(%r12),%xmm13
2187*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm4
2188*c0855eaaSJohn Baldwin	movdqu	112(%r12),%xmm14
2189*c0855eaaSJohn Baldwin	leaq	128(%r12),%r12
2190*c0855eaaSJohn Baldwin	movdqa	%xmm6,112(%rsp)
2191*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm5
2192*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
2193*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm6
2194*c0855eaaSJohn Baldwin	movl	%edx,%r10d
2195*c0855eaaSJohn Baldwin
2196*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
2197*c0855eaaSJohn Baldwin
2198*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
2199*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
2200*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
2201*c0855eaaSJohn Baldwin	pxor	32(%rsp),%xmm5
2202*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
2203*c0855eaaSJohn Baldwin	pxor	48(%rsp),%xmm3
2204*c0855eaaSJohn Baldwin	movdqu	%xmm5,32(%r13)
2205*c0855eaaSJohn Baldwin	pxor	64(%rsp),%xmm1
2206*c0855eaaSJohn Baldwin	movdqu	%xmm3,48(%r13)
2207*c0855eaaSJohn Baldwin	pxor	80(%rsp),%xmm6
2208*c0855eaaSJohn Baldwin	movdqu	%xmm1,64(%r13)
2209*c0855eaaSJohn Baldwin	pxor	96(%rsp),%xmm2
2210*c0855eaaSJohn Baldwin	movdqu	%xmm6,80(%r13)
2211*c0855eaaSJohn Baldwin	pxor	112(%rsp),%xmm4
2212*c0855eaaSJohn Baldwin	movdqu	%xmm2,96(%r13)
2213*c0855eaaSJohn Baldwin	movdqu	%xmm4,112(%r13)
2214*c0855eaaSJohn Baldwin	leaq	128(%r13),%r13
2215*c0855eaaSJohn Baldwin
2216*c0855eaaSJohn Baldwin	movdqa	112(%rsp),%xmm6
2217*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2218*c0855eaaSJohn Baldwin	movdqa	.Lxts_magic(%rip),%xmm12
2219*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2220*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2221*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2222*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2223*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2224*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2225*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2226*c0855eaaSJohn Baldwin
2227*c0855eaaSJohn Baldwin	subq	$0x80,%r14
2228*c0855eaaSJohn Baldwin	jnc	.Lxts_dec_loop
2229*c0855eaaSJohn Baldwin
2230*c0855eaaSJohn Baldwin.Lxts_dec_short:
2231*c0855eaaSJohn Baldwin	addq	$0x80,%r14
2232*c0855eaaSJohn Baldwin	jz	.Lxts_dec_done
2233*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2234*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2235*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm15
2236*c0855eaaSJohn Baldwin	movdqa	%xmm6,0(%rsp)
2237*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2238*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2239*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2240*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2241*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2242*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2243*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm0
2244*c0855eaaSJohn Baldwin	movdqa	%xmm6,16(%rsp)
2245*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2246*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2247*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2248*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2249*c0855eaaSJohn Baldwin	movdqu	0(%r12),%xmm7
2250*c0855eaaSJohn Baldwin	cmpq	$16,%r14
2251*c0855eaaSJohn Baldwin	je	.Lxts_dec_1
2252*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2253*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2254*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm1
2255*c0855eaaSJohn Baldwin	movdqa	%xmm6,32(%rsp)
2256*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2257*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2258*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2259*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2260*c0855eaaSJohn Baldwin	movdqu	16(%r12),%xmm8
2261*c0855eaaSJohn Baldwin	cmpq	$32,%r14
2262*c0855eaaSJohn Baldwin	je	.Lxts_dec_2
2263*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm15
2264*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2265*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2266*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm2
2267*c0855eaaSJohn Baldwin	movdqa	%xmm6,48(%rsp)
2268*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2269*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2270*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2271*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2272*c0855eaaSJohn Baldwin	movdqu	32(%r12),%xmm9
2273*c0855eaaSJohn Baldwin	cmpq	$48,%r14
2274*c0855eaaSJohn Baldwin	je	.Lxts_dec_3
2275*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
2276*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2277*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2278*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm3
2279*c0855eaaSJohn Baldwin	movdqa	%xmm6,64(%rsp)
2280*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2281*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2282*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2283*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2284*c0855eaaSJohn Baldwin	movdqu	48(%r12),%xmm10
2285*c0855eaaSJohn Baldwin	cmpq	$64,%r14
2286*c0855eaaSJohn Baldwin	je	.Lxts_dec_4
2287*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
2288*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2289*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2290*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm4
2291*c0855eaaSJohn Baldwin	movdqa	%xmm6,80(%rsp)
2292*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2293*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2294*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2295*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2296*c0855eaaSJohn Baldwin	movdqu	64(%r12),%xmm11
2297*c0855eaaSJohn Baldwin	cmpq	$80,%r14
2298*c0855eaaSJohn Baldwin	je	.Lxts_dec_5
2299*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm2
2300*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2301*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2302*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm5
2303*c0855eaaSJohn Baldwin	movdqa	%xmm6,96(%rsp)
2304*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2305*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2306*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2307*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2308*c0855eaaSJohn Baldwin	movdqu	80(%r12),%xmm12
2309*c0855eaaSJohn Baldwin	cmpq	$96,%r14
2310*c0855eaaSJohn Baldwin	je	.Lxts_dec_6
2311*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm3
2312*c0855eaaSJohn Baldwin	movdqu	96(%r12),%xmm13
2313*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm4
2314*c0855eaaSJohn Baldwin	movdqa	%xmm6,112(%rsp)
2315*c0855eaaSJohn Baldwin	leaq	112(%r12),%r12
2316*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm5
2317*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
2318*c0855eaaSJohn Baldwin	movl	%edx,%r10d
2319*c0855eaaSJohn Baldwin
2320*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
2321*c0855eaaSJohn Baldwin
2322*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
2323*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
2324*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
2325*c0855eaaSJohn Baldwin	pxor	32(%rsp),%xmm5
2326*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
2327*c0855eaaSJohn Baldwin	pxor	48(%rsp),%xmm3
2328*c0855eaaSJohn Baldwin	movdqu	%xmm5,32(%r13)
2329*c0855eaaSJohn Baldwin	pxor	64(%rsp),%xmm1
2330*c0855eaaSJohn Baldwin	movdqu	%xmm3,48(%r13)
2331*c0855eaaSJohn Baldwin	pxor	80(%rsp),%xmm6
2332*c0855eaaSJohn Baldwin	movdqu	%xmm1,64(%r13)
2333*c0855eaaSJohn Baldwin	pxor	96(%rsp),%xmm2
2334*c0855eaaSJohn Baldwin	movdqu	%xmm6,80(%r13)
2335*c0855eaaSJohn Baldwin	movdqu	%xmm2,96(%r13)
2336*c0855eaaSJohn Baldwin	leaq	112(%r13),%r13
2337*c0855eaaSJohn Baldwin
2338*c0855eaaSJohn Baldwin	movdqa	112(%rsp),%xmm6
2339*c0855eaaSJohn Baldwin	jmp	.Lxts_dec_done
2340*c0855eaaSJohn Baldwin.align	16
2341*c0855eaaSJohn Baldwin.Lxts_dec_6:
2342*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm3
2343*c0855eaaSJohn Baldwin	leaq	96(%r12),%r12
2344*c0855eaaSJohn Baldwin	pxor	%xmm12,%xmm4
2345*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
2346*c0855eaaSJohn Baldwin	movl	%edx,%r10d
2347*c0855eaaSJohn Baldwin
2348*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
2349*c0855eaaSJohn Baldwin
2350*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
2351*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
2352*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
2353*c0855eaaSJohn Baldwin	pxor	32(%rsp),%xmm5
2354*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
2355*c0855eaaSJohn Baldwin	pxor	48(%rsp),%xmm3
2356*c0855eaaSJohn Baldwin	movdqu	%xmm5,32(%r13)
2357*c0855eaaSJohn Baldwin	pxor	64(%rsp),%xmm1
2358*c0855eaaSJohn Baldwin	movdqu	%xmm3,48(%r13)
2359*c0855eaaSJohn Baldwin	pxor	80(%rsp),%xmm6
2360*c0855eaaSJohn Baldwin	movdqu	%xmm1,64(%r13)
2361*c0855eaaSJohn Baldwin	movdqu	%xmm6,80(%r13)
2362*c0855eaaSJohn Baldwin	leaq	96(%r13),%r13
2363*c0855eaaSJohn Baldwin
2364*c0855eaaSJohn Baldwin	movdqa	96(%rsp),%xmm6
2365*c0855eaaSJohn Baldwin	jmp	.Lxts_dec_done
2366*c0855eaaSJohn Baldwin.align	16
2367*c0855eaaSJohn Baldwin.Lxts_dec_5:
2368*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm2
2369*c0855eaaSJohn Baldwin	leaq	80(%r12),%r12
2370*c0855eaaSJohn Baldwin	pxor	%xmm11,%xmm3
2371*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
2372*c0855eaaSJohn Baldwin	movl	%edx,%r10d
2373*c0855eaaSJohn Baldwin
2374*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
2375*c0855eaaSJohn Baldwin
2376*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
2377*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
2378*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
2379*c0855eaaSJohn Baldwin	pxor	32(%rsp),%xmm5
2380*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
2381*c0855eaaSJohn Baldwin	pxor	48(%rsp),%xmm3
2382*c0855eaaSJohn Baldwin	movdqu	%xmm5,32(%r13)
2383*c0855eaaSJohn Baldwin	pxor	64(%rsp),%xmm1
2384*c0855eaaSJohn Baldwin	movdqu	%xmm3,48(%r13)
2385*c0855eaaSJohn Baldwin	movdqu	%xmm1,64(%r13)
2386*c0855eaaSJohn Baldwin	leaq	80(%r13),%r13
2387*c0855eaaSJohn Baldwin
2388*c0855eaaSJohn Baldwin	movdqa	80(%rsp),%xmm6
2389*c0855eaaSJohn Baldwin	jmp	.Lxts_dec_done
2390*c0855eaaSJohn Baldwin.align	16
2391*c0855eaaSJohn Baldwin.Lxts_dec_4:
2392*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
2393*c0855eaaSJohn Baldwin	leaq	64(%r12),%r12
2394*c0855eaaSJohn Baldwin	pxor	%xmm10,%xmm2
2395*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
2396*c0855eaaSJohn Baldwin	movl	%edx,%r10d
2397*c0855eaaSJohn Baldwin
2398*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
2399*c0855eaaSJohn Baldwin
2400*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
2401*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
2402*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
2403*c0855eaaSJohn Baldwin	pxor	32(%rsp),%xmm5
2404*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
2405*c0855eaaSJohn Baldwin	pxor	48(%rsp),%xmm3
2406*c0855eaaSJohn Baldwin	movdqu	%xmm5,32(%r13)
2407*c0855eaaSJohn Baldwin	movdqu	%xmm3,48(%r13)
2408*c0855eaaSJohn Baldwin	leaq	64(%r13),%r13
2409*c0855eaaSJohn Baldwin
2410*c0855eaaSJohn Baldwin	movdqa	64(%rsp),%xmm6
2411*c0855eaaSJohn Baldwin	jmp	.Lxts_dec_done
2412*c0855eaaSJohn Baldwin.align	16
2413*c0855eaaSJohn Baldwin.Lxts_dec_3:
2414*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
2415*c0855eaaSJohn Baldwin	leaq	48(%r12),%r12
2416*c0855eaaSJohn Baldwin	pxor	%xmm9,%xmm1
2417*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
2418*c0855eaaSJohn Baldwin	movl	%edx,%r10d
2419*c0855eaaSJohn Baldwin
2420*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
2421*c0855eaaSJohn Baldwin
2422*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
2423*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
2424*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
2425*c0855eaaSJohn Baldwin	pxor	32(%rsp),%xmm5
2426*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
2427*c0855eaaSJohn Baldwin	movdqu	%xmm5,32(%r13)
2428*c0855eaaSJohn Baldwin	leaq	48(%r13),%r13
2429*c0855eaaSJohn Baldwin
2430*c0855eaaSJohn Baldwin	movdqa	48(%rsp),%xmm6
2431*c0855eaaSJohn Baldwin	jmp	.Lxts_dec_done
2432*c0855eaaSJohn Baldwin.align	16
2433*c0855eaaSJohn Baldwin.Lxts_dec_2:
2434*c0855eaaSJohn Baldwin	pxor	%xmm7,%xmm15
2435*c0855eaaSJohn Baldwin	leaq	32(%r12),%r12
2436*c0855eaaSJohn Baldwin	pxor	%xmm8,%xmm0
2437*c0855eaaSJohn Baldwin	leaq	128(%rsp),%rax
2438*c0855eaaSJohn Baldwin	movl	%edx,%r10d
2439*c0855eaaSJohn Baldwin
2440*c0855eaaSJohn Baldwin	call	_bsaes_decrypt8
2441*c0855eaaSJohn Baldwin
2442*c0855eaaSJohn Baldwin	pxor	0(%rsp),%xmm15
2443*c0855eaaSJohn Baldwin	pxor	16(%rsp),%xmm0
2444*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
2445*c0855eaaSJohn Baldwin	movdqu	%xmm0,16(%r13)
2446*c0855eaaSJohn Baldwin	leaq	32(%r13),%r13
2447*c0855eaaSJohn Baldwin
2448*c0855eaaSJohn Baldwin	movdqa	32(%rsp),%xmm6
2449*c0855eaaSJohn Baldwin	jmp	.Lxts_dec_done
2450*c0855eaaSJohn Baldwin.align	16
2451*c0855eaaSJohn Baldwin.Lxts_dec_1:
2452*c0855eaaSJohn Baldwin	pxor	%xmm15,%xmm7
2453*c0855eaaSJohn Baldwin	leaq	16(%r12),%r12
2454*c0855eaaSJohn Baldwin	movdqa	%xmm7,32(%rbp)
2455*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rdi
2456*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rsi
2457*c0855eaaSJohn Baldwin	leaq	(%r15),%rdx
2458*c0855eaaSJohn Baldwin	call	asm_AES_decrypt
2459*c0855eaaSJohn Baldwin	pxor	32(%rbp),%xmm15
2460*c0855eaaSJohn Baldwin
2461*c0855eaaSJohn Baldwin
2462*c0855eaaSJohn Baldwin
2463*c0855eaaSJohn Baldwin
2464*c0855eaaSJohn Baldwin
2465*c0855eaaSJohn Baldwin	movdqu	%xmm15,0(%r13)
2466*c0855eaaSJohn Baldwin	leaq	16(%r13),%r13
2467*c0855eaaSJohn Baldwin
2468*c0855eaaSJohn Baldwin	movdqa	16(%rsp),%xmm6
2469*c0855eaaSJohn Baldwin
2470*c0855eaaSJohn Baldwin.Lxts_dec_done:
2471*c0855eaaSJohn Baldwin	andl	$15,%ebx
2472*c0855eaaSJohn Baldwin	jz	.Lxts_dec_ret
2473*c0855eaaSJohn Baldwin
2474*c0855eaaSJohn Baldwin	pxor	%xmm14,%xmm14
2475*c0855eaaSJohn Baldwin	movdqa	.Lxts_magic(%rip),%xmm12
2476*c0855eaaSJohn Baldwin	pcmpgtd	%xmm6,%xmm14
2477*c0855eaaSJohn Baldwin	pshufd	$0x13,%xmm14,%xmm13
2478*c0855eaaSJohn Baldwin	movdqa	%xmm6,%xmm5
2479*c0855eaaSJohn Baldwin	paddq	%xmm6,%xmm6
2480*c0855eaaSJohn Baldwin	pand	%xmm12,%xmm13
2481*c0855eaaSJohn Baldwin	movdqu	(%r12),%xmm15
2482*c0855eaaSJohn Baldwin	pxor	%xmm13,%xmm6
2483*c0855eaaSJohn Baldwin
2484*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rdi
2485*c0855eaaSJohn Baldwin	pxor	%xmm6,%xmm15
2486*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rsi
2487*c0855eaaSJohn Baldwin	movdqa	%xmm15,32(%rbp)
2488*c0855eaaSJohn Baldwin	leaq	(%r15),%rdx
2489*c0855eaaSJohn Baldwin	call	asm_AES_decrypt
2490*c0855eaaSJohn Baldwin	pxor	32(%rbp),%xmm6
2491*c0855eaaSJohn Baldwin	movq	%r13,%rdx
2492*c0855eaaSJohn Baldwin	movdqu	%xmm6,(%r13)
2493*c0855eaaSJohn Baldwin
2494*c0855eaaSJohn Baldwin.Lxts_dec_steal:
2495*c0855eaaSJohn Baldwin	movzbl	16(%r12),%eax
2496*c0855eaaSJohn Baldwin	movzbl	(%rdx),%ecx
2497*c0855eaaSJohn Baldwin	leaq	1(%r12),%r12
2498*c0855eaaSJohn Baldwin	movb	%al,(%rdx)
2499*c0855eaaSJohn Baldwin	movb	%cl,16(%rdx)
2500*c0855eaaSJohn Baldwin	leaq	1(%rdx),%rdx
2501*c0855eaaSJohn Baldwin	subl	$1,%ebx
2502*c0855eaaSJohn Baldwin	jnz	.Lxts_dec_steal
2503*c0855eaaSJohn Baldwin
2504*c0855eaaSJohn Baldwin	movdqu	(%r13),%xmm15
2505*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rdi
2506*c0855eaaSJohn Baldwin	pxor	%xmm5,%xmm15
2507*c0855eaaSJohn Baldwin	leaq	32(%rbp),%rsi
2508*c0855eaaSJohn Baldwin	movdqa	%xmm15,32(%rbp)
2509*c0855eaaSJohn Baldwin	leaq	(%r15),%rdx
2510*c0855eaaSJohn Baldwin	call	asm_AES_decrypt
2511*c0855eaaSJohn Baldwin	pxor	32(%rbp),%xmm5
2512*c0855eaaSJohn Baldwin	movdqu	%xmm5,(%r13)
2513*c0855eaaSJohn Baldwin
2514*c0855eaaSJohn Baldwin.Lxts_dec_ret:
2515*c0855eaaSJohn Baldwin	leaq	(%rsp),%rax
2516*c0855eaaSJohn Baldwin	pxor	%xmm0,%xmm0
2517*c0855eaaSJohn Baldwin.Lxts_dec_bzero:
2518*c0855eaaSJohn Baldwin	movdqa	%xmm0,0(%rax)
2519*c0855eaaSJohn Baldwin	movdqa	%xmm0,16(%rax)
2520*c0855eaaSJohn Baldwin	leaq	32(%rax),%rax
2521*c0855eaaSJohn Baldwin	cmpq	%rax,%rbp
2522*c0855eaaSJohn Baldwin	ja	.Lxts_dec_bzero
2523*c0855eaaSJohn Baldwin
2524*c0855eaaSJohn Baldwin	leaq	120(%rbp),%rax
2525*c0855eaaSJohn Baldwin.cfi_def_cfa	%rax,8
2526*c0855eaaSJohn Baldwin	movq	-48(%rax),%r15
2527*c0855eaaSJohn Baldwin.cfi_restore	%r15
2528*c0855eaaSJohn Baldwin	movq	-40(%rax),%r14
2529*c0855eaaSJohn Baldwin.cfi_restore	%r14
2530*c0855eaaSJohn Baldwin	movq	-32(%rax),%r13
2531*c0855eaaSJohn Baldwin.cfi_restore	%r13
2532*c0855eaaSJohn Baldwin	movq	-24(%rax),%r12
2533*c0855eaaSJohn Baldwin.cfi_restore	%r12
2534*c0855eaaSJohn Baldwin	movq	-16(%rax),%rbx
2535*c0855eaaSJohn Baldwin.cfi_restore	%rbx
2536*c0855eaaSJohn Baldwin	movq	-8(%rax),%rbp
2537*c0855eaaSJohn Baldwin.cfi_restore	%rbp
2538*c0855eaaSJohn Baldwin	leaq	(%rax),%rsp
2539*c0855eaaSJohn Baldwin.cfi_def_cfa_register	%rsp
2540*c0855eaaSJohn Baldwin.Lxts_dec_epilogue:
2541*c0855eaaSJohn Baldwin	.byte	0xf3,0xc3
2542*c0855eaaSJohn Baldwin.cfi_endproc
2543*c0855eaaSJohn Baldwin.size	ossl_bsaes_xts_decrypt,.-ossl_bsaes_xts_decrypt
2544*c0855eaaSJohn Baldwin.type	_bsaes_const,@object
2545*c0855eaaSJohn Baldwin.align	64
2546*c0855eaaSJohn Baldwin_bsaes_const:
2547*c0855eaaSJohn Baldwin.LM0ISR:
2548*c0855eaaSJohn Baldwin.quad	0x0a0e0206070b0f03, 0x0004080c0d010509
2549*c0855eaaSJohn Baldwin.LISRM0:
2550*c0855eaaSJohn Baldwin.quad	0x01040b0e0205080f, 0x0306090c00070a0d
2551*c0855eaaSJohn Baldwin.LISR:
2552*c0855eaaSJohn Baldwin.quad	0x0504070602010003, 0x0f0e0d0c080b0a09
2553*c0855eaaSJohn Baldwin.LBS0:
2554*c0855eaaSJohn Baldwin.quad	0x5555555555555555, 0x5555555555555555
2555*c0855eaaSJohn Baldwin.LBS1:
2556*c0855eaaSJohn Baldwin.quad	0x3333333333333333, 0x3333333333333333
2557*c0855eaaSJohn Baldwin.LBS2:
2558*c0855eaaSJohn Baldwin.quad	0x0f0f0f0f0f0f0f0f, 0x0f0f0f0f0f0f0f0f
2559*c0855eaaSJohn Baldwin.LSR:
2560*c0855eaaSJohn Baldwin.quad	0x0504070600030201, 0x0f0e0d0c0a09080b
2561*c0855eaaSJohn Baldwin.LSRM0:
2562*c0855eaaSJohn Baldwin.quad	0x0304090e00050a0f, 0x01060b0c0207080d
2563*c0855eaaSJohn Baldwin.LM0SR:
2564*c0855eaaSJohn Baldwin.quad	0x0a0e02060f03070b, 0x0004080c05090d01
2565*c0855eaaSJohn Baldwin.LSWPUP:
2566*c0855eaaSJohn Baldwin.quad	0x0706050403020100, 0x0c0d0e0f0b0a0908
2567*c0855eaaSJohn Baldwin.LSWPUPM0SR:
2568*c0855eaaSJohn Baldwin.quad	0x0a0d02060c03070b, 0x0004080f05090e01
2569*c0855eaaSJohn Baldwin.LADD1:
2570*c0855eaaSJohn Baldwin.quad	0x0000000000000000, 0x0000000100000000
2571*c0855eaaSJohn Baldwin.LADD2:
2572*c0855eaaSJohn Baldwin.quad	0x0000000000000000, 0x0000000200000000
2573*c0855eaaSJohn Baldwin.LADD3:
2574*c0855eaaSJohn Baldwin.quad	0x0000000000000000, 0x0000000300000000
2575*c0855eaaSJohn Baldwin.LADD4:
2576*c0855eaaSJohn Baldwin.quad	0x0000000000000000, 0x0000000400000000
2577*c0855eaaSJohn Baldwin.LADD5:
2578*c0855eaaSJohn Baldwin.quad	0x0000000000000000, 0x0000000500000000
2579*c0855eaaSJohn Baldwin.LADD6:
2580*c0855eaaSJohn Baldwin.quad	0x0000000000000000, 0x0000000600000000
2581*c0855eaaSJohn Baldwin.LADD7:
2582*c0855eaaSJohn Baldwin.quad	0x0000000000000000, 0x0000000700000000
2583*c0855eaaSJohn Baldwin.LADD8:
2584*c0855eaaSJohn Baldwin.quad	0x0000000000000000, 0x0000000800000000
2585*c0855eaaSJohn Baldwin.Lxts_magic:
2586*c0855eaaSJohn Baldwin.long	0x87,0,1,0
2587*c0855eaaSJohn Baldwin.Lmasks:
2588*c0855eaaSJohn Baldwin.quad	0x0101010101010101, 0x0101010101010101
2589*c0855eaaSJohn Baldwin.quad	0x0202020202020202, 0x0202020202020202
2590*c0855eaaSJohn Baldwin.quad	0x0404040404040404, 0x0404040404040404
2591*c0855eaaSJohn Baldwin.quad	0x0808080808080808, 0x0808080808080808
2592*c0855eaaSJohn Baldwin.LM0:
2593*c0855eaaSJohn Baldwin.quad	0x02060a0e03070b0f, 0x0004080c0105090d
2594*c0855eaaSJohn Baldwin.L63:
2595*c0855eaaSJohn Baldwin.quad	0x6363636363636363, 0x6363636363636363
2596*c0855eaaSJohn Baldwin.byte	66,105,116,45,115,108,105,99,101,100,32,65,69,83,32,102,111,114,32,120,56,54,95,54,52,47,83,83,83,69,51,44,32,69,109,105,108,105,97,32,75,195,164,115,112,101,114,44,32,80,101,116,101,114,32,83,99,104,119,97,98,101,44,32,65,110,100,121,32,80,111,108,121,97,107,111,118,0
2597*c0855eaaSJohn Baldwin.align	64
2598*c0855eaaSJohn Baldwin.size	_bsaes_const,.-_bsaes_const
2599*c0855eaaSJohn Baldwin	.section ".note.gnu.property", "a"
2600*c0855eaaSJohn Baldwin	.p2align 3
2601*c0855eaaSJohn Baldwin	.long 1f - 0f
2602*c0855eaaSJohn Baldwin	.long 4f - 1f
2603*c0855eaaSJohn Baldwin	.long 5
2604*c0855eaaSJohn Baldwin0:
2605*c0855eaaSJohn Baldwin	# "GNU" encoded with .byte, since .asciz isn't supported
2606*c0855eaaSJohn Baldwin	# on Solaris.
2607*c0855eaaSJohn Baldwin	.byte 0x47
2608*c0855eaaSJohn Baldwin	.byte 0x4e
2609*c0855eaaSJohn Baldwin	.byte 0x55
2610*c0855eaaSJohn Baldwin	.byte 0
2611*c0855eaaSJohn Baldwin1:
2612*c0855eaaSJohn Baldwin	.p2align 3
2613*c0855eaaSJohn Baldwin	.long 0xc0000002
2614*c0855eaaSJohn Baldwin	.long 3f - 2f
2615*c0855eaaSJohn Baldwin2:
2616*c0855eaaSJohn Baldwin	.long 3
2617*c0855eaaSJohn Baldwin3:
2618*c0855eaaSJohn Baldwin	.p2align 3
2619*c0855eaaSJohn Baldwin4:
2620