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