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