1299966Sjkim# $FreeBSD$
2299966Sjkim# Do not modify. This file is auto-generated from bsaes-x86_64.pl.
3238405Sjkim.text
4238405Sjkim
5238405Sjkim
6238405Sjkim
7238405Sjkim
8238405Sjkim.type	_bsaes_encrypt8,@function
9238405Sjkim.align	64
10238405Sjkim_bsaes_encrypt8:
11238405Sjkim	leaq	.LBS0(%rip),%r11
12238405Sjkim
13238405Sjkim	movdqa	(%rax),%xmm8
14238405Sjkim	leaq	16(%rax),%rax
15238405Sjkim	movdqa	80(%r11),%xmm7
16238405Sjkim	pxor	%xmm8,%xmm15
17238405Sjkim	pxor	%xmm8,%xmm0
18238405Sjkim.byte	102,68,15,56,0,255
19238405Sjkim	pxor	%xmm8,%xmm1
20238405Sjkim.byte	102,15,56,0,199
21238405Sjkim	pxor	%xmm8,%xmm2
22238405Sjkim.byte	102,15,56,0,207
23238405Sjkim	pxor	%xmm8,%xmm3
24238405Sjkim.byte	102,15,56,0,215
25238405Sjkim	pxor	%xmm8,%xmm4
26238405Sjkim.byte	102,15,56,0,223
27238405Sjkim	pxor	%xmm8,%xmm5
28238405Sjkim.byte	102,15,56,0,231
29238405Sjkim	pxor	%xmm8,%xmm6
30238405Sjkim.byte	102,15,56,0,239
31238405Sjkim.byte	102,15,56,0,247
32238405Sjkim_bsaes_encrypt8_bitslice:
33238405Sjkim	movdqa	0(%r11),%xmm7
34238405Sjkim	movdqa	16(%r11),%xmm8
35238405Sjkim	movdqa	%xmm5,%xmm9
36238405Sjkim	psrlq	$1,%xmm5
37238405Sjkim	movdqa	%xmm3,%xmm10
38238405Sjkim	psrlq	$1,%xmm3
39238405Sjkim	pxor	%xmm6,%xmm5
40238405Sjkim	pxor	%xmm4,%xmm3
41238405Sjkim	pand	%xmm7,%xmm5
42238405Sjkim	pand	%xmm7,%xmm3
43238405Sjkim	pxor	%xmm5,%xmm6
44238405Sjkim	psllq	$1,%xmm5
45238405Sjkim	pxor	%xmm3,%xmm4
46238405Sjkim	psllq	$1,%xmm3
47238405Sjkim	pxor	%xmm9,%xmm5
48238405Sjkim	pxor	%xmm10,%xmm3
49238405Sjkim	movdqa	%xmm1,%xmm9
50238405Sjkim	psrlq	$1,%xmm1
51238405Sjkim	movdqa	%xmm15,%xmm10
52238405Sjkim	psrlq	$1,%xmm15
53238405Sjkim	pxor	%xmm2,%xmm1
54238405Sjkim	pxor	%xmm0,%xmm15
55238405Sjkim	pand	%xmm7,%xmm1
56238405Sjkim	pand	%xmm7,%xmm15
57238405Sjkim	pxor	%xmm1,%xmm2
58238405Sjkim	psllq	$1,%xmm1
59238405Sjkim	pxor	%xmm15,%xmm0
60238405Sjkim	psllq	$1,%xmm15
61238405Sjkim	pxor	%xmm9,%xmm1
62238405Sjkim	pxor	%xmm10,%xmm15
63238405Sjkim	movdqa	32(%r11),%xmm7
64238405Sjkim	movdqa	%xmm4,%xmm9
65238405Sjkim	psrlq	$2,%xmm4
66238405Sjkim	movdqa	%xmm3,%xmm10
67238405Sjkim	psrlq	$2,%xmm3
68238405Sjkim	pxor	%xmm6,%xmm4
69238405Sjkim	pxor	%xmm5,%xmm3
70238405Sjkim	pand	%xmm8,%xmm4
71238405Sjkim	pand	%xmm8,%xmm3
72238405Sjkim	pxor	%xmm4,%xmm6
73238405Sjkim	psllq	$2,%xmm4
74238405Sjkim	pxor	%xmm3,%xmm5
75238405Sjkim	psllq	$2,%xmm3
76238405Sjkim	pxor	%xmm9,%xmm4
77238405Sjkim	pxor	%xmm10,%xmm3
78238405Sjkim	movdqa	%xmm0,%xmm9
79238405Sjkim	psrlq	$2,%xmm0
80238405Sjkim	movdqa	%xmm15,%xmm10
81238405Sjkim	psrlq	$2,%xmm15
82238405Sjkim	pxor	%xmm2,%xmm0
83238405Sjkim	pxor	%xmm1,%xmm15
84238405Sjkim	pand	%xmm8,%xmm0
85238405Sjkim	pand	%xmm8,%xmm15
86238405Sjkim	pxor	%xmm0,%xmm2
87238405Sjkim	psllq	$2,%xmm0
88238405Sjkim	pxor	%xmm15,%xmm1
89238405Sjkim	psllq	$2,%xmm15
90238405Sjkim	pxor	%xmm9,%xmm0
91238405Sjkim	pxor	%xmm10,%xmm15
92238405Sjkim	movdqa	%xmm2,%xmm9
93238405Sjkim	psrlq	$4,%xmm2
94238405Sjkim	movdqa	%xmm1,%xmm10
95238405Sjkim	psrlq	$4,%xmm1
96238405Sjkim	pxor	%xmm6,%xmm2
97238405Sjkim	pxor	%xmm5,%xmm1
98238405Sjkim	pand	%xmm7,%xmm2
99238405Sjkim	pand	%xmm7,%xmm1
100238405Sjkim	pxor	%xmm2,%xmm6
101238405Sjkim	psllq	$4,%xmm2
102238405Sjkim	pxor	%xmm1,%xmm5
103238405Sjkim	psllq	$4,%xmm1
104238405Sjkim	pxor	%xmm9,%xmm2
105238405Sjkim	pxor	%xmm10,%xmm1
106238405Sjkim	movdqa	%xmm0,%xmm9
107238405Sjkim	psrlq	$4,%xmm0
108238405Sjkim	movdqa	%xmm15,%xmm10
109238405Sjkim	psrlq	$4,%xmm15
110238405Sjkim	pxor	%xmm4,%xmm0
111238405Sjkim	pxor	%xmm3,%xmm15
112238405Sjkim	pand	%xmm7,%xmm0
113238405Sjkim	pand	%xmm7,%xmm15
114238405Sjkim	pxor	%xmm0,%xmm4
115238405Sjkim	psllq	$4,%xmm0
116238405Sjkim	pxor	%xmm15,%xmm3
117238405Sjkim	psllq	$4,%xmm15
118238405Sjkim	pxor	%xmm9,%xmm0
119238405Sjkim	pxor	%xmm10,%xmm15
120238405Sjkim	decl	%r10d
121238405Sjkim	jmp	.Lenc_sbox
122238405Sjkim.align	16
123238405Sjkim.Lenc_loop:
124238405Sjkim	pxor	0(%rax),%xmm15
125238405Sjkim	pxor	16(%rax),%xmm0
126238405Sjkim.byte	102,68,15,56,0,255
127238405Sjkim	pxor	32(%rax),%xmm1
128238405Sjkim.byte	102,15,56,0,199
129238405Sjkim	pxor	48(%rax),%xmm2
130238405Sjkim.byte	102,15,56,0,207
131238405Sjkim	pxor	64(%rax),%xmm3
132238405Sjkim.byte	102,15,56,0,215
133238405Sjkim	pxor	80(%rax),%xmm4
134238405Sjkim.byte	102,15,56,0,223
135238405Sjkim	pxor	96(%rax),%xmm5
136238405Sjkim.byte	102,15,56,0,231
137238405Sjkim	pxor	112(%rax),%xmm6
138238405Sjkim.byte	102,15,56,0,239
139238405Sjkim	leaq	128(%rax),%rax
140238405Sjkim.byte	102,15,56,0,247
141238405Sjkim.Lenc_sbox:
142238405Sjkim	pxor	%xmm5,%xmm4
143238405Sjkim	pxor	%xmm0,%xmm1
144238405Sjkim	pxor	%xmm15,%xmm2
145238405Sjkim	pxor	%xmm1,%xmm5
146238405Sjkim	pxor	%xmm15,%xmm4
147238405Sjkim
148238405Sjkim	pxor	%xmm2,%xmm5
149238405Sjkim	pxor	%xmm6,%xmm2
150238405Sjkim	pxor	%xmm4,%xmm6
151238405Sjkim	pxor	%xmm3,%xmm2
152238405Sjkim	pxor	%xmm4,%xmm3
153238405Sjkim	pxor	%xmm0,%xmm2
154238405Sjkim
155238405Sjkim	pxor	%xmm6,%xmm1
156238405Sjkim	pxor	%xmm4,%xmm0
157238405Sjkim	movdqa	%xmm6,%xmm10
158238405Sjkim	movdqa	%xmm0,%xmm9
159238405Sjkim	movdqa	%xmm4,%xmm8
160238405Sjkim	movdqa	%xmm1,%xmm12
161238405Sjkim	movdqa	%xmm5,%xmm11
162238405Sjkim
163238405Sjkim	pxor	%xmm3,%xmm10
164238405Sjkim	pxor	%xmm1,%xmm9
165238405Sjkim	pxor	%xmm2,%xmm8
166238405Sjkim	movdqa	%xmm10,%xmm13
167238405Sjkim	pxor	%xmm3,%xmm12
168238405Sjkim	movdqa	%xmm9,%xmm7
169238405Sjkim	pxor	%xmm15,%xmm11
170238405Sjkim	movdqa	%xmm10,%xmm14
171238405Sjkim
172238405Sjkim	por	%xmm8,%xmm9
173238405Sjkim	por	%xmm11,%xmm10
174238405Sjkim	pxor	%xmm7,%xmm14
175238405Sjkim	pand	%xmm11,%xmm13
176238405Sjkim	pxor	%xmm8,%xmm11
177238405Sjkim	pand	%xmm8,%xmm7
178238405Sjkim	pand	%xmm11,%xmm14
179238405Sjkim	movdqa	%xmm2,%xmm11
180238405Sjkim	pxor	%xmm15,%xmm11
181238405Sjkim	pand	%xmm11,%xmm12
182238405Sjkim	pxor	%xmm12,%xmm10
183238405Sjkim	pxor	%xmm12,%xmm9
184238405Sjkim	movdqa	%xmm6,%xmm12
185238405Sjkim	movdqa	%xmm4,%xmm11
186238405Sjkim	pxor	%xmm0,%xmm12
187238405Sjkim	pxor	%xmm5,%xmm11
188238405Sjkim	movdqa	%xmm12,%xmm8
189238405Sjkim	pand	%xmm11,%xmm12
190238405Sjkim	por	%xmm11,%xmm8
191238405Sjkim	pxor	%xmm12,%xmm7
192238405Sjkim	pxor	%xmm14,%xmm10
193238405Sjkim	pxor	%xmm13,%xmm9
194238405Sjkim	pxor	%xmm14,%xmm8
195238405Sjkim	movdqa	%xmm1,%xmm11
196238405Sjkim	pxor	%xmm13,%xmm7
197238405Sjkim	movdqa	%xmm3,%xmm12
198238405Sjkim	pxor	%xmm13,%xmm8
199238405Sjkim	movdqa	%xmm0,%xmm13
200238405Sjkim	pand	%xmm2,%xmm11
201238405Sjkim	movdqa	%xmm6,%xmm14
202238405Sjkim	pand	%xmm15,%xmm12
203238405Sjkim	pand	%xmm4,%xmm13
204238405Sjkim	por	%xmm5,%xmm14
205238405Sjkim	pxor	%xmm11,%xmm10
206238405Sjkim	pxor	%xmm12,%xmm9
207238405Sjkim	pxor	%xmm13,%xmm8
208238405Sjkim	pxor	%xmm14,%xmm7
209238405Sjkim
210238405Sjkim
211238405Sjkim
212238405Sjkim
213238405Sjkim
214238405Sjkim	movdqa	%xmm10,%xmm11
215238405Sjkim	pand	%xmm8,%xmm10
216238405Sjkim	pxor	%xmm9,%xmm11
217238405Sjkim
218238405Sjkim	movdqa	%xmm7,%xmm13
219238405Sjkim	movdqa	%xmm11,%xmm14
220238405Sjkim	pxor	%xmm10,%xmm13
221238405Sjkim	pand	%xmm13,%xmm14
222238405Sjkim
223238405Sjkim	movdqa	%xmm8,%xmm12
224238405Sjkim	pxor	%xmm9,%xmm14
225238405Sjkim	pxor	%xmm7,%xmm12
226238405Sjkim
227238405Sjkim	pxor	%xmm9,%xmm10
228238405Sjkim
229238405Sjkim	pand	%xmm10,%xmm12
230238405Sjkim
231238405Sjkim	movdqa	%xmm13,%xmm9
232238405Sjkim	pxor	%xmm7,%xmm12
233238405Sjkim
234238405Sjkim	pxor	%xmm12,%xmm9
235238405Sjkim	pxor	%xmm12,%xmm8
236238405Sjkim
237238405Sjkim	pand	%xmm7,%xmm9
238238405Sjkim
239238405Sjkim	pxor	%xmm9,%xmm13
240238405Sjkim	pxor	%xmm9,%xmm8
241238405Sjkim
242238405Sjkim	pand	%xmm14,%xmm13
243238405Sjkim
244238405Sjkim	pxor	%xmm11,%xmm13
245238405Sjkim	movdqa	%xmm5,%xmm11
246238405Sjkim	movdqa	%xmm4,%xmm7
247238405Sjkim	movdqa	%xmm14,%xmm9
248238405Sjkim	pxor	%xmm13,%xmm9
249238405Sjkim	pand	%xmm5,%xmm9
250238405Sjkim	pxor	%xmm4,%xmm5
251238405Sjkim	pand	%xmm14,%xmm4
252238405Sjkim	pand	%xmm13,%xmm5
253238405Sjkim	pxor	%xmm4,%xmm5
254238405Sjkim	pxor	%xmm9,%xmm4
255238405Sjkim	pxor	%xmm15,%xmm11
256238405Sjkim	pxor	%xmm2,%xmm7
257238405Sjkim	pxor	%xmm12,%xmm14
258238405Sjkim	pxor	%xmm8,%xmm13
259238405Sjkim	movdqa	%xmm14,%xmm10
260238405Sjkim	movdqa	%xmm12,%xmm9
261238405Sjkim	pxor	%xmm13,%xmm10
262238405Sjkim	pxor	%xmm8,%xmm9
263238405Sjkim	pand	%xmm11,%xmm10
264238405Sjkim	pand	%xmm15,%xmm9
265238405Sjkim	pxor	%xmm7,%xmm11
266238405Sjkim	pxor	%xmm2,%xmm15
267238405Sjkim	pand	%xmm14,%xmm7
268238405Sjkim	pand	%xmm12,%xmm2
269238405Sjkim	pand	%xmm13,%xmm11
270238405Sjkim	pand	%xmm8,%xmm15
271238405Sjkim	pxor	%xmm11,%xmm7
272238405Sjkim	pxor	%xmm2,%xmm15
273238405Sjkim	pxor	%xmm10,%xmm11
274238405Sjkim	pxor	%xmm9,%xmm2
275238405Sjkim	pxor	%xmm11,%xmm5
276238405Sjkim	pxor	%xmm11,%xmm15
277238405Sjkim	pxor	%xmm7,%xmm4
278238405Sjkim	pxor	%xmm7,%xmm2
279238405Sjkim
280238405Sjkim	movdqa	%xmm6,%xmm11
281238405Sjkim	movdqa	%xmm0,%xmm7
282238405Sjkim	pxor	%xmm3,%xmm11
283238405Sjkim	pxor	%xmm1,%xmm7
284238405Sjkim	movdqa	%xmm14,%xmm10
285238405Sjkim	movdqa	%xmm12,%xmm9
286238405Sjkim	pxor	%xmm13,%xmm10
287238405Sjkim	pxor	%xmm8,%xmm9
288238405Sjkim	pand	%xmm11,%xmm10
289238405Sjkim	pand	%xmm3,%xmm9
290238405Sjkim	pxor	%xmm7,%xmm11
291238405Sjkim	pxor	%xmm1,%xmm3
292238405Sjkim	pand	%xmm14,%xmm7
293238405Sjkim	pand	%xmm12,%xmm1
294238405Sjkim	pand	%xmm13,%xmm11
295238405Sjkim	pand	%xmm8,%xmm3
296238405Sjkim	pxor	%xmm11,%xmm7
297238405Sjkim	pxor	%xmm1,%xmm3
298238405Sjkim	pxor	%xmm10,%xmm11
299238405Sjkim	pxor	%xmm9,%xmm1
300238405Sjkim	pxor	%xmm12,%xmm14
301238405Sjkim	pxor	%xmm8,%xmm13
302238405Sjkim	movdqa	%xmm14,%xmm10
303238405Sjkim	pxor	%xmm13,%xmm10
304238405Sjkim	pand	%xmm6,%xmm10
305238405Sjkim	pxor	%xmm0,%xmm6
306238405Sjkim	pand	%xmm14,%xmm0
307238405Sjkim	pand	%xmm13,%xmm6
308238405Sjkim	pxor	%xmm0,%xmm6
309238405Sjkim	pxor	%xmm10,%xmm0
310238405Sjkim	pxor	%xmm11,%xmm6
311238405Sjkim	pxor	%xmm11,%xmm3
312238405Sjkim	pxor	%xmm7,%xmm0
313238405Sjkim	pxor	%xmm7,%xmm1
314238405Sjkim	pxor	%xmm15,%xmm6
315238405Sjkim	pxor	%xmm5,%xmm0
316238405Sjkim	pxor	%xmm6,%xmm3
317238405Sjkim	pxor	%xmm15,%xmm5
318238405Sjkim	pxor	%xmm0,%xmm15
319238405Sjkim
320238405Sjkim	pxor	%xmm4,%xmm0
321238405Sjkim	pxor	%xmm1,%xmm4
322238405Sjkim	pxor	%xmm2,%xmm1
323238405Sjkim	pxor	%xmm4,%xmm2
324238405Sjkim	pxor	%xmm4,%xmm3
325238405Sjkim
326238405Sjkim	pxor	%xmm2,%xmm5
327238405Sjkim	decl	%r10d
328238405Sjkim	jl	.Lenc_done
329238405Sjkim	pshufd	$147,%xmm15,%xmm7
330238405Sjkim	pshufd	$147,%xmm0,%xmm8
331238405Sjkim	pxor	%xmm7,%xmm15
332238405Sjkim	pshufd	$147,%xmm3,%xmm9
333238405Sjkim	pxor	%xmm8,%xmm0
334238405Sjkim	pshufd	$147,%xmm5,%xmm10
335238405Sjkim	pxor	%xmm9,%xmm3
336238405Sjkim	pshufd	$147,%xmm2,%xmm11
337238405Sjkim	pxor	%xmm10,%xmm5
338238405Sjkim	pshufd	$147,%xmm6,%xmm12
339238405Sjkim	pxor	%xmm11,%xmm2
340238405Sjkim	pshufd	$147,%xmm1,%xmm13
341238405Sjkim	pxor	%xmm12,%xmm6
342238405Sjkim	pshufd	$147,%xmm4,%xmm14
343238405Sjkim	pxor	%xmm13,%xmm1
344238405Sjkim	pxor	%xmm14,%xmm4
345238405Sjkim
346238405Sjkim	pxor	%xmm15,%xmm8
347238405Sjkim	pxor	%xmm4,%xmm7
348238405Sjkim	pxor	%xmm4,%xmm8
349238405Sjkim	pshufd	$78,%xmm15,%xmm15
350238405Sjkim	pxor	%xmm0,%xmm9
351238405Sjkim	pshufd	$78,%xmm0,%xmm0
352238405Sjkim	pxor	%xmm2,%xmm12
353238405Sjkim	pxor	%xmm7,%xmm15
354238405Sjkim	pxor	%xmm6,%xmm13
355238405Sjkim	pxor	%xmm8,%xmm0
356238405Sjkim	pxor	%xmm5,%xmm11
357238405Sjkim	pshufd	$78,%xmm2,%xmm7
358238405Sjkim	pxor	%xmm1,%xmm14
359238405Sjkim	pshufd	$78,%xmm6,%xmm8
360238405Sjkim	pxor	%xmm3,%xmm10
361238405Sjkim	pshufd	$78,%xmm5,%xmm2
362238405Sjkim	pxor	%xmm4,%xmm10
363238405Sjkim	pshufd	$78,%xmm4,%xmm6
364238405Sjkim	pxor	%xmm4,%xmm11
365238405Sjkim	pshufd	$78,%xmm1,%xmm5
366238405Sjkim	pxor	%xmm11,%xmm7
367238405Sjkim	pshufd	$78,%xmm3,%xmm1
368238405Sjkim	pxor	%xmm12,%xmm8
369238405Sjkim	pxor	%xmm10,%xmm2
370238405Sjkim	pxor	%xmm14,%xmm6
371238405Sjkim	pxor	%xmm13,%xmm5
372238405Sjkim	movdqa	%xmm7,%xmm3
373238405Sjkim	pxor	%xmm9,%xmm1
374238405Sjkim	movdqa	%xmm8,%xmm4
375238405Sjkim	movdqa	48(%r11),%xmm7
376238405Sjkim	jnz	.Lenc_loop
377238405Sjkim	movdqa	64(%r11),%xmm7
378238405Sjkim	jmp	.Lenc_loop
379238405Sjkim.align	16
380238405Sjkim.Lenc_done:
381238405Sjkim	movdqa	0(%r11),%xmm7
382238405Sjkim	movdqa	16(%r11),%xmm8
383238405Sjkim	movdqa	%xmm1,%xmm9
384238405Sjkim	psrlq	$1,%xmm1
385238405Sjkim	movdqa	%xmm2,%xmm10
386238405Sjkim	psrlq	$1,%xmm2
387238405Sjkim	pxor	%xmm4,%xmm1
388238405Sjkim	pxor	%xmm6,%xmm2
389238405Sjkim	pand	%xmm7,%xmm1
390238405Sjkim	pand	%xmm7,%xmm2
391238405Sjkim	pxor	%xmm1,%xmm4
392238405Sjkim	psllq	$1,%xmm1
393238405Sjkim	pxor	%xmm2,%xmm6
394238405Sjkim	psllq	$1,%xmm2
395238405Sjkim	pxor	%xmm9,%xmm1
396238405Sjkim	pxor	%xmm10,%xmm2
397238405Sjkim	movdqa	%xmm3,%xmm9
398238405Sjkim	psrlq	$1,%xmm3
399238405Sjkim	movdqa	%xmm15,%xmm10
400238405Sjkim	psrlq	$1,%xmm15
401238405Sjkim	pxor	%xmm5,%xmm3
402238405Sjkim	pxor	%xmm0,%xmm15
403238405Sjkim	pand	%xmm7,%xmm3
404238405Sjkim	pand	%xmm7,%xmm15
405238405Sjkim	pxor	%xmm3,%xmm5
406238405Sjkim	psllq	$1,%xmm3
407238405Sjkim	pxor	%xmm15,%xmm0
408238405Sjkim	psllq	$1,%xmm15
409238405Sjkim	pxor	%xmm9,%xmm3
410238405Sjkim	pxor	%xmm10,%xmm15
411238405Sjkim	movdqa	32(%r11),%xmm7
412238405Sjkim	movdqa	%xmm6,%xmm9
413238405Sjkim	psrlq	$2,%xmm6
414238405Sjkim	movdqa	%xmm2,%xmm10
415238405Sjkim	psrlq	$2,%xmm2
416238405Sjkim	pxor	%xmm4,%xmm6
417238405Sjkim	pxor	%xmm1,%xmm2
418238405Sjkim	pand	%xmm8,%xmm6
419238405Sjkim	pand	%xmm8,%xmm2
420238405Sjkim	pxor	%xmm6,%xmm4
421238405Sjkim	psllq	$2,%xmm6
422238405Sjkim	pxor	%xmm2,%xmm1
423238405Sjkim	psllq	$2,%xmm2
424238405Sjkim	pxor	%xmm9,%xmm6
425238405Sjkim	pxor	%xmm10,%xmm2
426238405Sjkim	movdqa	%xmm0,%xmm9
427238405Sjkim	psrlq	$2,%xmm0
428238405Sjkim	movdqa	%xmm15,%xmm10
429238405Sjkim	psrlq	$2,%xmm15
430238405Sjkim	pxor	%xmm5,%xmm0
431238405Sjkim	pxor	%xmm3,%xmm15
432238405Sjkim	pand	%xmm8,%xmm0
433238405Sjkim	pand	%xmm8,%xmm15
434238405Sjkim	pxor	%xmm0,%xmm5
435238405Sjkim	psllq	$2,%xmm0
436238405Sjkim	pxor	%xmm15,%xmm3
437238405Sjkim	psllq	$2,%xmm15
438238405Sjkim	pxor	%xmm9,%xmm0
439238405Sjkim	pxor	%xmm10,%xmm15
440238405Sjkim	movdqa	%xmm5,%xmm9
441238405Sjkim	psrlq	$4,%xmm5
442238405Sjkim	movdqa	%xmm3,%xmm10
443238405Sjkim	psrlq	$4,%xmm3
444238405Sjkim	pxor	%xmm4,%xmm5
445238405Sjkim	pxor	%xmm1,%xmm3
446238405Sjkim	pand	%xmm7,%xmm5
447238405Sjkim	pand	%xmm7,%xmm3
448238405Sjkim	pxor	%xmm5,%xmm4
449238405Sjkim	psllq	$4,%xmm5
450238405Sjkim	pxor	%xmm3,%xmm1
451238405Sjkim	psllq	$4,%xmm3
452238405Sjkim	pxor	%xmm9,%xmm5
453238405Sjkim	pxor	%xmm10,%xmm3
454238405Sjkim	movdqa	%xmm0,%xmm9
455238405Sjkim	psrlq	$4,%xmm0
456238405Sjkim	movdqa	%xmm15,%xmm10
457238405Sjkim	psrlq	$4,%xmm15
458238405Sjkim	pxor	%xmm6,%xmm0
459238405Sjkim	pxor	%xmm2,%xmm15
460238405Sjkim	pand	%xmm7,%xmm0
461238405Sjkim	pand	%xmm7,%xmm15
462238405Sjkim	pxor	%xmm0,%xmm6
463238405Sjkim	psllq	$4,%xmm0
464238405Sjkim	pxor	%xmm15,%xmm2
465238405Sjkim	psllq	$4,%xmm15
466238405Sjkim	pxor	%xmm9,%xmm0
467238405Sjkim	pxor	%xmm10,%xmm15
468238405Sjkim	movdqa	(%rax),%xmm7
469238405Sjkim	pxor	%xmm7,%xmm3
470238405Sjkim	pxor	%xmm7,%xmm5
471238405Sjkim	pxor	%xmm7,%xmm2
472238405Sjkim	pxor	%xmm7,%xmm6
473238405Sjkim	pxor	%xmm7,%xmm1
474238405Sjkim	pxor	%xmm7,%xmm4
475238405Sjkim	pxor	%xmm7,%xmm15
476238405Sjkim	pxor	%xmm7,%xmm0
477238405Sjkim	.byte	0xf3,0xc3
478238405Sjkim.size	_bsaes_encrypt8,.-_bsaes_encrypt8
479238405Sjkim
480238405Sjkim.type	_bsaes_decrypt8,@function
481238405Sjkim.align	64
482238405Sjkim_bsaes_decrypt8:
483238405Sjkim	leaq	.LBS0(%rip),%r11
484238405Sjkim
485238405Sjkim	movdqa	(%rax),%xmm8
486238405Sjkim	leaq	16(%rax),%rax
487238405Sjkim	movdqa	-48(%r11),%xmm7
488238405Sjkim	pxor	%xmm8,%xmm15
489238405Sjkim	pxor	%xmm8,%xmm0
490238405Sjkim.byte	102,68,15,56,0,255
491238405Sjkim	pxor	%xmm8,%xmm1
492238405Sjkim.byte	102,15,56,0,199
493238405Sjkim	pxor	%xmm8,%xmm2
494238405Sjkim.byte	102,15,56,0,207
495238405Sjkim	pxor	%xmm8,%xmm3
496238405Sjkim.byte	102,15,56,0,215
497238405Sjkim	pxor	%xmm8,%xmm4
498238405Sjkim.byte	102,15,56,0,223
499238405Sjkim	pxor	%xmm8,%xmm5
500238405Sjkim.byte	102,15,56,0,231
501238405Sjkim	pxor	%xmm8,%xmm6
502238405Sjkim.byte	102,15,56,0,239
503238405Sjkim.byte	102,15,56,0,247
504238405Sjkim	movdqa	0(%r11),%xmm7
505238405Sjkim	movdqa	16(%r11),%xmm8
506238405Sjkim	movdqa	%xmm5,%xmm9
507238405Sjkim	psrlq	$1,%xmm5
508238405Sjkim	movdqa	%xmm3,%xmm10
509238405Sjkim	psrlq	$1,%xmm3
510238405Sjkim	pxor	%xmm6,%xmm5
511238405Sjkim	pxor	%xmm4,%xmm3
512238405Sjkim	pand	%xmm7,%xmm5
513238405Sjkim	pand	%xmm7,%xmm3
514238405Sjkim	pxor	%xmm5,%xmm6
515238405Sjkim	psllq	$1,%xmm5
516238405Sjkim	pxor	%xmm3,%xmm4
517238405Sjkim	psllq	$1,%xmm3
518238405Sjkim	pxor	%xmm9,%xmm5
519238405Sjkim	pxor	%xmm10,%xmm3
520238405Sjkim	movdqa	%xmm1,%xmm9
521238405Sjkim	psrlq	$1,%xmm1
522238405Sjkim	movdqa	%xmm15,%xmm10
523238405Sjkim	psrlq	$1,%xmm15
524238405Sjkim	pxor	%xmm2,%xmm1
525238405Sjkim	pxor	%xmm0,%xmm15
526238405Sjkim	pand	%xmm7,%xmm1
527238405Sjkim	pand	%xmm7,%xmm15
528238405Sjkim	pxor	%xmm1,%xmm2
529238405Sjkim	psllq	$1,%xmm1
530238405Sjkim	pxor	%xmm15,%xmm0
531238405Sjkim	psllq	$1,%xmm15
532238405Sjkim	pxor	%xmm9,%xmm1
533238405Sjkim	pxor	%xmm10,%xmm15
534238405Sjkim	movdqa	32(%r11),%xmm7
535238405Sjkim	movdqa	%xmm4,%xmm9
536238405Sjkim	psrlq	$2,%xmm4
537238405Sjkim	movdqa	%xmm3,%xmm10
538238405Sjkim	psrlq	$2,%xmm3
539238405Sjkim	pxor	%xmm6,%xmm4
540238405Sjkim	pxor	%xmm5,%xmm3
541238405Sjkim	pand	%xmm8,%xmm4
542238405Sjkim	pand	%xmm8,%xmm3
543238405Sjkim	pxor	%xmm4,%xmm6
544238405Sjkim	psllq	$2,%xmm4
545238405Sjkim	pxor	%xmm3,%xmm5
546238405Sjkim	psllq	$2,%xmm3
547238405Sjkim	pxor	%xmm9,%xmm4
548238405Sjkim	pxor	%xmm10,%xmm3
549238405Sjkim	movdqa	%xmm0,%xmm9
550238405Sjkim	psrlq	$2,%xmm0
551238405Sjkim	movdqa	%xmm15,%xmm10
552238405Sjkim	psrlq	$2,%xmm15
553238405Sjkim	pxor	%xmm2,%xmm0
554238405Sjkim	pxor	%xmm1,%xmm15
555238405Sjkim	pand	%xmm8,%xmm0
556238405Sjkim	pand	%xmm8,%xmm15
557238405Sjkim	pxor	%xmm0,%xmm2
558238405Sjkim	psllq	$2,%xmm0
559238405Sjkim	pxor	%xmm15,%xmm1
560238405Sjkim	psllq	$2,%xmm15
561238405Sjkim	pxor	%xmm9,%xmm0
562238405Sjkim	pxor	%xmm10,%xmm15
563238405Sjkim	movdqa	%xmm2,%xmm9
564238405Sjkim	psrlq	$4,%xmm2
565238405Sjkim	movdqa	%xmm1,%xmm10
566238405Sjkim	psrlq	$4,%xmm1
567238405Sjkim	pxor	%xmm6,%xmm2
568238405Sjkim	pxor	%xmm5,%xmm1
569238405Sjkim	pand	%xmm7,%xmm2
570238405Sjkim	pand	%xmm7,%xmm1
571238405Sjkim	pxor	%xmm2,%xmm6
572238405Sjkim	psllq	$4,%xmm2
573238405Sjkim	pxor	%xmm1,%xmm5
574238405Sjkim	psllq	$4,%xmm1
575238405Sjkim	pxor	%xmm9,%xmm2
576238405Sjkim	pxor	%xmm10,%xmm1
577238405Sjkim	movdqa	%xmm0,%xmm9
578238405Sjkim	psrlq	$4,%xmm0
579238405Sjkim	movdqa	%xmm15,%xmm10
580238405Sjkim	psrlq	$4,%xmm15
581238405Sjkim	pxor	%xmm4,%xmm0
582238405Sjkim	pxor	%xmm3,%xmm15
583238405Sjkim	pand	%xmm7,%xmm0
584238405Sjkim	pand	%xmm7,%xmm15
585238405Sjkim	pxor	%xmm0,%xmm4
586238405Sjkim	psllq	$4,%xmm0
587238405Sjkim	pxor	%xmm15,%xmm3
588238405Sjkim	psllq	$4,%xmm15
589238405Sjkim	pxor	%xmm9,%xmm0
590238405Sjkim	pxor	%xmm10,%xmm15
591238405Sjkim	decl	%r10d
592238405Sjkim	jmp	.Ldec_sbox
593238405Sjkim.align	16
594238405Sjkim.Ldec_loop:
595238405Sjkim	pxor	0(%rax),%xmm15
596238405Sjkim	pxor	16(%rax),%xmm0
597238405Sjkim.byte	102,68,15,56,0,255
598238405Sjkim	pxor	32(%rax),%xmm1
599238405Sjkim.byte	102,15,56,0,199
600238405Sjkim	pxor	48(%rax),%xmm2
601238405Sjkim.byte	102,15,56,0,207
602238405Sjkim	pxor	64(%rax),%xmm3
603238405Sjkim.byte	102,15,56,0,215
604238405Sjkim	pxor	80(%rax),%xmm4
605238405Sjkim.byte	102,15,56,0,223
606238405Sjkim	pxor	96(%rax),%xmm5
607238405Sjkim.byte	102,15,56,0,231
608238405Sjkim	pxor	112(%rax),%xmm6
609238405Sjkim.byte	102,15,56,0,239
610238405Sjkim	leaq	128(%rax),%rax
611238405Sjkim.byte	102,15,56,0,247
612238405Sjkim.Ldec_sbox:
613238405Sjkim	pxor	%xmm3,%xmm2
614238405Sjkim
615238405Sjkim	pxor	%xmm6,%xmm3
616238405Sjkim	pxor	%xmm6,%xmm1
617238405Sjkim	pxor	%xmm3,%xmm5
618238405Sjkim	pxor	%xmm5,%xmm6
619238405Sjkim	pxor	%xmm6,%xmm0
620238405Sjkim
621238405Sjkim	pxor	%xmm0,%xmm15
622238405Sjkim	pxor	%xmm4,%xmm1
623238405Sjkim	pxor	%xmm15,%xmm2
624238405Sjkim	pxor	%xmm15,%xmm4
625238405Sjkim	pxor	%xmm2,%xmm0
626238405Sjkim	movdqa	%xmm2,%xmm10
627238405Sjkim	movdqa	%xmm6,%xmm9
628238405Sjkim	movdqa	%xmm0,%xmm8
629238405Sjkim	movdqa	%xmm3,%xmm12
630238405Sjkim	movdqa	%xmm4,%xmm11
631238405Sjkim
632238405Sjkim	pxor	%xmm15,%xmm10
633238405Sjkim	pxor	%xmm3,%xmm9
634238405Sjkim	pxor	%xmm5,%xmm8
635238405Sjkim	movdqa	%xmm10,%xmm13
636238405Sjkim	pxor	%xmm15,%xmm12
637238405Sjkim	movdqa	%xmm9,%xmm7
638238405Sjkim	pxor	%xmm1,%xmm11
639238405Sjkim	movdqa	%xmm10,%xmm14
640238405Sjkim
641238405Sjkim	por	%xmm8,%xmm9
642238405Sjkim	por	%xmm11,%xmm10
643238405Sjkim	pxor	%xmm7,%xmm14
644238405Sjkim	pand	%xmm11,%xmm13
645238405Sjkim	pxor	%xmm8,%xmm11
646238405Sjkim	pand	%xmm8,%xmm7
647238405Sjkim	pand	%xmm11,%xmm14
648238405Sjkim	movdqa	%xmm5,%xmm11
649238405Sjkim	pxor	%xmm1,%xmm11
650238405Sjkim	pand	%xmm11,%xmm12
651238405Sjkim	pxor	%xmm12,%xmm10
652238405Sjkim	pxor	%xmm12,%xmm9
653238405Sjkim	movdqa	%xmm2,%xmm12
654238405Sjkim	movdqa	%xmm0,%xmm11
655238405Sjkim	pxor	%xmm6,%xmm12
656238405Sjkim	pxor	%xmm4,%xmm11
657238405Sjkim	movdqa	%xmm12,%xmm8
658238405Sjkim	pand	%xmm11,%xmm12
659238405Sjkim	por	%xmm11,%xmm8
660238405Sjkim	pxor	%xmm12,%xmm7
661238405Sjkim	pxor	%xmm14,%xmm10
662238405Sjkim	pxor	%xmm13,%xmm9
663238405Sjkim	pxor	%xmm14,%xmm8
664238405Sjkim	movdqa	%xmm3,%xmm11
665238405Sjkim	pxor	%xmm13,%xmm7
666238405Sjkim	movdqa	%xmm15,%xmm12
667238405Sjkim	pxor	%xmm13,%xmm8
668238405Sjkim	movdqa	%xmm6,%xmm13
669238405Sjkim	pand	%xmm5,%xmm11
670238405Sjkim	movdqa	%xmm2,%xmm14
671238405Sjkim	pand	%xmm1,%xmm12
672238405Sjkim	pand	%xmm0,%xmm13
673238405Sjkim	por	%xmm4,%xmm14
674238405Sjkim	pxor	%xmm11,%xmm10
675238405Sjkim	pxor	%xmm12,%xmm9
676238405Sjkim	pxor	%xmm13,%xmm8
677238405Sjkim	pxor	%xmm14,%xmm7
678238405Sjkim
679238405Sjkim
680238405Sjkim
681238405Sjkim
682238405Sjkim
683238405Sjkim	movdqa	%xmm10,%xmm11
684238405Sjkim	pand	%xmm8,%xmm10
685238405Sjkim	pxor	%xmm9,%xmm11
686238405Sjkim
687238405Sjkim	movdqa	%xmm7,%xmm13
688238405Sjkim	movdqa	%xmm11,%xmm14
689238405Sjkim	pxor	%xmm10,%xmm13
690238405Sjkim	pand	%xmm13,%xmm14
691238405Sjkim
692238405Sjkim	movdqa	%xmm8,%xmm12
693238405Sjkim	pxor	%xmm9,%xmm14
694238405Sjkim	pxor	%xmm7,%xmm12
695238405Sjkim
696238405Sjkim	pxor	%xmm9,%xmm10
697238405Sjkim
698238405Sjkim	pand	%xmm10,%xmm12
699238405Sjkim
700238405Sjkim	movdqa	%xmm13,%xmm9
701238405Sjkim	pxor	%xmm7,%xmm12
702238405Sjkim
703238405Sjkim	pxor	%xmm12,%xmm9
704238405Sjkim	pxor	%xmm12,%xmm8
705238405Sjkim
706238405Sjkim	pand	%xmm7,%xmm9
707238405Sjkim
708238405Sjkim	pxor	%xmm9,%xmm13
709238405Sjkim	pxor	%xmm9,%xmm8
710238405Sjkim
711238405Sjkim	pand	%xmm14,%xmm13
712238405Sjkim
713238405Sjkim	pxor	%xmm11,%xmm13
714238405Sjkim	movdqa	%xmm4,%xmm11
715238405Sjkim	movdqa	%xmm0,%xmm7
716238405Sjkim	movdqa	%xmm14,%xmm9
717238405Sjkim	pxor	%xmm13,%xmm9
718238405Sjkim	pand	%xmm4,%xmm9
719238405Sjkim	pxor	%xmm0,%xmm4
720238405Sjkim	pand	%xmm14,%xmm0
721238405Sjkim	pand	%xmm13,%xmm4
722238405Sjkim	pxor	%xmm0,%xmm4
723238405Sjkim	pxor	%xmm9,%xmm0
724238405Sjkim	pxor	%xmm1,%xmm11
725238405Sjkim	pxor	%xmm5,%xmm7
726238405Sjkim	pxor	%xmm12,%xmm14
727238405Sjkim	pxor	%xmm8,%xmm13
728238405Sjkim	movdqa	%xmm14,%xmm10
729238405Sjkim	movdqa	%xmm12,%xmm9
730238405Sjkim	pxor	%xmm13,%xmm10
731238405Sjkim	pxor	%xmm8,%xmm9
732238405Sjkim	pand	%xmm11,%xmm10
733238405Sjkim	pand	%xmm1,%xmm9
734238405Sjkim	pxor	%xmm7,%xmm11
735238405Sjkim	pxor	%xmm5,%xmm1
736238405Sjkim	pand	%xmm14,%xmm7
737238405Sjkim	pand	%xmm12,%xmm5
738238405Sjkim	pand	%xmm13,%xmm11
739238405Sjkim	pand	%xmm8,%xmm1
740238405Sjkim	pxor	%xmm11,%xmm7
741238405Sjkim	pxor	%xmm5,%xmm1
742238405Sjkim	pxor	%xmm10,%xmm11
743238405Sjkim	pxor	%xmm9,%xmm5
744238405Sjkim	pxor	%xmm11,%xmm4
745238405Sjkim	pxor	%xmm11,%xmm1
746238405Sjkim	pxor	%xmm7,%xmm0
747238405Sjkim	pxor	%xmm7,%xmm5
748238405Sjkim
749238405Sjkim	movdqa	%xmm2,%xmm11
750238405Sjkim	movdqa	%xmm6,%xmm7
751238405Sjkim	pxor	%xmm15,%xmm11
752238405Sjkim	pxor	%xmm3,%xmm7
753238405Sjkim	movdqa	%xmm14,%xmm10
754238405Sjkim	movdqa	%xmm12,%xmm9
755238405Sjkim	pxor	%xmm13,%xmm10
756238405Sjkim	pxor	%xmm8,%xmm9
757238405Sjkim	pand	%xmm11,%xmm10
758238405Sjkim	pand	%xmm15,%xmm9
759238405Sjkim	pxor	%xmm7,%xmm11
760238405Sjkim	pxor	%xmm3,%xmm15
761238405Sjkim	pand	%xmm14,%xmm7
762238405Sjkim	pand	%xmm12,%xmm3
763238405Sjkim	pand	%xmm13,%xmm11
764238405Sjkim	pand	%xmm8,%xmm15
765238405Sjkim	pxor	%xmm11,%xmm7
766238405Sjkim	pxor	%xmm3,%xmm15
767238405Sjkim	pxor	%xmm10,%xmm11
768238405Sjkim	pxor	%xmm9,%xmm3
769238405Sjkim	pxor	%xmm12,%xmm14
770238405Sjkim	pxor	%xmm8,%xmm13
771238405Sjkim	movdqa	%xmm14,%xmm10
772238405Sjkim	pxor	%xmm13,%xmm10
773238405Sjkim	pand	%xmm2,%xmm10
774238405Sjkim	pxor	%xmm6,%xmm2
775238405Sjkim	pand	%xmm14,%xmm6
776238405Sjkim	pand	%xmm13,%xmm2
777238405Sjkim	pxor	%xmm6,%xmm2
778238405Sjkim	pxor	%xmm10,%xmm6
779238405Sjkim	pxor	%xmm11,%xmm2
780238405Sjkim	pxor	%xmm11,%xmm15
781238405Sjkim	pxor	%xmm7,%xmm6
782238405Sjkim	pxor	%xmm7,%xmm3
783238405Sjkim	pxor	%xmm6,%xmm0
784238405Sjkim	pxor	%xmm4,%xmm5
785238405Sjkim
786238405Sjkim	pxor	%xmm0,%xmm3
787238405Sjkim	pxor	%xmm6,%xmm1
788238405Sjkim	pxor	%xmm6,%xmm4
789238405Sjkim	pxor	%xmm1,%xmm3
790238405Sjkim	pxor	%xmm15,%xmm6
791238405Sjkim	pxor	%xmm4,%xmm3
792238405Sjkim	pxor	%xmm5,%xmm2
793238405Sjkim	pxor	%xmm0,%xmm5
794238405Sjkim	pxor	%xmm3,%xmm2
795238405Sjkim
796238405Sjkim	pxor	%xmm15,%xmm3
797238405Sjkim	pxor	%xmm2,%xmm6
798238405Sjkim	decl	%r10d
799238405Sjkim	jl	.Ldec_done
800238405Sjkim
801264331Sjkim	pshufd	$78,%xmm15,%xmm7
802264331Sjkim	pshufd	$78,%xmm2,%xmm13
803264331Sjkim	pxor	%xmm15,%xmm7
804264331Sjkim	pshufd	$78,%xmm4,%xmm14
805264331Sjkim	pxor	%xmm2,%xmm13
806264331Sjkim	pshufd	$78,%xmm0,%xmm8
807264331Sjkim	pxor	%xmm4,%xmm14
808264331Sjkim	pshufd	$78,%xmm5,%xmm9
809264331Sjkim	pxor	%xmm0,%xmm8
810264331Sjkim	pshufd	$78,%xmm3,%xmm10
811264331Sjkim	pxor	%xmm5,%xmm9
812264331Sjkim	pxor	%xmm13,%xmm15
813264331Sjkim	pxor	%xmm13,%xmm0
814264331Sjkim	pshufd	$78,%xmm1,%xmm11
815264331Sjkim	pxor	%xmm3,%xmm10
816238405Sjkim	pxor	%xmm7,%xmm5
817264331Sjkim	pxor	%xmm8,%xmm3
818264331Sjkim	pshufd	$78,%xmm6,%xmm12
819264331Sjkim	pxor	%xmm1,%xmm11
820238405Sjkim	pxor	%xmm14,%xmm0
821264331Sjkim	pxor	%xmm9,%xmm1
822264331Sjkim	pxor	%xmm6,%xmm12
823238405Sjkim
824264331Sjkim	pxor	%xmm14,%xmm5
825264331Sjkim	pxor	%xmm13,%xmm3
826264331Sjkim	pxor	%xmm13,%xmm1
827264331Sjkim	pxor	%xmm10,%xmm6
828238405Sjkim	pxor	%xmm11,%xmm2
829264331Sjkim	pxor	%xmm14,%xmm1
830264331Sjkim	pxor	%xmm14,%xmm6
831264331Sjkim	pxor	%xmm12,%xmm4
832264331Sjkim	pshufd	$147,%xmm15,%xmm7
833264331Sjkim	pshufd	$147,%xmm0,%xmm8
834238405Sjkim	pxor	%xmm7,%xmm15
835264331Sjkim	pshufd	$147,%xmm5,%xmm9
836238405Sjkim	pxor	%xmm8,%xmm0
837264331Sjkim	pshufd	$147,%xmm3,%xmm10
838264331Sjkim	pxor	%xmm9,%xmm5
839264331Sjkim	pshufd	$147,%xmm1,%xmm11
840264331Sjkim	pxor	%xmm10,%xmm3
841264331Sjkim	pshufd	$147,%xmm6,%xmm12
842238405Sjkim	pxor	%xmm11,%xmm1
843264331Sjkim	pshufd	$147,%xmm2,%xmm13
844264331Sjkim	pxor	%xmm12,%xmm6
845264331Sjkim	pshufd	$147,%xmm4,%xmm14
846264331Sjkim	pxor	%xmm13,%xmm2
847264331Sjkim	pxor	%xmm14,%xmm4
848238405Sjkim
849264331Sjkim	pxor	%xmm15,%xmm8
850238405Sjkim	pxor	%xmm4,%xmm7
851264331Sjkim	pxor	%xmm4,%xmm8
852264331Sjkim	pshufd	$78,%xmm15,%xmm15
853264331Sjkim	pxor	%xmm0,%xmm9
854264331Sjkim	pshufd	$78,%xmm0,%xmm0
855264331Sjkim	pxor	%xmm1,%xmm12
856264331Sjkim	pxor	%xmm7,%xmm15
857264331Sjkim	pxor	%xmm6,%xmm13
858238405Sjkim	pxor	%xmm8,%xmm0
859264331Sjkim	pxor	%xmm3,%xmm11
860264331Sjkim	pshufd	$78,%xmm1,%xmm7
861264331Sjkim	pxor	%xmm2,%xmm14
862264331Sjkim	pshufd	$78,%xmm6,%xmm8
863238405Sjkim	pxor	%xmm5,%xmm10
864264331Sjkim	pshufd	$78,%xmm3,%xmm1
865264331Sjkim	pxor	%xmm4,%xmm10
866264331Sjkim	pshufd	$78,%xmm4,%xmm6
867264331Sjkim	pxor	%xmm4,%xmm11
868264331Sjkim	pshufd	$78,%xmm2,%xmm3
869264331Sjkim	pxor	%xmm11,%xmm7
870264331Sjkim	pshufd	$78,%xmm5,%xmm2
871264331Sjkim	pxor	%xmm12,%xmm8
872264331Sjkim	pxor	%xmm1,%xmm10
873264331Sjkim	pxor	%xmm14,%xmm6
874264331Sjkim	pxor	%xmm3,%xmm13
875264331Sjkim	movdqa	%xmm7,%xmm3
876264331Sjkim	pxor	%xmm9,%xmm2
877264331Sjkim	movdqa	%xmm13,%xmm5
878264331Sjkim	movdqa	%xmm8,%xmm4
879264331Sjkim	movdqa	%xmm2,%xmm1
880238405Sjkim	movdqa	%xmm10,%xmm2
881238405Sjkim	movdqa	-16(%r11),%xmm7
882238405Sjkim	jnz	.Ldec_loop
883238405Sjkim	movdqa	-32(%r11),%xmm7
884238405Sjkim	jmp	.Ldec_loop
885238405Sjkim.align	16
886238405Sjkim.Ldec_done:
887238405Sjkim	movdqa	0(%r11),%xmm7
888238405Sjkim	movdqa	16(%r11),%xmm8
889238405Sjkim	movdqa	%xmm2,%xmm9
890238405Sjkim	psrlq	$1,%xmm2
891238405Sjkim	movdqa	%xmm1,%xmm10
892238405Sjkim	psrlq	$1,%xmm1
893238405Sjkim	pxor	%xmm4,%xmm2
894238405Sjkim	pxor	%xmm6,%xmm1
895238405Sjkim	pand	%xmm7,%xmm2
896238405Sjkim	pand	%xmm7,%xmm1
897238405Sjkim	pxor	%xmm2,%xmm4
898238405Sjkim	psllq	$1,%xmm2
899238405Sjkim	pxor	%xmm1,%xmm6
900238405Sjkim	psllq	$1,%xmm1
901238405Sjkim	pxor	%xmm9,%xmm2
902238405Sjkim	pxor	%xmm10,%xmm1
903238405Sjkim	movdqa	%xmm5,%xmm9
904238405Sjkim	psrlq	$1,%xmm5
905238405Sjkim	movdqa	%xmm15,%xmm10
906238405Sjkim	psrlq	$1,%xmm15
907238405Sjkim	pxor	%xmm3,%xmm5
908238405Sjkim	pxor	%xmm0,%xmm15
909238405Sjkim	pand	%xmm7,%xmm5
910238405Sjkim	pand	%xmm7,%xmm15
911238405Sjkim	pxor	%xmm5,%xmm3
912238405Sjkim	psllq	$1,%xmm5
913238405Sjkim	pxor	%xmm15,%xmm0
914238405Sjkim	psllq	$1,%xmm15
915238405Sjkim	pxor	%xmm9,%xmm5
916238405Sjkim	pxor	%xmm10,%xmm15
917238405Sjkim	movdqa	32(%r11),%xmm7
918238405Sjkim	movdqa	%xmm6,%xmm9
919238405Sjkim	psrlq	$2,%xmm6
920238405Sjkim	movdqa	%xmm1,%xmm10
921238405Sjkim	psrlq	$2,%xmm1
922238405Sjkim	pxor	%xmm4,%xmm6
923238405Sjkim	pxor	%xmm2,%xmm1
924238405Sjkim	pand	%xmm8,%xmm6
925238405Sjkim	pand	%xmm8,%xmm1
926238405Sjkim	pxor	%xmm6,%xmm4
927238405Sjkim	psllq	$2,%xmm6
928238405Sjkim	pxor	%xmm1,%xmm2
929238405Sjkim	psllq	$2,%xmm1
930238405Sjkim	pxor	%xmm9,%xmm6
931238405Sjkim	pxor	%xmm10,%xmm1
932238405Sjkim	movdqa	%xmm0,%xmm9
933238405Sjkim	psrlq	$2,%xmm0
934238405Sjkim	movdqa	%xmm15,%xmm10
935238405Sjkim	psrlq	$2,%xmm15
936238405Sjkim	pxor	%xmm3,%xmm0
937238405Sjkim	pxor	%xmm5,%xmm15
938238405Sjkim	pand	%xmm8,%xmm0
939238405Sjkim	pand	%xmm8,%xmm15
940238405Sjkim	pxor	%xmm0,%xmm3
941238405Sjkim	psllq	$2,%xmm0
942238405Sjkim	pxor	%xmm15,%xmm5
943238405Sjkim	psllq	$2,%xmm15
944238405Sjkim	pxor	%xmm9,%xmm0
945238405Sjkim	pxor	%xmm10,%xmm15
946238405Sjkim	movdqa	%xmm3,%xmm9
947238405Sjkim	psrlq	$4,%xmm3
948238405Sjkim	movdqa	%xmm5,%xmm10
949238405Sjkim	psrlq	$4,%xmm5
950238405Sjkim	pxor	%xmm4,%xmm3
951238405Sjkim	pxor	%xmm2,%xmm5
952238405Sjkim	pand	%xmm7,%xmm3
953238405Sjkim	pand	%xmm7,%xmm5
954238405Sjkim	pxor	%xmm3,%xmm4
955238405Sjkim	psllq	$4,%xmm3
956238405Sjkim	pxor	%xmm5,%xmm2
957238405Sjkim	psllq	$4,%xmm5
958238405Sjkim	pxor	%xmm9,%xmm3
959238405Sjkim	pxor	%xmm10,%xmm5
960238405Sjkim	movdqa	%xmm0,%xmm9
961238405Sjkim	psrlq	$4,%xmm0
962238405Sjkim	movdqa	%xmm15,%xmm10
963238405Sjkim	psrlq	$4,%xmm15
964238405Sjkim	pxor	%xmm6,%xmm0
965238405Sjkim	pxor	%xmm1,%xmm15
966238405Sjkim	pand	%xmm7,%xmm0
967238405Sjkim	pand	%xmm7,%xmm15
968238405Sjkim	pxor	%xmm0,%xmm6
969238405Sjkim	psllq	$4,%xmm0
970238405Sjkim	pxor	%xmm15,%xmm1
971238405Sjkim	psllq	$4,%xmm15
972238405Sjkim	pxor	%xmm9,%xmm0
973238405Sjkim	pxor	%xmm10,%xmm15
974238405Sjkim	movdqa	(%rax),%xmm7
975238405Sjkim	pxor	%xmm7,%xmm5
976238405Sjkim	pxor	%xmm7,%xmm3
977238405Sjkim	pxor	%xmm7,%xmm1
978238405Sjkim	pxor	%xmm7,%xmm6
979238405Sjkim	pxor	%xmm7,%xmm2
980238405Sjkim	pxor	%xmm7,%xmm4
981238405Sjkim	pxor	%xmm7,%xmm15
982238405Sjkim	pxor	%xmm7,%xmm0
983238405Sjkim	.byte	0xf3,0xc3
984238405Sjkim.size	_bsaes_decrypt8,.-_bsaes_decrypt8
985238405Sjkim.type	_bsaes_key_convert,@function
986238405Sjkim.align	16
987238405Sjkim_bsaes_key_convert:
988238405Sjkim	leaq	.Lmasks(%rip),%r11
989238405Sjkim	movdqu	(%rcx),%xmm7
990238405Sjkim	leaq	16(%rcx),%rcx
991238405Sjkim	movdqa	0(%r11),%xmm0
992238405Sjkim	movdqa	16(%r11),%xmm1
993238405Sjkim	movdqa	32(%r11),%xmm2
994238405Sjkim	movdqa	48(%r11),%xmm3
995238405Sjkim	movdqa	64(%r11),%xmm4
996238405Sjkim	pcmpeqd	%xmm5,%xmm5
997238405Sjkim
998238405Sjkim	movdqu	(%rcx),%xmm6
999238405Sjkim	movdqa	%xmm7,(%rax)
1000238405Sjkim	leaq	16(%rax),%rax
1001238405Sjkim	decl	%r10d
1002238405Sjkim	jmp	.Lkey_loop
1003238405Sjkim.align	16
1004238405Sjkim.Lkey_loop:
1005238405Sjkim.byte	102,15,56,0,244
1006238405Sjkim
1007238405Sjkim	movdqa	%xmm0,%xmm8
1008238405Sjkim	movdqa	%xmm1,%xmm9
1009238405Sjkim
1010238405Sjkim	pand	%xmm6,%xmm8
1011238405Sjkim	pand	%xmm6,%xmm9
1012238405Sjkim	movdqa	%xmm2,%xmm10
1013238405Sjkim	pcmpeqb	%xmm0,%xmm8
1014238405Sjkim	psllq	$4,%xmm0
1015238405Sjkim	movdqa	%xmm3,%xmm11
1016238405Sjkim	pcmpeqb	%xmm1,%xmm9
1017238405Sjkim	psllq	$4,%xmm1
1018238405Sjkim
1019238405Sjkim	pand	%xmm6,%xmm10
1020238405Sjkim	pand	%xmm6,%xmm11
1021238405Sjkim	movdqa	%xmm0,%xmm12
1022238405Sjkim	pcmpeqb	%xmm2,%xmm10
1023238405Sjkim	psllq	$4,%xmm2
1024238405Sjkim	movdqa	%xmm1,%xmm13
1025238405Sjkim	pcmpeqb	%xmm3,%xmm11
1026238405Sjkim	psllq	$4,%xmm3
1027238405Sjkim
1028238405Sjkim	movdqa	%xmm2,%xmm14
1029238405Sjkim	movdqa	%xmm3,%xmm15
1030238405Sjkim	pxor	%xmm5,%xmm8
1031238405Sjkim	pxor	%xmm5,%xmm9
1032238405Sjkim
1033238405Sjkim	pand	%xmm6,%xmm12
1034238405Sjkim	pand	%xmm6,%xmm13
1035238405Sjkim	movdqa	%xmm8,0(%rax)
1036238405Sjkim	pcmpeqb	%xmm0,%xmm12
1037238405Sjkim	psrlq	$4,%xmm0
1038238405Sjkim	movdqa	%xmm9,16(%rax)
1039238405Sjkim	pcmpeqb	%xmm1,%xmm13
1040238405Sjkim	psrlq	$4,%xmm1
1041238405Sjkim	leaq	16(%rcx),%rcx
1042238405Sjkim
1043238405Sjkim	pand	%xmm6,%xmm14
1044238405Sjkim	pand	%xmm6,%xmm15
1045238405Sjkim	movdqa	%xmm10,32(%rax)
1046238405Sjkim	pcmpeqb	%xmm2,%xmm14
1047238405Sjkim	psrlq	$4,%xmm2
1048238405Sjkim	movdqa	%xmm11,48(%rax)
1049238405Sjkim	pcmpeqb	%xmm3,%xmm15
1050238405Sjkim	psrlq	$4,%xmm3
1051238405Sjkim	movdqu	(%rcx),%xmm6
1052238405Sjkim
1053238405Sjkim	pxor	%xmm5,%xmm13
1054238405Sjkim	pxor	%xmm5,%xmm14
1055238405Sjkim	movdqa	%xmm12,64(%rax)
1056238405Sjkim	movdqa	%xmm13,80(%rax)
1057238405Sjkim	movdqa	%xmm14,96(%rax)
1058238405Sjkim	movdqa	%xmm15,112(%rax)
1059238405Sjkim	leaq	128(%rax),%rax
1060238405Sjkim	decl	%r10d
1061238405Sjkim	jnz	.Lkey_loop
1062238405Sjkim
1063238405Sjkim	movdqa	80(%r11),%xmm7
1064238405Sjkim
1065238405Sjkim	.byte	0xf3,0xc3
1066238405Sjkim.size	_bsaes_key_convert,.-_bsaes_key_convert
1067238405Sjkim
1068238405Sjkim.globl	bsaes_cbc_encrypt
1069238405Sjkim.type	bsaes_cbc_encrypt,@function
1070238405Sjkim.align	16
1071238405Sjkimbsaes_cbc_encrypt:
1072238405Sjkim	cmpl	$0,%r9d
1073238405Sjkim	jne	asm_AES_cbc_encrypt
1074238405Sjkim	cmpq	$128,%rdx
1075238405Sjkim	jb	asm_AES_cbc_encrypt
1076238405Sjkim
1077238405Sjkim	movq	%rsp,%rax
1078238405Sjkim.Lcbc_dec_prologue:
1079238405Sjkim	pushq	%rbp
1080238405Sjkim	pushq	%rbx
1081238405Sjkim	pushq	%r12
1082238405Sjkim	pushq	%r13
1083238405Sjkim	pushq	%r14
1084238405Sjkim	pushq	%r15
1085238405Sjkim	leaq	-72(%rsp),%rsp
1086238405Sjkim	movq	%rsp,%rbp
1087238405Sjkim	movl	240(%rcx),%eax
1088238405Sjkim	movq	%rdi,%r12
1089238405Sjkim	movq	%rsi,%r13
1090238405Sjkim	movq	%rdx,%r14
1091238405Sjkim	movq	%rcx,%r15
1092238405Sjkim	movq	%r8,%rbx
1093238405Sjkim	shrq	$4,%r14
1094238405Sjkim
1095238405Sjkim	movl	%eax,%edx
1096238405Sjkim	shlq	$7,%rax
1097238405Sjkim	subq	$96,%rax
1098238405Sjkim	subq	%rax,%rsp
1099238405Sjkim
1100238405Sjkim	movq	%rsp,%rax
1101238405Sjkim	movq	%r15,%rcx
1102238405Sjkim	movl	%edx,%r10d
1103238405Sjkim	call	_bsaes_key_convert
1104238405Sjkim	pxor	(%rsp),%xmm7
1105238405Sjkim	movdqa	%xmm6,(%rax)
1106238405Sjkim	movdqa	%xmm7,(%rsp)
1107238405Sjkim
1108238405Sjkim	movdqu	(%rbx),%xmm14
1109238405Sjkim	subq	$8,%r14
1110238405Sjkim.Lcbc_dec_loop:
1111238405Sjkim	movdqu	0(%r12),%xmm15
1112238405Sjkim	movdqu	16(%r12),%xmm0
1113238405Sjkim	movdqu	32(%r12),%xmm1
1114238405Sjkim	movdqu	48(%r12),%xmm2
1115238405Sjkim	movdqu	64(%r12),%xmm3
1116238405Sjkim	movdqu	80(%r12),%xmm4
1117238405Sjkim	movq	%rsp,%rax
1118238405Sjkim	movdqu	96(%r12),%xmm5
1119238405Sjkim	movl	%edx,%r10d
1120238405Sjkim	movdqu	112(%r12),%xmm6
1121238405Sjkim	movdqa	%xmm14,32(%rbp)
1122238405Sjkim
1123238405Sjkim	call	_bsaes_decrypt8
1124238405Sjkim
1125238405Sjkim	pxor	32(%rbp),%xmm15
1126238405Sjkim	movdqu	0(%r12),%xmm7
1127238405Sjkim	movdqu	16(%r12),%xmm8
1128238405Sjkim	pxor	%xmm7,%xmm0
1129238405Sjkim	movdqu	32(%r12),%xmm9
1130238405Sjkim	pxor	%xmm8,%xmm5
1131238405Sjkim	movdqu	48(%r12),%xmm10
1132238405Sjkim	pxor	%xmm9,%xmm3
1133238405Sjkim	movdqu	64(%r12),%xmm11
1134238405Sjkim	pxor	%xmm10,%xmm1
1135238405Sjkim	movdqu	80(%r12),%xmm12
1136238405Sjkim	pxor	%xmm11,%xmm6
1137238405Sjkim	movdqu	96(%r12),%xmm13
1138238405Sjkim	pxor	%xmm12,%xmm2
1139238405Sjkim	movdqu	112(%r12),%xmm14
1140238405Sjkim	pxor	%xmm13,%xmm4
1141238405Sjkim	movdqu	%xmm15,0(%r13)
1142238405Sjkim	leaq	128(%r12),%r12
1143238405Sjkim	movdqu	%xmm0,16(%r13)
1144238405Sjkim	movdqu	%xmm5,32(%r13)
1145238405Sjkim	movdqu	%xmm3,48(%r13)
1146238405Sjkim	movdqu	%xmm1,64(%r13)
1147238405Sjkim	movdqu	%xmm6,80(%r13)
1148238405Sjkim	movdqu	%xmm2,96(%r13)
1149238405Sjkim	movdqu	%xmm4,112(%r13)
1150238405Sjkim	leaq	128(%r13),%r13
1151238405Sjkim	subq	$8,%r14
1152238405Sjkim	jnc	.Lcbc_dec_loop
1153238405Sjkim
1154238405Sjkim	addq	$8,%r14
1155238405Sjkim	jz	.Lcbc_dec_done
1156238405Sjkim
1157238405Sjkim	movdqu	0(%r12),%xmm15
1158238405Sjkim	movq	%rsp,%rax
1159238405Sjkim	movl	%edx,%r10d
1160238405Sjkim	cmpq	$2,%r14
1161238405Sjkim	jb	.Lcbc_dec_one
1162238405Sjkim	movdqu	16(%r12),%xmm0
1163238405Sjkim	je	.Lcbc_dec_two
1164238405Sjkim	movdqu	32(%r12),%xmm1
1165238405Sjkim	cmpq	$4,%r14
1166238405Sjkim	jb	.Lcbc_dec_three
1167238405Sjkim	movdqu	48(%r12),%xmm2
1168238405Sjkim	je	.Lcbc_dec_four
1169238405Sjkim	movdqu	64(%r12),%xmm3
1170238405Sjkim	cmpq	$6,%r14
1171238405Sjkim	jb	.Lcbc_dec_five
1172238405Sjkim	movdqu	80(%r12),%xmm4
1173238405Sjkim	je	.Lcbc_dec_six
1174238405Sjkim	movdqu	96(%r12),%xmm5
1175238405Sjkim	movdqa	%xmm14,32(%rbp)
1176238405Sjkim	call	_bsaes_decrypt8
1177238405Sjkim	pxor	32(%rbp),%xmm15
1178238405Sjkim	movdqu	0(%r12),%xmm7
1179238405Sjkim	movdqu	16(%r12),%xmm8
1180238405Sjkim	pxor	%xmm7,%xmm0
1181238405Sjkim	movdqu	32(%r12),%xmm9
1182238405Sjkim	pxor	%xmm8,%xmm5
1183238405Sjkim	movdqu	48(%r12),%xmm10
1184238405Sjkim	pxor	%xmm9,%xmm3
1185238405Sjkim	movdqu	64(%r12),%xmm11
1186238405Sjkim	pxor	%xmm10,%xmm1
1187238405Sjkim	movdqu	80(%r12),%xmm12
1188238405Sjkim	pxor	%xmm11,%xmm6
1189238405Sjkim	movdqu	96(%r12),%xmm14
1190238405Sjkim	pxor	%xmm12,%xmm2
1191238405Sjkim	movdqu	%xmm15,0(%r13)
1192238405Sjkim	movdqu	%xmm0,16(%r13)
1193238405Sjkim	movdqu	%xmm5,32(%r13)
1194238405Sjkim	movdqu	%xmm3,48(%r13)
1195238405Sjkim	movdqu	%xmm1,64(%r13)
1196238405Sjkim	movdqu	%xmm6,80(%r13)
1197238405Sjkim	movdqu	%xmm2,96(%r13)
1198238405Sjkim	jmp	.Lcbc_dec_done
1199238405Sjkim.align	16
1200238405Sjkim.Lcbc_dec_six:
1201238405Sjkim	movdqa	%xmm14,32(%rbp)
1202238405Sjkim	call	_bsaes_decrypt8
1203238405Sjkim	pxor	32(%rbp),%xmm15
1204238405Sjkim	movdqu	0(%r12),%xmm7
1205238405Sjkim	movdqu	16(%r12),%xmm8
1206238405Sjkim	pxor	%xmm7,%xmm0
1207238405Sjkim	movdqu	32(%r12),%xmm9
1208238405Sjkim	pxor	%xmm8,%xmm5
1209238405Sjkim	movdqu	48(%r12),%xmm10
1210238405Sjkim	pxor	%xmm9,%xmm3
1211238405Sjkim	movdqu	64(%r12),%xmm11
1212238405Sjkim	pxor	%xmm10,%xmm1
1213238405Sjkim	movdqu	80(%r12),%xmm14
1214238405Sjkim	pxor	%xmm11,%xmm6
1215238405Sjkim	movdqu	%xmm15,0(%r13)
1216238405Sjkim	movdqu	%xmm0,16(%r13)
1217238405Sjkim	movdqu	%xmm5,32(%r13)
1218238405Sjkim	movdqu	%xmm3,48(%r13)
1219238405Sjkim	movdqu	%xmm1,64(%r13)
1220238405Sjkim	movdqu	%xmm6,80(%r13)
1221238405Sjkim	jmp	.Lcbc_dec_done
1222238405Sjkim.align	16
1223238405Sjkim.Lcbc_dec_five:
1224238405Sjkim	movdqa	%xmm14,32(%rbp)
1225238405Sjkim	call	_bsaes_decrypt8
1226238405Sjkim	pxor	32(%rbp),%xmm15
1227238405Sjkim	movdqu	0(%r12),%xmm7
1228238405Sjkim	movdqu	16(%r12),%xmm8
1229238405Sjkim	pxor	%xmm7,%xmm0
1230238405Sjkim	movdqu	32(%r12),%xmm9
1231238405Sjkim	pxor	%xmm8,%xmm5
1232238405Sjkim	movdqu	48(%r12),%xmm10
1233238405Sjkim	pxor	%xmm9,%xmm3
1234238405Sjkim	movdqu	64(%r12),%xmm14
1235238405Sjkim	pxor	%xmm10,%xmm1
1236238405Sjkim	movdqu	%xmm15,0(%r13)
1237238405Sjkim	movdqu	%xmm0,16(%r13)
1238238405Sjkim	movdqu	%xmm5,32(%r13)
1239238405Sjkim	movdqu	%xmm3,48(%r13)
1240238405Sjkim	movdqu	%xmm1,64(%r13)
1241238405Sjkim	jmp	.Lcbc_dec_done
1242238405Sjkim.align	16
1243238405Sjkim.Lcbc_dec_four:
1244238405Sjkim	movdqa	%xmm14,32(%rbp)
1245238405Sjkim	call	_bsaes_decrypt8
1246238405Sjkim	pxor	32(%rbp),%xmm15
1247238405Sjkim	movdqu	0(%r12),%xmm7
1248238405Sjkim	movdqu	16(%r12),%xmm8
1249238405Sjkim	pxor	%xmm7,%xmm0
1250238405Sjkim	movdqu	32(%r12),%xmm9
1251238405Sjkim	pxor	%xmm8,%xmm5
1252238405Sjkim	movdqu	48(%r12),%xmm14
1253238405Sjkim	pxor	%xmm9,%xmm3
1254238405Sjkim	movdqu	%xmm15,0(%r13)
1255238405Sjkim	movdqu	%xmm0,16(%r13)
1256238405Sjkim	movdqu	%xmm5,32(%r13)
1257238405Sjkim	movdqu	%xmm3,48(%r13)
1258238405Sjkim	jmp	.Lcbc_dec_done
1259238405Sjkim.align	16
1260238405Sjkim.Lcbc_dec_three:
1261238405Sjkim	movdqa	%xmm14,32(%rbp)
1262238405Sjkim	call	_bsaes_decrypt8
1263238405Sjkim	pxor	32(%rbp),%xmm15
1264238405Sjkim	movdqu	0(%r12),%xmm7
1265238405Sjkim	movdqu	16(%r12),%xmm8
1266238405Sjkim	pxor	%xmm7,%xmm0
1267238405Sjkim	movdqu	32(%r12),%xmm14
1268238405Sjkim	pxor	%xmm8,%xmm5
1269238405Sjkim	movdqu	%xmm15,0(%r13)
1270238405Sjkim	movdqu	%xmm0,16(%r13)
1271238405Sjkim	movdqu	%xmm5,32(%r13)
1272238405Sjkim	jmp	.Lcbc_dec_done
1273238405Sjkim.align	16
1274238405Sjkim.Lcbc_dec_two:
1275238405Sjkim	movdqa	%xmm14,32(%rbp)
1276238405Sjkim	call	_bsaes_decrypt8
1277238405Sjkim	pxor	32(%rbp),%xmm15
1278238405Sjkim	movdqu	0(%r12),%xmm7
1279238405Sjkim	movdqu	16(%r12),%xmm14
1280238405Sjkim	pxor	%xmm7,%xmm0
1281238405Sjkim	movdqu	%xmm15,0(%r13)
1282238405Sjkim	movdqu	%xmm0,16(%r13)
1283238405Sjkim	jmp	.Lcbc_dec_done
1284238405Sjkim.align	16
1285238405Sjkim.Lcbc_dec_one:
1286238405Sjkim	leaq	(%r12),%rdi
1287238405Sjkim	leaq	32(%rbp),%rsi
1288238405Sjkim	leaq	(%r15),%rdx
1289238405Sjkim	call	asm_AES_decrypt
1290238405Sjkim	pxor	32(%rbp),%xmm14
1291238405Sjkim	movdqu	%xmm14,(%r13)
1292238405Sjkim	movdqa	%xmm15,%xmm14
1293238405Sjkim
1294238405Sjkim.Lcbc_dec_done:
1295238405Sjkim	movdqu	%xmm14,(%rbx)
1296238405Sjkim	leaq	(%rsp),%rax
1297238405Sjkim	pxor	%xmm0,%xmm0
1298238405Sjkim.Lcbc_dec_bzero:
1299238405Sjkim	movdqa	%xmm0,0(%rax)
1300238405Sjkim	movdqa	%xmm0,16(%rax)
1301238405Sjkim	leaq	32(%rax),%rax
1302238405Sjkim	cmpq	%rax,%rbp
1303238405Sjkim	ja	.Lcbc_dec_bzero
1304238405Sjkim
1305238405Sjkim	leaq	(%rbp),%rsp
1306238405Sjkim	movq	72(%rsp),%r15
1307238405Sjkim	movq	80(%rsp),%r14
1308238405Sjkim	movq	88(%rsp),%r13
1309238405Sjkim	movq	96(%rsp),%r12
1310238405Sjkim	movq	104(%rsp),%rbx
1311238405Sjkim	movq	112(%rsp),%rax
1312238405Sjkim	leaq	120(%rsp),%rsp
1313238405Sjkim	movq	%rax,%rbp
1314238405Sjkim.Lcbc_dec_epilogue:
1315238405Sjkim	.byte	0xf3,0xc3
1316238405Sjkim.size	bsaes_cbc_encrypt,.-bsaes_cbc_encrypt
1317238405Sjkim
1318238405Sjkim.globl	bsaes_ctr32_encrypt_blocks
1319238405Sjkim.type	bsaes_ctr32_encrypt_blocks,@function
1320238405Sjkim.align	16
1321238405Sjkimbsaes_ctr32_encrypt_blocks:
1322238405Sjkim	movq	%rsp,%rax
1323238405Sjkim.Lctr_enc_prologue:
1324238405Sjkim	pushq	%rbp
1325238405Sjkim	pushq	%rbx
1326238405Sjkim	pushq	%r12
1327238405Sjkim	pushq	%r13
1328238405Sjkim	pushq	%r14
1329238405Sjkim	pushq	%r15
1330238405Sjkim	leaq	-72(%rsp),%rsp
1331238405Sjkim	movq	%rsp,%rbp
1332238405Sjkim	movdqu	(%r8),%xmm0
1333238405Sjkim	movl	240(%rcx),%eax
1334238405Sjkim	movq	%rdi,%r12
1335238405Sjkim	movq	%rsi,%r13
1336238405Sjkim	movq	%rdx,%r14
1337238405Sjkim	movq	%rcx,%r15
1338238405Sjkim	movdqa	%xmm0,32(%rbp)
1339238405Sjkim	cmpq	$8,%rdx
1340238405Sjkim	jb	.Lctr_enc_short
1341238405Sjkim
1342238405Sjkim	movl	%eax,%ebx
1343238405Sjkim	shlq	$7,%rax
1344238405Sjkim	subq	$96,%rax
1345238405Sjkim	subq	%rax,%rsp
1346238405Sjkim
1347238405Sjkim	movq	%rsp,%rax
1348238405Sjkim	movq	%r15,%rcx
1349238405Sjkim	movl	%ebx,%r10d
1350238405Sjkim	call	_bsaes_key_convert
1351238405Sjkim	pxor	%xmm6,%xmm7
1352238405Sjkim	movdqa	%xmm7,(%rax)
1353238405Sjkim
1354238405Sjkim	movdqa	(%rsp),%xmm8
1355238405Sjkim	leaq	.LADD1(%rip),%r11
1356238405Sjkim	movdqa	32(%rbp),%xmm15
1357238405Sjkim	movdqa	-32(%r11),%xmm7
1358238405Sjkim.byte	102,68,15,56,0,199
1359238405Sjkim.byte	102,68,15,56,0,255
1360238405Sjkim	movdqa	%xmm8,(%rsp)
1361238405Sjkim	jmp	.Lctr_enc_loop
1362238405Sjkim.align	16
1363238405Sjkim.Lctr_enc_loop:
1364238405Sjkim	movdqa	%xmm15,32(%rbp)
1365238405Sjkim	movdqa	%xmm15,%xmm0
1366238405Sjkim	movdqa	%xmm15,%xmm1
1367238405Sjkim	paddd	0(%r11),%xmm0
1368238405Sjkim	movdqa	%xmm15,%xmm2
1369238405Sjkim	paddd	16(%r11),%xmm1
1370238405Sjkim	movdqa	%xmm15,%xmm3
1371238405Sjkim	paddd	32(%r11),%xmm2
1372238405Sjkim	movdqa	%xmm15,%xmm4
1373238405Sjkim	paddd	48(%r11),%xmm3
1374238405Sjkim	movdqa	%xmm15,%xmm5
1375238405Sjkim	paddd	64(%r11),%xmm4
1376238405Sjkim	movdqa	%xmm15,%xmm6
1377238405Sjkim	paddd	80(%r11),%xmm5
1378238405Sjkim	paddd	96(%r11),%xmm6
1379238405Sjkim
1380238405Sjkim
1381238405Sjkim
1382238405Sjkim	movdqa	(%rsp),%xmm8
1383238405Sjkim	leaq	16(%rsp),%rax
1384238405Sjkim	movdqa	-16(%r11),%xmm7
1385238405Sjkim	pxor	%xmm8,%xmm15
1386238405Sjkim	pxor	%xmm8,%xmm0
1387238405Sjkim.byte	102,68,15,56,0,255
1388238405Sjkim	pxor	%xmm8,%xmm1
1389238405Sjkim.byte	102,15,56,0,199
1390238405Sjkim	pxor	%xmm8,%xmm2
1391238405Sjkim.byte	102,15,56,0,207
1392238405Sjkim	pxor	%xmm8,%xmm3
1393238405Sjkim.byte	102,15,56,0,215
1394238405Sjkim	pxor	%xmm8,%xmm4
1395238405Sjkim.byte	102,15,56,0,223
1396238405Sjkim	pxor	%xmm8,%xmm5
1397238405Sjkim.byte	102,15,56,0,231
1398238405Sjkim	pxor	%xmm8,%xmm6
1399238405Sjkim.byte	102,15,56,0,239
1400238405Sjkim	leaq	.LBS0(%rip),%r11
1401238405Sjkim.byte	102,15,56,0,247
1402238405Sjkim	movl	%ebx,%r10d
1403238405Sjkim
1404238405Sjkim	call	_bsaes_encrypt8_bitslice
1405238405Sjkim
1406238405Sjkim	subq	$8,%r14
1407238405Sjkim	jc	.Lctr_enc_loop_done
1408238405Sjkim
1409238405Sjkim	movdqu	0(%r12),%xmm7
1410238405Sjkim	movdqu	16(%r12),%xmm8
1411238405Sjkim	movdqu	32(%r12),%xmm9
1412238405Sjkim	movdqu	48(%r12),%xmm10
1413238405Sjkim	movdqu	64(%r12),%xmm11
1414238405Sjkim	movdqu	80(%r12),%xmm12
1415238405Sjkim	movdqu	96(%r12),%xmm13
1416238405Sjkim	movdqu	112(%r12),%xmm14
1417238405Sjkim	leaq	128(%r12),%r12
1418238405Sjkim	pxor	%xmm15,%xmm7
1419238405Sjkim	movdqa	32(%rbp),%xmm15
1420238405Sjkim	pxor	%xmm8,%xmm0
1421238405Sjkim	movdqu	%xmm7,0(%r13)
1422238405Sjkim	pxor	%xmm9,%xmm3
1423238405Sjkim	movdqu	%xmm0,16(%r13)
1424238405Sjkim	pxor	%xmm10,%xmm5
1425238405Sjkim	movdqu	%xmm3,32(%r13)
1426238405Sjkim	pxor	%xmm11,%xmm2
1427238405Sjkim	movdqu	%xmm5,48(%r13)
1428238405Sjkim	pxor	%xmm12,%xmm6
1429238405Sjkim	movdqu	%xmm2,64(%r13)
1430238405Sjkim	pxor	%xmm13,%xmm1
1431238405Sjkim	movdqu	%xmm6,80(%r13)
1432238405Sjkim	pxor	%xmm14,%xmm4
1433238405Sjkim	movdqu	%xmm1,96(%r13)
1434238405Sjkim	leaq	.LADD1(%rip),%r11
1435238405Sjkim	movdqu	%xmm4,112(%r13)
1436238405Sjkim	leaq	128(%r13),%r13
1437238405Sjkim	paddd	112(%r11),%xmm15
1438238405Sjkim	jnz	.Lctr_enc_loop
1439238405Sjkim
1440238405Sjkim	jmp	.Lctr_enc_done
1441238405Sjkim.align	16
1442238405Sjkim.Lctr_enc_loop_done:
1443238405Sjkim	addq	$8,%r14
1444238405Sjkim	movdqu	0(%r12),%xmm7
1445238405Sjkim	pxor	%xmm7,%xmm15
1446238405Sjkim	movdqu	%xmm15,0(%r13)
1447238405Sjkim	cmpq	$2,%r14
1448238405Sjkim	jb	.Lctr_enc_done
1449238405Sjkim	movdqu	16(%r12),%xmm8
1450238405Sjkim	pxor	%xmm8,%xmm0
1451238405Sjkim	movdqu	%xmm0,16(%r13)
1452238405Sjkim	je	.Lctr_enc_done
1453238405Sjkim	movdqu	32(%r12),%xmm9
1454238405Sjkim	pxor	%xmm9,%xmm3
1455238405Sjkim	movdqu	%xmm3,32(%r13)
1456238405Sjkim	cmpq	$4,%r14
1457238405Sjkim	jb	.Lctr_enc_done
1458238405Sjkim	movdqu	48(%r12),%xmm10
1459238405Sjkim	pxor	%xmm10,%xmm5
1460238405Sjkim	movdqu	%xmm5,48(%r13)
1461238405Sjkim	je	.Lctr_enc_done
1462238405Sjkim	movdqu	64(%r12),%xmm11
1463238405Sjkim	pxor	%xmm11,%xmm2
1464238405Sjkim	movdqu	%xmm2,64(%r13)
1465238405Sjkim	cmpq	$6,%r14
1466238405Sjkim	jb	.Lctr_enc_done
1467238405Sjkim	movdqu	80(%r12),%xmm12
1468238405Sjkim	pxor	%xmm12,%xmm6
1469238405Sjkim	movdqu	%xmm6,80(%r13)
1470238405Sjkim	je	.Lctr_enc_done
1471238405Sjkim	movdqu	96(%r12),%xmm13
1472238405Sjkim	pxor	%xmm13,%xmm1
1473238405Sjkim	movdqu	%xmm1,96(%r13)
1474238405Sjkim	jmp	.Lctr_enc_done
1475238405Sjkim
1476238405Sjkim.align	16
1477238405Sjkim.Lctr_enc_short:
1478238405Sjkim	leaq	32(%rbp),%rdi
1479238405Sjkim	leaq	48(%rbp),%rsi
1480238405Sjkim	leaq	(%r15),%rdx
1481238405Sjkim	call	asm_AES_encrypt
1482238405Sjkim	movdqu	(%r12),%xmm0
1483238405Sjkim	leaq	16(%r12),%r12
1484238405Sjkim	movl	44(%rbp),%eax
1485238405Sjkim	bswapl	%eax
1486238405Sjkim	pxor	48(%rbp),%xmm0
1487238405Sjkim	incl	%eax
1488238405Sjkim	movdqu	%xmm0,(%r13)
1489238405Sjkim	bswapl	%eax
1490238405Sjkim	leaq	16(%r13),%r13
1491238405Sjkim	movl	%eax,44(%rsp)
1492238405Sjkim	decq	%r14
1493238405Sjkim	jnz	.Lctr_enc_short
1494238405Sjkim
1495238405Sjkim.Lctr_enc_done:
1496238405Sjkim	leaq	(%rsp),%rax
1497238405Sjkim	pxor	%xmm0,%xmm0
1498238405Sjkim.Lctr_enc_bzero:
1499238405Sjkim	movdqa	%xmm0,0(%rax)
1500238405Sjkim	movdqa	%xmm0,16(%rax)
1501238405Sjkim	leaq	32(%rax),%rax
1502238405Sjkim	cmpq	%rax,%rbp
1503238405Sjkim	ja	.Lctr_enc_bzero
1504238405Sjkim
1505238405Sjkim	leaq	(%rbp),%rsp
1506238405Sjkim	movq	72(%rsp),%r15
1507238405Sjkim	movq	80(%rsp),%r14
1508238405Sjkim	movq	88(%rsp),%r13
1509238405Sjkim	movq	96(%rsp),%r12
1510238405Sjkim	movq	104(%rsp),%rbx
1511238405Sjkim	movq	112(%rsp),%rax
1512238405Sjkim	leaq	120(%rsp),%rsp
1513238405Sjkim	movq	%rax,%rbp
1514238405Sjkim.Lctr_enc_epilogue:
1515238405Sjkim	.byte	0xf3,0xc3
1516238405Sjkim.size	bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks
1517238405Sjkim.globl	bsaes_xts_encrypt
1518238405Sjkim.type	bsaes_xts_encrypt,@function
1519238405Sjkim.align	16
1520238405Sjkimbsaes_xts_encrypt:
1521238405Sjkim	movq	%rsp,%rax
1522238405Sjkim.Lxts_enc_prologue:
1523238405Sjkim	pushq	%rbp
1524238405Sjkim	pushq	%rbx
1525238405Sjkim	pushq	%r12
1526238405Sjkim	pushq	%r13
1527238405Sjkim	pushq	%r14
1528238405Sjkim	pushq	%r15
1529238405Sjkim	leaq	-72(%rsp),%rsp
1530238405Sjkim	movq	%rsp,%rbp
1531238405Sjkim	movq	%rdi,%r12
1532238405Sjkim	movq	%rsi,%r13
1533238405Sjkim	movq	%rdx,%r14
1534238405Sjkim	movq	%rcx,%r15
1535238405Sjkim
1536238405Sjkim	leaq	(%r9),%rdi
1537238405Sjkim	leaq	32(%rbp),%rsi
1538238405Sjkim	leaq	(%r8),%rdx
1539238405Sjkim	call	asm_AES_encrypt
1540238405Sjkim
1541238405Sjkim	movl	240(%r15),%eax
1542238405Sjkim	movq	%r14,%rbx
1543238405Sjkim
1544238405Sjkim	movl	%eax,%edx
1545238405Sjkim	shlq	$7,%rax
1546238405Sjkim	subq	$96,%rax
1547238405Sjkim	subq	%rax,%rsp
1548238405Sjkim
1549238405Sjkim	movq	%rsp,%rax
1550238405Sjkim	movq	%r15,%rcx
1551238405Sjkim	movl	%edx,%r10d
1552238405Sjkim	call	_bsaes_key_convert
1553238405Sjkim	pxor	%xmm6,%xmm7
1554238405Sjkim	movdqa	%xmm7,(%rax)
1555238405Sjkim
1556238405Sjkim	andq	$-16,%r14
1557238405Sjkim	subq	$128,%rsp
1558238405Sjkim	movdqa	32(%rbp),%xmm6
1559238405Sjkim
1560238405Sjkim	pxor	%xmm14,%xmm14
1561238405Sjkim	movdqa	.Lxts_magic(%rip),%xmm12
1562238405Sjkim	pcmpgtd	%xmm6,%xmm14
1563238405Sjkim
1564238405Sjkim	subq	$128,%r14
1565238405Sjkim	jc	.Lxts_enc_short
1566238405Sjkim	jmp	.Lxts_enc_loop
1567238405Sjkim
1568238405Sjkim.align	16
1569238405Sjkim.Lxts_enc_loop:
1570238405Sjkim	pshufd	$19,%xmm14,%xmm13
1571238405Sjkim	pxor	%xmm14,%xmm14
1572238405Sjkim	movdqa	%xmm6,%xmm15
1573238405Sjkim	movdqa	%xmm6,0(%rsp)
1574238405Sjkim	paddq	%xmm6,%xmm6
1575238405Sjkim	pand	%xmm12,%xmm13
1576238405Sjkim	pcmpgtd	%xmm6,%xmm14
1577238405Sjkim	pxor	%xmm13,%xmm6
1578238405Sjkim	pshufd	$19,%xmm14,%xmm13
1579238405Sjkim	pxor	%xmm14,%xmm14
1580238405Sjkim	movdqa	%xmm6,%xmm0
1581238405Sjkim	movdqa	%xmm6,16(%rsp)
1582238405Sjkim	paddq	%xmm6,%xmm6
1583238405Sjkim	pand	%xmm12,%xmm13
1584238405Sjkim	pcmpgtd	%xmm6,%xmm14
1585238405Sjkim	pxor	%xmm13,%xmm6
1586238405Sjkim	movdqu	0(%r12),%xmm7
1587238405Sjkim	pshufd	$19,%xmm14,%xmm13
1588238405Sjkim	pxor	%xmm14,%xmm14
1589238405Sjkim	movdqa	%xmm6,%xmm1
1590238405Sjkim	movdqa	%xmm6,32(%rsp)
1591238405Sjkim	paddq	%xmm6,%xmm6
1592238405Sjkim	pand	%xmm12,%xmm13
1593238405Sjkim	pcmpgtd	%xmm6,%xmm14
1594238405Sjkim	pxor	%xmm13,%xmm6
1595238405Sjkim	movdqu	16(%r12),%xmm8
1596238405Sjkim	pxor	%xmm7,%xmm15
1597238405Sjkim	pshufd	$19,%xmm14,%xmm13
1598238405Sjkim	pxor	%xmm14,%xmm14
1599238405Sjkim	movdqa	%xmm6,%xmm2
1600238405Sjkim	movdqa	%xmm6,48(%rsp)
1601238405Sjkim	paddq	%xmm6,%xmm6
1602238405Sjkim	pand	%xmm12,%xmm13
1603238405Sjkim	pcmpgtd	%xmm6,%xmm14
1604238405Sjkim	pxor	%xmm13,%xmm6
1605238405Sjkim	movdqu	32(%r12),%xmm9
1606238405Sjkim	pxor	%xmm8,%xmm0
1607238405Sjkim	pshufd	$19,%xmm14,%xmm13
1608238405Sjkim	pxor	%xmm14,%xmm14
1609238405Sjkim	movdqa	%xmm6,%xmm3
1610238405Sjkim	movdqa	%xmm6,64(%rsp)
1611238405Sjkim	paddq	%xmm6,%xmm6
1612238405Sjkim	pand	%xmm12,%xmm13
1613238405Sjkim	pcmpgtd	%xmm6,%xmm14
1614238405Sjkim	pxor	%xmm13,%xmm6
1615238405Sjkim	movdqu	48(%r12),%xmm10
1616238405Sjkim	pxor	%xmm9,%xmm1
1617238405Sjkim	pshufd	$19,%xmm14,%xmm13
1618238405Sjkim	pxor	%xmm14,%xmm14
1619238405Sjkim	movdqa	%xmm6,%xmm4
1620238405Sjkim	movdqa	%xmm6,80(%rsp)
1621238405Sjkim	paddq	%xmm6,%xmm6
1622238405Sjkim	pand	%xmm12,%xmm13
1623238405Sjkim	pcmpgtd	%xmm6,%xmm14
1624238405Sjkim	pxor	%xmm13,%xmm6
1625238405Sjkim	movdqu	64(%r12),%xmm11
1626238405Sjkim	pxor	%xmm10,%xmm2
1627238405Sjkim	pshufd	$19,%xmm14,%xmm13
1628238405Sjkim	pxor	%xmm14,%xmm14
1629238405Sjkim	movdqa	%xmm6,%xmm5
1630238405Sjkim	movdqa	%xmm6,96(%rsp)
1631238405Sjkim	paddq	%xmm6,%xmm6
1632238405Sjkim	pand	%xmm12,%xmm13
1633238405Sjkim	pcmpgtd	%xmm6,%xmm14
1634238405Sjkim	pxor	%xmm13,%xmm6
1635238405Sjkim	movdqu	80(%r12),%xmm12
1636238405Sjkim	pxor	%xmm11,%xmm3
1637238405Sjkim	movdqu	96(%r12),%xmm13
1638238405Sjkim	pxor	%xmm12,%xmm4
1639238405Sjkim	movdqu	112(%r12),%xmm14
1640238405Sjkim	leaq	128(%r12),%r12
1641238405Sjkim	movdqa	%xmm6,112(%rsp)
1642238405Sjkim	pxor	%xmm13,%xmm5
1643238405Sjkim	leaq	128(%rsp),%rax
1644238405Sjkim	pxor	%xmm14,%xmm6
1645238405Sjkim	movl	%edx,%r10d
1646238405Sjkim
1647238405Sjkim	call	_bsaes_encrypt8
1648238405Sjkim
1649238405Sjkim	pxor	0(%rsp),%xmm15
1650238405Sjkim	pxor	16(%rsp),%xmm0
1651238405Sjkim	movdqu	%xmm15,0(%r13)
1652238405Sjkim	pxor	32(%rsp),%xmm3
1653238405Sjkim	movdqu	%xmm0,16(%r13)
1654238405Sjkim	pxor	48(%rsp),%xmm5
1655238405Sjkim	movdqu	%xmm3,32(%r13)
1656238405Sjkim	pxor	64(%rsp),%xmm2
1657238405Sjkim	movdqu	%xmm5,48(%r13)
1658238405Sjkim	pxor	80(%rsp),%xmm6
1659238405Sjkim	movdqu	%xmm2,64(%r13)
1660238405Sjkim	pxor	96(%rsp),%xmm1
1661238405Sjkim	movdqu	%xmm6,80(%r13)
1662238405Sjkim	pxor	112(%rsp),%xmm4
1663238405Sjkim	movdqu	%xmm1,96(%r13)
1664238405Sjkim	movdqu	%xmm4,112(%r13)
1665238405Sjkim	leaq	128(%r13),%r13
1666238405Sjkim
1667238405Sjkim	movdqa	112(%rsp),%xmm6
1668238405Sjkim	pxor	%xmm14,%xmm14
1669238405Sjkim	movdqa	.Lxts_magic(%rip),%xmm12
1670238405Sjkim	pcmpgtd	%xmm6,%xmm14
1671238405Sjkim	pshufd	$19,%xmm14,%xmm13
1672238405Sjkim	pxor	%xmm14,%xmm14
1673238405Sjkim	paddq	%xmm6,%xmm6
1674238405Sjkim	pand	%xmm12,%xmm13
1675238405Sjkim	pcmpgtd	%xmm6,%xmm14
1676238405Sjkim	pxor	%xmm13,%xmm6
1677238405Sjkim
1678238405Sjkim	subq	$128,%r14
1679238405Sjkim	jnc	.Lxts_enc_loop
1680238405Sjkim
1681238405Sjkim.Lxts_enc_short:
1682238405Sjkim	addq	$128,%r14
1683238405Sjkim	jz	.Lxts_enc_done
1684238405Sjkim	pshufd	$19,%xmm14,%xmm13
1685238405Sjkim	pxor	%xmm14,%xmm14
1686238405Sjkim	movdqa	%xmm6,%xmm15
1687238405Sjkim	movdqa	%xmm6,0(%rsp)
1688238405Sjkim	paddq	%xmm6,%xmm6
1689238405Sjkim	pand	%xmm12,%xmm13
1690238405Sjkim	pcmpgtd	%xmm6,%xmm14
1691238405Sjkim	pxor	%xmm13,%xmm6
1692238405Sjkim	pshufd	$19,%xmm14,%xmm13
1693238405Sjkim	pxor	%xmm14,%xmm14
1694238405Sjkim	movdqa	%xmm6,%xmm0
1695238405Sjkim	movdqa	%xmm6,16(%rsp)
1696238405Sjkim	paddq	%xmm6,%xmm6
1697238405Sjkim	pand	%xmm12,%xmm13
1698238405Sjkim	pcmpgtd	%xmm6,%xmm14
1699238405Sjkim	pxor	%xmm13,%xmm6
1700238405Sjkim	movdqu	0(%r12),%xmm7
1701238405Sjkim	cmpq	$16,%r14
1702238405Sjkim	je	.Lxts_enc_1
1703238405Sjkim	pshufd	$19,%xmm14,%xmm13
1704238405Sjkim	pxor	%xmm14,%xmm14
1705238405Sjkim	movdqa	%xmm6,%xmm1
1706238405Sjkim	movdqa	%xmm6,32(%rsp)
1707238405Sjkim	paddq	%xmm6,%xmm6
1708238405Sjkim	pand	%xmm12,%xmm13
1709238405Sjkim	pcmpgtd	%xmm6,%xmm14
1710238405Sjkim	pxor	%xmm13,%xmm6
1711238405Sjkim	movdqu	16(%r12),%xmm8
1712238405Sjkim	cmpq	$32,%r14
1713238405Sjkim	je	.Lxts_enc_2
1714238405Sjkim	pxor	%xmm7,%xmm15
1715238405Sjkim	pshufd	$19,%xmm14,%xmm13
1716238405Sjkim	pxor	%xmm14,%xmm14
1717238405Sjkim	movdqa	%xmm6,%xmm2
1718238405Sjkim	movdqa	%xmm6,48(%rsp)
1719238405Sjkim	paddq	%xmm6,%xmm6
1720238405Sjkim	pand	%xmm12,%xmm13
1721238405Sjkim	pcmpgtd	%xmm6,%xmm14
1722238405Sjkim	pxor	%xmm13,%xmm6
1723238405Sjkim	movdqu	32(%r12),%xmm9
1724238405Sjkim	cmpq	$48,%r14
1725238405Sjkim	je	.Lxts_enc_3
1726238405Sjkim	pxor	%xmm8,%xmm0
1727238405Sjkim	pshufd	$19,%xmm14,%xmm13
1728238405Sjkim	pxor	%xmm14,%xmm14
1729238405Sjkim	movdqa	%xmm6,%xmm3
1730238405Sjkim	movdqa	%xmm6,64(%rsp)
1731238405Sjkim	paddq	%xmm6,%xmm6
1732238405Sjkim	pand	%xmm12,%xmm13
1733238405Sjkim	pcmpgtd	%xmm6,%xmm14
1734238405Sjkim	pxor	%xmm13,%xmm6
1735238405Sjkim	movdqu	48(%r12),%xmm10
1736238405Sjkim	cmpq	$64,%r14
1737238405Sjkim	je	.Lxts_enc_4
1738238405Sjkim	pxor	%xmm9,%xmm1
1739238405Sjkim	pshufd	$19,%xmm14,%xmm13
1740238405Sjkim	pxor	%xmm14,%xmm14
1741238405Sjkim	movdqa	%xmm6,%xmm4
1742238405Sjkim	movdqa	%xmm6,80(%rsp)
1743238405Sjkim	paddq	%xmm6,%xmm6
1744238405Sjkim	pand	%xmm12,%xmm13
1745238405Sjkim	pcmpgtd	%xmm6,%xmm14
1746238405Sjkim	pxor	%xmm13,%xmm6
1747238405Sjkim	movdqu	64(%r12),%xmm11
1748238405Sjkim	cmpq	$80,%r14
1749238405Sjkim	je	.Lxts_enc_5
1750238405Sjkim	pxor	%xmm10,%xmm2
1751238405Sjkim	pshufd	$19,%xmm14,%xmm13
1752238405Sjkim	pxor	%xmm14,%xmm14
1753238405Sjkim	movdqa	%xmm6,%xmm5
1754238405Sjkim	movdqa	%xmm6,96(%rsp)
1755238405Sjkim	paddq	%xmm6,%xmm6
1756238405Sjkim	pand	%xmm12,%xmm13
1757238405Sjkim	pcmpgtd	%xmm6,%xmm14
1758238405Sjkim	pxor	%xmm13,%xmm6
1759238405Sjkim	movdqu	80(%r12),%xmm12
1760238405Sjkim	cmpq	$96,%r14
1761238405Sjkim	je	.Lxts_enc_6
1762238405Sjkim	pxor	%xmm11,%xmm3
1763238405Sjkim	movdqu	96(%r12),%xmm13
1764238405Sjkim	pxor	%xmm12,%xmm4
1765238405Sjkim	movdqa	%xmm6,112(%rsp)
1766238405Sjkim	leaq	112(%r12),%r12
1767238405Sjkim	pxor	%xmm13,%xmm5
1768238405Sjkim	leaq	128(%rsp),%rax
1769238405Sjkim	movl	%edx,%r10d
1770238405Sjkim
1771238405Sjkim	call	_bsaes_encrypt8
1772238405Sjkim
1773238405Sjkim	pxor	0(%rsp),%xmm15
1774238405Sjkim	pxor	16(%rsp),%xmm0
1775238405Sjkim	movdqu	%xmm15,0(%r13)
1776238405Sjkim	pxor	32(%rsp),%xmm3
1777238405Sjkim	movdqu	%xmm0,16(%r13)
1778238405Sjkim	pxor	48(%rsp),%xmm5
1779238405Sjkim	movdqu	%xmm3,32(%r13)
1780238405Sjkim	pxor	64(%rsp),%xmm2
1781238405Sjkim	movdqu	%xmm5,48(%r13)
1782238405Sjkim	pxor	80(%rsp),%xmm6
1783238405Sjkim	movdqu	%xmm2,64(%r13)
1784238405Sjkim	pxor	96(%rsp),%xmm1
1785238405Sjkim	movdqu	%xmm6,80(%r13)
1786238405Sjkim	movdqu	%xmm1,96(%r13)
1787238405Sjkim	leaq	112(%r13),%r13
1788238405Sjkim
1789238405Sjkim	movdqa	112(%rsp),%xmm6
1790238405Sjkim	jmp	.Lxts_enc_done
1791238405Sjkim.align	16
1792238405Sjkim.Lxts_enc_6:
1793238405Sjkim	pxor	%xmm11,%xmm3
1794238405Sjkim	leaq	96(%r12),%r12
1795238405Sjkim	pxor	%xmm12,%xmm4
1796238405Sjkim	leaq	128(%rsp),%rax
1797238405Sjkim	movl	%edx,%r10d
1798238405Sjkim
1799238405Sjkim	call	_bsaes_encrypt8
1800238405Sjkim
1801238405Sjkim	pxor	0(%rsp),%xmm15
1802238405Sjkim	pxor	16(%rsp),%xmm0
1803238405Sjkim	movdqu	%xmm15,0(%r13)
1804238405Sjkim	pxor	32(%rsp),%xmm3
1805238405Sjkim	movdqu	%xmm0,16(%r13)
1806238405Sjkim	pxor	48(%rsp),%xmm5
1807238405Sjkim	movdqu	%xmm3,32(%r13)
1808238405Sjkim	pxor	64(%rsp),%xmm2
1809238405Sjkim	movdqu	%xmm5,48(%r13)
1810238405Sjkim	pxor	80(%rsp),%xmm6
1811238405Sjkim	movdqu	%xmm2,64(%r13)
1812238405Sjkim	movdqu	%xmm6,80(%r13)
1813238405Sjkim	leaq	96(%r13),%r13
1814238405Sjkim
1815238405Sjkim	movdqa	96(%rsp),%xmm6
1816238405Sjkim	jmp	.Lxts_enc_done
1817238405Sjkim.align	16
1818238405Sjkim.Lxts_enc_5:
1819238405Sjkim	pxor	%xmm10,%xmm2
1820238405Sjkim	leaq	80(%r12),%r12
1821238405Sjkim	pxor	%xmm11,%xmm3
1822238405Sjkim	leaq	128(%rsp),%rax
1823238405Sjkim	movl	%edx,%r10d
1824238405Sjkim
1825238405Sjkim	call	_bsaes_encrypt8
1826238405Sjkim
1827238405Sjkim	pxor	0(%rsp),%xmm15
1828238405Sjkim	pxor	16(%rsp),%xmm0
1829238405Sjkim	movdqu	%xmm15,0(%r13)
1830238405Sjkim	pxor	32(%rsp),%xmm3
1831238405Sjkim	movdqu	%xmm0,16(%r13)
1832238405Sjkim	pxor	48(%rsp),%xmm5
1833238405Sjkim	movdqu	%xmm3,32(%r13)
1834238405Sjkim	pxor	64(%rsp),%xmm2
1835238405Sjkim	movdqu	%xmm5,48(%r13)
1836238405Sjkim	movdqu	%xmm2,64(%r13)
1837238405Sjkim	leaq	80(%r13),%r13
1838238405Sjkim
1839238405Sjkim	movdqa	80(%rsp),%xmm6
1840238405Sjkim	jmp	.Lxts_enc_done
1841238405Sjkim.align	16
1842238405Sjkim.Lxts_enc_4:
1843238405Sjkim	pxor	%xmm9,%xmm1
1844238405Sjkim	leaq	64(%r12),%r12
1845238405Sjkim	pxor	%xmm10,%xmm2
1846238405Sjkim	leaq	128(%rsp),%rax
1847238405Sjkim	movl	%edx,%r10d
1848238405Sjkim
1849238405Sjkim	call	_bsaes_encrypt8
1850238405Sjkim
1851238405Sjkim	pxor	0(%rsp),%xmm15
1852238405Sjkim	pxor	16(%rsp),%xmm0
1853238405Sjkim	movdqu	%xmm15,0(%r13)
1854238405Sjkim	pxor	32(%rsp),%xmm3
1855238405Sjkim	movdqu	%xmm0,16(%r13)
1856238405Sjkim	pxor	48(%rsp),%xmm5
1857238405Sjkim	movdqu	%xmm3,32(%r13)
1858238405Sjkim	movdqu	%xmm5,48(%r13)
1859238405Sjkim	leaq	64(%r13),%r13
1860238405Sjkim
1861238405Sjkim	movdqa	64(%rsp),%xmm6
1862238405Sjkim	jmp	.Lxts_enc_done
1863238405Sjkim.align	16
1864238405Sjkim.Lxts_enc_3:
1865238405Sjkim	pxor	%xmm8,%xmm0
1866238405Sjkim	leaq	48(%r12),%r12
1867238405Sjkim	pxor	%xmm9,%xmm1
1868238405Sjkim	leaq	128(%rsp),%rax
1869238405Sjkim	movl	%edx,%r10d
1870238405Sjkim
1871238405Sjkim	call	_bsaes_encrypt8
1872238405Sjkim
1873238405Sjkim	pxor	0(%rsp),%xmm15
1874238405Sjkim	pxor	16(%rsp),%xmm0
1875238405Sjkim	movdqu	%xmm15,0(%r13)
1876238405Sjkim	pxor	32(%rsp),%xmm3
1877238405Sjkim	movdqu	%xmm0,16(%r13)
1878238405Sjkim	movdqu	%xmm3,32(%r13)
1879238405Sjkim	leaq	48(%r13),%r13
1880238405Sjkim
1881238405Sjkim	movdqa	48(%rsp),%xmm6
1882238405Sjkim	jmp	.Lxts_enc_done
1883238405Sjkim.align	16
1884238405Sjkim.Lxts_enc_2:
1885238405Sjkim	pxor	%xmm7,%xmm15
1886238405Sjkim	leaq	32(%r12),%r12
1887238405Sjkim	pxor	%xmm8,%xmm0
1888238405Sjkim	leaq	128(%rsp),%rax
1889238405Sjkim	movl	%edx,%r10d
1890238405Sjkim
1891238405Sjkim	call	_bsaes_encrypt8
1892238405Sjkim
1893238405Sjkim	pxor	0(%rsp),%xmm15
1894238405Sjkim	pxor	16(%rsp),%xmm0
1895238405Sjkim	movdqu	%xmm15,0(%r13)
1896238405Sjkim	movdqu	%xmm0,16(%r13)
1897238405Sjkim	leaq	32(%r13),%r13
1898238405Sjkim
1899238405Sjkim	movdqa	32(%rsp),%xmm6
1900238405Sjkim	jmp	.Lxts_enc_done
1901238405Sjkim.align	16
1902238405Sjkim.Lxts_enc_1:
1903238405Sjkim	pxor	%xmm15,%xmm7
1904238405Sjkim	leaq	16(%r12),%r12
1905238405Sjkim	movdqa	%xmm7,32(%rbp)
1906238405Sjkim	leaq	32(%rbp),%rdi
1907238405Sjkim	leaq	32(%rbp),%rsi
1908238405Sjkim	leaq	(%r15),%rdx
1909238405Sjkim	call	asm_AES_encrypt
1910238405Sjkim	pxor	32(%rbp),%xmm15
1911238405Sjkim
1912238405Sjkim
1913238405Sjkim
1914238405Sjkim
1915238405Sjkim
1916238405Sjkim	movdqu	%xmm15,0(%r13)
1917238405Sjkim	leaq	16(%r13),%r13
1918238405Sjkim
1919238405Sjkim	movdqa	16(%rsp),%xmm6
1920238405Sjkim
1921238405Sjkim.Lxts_enc_done:
1922238405Sjkim	andl	$15,%ebx
1923238405Sjkim	jz	.Lxts_enc_ret
1924238405Sjkim	movq	%r13,%rdx
1925238405Sjkim
1926238405Sjkim.Lxts_enc_steal:
1927238405Sjkim	movzbl	(%r12),%eax
1928238405Sjkim	movzbl	-16(%rdx),%ecx
1929238405Sjkim	leaq	1(%r12),%r12
1930238405Sjkim	movb	%al,-16(%rdx)
1931238405Sjkim	movb	%cl,0(%rdx)
1932238405Sjkim	leaq	1(%rdx),%rdx
1933238405Sjkim	subl	$1,%ebx
1934238405Sjkim	jnz	.Lxts_enc_steal
1935238405Sjkim
1936238405Sjkim	movdqu	-16(%r13),%xmm15
1937238405Sjkim	leaq	32(%rbp),%rdi
1938238405Sjkim	pxor	%xmm6,%xmm15
1939238405Sjkim	leaq	32(%rbp),%rsi
1940238405Sjkim	movdqa	%xmm15,32(%rbp)
1941238405Sjkim	leaq	(%r15),%rdx
1942238405Sjkim	call	asm_AES_encrypt
1943238405Sjkim	pxor	32(%rbp),%xmm6
1944238405Sjkim	movdqu	%xmm6,-16(%r13)
1945238405Sjkim
1946238405Sjkim.Lxts_enc_ret:
1947238405Sjkim	leaq	(%rsp),%rax
1948238405Sjkim	pxor	%xmm0,%xmm0
1949238405Sjkim.Lxts_enc_bzero:
1950238405Sjkim	movdqa	%xmm0,0(%rax)
1951238405Sjkim	movdqa	%xmm0,16(%rax)
1952238405Sjkim	leaq	32(%rax),%rax
1953238405Sjkim	cmpq	%rax,%rbp
1954238405Sjkim	ja	.Lxts_enc_bzero
1955238405Sjkim
1956238405Sjkim	leaq	(%rbp),%rsp
1957238405Sjkim	movq	72(%rsp),%r15
1958238405Sjkim	movq	80(%rsp),%r14
1959238405Sjkim	movq	88(%rsp),%r13
1960238405Sjkim	movq	96(%rsp),%r12
1961238405Sjkim	movq	104(%rsp),%rbx
1962238405Sjkim	movq	112(%rsp),%rax
1963238405Sjkim	leaq	120(%rsp),%rsp
1964238405Sjkim	movq	%rax,%rbp
1965238405Sjkim.Lxts_enc_epilogue:
1966238405Sjkim	.byte	0xf3,0xc3
1967238405Sjkim.size	bsaes_xts_encrypt,.-bsaes_xts_encrypt
1968238405Sjkim
1969238405Sjkim.globl	bsaes_xts_decrypt
1970238405Sjkim.type	bsaes_xts_decrypt,@function
1971238405Sjkim.align	16
1972238405Sjkimbsaes_xts_decrypt:
1973238405Sjkim	movq	%rsp,%rax
1974238405Sjkim.Lxts_dec_prologue:
1975238405Sjkim	pushq	%rbp
1976238405Sjkim	pushq	%rbx
1977238405Sjkim	pushq	%r12
1978238405Sjkim	pushq	%r13
1979238405Sjkim	pushq	%r14
1980238405Sjkim	pushq	%r15
1981238405Sjkim	leaq	-72(%rsp),%rsp
1982238405Sjkim	movq	%rsp,%rbp
1983238405Sjkim	movq	%rdi,%r12
1984238405Sjkim	movq	%rsi,%r13
1985238405Sjkim	movq	%rdx,%r14
1986238405Sjkim	movq	%rcx,%r15
1987238405Sjkim
1988238405Sjkim	leaq	(%r9),%rdi
1989238405Sjkim	leaq	32(%rbp),%rsi
1990238405Sjkim	leaq	(%r8),%rdx
1991238405Sjkim	call	asm_AES_encrypt
1992238405Sjkim
1993238405Sjkim	movl	240(%r15),%eax
1994238405Sjkim	movq	%r14,%rbx
1995238405Sjkim
1996238405Sjkim	movl	%eax,%edx
1997238405Sjkim	shlq	$7,%rax
1998238405Sjkim	subq	$96,%rax
1999238405Sjkim	subq	%rax,%rsp
2000238405Sjkim
2001238405Sjkim	movq	%rsp,%rax
2002238405Sjkim	movq	%r15,%rcx
2003238405Sjkim	movl	%edx,%r10d
2004238405Sjkim	call	_bsaes_key_convert
2005238405Sjkim	pxor	(%rsp),%xmm7
2006238405Sjkim	movdqa	%xmm6,(%rax)
2007238405Sjkim	movdqa	%xmm7,(%rsp)
2008238405Sjkim
2009238405Sjkim	xorl	%eax,%eax
2010238405Sjkim	andq	$-16,%r14
2011238405Sjkim	testl	$15,%ebx
2012238405Sjkim	setnz	%al
2013238405Sjkim	shlq	$4,%rax
2014238405Sjkim	subq	%rax,%r14
2015238405Sjkim
2016238405Sjkim	subq	$128,%rsp
2017238405Sjkim	movdqa	32(%rbp),%xmm6
2018238405Sjkim
2019238405Sjkim	pxor	%xmm14,%xmm14
2020238405Sjkim	movdqa	.Lxts_magic(%rip),%xmm12
2021238405Sjkim	pcmpgtd	%xmm6,%xmm14
2022238405Sjkim
2023238405Sjkim	subq	$128,%r14
2024238405Sjkim	jc	.Lxts_dec_short
2025238405Sjkim	jmp	.Lxts_dec_loop
2026238405Sjkim
2027238405Sjkim.align	16
2028238405Sjkim.Lxts_dec_loop:
2029238405Sjkim	pshufd	$19,%xmm14,%xmm13
2030238405Sjkim	pxor	%xmm14,%xmm14
2031238405Sjkim	movdqa	%xmm6,%xmm15
2032238405Sjkim	movdqa	%xmm6,0(%rsp)
2033238405Sjkim	paddq	%xmm6,%xmm6
2034238405Sjkim	pand	%xmm12,%xmm13
2035238405Sjkim	pcmpgtd	%xmm6,%xmm14
2036238405Sjkim	pxor	%xmm13,%xmm6
2037238405Sjkim	pshufd	$19,%xmm14,%xmm13
2038238405Sjkim	pxor	%xmm14,%xmm14
2039238405Sjkim	movdqa	%xmm6,%xmm0
2040238405Sjkim	movdqa	%xmm6,16(%rsp)
2041238405Sjkim	paddq	%xmm6,%xmm6
2042238405Sjkim	pand	%xmm12,%xmm13
2043238405Sjkim	pcmpgtd	%xmm6,%xmm14
2044238405Sjkim	pxor	%xmm13,%xmm6
2045238405Sjkim	movdqu	0(%r12),%xmm7
2046238405Sjkim	pshufd	$19,%xmm14,%xmm13
2047238405Sjkim	pxor	%xmm14,%xmm14
2048238405Sjkim	movdqa	%xmm6,%xmm1
2049238405Sjkim	movdqa	%xmm6,32(%rsp)
2050238405Sjkim	paddq	%xmm6,%xmm6
2051238405Sjkim	pand	%xmm12,%xmm13
2052238405Sjkim	pcmpgtd	%xmm6,%xmm14
2053238405Sjkim	pxor	%xmm13,%xmm6
2054238405Sjkim	movdqu	16(%r12),%xmm8
2055238405Sjkim	pxor	%xmm7,%xmm15
2056238405Sjkim	pshufd	$19,%xmm14,%xmm13
2057238405Sjkim	pxor	%xmm14,%xmm14
2058238405Sjkim	movdqa	%xmm6,%xmm2
2059238405Sjkim	movdqa	%xmm6,48(%rsp)
2060238405Sjkim	paddq	%xmm6,%xmm6
2061238405Sjkim	pand	%xmm12,%xmm13
2062238405Sjkim	pcmpgtd	%xmm6,%xmm14
2063238405Sjkim	pxor	%xmm13,%xmm6
2064238405Sjkim	movdqu	32(%r12),%xmm9
2065238405Sjkim	pxor	%xmm8,%xmm0
2066238405Sjkim	pshufd	$19,%xmm14,%xmm13
2067238405Sjkim	pxor	%xmm14,%xmm14
2068238405Sjkim	movdqa	%xmm6,%xmm3
2069238405Sjkim	movdqa	%xmm6,64(%rsp)
2070238405Sjkim	paddq	%xmm6,%xmm6
2071238405Sjkim	pand	%xmm12,%xmm13
2072238405Sjkim	pcmpgtd	%xmm6,%xmm14
2073238405Sjkim	pxor	%xmm13,%xmm6
2074238405Sjkim	movdqu	48(%r12),%xmm10
2075238405Sjkim	pxor	%xmm9,%xmm1
2076238405Sjkim	pshufd	$19,%xmm14,%xmm13
2077238405Sjkim	pxor	%xmm14,%xmm14
2078238405Sjkim	movdqa	%xmm6,%xmm4
2079238405Sjkim	movdqa	%xmm6,80(%rsp)
2080238405Sjkim	paddq	%xmm6,%xmm6
2081238405Sjkim	pand	%xmm12,%xmm13
2082238405Sjkim	pcmpgtd	%xmm6,%xmm14
2083238405Sjkim	pxor	%xmm13,%xmm6
2084238405Sjkim	movdqu	64(%r12),%xmm11
2085238405Sjkim	pxor	%xmm10,%xmm2
2086238405Sjkim	pshufd	$19,%xmm14,%xmm13
2087238405Sjkim	pxor	%xmm14,%xmm14
2088238405Sjkim	movdqa	%xmm6,%xmm5
2089238405Sjkim	movdqa	%xmm6,96(%rsp)
2090238405Sjkim	paddq	%xmm6,%xmm6
2091238405Sjkim	pand	%xmm12,%xmm13
2092238405Sjkim	pcmpgtd	%xmm6,%xmm14
2093238405Sjkim	pxor	%xmm13,%xmm6
2094238405Sjkim	movdqu	80(%r12),%xmm12
2095238405Sjkim	pxor	%xmm11,%xmm3
2096238405Sjkim	movdqu	96(%r12),%xmm13
2097238405Sjkim	pxor	%xmm12,%xmm4
2098238405Sjkim	movdqu	112(%r12),%xmm14
2099238405Sjkim	leaq	128(%r12),%r12
2100238405Sjkim	movdqa	%xmm6,112(%rsp)
2101238405Sjkim	pxor	%xmm13,%xmm5
2102238405Sjkim	leaq	128(%rsp),%rax
2103238405Sjkim	pxor	%xmm14,%xmm6
2104238405Sjkim	movl	%edx,%r10d
2105238405Sjkim
2106238405Sjkim	call	_bsaes_decrypt8
2107238405Sjkim
2108238405Sjkim	pxor	0(%rsp),%xmm15
2109238405Sjkim	pxor	16(%rsp),%xmm0
2110238405Sjkim	movdqu	%xmm15,0(%r13)
2111238405Sjkim	pxor	32(%rsp),%xmm5
2112238405Sjkim	movdqu	%xmm0,16(%r13)
2113238405Sjkim	pxor	48(%rsp),%xmm3
2114238405Sjkim	movdqu	%xmm5,32(%r13)
2115238405Sjkim	pxor	64(%rsp),%xmm1
2116238405Sjkim	movdqu	%xmm3,48(%r13)
2117238405Sjkim	pxor	80(%rsp),%xmm6
2118238405Sjkim	movdqu	%xmm1,64(%r13)
2119238405Sjkim	pxor	96(%rsp),%xmm2
2120238405Sjkim	movdqu	%xmm6,80(%r13)
2121238405Sjkim	pxor	112(%rsp),%xmm4
2122238405Sjkim	movdqu	%xmm2,96(%r13)
2123238405Sjkim	movdqu	%xmm4,112(%r13)
2124238405Sjkim	leaq	128(%r13),%r13
2125238405Sjkim
2126238405Sjkim	movdqa	112(%rsp),%xmm6
2127238405Sjkim	pxor	%xmm14,%xmm14
2128238405Sjkim	movdqa	.Lxts_magic(%rip),%xmm12
2129238405Sjkim	pcmpgtd	%xmm6,%xmm14
2130238405Sjkim	pshufd	$19,%xmm14,%xmm13
2131238405Sjkim	pxor	%xmm14,%xmm14
2132238405Sjkim	paddq	%xmm6,%xmm6
2133238405Sjkim	pand	%xmm12,%xmm13
2134238405Sjkim	pcmpgtd	%xmm6,%xmm14
2135238405Sjkim	pxor	%xmm13,%xmm6
2136238405Sjkim
2137238405Sjkim	subq	$128,%r14
2138238405Sjkim	jnc	.Lxts_dec_loop
2139238405Sjkim
2140238405Sjkim.Lxts_dec_short:
2141238405Sjkim	addq	$128,%r14
2142238405Sjkim	jz	.Lxts_dec_done
2143238405Sjkim	pshufd	$19,%xmm14,%xmm13
2144238405Sjkim	pxor	%xmm14,%xmm14
2145238405Sjkim	movdqa	%xmm6,%xmm15
2146238405Sjkim	movdqa	%xmm6,0(%rsp)
2147238405Sjkim	paddq	%xmm6,%xmm6
2148238405Sjkim	pand	%xmm12,%xmm13
2149238405Sjkim	pcmpgtd	%xmm6,%xmm14
2150238405Sjkim	pxor	%xmm13,%xmm6
2151238405Sjkim	pshufd	$19,%xmm14,%xmm13
2152238405Sjkim	pxor	%xmm14,%xmm14
2153238405Sjkim	movdqa	%xmm6,%xmm0
2154238405Sjkim	movdqa	%xmm6,16(%rsp)
2155238405Sjkim	paddq	%xmm6,%xmm6
2156238405Sjkim	pand	%xmm12,%xmm13
2157238405Sjkim	pcmpgtd	%xmm6,%xmm14
2158238405Sjkim	pxor	%xmm13,%xmm6
2159238405Sjkim	movdqu	0(%r12),%xmm7
2160238405Sjkim	cmpq	$16,%r14
2161238405Sjkim	je	.Lxts_dec_1
2162238405Sjkim	pshufd	$19,%xmm14,%xmm13
2163238405Sjkim	pxor	%xmm14,%xmm14
2164238405Sjkim	movdqa	%xmm6,%xmm1
2165238405Sjkim	movdqa	%xmm6,32(%rsp)
2166238405Sjkim	paddq	%xmm6,%xmm6
2167238405Sjkim	pand	%xmm12,%xmm13
2168238405Sjkim	pcmpgtd	%xmm6,%xmm14
2169238405Sjkim	pxor	%xmm13,%xmm6
2170238405Sjkim	movdqu	16(%r12),%xmm8
2171238405Sjkim	cmpq	$32,%r14
2172238405Sjkim	je	.Lxts_dec_2
2173238405Sjkim	pxor	%xmm7,%xmm15
2174238405Sjkim	pshufd	$19,%xmm14,%xmm13
2175238405Sjkim	pxor	%xmm14,%xmm14
2176238405Sjkim	movdqa	%xmm6,%xmm2
2177238405Sjkim	movdqa	%xmm6,48(%rsp)
2178238405Sjkim	paddq	%xmm6,%xmm6
2179238405Sjkim	pand	%xmm12,%xmm13
2180238405Sjkim	pcmpgtd	%xmm6,%xmm14
2181238405Sjkim	pxor	%xmm13,%xmm6
2182238405Sjkim	movdqu	32(%r12),%xmm9
2183238405Sjkim	cmpq	$48,%r14
2184238405Sjkim	je	.Lxts_dec_3
2185238405Sjkim	pxor	%xmm8,%xmm0
2186238405Sjkim	pshufd	$19,%xmm14,%xmm13
2187238405Sjkim	pxor	%xmm14,%xmm14
2188238405Sjkim	movdqa	%xmm6,%xmm3
2189238405Sjkim	movdqa	%xmm6,64(%rsp)
2190238405Sjkim	paddq	%xmm6,%xmm6
2191238405Sjkim	pand	%xmm12,%xmm13
2192238405Sjkim	pcmpgtd	%xmm6,%xmm14
2193238405Sjkim	pxor	%xmm13,%xmm6
2194238405Sjkim	movdqu	48(%r12),%xmm10
2195238405Sjkim	cmpq	$64,%r14
2196238405Sjkim	je	.Lxts_dec_4
2197238405Sjkim	pxor	%xmm9,%xmm1
2198238405Sjkim	pshufd	$19,%xmm14,%xmm13
2199238405Sjkim	pxor	%xmm14,%xmm14
2200238405Sjkim	movdqa	%xmm6,%xmm4
2201238405Sjkim	movdqa	%xmm6,80(%rsp)
2202238405Sjkim	paddq	%xmm6,%xmm6
2203238405Sjkim	pand	%xmm12,%xmm13
2204238405Sjkim	pcmpgtd	%xmm6,%xmm14
2205238405Sjkim	pxor	%xmm13,%xmm6
2206238405Sjkim	movdqu	64(%r12),%xmm11
2207238405Sjkim	cmpq	$80,%r14
2208238405Sjkim	je	.Lxts_dec_5
2209238405Sjkim	pxor	%xmm10,%xmm2
2210238405Sjkim	pshufd	$19,%xmm14,%xmm13
2211238405Sjkim	pxor	%xmm14,%xmm14
2212238405Sjkim	movdqa	%xmm6,%xmm5
2213238405Sjkim	movdqa	%xmm6,96(%rsp)
2214238405Sjkim	paddq	%xmm6,%xmm6
2215238405Sjkim	pand	%xmm12,%xmm13
2216238405Sjkim	pcmpgtd	%xmm6,%xmm14
2217238405Sjkim	pxor	%xmm13,%xmm6
2218238405Sjkim	movdqu	80(%r12),%xmm12
2219238405Sjkim	cmpq	$96,%r14
2220238405Sjkim	je	.Lxts_dec_6
2221238405Sjkim	pxor	%xmm11,%xmm3
2222238405Sjkim	movdqu	96(%r12),%xmm13
2223238405Sjkim	pxor	%xmm12,%xmm4
2224238405Sjkim	movdqa	%xmm6,112(%rsp)
2225238405Sjkim	leaq	112(%r12),%r12
2226238405Sjkim	pxor	%xmm13,%xmm5
2227238405Sjkim	leaq	128(%rsp),%rax
2228238405Sjkim	movl	%edx,%r10d
2229238405Sjkim
2230238405Sjkim	call	_bsaes_decrypt8
2231238405Sjkim
2232238405Sjkim	pxor	0(%rsp),%xmm15
2233238405Sjkim	pxor	16(%rsp),%xmm0
2234238405Sjkim	movdqu	%xmm15,0(%r13)
2235238405Sjkim	pxor	32(%rsp),%xmm5
2236238405Sjkim	movdqu	%xmm0,16(%r13)
2237238405Sjkim	pxor	48(%rsp),%xmm3
2238238405Sjkim	movdqu	%xmm5,32(%r13)
2239238405Sjkim	pxor	64(%rsp),%xmm1
2240238405Sjkim	movdqu	%xmm3,48(%r13)
2241238405Sjkim	pxor	80(%rsp),%xmm6
2242238405Sjkim	movdqu	%xmm1,64(%r13)
2243238405Sjkim	pxor	96(%rsp),%xmm2
2244238405Sjkim	movdqu	%xmm6,80(%r13)
2245238405Sjkim	movdqu	%xmm2,96(%r13)
2246238405Sjkim	leaq	112(%r13),%r13
2247238405Sjkim
2248238405Sjkim	movdqa	112(%rsp),%xmm6
2249238405Sjkim	jmp	.Lxts_dec_done
2250238405Sjkim.align	16
2251238405Sjkim.Lxts_dec_6:
2252238405Sjkim	pxor	%xmm11,%xmm3
2253238405Sjkim	leaq	96(%r12),%r12
2254238405Sjkim	pxor	%xmm12,%xmm4
2255238405Sjkim	leaq	128(%rsp),%rax
2256238405Sjkim	movl	%edx,%r10d
2257238405Sjkim
2258238405Sjkim	call	_bsaes_decrypt8
2259238405Sjkim
2260238405Sjkim	pxor	0(%rsp),%xmm15
2261238405Sjkim	pxor	16(%rsp),%xmm0
2262238405Sjkim	movdqu	%xmm15,0(%r13)
2263238405Sjkim	pxor	32(%rsp),%xmm5
2264238405Sjkim	movdqu	%xmm0,16(%r13)
2265238405Sjkim	pxor	48(%rsp),%xmm3
2266238405Sjkim	movdqu	%xmm5,32(%r13)
2267238405Sjkim	pxor	64(%rsp),%xmm1
2268238405Sjkim	movdqu	%xmm3,48(%r13)
2269238405Sjkim	pxor	80(%rsp),%xmm6
2270238405Sjkim	movdqu	%xmm1,64(%r13)
2271238405Sjkim	movdqu	%xmm6,80(%r13)
2272238405Sjkim	leaq	96(%r13),%r13
2273238405Sjkim
2274238405Sjkim	movdqa	96(%rsp),%xmm6
2275238405Sjkim	jmp	.Lxts_dec_done
2276238405Sjkim.align	16
2277238405Sjkim.Lxts_dec_5:
2278238405Sjkim	pxor	%xmm10,%xmm2
2279238405Sjkim	leaq	80(%r12),%r12
2280238405Sjkim	pxor	%xmm11,%xmm3
2281238405Sjkim	leaq	128(%rsp),%rax
2282238405Sjkim	movl	%edx,%r10d
2283238405Sjkim
2284238405Sjkim	call	_bsaes_decrypt8
2285238405Sjkim
2286238405Sjkim	pxor	0(%rsp),%xmm15
2287238405Sjkim	pxor	16(%rsp),%xmm0
2288238405Sjkim	movdqu	%xmm15,0(%r13)
2289238405Sjkim	pxor	32(%rsp),%xmm5
2290238405Sjkim	movdqu	%xmm0,16(%r13)
2291238405Sjkim	pxor	48(%rsp),%xmm3
2292238405Sjkim	movdqu	%xmm5,32(%r13)
2293238405Sjkim	pxor	64(%rsp),%xmm1
2294238405Sjkim	movdqu	%xmm3,48(%r13)
2295238405Sjkim	movdqu	%xmm1,64(%r13)
2296238405Sjkim	leaq	80(%r13),%r13
2297238405Sjkim
2298238405Sjkim	movdqa	80(%rsp),%xmm6
2299238405Sjkim	jmp	.Lxts_dec_done
2300238405Sjkim.align	16
2301238405Sjkim.Lxts_dec_4:
2302238405Sjkim	pxor	%xmm9,%xmm1
2303238405Sjkim	leaq	64(%r12),%r12
2304238405Sjkim	pxor	%xmm10,%xmm2
2305238405Sjkim	leaq	128(%rsp),%rax
2306238405Sjkim	movl	%edx,%r10d
2307238405Sjkim
2308238405Sjkim	call	_bsaes_decrypt8
2309238405Sjkim
2310238405Sjkim	pxor	0(%rsp),%xmm15
2311238405Sjkim	pxor	16(%rsp),%xmm0
2312238405Sjkim	movdqu	%xmm15,0(%r13)
2313238405Sjkim	pxor	32(%rsp),%xmm5
2314238405Sjkim	movdqu	%xmm0,16(%r13)
2315238405Sjkim	pxor	48(%rsp),%xmm3
2316238405Sjkim	movdqu	%xmm5,32(%r13)
2317238405Sjkim	movdqu	%xmm3,48(%r13)
2318238405Sjkim	leaq	64(%r13),%r13
2319238405Sjkim
2320238405Sjkim	movdqa	64(%rsp),%xmm6
2321238405Sjkim	jmp	.Lxts_dec_done
2322238405Sjkim.align	16
2323238405Sjkim.Lxts_dec_3:
2324238405Sjkim	pxor	%xmm8,%xmm0
2325238405Sjkim	leaq	48(%r12),%r12
2326238405Sjkim	pxor	%xmm9,%xmm1
2327238405Sjkim	leaq	128(%rsp),%rax
2328238405Sjkim	movl	%edx,%r10d
2329238405Sjkim
2330238405Sjkim	call	_bsaes_decrypt8
2331238405Sjkim
2332238405Sjkim	pxor	0(%rsp),%xmm15
2333238405Sjkim	pxor	16(%rsp),%xmm0
2334238405Sjkim	movdqu	%xmm15,0(%r13)
2335238405Sjkim	pxor	32(%rsp),%xmm5
2336238405Sjkim	movdqu	%xmm0,16(%r13)
2337238405Sjkim	movdqu	%xmm5,32(%r13)
2338238405Sjkim	leaq	48(%r13),%r13
2339238405Sjkim
2340238405Sjkim	movdqa	48(%rsp),%xmm6
2341238405Sjkim	jmp	.Lxts_dec_done
2342238405Sjkim.align	16
2343238405Sjkim.Lxts_dec_2:
2344238405Sjkim	pxor	%xmm7,%xmm15
2345238405Sjkim	leaq	32(%r12),%r12
2346238405Sjkim	pxor	%xmm8,%xmm0
2347238405Sjkim	leaq	128(%rsp),%rax
2348238405Sjkim	movl	%edx,%r10d
2349238405Sjkim
2350238405Sjkim	call	_bsaes_decrypt8
2351238405Sjkim
2352238405Sjkim	pxor	0(%rsp),%xmm15
2353238405Sjkim	pxor	16(%rsp),%xmm0
2354238405Sjkim	movdqu	%xmm15,0(%r13)
2355238405Sjkim	movdqu	%xmm0,16(%r13)
2356238405Sjkim	leaq	32(%r13),%r13
2357238405Sjkim
2358238405Sjkim	movdqa	32(%rsp),%xmm6
2359238405Sjkim	jmp	.Lxts_dec_done
2360238405Sjkim.align	16
2361238405Sjkim.Lxts_dec_1:
2362238405Sjkim	pxor	%xmm15,%xmm7
2363238405Sjkim	leaq	16(%r12),%r12
2364238405Sjkim	movdqa	%xmm7,32(%rbp)
2365238405Sjkim	leaq	32(%rbp),%rdi
2366238405Sjkim	leaq	32(%rbp),%rsi
2367238405Sjkim	leaq	(%r15),%rdx
2368238405Sjkim	call	asm_AES_decrypt
2369238405Sjkim	pxor	32(%rbp),%xmm15
2370238405Sjkim
2371238405Sjkim
2372238405Sjkim
2373238405Sjkim
2374238405Sjkim
2375238405Sjkim	movdqu	%xmm15,0(%r13)
2376238405Sjkim	leaq	16(%r13),%r13
2377238405Sjkim
2378238405Sjkim	movdqa	16(%rsp),%xmm6
2379238405Sjkim
2380238405Sjkim.Lxts_dec_done:
2381238405Sjkim	andl	$15,%ebx
2382238405Sjkim	jz	.Lxts_dec_ret
2383238405Sjkim
2384238405Sjkim	pxor	%xmm14,%xmm14
2385238405Sjkim	movdqa	.Lxts_magic(%rip),%xmm12
2386238405Sjkim	pcmpgtd	%xmm6,%xmm14
2387238405Sjkim	pshufd	$19,%xmm14,%xmm13
2388238405Sjkim	movdqa	%xmm6,%xmm5
2389238405Sjkim	paddq	%xmm6,%xmm6
2390238405Sjkim	pand	%xmm12,%xmm13
2391238405Sjkim	movdqu	(%r12),%xmm15
2392238405Sjkim	pxor	%xmm13,%xmm6
2393238405Sjkim
2394238405Sjkim	leaq	32(%rbp),%rdi
2395238405Sjkim	pxor	%xmm6,%xmm15
2396238405Sjkim	leaq	32(%rbp),%rsi
2397238405Sjkim	movdqa	%xmm15,32(%rbp)
2398238405Sjkim	leaq	(%r15),%rdx
2399238405Sjkim	call	asm_AES_decrypt
2400238405Sjkim	pxor	32(%rbp),%xmm6
2401238405Sjkim	movq	%r13,%rdx
2402238405Sjkim	movdqu	%xmm6,(%r13)
2403238405Sjkim
2404238405Sjkim.Lxts_dec_steal:
2405238405Sjkim	movzbl	16(%r12),%eax
2406238405Sjkim	movzbl	(%rdx),%ecx
2407238405Sjkim	leaq	1(%r12),%r12
2408238405Sjkim	movb	%al,(%rdx)
2409238405Sjkim	movb	%cl,16(%rdx)
2410238405Sjkim	leaq	1(%rdx),%rdx
2411238405Sjkim	subl	$1,%ebx
2412238405Sjkim	jnz	.Lxts_dec_steal
2413238405Sjkim
2414238405Sjkim	movdqu	(%r13),%xmm15
2415238405Sjkim	leaq	32(%rbp),%rdi
2416238405Sjkim	pxor	%xmm5,%xmm15
2417238405Sjkim	leaq	32(%rbp),%rsi
2418238405Sjkim	movdqa	%xmm15,32(%rbp)
2419238405Sjkim	leaq	(%r15),%rdx
2420238405Sjkim	call	asm_AES_decrypt
2421238405Sjkim	pxor	32(%rbp),%xmm5
2422238405Sjkim	movdqu	%xmm5,(%r13)
2423238405Sjkim
2424238405Sjkim.Lxts_dec_ret:
2425238405Sjkim	leaq	(%rsp),%rax
2426238405Sjkim	pxor	%xmm0,%xmm0
2427238405Sjkim.Lxts_dec_bzero:
2428238405Sjkim	movdqa	%xmm0,0(%rax)
2429238405Sjkim	movdqa	%xmm0,16(%rax)
2430238405Sjkim	leaq	32(%rax),%rax
2431238405Sjkim	cmpq	%rax,%rbp
2432238405Sjkim	ja	.Lxts_dec_bzero
2433238405Sjkim
2434238405Sjkim	leaq	(%rbp),%rsp
2435238405Sjkim	movq	72(%rsp),%r15
2436238405Sjkim	movq	80(%rsp),%r14
2437238405Sjkim	movq	88(%rsp),%r13
2438238405Sjkim	movq	96(%rsp),%r12
2439238405Sjkim	movq	104(%rsp),%rbx
2440238405Sjkim	movq	112(%rsp),%rax
2441238405Sjkim	leaq	120(%rsp),%rsp
2442238405Sjkim	movq	%rax,%rbp
2443238405Sjkim.Lxts_dec_epilogue:
2444238405Sjkim	.byte	0xf3,0xc3
2445238405Sjkim.size	bsaes_xts_decrypt,.-bsaes_xts_decrypt
2446238405Sjkim.type	_bsaes_const,@object
2447238405Sjkim.align	64
2448238405Sjkim_bsaes_const:
2449238405Sjkim.LM0ISR:
2450238405Sjkim.quad	0x0a0e0206070b0f03, 0x0004080c0d010509
2451238405Sjkim.LISRM0:
2452238405Sjkim.quad	0x01040b0e0205080f, 0x0306090c00070a0d
2453238405Sjkim.LISR:
2454238405Sjkim.quad	0x0504070602010003, 0x0f0e0d0c080b0a09
2455238405Sjkim.LBS0:
2456238405Sjkim.quad	0x5555555555555555, 0x5555555555555555
2457238405Sjkim.LBS1:
2458238405Sjkim.quad	0x3333333333333333, 0x3333333333333333
2459238405Sjkim.LBS2:
2460238405Sjkim.quad	0x0f0f0f0f0f0f0f0f, 0x0f0f0f0f0f0f0f0f
2461238405Sjkim.LSR:
2462238405Sjkim.quad	0x0504070600030201, 0x0f0e0d0c0a09080b
2463238405Sjkim.LSRM0:
2464238405Sjkim.quad	0x0304090e00050a0f, 0x01060b0c0207080d
2465238405Sjkim.LM0SR:
2466238405Sjkim.quad	0x0a0e02060f03070b, 0x0004080c05090d01
2467238405Sjkim.LSWPUP:
2468238405Sjkim.quad	0x0706050403020100, 0x0c0d0e0f0b0a0908
2469238405Sjkim.LSWPUPM0SR:
2470238405Sjkim.quad	0x0a0d02060c03070b, 0x0004080f05090e01
2471238405Sjkim.LADD1:
2472238405Sjkim.quad	0x0000000000000000, 0x0000000100000000
2473238405Sjkim.LADD2:
2474238405Sjkim.quad	0x0000000000000000, 0x0000000200000000
2475238405Sjkim.LADD3:
2476238405Sjkim.quad	0x0000000000000000, 0x0000000300000000
2477238405Sjkim.LADD4:
2478238405Sjkim.quad	0x0000000000000000, 0x0000000400000000
2479238405Sjkim.LADD5:
2480238405Sjkim.quad	0x0000000000000000, 0x0000000500000000
2481238405Sjkim.LADD6:
2482238405Sjkim.quad	0x0000000000000000, 0x0000000600000000
2483238405Sjkim.LADD7:
2484238405Sjkim.quad	0x0000000000000000, 0x0000000700000000
2485238405Sjkim.LADD8:
2486238405Sjkim.quad	0x0000000000000000, 0x0000000800000000
2487238405Sjkim.Lxts_magic:
2488238405Sjkim.long	0x87,0,1,0
2489238405Sjkim.Lmasks:
2490238405Sjkim.quad	0x0101010101010101, 0x0101010101010101
2491238405Sjkim.quad	0x0202020202020202, 0x0202020202020202
2492238405Sjkim.quad	0x0404040404040404, 0x0404040404040404
2493238405Sjkim.quad	0x0808080808080808, 0x0808080808080808
2494238405Sjkim.LM0:
2495238405Sjkim.quad	0x02060a0e03070b0f, 0x0004080c0105090d
2496238405Sjkim.L63:
2497238405Sjkim.quad	0x6363636363636363, 0x6363636363636363
2498238405Sjkim.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
2499238405Sjkim.align	64
2500238405Sjkim.size	_bsaes_const,.-_bsaes_const
2501