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