1238405Sjkim	# $FreeBSD$
2238405Sjkim.text
3238405Sjkim.globl	aesni_encrypt
4238405Sjkim.type	aesni_encrypt,@function
5238405Sjkim.align	16
6238405Sjkimaesni_encrypt:
7238405Sjkim	movups	(%rdi),%xmm2
8238405Sjkim	movl	240(%rdx),%eax
9238405Sjkim	movups	(%rdx),%xmm0
10238405Sjkim	movups	16(%rdx),%xmm1
11238405Sjkim	leaq	32(%rdx),%rdx
12238405Sjkim	xorps	%xmm0,%xmm2
13238405Sjkim.Loop_enc1_1:
14238405Sjkim.byte	102,15,56,220,209
15238405Sjkim	decl	%eax
16238405Sjkim	movups	(%rdx),%xmm1
17238405Sjkim	leaq	16(%rdx),%rdx
18238405Sjkim	jnz	.Loop_enc1_1
19238405Sjkim.byte	102,15,56,221,209
20238405Sjkim	movups	%xmm2,(%rsi)
21238405Sjkim	.byte	0xf3,0xc3
22238405Sjkim.size	aesni_encrypt,.-aesni_encrypt
23238405Sjkim
24238405Sjkim.globl	aesni_decrypt
25238405Sjkim.type	aesni_decrypt,@function
26238405Sjkim.align	16
27238405Sjkimaesni_decrypt:
28238405Sjkim	movups	(%rdi),%xmm2
29238405Sjkim	movl	240(%rdx),%eax
30238405Sjkim	movups	(%rdx),%xmm0
31238405Sjkim	movups	16(%rdx),%xmm1
32238405Sjkim	leaq	32(%rdx),%rdx
33238405Sjkim	xorps	%xmm0,%xmm2
34238405Sjkim.Loop_dec1_2:
35238405Sjkim.byte	102,15,56,222,209
36238405Sjkim	decl	%eax
37238405Sjkim	movups	(%rdx),%xmm1
38238405Sjkim	leaq	16(%rdx),%rdx
39238405Sjkim	jnz	.Loop_dec1_2
40238405Sjkim.byte	102,15,56,223,209
41238405Sjkim	movups	%xmm2,(%rsi)
42238405Sjkim	.byte	0xf3,0xc3
43238405Sjkim.size	aesni_decrypt, .-aesni_decrypt
44238405Sjkim.type	_aesni_encrypt3,@function
45238405Sjkim.align	16
46238405Sjkim_aesni_encrypt3:
47238405Sjkim	movups	(%rcx),%xmm0
48238405Sjkim	shrl	$1,%eax
49238405Sjkim	movups	16(%rcx),%xmm1
50238405Sjkim	leaq	32(%rcx),%rcx
51238405Sjkim	xorps	%xmm0,%xmm2
52238405Sjkim	xorps	%xmm0,%xmm3
53238405Sjkim	xorps	%xmm0,%xmm4
54238405Sjkim	movups	(%rcx),%xmm0
55238405Sjkim
56238405Sjkim.Lenc_loop3:
57238405Sjkim.byte	102,15,56,220,209
58238405Sjkim.byte	102,15,56,220,217
59238405Sjkim	decl	%eax
60238405Sjkim.byte	102,15,56,220,225
61238405Sjkim	movups	16(%rcx),%xmm1
62238405Sjkim.byte	102,15,56,220,208
63238405Sjkim.byte	102,15,56,220,216
64238405Sjkim	leaq	32(%rcx),%rcx
65238405Sjkim.byte	102,15,56,220,224
66238405Sjkim	movups	(%rcx),%xmm0
67238405Sjkim	jnz	.Lenc_loop3
68238405Sjkim
69238405Sjkim.byte	102,15,56,220,209
70238405Sjkim.byte	102,15,56,220,217
71238405Sjkim.byte	102,15,56,220,225
72238405Sjkim.byte	102,15,56,221,208
73238405Sjkim.byte	102,15,56,221,216
74238405Sjkim.byte	102,15,56,221,224
75238405Sjkim	.byte	0xf3,0xc3
76238405Sjkim.size	_aesni_encrypt3,.-_aesni_encrypt3
77238405Sjkim.type	_aesni_decrypt3,@function
78238405Sjkim.align	16
79238405Sjkim_aesni_decrypt3:
80238405Sjkim	movups	(%rcx),%xmm0
81238405Sjkim	shrl	$1,%eax
82238405Sjkim	movups	16(%rcx),%xmm1
83238405Sjkim	leaq	32(%rcx),%rcx
84238405Sjkim	xorps	%xmm0,%xmm2
85238405Sjkim	xorps	%xmm0,%xmm3
86238405Sjkim	xorps	%xmm0,%xmm4
87238405Sjkim	movups	(%rcx),%xmm0
88238405Sjkim
89238405Sjkim.Ldec_loop3:
90238405Sjkim.byte	102,15,56,222,209
91238405Sjkim.byte	102,15,56,222,217
92238405Sjkim	decl	%eax
93238405Sjkim.byte	102,15,56,222,225
94238405Sjkim	movups	16(%rcx),%xmm1
95238405Sjkim.byte	102,15,56,222,208
96238405Sjkim.byte	102,15,56,222,216
97238405Sjkim	leaq	32(%rcx),%rcx
98238405Sjkim.byte	102,15,56,222,224
99238405Sjkim	movups	(%rcx),%xmm0
100238405Sjkim	jnz	.Ldec_loop3
101238405Sjkim
102238405Sjkim.byte	102,15,56,222,209
103238405Sjkim.byte	102,15,56,222,217
104238405Sjkim.byte	102,15,56,222,225
105238405Sjkim.byte	102,15,56,223,208
106238405Sjkim.byte	102,15,56,223,216
107238405Sjkim.byte	102,15,56,223,224
108238405Sjkim	.byte	0xf3,0xc3
109238405Sjkim.size	_aesni_decrypt3,.-_aesni_decrypt3
110238405Sjkim.type	_aesni_encrypt4,@function
111238405Sjkim.align	16
112238405Sjkim_aesni_encrypt4:
113238405Sjkim	movups	(%rcx),%xmm0
114238405Sjkim	shrl	$1,%eax
115238405Sjkim	movups	16(%rcx),%xmm1
116238405Sjkim	leaq	32(%rcx),%rcx
117238405Sjkim	xorps	%xmm0,%xmm2
118238405Sjkim	xorps	%xmm0,%xmm3
119238405Sjkim	xorps	%xmm0,%xmm4
120238405Sjkim	xorps	%xmm0,%xmm5
121238405Sjkim	movups	(%rcx),%xmm0
122238405Sjkim
123238405Sjkim.Lenc_loop4:
124238405Sjkim.byte	102,15,56,220,209
125238405Sjkim.byte	102,15,56,220,217
126238405Sjkim	decl	%eax
127238405Sjkim.byte	102,15,56,220,225
128238405Sjkim.byte	102,15,56,220,233
129238405Sjkim	movups	16(%rcx),%xmm1
130238405Sjkim.byte	102,15,56,220,208
131238405Sjkim.byte	102,15,56,220,216
132238405Sjkim	leaq	32(%rcx),%rcx
133238405Sjkim.byte	102,15,56,220,224
134238405Sjkim.byte	102,15,56,220,232
135238405Sjkim	movups	(%rcx),%xmm0
136238405Sjkim	jnz	.Lenc_loop4
137238405Sjkim
138238405Sjkim.byte	102,15,56,220,209
139238405Sjkim.byte	102,15,56,220,217
140238405Sjkim.byte	102,15,56,220,225
141238405Sjkim.byte	102,15,56,220,233
142238405Sjkim.byte	102,15,56,221,208
143238405Sjkim.byte	102,15,56,221,216
144238405Sjkim.byte	102,15,56,221,224
145238405Sjkim.byte	102,15,56,221,232
146238405Sjkim	.byte	0xf3,0xc3
147238405Sjkim.size	_aesni_encrypt4,.-_aesni_encrypt4
148238405Sjkim.type	_aesni_decrypt4,@function
149238405Sjkim.align	16
150238405Sjkim_aesni_decrypt4:
151238405Sjkim	movups	(%rcx),%xmm0
152238405Sjkim	shrl	$1,%eax
153238405Sjkim	movups	16(%rcx),%xmm1
154238405Sjkim	leaq	32(%rcx),%rcx
155238405Sjkim	xorps	%xmm0,%xmm2
156238405Sjkim	xorps	%xmm0,%xmm3
157238405Sjkim	xorps	%xmm0,%xmm4
158238405Sjkim	xorps	%xmm0,%xmm5
159238405Sjkim	movups	(%rcx),%xmm0
160238405Sjkim
161238405Sjkim.Ldec_loop4:
162238405Sjkim.byte	102,15,56,222,209
163238405Sjkim.byte	102,15,56,222,217
164238405Sjkim	decl	%eax
165238405Sjkim.byte	102,15,56,222,225
166238405Sjkim.byte	102,15,56,222,233
167238405Sjkim	movups	16(%rcx),%xmm1
168238405Sjkim.byte	102,15,56,222,208
169238405Sjkim.byte	102,15,56,222,216
170238405Sjkim	leaq	32(%rcx),%rcx
171238405Sjkim.byte	102,15,56,222,224
172238405Sjkim.byte	102,15,56,222,232
173238405Sjkim	movups	(%rcx),%xmm0
174238405Sjkim	jnz	.Ldec_loop4
175238405Sjkim
176238405Sjkim.byte	102,15,56,222,209
177238405Sjkim.byte	102,15,56,222,217
178238405Sjkim.byte	102,15,56,222,225
179238405Sjkim.byte	102,15,56,222,233
180238405Sjkim.byte	102,15,56,223,208
181238405Sjkim.byte	102,15,56,223,216
182238405Sjkim.byte	102,15,56,223,224
183238405Sjkim.byte	102,15,56,223,232
184238405Sjkim	.byte	0xf3,0xc3
185238405Sjkim.size	_aesni_decrypt4,.-_aesni_decrypt4
186238405Sjkim.type	_aesni_encrypt6,@function
187238405Sjkim.align	16
188238405Sjkim_aesni_encrypt6:
189238405Sjkim	movups	(%rcx),%xmm0
190238405Sjkim	shrl	$1,%eax
191238405Sjkim	movups	16(%rcx),%xmm1
192238405Sjkim	leaq	32(%rcx),%rcx
193238405Sjkim	xorps	%xmm0,%xmm2
194238405Sjkim	pxor	%xmm0,%xmm3
195238405Sjkim.byte	102,15,56,220,209
196238405Sjkim	pxor	%xmm0,%xmm4
197238405Sjkim.byte	102,15,56,220,217
198238405Sjkim	pxor	%xmm0,%xmm5
199238405Sjkim.byte	102,15,56,220,225
200238405Sjkim	pxor	%xmm0,%xmm6
201238405Sjkim.byte	102,15,56,220,233
202238405Sjkim	pxor	%xmm0,%xmm7
203238405Sjkim	decl	%eax
204238405Sjkim.byte	102,15,56,220,241
205238405Sjkim	movups	(%rcx),%xmm0
206238405Sjkim.byte	102,15,56,220,249
207238405Sjkim	jmp	.Lenc_loop6_enter
208238405Sjkim.align	16
209238405Sjkim.Lenc_loop6:
210238405Sjkim.byte	102,15,56,220,209
211238405Sjkim.byte	102,15,56,220,217
212238405Sjkim	decl	%eax
213238405Sjkim.byte	102,15,56,220,225
214238405Sjkim.byte	102,15,56,220,233
215238405Sjkim.byte	102,15,56,220,241
216238405Sjkim.byte	102,15,56,220,249
217238405Sjkim.Lenc_loop6_enter:
218238405Sjkim	movups	16(%rcx),%xmm1
219238405Sjkim.byte	102,15,56,220,208
220238405Sjkim.byte	102,15,56,220,216
221238405Sjkim	leaq	32(%rcx),%rcx
222238405Sjkim.byte	102,15,56,220,224
223238405Sjkim.byte	102,15,56,220,232
224238405Sjkim.byte	102,15,56,220,240
225238405Sjkim.byte	102,15,56,220,248
226238405Sjkim	movups	(%rcx),%xmm0
227238405Sjkim	jnz	.Lenc_loop6
228238405Sjkim
229238405Sjkim.byte	102,15,56,220,209
230238405Sjkim.byte	102,15,56,220,217
231238405Sjkim.byte	102,15,56,220,225
232238405Sjkim.byte	102,15,56,220,233
233238405Sjkim.byte	102,15,56,220,241
234238405Sjkim.byte	102,15,56,220,249
235238405Sjkim.byte	102,15,56,221,208
236238405Sjkim.byte	102,15,56,221,216
237238405Sjkim.byte	102,15,56,221,224
238238405Sjkim.byte	102,15,56,221,232
239238405Sjkim.byte	102,15,56,221,240
240238405Sjkim.byte	102,15,56,221,248
241238405Sjkim	.byte	0xf3,0xc3
242238405Sjkim.size	_aesni_encrypt6,.-_aesni_encrypt6
243238405Sjkim.type	_aesni_decrypt6,@function
244238405Sjkim.align	16
245238405Sjkim_aesni_decrypt6:
246238405Sjkim	movups	(%rcx),%xmm0
247238405Sjkim	shrl	$1,%eax
248238405Sjkim	movups	16(%rcx),%xmm1
249238405Sjkim	leaq	32(%rcx),%rcx
250238405Sjkim	xorps	%xmm0,%xmm2
251238405Sjkim	pxor	%xmm0,%xmm3
252238405Sjkim.byte	102,15,56,222,209
253238405Sjkim	pxor	%xmm0,%xmm4
254238405Sjkim.byte	102,15,56,222,217
255238405Sjkim	pxor	%xmm0,%xmm5
256238405Sjkim.byte	102,15,56,222,225
257238405Sjkim	pxor	%xmm0,%xmm6
258238405Sjkim.byte	102,15,56,222,233
259238405Sjkim	pxor	%xmm0,%xmm7
260238405Sjkim	decl	%eax
261238405Sjkim.byte	102,15,56,222,241
262238405Sjkim	movups	(%rcx),%xmm0
263238405Sjkim.byte	102,15,56,222,249
264238405Sjkim	jmp	.Ldec_loop6_enter
265238405Sjkim.align	16
266238405Sjkim.Ldec_loop6:
267238405Sjkim.byte	102,15,56,222,209
268238405Sjkim.byte	102,15,56,222,217
269238405Sjkim	decl	%eax
270238405Sjkim.byte	102,15,56,222,225
271238405Sjkim.byte	102,15,56,222,233
272238405Sjkim.byte	102,15,56,222,241
273238405Sjkim.byte	102,15,56,222,249
274238405Sjkim.Ldec_loop6_enter:
275238405Sjkim	movups	16(%rcx),%xmm1
276238405Sjkim.byte	102,15,56,222,208
277238405Sjkim.byte	102,15,56,222,216
278238405Sjkim	leaq	32(%rcx),%rcx
279238405Sjkim.byte	102,15,56,222,224
280238405Sjkim.byte	102,15,56,222,232
281238405Sjkim.byte	102,15,56,222,240
282238405Sjkim.byte	102,15,56,222,248
283238405Sjkim	movups	(%rcx),%xmm0
284238405Sjkim	jnz	.Ldec_loop6
285238405Sjkim
286238405Sjkim.byte	102,15,56,222,209
287238405Sjkim.byte	102,15,56,222,217
288238405Sjkim.byte	102,15,56,222,225
289238405Sjkim.byte	102,15,56,222,233
290238405Sjkim.byte	102,15,56,222,241
291238405Sjkim.byte	102,15,56,222,249
292238405Sjkim.byte	102,15,56,223,208
293238405Sjkim.byte	102,15,56,223,216
294238405Sjkim.byte	102,15,56,223,224
295238405Sjkim.byte	102,15,56,223,232
296238405Sjkim.byte	102,15,56,223,240
297238405Sjkim.byte	102,15,56,223,248
298238405Sjkim	.byte	0xf3,0xc3
299238405Sjkim.size	_aesni_decrypt6,.-_aesni_decrypt6
300238405Sjkim.type	_aesni_encrypt8,@function
301238405Sjkim.align	16
302238405Sjkim_aesni_encrypt8:
303238405Sjkim	movups	(%rcx),%xmm0
304238405Sjkim	shrl	$1,%eax
305238405Sjkim	movups	16(%rcx),%xmm1
306238405Sjkim	leaq	32(%rcx),%rcx
307238405Sjkim	xorps	%xmm0,%xmm2
308238405Sjkim	xorps	%xmm0,%xmm3
309238405Sjkim.byte	102,15,56,220,209
310238405Sjkim	pxor	%xmm0,%xmm4
311238405Sjkim.byte	102,15,56,220,217
312238405Sjkim	pxor	%xmm0,%xmm5
313238405Sjkim.byte	102,15,56,220,225
314238405Sjkim	pxor	%xmm0,%xmm6
315238405Sjkim.byte	102,15,56,220,233
316238405Sjkim	pxor	%xmm0,%xmm7
317238405Sjkim	decl	%eax
318238405Sjkim.byte	102,15,56,220,241
319238405Sjkim	pxor	%xmm0,%xmm8
320238405Sjkim.byte	102,15,56,220,249
321238405Sjkim	pxor	%xmm0,%xmm9
322238405Sjkim	movups	(%rcx),%xmm0
323238405Sjkim.byte	102,68,15,56,220,193
324238405Sjkim.byte	102,68,15,56,220,201
325238405Sjkim	movups	16(%rcx),%xmm1
326238405Sjkim	jmp	.Lenc_loop8_enter
327238405Sjkim.align	16
328238405Sjkim.Lenc_loop8:
329238405Sjkim.byte	102,15,56,220,209
330238405Sjkim.byte	102,15,56,220,217
331238405Sjkim	decl	%eax
332238405Sjkim.byte	102,15,56,220,225
333238405Sjkim.byte	102,15,56,220,233
334238405Sjkim.byte	102,15,56,220,241
335238405Sjkim.byte	102,15,56,220,249
336238405Sjkim.byte	102,68,15,56,220,193
337238405Sjkim.byte	102,68,15,56,220,201
338238405Sjkim	movups	16(%rcx),%xmm1
339238405Sjkim.Lenc_loop8_enter:
340238405Sjkim.byte	102,15,56,220,208
341238405Sjkim.byte	102,15,56,220,216
342238405Sjkim	leaq	32(%rcx),%rcx
343238405Sjkim.byte	102,15,56,220,224
344238405Sjkim.byte	102,15,56,220,232
345238405Sjkim.byte	102,15,56,220,240
346238405Sjkim.byte	102,15,56,220,248
347238405Sjkim.byte	102,68,15,56,220,192
348238405Sjkim.byte	102,68,15,56,220,200
349238405Sjkim	movups	(%rcx),%xmm0
350238405Sjkim	jnz	.Lenc_loop8
351238405Sjkim
352238405Sjkim.byte	102,15,56,220,209
353238405Sjkim.byte	102,15,56,220,217
354238405Sjkim.byte	102,15,56,220,225
355238405Sjkim.byte	102,15,56,220,233
356238405Sjkim.byte	102,15,56,220,241
357238405Sjkim.byte	102,15,56,220,249
358238405Sjkim.byte	102,68,15,56,220,193
359238405Sjkim.byte	102,68,15,56,220,201
360238405Sjkim.byte	102,15,56,221,208
361238405Sjkim.byte	102,15,56,221,216
362238405Sjkim.byte	102,15,56,221,224
363238405Sjkim.byte	102,15,56,221,232
364238405Sjkim.byte	102,15,56,221,240
365238405Sjkim.byte	102,15,56,221,248
366238405Sjkim.byte	102,68,15,56,221,192
367238405Sjkim.byte	102,68,15,56,221,200
368238405Sjkim	.byte	0xf3,0xc3
369238405Sjkim.size	_aesni_encrypt8,.-_aesni_encrypt8
370238405Sjkim.type	_aesni_decrypt8,@function
371238405Sjkim.align	16
372238405Sjkim_aesni_decrypt8:
373238405Sjkim	movups	(%rcx),%xmm0
374238405Sjkim	shrl	$1,%eax
375238405Sjkim	movups	16(%rcx),%xmm1
376238405Sjkim	leaq	32(%rcx),%rcx
377238405Sjkim	xorps	%xmm0,%xmm2
378238405Sjkim	xorps	%xmm0,%xmm3
379238405Sjkim.byte	102,15,56,222,209
380238405Sjkim	pxor	%xmm0,%xmm4
381238405Sjkim.byte	102,15,56,222,217
382238405Sjkim	pxor	%xmm0,%xmm5
383238405Sjkim.byte	102,15,56,222,225
384238405Sjkim	pxor	%xmm0,%xmm6
385238405Sjkim.byte	102,15,56,222,233
386238405Sjkim	pxor	%xmm0,%xmm7
387238405Sjkim	decl	%eax
388238405Sjkim.byte	102,15,56,222,241
389238405Sjkim	pxor	%xmm0,%xmm8
390238405Sjkim.byte	102,15,56,222,249
391238405Sjkim	pxor	%xmm0,%xmm9
392238405Sjkim	movups	(%rcx),%xmm0
393238405Sjkim.byte	102,68,15,56,222,193
394238405Sjkim.byte	102,68,15,56,222,201
395238405Sjkim	movups	16(%rcx),%xmm1
396238405Sjkim	jmp	.Ldec_loop8_enter
397238405Sjkim.align	16
398238405Sjkim.Ldec_loop8:
399238405Sjkim.byte	102,15,56,222,209
400238405Sjkim.byte	102,15,56,222,217
401238405Sjkim	decl	%eax
402238405Sjkim.byte	102,15,56,222,225
403238405Sjkim.byte	102,15,56,222,233
404238405Sjkim.byte	102,15,56,222,241
405238405Sjkim.byte	102,15,56,222,249
406238405Sjkim.byte	102,68,15,56,222,193
407238405Sjkim.byte	102,68,15,56,222,201
408238405Sjkim	movups	16(%rcx),%xmm1
409238405Sjkim.Ldec_loop8_enter:
410238405Sjkim.byte	102,15,56,222,208
411238405Sjkim.byte	102,15,56,222,216
412238405Sjkim	leaq	32(%rcx),%rcx
413238405Sjkim.byte	102,15,56,222,224
414238405Sjkim.byte	102,15,56,222,232
415238405Sjkim.byte	102,15,56,222,240
416238405Sjkim.byte	102,15,56,222,248
417238405Sjkim.byte	102,68,15,56,222,192
418238405Sjkim.byte	102,68,15,56,222,200
419238405Sjkim	movups	(%rcx),%xmm0
420238405Sjkim	jnz	.Ldec_loop8
421238405Sjkim
422238405Sjkim.byte	102,15,56,222,209
423238405Sjkim.byte	102,15,56,222,217
424238405Sjkim.byte	102,15,56,222,225
425238405Sjkim.byte	102,15,56,222,233
426238405Sjkim.byte	102,15,56,222,241
427238405Sjkim.byte	102,15,56,222,249
428238405Sjkim.byte	102,68,15,56,222,193
429238405Sjkim.byte	102,68,15,56,222,201
430238405Sjkim.byte	102,15,56,223,208
431238405Sjkim.byte	102,15,56,223,216
432238405Sjkim.byte	102,15,56,223,224
433238405Sjkim.byte	102,15,56,223,232
434238405Sjkim.byte	102,15,56,223,240
435238405Sjkim.byte	102,15,56,223,248
436238405Sjkim.byte	102,68,15,56,223,192
437238405Sjkim.byte	102,68,15,56,223,200
438238405Sjkim	.byte	0xf3,0xc3
439238405Sjkim.size	_aesni_decrypt8,.-_aesni_decrypt8
440238405Sjkim.globl	aesni_ecb_encrypt
441238405Sjkim.type	aesni_ecb_encrypt,@function
442238405Sjkim.align	16
443238405Sjkimaesni_ecb_encrypt:
444238405Sjkim	andq	$-16,%rdx
445238405Sjkim	jz	.Lecb_ret
446238405Sjkim
447238405Sjkim	movl	240(%rcx),%eax
448238405Sjkim	movups	(%rcx),%xmm0
449238405Sjkim	movq	%rcx,%r11
450238405Sjkim	movl	%eax,%r10d
451238405Sjkim	testl	%r8d,%r8d
452238405Sjkim	jz	.Lecb_decrypt
453238405Sjkim
454238405Sjkim	cmpq	$128,%rdx
455238405Sjkim	jb	.Lecb_enc_tail
456238405Sjkim
457238405Sjkim	movdqu	(%rdi),%xmm2
458238405Sjkim	movdqu	16(%rdi),%xmm3
459238405Sjkim	movdqu	32(%rdi),%xmm4
460238405Sjkim	movdqu	48(%rdi),%xmm5
461238405Sjkim	movdqu	64(%rdi),%xmm6
462238405Sjkim	movdqu	80(%rdi),%xmm7
463238405Sjkim	movdqu	96(%rdi),%xmm8
464238405Sjkim	movdqu	112(%rdi),%xmm9
465238405Sjkim	leaq	128(%rdi),%rdi
466238405Sjkim	subq	$128,%rdx
467238405Sjkim	jmp	.Lecb_enc_loop8_enter
468238405Sjkim.align	16
469238405Sjkim.Lecb_enc_loop8:
470238405Sjkim	movups	%xmm2,(%rsi)
471238405Sjkim	movq	%r11,%rcx
472238405Sjkim	movdqu	(%rdi),%xmm2
473238405Sjkim	movl	%r10d,%eax
474238405Sjkim	movups	%xmm3,16(%rsi)
475238405Sjkim	movdqu	16(%rdi),%xmm3
476238405Sjkim	movups	%xmm4,32(%rsi)
477238405Sjkim	movdqu	32(%rdi),%xmm4
478238405Sjkim	movups	%xmm5,48(%rsi)
479238405Sjkim	movdqu	48(%rdi),%xmm5
480238405Sjkim	movups	%xmm6,64(%rsi)
481238405Sjkim	movdqu	64(%rdi),%xmm6
482238405Sjkim	movups	%xmm7,80(%rsi)
483238405Sjkim	movdqu	80(%rdi),%xmm7
484238405Sjkim	movups	%xmm8,96(%rsi)
485238405Sjkim	movdqu	96(%rdi),%xmm8
486238405Sjkim	movups	%xmm9,112(%rsi)
487238405Sjkim	leaq	128(%rsi),%rsi
488238405Sjkim	movdqu	112(%rdi),%xmm9
489238405Sjkim	leaq	128(%rdi),%rdi
490238405Sjkim.Lecb_enc_loop8_enter:
491238405Sjkim
492238405Sjkim	call	_aesni_encrypt8
493238405Sjkim
494238405Sjkim	subq	$128,%rdx
495238405Sjkim	jnc	.Lecb_enc_loop8
496238405Sjkim
497238405Sjkim	movups	%xmm2,(%rsi)
498238405Sjkim	movq	%r11,%rcx
499238405Sjkim	movups	%xmm3,16(%rsi)
500238405Sjkim	movl	%r10d,%eax
501238405Sjkim	movups	%xmm4,32(%rsi)
502238405Sjkim	movups	%xmm5,48(%rsi)
503238405Sjkim	movups	%xmm6,64(%rsi)
504238405Sjkim	movups	%xmm7,80(%rsi)
505238405Sjkim	movups	%xmm8,96(%rsi)
506238405Sjkim	movups	%xmm9,112(%rsi)
507238405Sjkim	leaq	128(%rsi),%rsi
508238405Sjkim	addq	$128,%rdx
509238405Sjkim	jz	.Lecb_ret
510238405Sjkim
511238405Sjkim.Lecb_enc_tail:
512238405Sjkim	movups	(%rdi),%xmm2
513238405Sjkim	cmpq	$32,%rdx
514238405Sjkim	jb	.Lecb_enc_one
515238405Sjkim	movups	16(%rdi),%xmm3
516238405Sjkim	je	.Lecb_enc_two
517238405Sjkim	movups	32(%rdi),%xmm4
518238405Sjkim	cmpq	$64,%rdx
519238405Sjkim	jb	.Lecb_enc_three
520238405Sjkim	movups	48(%rdi),%xmm5
521238405Sjkim	je	.Lecb_enc_four
522238405Sjkim	movups	64(%rdi),%xmm6
523238405Sjkim	cmpq	$96,%rdx
524238405Sjkim	jb	.Lecb_enc_five
525238405Sjkim	movups	80(%rdi),%xmm7
526238405Sjkim	je	.Lecb_enc_six
527238405Sjkim	movdqu	96(%rdi),%xmm8
528238405Sjkim	call	_aesni_encrypt8
529238405Sjkim	movups	%xmm2,(%rsi)
530238405Sjkim	movups	%xmm3,16(%rsi)
531238405Sjkim	movups	%xmm4,32(%rsi)
532238405Sjkim	movups	%xmm5,48(%rsi)
533238405Sjkim	movups	%xmm6,64(%rsi)
534238405Sjkim	movups	%xmm7,80(%rsi)
535238405Sjkim	movups	%xmm8,96(%rsi)
536238405Sjkim	jmp	.Lecb_ret
537238405Sjkim.align	16
538238405Sjkim.Lecb_enc_one:
539238405Sjkim	movups	(%rcx),%xmm0
540238405Sjkim	movups	16(%rcx),%xmm1
541238405Sjkim	leaq	32(%rcx),%rcx
542238405Sjkim	xorps	%xmm0,%xmm2
543238405Sjkim.Loop_enc1_3:
544238405Sjkim.byte	102,15,56,220,209
545238405Sjkim	decl	%eax
546238405Sjkim	movups	(%rcx),%xmm1
547238405Sjkim	leaq	16(%rcx),%rcx
548238405Sjkim	jnz	.Loop_enc1_3
549238405Sjkim.byte	102,15,56,221,209
550238405Sjkim	movups	%xmm2,(%rsi)
551238405Sjkim	jmp	.Lecb_ret
552238405Sjkim.align	16
553238405Sjkim.Lecb_enc_two:
554238405Sjkim	xorps	%xmm4,%xmm4
555238405Sjkim	call	_aesni_encrypt3
556238405Sjkim	movups	%xmm2,(%rsi)
557238405Sjkim	movups	%xmm3,16(%rsi)
558238405Sjkim	jmp	.Lecb_ret
559238405Sjkim.align	16
560238405Sjkim.Lecb_enc_three:
561238405Sjkim	call	_aesni_encrypt3
562238405Sjkim	movups	%xmm2,(%rsi)
563238405Sjkim	movups	%xmm3,16(%rsi)
564238405Sjkim	movups	%xmm4,32(%rsi)
565238405Sjkim	jmp	.Lecb_ret
566238405Sjkim.align	16
567238405Sjkim.Lecb_enc_four:
568238405Sjkim	call	_aesni_encrypt4
569238405Sjkim	movups	%xmm2,(%rsi)
570238405Sjkim	movups	%xmm3,16(%rsi)
571238405Sjkim	movups	%xmm4,32(%rsi)
572238405Sjkim	movups	%xmm5,48(%rsi)
573238405Sjkim	jmp	.Lecb_ret
574238405Sjkim.align	16
575238405Sjkim.Lecb_enc_five:
576238405Sjkim	xorps	%xmm7,%xmm7
577238405Sjkim	call	_aesni_encrypt6
578238405Sjkim	movups	%xmm2,(%rsi)
579238405Sjkim	movups	%xmm3,16(%rsi)
580238405Sjkim	movups	%xmm4,32(%rsi)
581238405Sjkim	movups	%xmm5,48(%rsi)
582238405Sjkim	movups	%xmm6,64(%rsi)
583238405Sjkim	jmp	.Lecb_ret
584238405Sjkim.align	16
585238405Sjkim.Lecb_enc_six:
586238405Sjkim	call	_aesni_encrypt6
587238405Sjkim	movups	%xmm2,(%rsi)
588238405Sjkim	movups	%xmm3,16(%rsi)
589238405Sjkim	movups	%xmm4,32(%rsi)
590238405Sjkim	movups	%xmm5,48(%rsi)
591238405Sjkim	movups	%xmm6,64(%rsi)
592238405Sjkim	movups	%xmm7,80(%rsi)
593238405Sjkim	jmp	.Lecb_ret
594238405Sjkim
595238405Sjkim.align	16
596238405Sjkim.Lecb_decrypt:
597238405Sjkim	cmpq	$128,%rdx
598238405Sjkim	jb	.Lecb_dec_tail
599238405Sjkim
600238405Sjkim	movdqu	(%rdi),%xmm2
601238405Sjkim	movdqu	16(%rdi),%xmm3
602238405Sjkim	movdqu	32(%rdi),%xmm4
603238405Sjkim	movdqu	48(%rdi),%xmm5
604238405Sjkim	movdqu	64(%rdi),%xmm6
605238405Sjkim	movdqu	80(%rdi),%xmm7
606238405Sjkim	movdqu	96(%rdi),%xmm8
607238405Sjkim	movdqu	112(%rdi),%xmm9
608238405Sjkim	leaq	128(%rdi),%rdi
609238405Sjkim	subq	$128,%rdx
610238405Sjkim	jmp	.Lecb_dec_loop8_enter
611238405Sjkim.align	16
612238405Sjkim.Lecb_dec_loop8:
613238405Sjkim	movups	%xmm2,(%rsi)
614238405Sjkim	movq	%r11,%rcx
615238405Sjkim	movdqu	(%rdi),%xmm2
616238405Sjkim	movl	%r10d,%eax
617238405Sjkim	movups	%xmm3,16(%rsi)
618238405Sjkim	movdqu	16(%rdi),%xmm3
619238405Sjkim	movups	%xmm4,32(%rsi)
620238405Sjkim	movdqu	32(%rdi),%xmm4
621238405Sjkim	movups	%xmm5,48(%rsi)
622238405Sjkim	movdqu	48(%rdi),%xmm5
623238405Sjkim	movups	%xmm6,64(%rsi)
624238405Sjkim	movdqu	64(%rdi),%xmm6
625238405Sjkim	movups	%xmm7,80(%rsi)
626238405Sjkim	movdqu	80(%rdi),%xmm7
627238405Sjkim	movups	%xmm8,96(%rsi)
628238405Sjkim	movdqu	96(%rdi),%xmm8
629238405Sjkim	movups	%xmm9,112(%rsi)
630238405Sjkim	leaq	128(%rsi),%rsi
631238405Sjkim	movdqu	112(%rdi),%xmm9
632238405Sjkim	leaq	128(%rdi),%rdi
633238405Sjkim.Lecb_dec_loop8_enter:
634238405Sjkim
635238405Sjkim	call	_aesni_decrypt8
636238405Sjkim
637238405Sjkim	movups	(%r11),%xmm0
638238405Sjkim	subq	$128,%rdx
639238405Sjkim	jnc	.Lecb_dec_loop8
640238405Sjkim
641238405Sjkim	movups	%xmm2,(%rsi)
642238405Sjkim	movq	%r11,%rcx
643238405Sjkim	movups	%xmm3,16(%rsi)
644238405Sjkim	movl	%r10d,%eax
645238405Sjkim	movups	%xmm4,32(%rsi)
646238405Sjkim	movups	%xmm5,48(%rsi)
647238405Sjkim	movups	%xmm6,64(%rsi)
648238405Sjkim	movups	%xmm7,80(%rsi)
649238405Sjkim	movups	%xmm8,96(%rsi)
650238405Sjkim	movups	%xmm9,112(%rsi)
651238405Sjkim	leaq	128(%rsi),%rsi
652238405Sjkim	addq	$128,%rdx
653238405Sjkim	jz	.Lecb_ret
654238405Sjkim
655238405Sjkim.Lecb_dec_tail:
656238405Sjkim	movups	(%rdi),%xmm2
657238405Sjkim	cmpq	$32,%rdx
658238405Sjkim	jb	.Lecb_dec_one
659238405Sjkim	movups	16(%rdi),%xmm3
660238405Sjkim	je	.Lecb_dec_two
661238405Sjkim	movups	32(%rdi),%xmm4
662238405Sjkim	cmpq	$64,%rdx
663238405Sjkim	jb	.Lecb_dec_three
664238405Sjkim	movups	48(%rdi),%xmm5
665238405Sjkim	je	.Lecb_dec_four
666238405Sjkim	movups	64(%rdi),%xmm6
667238405Sjkim	cmpq	$96,%rdx
668238405Sjkim	jb	.Lecb_dec_five
669238405Sjkim	movups	80(%rdi),%xmm7
670238405Sjkim	je	.Lecb_dec_six
671238405Sjkim	movups	96(%rdi),%xmm8
672238405Sjkim	movups	(%rcx),%xmm0
673238405Sjkim	call	_aesni_decrypt8
674238405Sjkim	movups	%xmm2,(%rsi)
675238405Sjkim	movups	%xmm3,16(%rsi)
676238405Sjkim	movups	%xmm4,32(%rsi)
677238405Sjkim	movups	%xmm5,48(%rsi)
678238405Sjkim	movups	%xmm6,64(%rsi)
679238405Sjkim	movups	%xmm7,80(%rsi)
680238405Sjkim	movups	%xmm8,96(%rsi)
681238405Sjkim	jmp	.Lecb_ret
682238405Sjkim.align	16
683238405Sjkim.Lecb_dec_one:
684238405Sjkim	movups	(%rcx),%xmm0
685238405Sjkim	movups	16(%rcx),%xmm1
686238405Sjkim	leaq	32(%rcx),%rcx
687238405Sjkim	xorps	%xmm0,%xmm2
688238405Sjkim.Loop_dec1_4:
689238405Sjkim.byte	102,15,56,222,209
690238405Sjkim	decl	%eax
691238405Sjkim	movups	(%rcx),%xmm1
692238405Sjkim	leaq	16(%rcx),%rcx
693238405Sjkim	jnz	.Loop_dec1_4
694238405Sjkim.byte	102,15,56,223,209
695238405Sjkim	movups	%xmm2,(%rsi)
696238405Sjkim	jmp	.Lecb_ret
697238405Sjkim.align	16
698238405Sjkim.Lecb_dec_two:
699238405Sjkim	xorps	%xmm4,%xmm4
700238405Sjkim	call	_aesni_decrypt3
701238405Sjkim	movups	%xmm2,(%rsi)
702238405Sjkim	movups	%xmm3,16(%rsi)
703238405Sjkim	jmp	.Lecb_ret
704238405Sjkim.align	16
705238405Sjkim.Lecb_dec_three:
706238405Sjkim	call	_aesni_decrypt3
707238405Sjkim	movups	%xmm2,(%rsi)
708238405Sjkim	movups	%xmm3,16(%rsi)
709238405Sjkim	movups	%xmm4,32(%rsi)
710238405Sjkim	jmp	.Lecb_ret
711238405Sjkim.align	16
712238405Sjkim.Lecb_dec_four:
713238405Sjkim	call	_aesni_decrypt4
714238405Sjkim	movups	%xmm2,(%rsi)
715238405Sjkim	movups	%xmm3,16(%rsi)
716238405Sjkim	movups	%xmm4,32(%rsi)
717238405Sjkim	movups	%xmm5,48(%rsi)
718238405Sjkim	jmp	.Lecb_ret
719238405Sjkim.align	16
720238405Sjkim.Lecb_dec_five:
721238405Sjkim	xorps	%xmm7,%xmm7
722238405Sjkim	call	_aesni_decrypt6
723238405Sjkim	movups	%xmm2,(%rsi)
724238405Sjkim	movups	%xmm3,16(%rsi)
725238405Sjkim	movups	%xmm4,32(%rsi)
726238405Sjkim	movups	%xmm5,48(%rsi)
727238405Sjkim	movups	%xmm6,64(%rsi)
728238405Sjkim	jmp	.Lecb_ret
729238405Sjkim.align	16
730238405Sjkim.Lecb_dec_six:
731238405Sjkim	call	_aesni_decrypt6
732238405Sjkim	movups	%xmm2,(%rsi)
733238405Sjkim	movups	%xmm3,16(%rsi)
734238405Sjkim	movups	%xmm4,32(%rsi)
735238405Sjkim	movups	%xmm5,48(%rsi)
736238405Sjkim	movups	%xmm6,64(%rsi)
737238405Sjkim	movups	%xmm7,80(%rsi)
738238405Sjkim
739238405Sjkim.Lecb_ret:
740238405Sjkim	.byte	0xf3,0xc3
741238405Sjkim.size	aesni_ecb_encrypt,.-aesni_ecb_encrypt
742238405Sjkim.globl	aesni_ccm64_encrypt_blocks
743238405Sjkim.type	aesni_ccm64_encrypt_blocks,@function
744238405Sjkim.align	16
745238405Sjkimaesni_ccm64_encrypt_blocks:
746238405Sjkim	movl	240(%rcx),%eax
747238405Sjkim	movdqu	(%r8),%xmm9
748238405Sjkim	movdqa	.Lincrement64(%rip),%xmm6
749238405Sjkim	movdqa	.Lbswap_mask(%rip),%xmm7
750238405Sjkim
751238405Sjkim	shrl	$1,%eax
752238405Sjkim	leaq	0(%rcx),%r11
753238405Sjkim	movdqu	(%r9),%xmm3
754238405Sjkim	movdqa	%xmm9,%xmm2
755238405Sjkim	movl	%eax,%r10d
756238405Sjkim.byte	102,68,15,56,0,207
757238405Sjkim	jmp	.Lccm64_enc_outer
758238405Sjkim.align	16
759238405Sjkim.Lccm64_enc_outer:
760238405Sjkim	movups	(%r11),%xmm0
761238405Sjkim	movl	%r10d,%eax
762238405Sjkim	movups	(%rdi),%xmm8
763238405Sjkim
764238405Sjkim	xorps	%xmm0,%xmm2
765238405Sjkim	movups	16(%r11),%xmm1
766238405Sjkim	xorps	%xmm8,%xmm0
767238405Sjkim	leaq	32(%r11),%rcx
768238405Sjkim	xorps	%xmm0,%xmm3
769238405Sjkim	movups	(%rcx),%xmm0
770238405Sjkim
771238405Sjkim.Lccm64_enc2_loop:
772238405Sjkim.byte	102,15,56,220,209
773238405Sjkim	decl	%eax
774238405Sjkim.byte	102,15,56,220,217
775238405Sjkim	movups	16(%rcx),%xmm1
776238405Sjkim.byte	102,15,56,220,208
777238405Sjkim	leaq	32(%rcx),%rcx
778238405Sjkim.byte	102,15,56,220,216
779238405Sjkim	movups	0(%rcx),%xmm0
780238405Sjkim	jnz	.Lccm64_enc2_loop
781238405Sjkim.byte	102,15,56,220,209
782238405Sjkim.byte	102,15,56,220,217
783238405Sjkim	paddq	%xmm6,%xmm9
784238405Sjkim.byte	102,15,56,221,208
785238405Sjkim.byte	102,15,56,221,216
786238405Sjkim
787238405Sjkim	decq	%rdx
788238405Sjkim	leaq	16(%rdi),%rdi
789238405Sjkim	xorps	%xmm2,%xmm8
790238405Sjkim	movdqa	%xmm9,%xmm2
791238405Sjkim	movups	%xmm8,(%rsi)
792238405Sjkim	leaq	16(%rsi),%rsi
793238405Sjkim.byte	102,15,56,0,215
794238405Sjkim	jnz	.Lccm64_enc_outer
795238405Sjkim
796238405Sjkim	movups	%xmm3,(%r9)
797238405Sjkim	.byte	0xf3,0xc3
798238405Sjkim.size	aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks
799238405Sjkim.globl	aesni_ccm64_decrypt_blocks
800238405Sjkim.type	aesni_ccm64_decrypt_blocks,@function
801238405Sjkim.align	16
802238405Sjkimaesni_ccm64_decrypt_blocks:
803238405Sjkim	movl	240(%rcx),%eax
804238405Sjkim	movups	(%r8),%xmm9
805238405Sjkim	movdqu	(%r9),%xmm3
806238405Sjkim	movdqa	.Lincrement64(%rip),%xmm6
807238405Sjkim	movdqa	.Lbswap_mask(%rip),%xmm7
808238405Sjkim
809238405Sjkim	movaps	%xmm9,%xmm2
810238405Sjkim	movl	%eax,%r10d
811238405Sjkim	movq	%rcx,%r11
812238405Sjkim.byte	102,68,15,56,0,207
813238405Sjkim	movups	(%rcx),%xmm0
814238405Sjkim	movups	16(%rcx),%xmm1
815238405Sjkim	leaq	32(%rcx),%rcx
816238405Sjkim	xorps	%xmm0,%xmm2
817238405Sjkim.Loop_enc1_5:
818238405Sjkim.byte	102,15,56,220,209
819238405Sjkim	decl	%eax
820238405Sjkim	movups	(%rcx),%xmm1
821238405Sjkim	leaq	16(%rcx),%rcx
822238405Sjkim	jnz	.Loop_enc1_5
823238405Sjkim.byte	102,15,56,221,209
824238405Sjkim	movups	(%rdi),%xmm8
825238405Sjkim	paddq	%xmm6,%xmm9
826238405Sjkim	leaq	16(%rdi),%rdi
827238405Sjkim	jmp	.Lccm64_dec_outer
828238405Sjkim.align	16
829238405Sjkim.Lccm64_dec_outer:
830238405Sjkim	xorps	%xmm2,%xmm8
831238405Sjkim	movdqa	%xmm9,%xmm2
832238405Sjkim	movl	%r10d,%eax
833238405Sjkim	movups	%xmm8,(%rsi)
834238405Sjkim	leaq	16(%rsi),%rsi
835238405Sjkim.byte	102,15,56,0,215
836238405Sjkim
837238405Sjkim	subq	$1,%rdx
838238405Sjkim	jz	.Lccm64_dec_break
839238405Sjkim
840238405Sjkim	movups	(%r11),%xmm0
841238405Sjkim	shrl	$1,%eax
842238405Sjkim	movups	16(%r11),%xmm1
843238405Sjkim	xorps	%xmm0,%xmm8
844238405Sjkim	leaq	32(%r11),%rcx
845238405Sjkim	xorps	%xmm0,%xmm2
846238405Sjkim	xorps	%xmm8,%xmm3
847238405Sjkim	movups	(%rcx),%xmm0
848238405Sjkim
849238405Sjkim.Lccm64_dec2_loop:
850238405Sjkim.byte	102,15,56,220,209
851238405Sjkim	decl	%eax
852238405Sjkim.byte	102,15,56,220,217
853238405Sjkim	movups	16(%rcx),%xmm1
854238405Sjkim.byte	102,15,56,220,208
855238405Sjkim	leaq	32(%rcx),%rcx
856238405Sjkim.byte	102,15,56,220,216
857238405Sjkim	movups	0(%rcx),%xmm0
858238405Sjkim	jnz	.Lccm64_dec2_loop
859238405Sjkim	movups	(%rdi),%xmm8
860238405Sjkim	paddq	%xmm6,%xmm9
861238405Sjkim.byte	102,15,56,220,209
862238405Sjkim.byte	102,15,56,220,217
863238405Sjkim	leaq	16(%rdi),%rdi
864238405Sjkim.byte	102,15,56,221,208
865238405Sjkim.byte	102,15,56,221,216
866238405Sjkim	jmp	.Lccm64_dec_outer
867238405Sjkim
868238405Sjkim.align	16
869238405Sjkim.Lccm64_dec_break:
870238405Sjkim
871238405Sjkim	movups	(%r11),%xmm0
872238405Sjkim	movups	16(%r11),%xmm1
873238405Sjkim	xorps	%xmm0,%xmm8
874238405Sjkim	leaq	32(%r11),%r11
875238405Sjkim	xorps	%xmm8,%xmm3
876238405Sjkim.Loop_enc1_6:
877238405Sjkim.byte	102,15,56,220,217
878238405Sjkim	decl	%eax
879238405Sjkim	movups	(%r11),%xmm1
880238405Sjkim	leaq	16(%r11),%r11
881238405Sjkim	jnz	.Loop_enc1_6
882238405Sjkim.byte	102,15,56,221,217
883238405Sjkim	movups	%xmm3,(%r9)
884238405Sjkim	.byte	0xf3,0xc3
885238405Sjkim.size	aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks
886238405Sjkim.globl	aesni_ctr32_encrypt_blocks
887238405Sjkim.type	aesni_ctr32_encrypt_blocks,@function
888238405Sjkim.align	16
889238405Sjkimaesni_ctr32_encrypt_blocks:
890238405Sjkim	cmpq	$1,%rdx
891238405Sjkim	je	.Lctr32_one_shortcut
892238405Sjkim
893238405Sjkim	movdqu	(%r8),%xmm14
894238405Sjkim	movdqa	.Lbswap_mask(%rip),%xmm15
895238405Sjkim	xorl	%eax,%eax
896238405Sjkim.byte	102,69,15,58,22,242,3
897238405Sjkim.byte	102,68,15,58,34,240,3
898238405Sjkim
899238405Sjkim	movl	240(%rcx),%eax
900238405Sjkim	bswapl	%r10d
901238405Sjkim	pxor	%xmm12,%xmm12
902238405Sjkim	pxor	%xmm13,%xmm13
903238405Sjkim.byte	102,69,15,58,34,226,0
904238405Sjkim	leaq	3(%r10),%r11
905238405Sjkim.byte	102,69,15,58,34,235,0
906238405Sjkim	incl	%r10d
907238405Sjkim.byte	102,69,15,58,34,226,1
908238405Sjkim	incq	%r11
909238405Sjkim.byte	102,69,15,58,34,235,1
910238405Sjkim	incl	%r10d
911238405Sjkim.byte	102,69,15,58,34,226,2
912238405Sjkim	incq	%r11
913238405Sjkim.byte	102,69,15,58,34,235,2
914238405Sjkim	movdqa	%xmm12,-40(%rsp)
915238405Sjkim.byte	102,69,15,56,0,231
916238405Sjkim	movdqa	%xmm13,-24(%rsp)
917238405Sjkim.byte	102,69,15,56,0,239
918238405Sjkim
919238405Sjkim	pshufd	$192,%xmm12,%xmm2
920238405Sjkim	pshufd	$128,%xmm12,%xmm3
921238405Sjkim	pshufd	$64,%xmm12,%xmm4
922238405Sjkim	cmpq	$6,%rdx
923238405Sjkim	jb	.Lctr32_tail
924238405Sjkim	shrl	$1,%eax
925238405Sjkim	movq	%rcx,%r11
926238405Sjkim	movl	%eax,%r10d
927238405Sjkim	subq	$6,%rdx
928238405Sjkim	jmp	.Lctr32_loop6
929238405Sjkim
930238405Sjkim.align	16
931238405Sjkim.Lctr32_loop6:
932238405Sjkim	pshufd	$192,%xmm13,%xmm5
933238405Sjkim	por	%xmm14,%xmm2
934238405Sjkim	movups	(%r11),%xmm0
935238405Sjkim	pshufd	$128,%xmm13,%xmm6
936238405Sjkim	por	%xmm14,%xmm3
937238405Sjkim	movups	16(%r11),%xmm1
938238405Sjkim	pshufd	$64,%xmm13,%xmm7
939238405Sjkim	por	%xmm14,%xmm4
940238405Sjkim	por	%xmm14,%xmm5
941238405Sjkim	xorps	%xmm0,%xmm2
942238405Sjkim	por	%xmm14,%xmm6
943238405Sjkim	por	%xmm14,%xmm7
944238405Sjkim
945238405Sjkim
946238405Sjkim
947238405Sjkim
948238405Sjkim	pxor	%xmm0,%xmm3
949238405Sjkim.byte	102,15,56,220,209
950238405Sjkim	leaq	32(%r11),%rcx
951238405Sjkim	pxor	%xmm0,%xmm4
952238405Sjkim.byte	102,15,56,220,217
953238405Sjkim	movdqa	.Lincrement32(%rip),%xmm13
954238405Sjkim	pxor	%xmm0,%xmm5
955238405Sjkim.byte	102,15,56,220,225
956238405Sjkim	movdqa	-40(%rsp),%xmm12
957238405Sjkim	pxor	%xmm0,%xmm6
958238405Sjkim.byte	102,15,56,220,233
959238405Sjkim	pxor	%xmm0,%xmm7
960238405Sjkim	movups	(%rcx),%xmm0
961238405Sjkim	decl	%eax
962238405Sjkim.byte	102,15,56,220,241
963238405Sjkim.byte	102,15,56,220,249
964238405Sjkim	jmp	.Lctr32_enc_loop6_enter
965238405Sjkim.align	16
966238405Sjkim.Lctr32_enc_loop6:
967238405Sjkim.byte	102,15,56,220,209
968238405Sjkim.byte	102,15,56,220,217
969238405Sjkim	decl	%eax
970238405Sjkim.byte	102,15,56,220,225
971238405Sjkim.byte	102,15,56,220,233
972238405Sjkim.byte	102,15,56,220,241
973238405Sjkim.byte	102,15,56,220,249
974238405Sjkim.Lctr32_enc_loop6_enter:
975238405Sjkim	movups	16(%rcx),%xmm1
976238405Sjkim.byte	102,15,56,220,208
977238405Sjkim.byte	102,15,56,220,216
978238405Sjkim	leaq	32(%rcx),%rcx
979238405Sjkim.byte	102,15,56,220,224
980238405Sjkim.byte	102,15,56,220,232
981238405Sjkim.byte	102,15,56,220,240
982238405Sjkim.byte	102,15,56,220,248
983238405Sjkim	movups	(%rcx),%xmm0
984238405Sjkim	jnz	.Lctr32_enc_loop6
985238405Sjkim
986238405Sjkim.byte	102,15,56,220,209
987238405Sjkim	paddd	%xmm13,%xmm12
988238405Sjkim.byte	102,15,56,220,217
989238405Sjkim	paddd	-24(%rsp),%xmm13
990238405Sjkim.byte	102,15,56,220,225
991238405Sjkim	movdqa	%xmm12,-40(%rsp)
992238405Sjkim.byte	102,15,56,220,233
993238405Sjkim	movdqa	%xmm13,-24(%rsp)
994238405Sjkim.byte	102,15,56,220,241
995238405Sjkim.byte	102,69,15,56,0,231
996238405Sjkim.byte	102,15,56,220,249
997238405Sjkim.byte	102,69,15,56,0,239
998238405Sjkim
999238405Sjkim.byte	102,15,56,221,208
1000238405Sjkim	movups	(%rdi),%xmm8
1001238405Sjkim.byte	102,15,56,221,216
1002238405Sjkim	movups	16(%rdi),%xmm9
1003238405Sjkim.byte	102,15,56,221,224
1004238405Sjkim	movups	32(%rdi),%xmm10
1005238405Sjkim.byte	102,15,56,221,232
1006238405Sjkim	movups	48(%rdi),%xmm11
1007238405Sjkim.byte	102,15,56,221,240
1008238405Sjkim	movups	64(%rdi),%xmm1
1009238405Sjkim.byte	102,15,56,221,248
1010238405Sjkim	movups	80(%rdi),%xmm0
1011238405Sjkim	leaq	96(%rdi),%rdi
1012238405Sjkim
1013238405Sjkim	xorps	%xmm2,%xmm8
1014238405Sjkim	pshufd	$192,%xmm12,%xmm2
1015238405Sjkim	xorps	%xmm3,%xmm9
1016238405Sjkim	pshufd	$128,%xmm12,%xmm3
1017238405Sjkim	movups	%xmm8,(%rsi)
1018238405Sjkim	xorps	%xmm4,%xmm10
1019238405Sjkim	pshufd	$64,%xmm12,%xmm4
1020238405Sjkim	movups	%xmm9,16(%rsi)
1021238405Sjkim	xorps	%xmm5,%xmm11
1022238405Sjkim	movups	%xmm10,32(%rsi)
1023238405Sjkim	xorps	%xmm6,%xmm1
1024238405Sjkim	movups	%xmm11,48(%rsi)
1025238405Sjkim	xorps	%xmm7,%xmm0
1026238405Sjkim	movups	%xmm1,64(%rsi)
1027238405Sjkim	movups	%xmm0,80(%rsi)
1028238405Sjkim	leaq	96(%rsi),%rsi
1029238405Sjkim	movl	%r10d,%eax
1030238405Sjkim	subq	$6,%rdx
1031238405Sjkim	jnc	.Lctr32_loop6
1032238405Sjkim
1033238405Sjkim	addq	$6,%rdx
1034238405Sjkim	jz	.Lctr32_done
1035238405Sjkim	movq	%r11,%rcx
1036238405Sjkim	leal	1(%rax,%rax,1),%eax
1037238405Sjkim
1038238405Sjkim.Lctr32_tail:
1039238405Sjkim	por	%xmm14,%xmm2
1040238405Sjkim	movups	(%rdi),%xmm8
1041238405Sjkim	cmpq	$2,%rdx
1042238405Sjkim	jb	.Lctr32_one
1043238405Sjkim
1044238405Sjkim	por	%xmm14,%xmm3
1045238405Sjkim	movups	16(%rdi),%xmm9
1046238405Sjkim	je	.Lctr32_two
1047238405Sjkim
1048238405Sjkim	pshufd	$192,%xmm13,%xmm5
1049238405Sjkim	por	%xmm14,%xmm4
1050238405Sjkim	movups	32(%rdi),%xmm10
1051238405Sjkim	cmpq	$4,%rdx
1052238405Sjkim	jb	.Lctr32_three
1053238405Sjkim
1054238405Sjkim	pshufd	$128,%xmm13,%xmm6
1055238405Sjkim	por	%xmm14,%xmm5
1056238405Sjkim	movups	48(%rdi),%xmm11
1057238405Sjkim	je	.Lctr32_four
1058238405Sjkim
1059238405Sjkim	por	%xmm14,%xmm6
1060238405Sjkim	xorps	%xmm7,%xmm7
1061238405Sjkim
1062238405Sjkim	call	_aesni_encrypt6
1063238405Sjkim
1064238405Sjkim	movups	64(%rdi),%xmm1
1065238405Sjkim	xorps	%xmm2,%xmm8
1066238405Sjkim	xorps	%xmm3,%xmm9
1067238405Sjkim	movups	%xmm8,(%rsi)
1068238405Sjkim	xorps	%xmm4,%xmm10
1069238405Sjkim	movups	%xmm9,16(%rsi)
1070238405Sjkim	xorps	%xmm5,%xmm11
1071238405Sjkim	movups	%xmm10,32(%rsi)
1072238405Sjkim	xorps	%xmm6,%xmm1
1073238405Sjkim	movups	%xmm11,48(%rsi)
1074238405Sjkim	movups	%xmm1,64(%rsi)
1075238405Sjkim	jmp	.Lctr32_done
1076238405Sjkim
1077238405Sjkim.align	16
1078238405Sjkim.Lctr32_one_shortcut:
1079238405Sjkim	movups	(%r8),%xmm2
1080238405Sjkim	movups	(%rdi),%xmm8
1081238405Sjkim	movl	240(%rcx),%eax
1082238405Sjkim.Lctr32_one:
1083238405Sjkim	movups	(%rcx),%xmm0
1084238405Sjkim	movups	16(%rcx),%xmm1
1085238405Sjkim	leaq	32(%rcx),%rcx
1086238405Sjkim	xorps	%xmm0,%xmm2
1087238405Sjkim.Loop_enc1_7:
1088238405Sjkim.byte	102,15,56,220,209
1089238405Sjkim	decl	%eax
1090238405Sjkim	movups	(%rcx),%xmm1
1091238405Sjkim	leaq	16(%rcx),%rcx
1092238405Sjkim	jnz	.Loop_enc1_7
1093238405Sjkim.byte	102,15,56,221,209
1094238405Sjkim	xorps	%xmm2,%xmm8
1095238405Sjkim	movups	%xmm8,(%rsi)
1096238405Sjkim	jmp	.Lctr32_done
1097238405Sjkim
1098238405Sjkim.align	16
1099238405Sjkim.Lctr32_two:
1100238405Sjkim	xorps	%xmm4,%xmm4
1101238405Sjkim	call	_aesni_encrypt3
1102238405Sjkim	xorps	%xmm2,%xmm8
1103238405Sjkim	xorps	%xmm3,%xmm9
1104238405Sjkim	movups	%xmm8,(%rsi)
1105238405Sjkim	movups	%xmm9,16(%rsi)
1106238405Sjkim	jmp	.Lctr32_done
1107238405Sjkim
1108238405Sjkim.align	16
1109238405Sjkim.Lctr32_three:
1110238405Sjkim	call	_aesni_encrypt3
1111238405Sjkim	xorps	%xmm2,%xmm8
1112238405Sjkim	xorps	%xmm3,%xmm9
1113238405Sjkim	movups	%xmm8,(%rsi)
1114238405Sjkim	xorps	%xmm4,%xmm10
1115238405Sjkim	movups	%xmm9,16(%rsi)
1116238405Sjkim	movups	%xmm10,32(%rsi)
1117238405Sjkim	jmp	.Lctr32_done
1118238405Sjkim
1119238405Sjkim.align	16
1120238405Sjkim.Lctr32_four:
1121238405Sjkim	call	_aesni_encrypt4
1122238405Sjkim	xorps	%xmm2,%xmm8
1123238405Sjkim	xorps	%xmm3,%xmm9
1124238405Sjkim	movups	%xmm8,(%rsi)
1125238405Sjkim	xorps	%xmm4,%xmm10
1126238405Sjkim	movups	%xmm9,16(%rsi)
1127238405Sjkim	xorps	%xmm5,%xmm11
1128238405Sjkim	movups	%xmm10,32(%rsi)
1129238405Sjkim	movups	%xmm11,48(%rsi)
1130238405Sjkim
1131238405Sjkim.Lctr32_done:
1132238405Sjkim	.byte	0xf3,0xc3
1133238405Sjkim.size	aesni_ctr32_encrypt_blocks,.-aesni_ctr32_encrypt_blocks
1134238405Sjkim.globl	aesni_xts_encrypt
1135238405Sjkim.type	aesni_xts_encrypt,@function
1136238405Sjkim.align	16
1137238405Sjkimaesni_xts_encrypt:
1138238405Sjkim	leaq	-104(%rsp),%rsp
1139238405Sjkim	movups	(%r9),%xmm15
1140238405Sjkim	movl	240(%r8),%eax
1141238405Sjkim	movl	240(%rcx),%r10d
1142238405Sjkim	movups	(%r8),%xmm0
1143238405Sjkim	movups	16(%r8),%xmm1
1144238405Sjkim	leaq	32(%r8),%r8
1145238405Sjkim	xorps	%xmm0,%xmm15
1146238405Sjkim.Loop_enc1_8:
1147238405Sjkim.byte	102,68,15,56,220,249
1148238405Sjkim	decl	%eax
1149238405Sjkim	movups	(%r8),%xmm1
1150238405Sjkim	leaq	16(%r8),%r8
1151238405Sjkim	jnz	.Loop_enc1_8
1152238405Sjkim.byte	102,68,15,56,221,249
1153238405Sjkim	movq	%rcx,%r11
1154238405Sjkim	movl	%r10d,%eax
1155238405Sjkim	movq	%rdx,%r9
1156238405Sjkim	andq	$-16,%rdx
1157238405Sjkim
1158238405Sjkim	movdqa	.Lxts_magic(%rip),%xmm8
1159238405Sjkim	pxor	%xmm14,%xmm14
1160238405Sjkim	pcmpgtd	%xmm15,%xmm14
1161238405Sjkim	pshufd	$19,%xmm14,%xmm9
1162238405Sjkim	pxor	%xmm14,%xmm14
1163238405Sjkim	movdqa	%xmm15,%xmm10
1164238405Sjkim	paddq	%xmm15,%xmm15
1165238405Sjkim	pand	%xmm8,%xmm9
1166238405Sjkim	pcmpgtd	%xmm15,%xmm14
1167238405Sjkim	pxor	%xmm9,%xmm15
1168238405Sjkim	pshufd	$19,%xmm14,%xmm9
1169238405Sjkim	pxor	%xmm14,%xmm14
1170238405Sjkim	movdqa	%xmm15,%xmm11
1171238405Sjkim	paddq	%xmm15,%xmm15
1172238405Sjkim	pand	%xmm8,%xmm9
1173238405Sjkim	pcmpgtd	%xmm15,%xmm14
1174238405Sjkim	pxor	%xmm9,%xmm15
1175238405Sjkim	pshufd	$19,%xmm14,%xmm9
1176238405Sjkim	pxor	%xmm14,%xmm14
1177238405Sjkim	movdqa	%xmm15,%xmm12
1178238405Sjkim	paddq	%xmm15,%xmm15
1179238405Sjkim	pand	%xmm8,%xmm9
1180238405Sjkim	pcmpgtd	%xmm15,%xmm14
1181238405Sjkim	pxor	%xmm9,%xmm15
1182238405Sjkim	pshufd	$19,%xmm14,%xmm9
1183238405Sjkim	pxor	%xmm14,%xmm14
1184238405Sjkim	movdqa	%xmm15,%xmm13
1185238405Sjkim	paddq	%xmm15,%xmm15
1186238405Sjkim	pand	%xmm8,%xmm9
1187238405Sjkim	pcmpgtd	%xmm15,%xmm14
1188238405Sjkim	pxor	%xmm9,%xmm15
1189238405Sjkim	subq	$96,%rdx
1190238405Sjkim	jc	.Lxts_enc_short
1191238405Sjkim
1192238405Sjkim	shrl	$1,%eax
1193238405Sjkim	subl	$1,%eax
1194238405Sjkim	movl	%eax,%r10d
1195238405Sjkim	jmp	.Lxts_enc_grandloop
1196238405Sjkim
1197238405Sjkim.align	16
1198238405Sjkim.Lxts_enc_grandloop:
1199238405Sjkim	pshufd	$19,%xmm14,%xmm9
1200238405Sjkim	movdqa	%xmm15,%xmm14
1201238405Sjkim	paddq	%xmm15,%xmm15
1202238405Sjkim	movdqu	0(%rdi),%xmm2
1203238405Sjkim	pand	%xmm8,%xmm9
1204238405Sjkim	movdqu	16(%rdi),%xmm3
1205238405Sjkim	pxor	%xmm9,%xmm15
1206238405Sjkim
1207238405Sjkim	movdqu	32(%rdi),%xmm4
1208238405Sjkim	pxor	%xmm10,%xmm2
1209238405Sjkim	movdqu	48(%rdi),%xmm5
1210238405Sjkim	pxor	%xmm11,%xmm3
1211238405Sjkim	movdqu	64(%rdi),%xmm6
1212238405Sjkim	pxor	%xmm12,%xmm4
1213238405Sjkim	movdqu	80(%rdi),%xmm7
1214238405Sjkim	leaq	96(%rdi),%rdi
1215238405Sjkim	pxor	%xmm13,%xmm5
1216238405Sjkim	movups	(%r11),%xmm0
1217238405Sjkim	pxor	%xmm14,%xmm6
1218238405Sjkim	pxor	%xmm15,%xmm7
1219238405Sjkim
1220238405Sjkim
1221238405Sjkim
1222238405Sjkim	movups	16(%r11),%xmm1
1223238405Sjkim	pxor	%xmm0,%xmm2
1224238405Sjkim	pxor	%xmm0,%xmm3
1225238405Sjkim	movdqa	%xmm10,0(%rsp)
1226238405Sjkim.byte	102,15,56,220,209
1227238405Sjkim	leaq	32(%r11),%rcx
1228238405Sjkim	pxor	%xmm0,%xmm4
1229238405Sjkim	movdqa	%xmm11,16(%rsp)
1230238405Sjkim.byte	102,15,56,220,217
1231238405Sjkim	pxor	%xmm0,%xmm5
1232238405Sjkim	movdqa	%xmm12,32(%rsp)
1233238405Sjkim.byte	102,15,56,220,225
1234238405Sjkim	pxor	%xmm0,%xmm6
1235238405Sjkim	movdqa	%xmm13,48(%rsp)
1236238405Sjkim.byte	102,15,56,220,233
1237238405Sjkim	pxor	%xmm0,%xmm7
1238238405Sjkim	movups	(%rcx),%xmm0
1239238405Sjkim	decl	%eax
1240238405Sjkim	movdqa	%xmm14,64(%rsp)
1241238405Sjkim.byte	102,15,56,220,241
1242238405Sjkim	movdqa	%xmm15,80(%rsp)
1243238405Sjkim.byte	102,15,56,220,249
1244238405Sjkim	pxor	%xmm14,%xmm14
1245238405Sjkim	pcmpgtd	%xmm15,%xmm14
1246238405Sjkim	jmp	.Lxts_enc_loop6_enter
1247238405Sjkim
1248238405Sjkim.align	16
1249238405Sjkim.Lxts_enc_loop6:
1250238405Sjkim.byte	102,15,56,220,209
1251238405Sjkim.byte	102,15,56,220,217
1252238405Sjkim	decl	%eax
1253238405Sjkim.byte	102,15,56,220,225
1254238405Sjkim.byte	102,15,56,220,233
1255238405Sjkim.byte	102,15,56,220,241
1256238405Sjkim.byte	102,15,56,220,249
1257238405Sjkim.Lxts_enc_loop6_enter:
1258238405Sjkim	movups	16(%rcx),%xmm1
1259238405Sjkim.byte	102,15,56,220,208
1260238405Sjkim.byte	102,15,56,220,216
1261238405Sjkim	leaq	32(%rcx),%rcx
1262238405Sjkim.byte	102,15,56,220,224
1263238405Sjkim.byte	102,15,56,220,232
1264238405Sjkim.byte	102,15,56,220,240
1265238405Sjkim.byte	102,15,56,220,248
1266238405Sjkim	movups	(%rcx),%xmm0
1267238405Sjkim	jnz	.Lxts_enc_loop6
1268238405Sjkim
1269238405Sjkim	pshufd	$19,%xmm14,%xmm9
1270238405Sjkim	pxor	%xmm14,%xmm14
1271238405Sjkim	paddq	%xmm15,%xmm15
1272238405Sjkim.byte	102,15,56,220,209
1273238405Sjkim	pand	%xmm8,%xmm9
1274238405Sjkim.byte	102,15,56,220,217
1275238405Sjkim	pcmpgtd	%xmm15,%xmm14
1276238405Sjkim.byte	102,15,56,220,225
1277238405Sjkim	pxor	%xmm9,%xmm15
1278238405Sjkim.byte	102,15,56,220,233
1279238405Sjkim.byte	102,15,56,220,241
1280238405Sjkim.byte	102,15,56,220,249
1281238405Sjkim	movups	16(%rcx),%xmm1
1282238405Sjkim
1283238405Sjkim	pshufd	$19,%xmm14,%xmm9
1284238405Sjkim	pxor	%xmm14,%xmm14
1285238405Sjkim	movdqa	%xmm15,%xmm10
1286238405Sjkim	paddq	%xmm15,%xmm15
1287238405Sjkim.byte	102,15,56,220,208
1288238405Sjkim	pand	%xmm8,%xmm9
1289238405Sjkim.byte	102,15,56,220,216
1290238405Sjkim	pcmpgtd	%xmm15,%xmm14
1291238405Sjkim.byte	102,15,56,220,224
1292238405Sjkim	pxor	%xmm9,%xmm15
1293238405Sjkim.byte	102,15,56,220,232
1294238405Sjkim.byte	102,15,56,220,240
1295238405Sjkim.byte	102,15,56,220,248
1296238405Sjkim	movups	32(%rcx),%xmm0
1297238405Sjkim
1298238405Sjkim	pshufd	$19,%xmm14,%xmm9
1299238405Sjkim	pxor	%xmm14,%xmm14
1300238405Sjkim	movdqa	%xmm15,%xmm11
1301238405Sjkim	paddq	%xmm15,%xmm15
1302238405Sjkim.byte	102,15,56,220,209
1303238405Sjkim	pand	%xmm8,%xmm9
1304238405Sjkim.byte	102,15,56,220,217
1305238405Sjkim	pcmpgtd	%xmm15,%xmm14
1306238405Sjkim.byte	102,15,56,220,225
1307238405Sjkim	pxor	%xmm9,%xmm15
1308238405Sjkim.byte	102,15,56,220,233
1309238405Sjkim.byte	102,15,56,220,241
1310238405Sjkim.byte	102,15,56,220,249
1311238405Sjkim
1312238405Sjkim	pshufd	$19,%xmm14,%xmm9
1313238405Sjkim	pxor	%xmm14,%xmm14
1314238405Sjkim	movdqa	%xmm15,%xmm12
1315238405Sjkim	paddq	%xmm15,%xmm15
1316238405Sjkim.byte	102,15,56,221,208
1317238405Sjkim	pand	%xmm8,%xmm9
1318238405Sjkim.byte	102,15,56,221,216
1319238405Sjkim	pcmpgtd	%xmm15,%xmm14
1320238405Sjkim.byte	102,15,56,221,224
1321238405Sjkim	pxor	%xmm9,%xmm15
1322238405Sjkim.byte	102,15,56,221,232
1323238405Sjkim.byte	102,15,56,221,240
1324238405Sjkim.byte	102,15,56,221,248
1325238405Sjkim
1326238405Sjkim	pshufd	$19,%xmm14,%xmm9
1327238405Sjkim	pxor	%xmm14,%xmm14
1328238405Sjkim	movdqa	%xmm15,%xmm13
1329238405Sjkim	paddq	%xmm15,%xmm15
1330238405Sjkim	xorps	0(%rsp),%xmm2
1331238405Sjkim	pand	%xmm8,%xmm9
1332238405Sjkim	xorps	16(%rsp),%xmm3
1333238405Sjkim	pcmpgtd	%xmm15,%xmm14
1334238405Sjkim	pxor	%xmm9,%xmm15
1335238405Sjkim
1336238405Sjkim	xorps	32(%rsp),%xmm4
1337238405Sjkim	movups	%xmm2,0(%rsi)
1338238405Sjkim	xorps	48(%rsp),%xmm5
1339238405Sjkim	movups	%xmm3,16(%rsi)
1340238405Sjkim	xorps	64(%rsp),%xmm6
1341238405Sjkim	movups	%xmm4,32(%rsi)
1342238405Sjkim	xorps	80(%rsp),%xmm7
1343238405Sjkim	movups	%xmm5,48(%rsi)
1344238405Sjkim	movl	%r10d,%eax
1345238405Sjkim	movups	%xmm6,64(%rsi)
1346238405Sjkim	movups	%xmm7,80(%rsi)
1347238405Sjkim	leaq	96(%rsi),%rsi
1348238405Sjkim	subq	$96,%rdx
1349238405Sjkim	jnc	.Lxts_enc_grandloop
1350238405Sjkim
1351238405Sjkim	leal	3(%rax,%rax,1),%eax
1352238405Sjkim	movq	%r11,%rcx
1353238405Sjkim	movl	%eax,%r10d
1354238405Sjkim
1355238405Sjkim.Lxts_enc_short:
1356238405Sjkim	addq	$96,%rdx
1357238405Sjkim	jz	.Lxts_enc_done
1358238405Sjkim
1359238405Sjkim	cmpq	$32,%rdx
1360238405Sjkim	jb	.Lxts_enc_one
1361238405Sjkim	je	.Lxts_enc_two
1362238405Sjkim
1363238405Sjkim	cmpq	$64,%rdx
1364238405Sjkim	jb	.Lxts_enc_three
1365238405Sjkim	je	.Lxts_enc_four
1366238405Sjkim
1367238405Sjkim	pshufd	$19,%xmm14,%xmm9
1368238405Sjkim	movdqa	%xmm15,%xmm14
1369238405Sjkim	paddq	%xmm15,%xmm15
1370238405Sjkim	movdqu	(%rdi),%xmm2
1371238405Sjkim	pand	%xmm8,%xmm9
1372238405Sjkim	movdqu	16(%rdi),%xmm3
1373238405Sjkim	pxor	%xmm9,%xmm15
1374238405Sjkim
1375238405Sjkim	movdqu	32(%rdi),%xmm4
1376238405Sjkim	pxor	%xmm10,%xmm2
1377238405Sjkim	movdqu	48(%rdi),%xmm5
1378238405Sjkim	pxor	%xmm11,%xmm3
1379238405Sjkim	movdqu	64(%rdi),%xmm6
1380238405Sjkim	leaq	80(%rdi),%rdi
1381238405Sjkim	pxor	%xmm12,%xmm4
1382238405Sjkim	pxor	%xmm13,%xmm5
1383238405Sjkim	pxor	%xmm14,%xmm6
1384238405Sjkim
1385238405Sjkim	call	_aesni_encrypt6
1386238405Sjkim
1387238405Sjkim	xorps	%xmm10,%xmm2
1388238405Sjkim	movdqa	%xmm15,%xmm10
1389238405Sjkim	xorps	%xmm11,%xmm3
1390238405Sjkim	xorps	%xmm12,%xmm4
1391238405Sjkim	movdqu	%xmm2,(%rsi)
1392238405Sjkim	xorps	%xmm13,%xmm5
1393238405Sjkim	movdqu	%xmm3,16(%rsi)
1394238405Sjkim	xorps	%xmm14,%xmm6
1395238405Sjkim	movdqu	%xmm4,32(%rsi)
1396238405Sjkim	movdqu	%xmm5,48(%rsi)
1397238405Sjkim	movdqu	%xmm6,64(%rsi)
1398238405Sjkim	leaq	80(%rsi),%rsi
1399238405Sjkim	jmp	.Lxts_enc_done
1400238405Sjkim
1401238405Sjkim.align	16
1402238405Sjkim.Lxts_enc_one:
1403238405Sjkim	movups	(%rdi),%xmm2
1404238405Sjkim	leaq	16(%rdi),%rdi
1405238405Sjkim	xorps	%xmm10,%xmm2
1406238405Sjkim	movups	(%rcx),%xmm0
1407238405Sjkim	movups	16(%rcx),%xmm1
1408238405Sjkim	leaq	32(%rcx),%rcx
1409238405Sjkim	xorps	%xmm0,%xmm2
1410238405Sjkim.Loop_enc1_9:
1411238405Sjkim.byte	102,15,56,220,209
1412238405Sjkim	decl	%eax
1413238405Sjkim	movups	(%rcx),%xmm1
1414238405Sjkim	leaq	16(%rcx),%rcx
1415238405Sjkim	jnz	.Loop_enc1_9
1416238405Sjkim.byte	102,15,56,221,209
1417238405Sjkim	xorps	%xmm10,%xmm2
1418238405Sjkim	movdqa	%xmm11,%xmm10
1419238405Sjkim	movups	%xmm2,(%rsi)
1420238405Sjkim	leaq	16(%rsi),%rsi
1421238405Sjkim	jmp	.Lxts_enc_done
1422238405Sjkim
1423238405Sjkim.align	16
1424238405Sjkim.Lxts_enc_two:
1425238405Sjkim	movups	(%rdi),%xmm2
1426238405Sjkim	movups	16(%rdi),%xmm3
1427238405Sjkim	leaq	32(%rdi),%rdi
1428238405Sjkim	xorps	%xmm10,%xmm2
1429238405Sjkim	xorps	%xmm11,%xmm3
1430238405Sjkim
1431238405Sjkim	call	_aesni_encrypt3
1432238405Sjkim
1433238405Sjkim	xorps	%xmm10,%xmm2
1434238405Sjkim	movdqa	%xmm12,%xmm10
1435238405Sjkim	xorps	%xmm11,%xmm3
1436238405Sjkim	movups	%xmm2,(%rsi)
1437238405Sjkim	movups	%xmm3,16(%rsi)
1438238405Sjkim	leaq	32(%rsi),%rsi
1439238405Sjkim	jmp	.Lxts_enc_done
1440238405Sjkim
1441238405Sjkim.align	16
1442238405Sjkim.Lxts_enc_three:
1443238405Sjkim	movups	(%rdi),%xmm2
1444238405Sjkim	movups	16(%rdi),%xmm3
1445238405Sjkim	movups	32(%rdi),%xmm4
1446238405Sjkim	leaq	48(%rdi),%rdi
1447238405Sjkim	xorps	%xmm10,%xmm2
1448238405Sjkim	xorps	%xmm11,%xmm3
1449238405Sjkim	xorps	%xmm12,%xmm4
1450238405Sjkim
1451238405Sjkim	call	_aesni_encrypt3
1452238405Sjkim
1453238405Sjkim	xorps	%xmm10,%xmm2
1454238405Sjkim	movdqa	%xmm13,%xmm10
1455238405Sjkim	xorps	%xmm11,%xmm3
1456238405Sjkim	xorps	%xmm12,%xmm4
1457238405Sjkim	movups	%xmm2,(%rsi)
1458238405Sjkim	movups	%xmm3,16(%rsi)
1459238405Sjkim	movups	%xmm4,32(%rsi)
1460238405Sjkim	leaq	48(%rsi),%rsi
1461238405Sjkim	jmp	.Lxts_enc_done
1462238405Sjkim
1463238405Sjkim.align	16
1464238405Sjkim.Lxts_enc_four:
1465238405Sjkim	movups	(%rdi),%xmm2
1466238405Sjkim	movups	16(%rdi),%xmm3
1467238405Sjkim	movups	32(%rdi),%xmm4
1468238405Sjkim	xorps	%xmm10,%xmm2
1469238405Sjkim	movups	48(%rdi),%xmm5
1470238405Sjkim	leaq	64(%rdi),%rdi
1471238405Sjkim	xorps	%xmm11,%xmm3
1472238405Sjkim	xorps	%xmm12,%xmm4
1473238405Sjkim	xorps	%xmm13,%xmm5
1474238405Sjkim
1475238405Sjkim	call	_aesni_encrypt4
1476238405Sjkim
1477238405Sjkim	xorps	%xmm10,%xmm2
1478238405Sjkim	movdqa	%xmm15,%xmm10
1479238405Sjkim	xorps	%xmm11,%xmm3
1480238405Sjkim	xorps	%xmm12,%xmm4
1481238405Sjkim	movups	%xmm2,(%rsi)
1482238405Sjkim	xorps	%xmm13,%xmm5
1483238405Sjkim	movups	%xmm3,16(%rsi)
1484238405Sjkim	movups	%xmm4,32(%rsi)
1485238405Sjkim	movups	%xmm5,48(%rsi)
1486238405Sjkim	leaq	64(%rsi),%rsi
1487238405Sjkim	jmp	.Lxts_enc_done
1488238405Sjkim
1489238405Sjkim.align	16
1490238405Sjkim.Lxts_enc_done:
1491238405Sjkim	andq	$15,%r9
1492238405Sjkim	jz	.Lxts_enc_ret
1493238405Sjkim	movq	%r9,%rdx
1494238405Sjkim
1495238405Sjkim.Lxts_enc_steal:
1496238405Sjkim	movzbl	(%rdi),%eax
1497238405Sjkim	movzbl	-16(%rsi),%ecx
1498238405Sjkim	leaq	1(%rdi),%rdi
1499238405Sjkim	movb	%al,-16(%rsi)
1500238405Sjkim	movb	%cl,0(%rsi)
1501238405Sjkim	leaq	1(%rsi),%rsi
1502238405Sjkim	subq	$1,%rdx
1503238405Sjkim	jnz	.Lxts_enc_steal
1504238405Sjkim
1505238405Sjkim	subq	%r9,%rsi
1506238405Sjkim	movq	%r11,%rcx
1507238405Sjkim	movl	%r10d,%eax
1508238405Sjkim
1509238405Sjkim	movups	-16(%rsi),%xmm2
1510238405Sjkim	xorps	%xmm10,%xmm2
1511238405Sjkim	movups	(%rcx),%xmm0
1512238405Sjkim	movups	16(%rcx),%xmm1
1513238405Sjkim	leaq	32(%rcx),%rcx
1514238405Sjkim	xorps	%xmm0,%xmm2
1515238405Sjkim.Loop_enc1_10:
1516238405Sjkim.byte	102,15,56,220,209
1517238405Sjkim	decl	%eax
1518238405Sjkim	movups	(%rcx),%xmm1
1519238405Sjkim	leaq	16(%rcx),%rcx
1520238405Sjkim	jnz	.Loop_enc1_10
1521238405Sjkim.byte	102,15,56,221,209
1522238405Sjkim	xorps	%xmm10,%xmm2
1523238405Sjkim	movups	%xmm2,-16(%rsi)
1524238405Sjkim
1525238405Sjkim.Lxts_enc_ret:
1526238405Sjkim	leaq	104(%rsp),%rsp
1527238405Sjkim.Lxts_enc_epilogue:
1528238405Sjkim	.byte	0xf3,0xc3
1529238405Sjkim.size	aesni_xts_encrypt,.-aesni_xts_encrypt
1530238405Sjkim.globl	aesni_xts_decrypt
1531238405Sjkim.type	aesni_xts_decrypt,@function
1532238405Sjkim.align	16
1533238405Sjkimaesni_xts_decrypt:
1534238405Sjkim	leaq	-104(%rsp),%rsp
1535238405Sjkim	movups	(%r9),%xmm15
1536238405Sjkim	movl	240(%r8),%eax
1537238405Sjkim	movl	240(%rcx),%r10d
1538238405Sjkim	movups	(%r8),%xmm0
1539238405Sjkim	movups	16(%r8),%xmm1
1540238405Sjkim	leaq	32(%r8),%r8
1541238405Sjkim	xorps	%xmm0,%xmm15
1542238405Sjkim.Loop_enc1_11:
1543238405Sjkim.byte	102,68,15,56,220,249
1544238405Sjkim	decl	%eax
1545238405Sjkim	movups	(%r8),%xmm1
1546238405Sjkim	leaq	16(%r8),%r8
1547238405Sjkim	jnz	.Loop_enc1_11
1548238405Sjkim.byte	102,68,15,56,221,249
1549238405Sjkim	xorl	%eax,%eax
1550238405Sjkim	testq	$15,%rdx
1551238405Sjkim	setnz	%al
1552238405Sjkim	shlq	$4,%rax
1553238405Sjkim	subq	%rax,%rdx
1554238405Sjkim
1555238405Sjkim	movq	%rcx,%r11
1556238405Sjkim	movl	%r10d,%eax
1557238405Sjkim	movq	%rdx,%r9
1558238405Sjkim	andq	$-16,%rdx
1559238405Sjkim
1560238405Sjkim	movdqa	.Lxts_magic(%rip),%xmm8
1561238405Sjkim	pxor	%xmm14,%xmm14
1562238405Sjkim	pcmpgtd	%xmm15,%xmm14
1563238405Sjkim	pshufd	$19,%xmm14,%xmm9
1564238405Sjkim	pxor	%xmm14,%xmm14
1565238405Sjkim	movdqa	%xmm15,%xmm10
1566238405Sjkim	paddq	%xmm15,%xmm15
1567238405Sjkim	pand	%xmm8,%xmm9
1568238405Sjkim	pcmpgtd	%xmm15,%xmm14
1569238405Sjkim	pxor	%xmm9,%xmm15
1570238405Sjkim	pshufd	$19,%xmm14,%xmm9
1571238405Sjkim	pxor	%xmm14,%xmm14
1572238405Sjkim	movdqa	%xmm15,%xmm11
1573238405Sjkim	paddq	%xmm15,%xmm15
1574238405Sjkim	pand	%xmm8,%xmm9
1575238405Sjkim	pcmpgtd	%xmm15,%xmm14
1576238405Sjkim	pxor	%xmm9,%xmm15
1577238405Sjkim	pshufd	$19,%xmm14,%xmm9
1578238405Sjkim	pxor	%xmm14,%xmm14
1579238405Sjkim	movdqa	%xmm15,%xmm12
1580238405Sjkim	paddq	%xmm15,%xmm15
1581238405Sjkim	pand	%xmm8,%xmm9
1582238405Sjkim	pcmpgtd	%xmm15,%xmm14
1583238405Sjkim	pxor	%xmm9,%xmm15
1584238405Sjkim	pshufd	$19,%xmm14,%xmm9
1585238405Sjkim	pxor	%xmm14,%xmm14
1586238405Sjkim	movdqa	%xmm15,%xmm13
1587238405Sjkim	paddq	%xmm15,%xmm15
1588238405Sjkim	pand	%xmm8,%xmm9
1589238405Sjkim	pcmpgtd	%xmm15,%xmm14
1590238405Sjkim	pxor	%xmm9,%xmm15
1591238405Sjkim	subq	$96,%rdx
1592238405Sjkim	jc	.Lxts_dec_short
1593238405Sjkim
1594238405Sjkim	shrl	$1,%eax
1595238405Sjkim	subl	$1,%eax
1596238405Sjkim	movl	%eax,%r10d
1597238405Sjkim	jmp	.Lxts_dec_grandloop
1598238405Sjkim
1599238405Sjkim.align	16
1600238405Sjkim.Lxts_dec_grandloop:
1601238405Sjkim	pshufd	$19,%xmm14,%xmm9
1602238405Sjkim	movdqa	%xmm15,%xmm14
1603238405Sjkim	paddq	%xmm15,%xmm15
1604238405Sjkim	movdqu	0(%rdi),%xmm2
1605238405Sjkim	pand	%xmm8,%xmm9
1606238405Sjkim	movdqu	16(%rdi),%xmm3
1607238405Sjkim	pxor	%xmm9,%xmm15
1608238405Sjkim
1609238405Sjkim	movdqu	32(%rdi),%xmm4
1610238405Sjkim	pxor	%xmm10,%xmm2
1611238405Sjkim	movdqu	48(%rdi),%xmm5
1612238405Sjkim	pxor	%xmm11,%xmm3
1613238405Sjkim	movdqu	64(%rdi),%xmm6
1614238405Sjkim	pxor	%xmm12,%xmm4
1615238405Sjkim	movdqu	80(%rdi),%xmm7
1616238405Sjkim	leaq	96(%rdi),%rdi
1617238405Sjkim	pxor	%xmm13,%xmm5
1618238405Sjkim	movups	(%r11),%xmm0
1619238405Sjkim	pxor	%xmm14,%xmm6
1620238405Sjkim	pxor	%xmm15,%xmm7
1621238405Sjkim
1622238405Sjkim
1623238405Sjkim
1624238405Sjkim	movups	16(%r11),%xmm1
1625238405Sjkim	pxor	%xmm0,%xmm2
1626238405Sjkim	pxor	%xmm0,%xmm3
1627238405Sjkim	movdqa	%xmm10,0(%rsp)
1628238405Sjkim.byte	102,15,56,222,209
1629238405Sjkim	leaq	32(%r11),%rcx
1630238405Sjkim	pxor	%xmm0,%xmm4
1631238405Sjkim	movdqa	%xmm11,16(%rsp)
1632238405Sjkim.byte	102,15,56,222,217
1633238405Sjkim	pxor	%xmm0,%xmm5
1634238405Sjkim	movdqa	%xmm12,32(%rsp)
1635238405Sjkim.byte	102,15,56,222,225
1636238405Sjkim	pxor	%xmm0,%xmm6
1637238405Sjkim	movdqa	%xmm13,48(%rsp)
1638238405Sjkim.byte	102,15,56,222,233
1639238405Sjkim	pxor	%xmm0,%xmm7
1640238405Sjkim	movups	(%rcx),%xmm0
1641238405Sjkim	decl	%eax
1642238405Sjkim	movdqa	%xmm14,64(%rsp)
1643238405Sjkim.byte	102,15,56,222,241
1644238405Sjkim	movdqa	%xmm15,80(%rsp)
1645238405Sjkim.byte	102,15,56,222,249
1646238405Sjkim	pxor	%xmm14,%xmm14
1647238405Sjkim	pcmpgtd	%xmm15,%xmm14
1648238405Sjkim	jmp	.Lxts_dec_loop6_enter
1649238405Sjkim
1650238405Sjkim.align	16
1651238405Sjkim.Lxts_dec_loop6:
1652238405Sjkim.byte	102,15,56,222,209
1653238405Sjkim.byte	102,15,56,222,217
1654238405Sjkim	decl	%eax
1655238405Sjkim.byte	102,15,56,222,225
1656238405Sjkim.byte	102,15,56,222,233
1657238405Sjkim.byte	102,15,56,222,241
1658238405Sjkim.byte	102,15,56,222,249
1659238405Sjkim.Lxts_dec_loop6_enter:
1660238405Sjkim	movups	16(%rcx),%xmm1
1661238405Sjkim.byte	102,15,56,222,208
1662238405Sjkim.byte	102,15,56,222,216
1663238405Sjkim	leaq	32(%rcx),%rcx
1664238405Sjkim.byte	102,15,56,222,224
1665238405Sjkim.byte	102,15,56,222,232
1666238405Sjkim.byte	102,15,56,222,240
1667238405Sjkim.byte	102,15,56,222,248
1668238405Sjkim	movups	(%rcx),%xmm0
1669238405Sjkim	jnz	.Lxts_dec_loop6
1670238405Sjkim
1671238405Sjkim	pshufd	$19,%xmm14,%xmm9
1672238405Sjkim	pxor	%xmm14,%xmm14
1673238405Sjkim	paddq	%xmm15,%xmm15
1674238405Sjkim.byte	102,15,56,222,209
1675238405Sjkim	pand	%xmm8,%xmm9
1676238405Sjkim.byte	102,15,56,222,217
1677238405Sjkim	pcmpgtd	%xmm15,%xmm14
1678238405Sjkim.byte	102,15,56,222,225
1679238405Sjkim	pxor	%xmm9,%xmm15
1680238405Sjkim.byte	102,15,56,222,233
1681238405Sjkim.byte	102,15,56,222,241
1682238405Sjkim.byte	102,15,56,222,249
1683238405Sjkim	movups	16(%rcx),%xmm1
1684238405Sjkim
1685238405Sjkim	pshufd	$19,%xmm14,%xmm9
1686238405Sjkim	pxor	%xmm14,%xmm14
1687238405Sjkim	movdqa	%xmm15,%xmm10
1688238405Sjkim	paddq	%xmm15,%xmm15
1689238405Sjkim.byte	102,15,56,222,208
1690238405Sjkim	pand	%xmm8,%xmm9
1691238405Sjkim.byte	102,15,56,222,216
1692238405Sjkim	pcmpgtd	%xmm15,%xmm14
1693238405Sjkim.byte	102,15,56,222,224
1694238405Sjkim	pxor	%xmm9,%xmm15
1695238405Sjkim.byte	102,15,56,222,232
1696238405Sjkim.byte	102,15,56,222,240
1697238405Sjkim.byte	102,15,56,222,248
1698238405Sjkim	movups	32(%rcx),%xmm0
1699238405Sjkim
1700238405Sjkim	pshufd	$19,%xmm14,%xmm9
1701238405Sjkim	pxor	%xmm14,%xmm14
1702238405Sjkim	movdqa	%xmm15,%xmm11
1703238405Sjkim	paddq	%xmm15,%xmm15
1704238405Sjkim.byte	102,15,56,222,209
1705238405Sjkim	pand	%xmm8,%xmm9
1706238405Sjkim.byte	102,15,56,222,217
1707238405Sjkim	pcmpgtd	%xmm15,%xmm14
1708238405Sjkim.byte	102,15,56,222,225
1709238405Sjkim	pxor	%xmm9,%xmm15
1710238405Sjkim.byte	102,15,56,222,233
1711238405Sjkim.byte	102,15,56,222,241
1712238405Sjkim.byte	102,15,56,222,249
1713238405Sjkim
1714238405Sjkim	pshufd	$19,%xmm14,%xmm9
1715238405Sjkim	pxor	%xmm14,%xmm14
1716238405Sjkim	movdqa	%xmm15,%xmm12
1717238405Sjkim	paddq	%xmm15,%xmm15
1718238405Sjkim.byte	102,15,56,223,208
1719238405Sjkim	pand	%xmm8,%xmm9
1720238405Sjkim.byte	102,15,56,223,216
1721238405Sjkim	pcmpgtd	%xmm15,%xmm14
1722238405Sjkim.byte	102,15,56,223,224
1723238405Sjkim	pxor	%xmm9,%xmm15
1724238405Sjkim.byte	102,15,56,223,232
1725238405Sjkim.byte	102,15,56,223,240
1726238405Sjkim.byte	102,15,56,223,248
1727238405Sjkim
1728238405Sjkim	pshufd	$19,%xmm14,%xmm9
1729238405Sjkim	pxor	%xmm14,%xmm14
1730238405Sjkim	movdqa	%xmm15,%xmm13
1731238405Sjkim	paddq	%xmm15,%xmm15
1732238405Sjkim	xorps	0(%rsp),%xmm2
1733238405Sjkim	pand	%xmm8,%xmm9
1734238405Sjkim	xorps	16(%rsp),%xmm3
1735238405Sjkim	pcmpgtd	%xmm15,%xmm14
1736238405Sjkim	pxor	%xmm9,%xmm15
1737238405Sjkim
1738238405Sjkim	xorps	32(%rsp),%xmm4
1739238405Sjkim	movups	%xmm2,0(%rsi)
1740238405Sjkim	xorps	48(%rsp),%xmm5
1741238405Sjkim	movups	%xmm3,16(%rsi)
1742238405Sjkim	xorps	64(%rsp),%xmm6
1743238405Sjkim	movups	%xmm4,32(%rsi)
1744238405Sjkim	xorps	80(%rsp),%xmm7
1745238405Sjkim	movups	%xmm5,48(%rsi)
1746238405Sjkim	movl	%r10d,%eax
1747238405Sjkim	movups	%xmm6,64(%rsi)
1748238405Sjkim	movups	%xmm7,80(%rsi)
1749238405Sjkim	leaq	96(%rsi),%rsi
1750238405Sjkim	subq	$96,%rdx
1751238405Sjkim	jnc	.Lxts_dec_grandloop
1752238405Sjkim
1753238405Sjkim	leal	3(%rax,%rax,1),%eax
1754238405Sjkim	movq	%r11,%rcx
1755238405Sjkim	movl	%eax,%r10d
1756238405Sjkim
1757238405Sjkim.Lxts_dec_short:
1758238405Sjkim	addq	$96,%rdx
1759238405Sjkim	jz	.Lxts_dec_done
1760238405Sjkim
1761238405Sjkim	cmpq	$32,%rdx
1762238405Sjkim	jb	.Lxts_dec_one
1763238405Sjkim	je	.Lxts_dec_two
1764238405Sjkim
1765238405Sjkim	cmpq	$64,%rdx
1766238405Sjkim	jb	.Lxts_dec_three
1767238405Sjkim	je	.Lxts_dec_four
1768238405Sjkim
1769238405Sjkim	pshufd	$19,%xmm14,%xmm9
1770238405Sjkim	movdqa	%xmm15,%xmm14
1771238405Sjkim	paddq	%xmm15,%xmm15
1772238405Sjkim	movdqu	(%rdi),%xmm2
1773238405Sjkim	pand	%xmm8,%xmm9
1774238405Sjkim	movdqu	16(%rdi),%xmm3
1775238405Sjkim	pxor	%xmm9,%xmm15
1776238405Sjkim
1777238405Sjkim	movdqu	32(%rdi),%xmm4
1778238405Sjkim	pxor	%xmm10,%xmm2
1779238405Sjkim	movdqu	48(%rdi),%xmm5
1780238405Sjkim	pxor	%xmm11,%xmm3
1781238405Sjkim	movdqu	64(%rdi),%xmm6
1782238405Sjkim	leaq	80(%rdi),%rdi
1783238405Sjkim	pxor	%xmm12,%xmm4
1784238405Sjkim	pxor	%xmm13,%xmm5
1785238405Sjkim	pxor	%xmm14,%xmm6
1786238405Sjkim
1787238405Sjkim	call	_aesni_decrypt6
1788238405Sjkim
1789238405Sjkim	xorps	%xmm10,%xmm2
1790238405Sjkim	xorps	%xmm11,%xmm3
1791238405Sjkim	xorps	%xmm12,%xmm4
1792238405Sjkim	movdqu	%xmm2,(%rsi)
1793238405Sjkim	xorps	%xmm13,%xmm5
1794238405Sjkim	movdqu	%xmm3,16(%rsi)
1795238405Sjkim	xorps	%xmm14,%xmm6
1796238405Sjkim	movdqu	%xmm4,32(%rsi)
1797238405Sjkim	pxor	%xmm14,%xmm14
1798238405Sjkim	movdqu	%xmm5,48(%rsi)
1799238405Sjkim	pcmpgtd	%xmm15,%xmm14
1800238405Sjkim	movdqu	%xmm6,64(%rsi)
1801238405Sjkim	leaq	80(%rsi),%rsi
1802238405Sjkim	pshufd	$19,%xmm14,%xmm11
1803238405Sjkim	andq	$15,%r9
1804238405Sjkim	jz	.Lxts_dec_ret
1805238405Sjkim
1806238405Sjkim	movdqa	%xmm15,%xmm10
1807238405Sjkim	paddq	%xmm15,%xmm15
1808238405Sjkim	pand	%xmm8,%xmm11
1809238405Sjkim	pxor	%xmm15,%xmm11
1810238405Sjkim	jmp	.Lxts_dec_done2
1811238405Sjkim
1812238405Sjkim.align	16
1813238405Sjkim.Lxts_dec_one:
1814238405Sjkim	movups	(%rdi),%xmm2
1815238405Sjkim	leaq	16(%rdi),%rdi
1816238405Sjkim	xorps	%xmm10,%xmm2
1817238405Sjkim	movups	(%rcx),%xmm0
1818238405Sjkim	movups	16(%rcx),%xmm1
1819238405Sjkim	leaq	32(%rcx),%rcx
1820238405Sjkim	xorps	%xmm0,%xmm2
1821238405Sjkim.Loop_dec1_12:
1822238405Sjkim.byte	102,15,56,222,209
1823238405Sjkim	decl	%eax
1824238405Sjkim	movups	(%rcx),%xmm1
1825238405Sjkim	leaq	16(%rcx),%rcx
1826238405Sjkim	jnz	.Loop_dec1_12
1827238405Sjkim.byte	102,15,56,223,209
1828238405Sjkim	xorps	%xmm10,%xmm2
1829238405Sjkim	movdqa	%xmm11,%xmm10
1830238405Sjkim	movups	%xmm2,(%rsi)
1831238405Sjkim	movdqa	%xmm12,%xmm11
1832238405Sjkim	leaq	16(%rsi),%rsi
1833238405Sjkim	jmp	.Lxts_dec_done
1834238405Sjkim
1835238405Sjkim.align	16
1836238405Sjkim.Lxts_dec_two:
1837238405Sjkim	movups	(%rdi),%xmm2
1838238405Sjkim	movups	16(%rdi),%xmm3
1839238405Sjkim	leaq	32(%rdi),%rdi
1840238405Sjkim	xorps	%xmm10,%xmm2
1841238405Sjkim	xorps	%xmm11,%xmm3
1842238405Sjkim
1843238405Sjkim	call	_aesni_decrypt3
1844238405Sjkim
1845238405Sjkim	xorps	%xmm10,%xmm2
1846238405Sjkim	movdqa	%xmm12,%xmm10
1847238405Sjkim	xorps	%xmm11,%xmm3
1848238405Sjkim	movdqa	%xmm13,%xmm11
1849238405Sjkim	movups	%xmm2,(%rsi)
1850238405Sjkim	movups	%xmm3,16(%rsi)
1851238405Sjkim	leaq	32(%rsi),%rsi
1852238405Sjkim	jmp	.Lxts_dec_done
1853238405Sjkim
1854238405Sjkim.align	16
1855238405Sjkim.Lxts_dec_three:
1856238405Sjkim	movups	(%rdi),%xmm2
1857238405Sjkim	movups	16(%rdi),%xmm3
1858238405Sjkim	movups	32(%rdi),%xmm4
1859238405Sjkim	leaq	48(%rdi),%rdi
1860238405Sjkim	xorps	%xmm10,%xmm2
1861238405Sjkim	xorps	%xmm11,%xmm3
1862238405Sjkim	xorps	%xmm12,%xmm4
1863238405Sjkim
1864238405Sjkim	call	_aesni_decrypt3
1865238405Sjkim
1866238405Sjkim	xorps	%xmm10,%xmm2
1867238405Sjkim	movdqa	%xmm13,%xmm10
1868238405Sjkim	xorps	%xmm11,%xmm3
1869238405Sjkim	movdqa	%xmm15,%xmm11
1870238405Sjkim	xorps	%xmm12,%xmm4
1871238405Sjkim	movups	%xmm2,(%rsi)
1872238405Sjkim	movups	%xmm3,16(%rsi)
1873238405Sjkim	movups	%xmm4,32(%rsi)
1874238405Sjkim	leaq	48(%rsi),%rsi
1875238405Sjkim	jmp	.Lxts_dec_done
1876238405Sjkim
1877238405Sjkim.align	16
1878238405Sjkim.Lxts_dec_four:
1879238405Sjkim	pshufd	$19,%xmm14,%xmm9
1880238405Sjkim	movdqa	%xmm15,%xmm14
1881238405Sjkim	paddq	%xmm15,%xmm15
1882238405Sjkim	movups	(%rdi),%xmm2
1883238405Sjkim	pand	%xmm8,%xmm9
1884238405Sjkim	movups	16(%rdi),%xmm3
1885238405Sjkim	pxor	%xmm9,%xmm15
1886238405Sjkim
1887238405Sjkim	movups	32(%rdi),%xmm4
1888238405Sjkim	xorps	%xmm10,%xmm2
1889238405Sjkim	movups	48(%rdi),%xmm5
1890238405Sjkim	leaq	64(%rdi),%rdi
1891238405Sjkim	xorps	%xmm11,%xmm3
1892238405Sjkim	xorps	%xmm12,%xmm4
1893238405Sjkim	xorps	%xmm13,%xmm5
1894238405Sjkim
1895238405Sjkim	call	_aesni_decrypt4
1896238405Sjkim
1897238405Sjkim	xorps	%xmm10,%xmm2
1898238405Sjkim	movdqa	%xmm14,%xmm10
1899238405Sjkim	xorps	%xmm11,%xmm3
1900238405Sjkim	movdqa	%xmm15,%xmm11
1901238405Sjkim	xorps	%xmm12,%xmm4
1902238405Sjkim	movups	%xmm2,(%rsi)
1903238405Sjkim	xorps	%xmm13,%xmm5
1904238405Sjkim	movups	%xmm3,16(%rsi)
1905238405Sjkim	movups	%xmm4,32(%rsi)
1906238405Sjkim	movups	%xmm5,48(%rsi)
1907238405Sjkim	leaq	64(%rsi),%rsi
1908238405Sjkim	jmp	.Lxts_dec_done
1909238405Sjkim
1910238405Sjkim.align	16
1911238405Sjkim.Lxts_dec_done:
1912238405Sjkim	andq	$15,%r9
1913238405Sjkim	jz	.Lxts_dec_ret
1914238405Sjkim.Lxts_dec_done2:
1915238405Sjkim	movq	%r9,%rdx
1916238405Sjkim	movq	%r11,%rcx
1917238405Sjkim	movl	%r10d,%eax
1918238405Sjkim
1919238405Sjkim	movups	(%rdi),%xmm2
1920238405Sjkim	xorps	%xmm11,%xmm2
1921238405Sjkim	movups	(%rcx),%xmm0
1922238405Sjkim	movups	16(%rcx),%xmm1
1923238405Sjkim	leaq	32(%rcx),%rcx
1924238405Sjkim	xorps	%xmm0,%xmm2
1925238405Sjkim.Loop_dec1_13:
1926238405Sjkim.byte	102,15,56,222,209
1927238405Sjkim	decl	%eax
1928238405Sjkim	movups	(%rcx),%xmm1
1929238405Sjkim	leaq	16(%rcx),%rcx
1930238405Sjkim	jnz	.Loop_dec1_13
1931238405Sjkim.byte	102,15,56,223,209
1932238405Sjkim	xorps	%xmm11,%xmm2
1933238405Sjkim	movups	%xmm2,(%rsi)
1934238405Sjkim
1935238405Sjkim.Lxts_dec_steal:
1936238405Sjkim	movzbl	16(%rdi),%eax
1937238405Sjkim	movzbl	(%rsi),%ecx
1938238405Sjkim	leaq	1(%rdi),%rdi
1939238405Sjkim	movb	%al,(%rsi)
1940238405Sjkim	movb	%cl,16(%rsi)
1941238405Sjkim	leaq	1(%rsi),%rsi
1942238405Sjkim	subq	$1,%rdx
1943238405Sjkim	jnz	.Lxts_dec_steal
1944238405Sjkim
1945238405Sjkim	subq	%r9,%rsi
1946238405Sjkim	movq	%r11,%rcx
1947238405Sjkim	movl	%r10d,%eax
1948238405Sjkim
1949238405Sjkim	movups	(%rsi),%xmm2
1950238405Sjkim	xorps	%xmm10,%xmm2
1951238405Sjkim	movups	(%rcx),%xmm0
1952238405Sjkim	movups	16(%rcx),%xmm1
1953238405Sjkim	leaq	32(%rcx),%rcx
1954238405Sjkim	xorps	%xmm0,%xmm2
1955238405Sjkim.Loop_dec1_14:
1956238405Sjkim.byte	102,15,56,222,209
1957238405Sjkim	decl	%eax
1958238405Sjkim	movups	(%rcx),%xmm1
1959238405Sjkim	leaq	16(%rcx),%rcx
1960238405Sjkim	jnz	.Loop_dec1_14
1961238405Sjkim.byte	102,15,56,223,209
1962238405Sjkim	xorps	%xmm10,%xmm2
1963238405Sjkim	movups	%xmm2,(%rsi)
1964238405Sjkim
1965238405Sjkim.Lxts_dec_ret:
1966238405Sjkim	leaq	104(%rsp),%rsp
1967238405Sjkim.Lxts_dec_epilogue:
1968238405Sjkim	.byte	0xf3,0xc3
1969238405Sjkim.size	aesni_xts_decrypt,.-aesni_xts_decrypt
1970238405Sjkim.globl	aesni_cbc_encrypt
1971238405Sjkim.type	aesni_cbc_encrypt,@function
1972238405Sjkim.align	16
1973238405Sjkimaesni_cbc_encrypt:
1974238405Sjkim	testq	%rdx,%rdx
1975238405Sjkim	jz	.Lcbc_ret
1976238405Sjkim
1977238405Sjkim	movl	240(%rcx),%r10d
1978238405Sjkim	movq	%rcx,%r11
1979238405Sjkim	testl	%r9d,%r9d
1980238405Sjkim	jz	.Lcbc_decrypt
1981238405Sjkim
1982238405Sjkim	movups	(%r8),%xmm2
1983238405Sjkim	movl	%r10d,%eax
1984238405Sjkim	cmpq	$16,%rdx
1985238405Sjkim	jb	.Lcbc_enc_tail
1986238405Sjkim	subq	$16,%rdx
1987238405Sjkim	jmp	.Lcbc_enc_loop
1988238405Sjkim.align	16
1989238405Sjkim.Lcbc_enc_loop:
1990238405Sjkim	movups	(%rdi),%xmm3
1991238405Sjkim	leaq	16(%rdi),%rdi
1992238405Sjkim
1993238405Sjkim	movups	(%rcx),%xmm0
1994238405Sjkim	movups	16(%rcx),%xmm1
1995238405Sjkim	xorps	%xmm0,%xmm3
1996238405Sjkim	leaq	32(%rcx),%rcx
1997238405Sjkim	xorps	%xmm3,%xmm2
1998238405Sjkim.Loop_enc1_15:
1999238405Sjkim.byte	102,15,56,220,209
2000238405Sjkim	decl	%eax
2001238405Sjkim	movups	(%rcx),%xmm1
2002238405Sjkim	leaq	16(%rcx),%rcx
2003238405Sjkim	jnz	.Loop_enc1_15
2004238405Sjkim.byte	102,15,56,221,209
2005238405Sjkim	movl	%r10d,%eax
2006238405Sjkim	movq	%r11,%rcx
2007238405Sjkim	movups	%xmm2,0(%rsi)
2008238405Sjkim	leaq	16(%rsi),%rsi
2009238405Sjkim	subq	$16,%rdx
2010238405Sjkim	jnc	.Lcbc_enc_loop
2011238405Sjkim	addq	$16,%rdx
2012238405Sjkim	jnz	.Lcbc_enc_tail
2013238405Sjkim	movups	%xmm2,(%r8)
2014238405Sjkim	jmp	.Lcbc_ret
2015238405Sjkim
2016238405Sjkim.Lcbc_enc_tail:
2017238405Sjkim	movq	%rdx,%rcx
2018238405Sjkim	xchgq	%rdi,%rsi
2019238405Sjkim.long	0x9066A4F3
2020238405Sjkim	movl	$16,%ecx
2021238405Sjkim	subq	%rdx,%rcx
2022238405Sjkim	xorl	%eax,%eax
2023238405Sjkim.long	0x9066AAF3
2024238405Sjkim	leaq	-16(%rdi),%rdi
2025238405Sjkim	movl	%r10d,%eax
2026238405Sjkim	movq	%rdi,%rsi
2027238405Sjkim	movq	%r11,%rcx
2028238405Sjkim	xorq	%rdx,%rdx
2029238405Sjkim	jmp	.Lcbc_enc_loop
2030238405Sjkim
2031238405Sjkim.align	16
2032238405Sjkim.Lcbc_decrypt:
2033238405Sjkim	movups	(%r8),%xmm9
2034238405Sjkim	movl	%r10d,%eax
2035238405Sjkim	cmpq	$112,%rdx
2036238405Sjkim	jbe	.Lcbc_dec_tail
2037238405Sjkim	shrl	$1,%r10d
2038238405Sjkim	subq	$112,%rdx
2039238405Sjkim	movl	%r10d,%eax
2040238405Sjkim	movaps	%xmm9,-24(%rsp)
2041238405Sjkim	jmp	.Lcbc_dec_loop8_enter
2042238405Sjkim.align	16
2043238405Sjkim.Lcbc_dec_loop8:
2044238405Sjkim	movaps	%xmm0,-24(%rsp)
2045238405Sjkim	movups	%xmm9,(%rsi)
2046238405Sjkim	leaq	16(%rsi),%rsi
2047238405Sjkim.Lcbc_dec_loop8_enter:
2048238405Sjkim	movups	(%rcx),%xmm0
2049238405Sjkim	movups	(%rdi),%xmm2
2050238405Sjkim	movups	16(%rdi),%xmm3
2051238405Sjkim	movups	16(%rcx),%xmm1
2052238405Sjkim
2053238405Sjkim	leaq	32(%rcx),%rcx
2054238405Sjkim	movdqu	32(%rdi),%xmm4
2055238405Sjkim	xorps	%xmm0,%xmm2
2056238405Sjkim	movdqu	48(%rdi),%xmm5
2057238405Sjkim	xorps	%xmm0,%xmm3
2058238405Sjkim	movdqu	64(%rdi),%xmm6
2059238405Sjkim.byte	102,15,56,222,209
2060238405Sjkim	pxor	%xmm0,%xmm4
2061238405Sjkim	movdqu	80(%rdi),%xmm7
2062238405Sjkim.byte	102,15,56,222,217
2063238405Sjkim	pxor	%xmm0,%xmm5
2064238405Sjkim	movdqu	96(%rdi),%xmm8
2065238405Sjkim.byte	102,15,56,222,225
2066238405Sjkim	pxor	%xmm0,%xmm6
2067238405Sjkim	movdqu	112(%rdi),%xmm9
2068238405Sjkim.byte	102,15,56,222,233
2069238405Sjkim	pxor	%xmm0,%xmm7
2070238405Sjkim	decl	%eax
2071238405Sjkim.byte	102,15,56,222,241
2072238405Sjkim	pxor	%xmm0,%xmm8
2073238405Sjkim.byte	102,15,56,222,249
2074238405Sjkim	pxor	%xmm0,%xmm9
2075238405Sjkim	movups	(%rcx),%xmm0
2076238405Sjkim.byte	102,68,15,56,222,193
2077238405Sjkim.byte	102,68,15,56,222,201
2078238405Sjkim	movups	16(%rcx),%xmm1
2079238405Sjkim
2080238405Sjkim	call	.Ldec_loop8_enter
2081238405Sjkim
2082238405Sjkim	movups	(%rdi),%xmm1
2083238405Sjkim	movups	16(%rdi),%xmm0
2084238405Sjkim	xorps	-24(%rsp),%xmm2
2085238405Sjkim	xorps	%xmm1,%xmm3
2086238405Sjkim	movups	32(%rdi),%xmm1
2087238405Sjkim	xorps	%xmm0,%xmm4
2088238405Sjkim	movups	48(%rdi),%xmm0
2089238405Sjkim	xorps	%xmm1,%xmm5
2090238405Sjkim	movups	64(%rdi),%xmm1
2091238405Sjkim	xorps	%xmm0,%xmm6
2092238405Sjkim	movups	80(%rdi),%xmm0
2093238405Sjkim	xorps	%xmm1,%xmm7
2094238405Sjkim	movups	96(%rdi),%xmm1
2095238405Sjkim	xorps	%xmm0,%xmm8
2096238405Sjkim	movups	112(%rdi),%xmm0
2097238405Sjkim	xorps	%xmm1,%xmm9
2098238405Sjkim	movups	%xmm2,(%rsi)
2099238405Sjkim	movups	%xmm3,16(%rsi)
2100238405Sjkim	movups	%xmm4,32(%rsi)
2101238405Sjkim	movups	%xmm5,48(%rsi)
2102238405Sjkim	movl	%r10d,%eax
2103238405Sjkim	movups	%xmm6,64(%rsi)
2104238405Sjkim	movq	%r11,%rcx
2105238405Sjkim	movups	%xmm7,80(%rsi)
2106238405Sjkim	leaq	128(%rdi),%rdi
2107238405Sjkim	movups	%xmm8,96(%rsi)
2108238405Sjkim	leaq	112(%rsi),%rsi
2109238405Sjkim	subq	$128,%rdx
2110238405Sjkim	ja	.Lcbc_dec_loop8
2111238405Sjkim
2112238405Sjkim	movaps	%xmm9,%xmm2
2113238405Sjkim	movaps	%xmm0,%xmm9
2114238405Sjkim	addq	$112,%rdx
2115238405Sjkim	jle	.Lcbc_dec_tail_collected
2116238405Sjkim	movups	%xmm2,(%rsi)
2117238405Sjkim	leal	1(%r10,%r10,1),%eax
2118238405Sjkim	leaq	16(%rsi),%rsi
2119238405Sjkim.Lcbc_dec_tail:
2120238405Sjkim	movups	(%rdi),%xmm2
2121238405Sjkim	movaps	%xmm2,%xmm8
2122238405Sjkim	cmpq	$16,%rdx
2123238405Sjkim	jbe	.Lcbc_dec_one
2124238405Sjkim
2125238405Sjkim	movups	16(%rdi),%xmm3
2126238405Sjkim	movaps	%xmm3,%xmm7
2127238405Sjkim	cmpq	$32,%rdx
2128238405Sjkim	jbe	.Lcbc_dec_two
2129238405Sjkim
2130238405Sjkim	movups	32(%rdi),%xmm4
2131238405Sjkim	movaps	%xmm4,%xmm6
2132238405Sjkim	cmpq	$48,%rdx
2133238405Sjkim	jbe	.Lcbc_dec_three
2134238405Sjkim
2135238405Sjkim	movups	48(%rdi),%xmm5
2136238405Sjkim	cmpq	$64,%rdx
2137238405Sjkim	jbe	.Lcbc_dec_four
2138238405Sjkim
2139238405Sjkim	movups	64(%rdi),%xmm6
2140238405Sjkim	cmpq	$80,%rdx
2141238405Sjkim	jbe	.Lcbc_dec_five
2142238405Sjkim
2143238405Sjkim	movups	80(%rdi),%xmm7
2144238405Sjkim	cmpq	$96,%rdx
2145238405Sjkim	jbe	.Lcbc_dec_six
2146238405Sjkim
2147238405Sjkim	movups	96(%rdi),%xmm8
2148238405Sjkim	movaps	%xmm9,-24(%rsp)
2149238405Sjkim	call	_aesni_decrypt8
2150238405Sjkim	movups	(%rdi),%xmm1
2151238405Sjkim	movups	16(%rdi),%xmm0
2152238405Sjkim	xorps	-24(%rsp),%xmm2
2153238405Sjkim	xorps	%xmm1,%xmm3
2154238405Sjkim	movups	32(%rdi),%xmm1
2155238405Sjkim	xorps	%xmm0,%xmm4
2156238405Sjkim	movups	48(%rdi),%xmm0
2157238405Sjkim	xorps	%xmm1,%xmm5
2158238405Sjkim	movups	64(%rdi),%xmm1
2159238405Sjkim	xorps	%xmm0,%xmm6
2160238405Sjkim	movups	80(%rdi),%xmm0
2161238405Sjkim	xorps	%xmm1,%xmm7
2162238405Sjkim	movups	96(%rdi),%xmm9
2163238405Sjkim	xorps	%xmm0,%xmm8
2164238405Sjkim	movups	%xmm2,(%rsi)
2165238405Sjkim	movups	%xmm3,16(%rsi)
2166238405Sjkim	movups	%xmm4,32(%rsi)
2167238405Sjkim	movups	%xmm5,48(%rsi)
2168238405Sjkim	movups	%xmm6,64(%rsi)
2169238405Sjkim	movups	%xmm7,80(%rsi)
2170238405Sjkim	leaq	96(%rsi),%rsi
2171238405Sjkim	movaps	%xmm8,%xmm2
2172238405Sjkim	subq	$112,%rdx
2173238405Sjkim	jmp	.Lcbc_dec_tail_collected
2174238405Sjkim.align	16
2175238405Sjkim.Lcbc_dec_one:
2176238405Sjkim	movups	(%rcx),%xmm0
2177238405Sjkim	movups	16(%rcx),%xmm1
2178238405Sjkim	leaq	32(%rcx),%rcx
2179238405Sjkim	xorps	%xmm0,%xmm2
2180238405Sjkim.Loop_dec1_16:
2181238405Sjkim.byte	102,15,56,222,209
2182238405Sjkim	decl	%eax
2183238405Sjkim	movups	(%rcx),%xmm1
2184238405Sjkim	leaq	16(%rcx),%rcx
2185238405Sjkim	jnz	.Loop_dec1_16
2186238405Sjkim.byte	102,15,56,223,209
2187238405Sjkim	xorps	%xmm9,%xmm2
2188238405Sjkim	movaps	%xmm8,%xmm9
2189238405Sjkim	subq	$16,%rdx
2190238405Sjkim	jmp	.Lcbc_dec_tail_collected
2191238405Sjkim.align	16
2192238405Sjkim.Lcbc_dec_two:
2193238405Sjkim	xorps	%xmm4,%xmm4
2194238405Sjkim	call	_aesni_decrypt3
2195238405Sjkim	xorps	%xmm9,%xmm2
2196238405Sjkim	xorps	%xmm8,%xmm3
2197238405Sjkim	movups	%xmm2,(%rsi)
2198238405Sjkim	movaps	%xmm7,%xmm9
2199238405Sjkim	movaps	%xmm3,%xmm2
2200238405Sjkim	leaq	16(%rsi),%rsi
2201238405Sjkim	subq	$32,%rdx
2202238405Sjkim	jmp	.Lcbc_dec_tail_collected
2203238405Sjkim.align	16
2204238405Sjkim.Lcbc_dec_three:
2205238405Sjkim	call	_aesni_decrypt3
2206238405Sjkim	xorps	%xmm9,%xmm2
2207238405Sjkim	xorps	%xmm8,%xmm3
2208238405Sjkim	movups	%xmm2,(%rsi)
2209238405Sjkim	xorps	%xmm7,%xmm4
2210238405Sjkim	movups	%xmm3,16(%rsi)
2211238405Sjkim	movaps	%xmm6,%xmm9
2212238405Sjkim	movaps	%xmm4,%xmm2
2213238405Sjkim	leaq	32(%rsi),%rsi
2214238405Sjkim	subq	$48,%rdx
2215238405Sjkim	jmp	.Lcbc_dec_tail_collected
2216238405Sjkim.align	16
2217238405Sjkim.Lcbc_dec_four:
2218238405Sjkim	call	_aesni_decrypt4
2219238405Sjkim	xorps	%xmm9,%xmm2
2220238405Sjkim	movups	48(%rdi),%xmm9
2221238405Sjkim	xorps	%xmm8,%xmm3
2222238405Sjkim	movups	%xmm2,(%rsi)
2223238405Sjkim	xorps	%xmm7,%xmm4
2224238405Sjkim	movups	%xmm3,16(%rsi)
2225238405Sjkim	xorps	%xmm6,%xmm5
2226238405Sjkim	movups	%xmm4,32(%rsi)
2227238405Sjkim	movaps	%xmm5,%xmm2
2228238405Sjkim	leaq	48(%rsi),%rsi
2229238405Sjkim	subq	$64,%rdx
2230238405Sjkim	jmp	.Lcbc_dec_tail_collected
2231238405Sjkim.align	16
2232238405Sjkim.Lcbc_dec_five:
2233238405Sjkim	xorps	%xmm7,%xmm7
2234238405Sjkim	call	_aesni_decrypt6
2235238405Sjkim	movups	16(%rdi),%xmm1
2236238405Sjkim	movups	32(%rdi),%xmm0
2237238405Sjkim	xorps	%xmm9,%xmm2
2238238405Sjkim	xorps	%xmm8,%xmm3
2239238405Sjkim	xorps	%xmm1,%xmm4
2240238405Sjkim	movups	48(%rdi),%xmm1
2241238405Sjkim	xorps	%xmm0,%xmm5
2242238405Sjkim	movups	64(%rdi),%xmm9
2243238405Sjkim	xorps	%xmm1,%xmm6
2244238405Sjkim	movups	%xmm2,(%rsi)
2245238405Sjkim	movups	%xmm3,16(%rsi)
2246238405Sjkim	movups	%xmm4,32(%rsi)
2247238405Sjkim	movups	%xmm5,48(%rsi)
2248238405Sjkim	leaq	64(%rsi),%rsi
2249238405Sjkim	movaps	%xmm6,%xmm2
2250238405Sjkim	subq	$80,%rdx
2251238405Sjkim	jmp	.Lcbc_dec_tail_collected
2252238405Sjkim.align	16
2253238405Sjkim.Lcbc_dec_six:
2254238405Sjkim	call	_aesni_decrypt6
2255238405Sjkim	movups	16(%rdi),%xmm1
2256238405Sjkim	movups	32(%rdi),%xmm0
2257238405Sjkim	xorps	%xmm9,%xmm2
2258238405Sjkim	xorps	%xmm8,%xmm3
2259238405Sjkim	xorps	%xmm1,%xmm4
2260238405Sjkim	movups	48(%rdi),%xmm1
2261238405Sjkim	xorps	%xmm0,%xmm5
2262238405Sjkim	movups	64(%rdi),%xmm0
2263238405Sjkim	xorps	%xmm1,%xmm6
2264238405Sjkim	movups	80(%rdi),%xmm9
2265238405Sjkim	xorps	%xmm0,%xmm7
2266238405Sjkim	movups	%xmm2,(%rsi)
2267238405Sjkim	movups	%xmm3,16(%rsi)
2268238405Sjkim	movups	%xmm4,32(%rsi)
2269238405Sjkim	movups	%xmm5,48(%rsi)
2270238405Sjkim	movups	%xmm6,64(%rsi)
2271238405Sjkim	leaq	80(%rsi),%rsi
2272238405Sjkim	movaps	%xmm7,%xmm2
2273238405Sjkim	subq	$96,%rdx
2274238405Sjkim	jmp	.Lcbc_dec_tail_collected
2275238405Sjkim.align	16
2276238405Sjkim.Lcbc_dec_tail_collected:
2277238405Sjkim	andq	$15,%rdx
2278238405Sjkim	movups	%xmm9,(%r8)
2279238405Sjkim	jnz	.Lcbc_dec_tail_partial
2280238405Sjkim	movups	%xmm2,(%rsi)
2281238405Sjkim	jmp	.Lcbc_dec_ret
2282238405Sjkim.align	16
2283238405Sjkim.Lcbc_dec_tail_partial:
2284238405Sjkim	movaps	%xmm2,-24(%rsp)
2285238405Sjkim	movq	$16,%rcx
2286238405Sjkim	movq	%rsi,%rdi
2287238405Sjkim	subq	%rdx,%rcx
2288238405Sjkim	leaq	-24(%rsp),%rsi
2289238405Sjkim.long	0x9066A4F3
2290238405Sjkim
2291238405Sjkim.Lcbc_dec_ret:
2292238405Sjkim.Lcbc_ret:
2293238405Sjkim	.byte	0xf3,0xc3
2294238405Sjkim.size	aesni_cbc_encrypt,.-aesni_cbc_encrypt
2295238405Sjkim.globl	aesni_set_decrypt_key
2296238405Sjkim.type	aesni_set_decrypt_key,@function
2297238405Sjkim.align	16
2298238405Sjkimaesni_set_decrypt_key:
2299238405Sjkim.byte	0x48,0x83,0xEC,0x08
2300238405Sjkim	call	__aesni_set_encrypt_key
2301238405Sjkim	shll	$4,%esi
2302238405Sjkim	testl	%eax,%eax
2303238405Sjkim	jnz	.Ldec_key_ret
2304238405Sjkim	leaq	16(%rdx,%rsi,1),%rdi
2305238405Sjkim
2306238405Sjkim	movups	(%rdx),%xmm0
2307238405Sjkim	movups	(%rdi),%xmm1
2308238405Sjkim	movups	%xmm0,(%rdi)
2309238405Sjkim	movups	%xmm1,(%rdx)
2310238405Sjkim	leaq	16(%rdx),%rdx
2311238405Sjkim	leaq	-16(%rdi),%rdi
2312238405Sjkim
2313238405Sjkim.Ldec_key_inverse:
2314238405Sjkim	movups	(%rdx),%xmm0
2315238405Sjkim	movups	(%rdi),%xmm1
2316238405Sjkim.byte	102,15,56,219,192
2317238405Sjkim.byte	102,15,56,219,201
2318238405Sjkim	leaq	16(%rdx),%rdx
2319238405Sjkim	leaq	-16(%rdi),%rdi
2320238405Sjkim	movups	%xmm0,16(%rdi)
2321238405Sjkim	movups	%xmm1,-16(%rdx)
2322238405Sjkim	cmpq	%rdx,%rdi
2323238405Sjkim	ja	.Ldec_key_inverse
2324238405Sjkim
2325238405Sjkim	movups	(%rdx),%xmm0
2326238405Sjkim.byte	102,15,56,219,192
2327238405Sjkim	movups	%xmm0,(%rdi)
2328238405Sjkim.Ldec_key_ret:
2329238405Sjkim	addq	$8,%rsp
2330238405Sjkim	.byte	0xf3,0xc3
2331238405Sjkim.LSEH_end_set_decrypt_key:
2332238405Sjkim.size	aesni_set_decrypt_key,.-aesni_set_decrypt_key
2333238405Sjkim.globl	aesni_set_encrypt_key
2334238405Sjkim.type	aesni_set_encrypt_key,@function
2335238405Sjkim.align	16
2336238405Sjkimaesni_set_encrypt_key:
2337238405Sjkim__aesni_set_encrypt_key:
2338238405Sjkim.byte	0x48,0x83,0xEC,0x08
2339238405Sjkim	movq	$-1,%rax
2340238405Sjkim	testq	%rdi,%rdi
2341238405Sjkim	jz	.Lenc_key_ret
2342238405Sjkim	testq	%rdx,%rdx
2343238405Sjkim	jz	.Lenc_key_ret
2344238405Sjkim
2345238405Sjkim	movups	(%rdi),%xmm0
2346238405Sjkim	xorps	%xmm4,%xmm4
2347238405Sjkim	leaq	16(%rdx),%rax
2348238405Sjkim	cmpl	$256,%esi
2349238405Sjkim	je	.L14rounds
2350238405Sjkim	cmpl	$192,%esi
2351238405Sjkim	je	.L12rounds
2352238405Sjkim	cmpl	$128,%esi
2353238405Sjkim	jne	.Lbad_keybits
2354238405Sjkim
2355238405Sjkim.L10rounds:
2356238405Sjkim	movl	$9,%esi
2357238405Sjkim	movups	%xmm0,(%rdx)
2358238405Sjkim.byte	102,15,58,223,200,1
2359238405Sjkim	call	.Lkey_expansion_128_cold
2360238405Sjkim.byte	102,15,58,223,200,2
2361238405Sjkim	call	.Lkey_expansion_128
2362238405Sjkim.byte	102,15,58,223,200,4
2363238405Sjkim	call	.Lkey_expansion_128
2364238405Sjkim.byte	102,15,58,223,200,8
2365238405Sjkim	call	.Lkey_expansion_128
2366238405Sjkim.byte	102,15,58,223,200,16
2367238405Sjkim	call	.Lkey_expansion_128
2368238405Sjkim.byte	102,15,58,223,200,32
2369238405Sjkim	call	.Lkey_expansion_128
2370238405Sjkim.byte	102,15,58,223,200,64
2371238405Sjkim	call	.Lkey_expansion_128
2372238405Sjkim.byte	102,15,58,223,200,128
2373238405Sjkim	call	.Lkey_expansion_128
2374238405Sjkim.byte	102,15,58,223,200,27
2375238405Sjkim	call	.Lkey_expansion_128
2376238405Sjkim.byte	102,15,58,223,200,54
2377238405Sjkim	call	.Lkey_expansion_128
2378238405Sjkim	movups	%xmm0,(%rax)
2379238405Sjkim	movl	%esi,80(%rax)
2380238405Sjkim	xorl	%eax,%eax
2381238405Sjkim	jmp	.Lenc_key_ret
2382238405Sjkim
2383238405Sjkim.align	16
2384238405Sjkim.L12rounds:
2385238405Sjkim	movq	16(%rdi),%xmm2
2386238405Sjkim	movl	$11,%esi
2387238405Sjkim	movups	%xmm0,(%rdx)
2388238405Sjkim.byte	102,15,58,223,202,1
2389238405Sjkim	call	.Lkey_expansion_192a_cold
2390238405Sjkim.byte	102,15,58,223,202,2
2391238405Sjkim	call	.Lkey_expansion_192b
2392238405Sjkim.byte	102,15,58,223,202,4
2393238405Sjkim	call	.Lkey_expansion_192a
2394238405Sjkim.byte	102,15,58,223,202,8
2395238405Sjkim	call	.Lkey_expansion_192b
2396238405Sjkim.byte	102,15,58,223,202,16
2397238405Sjkim	call	.Lkey_expansion_192a
2398238405Sjkim.byte	102,15,58,223,202,32
2399238405Sjkim	call	.Lkey_expansion_192b
2400238405Sjkim.byte	102,15,58,223,202,64
2401238405Sjkim	call	.Lkey_expansion_192a
2402238405Sjkim.byte	102,15,58,223,202,128
2403238405Sjkim	call	.Lkey_expansion_192b
2404238405Sjkim	movups	%xmm0,(%rax)
2405238405Sjkim	movl	%esi,48(%rax)
2406238405Sjkim	xorq	%rax,%rax
2407238405Sjkim	jmp	.Lenc_key_ret
2408238405Sjkim
2409238405Sjkim.align	16
2410238405Sjkim.L14rounds:
2411238405Sjkim	movups	16(%rdi),%xmm2
2412238405Sjkim	movl	$13,%esi
2413238405Sjkim	leaq	16(%rax),%rax
2414238405Sjkim	movups	%xmm0,(%rdx)
2415238405Sjkim	movups	%xmm2,16(%rdx)
2416238405Sjkim.byte	102,15,58,223,202,1
2417238405Sjkim	call	.Lkey_expansion_256a_cold
2418238405Sjkim.byte	102,15,58,223,200,1
2419238405Sjkim	call	.Lkey_expansion_256b
2420238405Sjkim.byte	102,15,58,223,202,2
2421238405Sjkim	call	.Lkey_expansion_256a
2422238405Sjkim.byte	102,15,58,223,200,2
2423238405Sjkim	call	.Lkey_expansion_256b
2424238405Sjkim.byte	102,15,58,223,202,4
2425238405Sjkim	call	.Lkey_expansion_256a
2426238405Sjkim.byte	102,15,58,223,200,4
2427238405Sjkim	call	.Lkey_expansion_256b
2428238405Sjkim.byte	102,15,58,223,202,8
2429238405Sjkim	call	.Lkey_expansion_256a
2430238405Sjkim.byte	102,15,58,223,200,8
2431238405Sjkim	call	.Lkey_expansion_256b
2432238405Sjkim.byte	102,15,58,223,202,16
2433238405Sjkim	call	.Lkey_expansion_256a
2434238405Sjkim.byte	102,15,58,223,200,16
2435238405Sjkim	call	.Lkey_expansion_256b
2436238405Sjkim.byte	102,15,58,223,202,32
2437238405Sjkim	call	.Lkey_expansion_256a
2438238405Sjkim.byte	102,15,58,223,200,32
2439238405Sjkim	call	.Lkey_expansion_256b
2440238405Sjkim.byte	102,15,58,223,202,64
2441238405Sjkim	call	.Lkey_expansion_256a
2442238405Sjkim	movups	%xmm0,(%rax)
2443238405Sjkim	movl	%esi,16(%rax)
2444238405Sjkim	xorq	%rax,%rax
2445238405Sjkim	jmp	.Lenc_key_ret
2446238405Sjkim
2447238405Sjkim.align	16
2448238405Sjkim.Lbad_keybits:
2449238405Sjkim	movq	$-2,%rax
2450238405Sjkim.Lenc_key_ret:
2451238405Sjkim	addq	$8,%rsp
2452238405Sjkim	.byte	0xf3,0xc3
2453238405Sjkim.LSEH_end_set_encrypt_key:
2454238405Sjkim
2455238405Sjkim.align	16
2456238405Sjkim.Lkey_expansion_128:
2457238405Sjkim	movups	%xmm0,(%rax)
2458238405Sjkim	leaq	16(%rax),%rax
2459238405Sjkim.Lkey_expansion_128_cold:
2460238405Sjkim	shufps	$16,%xmm0,%xmm4
2461238405Sjkim	xorps	%xmm4,%xmm0
2462238405Sjkim	shufps	$140,%xmm0,%xmm4
2463238405Sjkim	xorps	%xmm4,%xmm0
2464238405Sjkim	shufps	$255,%xmm1,%xmm1
2465238405Sjkim	xorps	%xmm1,%xmm0
2466238405Sjkim	.byte	0xf3,0xc3
2467238405Sjkim
2468238405Sjkim.align	16
2469238405Sjkim.Lkey_expansion_192a:
2470238405Sjkim	movups	%xmm0,(%rax)
2471238405Sjkim	leaq	16(%rax),%rax
2472238405Sjkim.Lkey_expansion_192a_cold:
2473238405Sjkim	movaps	%xmm2,%xmm5
2474238405Sjkim.Lkey_expansion_192b_warm:
2475238405Sjkim	shufps	$16,%xmm0,%xmm4
2476238405Sjkim	movdqa	%xmm2,%xmm3
2477238405Sjkim	xorps	%xmm4,%xmm0
2478238405Sjkim	shufps	$140,%xmm0,%xmm4
2479238405Sjkim	pslldq	$4,%xmm3
2480238405Sjkim	xorps	%xmm4,%xmm0
2481238405Sjkim	pshufd	$85,%xmm1,%xmm1
2482238405Sjkim	pxor	%xmm3,%xmm2
2483238405Sjkim	pxor	%xmm1,%xmm0
2484238405Sjkim	pshufd	$255,%xmm0,%xmm3
2485238405Sjkim	pxor	%xmm3,%xmm2
2486238405Sjkim	.byte	0xf3,0xc3
2487238405Sjkim
2488238405Sjkim.align	16
2489238405Sjkim.Lkey_expansion_192b:
2490238405Sjkim	movaps	%xmm0,%xmm3
2491238405Sjkim	shufps	$68,%xmm0,%xmm5
2492238405Sjkim	movups	%xmm5,(%rax)
2493238405Sjkim	shufps	$78,%xmm2,%xmm3
2494238405Sjkim	movups	%xmm3,16(%rax)
2495238405Sjkim	leaq	32(%rax),%rax
2496238405Sjkim	jmp	.Lkey_expansion_192b_warm
2497238405Sjkim
2498238405Sjkim.align	16
2499238405Sjkim.Lkey_expansion_256a:
2500238405Sjkim	movups	%xmm2,(%rax)
2501238405Sjkim	leaq	16(%rax),%rax
2502238405Sjkim.Lkey_expansion_256a_cold:
2503238405Sjkim	shufps	$16,%xmm0,%xmm4
2504238405Sjkim	xorps	%xmm4,%xmm0
2505238405Sjkim	shufps	$140,%xmm0,%xmm4
2506238405Sjkim	xorps	%xmm4,%xmm0
2507238405Sjkim	shufps	$255,%xmm1,%xmm1
2508238405Sjkim	xorps	%xmm1,%xmm0
2509238405Sjkim	.byte	0xf3,0xc3
2510238405Sjkim
2511238405Sjkim.align	16
2512238405Sjkim.Lkey_expansion_256b:
2513238405Sjkim	movups	%xmm0,(%rax)
2514238405Sjkim	leaq	16(%rax),%rax
2515238405Sjkim
2516238405Sjkim	shufps	$16,%xmm2,%xmm4
2517238405Sjkim	xorps	%xmm4,%xmm2
2518238405Sjkim	shufps	$140,%xmm2,%xmm4
2519238405Sjkim	xorps	%xmm4,%xmm2
2520238405Sjkim	shufps	$170,%xmm1,%xmm1
2521238405Sjkim	xorps	%xmm1,%xmm2
2522238405Sjkim	.byte	0xf3,0xc3
2523238405Sjkim.size	aesni_set_encrypt_key,.-aesni_set_encrypt_key
2524238405Sjkim.size	__aesni_set_encrypt_key,.-__aesni_set_encrypt_key
2525238405Sjkim.align	64
2526238405Sjkim.Lbswap_mask:
2527238405Sjkim.byte	15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
2528238405Sjkim.Lincrement32:
2529238405Sjkim.long	6,6,6,0
2530238405Sjkim.Lincrement64:
2531238405Sjkim.long	1,0,0,0
2532238405Sjkim.Lxts_magic:
2533238405Sjkim.long	0x87,0,1,0
2534238405Sjkim
2535238405Sjkim.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
2536238405Sjkim.align	64
2537