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