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	$0x93,%xmm15,%xmm7
331	pshufd	$0x93,%xmm0,%xmm8
332	pxor	%xmm7,%xmm15
333	pshufd	$0x93,%xmm3,%xmm9
334	pxor	%xmm8,%xmm0
335	pshufd	$0x93,%xmm5,%xmm10
336	pxor	%xmm9,%xmm3
337	pshufd	$0x93,%xmm2,%xmm11
338	pxor	%xmm10,%xmm5
339	pshufd	$0x93,%xmm6,%xmm12
340	pxor	%xmm11,%xmm2
341	pshufd	$0x93,%xmm1,%xmm13
342	pxor	%xmm12,%xmm6
343	pshufd	$0x93,%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	$0x4E,%xmm15,%xmm15
351	pxor	%xmm0,%xmm9
352	pshufd	$0x4E,%xmm0,%xmm0
353	pxor	%xmm2,%xmm12
354	pxor	%xmm7,%xmm15
355	pxor	%xmm6,%xmm13
356	pxor	%xmm8,%xmm0
357	pxor	%xmm5,%xmm11
358	pshufd	$0x4E,%xmm2,%xmm7
359	pxor	%xmm1,%xmm14
360	pshufd	$0x4E,%xmm6,%xmm8
361	pxor	%xmm3,%xmm10
362	pshufd	$0x4E,%xmm5,%xmm2
363	pxor	%xmm4,%xmm10
364	pshufd	$0x4E,%xmm4,%xmm6
365	pxor	%xmm4,%xmm11
366	pshufd	$0x4E,%xmm1,%xmm5
367	pxor	%xmm11,%xmm7
368	pshufd	$0x4E,%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	$0x4E,%xmm15,%xmm7
803	pshufd	$0x4E,%xmm2,%xmm13
804	pxor	%xmm15,%xmm7
805	pshufd	$0x4E,%xmm4,%xmm14
806	pxor	%xmm2,%xmm13
807	pshufd	$0x4E,%xmm0,%xmm8
808	pxor	%xmm4,%xmm14
809	pshufd	$0x4E,%xmm5,%xmm9
810	pxor	%xmm0,%xmm8
811	pshufd	$0x4E,%xmm3,%xmm10
812	pxor	%xmm5,%xmm9
813	pxor	%xmm13,%xmm15
814	pxor	%xmm13,%xmm0
815	pshufd	$0x4E,%xmm1,%xmm11
816	pxor	%xmm3,%xmm10
817	pxor	%xmm7,%xmm5
818	pxor	%xmm8,%xmm3
819	pshufd	$0x4E,%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	$0x93,%xmm15,%xmm7
834	pshufd	$0x93,%xmm0,%xmm8
835	pxor	%xmm7,%xmm15
836	pshufd	$0x93,%xmm5,%xmm9
837	pxor	%xmm8,%xmm0
838	pshufd	$0x93,%xmm3,%xmm10
839	pxor	%xmm9,%xmm5
840	pshufd	$0x93,%xmm1,%xmm11
841	pxor	%xmm10,%xmm3
842	pshufd	$0x93,%xmm6,%xmm12
843	pxor	%xmm11,%xmm1
844	pshufd	$0x93,%xmm2,%xmm13
845	pxor	%xmm12,%xmm6
846	pshufd	$0x93,%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	$0x4E,%xmm15,%xmm15
854	pxor	%xmm0,%xmm9
855	pshufd	$0x4E,%xmm0,%xmm0
856	pxor	%xmm1,%xmm12
857	pxor	%xmm7,%xmm15
858	pxor	%xmm6,%xmm13
859	pxor	%xmm8,%xmm0
860	pxor	%xmm3,%xmm11
861	pshufd	$0x4E,%xmm1,%xmm7
862	pxor	%xmm2,%xmm14
863	pshufd	$0x4E,%xmm6,%xmm8
864	pxor	%xmm5,%xmm10
865	pshufd	$0x4E,%xmm3,%xmm1
866	pxor	%xmm4,%xmm10
867	pshufd	$0x4E,%xmm4,%xmm6
868	pxor	%xmm4,%xmm11
869	pshufd	$0x4E,%xmm2,%xmm3
870	pxor	%xmm11,%xmm7
871	pshufd	$0x4E,%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	120(%rbp),%rax
1309	movq	-48(%rax),%r15
1310	movq	-40(%rax),%r14
1311	movq	-32(%rax),%r13
1312	movq	-24(%rax),%r12
1313	movq	-16(%rax),%rbx
1314	movq	-8(%rax),%rbp
1315	leaq	(%rax),%rsp
1316.Lcbc_dec_epilogue:
1317	.byte	0xf3,0xc3
1318.size	bsaes_cbc_encrypt,.-bsaes_cbc_encrypt
1319
1320.globl	bsaes_ctr32_encrypt_blocks
1321.hidden bsaes_ctr32_encrypt_blocks
1322.type	bsaes_ctr32_encrypt_blocks,@function
1323.align	16
1324bsaes_ctr32_encrypt_blocks:
1325	movq	%rsp,%rax
1326.Lctr_enc_prologue:
1327	pushq	%rbp
1328	pushq	%rbx
1329	pushq	%r12
1330	pushq	%r13
1331	pushq	%r14
1332	pushq	%r15
1333	leaq	-72(%rsp),%rsp
1334	movq	%rsp,%rbp
1335	movdqu	(%r8),%xmm0
1336	movl	240(%rcx),%eax
1337	movq	%rdi,%r12
1338	movq	%rsi,%r13
1339	movq	%rdx,%r14
1340	movq	%rcx,%r15
1341	movdqa	%xmm0,32(%rbp)
1342	cmpq	$8,%rdx
1343	jb	.Lctr_enc_short
1344
1345	movl	%eax,%ebx
1346	shlq	$7,%rax
1347	subq	$96,%rax
1348	subq	%rax,%rsp
1349
1350	movq	%rsp,%rax
1351	movq	%r15,%rcx
1352	movl	%ebx,%r10d
1353	call	_bsaes_key_convert
1354	pxor	%xmm6,%xmm7
1355	movdqa	%xmm7,(%rax)
1356
1357	movdqa	(%rsp),%xmm8
1358	leaq	.LADD1(%rip),%r11
1359	movdqa	32(%rbp),%xmm15
1360	movdqa	-32(%r11),%xmm7
1361.byte	102,68,15,56,0,199
1362.byte	102,68,15,56,0,255
1363	movdqa	%xmm8,(%rsp)
1364	jmp	.Lctr_enc_loop
1365.align	16
1366.Lctr_enc_loop:
1367	movdqa	%xmm15,32(%rbp)
1368	movdqa	%xmm15,%xmm0
1369	movdqa	%xmm15,%xmm1
1370	paddd	0(%r11),%xmm0
1371	movdqa	%xmm15,%xmm2
1372	paddd	16(%r11),%xmm1
1373	movdqa	%xmm15,%xmm3
1374	paddd	32(%r11),%xmm2
1375	movdqa	%xmm15,%xmm4
1376	paddd	48(%r11),%xmm3
1377	movdqa	%xmm15,%xmm5
1378	paddd	64(%r11),%xmm4
1379	movdqa	%xmm15,%xmm6
1380	paddd	80(%r11),%xmm5
1381	paddd	96(%r11),%xmm6
1382
1383
1384
1385	movdqa	(%rsp),%xmm8
1386	leaq	16(%rsp),%rax
1387	movdqa	-16(%r11),%xmm7
1388	pxor	%xmm8,%xmm15
1389	pxor	%xmm8,%xmm0
1390	pxor	%xmm8,%xmm1
1391	pxor	%xmm8,%xmm2
1392.byte	102,68,15,56,0,255
1393.byte	102,15,56,0,199
1394	pxor	%xmm8,%xmm3
1395	pxor	%xmm8,%xmm4
1396.byte	102,15,56,0,207
1397.byte	102,15,56,0,215
1398	pxor	%xmm8,%xmm5
1399	pxor	%xmm8,%xmm6
1400.byte	102,15,56,0,223
1401.byte	102,15,56,0,231
1402.byte	102,15,56,0,239
1403.byte	102,15,56,0,247
1404	leaq	.LBS0(%rip),%r11
1405	movl	%ebx,%r10d
1406
1407	call	_bsaes_encrypt8_bitslice
1408
1409	subq	$8,%r14
1410	jc	.Lctr_enc_loop_done
1411
1412	movdqu	0(%r12),%xmm7
1413	movdqu	16(%r12),%xmm8
1414	movdqu	32(%r12),%xmm9
1415	movdqu	48(%r12),%xmm10
1416	movdqu	64(%r12),%xmm11
1417	movdqu	80(%r12),%xmm12
1418	movdqu	96(%r12),%xmm13
1419	movdqu	112(%r12),%xmm14
1420	leaq	128(%r12),%r12
1421	pxor	%xmm15,%xmm7
1422	movdqa	32(%rbp),%xmm15
1423	pxor	%xmm8,%xmm0
1424	movdqu	%xmm7,0(%r13)
1425	pxor	%xmm9,%xmm3
1426	movdqu	%xmm0,16(%r13)
1427	pxor	%xmm10,%xmm5
1428	movdqu	%xmm3,32(%r13)
1429	pxor	%xmm11,%xmm2
1430	movdqu	%xmm5,48(%r13)
1431	pxor	%xmm12,%xmm6
1432	movdqu	%xmm2,64(%r13)
1433	pxor	%xmm13,%xmm1
1434	movdqu	%xmm6,80(%r13)
1435	pxor	%xmm14,%xmm4
1436	movdqu	%xmm1,96(%r13)
1437	leaq	.LADD1(%rip),%r11
1438	movdqu	%xmm4,112(%r13)
1439	leaq	128(%r13),%r13
1440	paddd	112(%r11),%xmm15
1441	jnz	.Lctr_enc_loop
1442
1443	jmp	.Lctr_enc_done
1444.align	16
1445.Lctr_enc_loop_done:
1446	addq	$8,%r14
1447	movdqu	0(%r12),%xmm7
1448	pxor	%xmm7,%xmm15
1449	movdqu	%xmm15,0(%r13)
1450	cmpq	$2,%r14
1451	jb	.Lctr_enc_done
1452	movdqu	16(%r12),%xmm8
1453	pxor	%xmm8,%xmm0
1454	movdqu	%xmm0,16(%r13)
1455	je	.Lctr_enc_done
1456	movdqu	32(%r12),%xmm9
1457	pxor	%xmm9,%xmm3
1458	movdqu	%xmm3,32(%r13)
1459	cmpq	$4,%r14
1460	jb	.Lctr_enc_done
1461	movdqu	48(%r12),%xmm10
1462	pxor	%xmm10,%xmm5
1463	movdqu	%xmm5,48(%r13)
1464	je	.Lctr_enc_done
1465	movdqu	64(%r12),%xmm11
1466	pxor	%xmm11,%xmm2
1467	movdqu	%xmm2,64(%r13)
1468	cmpq	$6,%r14
1469	jb	.Lctr_enc_done
1470	movdqu	80(%r12),%xmm12
1471	pxor	%xmm12,%xmm6
1472	movdqu	%xmm6,80(%r13)
1473	je	.Lctr_enc_done
1474	movdqu	96(%r12),%xmm13
1475	pxor	%xmm13,%xmm1
1476	movdqu	%xmm1,96(%r13)
1477	jmp	.Lctr_enc_done
1478
1479.align	16
1480.Lctr_enc_short:
1481	leaq	32(%rbp),%rdi
1482	leaq	48(%rbp),%rsi
1483	leaq	(%r15),%rdx
1484	call	asm_AES_encrypt
1485	movdqu	(%r12),%xmm0
1486	leaq	16(%r12),%r12
1487	movl	44(%rbp),%eax
1488	bswapl	%eax
1489	pxor	48(%rbp),%xmm0
1490	incl	%eax
1491	movdqu	%xmm0,(%r13)
1492	bswapl	%eax
1493	leaq	16(%r13),%r13
1494	movl	%eax,44(%rsp)
1495	decq	%r14
1496	jnz	.Lctr_enc_short
1497
1498.Lctr_enc_done:
1499	leaq	(%rsp),%rax
1500	pxor	%xmm0,%xmm0
1501.Lctr_enc_bzero:
1502	movdqa	%xmm0,0(%rax)
1503	movdqa	%xmm0,16(%rax)
1504	leaq	32(%rax),%rax
1505	cmpq	%rax,%rbp
1506	ja	.Lctr_enc_bzero
1507
1508	leaq	120(%rbp),%rax
1509	movq	-48(%rax),%r15
1510	movq	-40(%rax),%r14
1511	movq	-32(%rax),%r13
1512	movq	-24(%rax),%r12
1513	movq	-16(%rax),%rbx
1514	movq	-8(%rax),%rbp
1515	leaq	(%rax),%rsp
1516.Lctr_enc_epilogue:
1517	.byte	0xf3,0xc3
1518.size	bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks
1519.globl	bsaes_xts_encrypt
1520.hidden bsaes_xts_encrypt
1521.type	bsaes_xts_encrypt,@function
1522.align	16
1523bsaes_xts_encrypt:
1524	movq	%rsp,%rax
1525.Lxts_enc_prologue:
1526	pushq	%rbp
1527	pushq	%rbx
1528	pushq	%r12
1529	pushq	%r13
1530	pushq	%r14
1531	pushq	%r15
1532	leaq	-72(%rsp),%rsp
1533	movq	%rsp,%rbp
1534	movq	%rdi,%r12
1535	movq	%rsi,%r13
1536	movq	%rdx,%r14
1537	movq	%rcx,%r15
1538
1539	leaq	(%r9),%rdi
1540	leaq	32(%rbp),%rsi
1541	leaq	(%r8),%rdx
1542	call	asm_AES_encrypt
1543
1544	movl	240(%r15),%eax
1545	movq	%r14,%rbx
1546
1547	movl	%eax,%edx
1548	shlq	$7,%rax
1549	subq	$96,%rax
1550	subq	%rax,%rsp
1551
1552	movq	%rsp,%rax
1553	movq	%r15,%rcx
1554	movl	%edx,%r10d
1555	call	_bsaes_key_convert
1556	pxor	%xmm6,%xmm7
1557	movdqa	%xmm7,(%rax)
1558
1559	andq	$-16,%r14
1560	subq	$0x80,%rsp
1561	movdqa	32(%rbp),%xmm6
1562
1563	pxor	%xmm14,%xmm14
1564	movdqa	.Lxts_magic(%rip),%xmm12
1565	pcmpgtd	%xmm6,%xmm14
1566
1567	subq	$0x80,%r14
1568	jc	.Lxts_enc_short
1569	jmp	.Lxts_enc_loop
1570
1571.align	16
1572.Lxts_enc_loop:
1573	pshufd	$0x13,%xmm14,%xmm13
1574	pxor	%xmm14,%xmm14
1575	movdqa	%xmm6,%xmm15
1576	movdqa	%xmm6,0(%rsp)
1577	paddq	%xmm6,%xmm6
1578	pand	%xmm12,%xmm13
1579	pcmpgtd	%xmm6,%xmm14
1580	pxor	%xmm13,%xmm6
1581	pshufd	$0x13,%xmm14,%xmm13
1582	pxor	%xmm14,%xmm14
1583	movdqa	%xmm6,%xmm0
1584	movdqa	%xmm6,16(%rsp)
1585	paddq	%xmm6,%xmm6
1586	pand	%xmm12,%xmm13
1587	pcmpgtd	%xmm6,%xmm14
1588	pxor	%xmm13,%xmm6
1589	movdqu	0(%r12),%xmm7
1590	pshufd	$0x13,%xmm14,%xmm13
1591	pxor	%xmm14,%xmm14
1592	movdqa	%xmm6,%xmm1
1593	movdqa	%xmm6,32(%rsp)
1594	paddq	%xmm6,%xmm6
1595	pand	%xmm12,%xmm13
1596	pcmpgtd	%xmm6,%xmm14
1597	pxor	%xmm13,%xmm6
1598	movdqu	16(%r12),%xmm8
1599	pxor	%xmm7,%xmm15
1600	pshufd	$0x13,%xmm14,%xmm13
1601	pxor	%xmm14,%xmm14
1602	movdqa	%xmm6,%xmm2
1603	movdqa	%xmm6,48(%rsp)
1604	paddq	%xmm6,%xmm6
1605	pand	%xmm12,%xmm13
1606	pcmpgtd	%xmm6,%xmm14
1607	pxor	%xmm13,%xmm6
1608	movdqu	32(%r12),%xmm9
1609	pxor	%xmm8,%xmm0
1610	pshufd	$0x13,%xmm14,%xmm13
1611	pxor	%xmm14,%xmm14
1612	movdqa	%xmm6,%xmm3
1613	movdqa	%xmm6,64(%rsp)
1614	paddq	%xmm6,%xmm6
1615	pand	%xmm12,%xmm13
1616	pcmpgtd	%xmm6,%xmm14
1617	pxor	%xmm13,%xmm6
1618	movdqu	48(%r12),%xmm10
1619	pxor	%xmm9,%xmm1
1620	pshufd	$0x13,%xmm14,%xmm13
1621	pxor	%xmm14,%xmm14
1622	movdqa	%xmm6,%xmm4
1623	movdqa	%xmm6,80(%rsp)
1624	paddq	%xmm6,%xmm6
1625	pand	%xmm12,%xmm13
1626	pcmpgtd	%xmm6,%xmm14
1627	pxor	%xmm13,%xmm6
1628	movdqu	64(%r12),%xmm11
1629	pxor	%xmm10,%xmm2
1630	pshufd	$0x13,%xmm14,%xmm13
1631	pxor	%xmm14,%xmm14
1632	movdqa	%xmm6,%xmm5
1633	movdqa	%xmm6,96(%rsp)
1634	paddq	%xmm6,%xmm6
1635	pand	%xmm12,%xmm13
1636	pcmpgtd	%xmm6,%xmm14
1637	pxor	%xmm13,%xmm6
1638	movdqu	80(%r12),%xmm12
1639	pxor	%xmm11,%xmm3
1640	movdqu	96(%r12),%xmm13
1641	pxor	%xmm12,%xmm4
1642	movdqu	112(%r12),%xmm14
1643	leaq	128(%r12),%r12
1644	movdqa	%xmm6,112(%rsp)
1645	pxor	%xmm13,%xmm5
1646	leaq	128(%rsp),%rax
1647	pxor	%xmm14,%xmm6
1648	movl	%edx,%r10d
1649
1650	call	_bsaes_encrypt8
1651
1652	pxor	0(%rsp),%xmm15
1653	pxor	16(%rsp),%xmm0
1654	movdqu	%xmm15,0(%r13)
1655	pxor	32(%rsp),%xmm3
1656	movdqu	%xmm0,16(%r13)
1657	pxor	48(%rsp),%xmm5
1658	movdqu	%xmm3,32(%r13)
1659	pxor	64(%rsp),%xmm2
1660	movdqu	%xmm5,48(%r13)
1661	pxor	80(%rsp),%xmm6
1662	movdqu	%xmm2,64(%r13)
1663	pxor	96(%rsp),%xmm1
1664	movdqu	%xmm6,80(%r13)
1665	pxor	112(%rsp),%xmm4
1666	movdqu	%xmm1,96(%r13)
1667	movdqu	%xmm4,112(%r13)
1668	leaq	128(%r13),%r13
1669
1670	movdqa	112(%rsp),%xmm6
1671	pxor	%xmm14,%xmm14
1672	movdqa	.Lxts_magic(%rip),%xmm12
1673	pcmpgtd	%xmm6,%xmm14
1674	pshufd	$0x13,%xmm14,%xmm13
1675	pxor	%xmm14,%xmm14
1676	paddq	%xmm6,%xmm6
1677	pand	%xmm12,%xmm13
1678	pcmpgtd	%xmm6,%xmm14
1679	pxor	%xmm13,%xmm6
1680
1681	subq	$0x80,%r14
1682	jnc	.Lxts_enc_loop
1683
1684.Lxts_enc_short:
1685	addq	$0x80,%r14
1686	jz	.Lxts_enc_done
1687	pshufd	$0x13,%xmm14,%xmm13
1688	pxor	%xmm14,%xmm14
1689	movdqa	%xmm6,%xmm15
1690	movdqa	%xmm6,0(%rsp)
1691	paddq	%xmm6,%xmm6
1692	pand	%xmm12,%xmm13
1693	pcmpgtd	%xmm6,%xmm14
1694	pxor	%xmm13,%xmm6
1695	pshufd	$0x13,%xmm14,%xmm13
1696	pxor	%xmm14,%xmm14
1697	movdqa	%xmm6,%xmm0
1698	movdqa	%xmm6,16(%rsp)
1699	paddq	%xmm6,%xmm6
1700	pand	%xmm12,%xmm13
1701	pcmpgtd	%xmm6,%xmm14
1702	pxor	%xmm13,%xmm6
1703	movdqu	0(%r12),%xmm7
1704	cmpq	$16,%r14
1705	je	.Lxts_enc_1
1706	pshufd	$0x13,%xmm14,%xmm13
1707	pxor	%xmm14,%xmm14
1708	movdqa	%xmm6,%xmm1
1709	movdqa	%xmm6,32(%rsp)
1710	paddq	%xmm6,%xmm6
1711	pand	%xmm12,%xmm13
1712	pcmpgtd	%xmm6,%xmm14
1713	pxor	%xmm13,%xmm6
1714	movdqu	16(%r12),%xmm8
1715	cmpq	$32,%r14
1716	je	.Lxts_enc_2
1717	pxor	%xmm7,%xmm15
1718	pshufd	$0x13,%xmm14,%xmm13
1719	pxor	%xmm14,%xmm14
1720	movdqa	%xmm6,%xmm2
1721	movdqa	%xmm6,48(%rsp)
1722	paddq	%xmm6,%xmm6
1723	pand	%xmm12,%xmm13
1724	pcmpgtd	%xmm6,%xmm14
1725	pxor	%xmm13,%xmm6
1726	movdqu	32(%r12),%xmm9
1727	cmpq	$48,%r14
1728	je	.Lxts_enc_3
1729	pxor	%xmm8,%xmm0
1730	pshufd	$0x13,%xmm14,%xmm13
1731	pxor	%xmm14,%xmm14
1732	movdqa	%xmm6,%xmm3
1733	movdqa	%xmm6,64(%rsp)
1734	paddq	%xmm6,%xmm6
1735	pand	%xmm12,%xmm13
1736	pcmpgtd	%xmm6,%xmm14
1737	pxor	%xmm13,%xmm6
1738	movdqu	48(%r12),%xmm10
1739	cmpq	$64,%r14
1740	je	.Lxts_enc_4
1741	pxor	%xmm9,%xmm1
1742	pshufd	$0x13,%xmm14,%xmm13
1743	pxor	%xmm14,%xmm14
1744	movdqa	%xmm6,%xmm4
1745	movdqa	%xmm6,80(%rsp)
1746	paddq	%xmm6,%xmm6
1747	pand	%xmm12,%xmm13
1748	pcmpgtd	%xmm6,%xmm14
1749	pxor	%xmm13,%xmm6
1750	movdqu	64(%r12),%xmm11
1751	cmpq	$80,%r14
1752	je	.Lxts_enc_5
1753	pxor	%xmm10,%xmm2
1754	pshufd	$0x13,%xmm14,%xmm13
1755	pxor	%xmm14,%xmm14
1756	movdqa	%xmm6,%xmm5
1757	movdqa	%xmm6,96(%rsp)
1758	paddq	%xmm6,%xmm6
1759	pand	%xmm12,%xmm13
1760	pcmpgtd	%xmm6,%xmm14
1761	pxor	%xmm13,%xmm6
1762	movdqu	80(%r12),%xmm12
1763	cmpq	$96,%r14
1764	je	.Lxts_enc_6
1765	pxor	%xmm11,%xmm3
1766	movdqu	96(%r12),%xmm13
1767	pxor	%xmm12,%xmm4
1768	movdqa	%xmm6,112(%rsp)
1769	leaq	112(%r12),%r12
1770	pxor	%xmm13,%xmm5
1771	leaq	128(%rsp),%rax
1772	movl	%edx,%r10d
1773
1774	call	_bsaes_encrypt8
1775
1776	pxor	0(%rsp),%xmm15
1777	pxor	16(%rsp),%xmm0
1778	movdqu	%xmm15,0(%r13)
1779	pxor	32(%rsp),%xmm3
1780	movdqu	%xmm0,16(%r13)
1781	pxor	48(%rsp),%xmm5
1782	movdqu	%xmm3,32(%r13)
1783	pxor	64(%rsp),%xmm2
1784	movdqu	%xmm5,48(%r13)
1785	pxor	80(%rsp),%xmm6
1786	movdqu	%xmm2,64(%r13)
1787	pxor	96(%rsp),%xmm1
1788	movdqu	%xmm6,80(%r13)
1789	movdqu	%xmm1,96(%r13)
1790	leaq	112(%r13),%r13
1791
1792	movdqa	112(%rsp),%xmm6
1793	jmp	.Lxts_enc_done
1794.align	16
1795.Lxts_enc_6:
1796	pxor	%xmm11,%xmm3
1797	leaq	96(%r12),%r12
1798	pxor	%xmm12,%xmm4
1799	leaq	128(%rsp),%rax
1800	movl	%edx,%r10d
1801
1802	call	_bsaes_encrypt8
1803
1804	pxor	0(%rsp),%xmm15
1805	pxor	16(%rsp),%xmm0
1806	movdqu	%xmm15,0(%r13)
1807	pxor	32(%rsp),%xmm3
1808	movdqu	%xmm0,16(%r13)
1809	pxor	48(%rsp),%xmm5
1810	movdqu	%xmm3,32(%r13)
1811	pxor	64(%rsp),%xmm2
1812	movdqu	%xmm5,48(%r13)
1813	pxor	80(%rsp),%xmm6
1814	movdqu	%xmm2,64(%r13)
1815	movdqu	%xmm6,80(%r13)
1816	leaq	96(%r13),%r13
1817
1818	movdqa	96(%rsp),%xmm6
1819	jmp	.Lxts_enc_done
1820.align	16
1821.Lxts_enc_5:
1822	pxor	%xmm10,%xmm2
1823	leaq	80(%r12),%r12
1824	pxor	%xmm11,%xmm3
1825	leaq	128(%rsp),%rax
1826	movl	%edx,%r10d
1827
1828	call	_bsaes_encrypt8
1829
1830	pxor	0(%rsp),%xmm15
1831	pxor	16(%rsp),%xmm0
1832	movdqu	%xmm15,0(%r13)
1833	pxor	32(%rsp),%xmm3
1834	movdqu	%xmm0,16(%r13)
1835	pxor	48(%rsp),%xmm5
1836	movdqu	%xmm3,32(%r13)
1837	pxor	64(%rsp),%xmm2
1838	movdqu	%xmm5,48(%r13)
1839	movdqu	%xmm2,64(%r13)
1840	leaq	80(%r13),%r13
1841
1842	movdqa	80(%rsp),%xmm6
1843	jmp	.Lxts_enc_done
1844.align	16
1845.Lxts_enc_4:
1846	pxor	%xmm9,%xmm1
1847	leaq	64(%r12),%r12
1848	pxor	%xmm10,%xmm2
1849	leaq	128(%rsp),%rax
1850	movl	%edx,%r10d
1851
1852	call	_bsaes_encrypt8
1853
1854	pxor	0(%rsp),%xmm15
1855	pxor	16(%rsp),%xmm0
1856	movdqu	%xmm15,0(%r13)
1857	pxor	32(%rsp),%xmm3
1858	movdqu	%xmm0,16(%r13)
1859	pxor	48(%rsp),%xmm5
1860	movdqu	%xmm3,32(%r13)
1861	movdqu	%xmm5,48(%r13)
1862	leaq	64(%r13),%r13
1863
1864	movdqa	64(%rsp),%xmm6
1865	jmp	.Lxts_enc_done
1866.align	16
1867.Lxts_enc_3:
1868	pxor	%xmm8,%xmm0
1869	leaq	48(%r12),%r12
1870	pxor	%xmm9,%xmm1
1871	leaq	128(%rsp),%rax
1872	movl	%edx,%r10d
1873
1874	call	_bsaes_encrypt8
1875
1876	pxor	0(%rsp),%xmm15
1877	pxor	16(%rsp),%xmm0
1878	movdqu	%xmm15,0(%r13)
1879	pxor	32(%rsp),%xmm3
1880	movdqu	%xmm0,16(%r13)
1881	movdqu	%xmm3,32(%r13)
1882	leaq	48(%r13),%r13
1883
1884	movdqa	48(%rsp),%xmm6
1885	jmp	.Lxts_enc_done
1886.align	16
1887.Lxts_enc_2:
1888	pxor	%xmm7,%xmm15
1889	leaq	32(%r12),%r12
1890	pxor	%xmm8,%xmm0
1891	leaq	128(%rsp),%rax
1892	movl	%edx,%r10d
1893
1894	call	_bsaes_encrypt8
1895
1896	pxor	0(%rsp),%xmm15
1897	pxor	16(%rsp),%xmm0
1898	movdqu	%xmm15,0(%r13)
1899	movdqu	%xmm0,16(%r13)
1900	leaq	32(%r13),%r13
1901
1902	movdqa	32(%rsp),%xmm6
1903	jmp	.Lxts_enc_done
1904.align	16
1905.Lxts_enc_1:
1906	pxor	%xmm15,%xmm7
1907	leaq	16(%r12),%r12
1908	movdqa	%xmm7,32(%rbp)
1909	leaq	32(%rbp),%rdi
1910	leaq	32(%rbp),%rsi
1911	leaq	(%r15),%rdx
1912	call	asm_AES_encrypt
1913	pxor	32(%rbp),%xmm15
1914
1915
1916
1917
1918
1919	movdqu	%xmm15,0(%r13)
1920	leaq	16(%r13),%r13
1921
1922	movdqa	16(%rsp),%xmm6
1923
1924.Lxts_enc_done:
1925	andl	$15,%ebx
1926	jz	.Lxts_enc_ret
1927	movq	%r13,%rdx
1928
1929.Lxts_enc_steal:
1930	movzbl	(%r12),%eax
1931	movzbl	-16(%rdx),%ecx
1932	leaq	1(%r12),%r12
1933	movb	%al,-16(%rdx)
1934	movb	%cl,0(%rdx)
1935	leaq	1(%rdx),%rdx
1936	subl	$1,%ebx
1937	jnz	.Lxts_enc_steal
1938
1939	movdqu	-16(%r13),%xmm15
1940	leaq	32(%rbp),%rdi
1941	pxor	%xmm6,%xmm15
1942	leaq	32(%rbp),%rsi
1943	movdqa	%xmm15,32(%rbp)
1944	leaq	(%r15),%rdx
1945	call	asm_AES_encrypt
1946	pxor	32(%rbp),%xmm6
1947	movdqu	%xmm6,-16(%r13)
1948
1949.Lxts_enc_ret:
1950	leaq	(%rsp),%rax
1951	pxor	%xmm0,%xmm0
1952.Lxts_enc_bzero:
1953	movdqa	%xmm0,0(%rax)
1954	movdqa	%xmm0,16(%rax)
1955	leaq	32(%rax),%rax
1956	cmpq	%rax,%rbp
1957	ja	.Lxts_enc_bzero
1958
1959	leaq	120(%rbp),%rax
1960	movq	-48(%rax),%r15
1961	movq	-40(%rax),%r14
1962	movq	-32(%rax),%r13
1963	movq	-24(%rax),%r12
1964	movq	-16(%rax),%rbx
1965	movq	-8(%rax),%rbp
1966	leaq	(%rax),%rsp
1967.Lxts_enc_epilogue:
1968	.byte	0xf3,0xc3
1969.size	bsaes_xts_encrypt,.-bsaes_xts_encrypt
1970
1971.globl	bsaes_xts_decrypt
1972.hidden bsaes_xts_decrypt
1973.type	bsaes_xts_decrypt,@function
1974.align	16
1975bsaes_xts_decrypt:
1976	movq	%rsp,%rax
1977.Lxts_dec_prologue:
1978	pushq	%rbp
1979	pushq	%rbx
1980	pushq	%r12
1981	pushq	%r13
1982	pushq	%r14
1983	pushq	%r15
1984	leaq	-72(%rsp),%rsp
1985	movq	%rsp,%rbp
1986	movq	%rdi,%r12
1987	movq	%rsi,%r13
1988	movq	%rdx,%r14
1989	movq	%rcx,%r15
1990
1991	leaq	(%r9),%rdi
1992	leaq	32(%rbp),%rsi
1993	leaq	(%r8),%rdx
1994	call	asm_AES_encrypt
1995
1996	movl	240(%r15),%eax
1997	movq	%r14,%rbx
1998
1999	movl	%eax,%edx
2000	shlq	$7,%rax
2001	subq	$96,%rax
2002	subq	%rax,%rsp
2003
2004	movq	%rsp,%rax
2005	movq	%r15,%rcx
2006	movl	%edx,%r10d
2007	call	_bsaes_key_convert
2008	pxor	(%rsp),%xmm7
2009	movdqa	%xmm6,(%rax)
2010	movdqa	%xmm7,(%rsp)
2011
2012	xorl	%eax,%eax
2013	andq	$-16,%r14
2014	testl	$15,%ebx
2015	setnz	%al
2016	shlq	$4,%rax
2017	subq	%rax,%r14
2018
2019	subq	$0x80,%rsp
2020	movdqa	32(%rbp),%xmm6
2021
2022	pxor	%xmm14,%xmm14
2023	movdqa	.Lxts_magic(%rip),%xmm12
2024	pcmpgtd	%xmm6,%xmm14
2025
2026	subq	$0x80,%r14
2027	jc	.Lxts_dec_short
2028	jmp	.Lxts_dec_loop
2029
2030.align	16
2031.Lxts_dec_loop:
2032	pshufd	$0x13,%xmm14,%xmm13
2033	pxor	%xmm14,%xmm14
2034	movdqa	%xmm6,%xmm15
2035	movdqa	%xmm6,0(%rsp)
2036	paddq	%xmm6,%xmm6
2037	pand	%xmm12,%xmm13
2038	pcmpgtd	%xmm6,%xmm14
2039	pxor	%xmm13,%xmm6
2040	pshufd	$0x13,%xmm14,%xmm13
2041	pxor	%xmm14,%xmm14
2042	movdqa	%xmm6,%xmm0
2043	movdqa	%xmm6,16(%rsp)
2044	paddq	%xmm6,%xmm6
2045	pand	%xmm12,%xmm13
2046	pcmpgtd	%xmm6,%xmm14
2047	pxor	%xmm13,%xmm6
2048	movdqu	0(%r12),%xmm7
2049	pshufd	$0x13,%xmm14,%xmm13
2050	pxor	%xmm14,%xmm14
2051	movdqa	%xmm6,%xmm1
2052	movdqa	%xmm6,32(%rsp)
2053	paddq	%xmm6,%xmm6
2054	pand	%xmm12,%xmm13
2055	pcmpgtd	%xmm6,%xmm14
2056	pxor	%xmm13,%xmm6
2057	movdqu	16(%r12),%xmm8
2058	pxor	%xmm7,%xmm15
2059	pshufd	$0x13,%xmm14,%xmm13
2060	pxor	%xmm14,%xmm14
2061	movdqa	%xmm6,%xmm2
2062	movdqa	%xmm6,48(%rsp)
2063	paddq	%xmm6,%xmm6
2064	pand	%xmm12,%xmm13
2065	pcmpgtd	%xmm6,%xmm14
2066	pxor	%xmm13,%xmm6
2067	movdqu	32(%r12),%xmm9
2068	pxor	%xmm8,%xmm0
2069	pshufd	$0x13,%xmm14,%xmm13
2070	pxor	%xmm14,%xmm14
2071	movdqa	%xmm6,%xmm3
2072	movdqa	%xmm6,64(%rsp)
2073	paddq	%xmm6,%xmm6
2074	pand	%xmm12,%xmm13
2075	pcmpgtd	%xmm6,%xmm14
2076	pxor	%xmm13,%xmm6
2077	movdqu	48(%r12),%xmm10
2078	pxor	%xmm9,%xmm1
2079	pshufd	$0x13,%xmm14,%xmm13
2080	pxor	%xmm14,%xmm14
2081	movdqa	%xmm6,%xmm4
2082	movdqa	%xmm6,80(%rsp)
2083	paddq	%xmm6,%xmm6
2084	pand	%xmm12,%xmm13
2085	pcmpgtd	%xmm6,%xmm14
2086	pxor	%xmm13,%xmm6
2087	movdqu	64(%r12),%xmm11
2088	pxor	%xmm10,%xmm2
2089	pshufd	$0x13,%xmm14,%xmm13
2090	pxor	%xmm14,%xmm14
2091	movdqa	%xmm6,%xmm5
2092	movdqa	%xmm6,96(%rsp)
2093	paddq	%xmm6,%xmm6
2094	pand	%xmm12,%xmm13
2095	pcmpgtd	%xmm6,%xmm14
2096	pxor	%xmm13,%xmm6
2097	movdqu	80(%r12),%xmm12
2098	pxor	%xmm11,%xmm3
2099	movdqu	96(%r12),%xmm13
2100	pxor	%xmm12,%xmm4
2101	movdqu	112(%r12),%xmm14
2102	leaq	128(%r12),%r12
2103	movdqa	%xmm6,112(%rsp)
2104	pxor	%xmm13,%xmm5
2105	leaq	128(%rsp),%rax
2106	pxor	%xmm14,%xmm6
2107	movl	%edx,%r10d
2108
2109	call	_bsaes_decrypt8
2110
2111	pxor	0(%rsp),%xmm15
2112	pxor	16(%rsp),%xmm0
2113	movdqu	%xmm15,0(%r13)
2114	pxor	32(%rsp),%xmm5
2115	movdqu	%xmm0,16(%r13)
2116	pxor	48(%rsp),%xmm3
2117	movdqu	%xmm5,32(%r13)
2118	pxor	64(%rsp),%xmm1
2119	movdqu	%xmm3,48(%r13)
2120	pxor	80(%rsp),%xmm6
2121	movdqu	%xmm1,64(%r13)
2122	pxor	96(%rsp),%xmm2
2123	movdqu	%xmm6,80(%r13)
2124	pxor	112(%rsp),%xmm4
2125	movdqu	%xmm2,96(%r13)
2126	movdqu	%xmm4,112(%r13)
2127	leaq	128(%r13),%r13
2128
2129	movdqa	112(%rsp),%xmm6
2130	pxor	%xmm14,%xmm14
2131	movdqa	.Lxts_magic(%rip),%xmm12
2132	pcmpgtd	%xmm6,%xmm14
2133	pshufd	$0x13,%xmm14,%xmm13
2134	pxor	%xmm14,%xmm14
2135	paddq	%xmm6,%xmm6
2136	pand	%xmm12,%xmm13
2137	pcmpgtd	%xmm6,%xmm14
2138	pxor	%xmm13,%xmm6
2139
2140	subq	$0x80,%r14
2141	jnc	.Lxts_dec_loop
2142
2143.Lxts_dec_short:
2144	addq	$0x80,%r14
2145	jz	.Lxts_dec_done
2146	pshufd	$0x13,%xmm14,%xmm13
2147	pxor	%xmm14,%xmm14
2148	movdqa	%xmm6,%xmm15
2149	movdqa	%xmm6,0(%rsp)
2150	paddq	%xmm6,%xmm6
2151	pand	%xmm12,%xmm13
2152	pcmpgtd	%xmm6,%xmm14
2153	pxor	%xmm13,%xmm6
2154	pshufd	$0x13,%xmm14,%xmm13
2155	pxor	%xmm14,%xmm14
2156	movdqa	%xmm6,%xmm0
2157	movdqa	%xmm6,16(%rsp)
2158	paddq	%xmm6,%xmm6
2159	pand	%xmm12,%xmm13
2160	pcmpgtd	%xmm6,%xmm14
2161	pxor	%xmm13,%xmm6
2162	movdqu	0(%r12),%xmm7
2163	cmpq	$16,%r14
2164	je	.Lxts_dec_1
2165	pshufd	$0x13,%xmm14,%xmm13
2166	pxor	%xmm14,%xmm14
2167	movdqa	%xmm6,%xmm1
2168	movdqa	%xmm6,32(%rsp)
2169	paddq	%xmm6,%xmm6
2170	pand	%xmm12,%xmm13
2171	pcmpgtd	%xmm6,%xmm14
2172	pxor	%xmm13,%xmm6
2173	movdqu	16(%r12),%xmm8
2174	cmpq	$32,%r14
2175	je	.Lxts_dec_2
2176	pxor	%xmm7,%xmm15
2177	pshufd	$0x13,%xmm14,%xmm13
2178	pxor	%xmm14,%xmm14
2179	movdqa	%xmm6,%xmm2
2180	movdqa	%xmm6,48(%rsp)
2181	paddq	%xmm6,%xmm6
2182	pand	%xmm12,%xmm13
2183	pcmpgtd	%xmm6,%xmm14
2184	pxor	%xmm13,%xmm6
2185	movdqu	32(%r12),%xmm9
2186	cmpq	$48,%r14
2187	je	.Lxts_dec_3
2188	pxor	%xmm8,%xmm0
2189	pshufd	$0x13,%xmm14,%xmm13
2190	pxor	%xmm14,%xmm14
2191	movdqa	%xmm6,%xmm3
2192	movdqa	%xmm6,64(%rsp)
2193	paddq	%xmm6,%xmm6
2194	pand	%xmm12,%xmm13
2195	pcmpgtd	%xmm6,%xmm14
2196	pxor	%xmm13,%xmm6
2197	movdqu	48(%r12),%xmm10
2198	cmpq	$64,%r14
2199	je	.Lxts_dec_4
2200	pxor	%xmm9,%xmm1
2201	pshufd	$0x13,%xmm14,%xmm13
2202	pxor	%xmm14,%xmm14
2203	movdqa	%xmm6,%xmm4
2204	movdqa	%xmm6,80(%rsp)
2205	paddq	%xmm6,%xmm6
2206	pand	%xmm12,%xmm13
2207	pcmpgtd	%xmm6,%xmm14
2208	pxor	%xmm13,%xmm6
2209	movdqu	64(%r12),%xmm11
2210	cmpq	$80,%r14
2211	je	.Lxts_dec_5
2212	pxor	%xmm10,%xmm2
2213	pshufd	$0x13,%xmm14,%xmm13
2214	pxor	%xmm14,%xmm14
2215	movdqa	%xmm6,%xmm5
2216	movdqa	%xmm6,96(%rsp)
2217	paddq	%xmm6,%xmm6
2218	pand	%xmm12,%xmm13
2219	pcmpgtd	%xmm6,%xmm14
2220	pxor	%xmm13,%xmm6
2221	movdqu	80(%r12),%xmm12
2222	cmpq	$96,%r14
2223	je	.Lxts_dec_6
2224	pxor	%xmm11,%xmm3
2225	movdqu	96(%r12),%xmm13
2226	pxor	%xmm12,%xmm4
2227	movdqa	%xmm6,112(%rsp)
2228	leaq	112(%r12),%r12
2229	pxor	%xmm13,%xmm5
2230	leaq	128(%rsp),%rax
2231	movl	%edx,%r10d
2232
2233	call	_bsaes_decrypt8
2234
2235	pxor	0(%rsp),%xmm15
2236	pxor	16(%rsp),%xmm0
2237	movdqu	%xmm15,0(%r13)
2238	pxor	32(%rsp),%xmm5
2239	movdqu	%xmm0,16(%r13)
2240	pxor	48(%rsp),%xmm3
2241	movdqu	%xmm5,32(%r13)
2242	pxor	64(%rsp),%xmm1
2243	movdqu	%xmm3,48(%r13)
2244	pxor	80(%rsp),%xmm6
2245	movdqu	%xmm1,64(%r13)
2246	pxor	96(%rsp),%xmm2
2247	movdqu	%xmm6,80(%r13)
2248	movdqu	%xmm2,96(%r13)
2249	leaq	112(%r13),%r13
2250
2251	movdqa	112(%rsp),%xmm6
2252	jmp	.Lxts_dec_done
2253.align	16
2254.Lxts_dec_6:
2255	pxor	%xmm11,%xmm3
2256	leaq	96(%r12),%r12
2257	pxor	%xmm12,%xmm4
2258	leaq	128(%rsp),%rax
2259	movl	%edx,%r10d
2260
2261	call	_bsaes_decrypt8
2262
2263	pxor	0(%rsp),%xmm15
2264	pxor	16(%rsp),%xmm0
2265	movdqu	%xmm15,0(%r13)
2266	pxor	32(%rsp),%xmm5
2267	movdqu	%xmm0,16(%r13)
2268	pxor	48(%rsp),%xmm3
2269	movdqu	%xmm5,32(%r13)
2270	pxor	64(%rsp),%xmm1
2271	movdqu	%xmm3,48(%r13)
2272	pxor	80(%rsp),%xmm6
2273	movdqu	%xmm1,64(%r13)
2274	movdqu	%xmm6,80(%r13)
2275	leaq	96(%r13),%r13
2276
2277	movdqa	96(%rsp),%xmm6
2278	jmp	.Lxts_dec_done
2279.align	16
2280.Lxts_dec_5:
2281	pxor	%xmm10,%xmm2
2282	leaq	80(%r12),%r12
2283	pxor	%xmm11,%xmm3
2284	leaq	128(%rsp),%rax
2285	movl	%edx,%r10d
2286
2287	call	_bsaes_decrypt8
2288
2289	pxor	0(%rsp),%xmm15
2290	pxor	16(%rsp),%xmm0
2291	movdqu	%xmm15,0(%r13)
2292	pxor	32(%rsp),%xmm5
2293	movdqu	%xmm0,16(%r13)
2294	pxor	48(%rsp),%xmm3
2295	movdqu	%xmm5,32(%r13)
2296	pxor	64(%rsp),%xmm1
2297	movdqu	%xmm3,48(%r13)
2298	movdqu	%xmm1,64(%r13)
2299	leaq	80(%r13),%r13
2300
2301	movdqa	80(%rsp),%xmm6
2302	jmp	.Lxts_dec_done
2303.align	16
2304.Lxts_dec_4:
2305	pxor	%xmm9,%xmm1
2306	leaq	64(%r12),%r12
2307	pxor	%xmm10,%xmm2
2308	leaq	128(%rsp),%rax
2309	movl	%edx,%r10d
2310
2311	call	_bsaes_decrypt8
2312
2313	pxor	0(%rsp),%xmm15
2314	pxor	16(%rsp),%xmm0
2315	movdqu	%xmm15,0(%r13)
2316	pxor	32(%rsp),%xmm5
2317	movdqu	%xmm0,16(%r13)
2318	pxor	48(%rsp),%xmm3
2319	movdqu	%xmm5,32(%r13)
2320	movdqu	%xmm3,48(%r13)
2321	leaq	64(%r13),%r13
2322
2323	movdqa	64(%rsp),%xmm6
2324	jmp	.Lxts_dec_done
2325.align	16
2326.Lxts_dec_3:
2327	pxor	%xmm8,%xmm0
2328	leaq	48(%r12),%r12
2329	pxor	%xmm9,%xmm1
2330	leaq	128(%rsp),%rax
2331	movl	%edx,%r10d
2332
2333	call	_bsaes_decrypt8
2334
2335	pxor	0(%rsp),%xmm15
2336	pxor	16(%rsp),%xmm0
2337	movdqu	%xmm15,0(%r13)
2338	pxor	32(%rsp),%xmm5
2339	movdqu	%xmm0,16(%r13)
2340	movdqu	%xmm5,32(%r13)
2341	leaq	48(%r13),%r13
2342
2343	movdqa	48(%rsp),%xmm6
2344	jmp	.Lxts_dec_done
2345.align	16
2346.Lxts_dec_2:
2347	pxor	%xmm7,%xmm15
2348	leaq	32(%r12),%r12
2349	pxor	%xmm8,%xmm0
2350	leaq	128(%rsp),%rax
2351	movl	%edx,%r10d
2352
2353	call	_bsaes_decrypt8
2354
2355	pxor	0(%rsp),%xmm15
2356	pxor	16(%rsp),%xmm0
2357	movdqu	%xmm15,0(%r13)
2358	movdqu	%xmm0,16(%r13)
2359	leaq	32(%r13),%r13
2360
2361	movdqa	32(%rsp),%xmm6
2362	jmp	.Lxts_dec_done
2363.align	16
2364.Lxts_dec_1:
2365	pxor	%xmm15,%xmm7
2366	leaq	16(%r12),%r12
2367	movdqa	%xmm7,32(%rbp)
2368	leaq	32(%rbp),%rdi
2369	leaq	32(%rbp),%rsi
2370	leaq	(%r15),%rdx
2371	call	asm_AES_decrypt
2372	pxor	32(%rbp),%xmm15
2373
2374
2375
2376
2377
2378	movdqu	%xmm15,0(%r13)
2379	leaq	16(%r13),%r13
2380
2381	movdqa	16(%rsp),%xmm6
2382
2383.Lxts_dec_done:
2384	andl	$15,%ebx
2385	jz	.Lxts_dec_ret
2386
2387	pxor	%xmm14,%xmm14
2388	movdqa	.Lxts_magic(%rip),%xmm12
2389	pcmpgtd	%xmm6,%xmm14
2390	pshufd	$0x13,%xmm14,%xmm13
2391	movdqa	%xmm6,%xmm5
2392	paddq	%xmm6,%xmm6
2393	pand	%xmm12,%xmm13
2394	movdqu	(%r12),%xmm15
2395	pxor	%xmm13,%xmm6
2396
2397	leaq	32(%rbp),%rdi
2398	pxor	%xmm6,%xmm15
2399	leaq	32(%rbp),%rsi
2400	movdqa	%xmm15,32(%rbp)
2401	leaq	(%r15),%rdx
2402	call	asm_AES_decrypt
2403	pxor	32(%rbp),%xmm6
2404	movq	%r13,%rdx
2405	movdqu	%xmm6,(%r13)
2406
2407.Lxts_dec_steal:
2408	movzbl	16(%r12),%eax
2409	movzbl	(%rdx),%ecx
2410	leaq	1(%r12),%r12
2411	movb	%al,(%rdx)
2412	movb	%cl,16(%rdx)
2413	leaq	1(%rdx),%rdx
2414	subl	$1,%ebx
2415	jnz	.Lxts_dec_steal
2416
2417	movdqu	(%r13),%xmm15
2418	leaq	32(%rbp),%rdi
2419	pxor	%xmm5,%xmm15
2420	leaq	32(%rbp),%rsi
2421	movdqa	%xmm15,32(%rbp)
2422	leaq	(%r15),%rdx
2423	call	asm_AES_decrypt
2424	pxor	32(%rbp),%xmm5
2425	movdqu	%xmm5,(%r13)
2426
2427.Lxts_dec_ret:
2428	leaq	(%rsp),%rax
2429	pxor	%xmm0,%xmm0
2430.Lxts_dec_bzero:
2431	movdqa	%xmm0,0(%rax)
2432	movdqa	%xmm0,16(%rax)
2433	leaq	32(%rax),%rax
2434	cmpq	%rax,%rbp
2435	ja	.Lxts_dec_bzero
2436
2437	leaq	120(%rbp),%rax
2438	movq	-48(%rax),%r15
2439	movq	-40(%rax),%r14
2440	movq	-32(%rax),%r13
2441	movq	-24(%rax),%r12
2442	movq	-16(%rax),%rbx
2443	movq	-8(%rax),%rbp
2444	leaq	(%rax),%rsp
2445.Lxts_dec_epilogue:
2446	.byte	0xf3,0xc3
2447.size	bsaes_xts_decrypt,.-bsaes_xts_decrypt
2448.type	_bsaes_const,@object
2449.align	64
2450_bsaes_const:
2451.LM0ISR:
2452.quad	0x0a0e0206070b0f03, 0x0004080c0d010509
2453.LISRM0:
2454.quad	0x01040b0e0205080f, 0x0306090c00070a0d
2455.LISR:
2456.quad	0x0504070602010003, 0x0f0e0d0c080b0a09
2457.LBS0:
2458.quad	0x5555555555555555, 0x5555555555555555
2459.LBS1:
2460.quad	0x3333333333333333, 0x3333333333333333
2461.LBS2:
2462.quad	0x0f0f0f0f0f0f0f0f, 0x0f0f0f0f0f0f0f0f
2463.LSR:
2464.quad	0x0504070600030201, 0x0f0e0d0c0a09080b
2465.LSRM0:
2466.quad	0x0304090e00050a0f, 0x01060b0c0207080d
2467.LM0SR:
2468.quad	0x0a0e02060f03070b, 0x0004080c05090d01
2469.LSWPUP:
2470.quad	0x0706050403020100, 0x0c0d0e0f0b0a0908
2471.LSWPUPM0SR:
2472.quad	0x0a0d02060c03070b, 0x0004080f05090e01
2473.LADD1:
2474.quad	0x0000000000000000, 0x0000000100000000
2475.LADD2:
2476.quad	0x0000000000000000, 0x0000000200000000
2477.LADD3:
2478.quad	0x0000000000000000, 0x0000000300000000
2479.LADD4:
2480.quad	0x0000000000000000, 0x0000000400000000
2481.LADD5:
2482.quad	0x0000000000000000, 0x0000000500000000
2483.LADD6:
2484.quad	0x0000000000000000, 0x0000000600000000
2485.LADD7:
2486.quad	0x0000000000000000, 0x0000000700000000
2487.LADD8:
2488.quad	0x0000000000000000, 0x0000000800000000
2489.Lxts_magic:
2490.long	0x87,0,1,0
2491.Lmasks:
2492.quad	0x0101010101010101, 0x0101010101010101
2493.quad	0x0202020202020202, 0x0202020202020202
2494.quad	0x0404040404040404, 0x0404040404040404
2495.quad	0x0808080808080808, 0x0808080808080808
2496.LM0:
2497.quad	0x02060a0e03070b0f, 0x0004080c0105090d
2498.L63:
2499.quad	0x6363636363636363, 0x6363636363636363
2500.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
2501.align	64
2502.size	_bsaes_const,.-_bsaes_const
2503#endif
2504