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