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