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