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