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