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