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