xref: /freebsd/sys/crypto/openssl/amd64/bsaes-x86_64.S (revision 4757b351ea9d59d71d4a38b82506d2d16fcd560d)
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.byte	243,15,30,250
1576	movq	%rsp,%rax
1577.Lxts_enc_prologue:
1578	pushq	%rbp
1579.cfi_adjust_cfa_offset	8
1580.cfi_offset	%rbp,-16
1581	pushq	%rbx
1582.cfi_adjust_cfa_offset	8
1583.cfi_offset	%rbx,-24
1584	pushq	%r12
1585.cfi_adjust_cfa_offset	8
1586.cfi_offset	%r12,-32
1587	pushq	%r13
1588.cfi_adjust_cfa_offset	8
1589.cfi_offset	%r13,-40
1590	pushq	%r14
1591.cfi_adjust_cfa_offset	8
1592.cfi_offset	%r14,-48
1593	pushq	%r15
1594.cfi_adjust_cfa_offset	8
1595.cfi_offset	%r15,-56
1596	leaq	-72(%rsp),%rsp
1597.cfi_adjust_cfa_offset	0x48
1598	movq	%rsp,%rbp
1599.cfi_def_cfa_register	%rbp
1600	movq	%rdi,%r12
1601	movq	%rsi,%r13
1602	movq	%rdx,%r14
1603	movq	%rcx,%r15
1604
1605	leaq	(%r9),%rdi
1606	leaq	32(%rbp),%rsi
1607	leaq	(%r8),%rdx
1608	call	asm_AES_encrypt
1609
1610	movl	240(%r15),%eax
1611	movq	%r14,%rbx
1612
1613	movl	%eax,%edx
1614	shlq	$7,%rax
1615	subq	$96,%rax
1616	subq	%rax,%rsp
1617
1618	movq	%rsp,%rax
1619	movq	%r15,%rcx
1620	movl	%edx,%r10d
1621	call	_bsaes_key_convert
1622	pxor	%xmm6,%xmm7
1623	movdqa	%xmm7,(%rax)
1624
1625	andq	$-16,%r14
1626	subq	$0x80,%rsp
1627	movdqa	32(%rbp),%xmm6
1628
1629	pxor	%xmm14,%xmm14
1630	movdqa	.Lxts_magic(%rip),%xmm12
1631	pcmpgtd	%xmm6,%xmm14
1632
1633	subq	$0x80,%r14
1634	jc	.Lxts_enc_short
1635	jmp	.Lxts_enc_loop
1636
1637.align	16
1638.Lxts_enc_loop:
1639	pshufd	$0x13,%xmm14,%xmm13
1640	pxor	%xmm14,%xmm14
1641	movdqa	%xmm6,%xmm15
1642	movdqa	%xmm6,0(%rsp)
1643	paddq	%xmm6,%xmm6
1644	pand	%xmm12,%xmm13
1645	pcmpgtd	%xmm6,%xmm14
1646	pxor	%xmm13,%xmm6
1647	pshufd	$0x13,%xmm14,%xmm13
1648	pxor	%xmm14,%xmm14
1649	movdqa	%xmm6,%xmm0
1650	movdqa	%xmm6,16(%rsp)
1651	paddq	%xmm6,%xmm6
1652	pand	%xmm12,%xmm13
1653	pcmpgtd	%xmm6,%xmm14
1654	pxor	%xmm13,%xmm6
1655	movdqu	0(%r12),%xmm7
1656	pshufd	$0x13,%xmm14,%xmm13
1657	pxor	%xmm14,%xmm14
1658	movdqa	%xmm6,%xmm1
1659	movdqa	%xmm6,32(%rsp)
1660	paddq	%xmm6,%xmm6
1661	pand	%xmm12,%xmm13
1662	pcmpgtd	%xmm6,%xmm14
1663	pxor	%xmm13,%xmm6
1664	movdqu	16(%r12),%xmm8
1665	pxor	%xmm7,%xmm15
1666	pshufd	$0x13,%xmm14,%xmm13
1667	pxor	%xmm14,%xmm14
1668	movdqa	%xmm6,%xmm2
1669	movdqa	%xmm6,48(%rsp)
1670	paddq	%xmm6,%xmm6
1671	pand	%xmm12,%xmm13
1672	pcmpgtd	%xmm6,%xmm14
1673	pxor	%xmm13,%xmm6
1674	movdqu	32(%r12),%xmm9
1675	pxor	%xmm8,%xmm0
1676	pshufd	$0x13,%xmm14,%xmm13
1677	pxor	%xmm14,%xmm14
1678	movdqa	%xmm6,%xmm3
1679	movdqa	%xmm6,64(%rsp)
1680	paddq	%xmm6,%xmm6
1681	pand	%xmm12,%xmm13
1682	pcmpgtd	%xmm6,%xmm14
1683	pxor	%xmm13,%xmm6
1684	movdqu	48(%r12),%xmm10
1685	pxor	%xmm9,%xmm1
1686	pshufd	$0x13,%xmm14,%xmm13
1687	pxor	%xmm14,%xmm14
1688	movdqa	%xmm6,%xmm4
1689	movdqa	%xmm6,80(%rsp)
1690	paddq	%xmm6,%xmm6
1691	pand	%xmm12,%xmm13
1692	pcmpgtd	%xmm6,%xmm14
1693	pxor	%xmm13,%xmm6
1694	movdqu	64(%r12),%xmm11
1695	pxor	%xmm10,%xmm2
1696	pshufd	$0x13,%xmm14,%xmm13
1697	pxor	%xmm14,%xmm14
1698	movdqa	%xmm6,%xmm5
1699	movdqa	%xmm6,96(%rsp)
1700	paddq	%xmm6,%xmm6
1701	pand	%xmm12,%xmm13
1702	pcmpgtd	%xmm6,%xmm14
1703	pxor	%xmm13,%xmm6
1704	movdqu	80(%r12),%xmm12
1705	pxor	%xmm11,%xmm3
1706	movdqu	96(%r12),%xmm13
1707	pxor	%xmm12,%xmm4
1708	movdqu	112(%r12),%xmm14
1709	leaq	128(%r12),%r12
1710	movdqa	%xmm6,112(%rsp)
1711	pxor	%xmm13,%xmm5
1712	leaq	128(%rsp),%rax
1713	pxor	%xmm14,%xmm6
1714	movl	%edx,%r10d
1715
1716	call	_bsaes_encrypt8
1717
1718	pxor	0(%rsp),%xmm15
1719	pxor	16(%rsp),%xmm0
1720	movdqu	%xmm15,0(%r13)
1721	pxor	32(%rsp),%xmm3
1722	movdqu	%xmm0,16(%r13)
1723	pxor	48(%rsp),%xmm5
1724	movdqu	%xmm3,32(%r13)
1725	pxor	64(%rsp),%xmm2
1726	movdqu	%xmm5,48(%r13)
1727	pxor	80(%rsp),%xmm6
1728	movdqu	%xmm2,64(%r13)
1729	pxor	96(%rsp),%xmm1
1730	movdqu	%xmm6,80(%r13)
1731	pxor	112(%rsp),%xmm4
1732	movdqu	%xmm1,96(%r13)
1733	movdqu	%xmm4,112(%r13)
1734	leaq	128(%r13),%r13
1735
1736	movdqa	112(%rsp),%xmm6
1737	pxor	%xmm14,%xmm14
1738	movdqa	.Lxts_magic(%rip),%xmm12
1739	pcmpgtd	%xmm6,%xmm14
1740	pshufd	$0x13,%xmm14,%xmm13
1741	pxor	%xmm14,%xmm14
1742	paddq	%xmm6,%xmm6
1743	pand	%xmm12,%xmm13
1744	pcmpgtd	%xmm6,%xmm14
1745	pxor	%xmm13,%xmm6
1746
1747	subq	$0x80,%r14
1748	jnc	.Lxts_enc_loop
1749
1750.Lxts_enc_short:
1751	addq	$0x80,%r14
1752	jz	.Lxts_enc_done
1753	pshufd	$0x13,%xmm14,%xmm13
1754	pxor	%xmm14,%xmm14
1755	movdqa	%xmm6,%xmm15
1756	movdqa	%xmm6,0(%rsp)
1757	paddq	%xmm6,%xmm6
1758	pand	%xmm12,%xmm13
1759	pcmpgtd	%xmm6,%xmm14
1760	pxor	%xmm13,%xmm6
1761	pshufd	$0x13,%xmm14,%xmm13
1762	pxor	%xmm14,%xmm14
1763	movdqa	%xmm6,%xmm0
1764	movdqa	%xmm6,16(%rsp)
1765	paddq	%xmm6,%xmm6
1766	pand	%xmm12,%xmm13
1767	pcmpgtd	%xmm6,%xmm14
1768	pxor	%xmm13,%xmm6
1769	movdqu	0(%r12),%xmm7
1770	cmpq	$16,%r14
1771	je	.Lxts_enc_1
1772	pshufd	$0x13,%xmm14,%xmm13
1773	pxor	%xmm14,%xmm14
1774	movdqa	%xmm6,%xmm1
1775	movdqa	%xmm6,32(%rsp)
1776	paddq	%xmm6,%xmm6
1777	pand	%xmm12,%xmm13
1778	pcmpgtd	%xmm6,%xmm14
1779	pxor	%xmm13,%xmm6
1780	movdqu	16(%r12),%xmm8
1781	cmpq	$32,%r14
1782	je	.Lxts_enc_2
1783	pxor	%xmm7,%xmm15
1784	pshufd	$0x13,%xmm14,%xmm13
1785	pxor	%xmm14,%xmm14
1786	movdqa	%xmm6,%xmm2
1787	movdqa	%xmm6,48(%rsp)
1788	paddq	%xmm6,%xmm6
1789	pand	%xmm12,%xmm13
1790	pcmpgtd	%xmm6,%xmm14
1791	pxor	%xmm13,%xmm6
1792	movdqu	32(%r12),%xmm9
1793	cmpq	$48,%r14
1794	je	.Lxts_enc_3
1795	pxor	%xmm8,%xmm0
1796	pshufd	$0x13,%xmm14,%xmm13
1797	pxor	%xmm14,%xmm14
1798	movdqa	%xmm6,%xmm3
1799	movdqa	%xmm6,64(%rsp)
1800	paddq	%xmm6,%xmm6
1801	pand	%xmm12,%xmm13
1802	pcmpgtd	%xmm6,%xmm14
1803	pxor	%xmm13,%xmm6
1804	movdqu	48(%r12),%xmm10
1805	cmpq	$64,%r14
1806	je	.Lxts_enc_4
1807	pxor	%xmm9,%xmm1
1808	pshufd	$0x13,%xmm14,%xmm13
1809	pxor	%xmm14,%xmm14
1810	movdqa	%xmm6,%xmm4
1811	movdqa	%xmm6,80(%rsp)
1812	paddq	%xmm6,%xmm6
1813	pand	%xmm12,%xmm13
1814	pcmpgtd	%xmm6,%xmm14
1815	pxor	%xmm13,%xmm6
1816	movdqu	64(%r12),%xmm11
1817	cmpq	$80,%r14
1818	je	.Lxts_enc_5
1819	pxor	%xmm10,%xmm2
1820	pshufd	$0x13,%xmm14,%xmm13
1821	pxor	%xmm14,%xmm14
1822	movdqa	%xmm6,%xmm5
1823	movdqa	%xmm6,96(%rsp)
1824	paddq	%xmm6,%xmm6
1825	pand	%xmm12,%xmm13
1826	pcmpgtd	%xmm6,%xmm14
1827	pxor	%xmm13,%xmm6
1828	movdqu	80(%r12),%xmm12
1829	cmpq	$96,%r14
1830	je	.Lxts_enc_6
1831	pxor	%xmm11,%xmm3
1832	movdqu	96(%r12),%xmm13
1833	pxor	%xmm12,%xmm4
1834	movdqa	%xmm6,112(%rsp)
1835	leaq	112(%r12),%r12
1836	pxor	%xmm13,%xmm5
1837	leaq	128(%rsp),%rax
1838	movl	%edx,%r10d
1839
1840	call	_bsaes_encrypt8
1841
1842	pxor	0(%rsp),%xmm15
1843	pxor	16(%rsp),%xmm0
1844	movdqu	%xmm15,0(%r13)
1845	pxor	32(%rsp),%xmm3
1846	movdqu	%xmm0,16(%r13)
1847	pxor	48(%rsp),%xmm5
1848	movdqu	%xmm3,32(%r13)
1849	pxor	64(%rsp),%xmm2
1850	movdqu	%xmm5,48(%r13)
1851	pxor	80(%rsp),%xmm6
1852	movdqu	%xmm2,64(%r13)
1853	pxor	96(%rsp),%xmm1
1854	movdqu	%xmm6,80(%r13)
1855	movdqu	%xmm1,96(%r13)
1856	leaq	112(%r13),%r13
1857
1858	movdqa	112(%rsp),%xmm6
1859	jmp	.Lxts_enc_done
1860.align	16
1861.Lxts_enc_6:
1862	pxor	%xmm11,%xmm3
1863	leaq	96(%r12),%r12
1864	pxor	%xmm12,%xmm4
1865	leaq	128(%rsp),%rax
1866	movl	%edx,%r10d
1867
1868	call	_bsaes_encrypt8
1869
1870	pxor	0(%rsp),%xmm15
1871	pxor	16(%rsp),%xmm0
1872	movdqu	%xmm15,0(%r13)
1873	pxor	32(%rsp),%xmm3
1874	movdqu	%xmm0,16(%r13)
1875	pxor	48(%rsp),%xmm5
1876	movdqu	%xmm3,32(%r13)
1877	pxor	64(%rsp),%xmm2
1878	movdqu	%xmm5,48(%r13)
1879	pxor	80(%rsp),%xmm6
1880	movdqu	%xmm2,64(%r13)
1881	movdqu	%xmm6,80(%r13)
1882	leaq	96(%r13),%r13
1883
1884	movdqa	96(%rsp),%xmm6
1885	jmp	.Lxts_enc_done
1886.align	16
1887.Lxts_enc_5:
1888	pxor	%xmm10,%xmm2
1889	leaq	80(%r12),%r12
1890	pxor	%xmm11,%xmm3
1891	leaq	128(%rsp),%rax
1892	movl	%edx,%r10d
1893
1894	call	_bsaes_encrypt8
1895
1896	pxor	0(%rsp),%xmm15
1897	pxor	16(%rsp),%xmm0
1898	movdqu	%xmm15,0(%r13)
1899	pxor	32(%rsp),%xmm3
1900	movdqu	%xmm0,16(%r13)
1901	pxor	48(%rsp),%xmm5
1902	movdqu	%xmm3,32(%r13)
1903	pxor	64(%rsp),%xmm2
1904	movdqu	%xmm5,48(%r13)
1905	movdqu	%xmm2,64(%r13)
1906	leaq	80(%r13),%r13
1907
1908	movdqa	80(%rsp),%xmm6
1909	jmp	.Lxts_enc_done
1910.align	16
1911.Lxts_enc_4:
1912	pxor	%xmm9,%xmm1
1913	leaq	64(%r12),%r12
1914	pxor	%xmm10,%xmm2
1915	leaq	128(%rsp),%rax
1916	movl	%edx,%r10d
1917
1918	call	_bsaes_encrypt8
1919
1920	pxor	0(%rsp),%xmm15
1921	pxor	16(%rsp),%xmm0
1922	movdqu	%xmm15,0(%r13)
1923	pxor	32(%rsp),%xmm3
1924	movdqu	%xmm0,16(%r13)
1925	pxor	48(%rsp),%xmm5
1926	movdqu	%xmm3,32(%r13)
1927	movdqu	%xmm5,48(%r13)
1928	leaq	64(%r13),%r13
1929
1930	movdqa	64(%rsp),%xmm6
1931	jmp	.Lxts_enc_done
1932.align	16
1933.Lxts_enc_3:
1934	pxor	%xmm8,%xmm0
1935	leaq	48(%r12),%r12
1936	pxor	%xmm9,%xmm1
1937	leaq	128(%rsp),%rax
1938	movl	%edx,%r10d
1939
1940	call	_bsaes_encrypt8
1941
1942	pxor	0(%rsp),%xmm15
1943	pxor	16(%rsp),%xmm0
1944	movdqu	%xmm15,0(%r13)
1945	pxor	32(%rsp),%xmm3
1946	movdqu	%xmm0,16(%r13)
1947	movdqu	%xmm3,32(%r13)
1948	leaq	48(%r13),%r13
1949
1950	movdqa	48(%rsp),%xmm6
1951	jmp	.Lxts_enc_done
1952.align	16
1953.Lxts_enc_2:
1954	pxor	%xmm7,%xmm15
1955	leaq	32(%r12),%r12
1956	pxor	%xmm8,%xmm0
1957	leaq	128(%rsp),%rax
1958	movl	%edx,%r10d
1959
1960	call	_bsaes_encrypt8
1961
1962	pxor	0(%rsp),%xmm15
1963	pxor	16(%rsp),%xmm0
1964	movdqu	%xmm15,0(%r13)
1965	movdqu	%xmm0,16(%r13)
1966	leaq	32(%r13),%r13
1967
1968	movdqa	32(%rsp),%xmm6
1969	jmp	.Lxts_enc_done
1970.align	16
1971.Lxts_enc_1:
1972	pxor	%xmm15,%xmm7
1973	leaq	16(%r12),%r12
1974	movdqa	%xmm7,32(%rbp)
1975	leaq	32(%rbp),%rdi
1976	leaq	32(%rbp),%rsi
1977	leaq	(%r15),%rdx
1978	call	asm_AES_encrypt
1979	pxor	32(%rbp),%xmm15
1980
1981
1982
1983
1984
1985	movdqu	%xmm15,0(%r13)
1986	leaq	16(%r13),%r13
1987
1988	movdqa	16(%rsp),%xmm6
1989
1990.Lxts_enc_done:
1991	andl	$15,%ebx
1992	jz	.Lxts_enc_ret
1993	movq	%r13,%rdx
1994
1995.Lxts_enc_steal:
1996	movzbl	(%r12),%eax
1997	movzbl	-16(%rdx),%ecx
1998	leaq	1(%r12),%r12
1999	movb	%al,-16(%rdx)
2000	movb	%cl,0(%rdx)
2001	leaq	1(%rdx),%rdx
2002	subl	$1,%ebx
2003	jnz	.Lxts_enc_steal
2004
2005	movdqu	-16(%r13),%xmm15
2006	leaq	32(%rbp),%rdi
2007	pxor	%xmm6,%xmm15
2008	leaq	32(%rbp),%rsi
2009	movdqa	%xmm15,32(%rbp)
2010	leaq	(%r15),%rdx
2011	call	asm_AES_encrypt
2012	pxor	32(%rbp),%xmm6
2013	movdqu	%xmm6,-16(%r13)
2014
2015.Lxts_enc_ret:
2016	leaq	(%rsp),%rax
2017	pxor	%xmm0,%xmm0
2018.Lxts_enc_bzero:
2019	movdqa	%xmm0,0(%rax)
2020	movdqa	%xmm0,16(%rax)
2021	leaq	32(%rax),%rax
2022	cmpq	%rax,%rbp
2023	ja	.Lxts_enc_bzero
2024
2025	leaq	120(%rbp),%rax
2026.cfi_def_cfa	%rax,8
2027	movq	-48(%rax),%r15
2028.cfi_restore	%r15
2029	movq	-40(%rax),%r14
2030.cfi_restore	%r14
2031	movq	-32(%rax),%r13
2032.cfi_restore	%r13
2033	movq	-24(%rax),%r12
2034.cfi_restore	%r12
2035	movq	-16(%rax),%rbx
2036.cfi_restore	%rbx
2037	movq	-8(%rax),%rbp
2038.cfi_restore	%rbp
2039	leaq	(%rax),%rsp
2040.cfi_def_cfa_register	%rsp
2041.Lxts_enc_epilogue:
2042	.byte	0xf3,0xc3
2043.cfi_endproc
2044.size	ossl_bsaes_xts_encrypt,.-ossl_bsaes_xts_encrypt
2045
2046.globl	ossl_bsaes_xts_decrypt
2047.type	ossl_bsaes_xts_decrypt,@function
2048.align	16
2049ossl_bsaes_xts_decrypt:
2050.cfi_startproc
2051.byte	243,15,30,250
2052	movq	%rsp,%rax
2053.Lxts_dec_prologue:
2054	pushq	%rbp
2055.cfi_adjust_cfa_offset	8
2056.cfi_offset	%rbp,-16
2057	pushq	%rbx
2058.cfi_adjust_cfa_offset	8
2059.cfi_offset	%rbx,-24
2060	pushq	%r12
2061.cfi_adjust_cfa_offset	8
2062.cfi_offset	%r12,-32
2063	pushq	%r13
2064.cfi_adjust_cfa_offset	8
2065.cfi_offset	%r13,-40
2066	pushq	%r14
2067.cfi_adjust_cfa_offset	8
2068.cfi_offset	%r14,-48
2069	pushq	%r15
2070.cfi_adjust_cfa_offset	8
2071.cfi_offset	%r15,-56
2072	leaq	-72(%rsp),%rsp
2073.cfi_adjust_cfa_offset	0x48
2074	movq	%rsp,%rbp
2075	movq	%rdi,%r12
2076	movq	%rsi,%r13
2077	movq	%rdx,%r14
2078	movq	%rcx,%r15
2079
2080	leaq	(%r9),%rdi
2081	leaq	32(%rbp),%rsi
2082	leaq	(%r8),%rdx
2083	call	asm_AES_encrypt
2084
2085	movl	240(%r15),%eax
2086	movq	%r14,%rbx
2087
2088	movl	%eax,%edx
2089	shlq	$7,%rax
2090	subq	$96,%rax
2091	subq	%rax,%rsp
2092
2093	movq	%rsp,%rax
2094	movq	%r15,%rcx
2095	movl	%edx,%r10d
2096	call	_bsaes_key_convert
2097	pxor	(%rsp),%xmm7
2098	movdqa	%xmm6,(%rax)
2099	movdqa	%xmm7,(%rsp)
2100
2101	xorl	%eax,%eax
2102	andq	$-16,%r14
2103	testl	$15,%ebx
2104	setnz	%al
2105	shlq	$4,%rax
2106	subq	%rax,%r14
2107
2108	subq	$0x80,%rsp
2109	movdqa	32(%rbp),%xmm6
2110
2111	pxor	%xmm14,%xmm14
2112	movdqa	.Lxts_magic(%rip),%xmm12
2113	pcmpgtd	%xmm6,%xmm14
2114
2115	subq	$0x80,%r14
2116	jc	.Lxts_dec_short
2117	jmp	.Lxts_dec_loop
2118
2119.align	16
2120.Lxts_dec_loop:
2121	pshufd	$0x13,%xmm14,%xmm13
2122	pxor	%xmm14,%xmm14
2123	movdqa	%xmm6,%xmm15
2124	movdqa	%xmm6,0(%rsp)
2125	paddq	%xmm6,%xmm6
2126	pand	%xmm12,%xmm13
2127	pcmpgtd	%xmm6,%xmm14
2128	pxor	%xmm13,%xmm6
2129	pshufd	$0x13,%xmm14,%xmm13
2130	pxor	%xmm14,%xmm14
2131	movdqa	%xmm6,%xmm0
2132	movdqa	%xmm6,16(%rsp)
2133	paddq	%xmm6,%xmm6
2134	pand	%xmm12,%xmm13
2135	pcmpgtd	%xmm6,%xmm14
2136	pxor	%xmm13,%xmm6
2137	movdqu	0(%r12),%xmm7
2138	pshufd	$0x13,%xmm14,%xmm13
2139	pxor	%xmm14,%xmm14
2140	movdqa	%xmm6,%xmm1
2141	movdqa	%xmm6,32(%rsp)
2142	paddq	%xmm6,%xmm6
2143	pand	%xmm12,%xmm13
2144	pcmpgtd	%xmm6,%xmm14
2145	pxor	%xmm13,%xmm6
2146	movdqu	16(%r12),%xmm8
2147	pxor	%xmm7,%xmm15
2148	pshufd	$0x13,%xmm14,%xmm13
2149	pxor	%xmm14,%xmm14
2150	movdqa	%xmm6,%xmm2
2151	movdqa	%xmm6,48(%rsp)
2152	paddq	%xmm6,%xmm6
2153	pand	%xmm12,%xmm13
2154	pcmpgtd	%xmm6,%xmm14
2155	pxor	%xmm13,%xmm6
2156	movdqu	32(%r12),%xmm9
2157	pxor	%xmm8,%xmm0
2158	pshufd	$0x13,%xmm14,%xmm13
2159	pxor	%xmm14,%xmm14
2160	movdqa	%xmm6,%xmm3
2161	movdqa	%xmm6,64(%rsp)
2162	paddq	%xmm6,%xmm6
2163	pand	%xmm12,%xmm13
2164	pcmpgtd	%xmm6,%xmm14
2165	pxor	%xmm13,%xmm6
2166	movdqu	48(%r12),%xmm10
2167	pxor	%xmm9,%xmm1
2168	pshufd	$0x13,%xmm14,%xmm13
2169	pxor	%xmm14,%xmm14
2170	movdqa	%xmm6,%xmm4
2171	movdqa	%xmm6,80(%rsp)
2172	paddq	%xmm6,%xmm6
2173	pand	%xmm12,%xmm13
2174	pcmpgtd	%xmm6,%xmm14
2175	pxor	%xmm13,%xmm6
2176	movdqu	64(%r12),%xmm11
2177	pxor	%xmm10,%xmm2
2178	pshufd	$0x13,%xmm14,%xmm13
2179	pxor	%xmm14,%xmm14
2180	movdqa	%xmm6,%xmm5
2181	movdqa	%xmm6,96(%rsp)
2182	paddq	%xmm6,%xmm6
2183	pand	%xmm12,%xmm13
2184	pcmpgtd	%xmm6,%xmm14
2185	pxor	%xmm13,%xmm6
2186	movdqu	80(%r12),%xmm12
2187	pxor	%xmm11,%xmm3
2188	movdqu	96(%r12),%xmm13
2189	pxor	%xmm12,%xmm4
2190	movdqu	112(%r12),%xmm14
2191	leaq	128(%r12),%r12
2192	movdqa	%xmm6,112(%rsp)
2193	pxor	%xmm13,%xmm5
2194	leaq	128(%rsp),%rax
2195	pxor	%xmm14,%xmm6
2196	movl	%edx,%r10d
2197
2198	call	_bsaes_decrypt8
2199
2200	pxor	0(%rsp),%xmm15
2201	pxor	16(%rsp),%xmm0
2202	movdqu	%xmm15,0(%r13)
2203	pxor	32(%rsp),%xmm5
2204	movdqu	%xmm0,16(%r13)
2205	pxor	48(%rsp),%xmm3
2206	movdqu	%xmm5,32(%r13)
2207	pxor	64(%rsp),%xmm1
2208	movdqu	%xmm3,48(%r13)
2209	pxor	80(%rsp),%xmm6
2210	movdqu	%xmm1,64(%r13)
2211	pxor	96(%rsp),%xmm2
2212	movdqu	%xmm6,80(%r13)
2213	pxor	112(%rsp),%xmm4
2214	movdqu	%xmm2,96(%r13)
2215	movdqu	%xmm4,112(%r13)
2216	leaq	128(%r13),%r13
2217
2218	movdqa	112(%rsp),%xmm6
2219	pxor	%xmm14,%xmm14
2220	movdqa	.Lxts_magic(%rip),%xmm12
2221	pcmpgtd	%xmm6,%xmm14
2222	pshufd	$0x13,%xmm14,%xmm13
2223	pxor	%xmm14,%xmm14
2224	paddq	%xmm6,%xmm6
2225	pand	%xmm12,%xmm13
2226	pcmpgtd	%xmm6,%xmm14
2227	pxor	%xmm13,%xmm6
2228
2229	subq	$0x80,%r14
2230	jnc	.Lxts_dec_loop
2231
2232.Lxts_dec_short:
2233	addq	$0x80,%r14
2234	jz	.Lxts_dec_done
2235	pshufd	$0x13,%xmm14,%xmm13
2236	pxor	%xmm14,%xmm14
2237	movdqa	%xmm6,%xmm15
2238	movdqa	%xmm6,0(%rsp)
2239	paddq	%xmm6,%xmm6
2240	pand	%xmm12,%xmm13
2241	pcmpgtd	%xmm6,%xmm14
2242	pxor	%xmm13,%xmm6
2243	pshufd	$0x13,%xmm14,%xmm13
2244	pxor	%xmm14,%xmm14
2245	movdqa	%xmm6,%xmm0
2246	movdqa	%xmm6,16(%rsp)
2247	paddq	%xmm6,%xmm6
2248	pand	%xmm12,%xmm13
2249	pcmpgtd	%xmm6,%xmm14
2250	pxor	%xmm13,%xmm6
2251	movdqu	0(%r12),%xmm7
2252	cmpq	$16,%r14
2253	je	.Lxts_dec_1
2254	pshufd	$0x13,%xmm14,%xmm13
2255	pxor	%xmm14,%xmm14
2256	movdqa	%xmm6,%xmm1
2257	movdqa	%xmm6,32(%rsp)
2258	paddq	%xmm6,%xmm6
2259	pand	%xmm12,%xmm13
2260	pcmpgtd	%xmm6,%xmm14
2261	pxor	%xmm13,%xmm6
2262	movdqu	16(%r12),%xmm8
2263	cmpq	$32,%r14
2264	je	.Lxts_dec_2
2265	pxor	%xmm7,%xmm15
2266	pshufd	$0x13,%xmm14,%xmm13
2267	pxor	%xmm14,%xmm14
2268	movdqa	%xmm6,%xmm2
2269	movdqa	%xmm6,48(%rsp)
2270	paddq	%xmm6,%xmm6
2271	pand	%xmm12,%xmm13
2272	pcmpgtd	%xmm6,%xmm14
2273	pxor	%xmm13,%xmm6
2274	movdqu	32(%r12),%xmm9
2275	cmpq	$48,%r14
2276	je	.Lxts_dec_3
2277	pxor	%xmm8,%xmm0
2278	pshufd	$0x13,%xmm14,%xmm13
2279	pxor	%xmm14,%xmm14
2280	movdqa	%xmm6,%xmm3
2281	movdqa	%xmm6,64(%rsp)
2282	paddq	%xmm6,%xmm6
2283	pand	%xmm12,%xmm13
2284	pcmpgtd	%xmm6,%xmm14
2285	pxor	%xmm13,%xmm6
2286	movdqu	48(%r12),%xmm10
2287	cmpq	$64,%r14
2288	je	.Lxts_dec_4
2289	pxor	%xmm9,%xmm1
2290	pshufd	$0x13,%xmm14,%xmm13
2291	pxor	%xmm14,%xmm14
2292	movdqa	%xmm6,%xmm4
2293	movdqa	%xmm6,80(%rsp)
2294	paddq	%xmm6,%xmm6
2295	pand	%xmm12,%xmm13
2296	pcmpgtd	%xmm6,%xmm14
2297	pxor	%xmm13,%xmm6
2298	movdqu	64(%r12),%xmm11
2299	cmpq	$80,%r14
2300	je	.Lxts_dec_5
2301	pxor	%xmm10,%xmm2
2302	pshufd	$0x13,%xmm14,%xmm13
2303	pxor	%xmm14,%xmm14
2304	movdqa	%xmm6,%xmm5
2305	movdqa	%xmm6,96(%rsp)
2306	paddq	%xmm6,%xmm6
2307	pand	%xmm12,%xmm13
2308	pcmpgtd	%xmm6,%xmm14
2309	pxor	%xmm13,%xmm6
2310	movdqu	80(%r12),%xmm12
2311	cmpq	$96,%r14
2312	je	.Lxts_dec_6
2313	pxor	%xmm11,%xmm3
2314	movdqu	96(%r12),%xmm13
2315	pxor	%xmm12,%xmm4
2316	movdqa	%xmm6,112(%rsp)
2317	leaq	112(%r12),%r12
2318	pxor	%xmm13,%xmm5
2319	leaq	128(%rsp),%rax
2320	movl	%edx,%r10d
2321
2322	call	_bsaes_decrypt8
2323
2324	pxor	0(%rsp),%xmm15
2325	pxor	16(%rsp),%xmm0
2326	movdqu	%xmm15,0(%r13)
2327	pxor	32(%rsp),%xmm5
2328	movdqu	%xmm0,16(%r13)
2329	pxor	48(%rsp),%xmm3
2330	movdqu	%xmm5,32(%r13)
2331	pxor	64(%rsp),%xmm1
2332	movdqu	%xmm3,48(%r13)
2333	pxor	80(%rsp),%xmm6
2334	movdqu	%xmm1,64(%r13)
2335	pxor	96(%rsp),%xmm2
2336	movdqu	%xmm6,80(%r13)
2337	movdqu	%xmm2,96(%r13)
2338	leaq	112(%r13),%r13
2339
2340	movdqa	112(%rsp),%xmm6
2341	jmp	.Lxts_dec_done
2342.align	16
2343.Lxts_dec_6:
2344	pxor	%xmm11,%xmm3
2345	leaq	96(%r12),%r12
2346	pxor	%xmm12,%xmm4
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	pxor	32(%rsp),%xmm5
2356	movdqu	%xmm0,16(%r13)
2357	pxor	48(%rsp),%xmm3
2358	movdqu	%xmm5,32(%r13)
2359	pxor	64(%rsp),%xmm1
2360	movdqu	%xmm3,48(%r13)
2361	pxor	80(%rsp),%xmm6
2362	movdqu	%xmm1,64(%r13)
2363	movdqu	%xmm6,80(%r13)
2364	leaq	96(%r13),%r13
2365
2366	movdqa	96(%rsp),%xmm6
2367	jmp	.Lxts_dec_done
2368.align	16
2369.Lxts_dec_5:
2370	pxor	%xmm10,%xmm2
2371	leaq	80(%r12),%r12
2372	pxor	%xmm11,%xmm3
2373	leaq	128(%rsp),%rax
2374	movl	%edx,%r10d
2375
2376	call	_bsaes_decrypt8
2377
2378	pxor	0(%rsp),%xmm15
2379	pxor	16(%rsp),%xmm0
2380	movdqu	%xmm15,0(%r13)
2381	pxor	32(%rsp),%xmm5
2382	movdqu	%xmm0,16(%r13)
2383	pxor	48(%rsp),%xmm3
2384	movdqu	%xmm5,32(%r13)
2385	pxor	64(%rsp),%xmm1
2386	movdqu	%xmm3,48(%r13)
2387	movdqu	%xmm1,64(%r13)
2388	leaq	80(%r13),%r13
2389
2390	movdqa	80(%rsp),%xmm6
2391	jmp	.Lxts_dec_done
2392.align	16
2393.Lxts_dec_4:
2394	pxor	%xmm9,%xmm1
2395	leaq	64(%r12),%r12
2396	pxor	%xmm10,%xmm2
2397	leaq	128(%rsp),%rax
2398	movl	%edx,%r10d
2399
2400	call	_bsaes_decrypt8
2401
2402	pxor	0(%rsp),%xmm15
2403	pxor	16(%rsp),%xmm0
2404	movdqu	%xmm15,0(%r13)
2405	pxor	32(%rsp),%xmm5
2406	movdqu	%xmm0,16(%r13)
2407	pxor	48(%rsp),%xmm3
2408	movdqu	%xmm5,32(%r13)
2409	movdqu	%xmm3,48(%r13)
2410	leaq	64(%r13),%r13
2411
2412	movdqa	64(%rsp),%xmm6
2413	jmp	.Lxts_dec_done
2414.align	16
2415.Lxts_dec_3:
2416	pxor	%xmm8,%xmm0
2417	leaq	48(%r12),%r12
2418	pxor	%xmm9,%xmm1
2419	leaq	128(%rsp),%rax
2420	movl	%edx,%r10d
2421
2422	call	_bsaes_decrypt8
2423
2424	pxor	0(%rsp),%xmm15
2425	pxor	16(%rsp),%xmm0
2426	movdqu	%xmm15,0(%r13)
2427	pxor	32(%rsp),%xmm5
2428	movdqu	%xmm0,16(%r13)
2429	movdqu	%xmm5,32(%r13)
2430	leaq	48(%r13),%r13
2431
2432	movdqa	48(%rsp),%xmm6
2433	jmp	.Lxts_dec_done
2434.align	16
2435.Lxts_dec_2:
2436	pxor	%xmm7,%xmm15
2437	leaq	32(%r12),%r12
2438	pxor	%xmm8,%xmm0
2439	leaq	128(%rsp),%rax
2440	movl	%edx,%r10d
2441
2442	call	_bsaes_decrypt8
2443
2444	pxor	0(%rsp),%xmm15
2445	pxor	16(%rsp),%xmm0
2446	movdqu	%xmm15,0(%r13)
2447	movdqu	%xmm0,16(%r13)
2448	leaq	32(%r13),%r13
2449
2450	movdqa	32(%rsp),%xmm6
2451	jmp	.Lxts_dec_done
2452.align	16
2453.Lxts_dec_1:
2454	pxor	%xmm15,%xmm7
2455	leaq	16(%r12),%r12
2456	movdqa	%xmm7,32(%rbp)
2457	leaq	32(%rbp),%rdi
2458	leaq	32(%rbp),%rsi
2459	leaq	(%r15),%rdx
2460	call	asm_AES_decrypt
2461	pxor	32(%rbp),%xmm15
2462
2463
2464
2465
2466
2467	movdqu	%xmm15,0(%r13)
2468	leaq	16(%r13),%r13
2469
2470	movdqa	16(%rsp),%xmm6
2471
2472.Lxts_dec_done:
2473	andl	$15,%ebx
2474	jz	.Lxts_dec_ret
2475
2476	pxor	%xmm14,%xmm14
2477	movdqa	.Lxts_magic(%rip),%xmm12
2478	pcmpgtd	%xmm6,%xmm14
2479	pshufd	$0x13,%xmm14,%xmm13
2480	movdqa	%xmm6,%xmm5
2481	paddq	%xmm6,%xmm6
2482	pand	%xmm12,%xmm13
2483	movdqu	(%r12),%xmm15
2484	pxor	%xmm13,%xmm6
2485
2486	leaq	32(%rbp),%rdi
2487	pxor	%xmm6,%xmm15
2488	leaq	32(%rbp),%rsi
2489	movdqa	%xmm15,32(%rbp)
2490	leaq	(%r15),%rdx
2491	call	asm_AES_decrypt
2492	pxor	32(%rbp),%xmm6
2493	movq	%r13,%rdx
2494	movdqu	%xmm6,(%r13)
2495
2496.Lxts_dec_steal:
2497	movzbl	16(%r12),%eax
2498	movzbl	(%rdx),%ecx
2499	leaq	1(%r12),%r12
2500	movb	%al,(%rdx)
2501	movb	%cl,16(%rdx)
2502	leaq	1(%rdx),%rdx
2503	subl	$1,%ebx
2504	jnz	.Lxts_dec_steal
2505
2506	movdqu	(%r13),%xmm15
2507	leaq	32(%rbp),%rdi
2508	pxor	%xmm5,%xmm15
2509	leaq	32(%rbp),%rsi
2510	movdqa	%xmm15,32(%rbp)
2511	leaq	(%r15),%rdx
2512	call	asm_AES_decrypt
2513	pxor	32(%rbp),%xmm5
2514	movdqu	%xmm5,(%r13)
2515
2516.Lxts_dec_ret:
2517	leaq	(%rsp),%rax
2518	pxor	%xmm0,%xmm0
2519.Lxts_dec_bzero:
2520	movdqa	%xmm0,0(%rax)
2521	movdqa	%xmm0,16(%rax)
2522	leaq	32(%rax),%rax
2523	cmpq	%rax,%rbp
2524	ja	.Lxts_dec_bzero
2525
2526	leaq	120(%rbp),%rax
2527.cfi_def_cfa	%rax,8
2528	movq	-48(%rax),%r15
2529.cfi_restore	%r15
2530	movq	-40(%rax),%r14
2531.cfi_restore	%r14
2532	movq	-32(%rax),%r13
2533.cfi_restore	%r13
2534	movq	-24(%rax),%r12
2535.cfi_restore	%r12
2536	movq	-16(%rax),%rbx
2537.cfi_restore	%rbx
2538	movq	-8(%rax),%rbp
2539.cfi_restore	%rbp
2540	leaq	(%rax),%rsp
2541.cfi_def_cfa_register	%rsp
2542.Lxts_dec_epilogue:
2543	.byte	0xf3,0xc3
2544.cfi_endproc
2545.size	ossl_bsaes_xts_decrypt,.-ossl_bsaes_xts_decrypt
2546.type	_bsaes_const,@object
2547.section	.rodata
2548.align	64
2549_bsaes_const:
2550.LM0ISR:
2551.quad	0x0a0e0206070b0f03, 0x0004080c0d010509
2552.LISRM0:
2553.quad	0x01040b0e0205080f, 0x0306090c00070a0d
2554.LISR:
2555.quad	0x0504070602010003, 0x0f0e0d0c080b0a09
2556.LBS0:
2557.quad	0x5555555555555555, 0x5555555555555555
2558.LBS1:
2559.quad	0x3333333333333333, 0x3333333333333333
2560.LBS2:
2561.quad	0x0f0f0f0f0f0f0f0f, 0x0f0f0f0f0f0f0f0f
2562.LSR:
2563.quad	0x0504070600030201, 0x0f0e0d0c0a09080b
2564.LSRM0:
2565.quad	0x0304090e00050a0f, 0x01060b0c0207080d
2566.LM0SR:
2567.quad	0x0a0e02060f03070b, 0x0004080c05090d01
2568.LSWPUP:
2569.quad	0x0706050403020100, 0x0c0d0e0f0b0a0908
2570.LSWPUPM0SR:
2571.quad	0x0a0d02060c03070b, 0x0004080f05090e01
2572.LADD1:
2573.quad	0x0000000000000000, 0x0000000100000000
2574.LADD2:
2575.quad	0x0000000000000000, 0x0000000200000000
2576.LADD3:
2577.quad	0x0000000000000000, 0x0000000300000000
2578.LADD4:
2579.quad	0x0000000000000000, 0x0000000400000000
2580.LADD5:
2581.quad	0x0000000000000000, 0x0000000500000000
2582.LADD6:
2583.quad	0x0000000000000000, 0x0000000600000000
2584.LADD7:
2585.quad	0x0000000000000000, 0x0000000700000000
2586.LADD8:
2587.quad	0x0000000000000000, 0x0000000800000000
2588.Lxts_magic:
2589.long	0x87,0,1,0
2590.Lmasks:
2591.quad	0x0101010101010101, 0x0101010101010101
2592.quad	0x0202020202020202, 0x0202020202020202
2593.quad	0x0404040404040404, 0x0404040404040404
2594.quad	0x0808080808080808, 0x0808080808080808
2595.LM0:
2596.quad	0x02060a0e03070b0f, 0x0004080c0105090d
2597.L63:
2598.quad	0x6363636363636363, 0x6363636363636363
2599.align	64
2600.size	_bsaes_const,.-_bsaes_const
2601.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
2602	.section ".note.gnu.property", "a"
2603	.p2align 3
2604	.long 1f - 0f
2605	.long 4f - 1f
2606	.long 5
26070:
2608	# "GNU" encoded with .byte, since .asciz isn't supported
2609	# on Solaris.
2610	.byte 0x47
2611	.byte 0x4e
2612	.byte 0x55
2613	.byte 0
26141:
2615	.p2align 3
2616	.long 0xc0000002
2617	.long 3f - 2f
26182:
2619	.long 3
26203:
2621	.p2align 3
26224:
2623