1305153Sjkim/* $FreeBSD$ */
2305153Sjkim/* Do not modify. This file is auto-generated from aesni-x86_64.pl. */
3238405Sjkim.text
4290207Sjkim
5238405Sjkim.globl	aesni_encrypt
6238405Sjkim.type	aesni_encrypt,@function
7238405Sjkim.align	16
8238405Sjkimaesni_encrypt:
9238405Sjkim	movups	(%rdi),%xmm2
10238405Sjkim	movl	240(%rdx),%eax
11238405Sjkim	movups	(%rdx),%xmm0
12238405Sjkim	movups	16(%rdx),%xmm1
13238405Sjkim	leaq	32(%rdx),%rdx
14238405Sjkim	xorps	%xmm0,%xmm2
15238405Sjkim.Loop_enc1_1:
16238405Sjkim.byte	102,15,56,220,209
17238405Sjkim	decl	%eax
18238405Sjkim	movups	(%rdx),%xmm1
19238405Sjkim	leaq	16(%rdx),%rdx
20290207Sjkim	jnz	.Loop_enc1_1
21238405Sjkim.byte	102,15,56,221,209
22290207Sjkim	pxor	%xmm0,%xmm0
23290207Sjkim	pxor	%xmm1,%xmm1
24238405Sjkim	movups	%xmm2,(%rsi)
25290207Sjkim	pxor	%xmm2,%xmm2
26238405Sjkim	.byte	0xf3,0xc3
27238405Sjkim.size	aesni_encrypt,.-aesni_encrypt
28238405Sjkim
29238405Sjkim.globl	aesni_decrypt
30238405Sjkim.type	aesni_decrypt,@function
31238405Sjkim.align	16
32238405Sjkimaesni_decrypt:
33238405Sjkim	movups	(%rdi),%xmm2
34238405Sjkim	movl	240(%rdx),%eax
35238405Sjkim	movups	(%rdx),%xmm0
36238405Sjkim	movups	16(%rdx),%xmm1
37238405Sjkim	leaq	32(%rdx),%rdx
38238405Sjkim	xorps	%xmm0,%xmm2
39238405Sjkim.Loop_dec1_2:
40238405Sjkim.byte	102,15,56,222,209
41238405Sjkim	decl	%eax
42238405Sjkim	movups	(%rdx),%xmm1
43238405Sjkim	leaq	16(%rdx),%rdx
44290207Sjkim	jnz	.Loop_dec1_2
45238405Sjkim.byte	102,15,56,223,209
46290207Sjkim	pxor	%xmm0,%xmm0
47290207Sjkim	pxor	%xmm1,%xmm1
48238405Sjkim	movups	%xmm2,(%rsi)
49290207Sjkim	pxor	%xmm2,%xmm2
50238405Sjkim	.byte	0xf3,0xc3
51238405Sjkim.size	aesni_decrypt, .-aesni_decrypt
52290207Sjkim.type	_aesni_encrypt2,@function
53290207Sjkim.align	16
54290207Sjkim_aesni_encrypt2:
55290207Sjkim	movups	(%rcx),%xmm0
56290207Sjkim	shll	$4,%eax
57290207Sjkim	movups	16(%rcx),%xmm1
58290207Sjkim	xorps	%xmm0,%xmm2
59290207Sjkim	xorps	%xmm0,%xmm3
60290207Sjkim	movups	32(%rcx),%xmm0
61290207Sjkim	leaq	32(%rcx,%rax,1),%rcx
62290207Sjkim	negq	%rax
63290207Sjkim	addq	$16,%rax
64290207Sjkim
65290207Sjkim.Lenc_loop2:
66290207Sjkim.byte	102,15,56,220,209
67290207Sjkim.byte	102,15,56,220,217
68290207Sjkim	movups	(%rcx,%rax,1),%xmm1
69290207Sjkim	addq	$32,%rax
70290207Sjkim.byte	102,15,56,220,208
71290207Sjkim.byte	102,15,56,220,216
72290207Sjkim	movups	-16(%rcx,%rax,1),%xmm0
73290207Sjkim	jnz	.Lenc_loop2
74290207Sjkim
75290207Sjkim.byte	102,15,56,220,209
76290207Sjkim.byte	102,15,56,220,217
77290207Sjkim.byte	102,15,56,221,208
78290207Sjkim.byte	102,15,56,221,216
79290207Sjkim	.byte	0xf3,0xc3
80290207Sjkim.size	_aesni_encrypt2,.-_aesni_encrypt2
81290207Sjkim.type	_aesni_decrypt2,@function
82290207Sjkim.align	16
83290207Sjkim_aesni_decrypt2:
84290207Sjkim	movups	(%rcx),%xmm0
85290207Sjkim	shll	$4,%eax
86290207Sjkim	movups	16(%rcx),%xmm1
87290207Sjkim	xorps	%xmm0,%xmm2
88290207Sjkim	xorps	%xmm0,%xmm3
89290207Sjkim	movups	32(%rcx),%xmm0
90290207Sjkim	leaq	32(%rcx,%rax,1),%rcx
91290207Sjkim	negq	%rax
92290207Sjkim	addq	$16,%rax
93290207Sjkim
94290207Sjkim.Ldec_loop2:
95290207Sjkim.byte	102,15,56,222,209
96290207Sjkim.byte	102,15,56,222,217
97290207Sjkim	movups	(%rcx,%rax,1),%xmm1
98290207Sjkim	addq	$32,%rax
99290207Sjkim.byte	102,15,56,222,208
100290207Sjkim.byte	102,15,56,222,216
101290207Sjkim	movups	-16(%rcx,%rax,1),%xmm0
102290207Sjkim	jnz	.Ldec_loop2
103290207Sjkim
104290207Sjkim.byte	102,15,56,222,209
105290207Sjkim.byte	102,15,56,222,217
106290207Sjkim.byte	102,15,56,223,208
107290207Sjkim.byte	102,15,56,223,216
108290207Sjkim	.byte	0xf3,0xc3
109290207Sjkim.size	_aesni_decrypt2,.-_aesni_decrypt2
110238405Sjkim.type	_aesni_encrypt3,@function
111238405Sjkim.align	16
112238405Sjkim_aesni_encrypt3:
113238405Sjkim	movups	(%rcx),%xmm0
114290207Sjkim	shll	$4,%eax
115238405Sjkim	movups	16(%rcx),%xmm1
116238405Sjkim	xorps	%xmm0,%xmm2
117238405Sjkim	xorps	%xmm0,%xmm3
118238405Sjkim	xorps	%xmm0,%xmm4
119290207Sjkim	movups	32(%rcx),%xmm0
120290207Sjkim	leaq	32(%rcx,%rax,1),%rcx
121290207Sjkim	negq	%rax
122290207Sjkim	addq	$16,%rax
123238405Sjkim
124238405Sjkim.Lenc_loop3:
125238405Sjkim.byte	102,15,56,220,209
126238405Sjkim.byte	102,15,56,220,217
127238405Sjkim.byte	102,15,56,220,225
128290207Sjkim	movups	(%rcx,%rax,1),%xmm1
129290207Sjkim	addq	$32,%rax
130238405Sjkim.byte	102,15,56,220,208
131238405Sjkim.byte	102,15,56,220,216
132238405Sjkim.byte	102,15,56,220,224
133290207Sjkim	movups	-16(%rcx,%rax,1),%xmm0
134238405Sjkim	jnz	.Lenc_loop3
135238405Sjkim
136238405Sjkim.byte	102,15,56,220,209
137238405Sjkim.byte	102,15,56,220,217
138238405Sjkim.byte	102,15,56,220,225
139238405Sjkim.byte	102,15,56,221,208
140238405Sjkim.byte	102,15,56,221,216
141238405Sjkim.byte	102,15,56,221,224
142238405Sjkim	.byte	0xf3,0xc3
143238405Sjkim.size	_aesni_encrypt3,.-_aesni_encrypt3
144238405Sjkim.type	_aesni_decrypt3,@function
145238405Sjkim.align	16
146238405Sjkim_aesni_decrypt3:
147238405Sjkim	movups	(%rcx),%xmm0
148290207Sjkim	shll	$4,%eax
149238405Sjkim	movups	16(%rcx),%xmm1
150238405Sjkim	xorps	%xmm0,%xmm2
151238405Sjkim	xorps	%xmm0,%xmm3
152238405Sjkim	xorps	%xmm0,%xmm4
153290207Sjkim	movups	32(%rcx),%xmm0
154290207Sjkim	leaq	32(%rcx,%rax,1),%rcx
155290207Sjkim	negq	%rax
156290207Sjkim	addq	$16,%rax
157238405Sjkim
158238405Sjkim.Ldec_loop3:
159238405Sjkim.byte	102,15,56,222,209
160238405Sjkim.byte	102,15,56,222,217
161238405Sjkim.byte	102,15,56,222,225
162290207Sjkim	movups	(%rcx,%rax,1),%xmm1
163290207Sjkim	addq	$32,%rax
164238405Sjkim.byte	102,15,56,222,208
165238405Sjkim.byte	102,15,56,222,216
166238405Sjkim.byte	102,15,56,222,224
167290207Sjkim	movups	-16(%rcx,%rax,1),%xmm0
168238405Sjkim	jnz	.Ldec_loop3
169238405Sjkim
170238405Sjkim.byte	102,15,56,222,209
171238405Sjkim.byte	102,15,56,222,217
172238405Sjkim.byte	102,15,56,222,225
173238405Sjkim.byte	102,15,56,223,208
174238405Sjkim.byte	102,15,56,223,216
175238405Sjkim.byte	102,15,56,223,224
176238405Sjkim	.byte	0xf3,0xc3
177238405Sjkim.size	_aesni_decrypt3,.-_aesni_decrypt3
178238405Sjkim.type	_aesni_encrypt4,@function
179238405Sjkim.align	16
180238405Sjkim_aesni_encrypt4:
181238405Sjkim	movups	(%rcx),%xmm0
182290207Sjkim	shll	$4,%eax
183238405Sjkim	movups	16(%rcx),%xmm1
184238405Sjkim	xorps	%xmm0,%xmm2
185238405Sjkim	xorps	%xmm0,%xmm3
186238405Sjkim	xorps	%xmm0,%xmm4
187238405Sjkim	xorps	%xmm0,%xmm5
188290207Sjkim	movups	32(%rcx),%xmm0
189290207Sjkim	leaq	32(%rcx,%rax,1),%rcx
190290207Sjkim	negq	%rax
191290207Sjkim.byte	0x0f,0x1f,0x00
192290207Sjkim	addq	$16,%rax
193238405Sjkim
194238405Sjkim.Lenc_loop4:
195238405Sjkim.byte	102,15,56,220,209
196238405Sjkim.byte	102,15,56,220,217
197238405Sjkim.byte	102,15,56,220,225
198238405Sjkim.byte	102,15,56,220,233
199290207Sjkim	movups	(%rcx,%rax,1),%xmm1
200290207Sjkim	addq	$32,%rax
201238405Sjkim.byte	102,15,56,220,208
202238405Sjkim.byte	102,15,56,220,216
203238405Sjkim.byte	102,15,56,220,224
204238405Sjkim.byte	102,15,56,220,232
205290207Sjkim	movups	-16(%rcx,%rax,1),%xmm0
206238405Sjkim	jnz	.Lenc_loop4
207238405Sjkim
208238405Sjkim.byte	102,15,56,220,209
209238405Sjkim.byte	102,15,56,220,217
210238405Sjkim.byte	102,15,56,220,225
211238405Sjkim.byte	102,15,56,220,233
212238405Sjkim.byte	102,15,56,221,208
213238405Sjkim.byte	102,15,56,221,216
214238405Sjkim.byte	102,15,56,221,224
215238405Sjkim.byte	102,15,56,221,232
216238405Sjkim	.byte	0xf3,0xc3
217238405Sjkim.size	_aesni_encrypt4,.-_aesni_encrypt4
218238405Sjkim.type	_aesni_decrypt4,@function
219238405Sjkim.align	16
220238405Sjkim_aesni_decrypt4:
221238405Sjkim	movups	(%rcx),%xmm0
222290207Sjkim	shll	$4,%eax
223238405Sjkim	movups	16(%rcx),%xmm1
224238405Sjkim	xorps	%xmm0,%xmm2
225238405Sjkim	xorps	%xmm0,%xmm3
226238405Sjkim	xorps	%xmm0,%xmm4
227238405Sjkim	xorps	%xmm0,%xmm5
228290207Sjkim	movups	32(%rcx),%xmm0
229290207Sjkim	leaq	32(%rcx,%rax,1),%rcx
230290207Sjkim	negq	%rax
231290207Sjkim.byte	0x0f,0x1f,0x00
232290207Sjkim	addq	$16,%rax
233238405Sjkim
234238405Sjkim.Ldec_loop4:
235238405Sjkim.byte	102,15,56,222,209
236238405Sjkim.byte	102,15,56,222,217
237238405Sjkim.byte	102,15,56,222,225
238238405Sjkim.byte	102,15,56,222,233
239290207Sjkim	movups	(%rcx,%rax,1),%xmm1
240290207Sjkim	addq	$32,%rax
241238405Sjkim.byte	102,15,56,222,208
242238405Sjkim.byte	102,15,56,222,216
243238405Sjkim.byte	102,15,56,222,224
244238405Sjkim.byte	102,15,56,222,232
245290207Sjkim	movups	-16(%rcx,%rax,1),%xmm0
246238405Sjkim	jnz	.Ldec_loop4
247238405Sjkim
248238405Sjkim.byte	102,15,56,222,209
249238405Sjkim.byte	102,15,56,222,217
250238405Sjkim.byte	102,15,56,222,225
251238405Sjkim.byte	102,15,56,222,233
252238405Sjkim.byte	102,15,56,223,208
253238405Sjkim.byte	102,15,56,223,216
254238405Sjkim.byte	102,15,56,223,224
255238405Sjkim.byte	102,15,56,223,232
256238405Sjkim	.byte	0xf3,0xc3
257238405Sjkim.size	_aesni_decrypt4,.-_aesni_decrypt4
258238405Sjkim.type	_aesni_encrypt6,@function
259238405Sjkim.align	16
260238405Sjkim_aesni_encrypt6:
261238405Sjkim	movups	(%rcx),%xmm0
262290207Sjkim	shll	$4,%eax
263238405Sjkim	movups	16(%rcx),%xmm1
264238405Sjkim	xorps	%xmm0,%xmm2
265238405Sjkim	pxor	%xmm0,%xmm3
266290207Sjkim	pxor	%xmm0,%xmm4
267238405Sjkim.byte	102,15,56,220,209
268290207Sjkim	leaq	32(%rcx,%rax,1),%rcx
269290207Sjkim	negq	%rax
270238405Sjkim.byte	102,15,56,220,217
271238405Sjkim	pxor	%xmm0,%xmm5
272290207Sjkim	pxor	%xmm0,%xmm6
273238405Sjkim.byte	102,15,56,220,225
274238405Sjkim	pxor	%xmm0,%xmm7
275290207Sjkim	movups	(%rcx,%rax,1),%xmm0
276290207Sjkim	addq	$16,%rax
277238405Sjkim	jmp	.Lenc_loop6_enter
278238405Sjkim.align	16
279238405Sjkim.Lenc_loop6:
280238405Sjkim.byte	102,15,56,220,209
281238405Sjkim.byte	102,15,56,220,217
282238405Sjkim.byte	102,15,56,220,225
283290207Sjkim.Lenc_loop6_enter:
284238405Sjkim.byte	102,15,56,220,233
285238405Sjkim.byte	102,15,56,220,241
286238405Sjkim.byte	102,15,56,220,249
287290207Sjkim	movups	(%rcx,%rax,1),%xmm1
288290207Sjkim	addq	$32,%rax
289238405Sjkim.byte	102,15,56,220,208
290238405Sjkim.byte	102,15,56,220,216
291238405Sjkim.byte	102,15,56,220,224
292238405Sjkim.byte	102,15,56,220,232
293238405Sjkim.byte	102,15,56,220,240
294238405Sjkim.byte	102,15,56,220,248
295290207Sjkim	movups	-16(%rcx,%rax,1),%xmm0
296238405Sjkim	jnz	.Lenc_loop6
297238405Sjkim
298238405Sjkim.byte	102,15,56,220,209
299238405Sjkim.byte	102,15,56,220,217
300238405Sjkim.byte	102,15,56,220,225
301238405Sjkim.byte	102,15,56,220,233
302238405Sjkim.byte	102,15,56,220,241
303238405Sjkim.byte	102,15,56,220,249
304238405Sjkim.byte	102,15,56,221,208
305238405Sjkim.byte	102,15,56,221,216
306238405Sjkim.byte	102,15,56,221,224
307238405Sjkim.byte	102,15,56,221,232
308238405Sjkim.byte	102,15,56,221,240
309238405Sjkim.byte	102,15,56,221,248
310238405Sjkim	.byte	0xf3,0xc3
311238405Sjkim.size	_aesni_encrypt6,.-_aesni_encrypt6
312238405Sjkim.type	_aesni_decrypt6,@function
313238405Sjkim.align	16
314238405Sjkim_aesni_decrypt6:
315238405Sjkim	movups	(%rcx),%xmm0
316290207Sjkim	shll	$4,%eax
317238405Sjkim	movups	16(%rcx),%xmm1
318238405Sjkim	xorps	%xmm0,%xmm2
319238405Sjkim	pxor	%xmm0,%xmm3
320290207Sjkim	pxor	%xmm0,%xmm4
321238405Sjkim.byte	102,15,56,222,209
322290207Sjkim	leaq	32(%rcx,%rax,1),%rcx
323290207Sjkim	negq	%rax
324238405Sjkim.byte	102,15,56,222,217
325238405Sjkim	pxor	%xmm0,%xmm5
326290207Sjkim	pxor	%xmm0,%xmm6
327238405Sjkim.byte	102,15,56,222,225
328238405Sjkim	pxor	%xmm0,%xmm7
329290207Sjkim	movups	(%rcx,%rax,1),%xmm0
330290207Sjkim	addq	$16,%rax
331238405Sjkim	jmp	.Ldec_loop6_enter
332238405Sjkim.align	16
333238405Sjkim.Ldec_loop6:
334238405Sjkim.byte	102,15,56,222,209
335238405Sjkim.byte	102,15,56,222,217
336238405Sjkim.byte	102,15,56,222,225
337290207Sjkim.Ldec_loop6_enter:
338238405Sjkim.byte	102,15,56,222,233
339238405Sjkim.byte	102,15,56,222,241
340238405Sjkim.byte	102,15,56,222,249
341290207Sjkim	movups	(%rcx,%rax,1),%xmm1
342290207Sjkim	addq	$32,%rax
343238405Sjkim.byte	102,15,56,222,208
344238405Sjkim.byte	102,15,56,222,216
345238405Sjkim.byte	102,15,56,222,224
346238405Sjkim.byte	102,15,56,222,232
347238405Sjkim.byte	102,15,56,222,240
348238405Sjkim.byte	102,15,56,222,248
349290207Sjkim	movups	-16(%rcx,%rax,1),%xmm0
350238405Sjkim	jnz	.Ldec_loop6
351238405Sjkim
352238405Sjkim.byte	102,15,56,222,209
353238405Sjkim.byte	102,15,56,222,217
354238405Sjkim.byte	102,15,56,222,225
355238405Sjkim.byte	102,15,56,222,233
356238405Sjkim.byte	102,15,56,222,241
357238405Sjkim.byte	102,15,56,222,249
358238405Sjkim.byte	102,15,56,223,208
359238405Sjkim.byte	102,15,56,223,216
360238405Sjkim.byte	102,15,56,223,224
361238405Sjkim.byte	102,15,56,223,232
362238405Sjkim.byte	102,15,56,223,240
363238405Sjkim.byte	102,15,56,223,248
364238405Sjkim	.byte	0xf3,0xc3
365238405Sjkim.size	_aesni_decrypt6,.-_aesni_decrypt6
366238405Sjkim.type	_aesni_encrypt8,@function
367238405Sjkim.align	16
368238405Sjkim_aesni_encrypt8:
369238405Sjkim	movups	(%rcx),%xmm0
370290207Sjkim	shll	$4,%eax
371238405Sjkim	movups	16(%rcx),%xmm1
372238405Sjkim	xorps	%xmm0,%xmm2
373238405Sjkim	xorps	%xmm0,%xmm3
374238405Sjkim	pxor	%xmm0,%xmm4
375238405Sjkim	pxor	%xmm0,%xmm5
376238405Sjkim	pxor	%xmm0,%xmm6
377290207Sjkim	leaq	32(%rcx,%rax,1),%rcx
378290207Sjkim	negq	%rax
379290207Sjkim.byte	102,15,56,220,209
380238405Sjkim	pxor	%xmm0,%xmm7
381238405Sjkim	pxor	%xmm0,%xmm8
382290207Sjkim.byte	102,15,56,220,217
383238405Sjkim	pxor	%xmm0,%xmm9
384290207Sjkim	movups	(%rcx,%rax,1),%xmm0
385290207Sjkim	addq	$16,%rax
386290207Sjkim	jmp	.Lenc_loop8_inner
387238405Sjkim.align	16
388238405Sjkim.Lenc_loop8:
389238405Sjkim.byte	102,15,56,220,209
390238405Sjkim.byte	102,15,56,220,217
391290207Sjkim.Lenc_loop8_inner:
392238405Sjkim.byte	102,15,56,220,225
393238405Sjkim.byte	102,15,56,220,233
394238405Sjkim.byte	102,15,56,220,241
395238405Sjkim.byte	102,15,56,220,249
396238405Sjkim.byte	102,68,15,56,220,193
397238405Sjkim.byte	102,68,15,56,220,201
398238405Sjkim.Lenc_loop8_enter:
399290207Sjkim	movups	(%rcx,%rax,1),%xmm1
400290207Sjkim	addq	$32,%rax
401238405Sjkim.byte	102,15,56,220,208
402238405Sjkim.byte	102,15,56,220,216
403238405Sjkim.byte	102,15,56,220,224
404238405Sjkim.byte	102,15,56,220,232
405238405Sjkim.byte	102,15,56,220,240
406238405Sjkim.byte	102,15,56,220,248
407238405Sjkim.byte	102,68,15,56,220,192
408238405Sjkim.byte	102,68,15,56,220,200
409290207Sjkim	movups	-16(%rcx,%rax,1),%xmm0
410238405Sjkim	jnz	.Lenc_loop8
411238405Sjkim
412238405Sjkim.byte	102,15,56,220,209
413238405Sjkim.byte	102,15,56,220,217
414238405Sjkim.byte	102,15,56,220,225
415238405Sjkim.byte	102,15,56,220,233
416238405Sjkim.byte	102,15,56,220,241
417238405Sjkim.byte	102,15,56,220,249
418238405Sjkim.byte	102,68,15,56,220,193
419238405Sjkim.byte	102,68,15,56,220,201
420238405Sjkim.byte	102,15,56,221,208
421238405Sjkim.byte	102,15,56,221,216
422238405Sjkim.byte	102,15,56,221,224
423238405Sjkim.byte	102,15,56,221,232
424238405Sjkim.byte	102,15,56,221,240
425238405Sjkim.byte	102,15,56,221,248
426238405Sjkim.byte	102,68,15,56,221,192
427238405Sjkim.byte	102,68,15,56,221,200
428238405Sjkim	.byte	0xf3,0xc3
429238405Sjkim.size	_aesni_encrypt8,.-_aesni_encrypt8
430238405Sjkim.type	_aesni_decrypt8,@function
431238405Sjkim.align	16
432238405Sjkim_aesni_decrypt8:
433238405Sjkim	movups	(%rcx),%xmm0
434290207Sjkim	shll	$4,%eax
435238405Sjkim	movups	16(%rcx),%xmm1
436238405Sjkim	xorps	%xmm0,%xmm2
437238405Sjkim	xorps	%xmm0,%xmm3
438238405Sjkim	pxor	%xmm0,%xmm4
439238405Sjkim	pxor	%xmm0,%xmm5
440238405Sjkim	pxor	%xmm0,%xmm6
441290207Sjkim	leaq	32(%rcx,%rax,1),%rcx
442290207Sjkim	negq	%rax
443290207Sjkim.byte	102,15,56,222,209
444238405Sjkim	pxor	%xmm0,%xmm7
445238405Sjkim	pxor	%xmm0,%xmm8
446290207Sjkim.byte	102,15,56,222,217
447238405Sjkim	pxor	%xmm0,%xmm9
448290207Sjkim	movups	(%rcx,%rax,1),%xmm0
449290207Sjkim	addq	$16,%rax
450290207Sjkim	jmp	.Ldec_loop8_inner
451238405Sjkim.align	16
452238405Sjkim.Ldec_loop8:
453238405Sjkim.byte	102,15,56,222,209
454238405Sjkim.byte	102,15,56,222,217
455290207Sjkim.Ldec_loop8_inner:
456238405Sjkim.byte	102,15,56,222,225
457238405Sjkim.byte	102,15,56,222,233
458238405Sjkim.byte	102,15,56,222,241
459238405Sjkim.byte	102,15,56,222,249
460238405Sjkim.byte	102,68,15,56,222,193
461238405Sjkim.byte	102,68,15,56,222,201
462238405Sjkim.Ldec_loop8_enter:
463290207Sjkim	movups	(%rcx,%rax,1),%xmm1
464290207Sjkim	addq	$32,%rax
465238405Sjkim.byte	102,15,56,222,208
466238405Sjkim.byte	102,15,56,222,216
467238405Sjkim.byte	102,15,56,222,224
468238405Sjkim.byte	102,15,56,222,232
469238405Sjkim.byte	102,15,56,222,240
470238405Sjkim.byte	102,15,56,222,248
471238405Sjkim.byte	102,68,15,56,222,192
472238405Sjkim.byte	102,68,15,56,222,200
473290207Sjkim	movups	-16(%rcx,%rax,1),%xmm0
474238405Sjkim	jnz	.Ldec_loop8
475238405Sjkim
476238405Sjkim.byte	102,15,56,222,209
477238405Sjkim.byte	102,15,56,222,217
478238405Sjkim.byte	102,15,56,222,225
479238405Sjkim.byte	102,15,56,222,233
480238405Sjkim.byte	102,15,56,222,241
481238405Sjkim.byte	102,15,56,222,249
482238405Sjkim.byte	102,68,15,56,222,193
483238405Sjkim.byte	102,68,15,56,222,201
484238405Sjkim.byte	102,15,56,223,208
485238405Sjkim.byte	102,15,56,223,216
486238405Sjkim.byte	102,15,56,223,224
487238405Sjkim.byte	102,15,56,223,232
488238405Sjkim.byte	102,15,56,223,240
489238405Sjkim.byte	102,15,56,223,248
490238405Sjkim.byte	102,68,15,56,223,192
491238405Sjkim.byte	102,68,15,56,223,200
492238405Sjkim	.byte	0xf3,0xc3
493238405Sjkim.size	_aesni_decrypt8,.-_aesni_decrypt8
494238405Sjkim.globl	aesni_ecb_encrypt
495238405Sjkim.type	aesni_ecb_encrypt,@function
496238405Sjkim.align	16
497238405Sjkimaesni_ecb_encrypt:
498238405Sjkim	andq	$-16,%rdx
499238405Sjkim	jz	.Lecb_ret
500238405Sjkim
501238405Sjkim	movl	240(%rcx),%eax
502238405Sjkim	movups	(%rcx),%xmm0
503238405Sjkim	movq	%rcx,%r11
504238405Sjkim	movl	%eax,%r10d
505238405Sjkim	testl	%r8d,%r8d
506238405Sjkim	jz	.Lecb_decrypt
507238405Sjkim
508296279Sjkim	cmpq	$0x80,%rdx
509238405Sjkim	jb	.Lecb_enc_tail
510238405Sjkim
511238405Sjkim	movdqu	(%rdi),%xmm2
512238405Sjkim	movdqu	16(%rdi),%xmm3
513238405Sjkim	movdqu	32(%rdi),%xmm4
514238405Sjkim	movdqu	48(%rdi),%xmm5
515238405Sjkim	movdqu	64(%rdi),%xmm6
516238405Sjkim	movdqu	80(%rdi),%xmm7
517238405Sjkim	movdqu	96(%rdi),%xmm8
518238405Sjkim	movdqu	112(%rdi),%xmm9
519238405Sjkim	leaq	128(%rdi),%rdi
520296279Sjkim	subq	$0x80,%rdx
521238405Sjkim	jmp	.Lecb_enc_loop8_enter
522238405Sjkim.align	16
523238405Sjkim.Lecb_enc_loop8:
524238405Sjkim	movups	%xmm2,(%rsi)
525238405Sjkim	movq	%r11,%rcx
526238405Sjkim	movdqu	(%rdi),%xmm2
527238405Sjkim	movl	%r10d,%eax
528238405Sjkim	movups	%xmm3,16(%rsi)
529238405Sjkim	movdqu	16(%rdi),%xmm3
530238405Sjkim	movups	%xmm4,32(%rsi)
531238405Sjkim	movdqu	32(%rdi),%xmm4
532238405Sjkim	movups	%xmm5,48(%rsi)
533238405Sjkim	movdqu	48(%rdi),%xmm5
534238405Sjkim	movups	%xmm6,64(%rsi)
535238405Sjkim	movdqu	64(%rdi),%xmm6
536238405Sjkim	movups	%xmm7,80(%rsi)
537238405Sjkim	movdqu	80(%rdi),%xmm7
538238405Sjkim	movups	%xmm8,96(%rsi)
539238405Sjkim	movdqu	96(%rdi),%xmm8
540238405Sjkim	movups	%xmm9,112(%rsi)
541238405Sjkim	leaq	128(%rsi),%rsi
542238405Sjkim	movdqu	112(%rdi),%xmm9
543238405Sjkim	leaq	128(%rdi),%rdi
544238405Sjkim.Lecb_enc_loop8_enter:
545238405Sjkim
546238405Sjkim	call	_aesni_encrypt8
547238405Sjkim
548296279Sjkim	subq	$0x80,%rdx
549238405Sjkim	jnc	.Lecb_enc_loop8
550238405Sjkim
551238405Sjkim	movups	%xmm2,(%rsi)
552238405Sjkim	movq	%r11,%rcx
553238405Sjkim	movups	%xmm3,16(%rsi)
554238405Sjkim	movl	%r10d,%eax
555238405Sjkim	movups	%xmm4,32(%rsi)
556238405Sjkim	movups	%xmm5,48(%rsi)
557238405Sjkim	movups	%xmm6,64(%rsi)
558238405Sjkim	movups	%xmm7,80(%rsi)
559238405Sjkim	movups	%xmm8,96(%rsi)
560238405Sjkim	movups	%xmm9,112(%rsi)
561238405Sjkim	leaq	128(%rsi),%rsi
562296279Sjkim	addq	$0x80,%rdx
563238405Sjkim	jz	.Lecb_ret
564238405Sjkim
565238405Sjkim.Lecb_enc_tail:
566238405Sjkim	movups	(%rdi),%xmm2
567296279Sjkim	cmpq	$0x20,%rdx
568238405Sjkim	jb	.Lecb_enc_one
569238405Sjkim	movups	16(%rdi),%xmm3
570238405Sjkim	je	.Lecb_enc_two
571238405Sjkim	movups	32(%rdi),%xmm4
572296279Sjkim	cmpq	$0x40,%rdx
573238405Sjkim	jb	.Lecb_enc_three
574238405Sjkim	movups	48(%rdi),%xmm5
575238405Sjkim	je	.Lecb_enc_four
576238405Sjkim	movups	64(%rdi),%xmm6
577296279Sjkim	cmpq	$0x60,%rdx
578238405Sjkim	jb	.Lecb_enc_five
579238405Sjkim	movups	80(%rdi),%xmm7
580238405Sjkim	je	.Lecb_enc_six
581238405Sjkim	movdqu	96(%rdi),%xmm8
582290207Sjkim	xorps	%xmm9,%xmm9
583238405Sjkim	call	_aesni_encrypt8
584238405Sjkim	movups	%xmm2,(%rsi)
585238405Sjkim	movups	%xmm3,16(%rsi)
586238405Sjkim	movups	%xmm4,32(%rsi)
587238405Sjkim	movups	%xmm5,48(%rsi)
588238405Sjkim	movups	%xmm6,64(%rsi)
589238405Sjkim	movups	%xmm7,80(%rsi)
590238405Sjkim	movups	%xmm8,96(%rsi)
591238405Sjkim	jmp	.Lecb_ret
592238405Sjkim.align	16
593238405Sjkim.Lecb_enc_one:
594238405Sjkim	movups	(%rcx),%xmm0
595238405Sjkim	movups	16(%rcx),%xmm1
596238405Sjkim	leaq	32(%rcx),%rcx
597238405Sjkim	xorps	%xmm0,%xmm2
598238405Sjkim.Loop_enc1_3:
599238405Sjkim.byte	102,15,56,220,209
600238405Sjkim	decl	%eax
601238405Sjkim	movups	(%rcx),%xmm1
602238405Sjkim	leaq	16(%rcx),%rcx
603290207Sjkim	jnz	.Loop_enc1_3
604238405Sjkim.byte	102,15,56,221,209
605238405Sjkim	movups	%xmm2,(%rsi)
606238405Sjkim	jmp	.Lecb_ret
607238405Sjkim.align	16
608238405Sjkim.Lecb_enc_two:
609290207Sjkim	call	_aesni_encrypt2
610238405Sjkim	movups	%xmm2,(%rsi)
611238405Sjkim	movups	%xmm3,16(%rsi)
612238405Sjkim	jmp	.Lecb_ret
613238405Sjkim.align	16
614238405Sjkim.Lecb_enc_three:
615238405Sjkim	call	_aesni_encrypt3
616238405Sjkim	movups	%xmm2,(%rsi)
617238405Sjkim	movups	%xmm3,16(%rsi)
618238405Sjkim	movups	%xmm4,32(%rsi)
619238405Sjkim	jmp	.Lecb_ret
620238405Sjkim.align	16
621238405Sjkim.Lecb_enc_four:
622238405Sjkim	call	_aesni_encrypt4
623238405Sjkim	movups	%xmm2,(%rsi)
624238405Sjkim	movups	%xmm3,16(%rsi)
625238405Sjkim	movups	%xmm4,32(%rsi)
626238405Sjkim	movups	%xmm5,48(%rsi)
627238405Sjkim	jmp	.Lecb_ret
628238405Sjkim.align	16
629238405Sjkim.Lecb_enc_five:
630238405Sjkim	xorps	%xmm7,%xmm7
631238405Sjkim	call	_aesni_encrypt6
632238405Sjkim	movups	%xmm2,(%rsi)
633238405Sjkim	movups	%xmm3,16(%rsi)
634238405Sjkim	movups	%xmm4,32(%rsi)
635238405Sjkim	movups	%xmm5,48(%rsi)
636238405Sjkim	movups	%xmm6,64(%rsi)
637238405Sjkim	jmp	.Lecb_ret
638238405Sjkim.align	16
639238405Sjkim.Lecb_enc_six:
640238405Sjkim	call	_aesni_encrypt6
641238405Sjkim	movups	%xmm2,(%rsi)
642238405Sjkim	movups	%xmm3,16(%rsi)
643238405Sjkim	movups	%xmm4,32(%rsi)
644238405Sjkim	movups	%xmm5,48(%rsi)
645238405Sjkim	movups	%xmm6,64(%rsi)
646238405Sjkim	movups	%xmm7,80(%rsi)
647238405Sjkim	jmp	.Lecb_ret
648238405Sjkim
649238405Sjkim.align	16
650238405Sjkim.Lecb_decrypt:
651296279Sjkim	cmpq	$0x80,%rdx
652238405Sjkim	jb	.Lecb_dec_tail
653238405Sjkim
654238405Sjkim	movdqu	(%rdi),%xmm2
655238405Sjkim	movdqu	16(%rdi),%xmm3
656238405Sjkim	movdqu	32(%rdi),%xmm4
657238405Sjkim	movdqu	48(%rdi),%xmm5
658238405Sjkim	movdqu	64(%rdi),%xmm6
659238405Sjkim	movdqu	80(%rdi),%xmm7
660238405Sjkim	movdqu	96(%rdi),%xmm8
661238405Sjkim	movdqu	112(%rdi),%xmm9
662238405Sjkim	leaq	128(%rdi),%rdi
663296279Sjkim	subq	$0x80,%rdx
664238405Sjkim	jmp	.Lecb_dec_loop8_enter
665238405Sjkim.align	16
666238405Sjkim.Lecb_dec_loop8:
667238405Sjkim	movups	%xmm2,(%rsi)
668238405Sjkim	movq	%r11,%rcx
669238405Sjkim	movdqu	(%rdi),%xmm2
670238405Sjkim	movl	%r10d,%eax
671238405Sjkim	movups	%xmm3,16(%rsi)
672238405Sjkim	movdqu	16(%rdi),%xmm3
673238405Sjkim	movups	%xmm4,32(%rsi)
674238405Sjkim	movdqu	32(%rdi),%xmm4
675238405Sjkim	movups	%xmm5,48(%rsi)
676238405Sjkim	movdqu	48(%rdi),%xmm5
677238405Sjkim	movups	%xmm6,64(%rsi)
678238405Sjkim	movdqu	64(%rdi),%xmm6
679238405Sjkim	movups	%xmm7,80(%rsi)
680238405Sjkim	movdqu	80(%rdi),%xmm7
681238405Sjkim	movups	%xmm8,96(%rsi)
682238405Sjkim	movdqu	96(%rdi),%xmm8
683238405Sjkim	movups	%xmm9,112(%rsi)
684238405Sjkim	leaq	128(%rsi),%rsi
685238405Sjkim	movdqu	112(%rdi),%xmm9
686238405Sjkim	leaq	128(%rdi),%rdi
687238405Sjkim.Lecb_dec_loop8_enter:
688238405Sjkim
689238405Sjkim	call	_aesni_decrypt8
690238405Sjkim
691238405Sjkim	movups	(%r11),%xmm0
692296279Sjkim	subq	$0x80,%rdx
693238405Sjkim	jnc	.Lecb_dec_loop8
694238405Sjkim
695238405Sjkim	movups	%xmm2,(%rsi)
696290207Sjkim	pxor	%xmm2,%xmm2
697238405Sjkim	movq	%r11,%rcx
698238405Sjkim	movups	%xmm3,16(%rsi)
699290207Sjkim	pxor	%xmm3,%xmm3
700238405Sjkim	movl	%r10d,%eax
701238405Sjkim	movups	%xmm4,32(%rsi)
702290207Sjkim	pxor	%xmm4,%xmm4
703238405Sjkim	movups	%xmm5,48(%rsi)
704290207Sjkim	pxor	%xmm5,%xmm5
705238405Sjkim	movups	%xmm6,64(%rsi)
706290207Sjkim	pxor	%xmm6,%xmm6
707238405Sjkim	movups	%xmm7,80(%rsi)
708290207Sjkim	pxor	%xmm7,%xmm7
709238405Sjkim	movups	%xmm8,96(%rsi)
710290207Sjkim	pxor	%xmm8,%xmm8
711238405Sjkim	movups	%xmm9,112(%rsi)
712290207Sjkim	pxor	%xmm9,%xmm9
713238405Sjkim	leaq	128(%rsi),%rsi
714296279Sjkim	addq	$0x80,%rdx
715238405Sjkim	jz	.Lecb_ret
716238405Sjkim
717238405Sjkim.Lecb_dec_tail:
718238405Sjkim	movups	(%rdi),%xmm2
719296279Sjkim	cmpq	$0x20,%rdx
720238405Sjkim	jb	.Lecb_dec_one
721238405Sjkim	movups	16(%rdi),%xmm3
722238405Sjkim	je	.Lecb_dec_two
723238405Sjkim	movups	32(%rdi),%xmm4
724296279Sjkim	cmpq	$0x40,%rdx
725238405Sjkim	jb	.Lecb_dec_three
726238405Sjkim	movups	48(%rdi),%xmm5
727238405Sjkim	je	.Lecb_dec_four
728238405Sjkim	movups	64(%rdi),%xmm6
729296279Sjkim	cmpq	$0x60,%rdx
730238405Sjkim	jb	.Lecb_dec_five
731238405Sjkim	movups	80(%rdi),%xmm7
732238405Sjkim	je	.Lecb_dec_six
733238405Sjkim	movups	96(%rdi),%xmm8
734238405Sjkim	movups	(%rcx),%xmm0
735290207Sjkim	xorps	%xmm9,%xmm9
736238405Sjkim	call	_aesni_decrypt8
737238405Sjkim	movups	%xmm2,(%rsi)
738290207Sjkim	pxor	%xmm2,%xmm2
739238405Sjkim	movups	%xmm3,16(%rsi)
740290207Sjkim	pxor	%xmm3,%xmm3
741238405Sjkim	movups	%xmm4,32(%rsi)
742290207Sjkim	pxor	%xmm4,%xmm4
743238405Sjkim	movups	%xmm5,48(%rsi)
744290207Sjkim	pxor	%xmm5,%xmm5
745238405Sjkim	movups	%xmm6,64(%rsi)
746290207Sjkim	pxor	%xmm6,%xmm6
747238405Sjkim	movups	%xmm7,80(%rsi)
748290207Sjkim	pxor	%xmm7,%xmm7
749238405Sjkim	movups	%xmm8,96(%rsi)
750290207Sjkim	pxor	%xmm8,%xmm8
751290207Sjkim	pxor	%xmm9,%xmm9
752238405Sjkim	jmp	.Lecb_ret
753238405Sjkim.align	16
754238405Sjkim.Lecb_dec_one:
755238405Sjkim	movups	(%rcx),%xmm0
756238405Sjkim	movups	16(%rcx),%xmm1
757238405Sjkim	leaq	32(%rcx),%rcx
758238405Sjkim	xorps	%xmm0,%xmm2
759238405Sjkim.Loop_dec1_4:
760238405Sjkim.byte	102,15,56,222,209
761238405Sjkim	decl	%eax
762238405Sjkim	movups	(%rcx),%xmm1
763238405Sjkim	leaq	16(%rcx),%rcx
764290207Sjkim	jnz	.Loop_dec1_4
765238405Sjkim.byte	102,15,56,223,209
766238405Sjkim	movups	%xmm2,(%rsi)
767290207Sjkim	pxor	%xmm2,%xmm2
768238405Sjkim	jmp	.Lecb_ret
769238405Sjkim.align	16
770238405Sjkim.Lecb_dec_two:
771290207Sjkim	call	_aesni_decrypt2
772238405Sjkim	movups	%xmm2,(%rsi)
773290207Sjkim	pxor	%xmm2,%xmm2
774238405Sjkim	movups	%xmm3,16(%rsi)
775290207Sjkim	pxor	%xmm3,%xmm3
776238405Sjkim	jmp	.Lecb_ret
777238405Sjkim.align	16
778238405Sjkim.Lecb_dec_three:
779238405Sjkim	call	_aesni_decrypt3
780238405Sjkim	movups	%xmm2,(%rsi)
781290207Sjkim	pxor	%xmm2,%xmm2
782238405Sjkim	movups	%xmm3,16(%rsi)
783290207Sjkim	pxor	%xmm3,%xmm3
784238405Sjkim	movups	%xmm4,32(%rsi)
785290207Sjkim	pxor	%xmm4,%xmm4
786238405Sjkim	jmp	.Lecb_ret
787238405Sjkim.align	16
788238405Sjkim.Lecb_dec_four:
789238405Sjkim	call	_aesni_decrypt4
790238405Sjkim	movups	%xmm2,(%rsi)
791290207Sjkim	pxor	%xmm2,%xmm2
792238405Sjkim	movups	%xmm3,16(%rsi)
793290207Sjkim	pxor	%xmm3,%xmm3
794238405Sjkim	movups	%xmm4,32(%rsi)
795290207Sjkim	pxor	%xmm4,%xmm4
796238405Sjkim	movups	%xmm5,48(%rsi)
797290207Sjkim	pxor	%xmm5,%xmm5
798238405Sjkim	jmp	.Lecb_ret
799238405Sjkim.align	16
800238405Sjkim.Lecb_dec_five:
801238405Sjkim	xorps	%xmm7,%xmm7
802238405Sjkim	call	_aesni_decrypt6
803238405Sjkim	movups	%xmm2,(%rsi)
804290207Sjkim	pxor	%xmm2,%xmm2
805238405Sjkim	movups	%xmm3,16(%rsi)
806290207Sjkim	pxor	%xmm3,%xmm3
807238405Sjkim	movups	%xmm4,32(%rsi)
808290207Sjkim	pxor	%xmm4,%xmm4
809238405Sjkim	movups	%xmm5,48(%rsi)
810290207Sjkim	pxor	%xmm5,%xmm5
811238405Sjkim	movups	%xmm6,64(%rsi)
812290207Sjkim	pxor	%xmm6,%xmm6
813290207Sjkim	pxor	%xmm7,%xmm7
814238405Sjkim	jmp	.Lecb_ret
815238405Sjkim.align	16
816238405Sjkim.Lecb_dec_six:
817238405Sjkim	call	_aesni_decrypt6
818238405Sjkim	movups	%xmm2,(%rsi)
819290207Sjkim	pxor	%xmm2,%xmm2
820238405Sjkim	movups	%xmm3,16(%rsi)
821290207Sjkim	pxor	%xmm3,%xmm3
822238405Sjkim	movups	%xmm4,32(%rsi)
823290207Sjkim	pxor	%xmm4,%xmm4
824238405Sjkim	movups	%xmm5,48(%rsi)
825290207Sjkim	pxor	%xmm5,%xmm5
826238405Sjkim	movups	%xmm6,64(%rsi)
827290207Sjkim	pxor	%xmm6,%xmm6
828238405Sjkim	movups	%xmm7,80(%rsi)
829290207Sjkim	pxor	%xmm7,%xmm7
830238405Sjkim
831238405Sjkim.Lecb_ret:
832290207Sjkim	xorps	%xmm0,%xmm0
833290207Sjkim	pxor	%xmm1,%xmm1
834238405Sjkim	.byte	0xf3,0xc3
835238405Sjkim.size	aesni_ecb_encrypt,.-aesni_ecb_encrypt
836238405Sjkim.globl	aesni_ccm64_encrypt_blocks
837238405Sjkim.type	aesni_ccm64_encrypt_blocks,@function
838238405Sjkim.align	16
839238405Sjkimaesni_ccm64_encrypt_blocks:
840238405Sjkim	movl	240(%rcx),%eax
841290207Sjkim	movdqu	(%r8),%xmm6
842290207Sjkim	movdqa	.Lincrement64(%rip),%xmm9
843238405Sjkim	movdqa	.Lbswap_mask(%rip),%xmm7
844238405Sjkim
845290207Sjkim	shll	$4,%eax
846290207Sjkim	movl	$16,%r10d
847238405Sjkim	leaq	0(%rcx),%r11
848238405Sjkim	movdqu	(%r9),%xmm3
849290207Sjkim	movdqa	%xmm6,%xmm2
850290207Sjkim	leaq	32(%rcx,%rax,1),%rcx
851290207Sjkim.byte	102,15,56,0,247
852290207Sjkim	subq	%rax,%r10
853238405Sjkim	jmp	.Lccm64_enc_outer
854238405Sjkim.align	16
855238405Sjkim.Lccm64_enc_outer:
856238405Sjkim	movups	(%r11),%xmm0
857290207Sjkim	movq	%r10,%rax
858238405Sjkim	movups	(%rdi),%xmm8
859238405Sjkim
860238405Sjkim	xorps	%xmm0,%xmm2
861238405Sjkim	movups	16(%r11),%xmm1
862238405Sjkim	xorps	%xmm8,%xmm0
863238405Sjkim	xorps	%xmm0,%xmm3
864290207Sjkim	movups	32(%r11),%xmm0
865238405Sjkim
866238405Sjkim.Lccm64_enc2_loop:
867238405Sjkim.byte	102,15,56,220,209
868238405Sjkim.byte	102,15,56,220,217
869290207Sjkim	movups	(%rcx,%rax,1),%xmm1
870290207Sjkim	addq	$32,%rax
871238405Sjkim.byte	102,15,56,220,208
872238405Sjkim.byte	102,15,56,220,216
873290207Sjkim	movups	-16(%rcx,%rax,1),%xmm0
874238405Sjkim	jnz	.Lccm64_enc2_loop
875238405Sjkim.byte	102,15,56,220,209
876238405Sjkim.byte	102,15,56,220,217
877290207Sjkim	paddq	%xmm9,%xmm6
878290207Sjkim	decq	%rdx
879238405Sjkim.byte	102,15,56,221,208
880238405Sjkim.byte	102,15,56,221,216
881238405Sjkim
882238405Sjkim	leaq	16(%rdi),%rdi
883238405Sjkim	xorps	%xmm2,%xmm8
884290207Sjkim	movdqa	%xmm6,%xmm2
885238405Sjkim	movups	%xmm8,(%rsi)
886290207Sjkim.byte	102,15,56,0,215
887238405Sjkim	leaq	16(%rsi),%rsi
888238405Sjkim	jnz	.Lccm64_enc_outer
889238405Sjkim
890290207Sjkim	pxor	%xmm0,%xmm0
891290207Sjkim	pxor	%xmm1,%xmm1
892290207Sjkim	pxor	%xmm2,%xmm2
893238405Sjkim	movups	%xmm3,(%r9)
894290207Sjkim	pxor	%xmm3,%xmm3
895290207Sjkim	pxor	%xmm8,%xmm8
896290207Sjkim	pxor	%xmm6,%xmm6
897238405Sjkim	.byte	0xf3,0xc3
898238405Sjkim.size	aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks
899238405Sjkim.globl	aesni_ccm64_decrypt_blocks
900238405Sjkim.type	aesni_ccm64_decrypt_blocks,@function
901238405Sjkim.align	16
902238405Sjkimaesni_ccm64_decrypt_blocks:
903238405Sjkim	movl	240(%rcx),%eax
904290207Sjkim	movups	(%r8),%xmm6
905238405Sjkim	movdqu	(%r9),%xmm3
906290207Sjkim	movdqa	.Lincrement64(%rip),%xmm9
907238405Sjkim	movdqa	.Lbswap_mask(%rip),%xmm7
908238405Sjkim
909290207Sjkim	movaps	%xmm6,%xmm2
910238405Sjkim	movl	%eax,%r10d
911238405Sjkim	movq	%rcx,%r11
912290207Sjkim.byte	102,15,56,0,247
913238405Sjkim	movups	(%rcx),%xmm0
914238405Sjkim	movups	16(%rcx),%xmm1
915238405Sjkim	leaq	32(%rcx),%rcx
916238405Sjkim	xorps	%xmm0,%xmm2
917238405Sjkim.Loop_enc1_5:
918238405Sjkim.byte	102,15,56,220,209
919238405Sjkim	decl	%eax
920238405Sjkim	movups	(%rcx),%xmm1
921238405Sjkim	leaq	16(%rcx),%rcx
922290207Sjkim	jnz	.Loop_enc1_5
923238405Sjkim.byte	102,15,56,221,209
924290207Sjkim	shll	$4,%r10d
925290207Sjkim	movl	$16,%eax
926238405Sjkim	movups	(%rdi),%xmm8
927290207Sjkim	paddq	%xmm9,%xmm6
928238405Sjkim	leaq	16(%rdi),%rdi
929290207Sjkim	subq	%r10,%rax
930290207Sjkim	leaq	32(%r11,%r10,1),%rcx
931290207Sjkim	movq	%rax,%r10
932238405Sjkim	jmp	.Lccm64_dec_outer
933238405Sjkim.align	16
934238405Sjkim.Lccm64_dec_outer:
935238405Sjkim	xorps	%xmm2,%xmm8
936290207Sjkim	movdqa	%xmm6,%xmm2
937238405Sjkim	movups	%xmm8,(%rsi)
938238405Sjkim	leaq	16(%rsi),%rsi
939238405Sjkim.byte	102,15,56,0,215
940238405Sjkim
941238405Sjkim	subq	$1,%rdx
942238405Sjkim	jz	.Lccm64_dec_break
943238405Sjkim
944238405Sjkim	movups	(%r11),%xmm0
945290207Sjkim	movq	%r10,%rax
946238405Sjkim	movups	16(%r11),%xmm1
947238405Sjkim	xorps	%xmm0,%xmm8
948238405Sjkim	xorps	%xmm0,%xmm2
949238405Sjkim	xorps	%xmm8,%xmm3
950290207Sjkim	movups	32(%r11),%xmm0
951290207Sjkim	jmp	.Lccm64_dec2_loop
952290207Sjkim.align	16
953238405Sjkim.Lccm64_dec2_loop:
954238405Sjkim.byte	102,15,56,220,209
955238405Sjkim.byte	102,15,56,220,217
956290207Sjkim	movups	(%rcx,%rax,1),%xmm1
957290207Sjkim	addq	$32,%rax
958238405Sjkim.byte	102,15,56,220,208
959238405Sjkim.byte	102,15,56,220,216
960290207Sjkim	movups	-16(%rcx,%rax,1),%xmm0
961238405Sjkim	jnz	.Lccm64_dec2_loop
962238405Sjkim	movups	(%rdi),%xmm8
963290207Sjkim	paddq	%xmm9,%xmm6
964238405Sjkim.byte	102,15,56,220,209
965238405Sjkim.byte	102,15,56,220,217
966238405Sjkim.byte	102,15,56,221,208
967238405Sjkim.byte	102,15,56,221,216
968290207Sjkim	leaq	16(%rdi),%rdi
969238405Sjkim	jmp	.Lccm64_dec_outer
970238405Sjkim
971238405Sjkim.align	16
972238405Sjkim.Lccm64_dec_break:
973238405Sjkim
974290207Sjkim	movl	240(%r11),%eax
975238405Sjkim	movups	(%r11),%xmm0
976238405Sjkim	movups	16(%r11),%xmm1
977238405Sjkim	xorps	%xmm0,%xmm8
978238405Sjkim	leaq	32(%r11),%r11
979238405Sjkim	xorps	%xmm8,%xmm3
980238405Sjkim.Loop_enc1_6:
981238405Sjkim.byte	102,15,56,220,217
982238405Sjkim	decl	%eax
983238405Sjkim	movups	(%r11),%xmm1
984238405Sjkim	leaq	16(%r11),%r11
985290207Sjkim	jnz	.Loop_enc1_6
986238405Sjkim.byte	102,15,56,221,217
987290207Sjkim	pxor	%xmm0,%xmm0
988290207Sjkim	pxor	%xmm1,%xmm1
989290207Sjkim	pxor	%xmm2,%xmm2
990238405Sjkim	movups	%xmm3,(%r9)
991290207Sjkim	pxor	%xmm3,%xmm3
992290207Sjkim	pxor	%xmm8,%xmm8
993290207Sjkim	pxor	%xmm6,%xmm6
994238405Sjkim	.byte	0xf3,0xc3
995238405Sjkim.size	aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks
996238405Sjkim.globl	aesni_ctr32_encrypt_blocks
997238405Sjkim.type	aesni_ctr32_encrypt_blocks,@function
998238405Sjkim.align	16
999238405Sjkimaesni_ctr32_encrypt_blocks:
1000238405Sjkim	cmpq	$1,%rdx
1001290207Sjkim	jne	.Lctr32_bulk
1002238405Sjkim
1003238405Sjkim
1004290207Sjkim
1005290207Sjkim	movups	(%r8),%xmm2
1006290207Sjkim	movups	(%rdi),%xmm3
1007290207Sjkim	movl	240(%rcx),%edx
1008290207Sjkim	movups	(%rcx),%xmm0
1009290207Sjkim	movups	16(%rcx),%xmm1
1010290207Sjkim	leaq	32(%rcx),%rcx
1011290207Sjkim	xorps	%xmm0,%xmm2
1012290207Sjkim.Loop_enc1_7:
1013290207Sjkim.byte	102,15,56,220,209
1014290207Sjkim	decl	%edx
1015290207Sjkim	movups	(%rcx),%xmm1
1016290207Sjkim	leaq	16(%rcx),%rcx
1017290207Sjkim	jnz	.Loop_enc1_7
1018290207Sjkim.byte	102,15,56,221,209
1019290207Sjkim	pxor	%xmm0,%xmm0
1020290207Sjkim	pxor	%xmm1,%xmm1
1021290207Sjkim	xorps	%xmm3,%xmm2
1022290207Sjkim	pxor	%xmm3,%xmm3
1023290207Sjkim	movups	%xmm2,(%rsi)
1024290207Sjkim	xorps	%xmm2,%xmm2
1025290207Sjkim	jmp	.Lctr32_epilogue
1026290207Sjkim
1027290207Sjkim.align	16
1028290207Sjkim.Lctr32_bulk:
1029290207Sjkim	leaq	(%rsp),%rax
1030290207Sjkim	pushq	%rbp
1031290207Sjkim	subq	$128,%rsp
1032290207Sjkim	andq	$-16,%rsp
1033290207Sjkim	leaq	-8(%rax),%rbp
1034290207Sjkim
1035290207Sjkim
1036290207Sjkim
1037290207Sjkim
1038290207Sjkim	movdqu	(%r8),%xmm2
1039290207Sjkim	movdqu	(%rcx),%xmm0
1040290207Sjkim	movl	12(%r8),%r8d
1041290207Sjkim	pxor	%xmm0,%xmm2
1042290207Sjkim	movl	12(%rcx),%r11d
1043290207Sjkim	movdqa	%xmm2,0(%rsp)
1044290207Sjkim	bswapl	%r8d
1045290207Sjkim	movdqa	%xmm2,%xmm3
1046290207Sjkim	movdqa	%xmm2,%xmm4
1047290207Sjkim	movdqa	%xmm2,%xmm5
1048290207Sjkim	movdqa	%xmm2,64(%rsp)
1049290207Sjkim	movdqa	%xmm2,80(%rsp)
1050290207Sjkim	movdqa	%xmm2,96(%rsp)
1051290207Sjkim	movq	%rdx,%r10
1052290207Sjkim	movdqa	%xmm2,112(%rsp)
1053290207Sjkim
1054290207Sjkim	leaq	1(%r8),%rax
1055290207Sjkim	leaq	2(%r8),%rdx
1056290207Sjkim	bswapl	%eax
1057290207Sjkim	bswapl	%edx
1058290207Sjkim	xorl	%r11d,%eax
1059290207Sjkim	xorl	%r11d,%edx
1060290207Sjkim.byte	102,15,58,34,216,3
1061290207Sjkim	leaq	3(%r8),%rax
1062290207Sjkim	movdqa	%xmm3,16(%rsp)
1063290207Sjkim.byte	102,15,58,34,226,3
1064290207Sjkim	bswapl	%eax
1065290207Sjkim	movq	%r10,%rdx
1066290207Sjkim	leaq	4(%r8),%r10
1067290207Sjkim	movdqa	%xmm4,32(%rsp)
1068290207Sjkim	xorl	%r11d,%eax
1069290207Sjkim	bswapl	%r10d
1070290207Sjkim.byte	102,15,58,34,232,3
1071290207Sjkim	xorl	%r11d,%r10d
1072290207Sjkim	movdqa	%xmm5,48(%rsp)
1073290207Sjkim	leaq	5(%r8),%r9
1074290207Sjkim	movl	%r10d,64+12(%rsp)
1075290207Sjkim	bswapl	%r9d
1076290207Sjkim	leaq	6(%r8),%r10
1077238405Sjkim	movl	240(%rcx),%eax
1078290207Sjkim	xorl	%r11d,%r9d
1079238405Sjkim	bswapl	%r10d
1080290207Sjkim	movl	%r9d,80+12(%rsp)
1081290207Sjkim	xorl	%r11d,%r10d
1082290207Sjkim	leaq	7(%r8),%r9
1083290207Sjkim	movl	%r10d,96+12(%rsp)
1084290207Sjkim	bswapl	%r9d
1085290207Sjkim	movl	OPENSSL_ia32cap_P+4(%rip),%r10d
1086290207Sjkim	xorl	%r11d,%r9d
1087290207Sjkim	andl	$71303168,%r10d
1088290207Sjkim	movl	%r9d,112+12(%rsp)
1089238405Sjkim
1090290207Sjkim	movups	16(%rcx),%xmm1
1091290207Sjkim
1092290207Sjkim	movdqa	64(%rsp),%xmm6
1093290207Sjkim	movdqa	80(%rsp),%xmm7
1094290207Sjkim
1095290207Sjkim	cmpq	$8,%rdx
1096238405Sjkim	jb	.Lctr32_tail
1097290207Sjkim
1098238405Sjkim	subq	$6,%rdx
1099290207Sjkim	cmpl	$4194304,%r10d
1100290207Sjkim	je	.Lctr32_6x
1101290207Sjkim
1102290207Sjkim	leaq	128(%rcx),%rcx
1103290207Sjkim	subq	$2,%rdx
1104290207Sjkim	jmp	.Lctr32_loop8
1105290207Sjkim
1106290207Sjkim.align	16
1107290207Sjkim.Lctr32_6x:
1108290207Sjkim	shll	$4,%eax
1109290207Sjkim	movl	$48,%r10d
1110290207Sjkim	bswapl	%r11d
1111290207Sjkim	leaq	32(%rcx,%rax,1),%rcx
1112290207Sjkim	subq	%rax,%r10
1113238405Sjkim	jmp	.Lctr32_loop6
1114238405Sjkim
1115238405Sjkim.align	16
1116238405Sjkim.Lctr32_loop6:
1117290207Sjkim	addl	$6,%r8d
1118290207Sjkim	movups	-48(%rcx,%r10,1),%xmm0
1119290207Sjkim.byte	102,15,56,220,209
1120290207Sjkim	movl	%r8d,%eax
1121290207Sjkim	xorl	%r11d,%eax
1122290207Sjkim.byte	102,15,56,220,217
1123290207Sjkim.byte	0x0f,0x38,0xf1,0x44,0x24,12
1124290207Sjkim	leal	1(%r8),%eax
1125290207Sjkim.byte	102,15,56,220,225
1126290207Sjkim	xorl	%r11d,%eax
1127290207Sjkim.byte	0x0f,0x38,0xf1,0x44,0x24,28
1128290207Sjkim.byte	102,15,56,220,233
1129290207Sjkim	leal	2(%r8),%eax
1130290207Sjkim	xorl	%r11d,%eax
1131290207Sjkim.byte	102,15,56,220,241
1132290207Sjkim.byte	0x0f,0x38,0xf1,0x44,0x24,44
1133290207Sjkim	leal	3(%r8),%eax
1134290207Sjkim.byte	102,15,56,220,249
1135290207Sjkim	movups	-32(%rcx,%r10,1),%xmm1
1136290207Sjkim	xorl	%r11d,%eax
1137238405Sjkim
1138290207Sjkim.byte	102,15,56,220,208
1139290207Sjkim.byte	0x0f,0x38,0xf1,0x44,0x24,60
1140290207Sjkim	leal	4(%r8),%eax
1141290207Sjkim.byte	102,15,56,220,216
1142290207Sjkim	xorl	%r11d,%eax
1143290207Sjkim.byte	0x0f,0x38,0xf1,0x44,0x24,76
1144290207Sjkim.byte	102,15,56,220,224
1145290207Sjkim	leal	5(%r8),%eax
1146290207Sjkim	xorl	%r11d,%eax
1147290207Sjkim.byte	102,15,56,220,232
1148290207Sjkim.byte	0x0f,0x38,0xf1,0x44,0x24,92
1149290207Sjkim	movq	%r10,%rax
1150290207Sjkim.byte	102,15,56,220,240
1151290207Sjkim.byte	102,15,56,220,248
1152290207Sjkim	movups	-16(%rcx,%r10,1),%xmm0
1153238405Sjkim
1154290207Sjkim	call	.Lenc_loop6
1155238405Sjkim
1156290207Sjkim	movdqu	(%rdi),%xmm8
1157290207Sjkim	movdqu	16(%rdi),%xmm9
1158290207Sjkim	movdqu	32(%rdi),%xmm10
1159290207Sjkim	movdqu	48(%rdi),%xmm11
1160290207Sjkim	movdqu	64(%rdi),%xmm12
1161290207Sjkim	movdqu	80(%rdi),%xmm13
1162290207Sjkim	leaq	96(%rdi),%rdi
1163290207Sjkim	movups	-64(%rcx,%r10,1),%xmm1
1164290207Sjkim	pxor	%xmm2,%xmm8
1165290207Sjkim	movaps	0(%rsp),%xmm2
1166290207Sjkim	pxor	%xmm3,%xmm9
1167290207Sjkim	movaps	16(%rsp),%xmm3
1168290207Sjkim	pxor	%xmm4,%xmm10
1169290207Sjkim	movaps	32(%rsp),%xmm4
1170290207Sjkim	pxor	%xmm5,%xmm11
1171290207Sjkim	movaps	48(%rsp),%xmm5
1172290207Sjkim	pxor	%xmm6,%xmm12
1173290207Sjkim	movaps	64(%rsp),%xmm6
1174290207Sjkim	pxor	%xmm7,%xmm13
1175290207Sjkim	movaps	80(%rsp),%xmm7
1176290207Sjkim	movdqu	%xmm8,(%rsi)
1177290207Sjkim	movdqu	%xmm9,16(%rsi)
1178290207Sjkim	movdqu	%xmm10,32(%rsi)
1179290207Sjkim	movdqu	%xmm11,48(%rsi)
1180290207Sjkim	movdqu	%xmm12,64(%rsi)
1181290207Sjkim	movdqu	%xmm13,80(%rsi)
1182290207Sjkim	leaq	96(%rsi),%rsi
1183238405Sjkim
1184290207Sjkim	subq	$6,%rdx
1185290207Sjkim	jnc	.Lctr32_loop6
1186290207Sjkim
1187290207Sjkim	addq	$6,%rdx
1188290207Sjkim	jz	.Lctr32_done
1189290207Sjkim
1190290207Sjkim	leal	-48(%r10),%eax
1191290207Sjkim	leaq	-80(%rcx,%r10,1),%rcx
1192290207Sjkim	negl	%eax
1193290207Sjkim	shrl	$4,%eax
1194290207Sjkim	jmp	.Lctr32_tail
1195290207Sjkim
1196290207Sjkim.align	32
1197290207Sjkim.Lctr32_loop8:
1198290207Sjkim	addl	$8,%r8d
1199290207Sjkim	movdqa	96(%rsp),%xmm8
1200238405Sjkim.byte	102,15,56,220,209
1201290207Sjkim	movl	%r8d,%r9d
1202290207Sjkim	movdqa	112(%rsp),%xmm9
1203238405Sjkim.byte	102,15,56,220,217
1204290207Sjkim	bswapl	%r9d
1205290207Sjkim	movups	32-128(%rcx),%xmm0
1206238405Sjkim.byte	102,15,56,220,225
1207290207Sjkim	xorl	%r11d,%r9d
1208290207Sjkim	nop
1209238405Sjkim.byte	102,15,56,220,233
1210290207Sjkim	movl	%r9d,0+12(%rsp)
1211290207Sjkim	leaq	1(%r8),%r9
1212238405Sjkim.byte	102,15,56,220,241
1213238405Sjkim.byte	102,15,56,220,249
1214290207Sjkim.byte	102,68,15,56,220,193
1215290207Sjkim.byte	102,68,15,56,220,201
1216290207Sjkim	movups	48-128(%rcx),%xmm1
1217290207Sjkim	bswapl	%r9d
1218290207Sjkim.byte	102,15,56,220,208
1219290207Sjkim.byte	102,15,56,220,216
1220290207Sjkim	xorl	%r11d,%r9d
1221290207Sjkim.byte	0x66,0x90
1222290207Sjkim.byte	102,15,56,220,224
1223290207Sjkim.byte	102,15,56,220,232
1224290207Sjkim	movl	%r9d,16+12(%rsp)
1225290207Sjkim	leaq	2(%r8),%r9
1226290207Sjkim.byte	102,15,56,220,240
1227290207Sjkim.byte	102,15,56,220,248
1228290207Sjkim.byte	102,68,15,56,220,192
1229290207Sjkim.byte	102,68,15,56,220,200
1230290207Sjkim	movups	64-128(%rcx),%xmm0
1231290207Sjkim	bswapl	%r9d
1232238405Sjkim.byte	102,15,56,220,209
1233238405Sjkim.byte	102,15,56,220,217
1234290207Sjkim	xorl	%r11d,%r9d
1235290207Sjkim.byte	0x66,0x90
1236238405Sjkim.byte	102,15,56,220,225
1237238405Sjkim.byte	102,15,56,220,233
1238290207Sjkim	movl	%r9d,32+12(%rsp)
1239290207Sjkim	leaq	3(%r8),%r9
1240238405Sjkim.byte	102,15,56,220,241
1241238405Sjkim.byte	102,15,56,220,249
1242290207Sjkim.byte	102,68,15,56,220,193
1243290207Sjkim.byte	102,68,15,56,220,201
1244290207Sjkim	movups	80-128(%rcx),%xmm1
1245290207Sjkim	bswapl	%r9d
1246238405Sjkim.byte	102,15,56,220,208
1247238405Sjkim.byte	102,15,56,220,216
1248290207Sjkim	xorl	%r11d,%r9d
1249290207Sjkim.byte	0x66,0x90
1250238405Sjkim.byte	102,15,56,220,224
1251238405Sjkim.byte	102,15,56,220,232
1252290207Sjkim	movl	%r9d,48+12(%rsp)
1253290207Sjkim	leaq	4(%r8),%r9
1254238405Sjkim.byte	102,15,56,220,240
1255238405Sjkim.byte	102,15,56,220,248
1256290207Sjkim.byte	102,68,15,56,220,192
1257290207Sjkim.byte	102,68,15,56,220,200
1258290207Sjkim	movups	96-128(%rcx),%xmm0
1259290207Sjkim	bswapl	%r9d
1260290207Sjkim.byte	102,15,56,220,209
1261290207Sjkim.byte	102,15,56,220,217
1262290207Sjkim	xorl	%r11d,%r9d
1263290207Sjkim.byte	0x66,0x90
1264290207Sjkim.byte	102,15,56,220,225
1265290207Sjkim.byte	102,15,56,220,233
1266290207Sjkim	movl	%r9d,64+12(%rsp)
1267290207Sjkim	leaq	5(%r8),%r9
1268290207Sjkim.byte	102,15,56,220,241
1269290207Sjkim.byte	102,15,56,220,249
1270290207Sjkim.byte	102,68,15,56,220,193
1271290207Sjkim.byte	102,68,15,56,220,201
1272290207Sjkim	movups	112-128(%rcx),%xmm1
1273290207Sjkim	bswapl	%r9d
1274290207Sjkim.byte	102,15,56,220,208
1275290207Sjkim.byte	102,15,56,220,216
1276290207Sjkim	xorl	%r11d,%r9d
1277290207Sjkim.byte	0x66,0x90
1278290207Sjkim.byte	102,15,56,220,224
1279290207Sjkim.byte	102,15,56,220,232
1280290207Sjkim	movl	%r9d,80+12(%rsp)
1281290207Sjkim	leaq	6(%r8),%r9
1282290207Sjkim.byte	102,15,56,220,240
1283290207Sjkim.byte	102,15,56,220,248
1284290207Sjkim.byte	102,68,15,56,220,192
1285290207Sjkim.byte	102,68,15,56,220,200
1286290207Sjkim	movups	128-128(%rcx),%xmm0
1287290207Sjkim	bswapl	%r9d
1288290207Sjkim.byte	102,15,56,220,209
1289290207Sjkim.byte	102,15,56,220,217
1290290207Sjkim	xorl	%r11d,%r9d
1291290207Sjkim.byte	0x66,0x90
1292290207Sjkim.byte	102,15,56,220,225
1293290207Sjkim.byte	102,15,56,220,233
1294290207Sjkim	movl	%r9d,96+12(%rsp)
1295290207Sjkim	leaq	7(%r8),%r9
1296290207Sjkim.byte	102,15,56,220,241
1297290207Sjkim.byte	102,15,56,220,249
1298290207Sjkim.byte	102,68,15,56,220,193
1299290207Sjkim.byte	102,68,15,56,220,201
1300290207Sjkim	movups	144-128(%rcx),%xmm1
1301290207Sjkim	bswapl	%r9d
1302290207Sjkim.byte	102,15,56,220,208
1303290207Sjkim.byte	102,15,56,220,216
1304290207Sjkim.byte	102,15,56,220,224
1305290207Sjkim	xorl	%r11d,%r9d
1306290207Sjkim	movdqu	0(%rdi),%xmm10
1307290207Sjkim.byte	102,15,56,220,232
1308290207Sjkim	movl	%r9d,112+12(%rsp)
1309290207Sjkim	cmpl	$11,%eax
1310290207Sjkim.byte	102,15,56,220,240
1311290207Sjkim.byte	102,15,56,220,248
1312290207Sjkim.byte	102,68,15,56,220,192
1313290207Sjkim.byte	102,68,15,56,220,200
1314290207Sjkim	movups	160-128(%rcx),%xmm0
1315238405Sjkim
1316290207Sjkim	jb	.Lctr32_enc_done
1317290207Sjkim
1318238405Sjkim.byte	102,15,56,220,209
1319238405Sjkim.byte	102,15,56,220,217
1320238405Sjkim.byte	102,15,56,220,225
1321238405Sjkim.byte	102,15,56,220,233
1322238405Sjkim.byte	102,15,56,220,241
1323238405Sjkim.byte	102,15,56,220,249
1324290207Sjkim.byte	102,68,15,56,220,193
1325290207Sjkim.byte	102,68,15,56,220,201
1326290207Sjkim	movups	176-128(%rcx),%xmm1
1327238405Sjkim
1328290207Sjkim.byte	102,15,56,220,208
1329290207Sjkim.byte	102,15,56,220,216
1330290207Sjkim.byte	102,15,56,220,224
1331290207Sjkim.byte	102,15,56,220,232
1332290207Sjkim.byte	102,15,56,220,240
1333290207Sjkim.byte	102,15,56,220,248
1334290207Sjkim.byte	102,68,15,56,220,192
1335290207Sjkim.byte	102,68,15,56,220,200
1336290207Sjkim	movups	192-128(%rcx),%xmm0
1337290207Sjkim	je	.Lctr32_enc_done
1338238405Sjkim
1339290207Sjkim.byte	102,15,56,220,209
1340290207Sjkim.byte	102,15,56,220,217
1341290207Sjkim.byte	102,15,56,220,225
1342290207Sjkim.byte	102,15,56,220,233
1343290207Sjkim.byte	102,15,56,220,241
1344290207Sjkim.byte	102,15,56,220,249
1345290207Sjkim.byte	102,68,15,56,220,193
1346290207Sjkim.byte	102,68,15,56,220,201
1347290207Sjkim	movups	208-128(%rcx),%xmm1
1348238405Sjkim
1349290207Sjkim.byte	102,15,56,220,208
1350290207Sjkim.byte	102,15,56,220,216
1351290207Sjkim.byte	102,15,56,220,224
1352290207Sjkim.byte	102,15,56,220,232
1353290207Sjkim.byte	102,15,56,220,240
1354290207Sjkim.byte	102,15,56,220,248
1355290207Sjkim.byte	102,68,15,56,220,192
1356290207Sjkim.byte	102,68,15,56,220,200
1357290207Sjkim	movups	224-128(%rcx),%xmm0
1358290207Sjkim	jmp	.Lctr32_enc_done
1359290207Sjkim
1360290207Sjkim.align	16
1361290207Sjkim.Lctr32_enc_done:
1362290207Sjkim	movdqu	16(%rdi),%xmm11
1363290207Sjkim	pxor	%xmm0,%xmm10
1364290207Sjkim	movdqu	32(%rdi),%xmm12
1365290207Sjkim	pxor	%xmm0,%xmm11
1366290207Sjkim	movdqu	48(%rdi),%xmm13
1367290207Sjkim	pxor	%xmm0,%xmm12
1368290207Sjkim	movdqu	64(%rdi),%xmm14
1369290207Sjkim	pxor	%xmm0,%xmm13
1370290207Sjkim	movdqu	80(%rdi),%xmm15
1371290207Sjkim	pxor	%xmm0,%xmm14
1372290207Sjkim	pxor	%xmm0,%xmm15
1373290207Sjkim.byte	102,15,56,220,209
1374290207Sjkim.byte	102,15,56,220,217
1375290207Sjkim.byte	102,15,56,220,225
1376290207Sjkim.byte	102,15,56,220,233
1377290207Sjkim.byte	102,15,56,220,241
1378290207Sjkim.byte	102,15,56,220,249
1379290207Sjkim.byte	102,68,15,56,220,193
1380290207Sjkim.byte	102,68,15,56,220,201
1381290207Sjkim	movdqu	96(%rdi),%xmm1
1382290207Sjkim	leaq	128(%rdi),%rdi
1383290207Sjkim
1384290207Sjkim.byte	102,65,15,56,221,210
1385290207Sjkim	pxor	%xmm0,%xmm1
1386290207Sjkim	movdqu	112-128(%rdi),%xmm10
1387290207Sjkim.byte	102,65,15,56,221,219
1388290207Sjkim	pxor	%xmm0,%xmm10
1389290207Sjkim	movdqa	0(%rsp),%xmm11
1390290207Sjkim.byte	102,65,15,56,221,228
1391290207Sjkim.byte	102,65,15,56,221,237
1392290207Sjkim	movdqa	16(%rsp),%xmm12
1393290207Sjkim	movdqa	32(%rsp),%xmm13
1394290207Sjkim.byte	102,65,15,56,221,246
1395290207Sjkim.byte	102,65,15,56,221,255
1396290207Sjkim	movdqa	48(%rsp),%xmm14
1397290207Sjkim	movdqa	64(%rsp),%xmm15
1398290207Sjkim.byte	102,68,15,56,221,193
1399290207Sjkim	movdqa	80(%rsp),%xmm0
1400290207Sjkim	movups	16-128(%rcx),%xmm1
1401290207Sjkim.byte	102,69,15,56,221,202
1402290207Sjkim
1403290207Sjkim	movups	%xmm2,(%rsi)
1404290207Sjkim	movdqa	%xmm11,%xmm2
1405290207Sjkim	movups	%xmm3,16(%rsi)
1406290207Sjkim	movdqa	%xmm12,%xmm3
1407290207Sjkim	movups	%xmm4,32(%rsi)
1408290207Sjkim	movdqa	%xmm13,%xmm4
1409290207Sjkim	movups	%xmm5,48(%rsi)
1410290207Sjkim	movdqa	%xmm14,%xmm5
1411290207Sjkim	movups	%xmm6,64(%rsi)
1412290207Sjkim	movdqa	%xmm15,%xmm6
1413290207Sjkim	movups	%xmm7,80(%rsi)
1414290207Sjkim	movdqa	%xmm0,%xmm7
1415290207Sjkim	movups	%xmm8,96(%rsi)
1416290207Sjkim	movups	%xmm9,112(%rsi)
1417290207Sjkim	leaq	128(%rsi),%rsi
1418290207Sjkim
1419290207Sjkim	subq	$8,%rdx
1420290207Sjkim	jnc	.Lctr32_loop8
1421290207Sjkim
1422290207Sjkim	addq	$8,%rdx
1423238405Sjkim	jz	.Lctr32_done
1424290207Sjkim	leaq	-128(%rcx),%rcx
1425238405Sjkim
1426238405Sjkim.Lctr32_tail:
1427238405Sjkim
1428238405Sjkim
1429290207Sjkim	leaq	16(%rcx),%rcx
1430238405Sjkim	cmpq	$4,%rdx
1431290207Sjkim	jb	.Lctr32_loop3
1432290207Sjkim	je	.Lctr32_loop4
1433238405Sjkim
1434238405Sjkim
1435290207Sjkim	shll	$4,%eax
1436290207Sjkim	movdqa	96(%rsp),%xmm8
1437290207Sjkim	pxor	%xmm9,%xmm9
1438238405Sjkim
1439290207Sjkim	movups	16(%rcx),%xmm0
1440290207Sjkim.byte	102,15,56,220,209
1441290207Sjkim.byte	102,15,56,220,217
1442290207Sjkim	leaq	32-16(%rcx,%rax,1),%rcx
1443290207Sjkim	negq	%rax
1444290207Sjkim.byte	102,15,56,220,225
1445290207Sjkim	addq	$16,%rax
1446290207Sjkim	movups	(%rdi),%xmm10
1447290207Sjkim.byte	102,15,56,220,233
1448290207Sjkim.byte	102,15,56,220,241
1449290207Sjkim	movups	16(%rdi),%xmm11
1450290207Sjkim	movups	32(%rdi),%xmm12
1451290207Sjkim.byte	102,15,56,220,249
1452290207Sjkim.byte	102,68,15,56,220,193
1453238405Sjkim
1454290207Sjkim	call	.Lenc_loop8_enter
1455290207Sjkim
1456290207Sjkim	movdqu	48(%rdi),%xmm13
1457290207Sjkim	pxor	%xmm10,%xmm2
1458290207Sjkim	movdqu	64(%rdi),%xmm10
1459290207Sjkim	pxor	%xmm11,%xmm3
1460290207Sjkim	movdqu	%xmm2,(%rsi)
1461290207Sjkim	pxor	%xmm12,%xmm4
1462290207Sjkim	movdqu	%xmm3,16(%rsi)
1463290207Sjkim	pxor	%xmm13,%xmm5
1464290207Sjkim	movdqu	%xmm4,32(%rsi)
1465290207Sjkim	pxor	%xmm10,%xmm6
1466290207Sjkim	movdqu	%xmm5,48(%rsi)
1467290207Sjkim	movdqu	%xmm6,64(%rsi)
1468290207Sjkim	cmpq	$6,%rdx
1469290207Sjkim	jb	.Lctr32_done
1470290207Sjkim
1471290207Sjkim	movups	80(%rdi),%xmm11
1472290207Sjkim	xorps	%xmm11,%xmm7
1473290207Sjkim	movups	%xmm7,80(%rsi)
1474290207Sjkim	je	.Lctr32_done
1475290207Sjkim
1476290207Sjkim	movups	96(%rdi),%xmm12
1477290207Sjkim	xorps	%xmm12,%xmm8
1478290207Sjkim	movups	%xmm8,96(%rsi)
1479238405Sjkim	jmp	.Lctr32_done
1480238405Sjkim
1481290207Sjkim.align	32
1482290207Sjkim.Lctr32_loop4:
1483238405Sjkim.byte	102,15,56,220,209
1484290207Sjkim	leaq	16(%rcx),%rcx
1485238405Sjkim	decl	%eax
1486290207Sjkim.byte	102,15,56,220,217
1487290207Sjkim.byte	102,15,56,220,225
1488290207Sjkim.byte	102,15,56,220,233
1489238405Sjkim	movups	(%rcx),%xmm1
1490290207Sjkim	jnz	.Lctr32_loop4
1491238405Sjkim.byte	102,15,56,221,209
1492290207Sjkim.byte	102,15,56,221,217
1493290207Sjkim	movups	(%rdi),%xmm10
1494290207Sjkim	movups	16(%rdi),%xmm11
1495290207Sjkim.byte	102,15,56,221,225
1496290207Sjkim.byte	102,15,56,221,233
1497290207Sjkim	movups	32(%rdi),%xmm12
1498290207Sjkim	movups	48(%rdi),%xmm13
1499238405Sjkim
1500290207Sjkim	xorps	%xmm10,%xmm2
1501290207Sjkim	movups	%xmm2,(%rsi)
1502290207Sjkim	xorps	%xmm11,%xmm3
1503290207Sjkim	movups	%xmm3,16(%rsi)
1504290207Sjkim	pxor	%xmm12,%xmm4
1505290207Sjkim	movdqu	%xmm4,32(%rsi)
1506290207Sjkim	pxor	%xmm13,%xmm5
1507290207Sjkim	movdqu	%xmm5,48(%rsi)
1508238405Sjkim	jmp	.Lctr32_done
1509238405Sjkim
1510290207Sjkim.align	32
1511290207Sjkim.Lctr32_loop3:
1512290207Sjkim.byte	102,15,56,220,209
1513290207Sjkim	leaq	16(%rcx),%rcx
1514290207Sjkim	decl	%eax
1515290207Sjkim.byte	102,15,56,220,217
1516290207Sjkim.byte	102,15,56,220,225
1517290207Sjkim	movups	(%rcx),%xmm1
1518290207Sjkim	jnz	.Lctr32_loop3
1519290207Sjkim.byte	102,15,56,221,209
1520290207Sjkim.byte	102,15,56,221,217
1521290207Sjkim.byte	102,15,56,221,225
1522238405Sjkim
1523290207Sjkim	movups	(%rdi),%xmm10
1524290207Sjkim	xorps	%xmm10,%xmm2
1525290207Sjkim	movups	%xmm2,(%rsi)
1526290207Sjkim	cmpq	$2,%rdx
1527290207Sjkim	jb	.Lctr32_done
1528238405Sjkim
1529290207Sjkim	movups	16(%rdi),%xmm11
1530290207Sjkim	xorps	%xmm11,%xmm3
1531290207Sjkim	movups	%xmm3,16(%rsi)
1532290207Sjkim	je	.Lctr32_done
1533290207Sjkim
1534290207Sjkim	movups	32(%rdi),%xmm12
1535290207Sjkim	xorps	%xmm12,%xmm4
1536290207Sjkim	movups	%xmm4,32(%rsi)
1537290207Sjkim
1538238405Sjkim.Lctr32_done:
1539290207Sjkim	xorps	%xmm0,%xmm0
1540290207Sjkim	xorl	%r11d,%r11d
1541290207Sjkim	pxor	%xmm1,%xmm1
1542290207Sjkim	pxor	%xmm2,%xmm2
1543290207Sjkim	pxor	%xmm3,%xmm3
1544290207Sjkim	pxor	%xmm4,%xmm4
1545290207Sjkim	pxor	%xmm5,%xmm5
1546290207Sjkim	pxor	%xmm6,%xmm6
1547290207Sjkim	pxor	%xmm7,%xmm7
1548290207Sjkim	movaps	%xmm0,0(%rsp)
1549290207Sjkim	pxor	%xmm8,%xmm8
1550290207Sjkim	movaps	%xmm0,16(%rsp)
1551290207Sjkim	pxor	%xmm9,%xmm9
1552290207Sjkim	movaps	%xmm0,32(%rsp)
1553290207Sjkim	pxor	%xmm10,%xmm10
1554290207Sjkim	movaps	%xmm0,48(%rsp)
1555290207Sjkim	pxor	%xmm11,%xmm11
1556290207Sjkim	movaps	%xmm0,64(%rsp)
1557290207Sjkim	pxor	%xmm12,%xmm12
1558290207Sjkim	movaps	%xmm0,80(%rsp)
1559290207Sjkim	pxor	%xmm13,%xmm13
1560290207Sjkim	movaps	%xmm0,96(%rsp)
1561290207Sjkim	pxor	%xmm14,%xmm14
1562290207Sjkim	movaps	%xmm0,112(%rsp)
1563290207Sjkim	pxor	%xmm15,%xmm15
1564290207Sjkim	leaq	(%rbp),%rsp
1565290207Sjkim	popq	%rbp
1566290207Sjkim.Lctr32_epilogue:
1567238405Sjkim	.byte	0xf3,0xc3
1568238405Sjkim.size	aesni_ctr32_encrypt_blocks,.-aesni_ctr32_encrypt_blocks
1569238405Sjkim.globl	aesni_xts_encrypt
1570238405Sjkim.type	aesni_xts_encrypt,@function
1571238405Sjkim.align	16
1572238405Sjkimaesni_xts_encrypt:
1573290207Sjkim	leaq	(%rsp),%rax
1574290207Sjkim	pushq	%rbp
1575290207Sjkim	subq	$112,%rsp
1576290207Sjkim	andq	$-16,%rsp
1577290207Sjkim	leaq	-8(%rax),%rbp
1578290207Sjkim	movups	(%r9),%xmm2
1579238405Sjkim	movl	240(%r8),%eax
1580238405Sjkim	movl	240(%rcx),%r10d
1581238405Sjkim	movups	(%r8),%xmm0
1582238405Sjkim	movups	16(%r8),%xmm1
1583238405Sjkim	leaq	32(%r8),%r8
1584290207Sjkim	xorps	%xmm0,%xmm2
1585238405Sjkim.Loop_enc1_8:
1586290207Sjkim.byte	102,15,56,220,209
1587238405Sjkim	decl	%eax
1588238405Sjkim	movups	(%r8),%xmm1
1589238405Sjkim	leaq	16(%r8),%r8
1590290207Sjkim	jnz	.Loop_enc1_8
1591290207Sjkim.byte	102,15,56,221,209
1592290207Sjkim	movups	(%rcx),%xmm0
1593238405Sjkim	movq	%rcx,%r11
1594238405Sjkim	movl	%r10d,%eax
1595290207Sjkim	shll	$4,%r10d
1596238405Sjkim	movq	%rdx,%r9
1597238405Sjkim	andq	$-16,%rdx
1598238405Sjkim
1599290207Sjkim	movups	16(%rcx,%r10,1),%xmm1
1600290207Sjkim
1601238405Sjkim	movdqa	.Lxts_magic(%rip),%xmm8
1602290207Sjkim	movdqa	%xmm2,%xmm15
1603296279Sjkim	pshufd	$0x5f,%xmm2,%xmm9
1604290207Sjkim	pxor	%xmm0,%xmm1
1605290207Sjkim	movdqa	%xmm9,%xmm14
1606290207Sjkim	paddd	%xmm9,%xmm9
1607238405Sjkim	movdqa	%xmm15,%xmm10
1608290207Sjkim	psrad	$31,%xmm14
1609238405Sjkim	paddq	%xmm15,%xmm15
1610290207Sjkim	pand	%xmm8,%xmm14
1611290207Sjkim	pxor	%xmm0,%xmm10
1612290207Sjkim	pxor	%xmm14,%xmm15
1613290207Sjkim	movdqa	%xmm9,%xmm14
1614290207Sjkim	paddd	%xmm9,%xmm9
1615238405Sjkim	movdqa	%xmm15,%xmm11
1616290207Sjkim	psrad	$31,%xmm14
1617238405Sjkim	paddq	%xmm15,%xmm15
1618290207Sjkim	pand	%xmm8,%xmm14
1619290207Sjkim	pxor	%xmm0,%xmm11
1620290207Sjkim	pxor	%xmm14,%xmm15
1621290207Sjkim	movdqa	%xmm9,%xmm14
1622290207Sjkim	paddd	%xmm9,%xmm9
1623238405Sjkim	movdqa	%xmm15,%xmm12
1624290207Sjkim	psrad	$31,%xmm14
1625238405Sjkim	paddq	%xmm15,%xmm15
1626290207Sjkim	pand	%xmm8,%xmm14
1627290207Sjkim	pxor	%xmm0,%xmm12
1628290207Sjkim	pxor	%xmm14,%xmm15
1629290207Sjkim	movdqa	%xmm9,%xmm14
1630290207Sjkim	paddd	%xmm9,%xmm9
1631238405Sjkim	movdqa	%xmm15,%xmm13
1632290207Sjkim	psrad	$31,%xmm14
1633238405Sjkim	paddq	%xmm15,%xmm15
1634290207Sjkim	pand	%xmm8,%xmm14
1635290207Sjkim	pxor	%xmm0,%xmm13
1636290207Sjkim	pxor	%xmm14,%xmm15
1637290207Sjkim	movdqa	%xmm15,%xmm14
1638290207Sjkim	psrad	$31,%xmm9
1639290207Sjkim	paddq	%xmm15,%xmm15
1640238405Sjkim	pand	%xmm8,%xmm9
1641290207Sjkim	pxor	%xmm0,%xmm14
1642238405Sjkim	pxor	%xmm9,%xmm15
1643290207Sjkim	movaps	%xmm1,96(%rsp)
1644290207Sjkim
1645238405Sjkim	subq	$96,%rdx
1646238405Sjkim	jc	.Lxts_enc_short
1647238405Sjkim
1648290207Sjkim	movl	$16+96,%eax
1649290207Sjkim	leaq	32(%r11,%r10,1),%rcx
1650290207Sjkim	subq	%r10,%rax
1651290207Sjkim	movups	16(%r11),%xmm1
1652290207Sjkim	movq	%rax,%r10
1653290207Sjkim	leaq	.Lxts_magic(%rip),%r8
1654238405Sjkim	jmp	.Lxts_enc_grandloop
1655238405Sjkim
1656290207Sjkim.align	32
1657238405Sjkim.Lxts_enc_grandloop:
1658238405Sjkim	movdqu	0(%rdi),%xmm2
1659290207Sjkim	movdqa	%xmm0,%xmm8
1660238405Sjkim	movdqu	16(%rdi),%xmm3
1661290207Sjkim	pxor	%xmm10,%xmm2
1662238405Sjkim	movdqu	32(%rdi),%xmm4
1663290207Sjkim	pxor	%xmm11,%xmm3
1664290207Sjkim.byte	102,15,56,220,209
1665238405Sjkim	movdqu	48(%rdi),%xmm5
1666290207Sjkim	pxor	%xmm12,%xmm4
1667290207Sjkim.byte	102,15,56,220,217
1668238405Sjkim	movdqu	64(%rdi),%xmm6
1669290207Sjkim	pxor	%xmm13,%xmm5
1670290207Sjkim.byte	102,15,56,220,225
1671238405Sjkim	movdqu	80(%rdi),%xmm7
1672290207Sjkim	pxor	%xmm15,%xmm8
1673290207Sjkim	movdqa	96(%rsp),%xmm9
1674290207Sjkim	pxor	%xmm14,%xmm6
1675290207Sjkim.byte	102,15,56,220,233
1676290207Sjkim	movups	32(%r11),%xmm0
1677238405Sjkim	leaq	96(%rdi),%rdi
1678290207Sjkim	pxor	%xmm8,%xmm7
1679238405Sjkim
1680290207Sjkim	pxor	%xmm9,%xmm10
1681290207Sjkim.byte	102,15,56,220,241
1682290207Sjkim	pxor	%xmm9,%xmm11
1683290207Sjkim	movdqa	%xmm10,0(%rsp)
1684290207Sjkim.byte	102,15,56,220,249
1685290207Sjkim	movups	48(%r11),%xmm1
1686290207Sjkim	pxor	%xmm9,%xmm12
1687238405Sjkim
1688290207Sjkim.byte	102,15,56,220,208
1689290207Sjkim	pxor	%xmm9,%xmm13
1690290207Sjkim	movdqa	%xmm11,16(%rsp)
1691290207Sjkim.byte	102,15,56,220,216
1692290207Sjkim	pxor	%xmm9,%xmm14
1693290207Sjkim	movdqa	%xmm12,32(%rsp)
1694290207Sjkim.byte	102,15,56,220,224
1695290207Sjkim.byte	102,15,56,220,232
1696290207Sjkim	pxor	%xmm9,%xmm8
1697290207Sjkim	movdqa	%xmm14,64(%rsp)
1698290207Sjkim.byte	102,15,56,220,240
1699290207Sjkim.byte	102,15,56,220,248
1700290207Sjkim	movups	64(%r11),%xmm0
1701290207Sjkim	movdqa	%xmm8,80(%rsp)
1702296279Sjkim	pshufd	$0x5f,%xmm15,%xmm9
1703290207Sjkim	jmp	.Lxts_enc_loop6
1704290207Sjkim.align	32
1705290207Sjkim.Lxts_enc_loop6:
1706238405Sjkim.byte	102,15,56,220,209
1707238405Sjkim.byte	102,15,56,220,217
1708238405Sjkim.byte	102,15,56,220,225
1709238405Sjkim.byte	102,15,56,220,233
1710238405Sjkim.byte	102,15,56,220,241
1711238405Sjkim.byte	102,15,56,220,249
1712290207Sjkim	movups	-64(%rcx,%rax,1),%xmm1
1713290207Sjkim	addq	$32,%rax
1714238405Sjkim
1715290207Sjkim.byte	102,15,56,220,208
1716290207Sjkim.byte	102,15,56,220,216
1717290207Sjkim.byte	102,15,56,220,224
1718290207Sjkim.byte	102,15,56,220,232
1719290207Sjkim.byte	102,15,56,220,240
1720290207Sjkim.byte	102,15,56,220,248
1721290207Sjkim	movups	-80(%rcx,%rax,1),%xmm0
1722290207Sjkim	jnz	.Lxts_enc_loop6
1723290207Sjkim
1724290207Sjkim	movdqa	(%r8),%xmm8
1725290207Sjkim	movdqa	%xmm9,%xmm14
1726290207Sjkim	paddd	%xmm9,%xmm9
1727238405Sjkim.byte	102,15,56,220,209
1728290207Sjkim	paddq	%xmm15,%xmm15
1729290207Sjkim	psrad	$31,%xmm14
1730238405Sjkim.byte	102,15,56,220,217
1731290207Sjkim	pand	%xmm8,%xmm14
1732290207Sjkim	movups	(%r11),%xmm10
1733238405Sjkim.byte	102,15,56,220,225
1734238405Sjkim.byte	102,15,56,220,233
1735238405Sjkim.byte	102,15,56,220,241
1736290207Sjkim	pxor	%xmm14,%xmm15
1737290207Sjkim	movaps	%xmm10,%xmm11
1738238405Sjkim.byte	102,15,56,220,249
1739290207Sjkim	movups	-64(%rcx),%xmm1
1740290207Sjkim
1741290207Sjkim	movdqa	%xmm9,%xmm14
1742238405Sjkim.byte	102,15,56,220,208
1743290207Sjkim	paddd	%xmm9,%xmm9
1744290207Sjkim	pxor	%xmm15,%xmm10
1745238405Sjkim.byte	102,15,56,220,216
1746290207Sjkim	psrad	$31,%xmm14
1747290207Sjkim	paddq	%xmm15,%xmm15
1748238405Sjkim.byte	102,15,56,220,224
1749238405Sjkim.byte	102,15,56,220,232
1750290207Sjkim	pand	%xmm8,%xmm14
1751290207Sjkim	movaps	%xmm11,%xmm12
1752238405Sjkim.byte	102,15,56,220,240
1753290207Sjkim	pxor	%xmm14,%xmm15
1754290207Sjkim	movdqa	%xmm9,%xmm14
1755238405Sjkim.byte	102,15,56,220,248
1756290207Sjkim	movups	-48(%rcx),%xmm0
1757238405Sjkim
1758290207Sjkim	paddd	%xmm9,%xmm9
1759238405Sjkim.byte	102,15,56,220,209
1760290207Sjkim	pxor	%xmm15,%xmm11
1761290207Sjkim	psrad	$31,%xmm14
1762238405Sjkim.byte	102,15,56,220,217
1763290207Sjkim	paddq	%xmm15,%xmm15
1764290207Sjkim	pand	%xmm8,%xmm14
1765238405Sjkim.byte	102,15,56,220,225
1766238405Sjkim.byte	102,15,56,220,233
1767290207Sjkim	movdqa	%xmm13,48(%rsp)
1768290207Sjkim	pxor	%xmm14,%xmm15
1769238405Sjkim.byte	102,15,56,220,241
1770290207Sjkim	movaps	%xmm12,%xmm13
1771290207Sjkim	movdqa	%xmm9,%xmm14
1772238405Sjkim.byte	102,15,56,220,249
1773290207Sjkim	movups	-32(%rcx),%xmm1
1774238405Sjkim
1775290207Sjkim	paddd	%xmm9,%xmm9
1776238405Sjkim.byte	102,15,56,220,208
1777290207Sjkim	pxor	%xmm15,%xmm12
1778290207Sjkim	psrad	$31,%xmm14
1779238405Sjkim.byte	102,15,56,220,216
1780290207Sjkim	paddq	%xmm15,%xmm15
1781290207Sjkim	pand	%xmm8,%xmm14
1782238405Sjkim.byte	102,15,56,220,224
1783238405Sjkim.byte	102,15,56,220,232
1784238405Sjkim.byte	102,15,56,220,240
1785290207Sjkim	pxor	%xmm14,%xmm15
1786290207Sjkim	movaps	%xmm13,%xmm14
1787238405Sjkim.byte	102,15,56,220,248
1788238405Sjkim
1789290207Sjkim	movdqa	%xmm9,%xmm0
1790290207Sjkim	paddd	%xmm9,%xmm9
1791238405Sjkim.byte	102,15,56,220,209
1792290207Sjkim	pxor	%xmm15,%xmm13
1793290207Sjkim	psrad	$31,%xmm0
1794238405Sjkim.byte	102,15,56,220,217
1795290207Sjkim	paddq	%xmm15,%xmm15
1796290207Sjkim	pand	%xmm8,%xmm0
1797238405Sjkim.byte	102,15,56,220,225
1798238405Sjkim.byte	102,15,56,220,233
1799290207Sjkim	pxor	%xmm0,%xmm15
1800290207Sjkim	movups	(%r11),%xmm0
1801238405Sjkim.byte	102,15,56,220,241
1802238405Sjkim.byte	102,15,56,220,249
1803290207Sjkim	movups	16(%r11),%xmm1
1804238405Sjkim
1805290207Sjkim	pxor	%xmm15,%xmm14
1806290207Sjkim.byte	102,15,56,221,84,36,0
1807290207Sjkim	psrad	$31,%xmm9
1808238405Sjkim	paddq	%xmm15,%xmm15
1809290207Sjkim.byte	102,15,56,221,92,36,16
1810290207Sjkim.byte	102,15,56,221,100,36,32
1811238405Sjkim	pand	%xmm8,%xmm9
1812290207Sjkim	movq	%r10,%rax
1813290207Sjkim.byte	102,15,56,221,108,36,48
1814290207Sjkim.byte	102,15,56,221,116,36,64
1815290207Sjkim.byte	102,15,56,221,124,36,80
1816238405Sjkim	pxor	%xmm9,%xmm15
1817238405Sjkim
1818238405Sjkim	leaq	96(%rsi),%rsi
1819290207Sjkim	movups	%xmm2,-96(%rsi)
1820290207Sjkim	movups	%xmm3,-80(%rsi)
1821290207Sjkim	movups	%xmm4,-64(%rsi)
1822290207Sjkim	movups	%xmm5,-48(%rsi)
1823290207Sjkim	movups	%xmm6,-32(%rsi)
1824290207Sjkim	movups	%xmm7,-16(%rsi)
1825238405Sjkim	subq	$96,%rdx
1826238405Sjkim	jnc	.Lxts_enc_grandloop
1827238405Sjkim
1828290207Sjkim	movl	$16+96,%eax
1829290207Sjkim	subl	%r10d,%eax
1830238405Sjkim	movq	%r11,%rcx
1831290207Sjkim	shrl	$4,%eax
1832238405Sjkim
1833238405Sjkim.Lxts_enc_short:
1834290207Sjkim
1835290207Sjkim	movl	%eax,%r10d
1836290207Sjkim	pxor	%xmm0,%xmm10
1837238405Sjkim	addq	$96,%rdx
1838238405Sjkim	jz	.Lxts_enc_done
1839238405Sjkim
1840290207Sjkim	pxor	%xmm0,%xmm11
1841296279Sjkim	cmpq	$0x20,%rdx
1842238405Sjkim	jb	.Lxts_enc_one
1843290207Sjkim	pxor	%xmm0,%xmm12
1844238405Sjkim	je	.Lxts_enc_two
1845238405Sjkim
1846290207Sjkim	pxor	%xmm0,%xmm13
1847296279Sjkim	cmpq	$0x40,%rdx
1848238405Sjkim	jb	.Lxts_enc_three
1849290207Sjkim	pxor	%xmm0,%xmm14
1850238405Sjkim	je	.Lxts_enc_four
1851238405Sjkim
1852238405Sjkim	movdqu	(%rdi),%xmm2
1853238405Sjkim	movdqu	16(%rdi),%xmm3
1854238405Sjkim	movdqu	32(%rdi),%xmm4
1855238405Sjkim	pxor	%xmm10,%xmm2
1856238405Sjkim	movdqu	48(%rdi),%xmm5
1857238405Sjkim	pxor	%xmm11,%xmm3
1858238405Sjkim	movdqu	64(%rdi),%xmm6
1859238405Sjkim	leaq	80(%rdi),%rdi
1860238405Sjkim	pxor	%xmm12,%xmm4
1861238405Sjkim	pxor	%xmm13,%xmm5
1862238405Sjkim	pxor	%xmm14,%xmm6
1863290207Sjkim	pxor	%xmm7,%xmm7
1864238405Sjkim
1865238405Sjkim	call	_aesni_encrypt6
1866238405Sjkim
1867238405Sjkim	xorps	%xmm10,%xmm2
1868238405Sjkim	movdqa	%xmm15,%xmm10
1869238405Sjkim	xorps	%xmm11,%xmm3
1870238405Sjkim	xorps	%xmm12,%xmm4
1871238405Sjkim	movdqu	%xmm2,(%rsi)
1872238405Sjkim	xorps	%xmm13,%xmm5
1873238405Sjkim	movdqu	%xmm3,16(%rsi)
1874238405Sjkim	xorps	%xmm14,%xmm6
1875238405Sjkim	movdqu	%xmm4,32(%rsi)
1876238405Sjkim	movdqu	%xmm5,48(%rsi)
1877238405Sjkim	movdqu	%xmm6,64(%rsi)
1878238405Sjkim	leaq	80(%rsi),%rsi
1879238405Sjkim	jmp	.Lxts_enc_done
1880238405Sjkim
1881238405Sjkim.align	16
1882238405Sjkim.Lxts_enc_one:
1883238405Sjkim	movups	(%rdi),%xmm2
1884238405Sjkim	leaq	16(%rdi),%rdi
1885238405Sjkim	xorps	%xmm10,%xmm2
1886238405Sjkim	movups	(%rcx),%xmm0
1887238405Sjkim	movups	16(%rcx),%xmm1
1888238405Sjkim	leaq	32(%rcx),%rcx
1889238405Sjkim	xorps	%xmm0,%xmm2
1890238405Sjkim.Loop_enc1_9:
1891238405Sjkim.byte	102,15,56,220,209
1892238405Sjkim	decl	%eax
1893238405Sjkim	movups	(%rcx),%xmm1
1894238405Sjkim	leaq	16(%rcx),%rcx
1895290207Sjkim	jnz	.Loop_enc1_9
1896238405Sjkim.byte	102,15,56,221,209
1897238405Sjkim	xorps	%xmm10,%xmm2
1898238405Sjkim	movdqa	%xmm11,%xmm10
1899238405Sjkim	movups	%xmm2,(%rsi)
1900238405Sjkim	leaq	16(%rsi),%rsi
1901238405Sjkim	jmp	.Lxts_enc_done
1902238405Sjkim
1903238405Sjkim.align	16
1904238405Sjkim.Lxts_enc_two:
1905238405Sjkim	movups	(%rdi),%xmm2
1906238405Sjkim	movups	16(%rdi),%xmm3
1907238405Sjkim	leaq	32(%rdi),%rdi
1908238405Sjkim	xorps	%xmm10,%xmm2
1909238405Sjkim	xorps	%xmm11,%xmm3
1910238405Sjkim
1911290207Sjkim	call	_aesni_encrypt2
1912238405Sjkim
1913238405Sjkim	xorps	%xmm10,%xmm2
1914238405Sjkim	movdqa	%xmm12,%xmm10
1915238405Sjkim	xorps	%xmm11,%xmm3
1916238405Sjkim	movups	%xmm2,(%rsi)
1917238405Sjkim	movups	%xmm3,16(%rsi)
1918238405Sjkim	leaq	32(%rsi),%rsi
1919238405Sjkim	jmp	.Lxts_enc_done
1920238405Sjkim
1921238405Sjkim.align	16
1922238405Sjkim.Lxts_enc_three:
1923238405Sjkim	movups	(%rdi),%xmm2
1924238405Sjkim	movups	16(%rdi),%xmm3
1925238405Sjkim	movups	32(%rdi),%xmm4
1926238405Sjkim	leaq	48(%rdi),%rdi
1927238405Sjkim	xorps	%xmm10,%xmm2
1928238405Sjkim	xorps	%xmm11,%xmm3
1929238405Sjkim	xorps	%xmm12,%xmm4
1930238405Sjkim
1931238405Sjkim	call	_aesni_encrypt3
1932238405Sjkim
1933238405Sjkim	xorps	%xmm10,%xmm2
1934238405Sjkim	movdqa	%xmm13,%xmm10
1935238405Sjkim	xorps	%xmm11,%xmm3
1936238405Sjkim	xorps	%xmm12,%xmm4
1937238405Sjkim	movups	%xmm2,(%rsi)
1938238405Sjkim	movups	%xmm3,16(%rsi)
1939238405Sjkim	movups	%xmm4,32(%rsi)
1940238405Sjkim	leaq	48(%rsi),%rsi
1941238405Sjkim	jmp	.Lxts_enc_done
1942238405Sjkim
1943238405Sjkim.align	16
1944238405Sjkim.Lxts_enc_four:
1945238405Sjkim	movups	(%rdi),%xmm2
1946238405Sjkim	movups	16(%rdi),%xmm3
1947238405Sjkim	movups	32(%rdi),%xmm4
1948238405Sjkim	xorps	%xmm10,%xmm2
1949238405Sjkim	movups	48(%rdi),%xmm5
1950238405Sjkim	leaq	64(%rdi),%rdi
1951238405Sjkim	xorps	%xmm11,%xmm3
1952238405Sjkim	xorps	%xmm12,%xmm4
1953238405Sjkim	xorps	%xmm13,%xmm5
1954238405Sjkim
1955238405Sjkim	call	_aesni_encrypt4
1956238405Sjkim
1957290207Sjkim	pxor	%xmm10,%xmm2
1958290207Sjkim	movdqa	%xmm14,%xmm10
1959290207Sjkim	pxor	%xmm11,%xmm3
1960290207Sjkim	pxor	%xmm12,%xmm4
1961290207Sjkim	movdqu	%xmm2,(%rsi)
1962290207Sjkim	pxor	%xmm13,%xmm5
1963290207Sjkim	movdqu	%xmm3,16(%rsi)
1964290207Sjkim	movdqu	%xmm4,32(%rsi)
1965290207Sjkim	movdqu	%xmm5,48(%rsi)
1966238405Sjkim	leaq	64(%rsi),%rsi
1967238405Sjkim	jmp	.Lxts_enc_done
1968238405Sjkim
1969238405Sjkim.align	16
1970238405Sjkim.Lxts_enc_done:
1971238405Sjkim	andq	$15,%r9
1972238405Sjkim	jz	.Lxts_enc_ret
1973238405Sjkim	movq	%r9,%rdx
1974238405Sjkim
1975238405Sjkim.Lxts_enc_steal:
1976238405Sjkim	movzbl	(%rdi),%eax
1977238405Sjkim	movzbl	-16(%rsi),%ecx
1978238405Sjkim	leaq	1(%rdi),%rdi
1979238405Sjkim	movb	%al,-16(%rsi)
1980238405Sjkim	movb	%cl,0(%rsi)
1981238405Sjkim	leaq	1(%rsi),%rsi
1982238405Sjkim	subq	$1,%rdx
1983238405Sjkim	jnz	.Lxts_enc_steal
1984238405Sjkim
1985238405Sjkim	subq	%r9,%rsi
1986238405Sjkim	movq	%r11,%rcx
1987238405Sjkim	movl	%r10d,%eax
1988238405Sjkim
1989238405Sjkim	movups	-16(%rsi),%xmm2
1990238405Sjkim	xorps	%xmm10,%xmm2
1991238405Sjkim	movups	(%rcx),%xmm0
1992238405Sjkim	movups	16(%rcx),%xmm1
1993238405Sjkim	leaq	32(%rcx),%rcx
1994238405Sjkim	xorps	%xmm0,%xmm2
1995238405Sjkim.Loop_enc1_10:
1996238405Sjkim.byte	102,15,56,220,209
1997238405Sjkim	decl	%eax
1998238405Sjkim	movups	(%rcx),%xmm1
1999238405Sjkim	leaq	16(%rcx),%rcx
2000290207Sjkim	jnz	.Loop_enc1_10
2001238405Sjkim.byte	102,15,56,221,209
2002238405Sjkim	xorps	%xmm10,%xmm2
2003238405Sjkim	movups	%xmm2,-16(%rsi)
2004238405Sjkim
2005238405Sjkim.Lxts_enc_ret:
2006290207Sjkim	xorps	%xmm0,%xmm0
2007290207Sjkim	pxor	%xmm1,%xmm1
2008290207Sjkim	pxor	%xmm2,%xmm2
2009290207Sjkim	pxor	%xmm3,%xmm3
2010290207Sjkim	pxor	%xmm4,%xmm4
2011290207Sjkim	pxor	%xmm5,%xmm5
2012290207Sjkim	pxor	%xmm6,%xmm6
2013290207Sjkim	pxor	%xmm7,%xmm7
2014290207Sjkim	movaps	%xmm0,0(%rsp)
2015290207Sjkim	pxor	%xmm8,%xmm8
2016290207Sjkim	movaps	%xmm0,16(%rsp)
2017290207Sjkim	pxor	%xmm9,%xmm9
2018290207Sjkim	movaps	%xmm0,32(%rsp)
2019290207Sjkim	pxor	%xmm10,%xmm10
2020290207Sjkim	movaps	%xmm0,48(%rsp)
2021290207Sjkim	pxor	%xmm11,%xmm11
2022290207Sjkim	movaps	%xmm0,64(%rsp)
2023290207Sjkim	pxor	%xmm12,%xmm12
2024290207Sjkim	movaps	%xmm0,80(%rsp)
2025290207Sjkim	pxor	%xmm13,%xmm13
2026290207Sjkim	movaps	%xmm0,96(%rsp)
2027290207Sjkim	pxor	%xmm14,%xmm14
2028290207Sjkim	pxor	%xmm15,%xmm15
2029290207Sjkim	leaq	(%rbp),%rsp
2030290207Sjkim	popq	%rbp
2031238405Sjkim.Lxts_enc_epilogue:
2032238405Sjkim	.byte	0xf3,0xc3
2033238405Sjkim.size	aesni_xts_encrypt,.-aesni_xts_encrypt
2034238405Sjkim.globl	aesni_xts_decrypt
2035238405Sjkim.type	aesni_xts_decrypt,@function
2036238405Sjkim.align	16
2037238405Sjkimaesni_xts_decrypt:
2038290207Sjkim	leaq	(%rsp),%rax
2039290207Sjkim	pushq	%rbp
2040290207Sjkim	subq	$112,%rsp
2041290207Sjkim	andq	$-16,%rsp
2042290207Sjkim	leaq	-8(%rax),%rbp
2043290207Sjkim	movups	(%r9),%xmm2
2044238405Sjkim	movl	240(%r8),%eax
2045238405Sjkim	movl	240(%rcx),%r10d
2046238405Sjkim	movups	(%r8),%xmm0
2047238405Sjkim	movups	16(%r8),%xmm1
2048238405Sjkim	leaq	32(%r8),%r8
2049290207Sjkim	xorps	%xmm0,%xmm2
2050238405Sjkim.Loop_enc1_11:
2051290207Sjkim.byte	102,15,56,220,209
2052238405Sjkim	decl	%eax
2053238405Sjkim	movups	(%r8),%xmm1
2054238405Sjkim	leaq	16(%r8),%r8
2055290207Sjkim	jnz	.Loop_enc1_11
2056290207Sjkim.byte	102,15,56,221,209
2057238405Sjkim	xorl	%eax,%eax
2058238405Sjkim	testq	$15,%rdx
2059238405Sjkim	setnz	%al
2060238405Sjkim	shlq	$4,%rax
2061238405Sjkim	subq	%rax,%rdx
2062238405Sjkim
2063290207Sjkim	movups	(%rcx),%xmm0
2064238405Sjkim	movq	%rcx,%r11
2065238405Sjkim	movl	%r10d,%eax
2066290207Sjkim	shll	$4,%r10d
2067238405Sjkim	movq	%rdx,%r9
2068238405Sjkim	andq	$-16,%rdx
2069238405Sjkim
2070290207Sjkim	movups	16(%rcx,%r10,1),%xmm1
2071290207Sjkim
2072238405Sjkim	movdqa	.Lxts_magic(%rip),%xmm8
2073290207Sjkim	movdqa	%xmm2,%xmm15
2074296279Sjkim	pshufd	$0x5f,%xmm2,%xmm9
2075290207Sjkim	pxor	%xmm0,%xmm1
2076290207Sjkim	movdqa	%xmm9,%xmm14
2077290207Sjkim	paddd	%xmm9,%xmm9
2078238405Sjkim	movdqa	%xmm15,%xmm10
2079290207Sjkim	psrad	$31,%xmm14
2080238405Sjkim	paddq	%xmm15,%xmm15
2081290207Sjkim	pand	%xmm8,%xmm14
2082290207Sjkim	pxor	%xmm0,%xmm10
2083290207Sjkim	pxor	%xmm14,%xmm15
2084290207Sjkim	movdqa	%xmm9,%xmm14
2085290207Sjkim	paddd	%xmm9,%xmm9
2086238405Sjkim	movdqa	%xmm15,%xmm11
2087290207Sjkim	psrad	$31,%xmm14
2088238405Sjkim	paddq	%xmm15,%xmm15
2089290207Sjkim	pand	%xmm8,%xmm14
2090290207Sjkim	pxor	%xmm0,%xmm11
2091290207Sjkim	pxor	%xmm14,%xmm15
2092290207Sjkim	movdqa	%xmm9,%xmm14
2093290207Sjkim	paddd	%xmm9,%xmm9
2094238405Sjkim	movdqa	%xmm15,%xmm12
2095290207Sjkim	psrad	$31,%xmm14
2096238405Sjkim	paddq	%xmm15,%xmm15
2097290207Sjkim	pand	%xmm8,%xmm14
2098290207Sjkim	pxor	%xmm0,%xmm12
2099290207Sjkim	pxor	%xmm14,%xmm15
2100290207Sjkim	movdqa	%xmm9,%xmm14
2101290207Sjkim	paddd	%xmm9,%xmm9
2102238405Sjkim	movdqa	%xmm15,%xmm13
2103290207Sjkim	psrad	$31,%xmm14
2104238405Sjkim	paddq	%xmm15,%xmm15
2105290207Sjkim	pand	%xmm8,%xmm14
2106290207Sjkim	pxor	%xmm0,%xmm13
2107290207Sjkim	pxor	%xmm14,%xmm15
2108290207Sjkim	movdqa	%xmm15,%xmm14
2109290207Sjkim	psrad	$31,%xmm9
2110290207Sjkim	paddq	%xmm15,%xmm15
2111238405Sjkim	pand	%xmm8,%xmm9
2112290207Sjkim	pxor	%xmm0,%xmm14
2113238405Sjkim	pxor	%xmm9,%xmm15
2114290207Sjkim	movaps	%xmm1,96(%rsp)
2115290207Sjkim
2116238405Sjkim	subq	$96,%rdx
2117238405Sjkim	jc	.Lxts_dec_short
2118238405Sjkim
2119290207Sjkim	movl	$16+96,%eax
2120290207Sjkim	leaq	32(%r11,%r10,1),%rcx
2121290207Sjkim	subq	%r10,%rax
2122290207Sjkim	movups	16(%r11),%xmm1
2123290207Sjkim	movq	%rax,%r10
2124290207Sjkim	leaq	.Lxts_magic(%rip),%r8
2125238405Sjkim	jmp	.Lxts_dec_grandloop
2126238405Sjkim
2127290207Sjkim.align	32
2128238405Sjkim.Lxts_dec_grandloop:
2129238405Sjkim	movdqu	0(%rdi),%xmm2
2130290207Sjkim	movdqa	%xmm0,%xmm8
2131238405Sjkim	movdqu	16(%rdi),%xmm3
2132290207Sjkim	pxor	%xmm10,%xmm2
2133238405Sjkim	movdqu	32(%rdi),%xmm4
2134290207Sjkim	pxor	%xmm11,%xmm3
2135290207Sjkim.byte	102,15,56,222,209
2136238405Sjkim	movdqu	48(%rdi),%xmm5
2137290207Sjkim	pxor	%xmm12,%xmm4
2138290207Sjkim.byte	102,15,56,222,217
2139238405Sjkim	movdqu	64(%rdi),%xmm6
2140290207Sjkim	pxor	%xmm13,%xmm5
2141290207Sjkim.byte	102,15,56,222,225
2142238405Sjkim	movdqu	80(%rdi),%xmm7
2143290207Sjkim	pxor	%xmm15,%xmm8
2144290207Sjkim	movdqa	96(%rsp),%xmm9
2145290207Sjkim	pxor	%xmm14,%xmm6
2146290207Sjkim.byte	102,15,56,222,233
2147290207Sjkim	movups	32(%r11),%xmm0
2148238405Sjkim	leaq	96(%rdi),%rdi
2149290207Sjkim	pxor	%xmm8,%xmm7
2150238405Sjkim
2151290207Sjkim	pxor	%xmm9,%xmm10
2152290207Sjkim.byte	102,15,56,222,241
2153290207Sjkim	pxor	%xmm9,%xmm11
2154290207Sjkim	movdqa	%xmm10,0(%rsp)
2155290207Sjkim.byte	102,15,56,222,249
2156290207Sjkim	movups	48(%r11),%xmm1
2157290207Sjkim	pxor	%xmm9,%xmm12
2158238405Sjkim
2159290207Sjkim.byte	102,15,56,222,208
2160290207Sjkim	pxor	%xmm9,%xmm13
2161290207Sjkim	movdqa	%xmm11,16(%rsp)
2162290207Sjkim.byte	102,15,56,222,216
2163290207Sjkim	pxor	%xmm9,%xmm14
2164290207Sjkim	movdqa	%xmm12,32(%rsp)
2165290207Sjkim.byte	102,15,56,222,224
2166290207Sjkim.byte	102,15,56,222,232
2167290207Sjkim	pxor	%xmm9,%xmm8
2168290207Sjkim	movdqa	%xmm14,64(%rsp)
2169290207Sjkim.byte	102,15,56,222,240
2170290207Sjkim.byte	102,15,56,222,248
2171290207Sjkim	movups	64(%r11),%xmm0
2172290207Sjkim	movdqa	%xmm8,80(%rsp)
2173296279Sjkim	pshufd	$0x5f,%xmm15,%xmm9
2174290207Sjkim	jmp	.Lxts_dec_loop6
2175290207Sjkim.align	32
2176290207Sjkim.Lxts_dec_loop6:
2177238405Sjkim.byte	102,15,56,222,209
2178238405Sjkim.byte	102,15,56,222,217
2179238405Sjkim.byte	102,15,56,222,225
2180238405Sjkim.byte	102,15,56,222,233
2181238405Sjkim.byte	102,15,56,222,241
2182238405Sjkim.byte	102,15,56,222,249
2183290207Sjkim	movups	-64(%rcx,%rax,1),%xmm1
2184290207Sjkim	addq	$32,%rax
2185238405Sjkim
2186290207Sjkim.byte	102,15,56,222,208
2187290207Sjkim.byte	102,15,56,222,216
2188290207Sjkim.byte	102,15,56,222,224
2189290207Sjkim.byte	102,15,56,222,232
2190290207Sjkim.byte	102,15,56,222,240
2191290207Sjkim.byte	102,15,56,222,248
2192290207Sjkim	movups	-80(%rcx,%rax,1),%xmm0
2193290207Sjkim	jnz	.Lxts_dec_loop6
2194290207Sjkim
2195290207Sjkim	movdqa	(%r8),%xmm8
2196290207Sjkim	movdqa	%xmm9,%xmm14
2197290207Sjkim	paddd	%xmm9,%xmm9
2198238405Sjkim.byte	102,15,56,222,209
2199290207Sjkim	paddq	%xmm15,%xmm15
2200290207Sjkim	psrad	$31,%xmm14
2201238405Sjkim.byte	102,15,56,222,217
2202290207Sjkim	pand	%xmm8,%xmm14
2203290207Sjkim	movups	(%r11),%xmm10
2204238405Sjkim.byte	102,15,56,222,225
2205238405Sjkim.byte	102,15,56,222,233
2206238405Sjkim.byte	102,15,56,222,241
2207290207Sjkim	pxor	%xmm14,%xmm15
2208290207Sjkim	movaps	%xmm10,%xmm11
2209238405Sjkim.byte	102,15,56,222,249
2210290207Sjkim	movups	-64(%rcx),%xmm1
2211290207Sjkim
2212290207Sjkim	movdqa	%xmm9,%xmm14
2213238405Sjkim.byte	102,15,56,222,208
2214290207Sjkim	paddd	%xmm9,%xmm9
2215290207Sjkim	pxor	%xmm15,%xmm10
2216238405Sjkim.byte	102,15,56,222,216
2217290207Sjkim	psrad	$31,%xmm14
2218290207Sjkim	paddq	%xmm15,%xmm15
2219238405Sjkim.byte	102,15,56,222,224
2220238405Sjkim.byte	102,15,56,222,232
2221290207Sjkim	pand	%xmm8,%xmm14
2222290207Sjkim	movaps	%xmm11,%xmm12
2223238405Sjkim.byte	102,15,56,222,240
2224290207Sjkim	pxor	%xmm14,%xmm15
2225290207Sjkim	movdqa	%xmm9,%xmm14
2226238405Sjkim.byte	102,15,56,222,248
2227290207Sjkim	movups	-48(%rcx),%xmm0
2228238405Sjkim
2229290207Sjkim	paddd	%xmm9,%xmm9
2230238405Sjkim.byte	102,15,56,222,209
2231290207Sjkim	pxor	%xmm15,%xmm11
2232290207Sjkim	psrad	$31,%xmm14
2233238405Sjkim.byte	102,15,56,222,217
2234290207Sjkim	paddq	%xmm15,%xmm15
2235290207Sjkim	pand	%xmm8,%xmm14
2236238405Sjkim.byte	102,15,56,222,225
2237238405Sjkim.byte	102,15,56,222,233
2238290207Sjkim	movdqa	%xmm13,48(%rsp)
2239290207Sjkim	pxor	%xmm14,%xmm15
2240238405Sjkim.byte	102,15,56,222,241
2241290207Sjkim	movaps	%xmm12,%xmm13
2242290207Sjkim	movdqa	%xmm9,%xmm14
2243238405Sjkim.byte	102,15,56,222,249
2244290207Sjkim	movups	-32(%rcx),%xmm1
2245238405Sjkim
2246290207Sjkim	paddd	%xmm9,%xmm9
2247238405Sjkim.byte	102,15,56,222,208
2248290207Sjkim	pxor	%xmm15,%xmm12
2249290207Sjkim	psrad	$31,%xmm14
2250238405Sjkim.byte	102,15,56,222,216
2251290207Sjkim	paddq	%xmm15,%xmm15
2252290207Sjkim	pand	%xmm8,%xmm14
2253238405Sjkim.byte	102,15,56,222,224
2254238405Sjkim.byte	102,15,56,222,232
2255238405Sjkim.byte	102,15,56,222,240
2256290207Sjkim	pxor	%xmm14,%xmm15
2257290207Sjkim	movaps	%xmm13,%xmm14
2258238405Sjkim.byte	102,15,56,222,248
2259238405Sjkim
2260290207Sjkim	movdqa	%xmm9,%xmm0
2261290207Sjkim	paddd	%xmm9,%xmm9
2262238405Sjkim.byte	102,15,56,222,209
2263290207Sjkim	pxor	%xmm15,%xmm13
2264290207Sjkim	psrad	$31,%xmm0
2265238405Sjkim.byte	102,15,56,222,217
2266290207Sjkim	paddq	%xmm15,%xmm15
2267290207Sjkim	pand	%xmm8,%xmm0
2268238405Sjkim.byte	102,15,56,222,225
2269238405Sjkim.byte	102,15,56,222,233
2270290207Sjkim	pxor	%xmm0,%xmm15
2271290207Sjkim	movups	(%r11),%xmm0
2272238405Sjkim.byte	102,15,56,222,241
2273238405Sjkim.byte	102,15,56,222,249
2274290207Sjkim	movups	16(%r11),%xmm1
2275238405Sjkim
2276290207Sjkim	pxor	%xmm15,%xmm14
2277290207Sjkim.byte	102,15,56,223,84,36,0
2278290207Sjkim	psrad	$31,%xmm9
2279238405Sjkim	paddq	%xmm15,%xmm15
2280290207Sjkim.byte	102,15,56,223,92,36,16
2281290207Sjkim.byte	102,15,56,223,100,36,32
2282238405Sjkim	pand	%xmm8,%xmm9
2283290207Sjkim	movq	%r10,%rax
2284290207Sjkim.byte	102,15,56,223,108,36,48
2285290207Sjkim.byte	102,15,56,223,116,36,64
2286290207Sjkim.byte	102,15,56,223,124,36,80
2287238405Sjkim	pxor	%xmm9,%xmm15
2288238405Sjkim
2289238405Sjkim	leaq	96(%rsi),%rsi
2290290207Sjkim	movups	%xmm2,-96(%rsi)
2291290207Sjkim	movups	%xmm3,-80(%rsi)
2292290207Sjkim	movups	%xmm4,-64(%rsi)
2293290207Sjkim	movups	%xmm5,-48(%rsi)
2294290207Sjkim	movups	%xmm6,-32(%rsi)
2295290207Sjkim	movups	%xmm7,-16(%rsi)
2296238405Sjkim	subq	$96,%rdx
2297238405Sjkim	jnc	.Lxts_dec_grandloop
2298238405Sjkim
2299290207Sjkim	movl	$16+96,%eax
2300290207Sjkim	subl	%r10d,%eax
2301238405Sjkim	movq	%r11,%rcx
2302290207Sjkim	shrl	$4,%eax
2303238405Sjkim
2304238405Sjkim.Lxts_dec_short:
2305290207Sjkim
2306290207Sjkim	movl	%eax,%r10d
2307290207Sjkim	pxor	%xmm0,%xmm10
2308290207Sjkim	pxor	%xmm0,%xmm11
2309238405Sjkim	addq	$96,%rdx
2310238405Sjkim	jz	.Lxts_dec_done
2311238405Sjkim
2312290207Sjkim	pxor	%xmm0,%xmm12
2313296279Sjkim	cmpq	$0x20,%rdx
2314238405Sjkim	jb	.Lxts_dec_one
2315290207Sjkim	pxor	%xmm0,%xmm13
2316238405Sjkim	je	.Lxts_dec_two
2317238405Sjkim
2318290207Sjkim	pxor	%xmm0,%xmm14
2319296279Sjkim	cmpq	$0x40,%rdx
2320238405Sjkim	jb	.Lxts_dec_three
2321238405Sjkim	je	.Lxts_dec_four
2322238405Sjkim
2323238405Sjkim	movdqu	(%rdi),%xmm2
2324238405Sjkim	movdqu	16(%rdi),%xmm3
2325238405Sjkim	movdqu	32(%rdi),%xmm4
2326238405Sjkim	pxor	%xmm10,%xmm2
2327238405Sjkim	movdqu	48(%rdi),%xmm5
2328238405Sjkim	pxor	%xmm11,%xmm3
2329238405Sjkim	movdqu	64(%rdi),%xmm6
2330238405Sjkim	leaq	80(%rdi),%rdi
2331238405Sjkim	pxor	%xmm12,%xmm4
2332238405Sjkim	pxor	%xmm13,%xmm5
2333238405Sjkim	pxor	%xmm14,%xmm6
2334238405Sjkim
2335238405Sjkim	call	_aesni_decrypt6
2336238405Sjkim
2337238405Sjkim	xorps	%xmm10,%xmm2
2338238405Sjkim	xorps	%xmm11,%xmm3
2339238405Sjkim	xorps	%xmm12,%xmm4
2340238405Sjkim	movdqu	%xmm2,(%rsi)
2341238405Sjkim	xorps	%xmm13,%xmm5
2342238405Sjkim	movdqu	%xmm3,16(%rsi)
2343238405Sjkim	xorps	%xmm14,%xmm6
2344238405Sjkim	movdqu	%xmm4,32(%rsi)
2345238405Sjkim	pxor	%xmm14,%xmm14
2346238405Sjkim	movdqu	%xmm5,48(%rsi)
2347238405Sjkim	pcmpgtd	%xmm15,%xmm14
2348238405Sjkim	movdqu	%xmm6,64(%rsi)
2349238405Sjkim	leaq	80(%rsi),%rsi
2350296279Sjkim	pshufd	$0x13,%xmm14,%xmm11
2351238405Sjkim	andq	$15,%r9
2352238405Sjkim	jz	.Lxts_dec_ret
2353238405Sjkim
2354238405Sjkim	movdqa	%xmm15,%xmm10
2355238405Sjkim	paddq	%xmm15,%xmm15
2356238405Sjkim	pand	%xmm8,%xmm11
2357238405Sjkim	pxor	%xmm15,%xmm11
2358238405Sjkim	jmp	.Lxts_dec_done2
2359238405Sjkim
2360238405Sjkim.align	16
2361238405Sjkim.Lxts_dec_one:
2362238405Sjkim	movups	(%rdi),%xmm2
2363238405Sjkim	leaq	16(%rdi),%rdi
2364238405Sjkim	xorps	%xmm10,%xmm2
2365238405Sjkim	movups	(%rcx),%xmm0
2366238405Sjkim	movups	16(%rcx),%xmm1
2367238405Sjkim	leaq	32(%rcx),%rcx
2368238405Sjkim	xorps	%xmm0,%xmm2
2369238405Sjkim.Loop_dec1_12:
2370238405Sjkim.byte	102,15,56,222,209
2371238405Sjkim	decl	%eax
2372238405Sjkim	movups	(%rcx),%xmm1
2373238405Sjkim	leaq	16(%rcx),%rcx
2374290207Sjkim	jnz	.Loop_dec1_12
2375238405Sjkim.byte	102,15,56,223,209
2376238405Sjkim	xorps	%xmm10,%xmm2
2377238405Sjkim	movdqa	%xmm11,%xmm10
2378238405Sjkim	movups	%xmm2,(%rsi)
2379238405Sjkim	movdqa	%xmm12,%xmm11
2380238405Sjkim	leaq	16(%rsi),%rsi
2381238405Sjkim	jmp	.Lxts_dec_done
2382238405Sjkim
2383238405Sjkim.align	16
2384238405Sjkim.Lxts_dec_two:
2385238405Sjkim	movups	(%rdi),%xmm2
2386238405Sjkim	movups	16(%rdi),%xmm3
2387238405Sjkim	leaq	32(%rdi),%rdi
2388238405Sjkim	xorps	%xmm10,%xmm2
2389238405Sjkim	xorps	%xmm11,%xmm3
2390238405Sjkim
2391290207Sjkim	call	_aesni_decrypt2
2392238405Sjkim
2393238405Sjkim	xorps	%xmm10,%xmm2
2394238405Sjkim	movdqa	%xmm12,%xmm10
2395238405Sjkim	xorps	%xmm11,%xmm3
2396238405Sjkim	movdqa	%xmm13,%xmm11
2397238405Sjkim	movups	%xmm2,(%rsi)
2398238405Sjkim	movups	%xmm3,16(%rsi)
2399238405Sjkim	leaq	32(%rsi),%rsi
2400238405Sjkim	jmp	.Lxts_dec_done
2401238405Sjkim
2402238405Sjkim.align	16
2403238405Sjkim.Lxts_dec_three:
2404238405Sjkim	movups	(%rdi),%xmm2
2405238405Sjkim	movups	16(%rdi),%xmm3
2406238405Sjkim	movups	32(%rdi),%xmm4
2407238405Sjkim	leaq	48(%rdi),%rdi
2408238405Sjkim	xorps	%xmm10,%xmm2
2409238405Sjkim	xorps	%xmm11,%xmm3
2410238405Sjkim	xorps	%xmm12,%xmm4
2411238405Sjkim
2412238405Sjkim	call	_aesni_decrypt3
2413238405Sjkim
2414238405Sjkim	xorps	%xmm10,%xmm2
2415238405Sjkim	movdqa	%xmm13,%xmm10
2416238405Sjkim	xorps	%xmm11,%xmm3
2417290207Sjkim	movdqa	%xmm14,%xmm11
2418238405Sjkim	xorps	%xmm12,%xmm4
2419238405Sjkim	movups	%xmm2,(%rsi)
2420238405Sjkim	movups	%xmm3,16(%rsi)
2421238405Sjkim	movups	%xmm4,32(%rsi)
2422238405Sjkim	leaq	48(%rsi),%rsi
2423238405Sjkim	jmp	.Lxts_dec_done
2424238405Sjkim
2425238405Sjkim.align	16
2426238405Sjkim.Lxts_dec_four:
2427238405Sjkim	movups	(%rdi),%xmm2
2428238405Sjkim	movups	16(%rdi),%xmm3
2429238405Sjkim	movups	32(%rdi),%xmm4
2430238405Sjkim	xorps	%xmm10,%xmm2
2431238405Sjkim	movups	48(%rdi),%xmm5
2432238405Sjkim	leaq	64(%rdi),%rdi
2433238405Sjkim	xorps	%xmm11,%xmm3
2434238405Sjkim	xorps	%xmm12,%xmm4
2435238405Sjkim	xorps	%xmm13,%xmm5
2436238405Sjkim
2437238405Sjkim	call	_aesni_decrypt4
2438238405Sjkim
2439290207Sjkim	pxor	%xmm10,%xmm2
2440238405Sjkim	movdqa	%xmm14,%xmm10
2441290207Sjkim	pxor	%xmm11,%xmm3
2442238405Sjkim	movdqa	%xmm15,%xmm11
2443290207Sjkim	pxor	%xmm12,%xmm4
2444290207Sjkim	movdqu	%xmm2,(%rsi)
2445290207Sjkim	pxor	%xmm13,%xmm5
2446290207Sjkim	movdqu	%xmm3,16(%rsi)
2447290207Sjkim	movdqu	%xmm4,32(%rsi)
2448290207Sjkim	movdqu	%xmm5,48(%rsi)
2449238405Sjkim	leaq	64(%rsi),%rsi
2450238405Sjkim	jmp	.Lxts_dec_done
2451238405Sjkim
2452238405Sjkim.align	16
2453238405Sjkim.Lxts_dec_done:
2454238405Sjkim	andq	$15,%r9
2455238405Sjkim	jz	.Lxts_dec_ret
2456238405Sjkim.Lxts_dec_done2:
2457238405Sjkim	movq	%r9,%rdx
2458238405Sjkim	movq	%r11,%rcx
2459238405Sjkim	movl	%r10d,%eax
2460238405Sjkim
2461238405Sjkim	movups	(%rdi),%xmm2
2462238405Sjkim	xorps	%xmm11,%xmm2
2463238405Sjkim	movups	(%rcx),%xmm0
2464238405Sjkim	movups	16(%rcx),%xmm1
2465238405Sjkim	leaq	32(%rcx),%rcx
2466238405Sjkim	xorps	%xmm0,%xmm2
2467238405Sjkim.Loop_dec1_13:
2468238405Sjkim.byte	102,15,56,222,209
2469238405Sjkim	decl	%eax
2470238405Sjkim	movups	(%rcx),%xmm1
2471238405Sjkim	leaq	16(%rcx),%rcx
2472290207Sjkim	jnz	.Loop_dec1_13
2473238405Sjkim.byte	102,15,56,223,209
2474238405Sjkim	xorps	%xmm11,%xmm2
2475238405Sjkim	movups	%xmm2,(%rsi)
2476238405Sjkim
2477238405Sjkim.Lxts_dec_steal:
2478238405Sjkim	movzbl	16(%rdi),%eax
2479238405Sjkim	movzbl	(%rsi),%ecx
2480238405Sjkim	leaq	1(%rdi),%rdi
2481238405Sjkim	movb	%al,(%rsi)
2482238405Sjkim	movb	%cl,16(%rsi)
2483238405Sjkim	leaq	1(%rsi),%rsi
2484238405Sjkim	subq	$1,%rdx
2485238405Sjkim	jnz	.Lxts_dec_steal
2486238405Sjkim
2487238405Sjkim	subq	%r9,%rsi
2488238405Sjkim	movq	%r11,%rcx
2489238405Sjkim	movl	%r10d,%eax
2490238405Sjkim
2491238405Sjkim	movups	(%rsi),%xmm2
2492238405Sjkim	xorps	%xmm10,%xmm2
2493238405Sjkim	movups	(%rcx),%xmm0
2494238405Sjkim	movups	16(%rcx),%xmm1
2495238405Sjkim	leaq	32(%rcx),%rcx
2496238405Sjkim	xorps	%xmm0,%xmm2
2497238405Sjkim.Loop_dec1_14:
2498238405Sjkim.byte	102,15,56,222,209
2499238405Sjkim	decl	%eax
2500238405Sjkim	movups	(%rcx),%xmm1
2501238405Sjkim	leaq	16(%rcx),%rcx
2502290207Sjkim	jnz	.Loop_dec1_14
2503238405Sjkim.byte	102,15,56,223,209
2504238405Sjkim	xorps	%xmm10,%xmm2
2505238405Sjkim	movups	%xmm2,(%rsi)
2506238405Sjkim
2507238405Sjkim.Lxts_dec_ret:
2508290207Sjkim	xorps	%xmm0,%xmm0
2509290207Sjkim	pxor	%xmm1,%xmm1
2510290207Sjkim	pxor	%xmm2,%xmm2
2511290207Sjkim	pxor	%xmm3,%xmm3
2512290207Sjkim	pxor	%xmm4,%xmm4
2513290207Sjkim	pxor	%xmm5,%xmm5
2514290207Sjkim	pxor	%xmm6,%xmm6
2515290207Sjkim	pxor	%xmm7,%xmm7
2516290207Sjkim	movaps	%xmm0,0(%rsp)
2517290207Sjkim	pxor	%xmm8,%xmm8
2518290207Sjkim	movaps	%xmm0,16(%rsp)
2519290207Sjkim	pxor	%xmm9,%xmm9
2520290207Sjkim	movaps	%xmm0,32(%rsp)
2521290207Sjkim	pxor	%xmm10,%xmm10
2522290207Sjkim	movaps	%xmm0,48(%rsp)
2523290207Sjkim	pxor	%xmm11,%xmm11
2524290207Sjkim	movaps	%xmm0,64(%rsp)
2525290207Sjkim	pxor	%xmm12,%xmm12
2526290207Sjkim	movaps	%xmm0,80(%rsp)
2527290207Sjkim	pxor	%xmm13,%xmm13
2528290207Sjkim	movaps	%xmm0,96(%rsp)
2529290207Sjkim	pxor	%xmm14,%xmm14
2530290207Sjkim	pxor	%xmm15,%xmm15
2531290207Sjkim	leaq	(%rbp),%rsp
2532290207Sjkim	popq	%rbp
2533238405Sjkim.Lxts_dec_epilogue:
2534238405Sjkim	.byte	0xf3,0xc3
2535238405Sjkim.size	aesni_xts_decrypt,.-aesni_xts_decrypt
2536238405Sjkim.globl	aesni_cbc_encrypt
2537238405Sjkim.type	aesni_cbc_encrypt,@function
2538238405Sjkim.align	16
2539238405Sjkimaesni_cbc_encrypt:
2540238405Sjkim	testq	%rdx,%rdx
2541238405Sjkim	jz	.Lcbc_ret
2542238405Sjkim
2543238405Sjkim	movl	240(%rcx),%r10d
2544238405Sjkim	movq	%rcx,%r11
2545238405Sjkim	testl	%r9d,%r9d
2546238405Sjkim	jz	.Lcbc_decrypt
2547238405Sjkim
2548238405Sjkim	movups	(%r8),%xmm2
2549238405Sjkim	movl	%r10d,%eax
2550238405Sjkim	cmpq	$16,%rdx
2551238405Sjkim	jb	.Lcbc_enc_tail
2552238405Sjkim	subq	$16,%rdx
2553238405Sjkim	jmp	.Lcbc_enc_loop
2554238405Sjkim.align	16
2555238405Sjkim.Lcbc_enc_loop:
2556238405Sjkim	movups	(%rdi),%xmm3
2557238405Sjkim	leaq	16(%rdi),%rdi
2558238405Sjkim
2559238405Sjkim	movups	(%rcx),%xmm0
2560238405Sjkim	movups	16(%rcx),%xmm1
2561238405Sjkim	xorps	%xmm0,%xmm3
2562238405Sjkim	leaq	32(%rcx),%rcx
2563238405Sjkim	xorps	%xmm3,%xmm2
2564238405Sjkim.Loop_enc1_15:
2565238405Sjkim.byte	102,15,56,220,209
2566238405Sjkim	decl	%eax
2567238405Sjkim	movups	(%rcx),%xmm1
2568238405Sjkim	leaq	16(%rcx),%rcx
2569290207Sjkim	jnz	.Loop_enc1_15
2570238405Sjkim.byte	102,15,56,221,209
2571238405Sjkim	movl	%r10d,%eax
2572238405Sjkim	movq	%r11,%rcx
2573238405Sjkim	movups	%xmm2,0(%rsi)
2574238405Sjkim	leaq	16(%rsi),%rsi
2575238405Sjkim	subq	$16,%rdx
2576238405Sjkim	jnc	.Lcbc_enc_loop
2577238405Sjkim	addq	$16,%rdx
2578238405Sjkim	jnz	.Lcbc_enc_tail
2579290207Sjkim	pxor	%xmm0,%xmm0
2580290207Sjkim	pxor	%xmm1,%xmm1
2581238405Sjkim	movups	%xmm2,(%r8)
2582290207Sjkim	pxor	%xmm2,%xmm2
2583290207Sjkim	pxor	%xmm3,%xmm3
2584238405Sjkim	jmp	.Lcbc_ret
2585238405Sjkim
2586238405Sjkim.Lcbc_enc_tail:
2587238405Sjkim	movq	%rdx,%rcx
2588238405Sjkim	xchgq	%rdi,%rsi
2589290207Sjkim.long	0x9066A4F3
2590238405Sjkim	movl	$16,%ecx
2591238405Sjkim	subq	%rdx,%rcx
2592238405Sjkim	xorl	%eax,%eax
2593290207Sjkim.long	0x9066AAF3
2594238405Sjkim	leaq	-16(%rdi),%rdi
2595238405Sjkim	movl	%r10d,%eax
2596238405Sjkim	movq	%rdi,%rsi
2597238405Sjkim	movq	%r11,%rcx
2598238405Sjkim	xorq	%rdx,%rdx
2599290207Sjkim	jmp	.Lcbc_enc_loop
2600238405Sjkim
2601238405Sjkim.align	16
2602238405Sjkim.Lcbc_decrypt:
2603290207Sjkim	cmpq	$16,%rdx
2604290207Sjkim	jne	.Lcbc_decrypt_bulk
2605290207Sjkim
2606290207Sjkim
2607290207Sjkim
2608290207Sjkim	movdqu	(%rdi),%xmm2
2609290207Sjkim	movdqu	(%r8),%xmm3
2610290207Sjkim	movdqa	%xmm2,%xmm4
2611290207Sjkim	movups	(%rcx),%xmm0
2612290207Sjkim	movups	16(%rcx),%xmm1
2613290207Sjkim	leaq	32(%rcx),%rcx
2614290207Sjkim	xorps	%xmm0,%xmm2
2615290207Sjkim.Loop_dec1_16:
2616290207Sjkim.byte	102,15,56,222,209
2617290207Sjkim	decl	%r10d
2618290207Sjkim	movups	(%rcx),%xmm1
2619290207Sjkim	leaq	16(%rcx),%rcx
2620290207Sjkim	jnz	.Loop_dec1_16
2621290207Sjkim.byte	102,15,56,223,209
2622290207Sjkim	pxor	%xmm0,%xmm0
2623290207Sjkim	pxor	%xmm1,%xmm1
2624290207Sjkim	movdqu	%xmm4,(%r8)
2625290207Sjkim	xorps	%xmm3,%xmm2
2626290207Sjkim	pxor	%xmm3,%xmm3
2627290207Sjkim	movups	%xmm2,(%rsi)
2628290207Sjkim	pxor	%xmm2,%xmm2
2629290207Sjkim	jmp	.Lcbc_ret
2630290207Sjkim.align	16
2631290207Sjkim.Lcbc_decrypt_bulk:
2632290207Sjkim	leaq	(%rsp),%rax
2633290207Sjkim	pushq	%rbp
2634290207Sjkim	subq	$16,%rsp
2635290207Sjkim	andq	$-16,%rsp
2636290207Sjkim	leaq	-8(%rax),%rbp
2637290207Sjkim	movups	(%r8),%xmm10
2638238405Sjkim	movl	%r10d,%eax
2639296279Sjkim	cmpq	$0x50,%rdx
2640290207Sjkim	jbe	.Lcbc_dec_tail
2641290207Sjkim
2642290207Sjkim	movups	(%rcx),%xmm0
2643290207Sjkim	movdqu	0(%rdi),%xmm2
2644290207Sjkim	movdqu	16(%rdi),%xmm3
2645290207Sjkim	movdqa	%xmm2,%xmm11
2646290207Sjkim	movdqu	32(%rdi),%xmm4
2647290207Sjkim	movdqa	%xmm3,%xmm12
2648290207Sjkim	movdqu	48(%rdi),%xmm5
2649290207Sjkim	movdqa	%xmm4,%xmm13
2650290207Sjkim	movdqu	64(%rdi),%xmm6
2651290207Sjkim	movdqa	%xmm5,%xmm14
2652290207Sjkim	movdqu	80(%rdi),%xmm7
2653290207Sjkim	movdqa	%xmm6,%xmm15
2654290207Sjkim	movl	OPENSSL_ia32cap_P+4(%rip),%r9d
2655296279Sjkim	cmpq	$0x70,%rdx
2656290207Sjkim	jbe	.Lcbc_dec_six_or_seven
2657290207Sjkim
2658290207Sjkim	andl	$71303168,%r9d
2659296279Sjkim	subq	$0x50,%rdx
2660290207Sjkim	cmpl	$4194304,%r9d
2661290207Sjkim	je	.Lcbc_dec_loop6_enter
2662296279Sjkim	subq	$0x20,%rdx
2663290207Sjkim	leaq	112(%rcx),%rcx
2664238405Sjkim	jmp	.Lcbc_dec_loop8_enter
2665238405Sjkim.align	16
2666238405Sjkim.Lcbc_dec_loop8:
2667238405Sjkim	movups	%xmm9,(%rsi)
2668238405Sjkim	leaq	16(%rsi),%rsi
2669238405Sjkim.Lcbc_dec_loop8_enter:
2670290207Sjkim	movdqu	96(%rdi),%xmm8
2671290207Sjkim	pxor	%xmm0,%xmm2
2672290207Sjkim	movdqu	112(%rdi),%xmm9
2673290207Sjkim	pxor	%xmm0,%xmm3
2674290207Sjkim	movups	16-112(%rcx),%xmm1
2675290207Sjkim	pxor	%xmm0,%xmm4
2676290207Sjkim	xorq	%r11,%r11
2677296279Sjkim	cmpq	$0x70,%rdx
2678290207Sjkim	pxor	%xmm0,%xmm5
2679290207Sjkim	pxor	%xmm0,%xmm6
2680290207Sjkim	pxor	%xmm0,%xmm7
2681290207Sjkim	pxor	%xmm0,%xmm8
2682238405Sjkim
2683238405Sjkim.byte	102,15,56,222,209
2684290207Sjkim	pxor	%xmm0,%xmm9
2685290207Sjkim	movups	32-112(%rcx),%xmm0
2686238405Sjkim.byte	102,15,56,222,217
2687238405Sjkim.byte	102,15,56,222,225
2688238405Sjkim.byte	102,15,56,222,233
2689238405Sjkim.byte	102,15,56,222,241
2690238405Sjkim.byte	102,15,56,222,249
2691238405Sjkim.byte	102,68,15,56,222,193
2692290207Sjkim	setnc	%r11b
2693290207Sjkim	shlq	$7,%r11
2694238405Sjkim.byte	102,68,15,56,222,201
2695290207Sjkim	addq	%rdi,%r11
2696290207Sjkim	movups	48-112(%rcx),%xmm1
2697290207Sjkim.byte	102,15,56,222,208
2698290207Sjkim.byte	102,15,56,222,216
2699290207Sjkim.byte	102,15,56,222,224
2700290207Sjkim.byte	102,15,56,222,232
2701290207Sjkim.byte	102,15,56,222,240
2702290207Sjkim.byte	102,15,56,222,248
2703290207Sjkim.byte	102,68,15,56,222,192
2704290207Sjkim.byte	102,68,15,56,222,200
2705290207Sjkim	movups	64-112(%rcx),%xmm0
2706290207Sjkim	nop
2707290207Sjkim.byte	102,15,56,222,209
2708290207Sjkim.byte	102,15,56,222,217
2709290207Sjkim.byte	102,15,56,222,225
2710290207Sjkim.byte	102,15,56,222,233
2711290207Sjkim.byte	102,15,56,222,241
2712290207Sjkim.byte	102,15,56,222,249
2713290207Sjkim.byte	102,68,15,56,222,193
2714290207Sjkim.byte	102,68,15,56,222,201
2715290207Sjkim	movups	80-112(%rcx),%xmm1
2716290207Sjkim	nop
2717290207Sjkim.byte	102,15,56,222,208
2718290207Sjkim.byte	102,15,56,222,216
2719290207Sjkim.byte	102,15,56,222,224
2720290207Sjkim.byte	102,15,56,222,232
2721290207Sjkim.byte	102,15,56,222,240
2722290207Sjkim.byte	102,15,56,222,248
2723290207Sjkim.byte	102,68,15,56,222,192
2724290207Sjkim.byte	102,68,15,56,222,200
2725290207Sjkim	movups	96-112(%rcx),%xmm0
2726290207Sjkim	nop
2727290207Sjkim.byte	102,15,56,222,209
2728290207Sjkim.byte	102,15,56,222,217
2729290207Sjkim.byte	102,15,56,222,225
2730290207Sjkim.byte	102,15,56,222,233
2731290207Sjkim.byte	102,15,56,222,241
2732290207Sjkim.byte	102,15,56,222,249
2733290207Sjkim.byte	102,68,15,56,222,193
2734290207Sjkim.byte	102,68,15,56,222,201
2735290207Sjkim	movups	112-112(%rcx),%xmm1
2736290207Sjkim	nop
2737290207Sjkim.byte	102,15,56,222,208
2738290207Sjkim.byte	102,15,56,222,216
2739290207Sjkim.byte	102,15,56,222,224
2740290207Sjkim.byte	102,15,56,222,232
2741290207Sjkim.byte	102,15,56,222,240
2742290207Sjkim.byte	102,15,56,222,248
2743290207Sjkim.byte	102,68,15,56,222,192
2744290207Sjkim.byte	102,68,15,56,222,200
2745290207Sjkim	movups	128-112(%rcx),%xmm0
2746290207Sjkim	nop
2747290207Sjkim.byte	102,15,56,222,209
2748290207Sjkim.byte	102,15,56,222,217
2749290207Sjkim.byte	102,15,56,222,225
2750290207Sjkim.byte	102,15,56,222,233
2751290207Sjkim.byte	102,15,56,222,241
2752290207Sjkim.byte	102,15,56,222,249
2753290207Sjkim.byte	102,68,15,56,222,193
2754290207Sjkim.byte	102,68,15,56,222,201
2755290207Sjkim	movups	144-112(%rcx),%xmm1
2756290207Sjkim	cmpl	$11,%eax
2757290207Sjkim.byte	102,15,56,222,208
2758290207Sjkim.byte	102,15,56,222,216
2759290207Sjkim.byte	102,15,56,222,224
2760290207Sjkim.byte	102,15,56,222,232
2761290207Sjkim.byte	102,15,56,222,240
2762290207Sjkim.byte	102,15,56,222,248
2763290207Sjkim.byte	102,68,15,56,222,192
2764290207Sjkim.byte	102,68,15,56,222,200
2765290207Sjkim	movups	160-112(%rcx),%xmm0
2766290207Sjkim	jb	.Lcbc_dec_done
2767290207Sjkim.byte	102,15,56,222,209
2768290207Sjkim.byte	102,15,56,222,217
2769290207Sjkim.byte	102,15,56,222,225
2770290207Sjkim.byte	102,15,56,222,233
2771290207Sjkim.byte	102,15,56,222,241
2772290207Sjkim.byte	102,15,56,222,249
2773290207Sjkim.byte	102,68,15,56,222,193
2774290207Sjkim.byte	102,68,15,56,222,201
2775290207Sjkim	movups	176-112(%rcx),%xmm1
2776290207Sjkim	nop
2777290207Sjkim.byte	102,15,56,222,208
2778290207Sjkim.byte	102,15,56,222,216
2779290207Sjkim.byte	102,15,56,222,224
2780290207Sjkim.byte	102,15,56,222,232
2781290207Sjkim.byte	102,15,56,222,240
2782290207Sjkim.byte	102,15,56,222,248
2783290207Sjkim.byte	102,68,15,56,222,192
2784290207Sjkim.byte	102,68,15,56,222,200
2785290207Sjkim	movups	192-112(%rcx),%xmm0
2786290207Sjkim	je	.Lcbc_dec_done
2787290207Sjkim.byte	102,15,56,222,209
2788290207Sjkim.byte	102,15,56,222,217
2789290207Sjkim.byte	102,15,56,222,225
2790290207Sjkim.byte	102,15,56,222,233
2791290207Sjkim.byte	102,15,56,222,241
2792290207Sjkim.byte	102,15,56,222,249
2793290207Sjkim.byte	102,68,15,56,222,193
2794290207Sjkim.byte	102,68,15,56,222,201
2795290207Sjkim	movups	208-112(%rcx),%xmm1
2796290207Sjkim	nop
2797290207Sjkim.byte	102,15,56,222,208
2798290207Sjkim.byte	102,15,56,222,216
2799290207Sjkim.byte	102,15,56,222,224
2800290207Sjkim.byte	102,15,56,222,232
2801290207Sjkim.byte	102,15,56,222,240
2802290207Sjkim.byte	102,15,56,222,248
2803290207Sjkim.byte	102,68,15,56,222,192
2804290207Sjkim.byte	102,68,15,56,222,200
2805290207Sjkim	movups	224-112(%rcx),%xmm0
2806290207Sjkim	jmp	.Lcbc_dec_done
2807290207Sjkim.align	16
2808290207Sjkim.Lcbc_dec_done:
2809290207Sjkim.byte	102,15,56,222,209
2810290207Sjkim.byte	102,15,56,222,217
2811290207Sjkim	pxor	%xmm0,%xmm10
2812290207Sjkim	pxor	%xmm0,%xmm11
2813290207Sjkim.byte	102,15,56,222,225
2814290207Sjkim.byte	102,15,56,222,233
2815290207Sjkim	pxor	%xmm0,%xmm12
2816290207Sjkim	pxor	%xmm0,%xmm13
2817290207Sjkim.byte	102,15,56,222,241
2818290207Sjkim.byte	102,15,56,222,249
2819290207Sjkim	pxor	%xmm0,%xmm14
2820290207Sjkim	pxor	%xmm0,%xmm15
2821290207Sjkim.byte	102,68,15,56,222,193
2822290207Sjkim.byte	102,68,15,56,222,201
2823290207Sjkim	movdqu	80(%rdi),%xmm1
2824238405Sjkim
2825290207Sjkim.byte	102,65,15,56,223,210
2826290207Sjkim	movdqu	96(%rdi),%xmm10
2827290207Sjkim	pxor	%xmm0,%xmm1
2828290207Sjkim.byte	102,65,15,56,223,219
2829290207Sjkim	pxor	%xmm0,%xmm10
2830290207Sjkim	movdqu	112(%rdi),%xmm0
2831290207Sjkim.byte	102,65,15,56,223,228
2832290207Sjkim	leaq	128(%rdi),%rdi
2833290207Sjkim	movdqu	0(%r11),%xmm11
2834290207Sjkim.byte	102,65,15,56,223,237
2835290207Sjkim.byte	102,65,15,56,223,246
2836290207Sjkim	movdqu	16(%r11),%xmm12
2837290207Sjkim	movdqu	32(%r11),%xmm13
2838290207Sjkim.byte	102,65,15,56,223,255
2839290207Sjkim.byte	102,68,15,56,223,193
2840290207Sjkim	movdqu	48(%r11),%xmm14
2841290207Sjkim	movdqu	64(%r11),%xmm15
2842290207Sjkim.byte	102,69,15,56,223,202
2843290207Sjkim	movdqa	%xmm0,%xmm10
2844290207Sjkim	movdqu	80(%r11),%xmm1
2845290207Sjkim	movups	-112(%rcx),%xmm0
2846238405Sjkim
2847238405Sjkim	movups	%xmm2,(%rsi)
2848290207Sjkim	movdqa	%xmm11,%xmm2
2849238405Sjkim	movups	%xmm3,16(%rsi)
2850290207Sjkim	movdqa	%xmm12,%xmm3
2851238405Sjkim	movups	%xmm4,32(%rsi)
2852290207Sjkim	movdqa	%xmm13,%xmm4
2853238405Sjkim	movups	%xmm5,48(%rsi)
2854290207Sjkim	movdqa	%xmm14,%xmm5
2855238405Sjkim	movups	%xmm6,64(%rsi)
2856290207Sjkim	movdqa	%xmm15,%xmm6
2857238405Sjkim	movups	%xmm7,80(%rsi)
2858290207Sjkim	movdqa	%xmm1,%xmm7
2859238405Sjkim	movups	%xmm8,96(%rsi)
2860238405Sjkim	leaq	112(%rsi),%rsi
2861290207Sjkim
2862296279Sjkim	subq	$0x80,%rdx
2863238405Sjkim	ja	.Lcbc_dec_loop8
2864238405Sjkim
2865238405Sjkim	movaps	%xmm9,%xmm2
2866290207Sjkim	leaq	-112(%rcx),%rcx
2867296279Sjkim	addq	$0x70,%rdx
2868290207Sjkim	jle	.Lcbc_dec_clear_tail_collected
2869290207Sjkim	movups	%xmm9,(%rsi)
2870238405Sjkim	leaq	16(%rsi),%rsi
2871296279Sjkim	cmpq	$0x50,%rdx
2872290207Sjkim	jbe	.Lcbc_dec_tail
2873290207Sjkim
2874290207Sjkim	movaps	%xmm11,%xmm2
2875290207Sjkim.Lcbc_dec_six_or_seven:
2876296279Sjkim	cmpq	$0x60,%rdx
2877290207Sjkim	ja	.Lcbc_dec_seven
2878290207Sjkim
2879290207Sjkim	movaps	%xmm7,%xmm8
2880290207Sjkim	call	_aesni_decrypt6
2881290207Sjkim	pxor	%xmm10,%xmm2
2882290207Sjkim	movaps	%xmm8,%xmm10
2883290207Sjkim	pxor	%xmm11,%xmm3
2884290207Sjkim	movdqu	%xmm2,(%rsi)
2885290207Sjkim	pxor	%xmm12,%xmm4
2886290207Sjkim	movdqu	%xmm3,16(%rsi)
2887290207Sjkim	pxor	%xmm3,%xmm3
2888290207Sjkim	pxor	%xmm13,%xmm5
2889290207Sjkim	movdqu	%xmm4,32(%rsi)
2890290207Sjkim	pxor	%xmm4,%xmm4
2891290207Sjkim	pxor	%xmm14,%xmm6
2892290207Sjkim	movdqu	%xmm5,48(%rsi)
2893290207Sjkim	pxor	%xmm5,%xmm5
2894290207Sjkim	pxor	%xmm15,%xmm7
2895290207Sjkim	movdqu	%xmm6,64(%rsi)
2896290207Sjkim	pxor	%xmm6,%xmm6
2897290207Sjkim	leaq	80(%rsi),%rsi
2898290207Sjkim	movdqa	%xmm7,%xmm2
2899290207Sjkim	pxor	%xmm7,%xmm7
2900290207Sjkim	jmp	.Lcbc_dec_tail_collected
2901290207Sjkim
2902290207Sjkim.align	16
2903290207Sjkim.Lcbc_dec_seven:
2904290207Sjkim	movups	96(%rdi),%xmm8
2905290207Sjkim	xorps	%xmm9,%xmm9
2906290207Sjkim	call	_aesni_decrypt8
2907290207Sjkim	movups	80(%rdi),%xmm9
2908290207Sjkim	pxor	%xmm10,%xmm2
2909290207Sjkim	movups	96(%rdi),%xmm10
2910290207Sjkim	pxor	%xmm11,%xmm3
2911290207Sjkim	movdqu	%xmm2,(%rsi)
2912290207Sjkim	pxor	%xmm12,%xmm4
2913290207Sjkim	movdqu	%xmm3,16(%rsi)
2914290207Sjkim	pxor	%xmm3,%xmm3
2915290207Sjkim	pxor	%xmm13,%xmm5
2916290207Sjkim	movdqu	%xmm4,32(%rsi)
2917290207Sjkim	pxor	%xmm4,%xmm4
2918290207Sjkim	pxor	%xmm14,%xmm6
2919290207Sjkim	movdqu	%xmm5,48(%rsi)
2920290207Sjkim	pxor	%xmm5,%xmm5
2921290207Sjkim	pxor	%xmm15,%xmm7
2922290207Sjkim	movdqu	%xmm6,64(%rsi)
2923290207Sjkim	pxor	%xmm6,%xmm6
2924290207Sjkim	pxor	%xmm9,%xmm8
2925290207Sjkim	movdqu	%xmm7,80(%rsi)
2926290207Sjkim	pxor	%xmm7,%xmm7
2927290207Sjkim	leaq	96(%rsi),%rsi
2928290207Sjkim	movdqa	%xmm8,%xmm2
2929290207Sjkim	pxor	%xmm8,%xmm8
2930290207Sjkim	pxor	%xmm9,%xmm9
2931290207Sjkim	jmp	.Lcbc_dec_tail_collected
2932290207Sjkim
2933290207Sjkim.align	16
2934290207Sjkim.Lcbc_dec_loop6:
2935290207Sjkim	movups	%xmm7,(%rsi)
2936290207Sjkim	leaq	16(%rsi),%rsi
2937290207Sjkim	movdqu	0(%rdi),%xmm2
2938290207Sjkim	movdqu	16(%rdi),%xmm3
2939290207Sjkim	movdqa	%xmm2,%xmm11
2940290207Sjkim	movdqu	32(%rdi),%xmm4
2941290207Sjkim	movdqa	%xmm3,%xmm12
2942290207Sjkim	movdqu	48(%rdi),%xmm5
2943290207Sjkim	movdqa	%xmm4,%xmm13
2944290207Sjkim	movdqu	64(%rdi),%xmm6
2945290207Sjkim	movdqa	%xmm5,%xmm14
2946290207Sjkim	movdqu	80(%rdi),%xmm7
2947290207Sjkim	movdqa	%xmm6,%xmm15
2948290207Sjkim.Lcbc_dec_loop6_enter:
2949290207Sjkim	leaq	96(%rdi),%rdi
2950290207Sjkim	movdqa	%xmm7,%xmm8
2951290207Sjkim
2952290207Sjkim	call	_aesni_decrypt6
2953290207Sjkim
2954290207Sjkim	pxor	%xmm10,%xmm2
2955290207Sjkim	movdqa	%xmm8,%xmm10
2956290207Sjkim	pxor	%xmm11,%xmm3
2957290207Sjkim	movdqu	%xmm2,(%rsi)
2958290207Sjkim	pxor	%xmm12,%xmm4
2959290207Sjkim	movdqu	%xmm3,16(%rsi)
2960290207Sjkim	pxor	%xmm13,%xmm5
2961290207Sjkim	movdqu	%xmm4,32(%rsi)
2962290207Sjkim	pxor	%xmm14,%xmm6
2963290207Sjkim	movq	%r11,%rcx
2964290207Sjkim	movdqu	%xmm5,48(%rsi)
2965290207Sjkim	pxor	%xmm15,%xmm7
2966290207Sjkim	movl	%r10d,%eax
2967290207Sjkim	movdqu	%xmm6,64(%rsi)
2968290207Sjkim	leaq	80(%rsi),%rsi
2969296279Sjkim	subq	$0x60,%rdx
2970290207Sjkim	ja	.Lcbc_dec_loop6
2971290207Sjkim
2972290207Sjkim	movdqa	%xmm7,%xmm2
2973296279Sjkim	addq	$0x50,%rdx
2974290207Sjkim	jle	.Lcbc_dec_clear_tail_collected
2975290207Sjkim	movups	%xmm7,(%rsi)
2976290207Sjkim	leaq	16(%rsi),%rsi
2977290207Sjkim
2978238405Sjkim.Lcbc_dec_tail:
2979238405Sjkim	movups	(%rdi),%xmm2
2980296279Sjkim	subq	$0x10,%rdx
2981238405Sjkim	jbe	.Lcbc_dec_one
2982238405Sjkim
2983238405Sjkim	movups	16(%rdi),%xmm3
2984290207Sjkim	movaps	%xmm2,%xmm11
2985296279Sjkim	subq	$0x10,%rdx
2986238405Sjkim	jbe	.Lcbc_dec_two
2987238405Sjkim
2988238405Sjkim	movups	32(%rdi),%xmm4
2989290207Sjkim	movaps	%xmm3,%xmm12
2990296279Sjkim	subq	$0x10,%rdx
2991238405Sjkim	jbe	.Lcbc_dec_three
2992238405Sjkim
2993238405Sjkim	movups	48(%rdi),%xmm5
2994290207Sjkim	movaps	%xmm4,%xmm13
2995296279Sjkim	subq	$0x10,%rdx
2996238405Sjkim	jbe	.Lcbc_dec_four
2997238405Sjkim
2998238405Sjkim	movups	64(%rdi),%xmm6
2999290207Sjkim	movaps	%xmm5,%xmm14
3000290207Sjkim	movaps	%xmm6,%xmm15
3001290207Sjkim	xorps	%xmm7,%xmm7
3002290207Sjkim	call	_aesni_decrypt6
3003290207Sjkim	pxor	%xmm10,%xmm2
3004290207Sjkim	movaps	%xmm15,%xmm10
3005290207Sjkim	pxor	%xmm11,%xmm3
3006290207Sjkim	movdqu	%xmm2,(%rsi)
3007290207Sjkim	pxor	%xmm12,%xmm4
3008290207Sjkim	movdqu	%xmm3,16(%rsi)
3009290207Sjkim	pxor	%xmm3,%xmm3
3010290207Sjkim	pxor	%xmm13,%xmm5
3011290207Sjkim	movdqu	%xmm4,32(%rsi)
3012290207Sjkim	pxor	%xmm4,%xmm4
3013290207Sjkim	pxor	%xmm14,%xmm6
3014290207Sjkim	movdqu	%xmm5,48(%rsi)
3015290207Sjkim	pxor	%xmm5,%xmm5
3016290207Sjkim	leaq	64(%rsi),%rsi
3017290207Sjkim	movdqa	%xmm6,%xmm2
3018290207Sjkim	pxor	%xmm6,%xmm6
3019290207Sjkim	pxor	%xmm7,%xmm7
3020296279Sjkim	subq	$0x10,%rdx
3021290207Sjkim	jmp	.Lcbc_dec_tail_collected
3022238405Sjkim
3023238405Sjkim.align	16
3024238405Sjkim.Lcbc_dec_one:
3025290207Sjkim	movaps	%xmm2,%xmm11
3026238405Sjkim	movups	(%rcx),%xmm0
3027238405Sjkim	movups	16(%rcx),%xmm1
3028238405Sjkim	leaq	32(%rcx),%rcx
3029238405Sjkim	xorps	%xmm0,%xmm2
3030290207Sjkim.Loop_dec1_17:
3031238405Sjkim.byte	102,15,56,222,209
3032238405Sjkim	decl	%eax
3033238405Sjkim	movups	(%rcx),%xmm1
3034238405Sjkim	leaq	16(%rcx),%rcx
3035290207Sjkim	jnz	.Loop_dec1_17
3036238405Sjkim.byte	102,15,56,223,209
3037290207Sjkim	xorps	%xmm10,%xmm2
3038290207Sjkim	movaps	%xmm11,%xmm10
3039238405Sjkim	jmp	.Lcbc_dec_tail_collected
3040238405Sjkim.align	16
3041238405Sjkim.Lcbc_dec_two:
3042290207Sjkim	movaps	%xmm3,%xmm12
3043290207Sjkim	call	_aesni_decrypt2
3044290207Sjkim	pxor	%xmm10,%xmm2
3045290207Sjkim	movaps	%xmm12,%xmm10
3046290207Sjkim	pxor	%xmm11,%xmm3
3047290207Sjkim	movdqu	%xmm2,(%rsi)
3048290207Sjkim	movdqa	%xmm3,%xmm2
3049290207Sjkim	pxor	%xmm3,%xmm3
3050238405Sjkim	leaq	16(%rsi),%rsi
3051238405Sjkim	jmp	.Lcbc_dec_tail_collected
3052238405Sjkim.align	16
3053238405Sjkim.Lcbc_dec_three:
3054290207Sjkim	movaps	%xmm4,%xmm13
3055238405Sjkim	call	_aesni_decrypt3
3056290207Sjkim	pxor	%xmm10,%xmm2
3057290207Sjkim	movaps	%xmm13,%xmm10
3058290207Sjkim	pxor	%xmm11,%xmm3
3059290207Sjkim	movdqu	%xmm2,(%rsi)
3060290207Sjkim	pxor	%xmm12,%xmm4
3061290207Sjkim	movdqu	%xmm3,16(%rsi)
3062290207Sjkim	pxor	%xmm3,%xmm3
3063290207Sjkim	movdqa	%xmm4,%xmm2
3064290207Sjkim	pxor	%xmm4,%xmm4
3065238405Sjkim	leaq	32(%rsi),%rsi
3066238405Sjkim	jmp	.Lcbc_dec_tail_collected
3067238405Sjkim.align	16
3068238405Sjkim.Lcbc_dec_four:
3069290207Sjkim	movaps	%xmm5,%xmm14
3070238405Sjkim	call	_aesni_decrypt4
3071290207Sjkim	pxor	%xmm10,%xmm2
3072290207Sjkim	movaps	%xmm14,%xmm10
3073290207Sjkim	pxor	%xmm11,%xmm3
3074290207Sjkim	movdqu	%xmm2,(%rsi)
3075290207Sjkim	pxor	%xmm12,%xmm4
3076290207Sjkim	movdqu	%xmm3,16(%rsi)
3077290207Sjkim	pxor	%xmm3,%xmm3
3078290207Sjkim	pxor	%xmm13,%xmm5
3079290207Sjkim	movdqu	%xmm4,32(%rsi)
3080290207Sjkim	pxor	%xmm4,%xmm4
3081290207Sjkim	movdqa	%xmm5,%xmm2
3082290207Sjkim	pxor	%xmm5,%xmm5
3083238405Sjkim	leaq	48(%rsi),%rsi
3084238405Sjkim	jmp	.Lcbc_dec_tail_collected
3085290207Sjkim
3086238405Sjkim.align	16
3087290207Sjkim.Lcbc_dec_clear_tail_collected:
3088290207Sjkim	pxor	%xmm3,%xmm3
3089290207Sjkim	pxor	%xmm4,%xmm4
3090290207Sjkim	pxor	%xmm5,%xmm5
3091290207Sjkim	pxor	%xmm6,%xmm6
3092290207Sjkim	pxor	%xmm7,%xmm7
3093290207Sjkim	pxor	%xmm8,%xmm8
3094290207Sjkim	pxor	%xmm9,%xmm9
3095238405Sjkim.Lcbc_dec_tail_collected:
3096290207Sjkim	movups	%xmm10,(%r8)
3097238405Sjkim	andq	$15,%rdx
3098238405Sjkim	jnz	.Lcbc_dec_tail_partial
3099238405Sjkim	movups	%xmm2,(%rsi)
3100290207Sjkim	pxor	%xmm2,%xmm2
3101238405Sjkim	jmp	.Lcbc_dec_ret
3102238405Sjkim.align	16
3103238405Sjkim.Lcbc_dec_tail_partial:
3104290207Sjkim	movaps	%xmm2,(%rsp)
3105290207Sjkim	pxor	%xmm2,%xmm2
3106238405Sjkim	movq	$16,%rcx
3107238405Sjkim	movq	%rsi,%rdi
3108238405Sjkim	subq	%rdx,%rcx
3109290207Sjkim	leaq	(%rsp),%rsi
3110290207Sjkim.long	0x9066A4F3
3111290207Sjkim	movdqa	%xmm2,(%rsp)
3112238405Sjkim
3113238405Sjkim.Lcbc_dec_ret:
3114290207Sjkim	xorps	%xmm0,%xmm0
3115290207Sjkim	pxor	%xmm1,%xmm1
3116290207Sjkim	leaq	(%rbp),%rsp
3117290207Sjkim	popq	%rbp
3118238405Sjkim.Lcbc_ret:
3119238405Sjkim	.byte	0xf3,0xc3
3120238405Sjkim.size	aesni_cbc_encrypt,.-aesni_cbc_encrypt
3121238405Sjkim.globl	aesni_set_decrypt_key
3122238405Sjkim.type	aesni_set_decrypt_key,@function
3123238405Sjkim.align	16
3124238405Sjkimaesni_set_decrypt_key:
3125290207Sjkim.byte	0x48,0x83,0xEC,0x08
3126238405Sjkim	call	__aesni_set_encrypt_key
3127238405Sjkim	shll	$4,%esi
3128238405Sjkim	testl	%eax,%eax
3129238405Sjkim	jnz	.Ldec_key_ret
3130238405Sjkim	leaq	16(%rdx,%rsi,1),%rdi
3131238405Sjkim
3132238405Sjkim	movups	(%rdx),%xmm0
3133238405Sjkim	movups	(%rdi),%xmm1
3134238405Sjkim	movups	%xmm0,(%rdi)
3135238405Sjkim	movups	%xmm1,(%rdx)
3136238405Sjkim	leaq	16(%rdx),%rdx
3137238405Sjkim	leaq	-16(%rdi),%rdi
3138238405Sjkim
3139238405Sjkim.Ldec_key_inverse:
3140238405Sjkim	movups	(%rdx),%xmm0
3141238405Sjkim	movups	(%rdi),%xmm1
3142238405Sjkim.byte	102,15,56,219,192
3143238405Sjkim.byte	102,15,56,219,201
3144238405Sjkim	leaq	16(%rdx),%rdx
3145238405Sjkim	leaq	-16(%rdi),%rdi
3146238405Sjkim	movups	%xmm0,16(%rdi)
3147238405Sjkim	movups	%xmm1,-16(%rdx)
3148238405Sjkim	cmpq	%rdx,%rdi
3149238405Sjkim	ja	.Ldec_key_inverse
3150238405Sjkim
3151238405Sjkim	movups	(%rdx),%xmm0
3152238405Sjkim.byte	102,15,56,219,192
3153290207Sjkim	pxor	%xmm1,%xmm1
3154238405Sjkim	movups	%xmm0,(%rdi)
3155290207Sjkim	pxor	%xmm0,%xmm0
3156238405Sjkim.Ldec_key_ret:
3157238405Sjkim	addq	$8,%rsp
3158238405Sjkim	.byte	0xf3,0xc3
3159238405Sjkim.LSEH_end_set_decrypt_key:
3160238405Sjkim.size	aesni_set_decrypt_key,.-aesni_set_decrypt_key
3161238405Sjkim.globl	aesni_set_encrypt_key
3162238405Sjkim.type	aesni_set_encrypt_key,@function
3163238405Sjkim.align	16
3164238405Sjkimaesni_set_encrypt_key:
3165238405Sjkim__aesni_set_encrypt_key:
3166290207Sjkim.byte	0x48,0x83,0xEC,0x08
3167238405Sjkim	movq	$-1,%rax
3168238405Sjkim	testq	%rdi,%rdi
3169238405Sjkim	jz	.Lenc_key_ret
3170238405Sjkim	testq	%rdx,%rdx
3171238405Sjkim	jz	.Lenc_key_ret
3172238405Sjkim
3173290207Sjkim	movl	$268437504,%r10d
3174238405Sjkim	movups	(%rdi),%xmm0
3175238405Sjkim	xorps	%xmm4,%xmm4
3176290207Sjkim	andl	OPENSSL_ia32cap_P+4(%rip),%r10d
3177238405Sjkim	leaq	16(%rdx),%rax
3178238405Sjkim	cmpl	$256,%esi
3179238405Sjkim	je	.L14rounds
3180238405Sjkim	cmpl	$192,%esi
3181238405Sjkim	je	.L12rounds
3182238405Sjkim	cmpl	$128,%esi
3183238405Sjkim	jne	.Lbad_keybits
3184238405Sjkim
3185238405Sjkim.L10rounds:
3186238405Sjkim	movl	$9,%esi
3187290207Sjkim	cmpl	$268435456,%r10d
3188290207Sjkim	je	.L10rounds_alt
3189290207Sjkim
3190238405Sjkim	movups	%xmm0,(%rdx)
3191238405Sjkim.byte	102,15,58,223,200,1
3192238405Sjkim	call	.Lkey_expansion_128_cold
3193238405Sjkim.byte	102,15,58,223,200,2
3194238405Sjkim	call	.Lkey_expansion_128
3195238405Sjkim.byte	102,15,58,223,200,4
3196238405Sjkim	call	.Lkey_expansion_128
3197238405Sjkim.byte	102,15,58,223,200,8
3198238405Sjkim	call	.Lkey_expansion_128
3199238405Sjkim.byte	102,15,58,223,200,16
3200238405Sjkim	call	.Lkey_expansion_128
3201238405Sjkim.byte	102,15,58,223,200,32
3202238405Sjkim	call	.Lkey_expansion_128
3203238405Sjkim.byte	102,15,58,223,200,64
3204238405Sjkim	call	.Lkey_expansion_128
3205238405Sjkim.byte	102,15,58,223,200,128
3206238405Sjkim	call	.Lkey_expansion_128
3207238405Sjkim.byte	102,15,58,223,200,27
3208238405Sjkim	call	.Lkey_expansion_128
3209238405Sjkim.byte	102,15,58,223,200,54
3210238405Sjkim	call	.Lkey_expansion_128
3211238405Sjkim	movups	%xmm0,(%rax)
3212238405Sjkim	movl	%esi,80(%rax)
3213238405Sjkim	xorl	%eax,%eax
3214238405Sjkim	jmp	.Lenc_key_ret
3215238405Sjkim
3216238405Sjkim.align	16
3217290207Sjkim.L10rounds_alt:
3218290207Sjkim	movdqa	.Lkey_rotate(%rip),%xmm5
3219290207Sjkim	movl	$8,%r10d
3220290207Sjkim	movdqa	.Lkey_rcon1(%rip),%xmm4
3221290207Sjkim	movdqa	%xmm0,%xmm2
3222290207Sjkim	movdqu	%xmm0,(%rdx)
3223290207Sjkim	jmp	.Loop_key128
3224290207Sjkim
3225290207Sjkim.align	16
3226290207Sjkim.Loop_key128:
3227290207Sjkim.byte	102,15,56,0,197
3228290207Sjkim.byte	102,15,56,221,196
3229290207Sjkim	pslld	$1,%xmm4
3230290207Sjkim	leaq	16(%rax),%rax
3231290207Sjkim
3232290207Sjkim	movdqa	%xmm2,%xmm3
3233290207Sjkim	pslldq	$4,%xmm2
3234290207Sjkim	pxor	%xmm2,%xmm3
3235290207Sjkim	pslldq	$4,%xmm2
3236290207Sjkim	pxor	%xmm2,%xmm3
3237290207Sjkim	pslldq	$4,%xmm2
3238290207Sjkim	pxor	%xmm3,%xmm2
3239290207Sjkim
3240290207Sjkim	pxor	%xmm2,%xmm0
3241290207Sjkim	movdqu	%xmm0,-16(%rax)
3242290207Sjkim	movdqa	%xmm0,%xmm2
3243290207Sjkim
3244290207Sjkim	decl	%r10d
3245290207Sjkim	jnz	.Loop_key128
3246290207Sjkim
3247290207Sjkim	movdqa	.Lkey_rcon1b(%rip),%xmm4
3248290207Sjkim
3249290207Sjkim.byte	102,15,56,0,197
3250290207Sjkim.byte	102,15,56,221,196
3251290207Sjkim	pslld	$1,%xmm4
3252290207Sjkim
3253290207Sjkim	movdqa	%xmm2,%xmm3
3254290207Sjkim	pslldq	$4,%xmm2
3255290207Sjkim	pxor	%xmm2,%xmm3
3256290207Sjkim	pslldq	$4,%xmm2
3257290207Sjkim	pxor	%xmm2,%xmm3
3258290207Sjkim	pslldq	$4,%xmm2
3259290207Sjkim	pxor	%xmm3,%xmm2
3260290207Sjkim
3261290207Sjkim	pxor	%xmm2,%xmm0
3262290207Sjkim	movdqu	%xmm0,(%rax)
3263290207Sjkim
3264290207Sjkim	movdqa	%xmm0,%xmm2
3265290207Sjkim.byte	102,15,56,0,197
3266290207Sjkim.byte	102,15,56,221,196
3267290207Sjkim
3268290207Sjkim	movdqa	%xmm2,%xmm3
3269290207Sjkim	pslldq	$4,%xmm2
3270290207Sjkim	pxor	%xmm2,%xmm3
3271290207Sjkim	pslldq	$4,%xmm2
3272290207Sjkim	pxor	%xmm2,%xmm3
3273290207Sjkim	pslldq	$4,%xmm2
3274290207Sjkim	pxor	%xmm3,%xmm2
3275290207Sjkim
3276290207Sjkim	pxor	%xmm2,%xmm0
3277290207Sjkim	movdqu	%xmm0,16(%rax)
3278290207Sjkim
3279290207Sjkim	movl	%esi,96(%rax)
3280290207Sjkim	xorl	%eax,%eax
3281290207Sjkim	jmp	.Lenc_key_ret
3282290207Sjkim
3283290207Sjkim.align	16
3284238405Sjkim.L12rounds:
3285238405Sjkim	movq	16(%rdi),%xmm2
3286238405Sjkim	movl	$11,%esi
3287290207Sjkim	cmpl	$268435456,%r10d
3288290207Sjkim	je	.L12rounds_alt
3289290207Sjkim
3290238405Sjkim	movups	%xmm0,(%rdx)
3291238405Sjkim.byte	102,15,58,223,202,1
3292238405Sjkim	call	.Lkey_expansion_192a_cold
3293238405Sjkim.byte	102,15,58,223,202,2
3294238405Sjkim	call	.Lkey_expansion_192b
3295238405Sjkim.byte	102,15,58,223,202,4
3296238405Sjkim	call	.Lkey_expansion_192a
3297238405Sjkim.byte	102,15,58,223,202,8
3298238405Sjkim	call	.Lkey_expansion_192b
3299238405Sjkim.byte	102,15,58,223,202,16
3300238405Sjkim	call	.Lkey_expansion_192a
3301238405Sjkim.byte	102,15,58,223,202,32
3302238405Sjkim	call	.Lkey_expansion_192b
3303238405Sjkim.byte	102,15,58,223,202,64
3304238405Sjkim	call	.Lkey_expansion_192a
3305238405Sjkim.byte	102,15,58,223,202,128
3306238405Sjkim	call	.Lkey_expansion_192b
3307238405Sjkim	movups	%xmm0,(%rax)
3308238405Sjkim	movl	%esi,48(%rax)
3309238405Sjkim	xorq	%rax,%rax
3310238405Sjkim	jmp	.Lenc_key_ret
3311238405Sjkim
3312238405Sjkim.align	16
3313290207Sjkim.L12rounds_alt:
3314290207Sjkim	movdqa	.Lkey_rotate192(%rip),%xmm5
3315290207Sjkim	movdqa	.Lkey_rcon1(%rip),%xmm4
3316290207Sjkim	movl	$8,%r10d
3317290207Sjkim	movdqu	%xmm0,(%rdx)
3318290207Sjkim	jmp	.Loop_key192
3319290207Sjkim
3320290207Sjkim.align	16
3321290207Sjkim.Loop_key192:
3322290207Sjkim	movq	%xmm2,0(%rax)
3323290207Sjkim	movdqa	%xmm2,%xmm1
3324290207Sjkim.byte	102,15,56,0,213
3325290207Sjkim.byte	102,15,56,221,212
3326290207Sjkim	pslld	$1,%xmm4
3327290207Sjkim	leaq	24(%rax),%rax
3328290207Sjkim
3329290207Sjkim	movdqa	%xmm0,%xmm3
3330290207Sjkim	pslldq	$4,%xmm0
3331290207Sjkim	pxor	%xmm0,%xmm3
3332290207Sjkim	pslldq	$4,%xmm0
3333290207Sjkim	pxor	%xmm0,%xmm3
3334290207Sjkim	pslldq	$4,%xmm0
3335290207Sjkim	pxor	%xmm3,%xmm0
3336290207Sjkim
3337296279Sjkim	pshufd	$0xff,%xmm0,%xmm3
3338290207Sjkim	pxor	%xmm1,%xmm3
3339290207Sjkim	pslldq	$4,%xmm1
3340290207Sjkim	pxor	%xmm1,%xmm3
3341290207Sjkim
3342290207Sjkim	pxor	%xmm2,%xmm0
3343290207Sjkim	pxor	%xmm3,%xmm2
3344290207Sjkim	movdqu	%xmm0,-16(%rax)
3345290207Sjkim
3346290207Sjkim	decl	%r10d
3347290207Sjkim	jnz	.Loop_key192
3348290207Sjkim
3349290207Sjkim	movl	%esi,32(%rax)
3350290207Sjkim	xorl	%eax,%eax
3351290207Sjkim	jmp	.Lenc_key_ret
3352290207Sjkim
3353290207Sjkim.align	16
3354238405Sjkim.L14rounds:
3355238405Sjkim	movups	16(%rdi),%xmm2
3356238405Sjkim	movl	$13,%esi
3357238405Sjkim	leaq	16(%rax),%rax
3358290207Sjkim	cmpl	$268435456,%r10d
3359290207Sjkim	je	.L14rounds_alt
3360290207Sjkim
3361238405Sjkim	movups	%xmm0,(%rdx)
3362238405Sjkim	movups	%xmm2,16(%rdx)
3363238405Sjkim.byte	102,15,58,223,202,1
3364238405Sjkim	call	.Lkey_expansion_256a_cold
3365238405Sjkim.byte	102,15,58,223,200,1
3366238405Sjkim	call	.Lkey_expansion_256b
3367238405Sjkim.byte	102,15,58,223,202,2
3368238405Sjkim	call	.Lkey_expansion_256a
3369238405Sjkim.byte	102,15,58,223,200,2
3370238405Sjkim	call	.Lkey_expansion_256b
3371238405Sjkim.byte	102,15,58,223,202,4
3372238405Sjkim	call	.Lkey_expansion_256a
3373238405Sjkim.byte	102,15,58,223,200,4
3374238405Sjkim	call	.Lkey_expansion_256b
3375238405Sjkim.byte	102,15,58,223,202,8
3376238405Sjkim	call	.Lkey_expansion_256a
3377238405Sjkim.byte	102,15,58,223,200,8
3378238405Sjkim	call	.Lkey_expansion_256b
3379238405Sjkim.byte	102,15,58,223,202,16
3380238405Sjkim	call	.Lkey_expansion_256a
3381238405Sjkim.byte	102,15,58,223,200,16
3382238405Sjkim	call	.Lkey_expansion_256b
3383238405Sjkim.byte	102,15,58,223,202,32
3384238405Sjkim	call	.Lkey_expansion_256a
3385238405Sjkim.byte	102,15,58,223,200,32
3386238405Sjkim	call	.Lkey_expansion_256b
3387238405Sjkim.byte	102,15,58,223,202,64
3388238405Sjkim	call	.Lkey_expansion_256a
3389238405Sjkim	movups	%xmm0,(%rax)
3390238405Sjkim	movl	%esi,16(%rax)
3391238405Sjkim	xorq	%rax,%rax
3392238405Sjkim	jmp	.Lenc_key_ret
3393238405Sjkim
3394238405Sjkim.align	16
3395290207Sjkim.L14rounds_alt:
3396290207Sjkim	movdqa	.Lkey_rotate(%rip),%xmm5
3397290207Sjkim	movdqa	.Lkey_rcon1(%rip),%xmm4
3398290207Sjkim	movl	$7,%r10d
3399290207Sjkim	movdqu	%xmm0,0(%rdx)
3400290207Sjkim	movdqa	%xmm2,%xmm1
3401290207Sjkim	movdqu	%xmm2,16(%rdx)
3402290207Sjkim	jmp	.Loop_key256
3403290207Sjkim
3404290207Sjkim.align	16
3405290207Sjkim.Loop_key256:
3406290207Sjkim.byte	102,15,56,0,213
3407290207Sjkim.byte	102,15,56,221,212
3408290207Sjkim
3409290207Sjkim	movdqa	%xmm0,%xmm3
3410290207Sjkim	pslldq	$4,%xmm0
3411290207Sjkim	pxor	%xmm0,%xmm3
3412290207Sjkim	pslldq	$4,%xmm0
3413290207Sjkim	pxor	%xmm0,%xmm3
3414290207Sjkim	pslldq	$4,%xmm0
3415290207Sjkim	pxor	%xmm3,%xmm0
3416290207Sjkim	pslld	$1,%xmm4
3417290207Sjkim
3418290207Sjkim	pxor	%xmm2,%xmm0
3419290207Sjkim	movdqu	%xmm0,(%rax)
3420290207Sjkim
3421290207Sjkim	decl	%r10d
3422290207Sjkim	jz	.Ldone_key256
3423290207Sjkim
3424296279Sjkim	pshufd	$0xff,%xmm0,%xmm2
3425290207Sjkim	pxor	%xmm3,%xmm3
3426290207Sjkim.byte	102,15,56,221,211
3427290207Sjkim
3428290207Sjkim	movdqa	%xmm1,%xmm3
3429290207Sjkim	pslldq	$4,%xmm1
3430290207Sjkim	pxor	%xmm1,%xmm3
3431290207Sjkim	pslldq	$4,%xmm1
3432290207Sjkim	pxor	%xmm1,%xmm3
3433290207Sjkim	pslldq	$4,%xmm1
3434290207Sjkim	pxor	%xmm3,%xmm1
3435290207Sjkim
3436290207Sjkim	pxor	%xmm1,%xmm2
3437290207Sjkim	movdqu	%xmm2,16(%rax)
3438290207Sjkim	leaq	32(%rax),%rax
3439290207Sjkim	movdqa	%xmm2,%xmm1
3440290207Sjkim
3441290207Sjkim	jmp	.Loop_key256
3442290207Sjkim
3443290207Sjkim.Ldone_key256:
3444290207Sjkim	movl	%esi,16(%rax)
3445290207Sjkim	xorl	%eax,%eax
3446290207Sjkim	jmp	.Lenc_key_ret
3447290207Sjkim
3448290207Sjkim.align	16
3449238405Sjkim.Lbad_keybits:
3450238405Sjkim	movq	$-2,%rax
3451238405Sjkim.Lenc_key_ret:
3452290207Sjkim	pxor	%xmm0,%xmm0
3453290207Sjkim	pxor	%xmm1,%xmm1
3454290207Sjkim	pxor	%xmm2,%xmm2
3455290207Sjkim	pxor	%xmm3,%xmm3
3456290207Sjkim	pxor	%xmm4,%xmm4
3457290207Sjkim	pxor	%xmm5,%xmm5
3458238405Sjkim	addq	$8,%rsp
3459238405Sjkim	.byte	0xf3,0xc3
3460238405Sjkim.LSEH_end_set_encrypt_key:
3461238405Sjkim
3462238405Sjkim.align	16
3463238405Sjkim.Lkey_expansion_128:
3464238405Sjkim	movups	%xmm0,(%rax)
3465238405Sjkim	leaq	16(%rax),%rax
3466238405Sjkim.Lkey_expansion_128_cold:
3467298998Sjkim	shufps	$16,%xmm0,%xmm4
3468238405Sjkim	xorps	%xmm4,%xmm0
3469298998Sjkim	shufps	$140,%xmm0,%xmm4
3470238405Sjkim	xorps	%xmm4,%xmm0
3471298998Sjkim	shufps	$255,%xmm1,%xmm1
3472238405Sjkim	xorps	%xmm1,%xmm0
3473238405Sjkim	.byte	0xf3,0xc3
3474238405Sjkim
3475238405Sjkim.align	16
3476238405Sjkim.Lkey_expansion_192a:
3477238405Sjkim	movups	%xmm0,(%rax)
3478238405Sjkim	leaq	16(%rax),%rax
3479238405Sjkim.Lkey_expansion_192a_cold:
3480238405Sjkim	movaps	%xmm2,%xmm5
3481238405Sjkim.Lkey_expansion_192b_warm:
3482298998Sjkim	shufps	$16,%xmm0,%xmm4
3483238405Sjkim	movdqa	%xmm2,%xmm3
3484238405Sjkim	xorps	%xmm4,%xmm0
3485298998Sjkim	shufps	$140,%xmm0,%xmm4
3486238405Sjkim	pslldq	$4,%xmm3
3487238405Sjkim	xorps	%xmm4,%xmm0
3488298998Sjkim	pshufd	$85,%xmm1,%xmm1
3489238405Sjkim	pxor	%xmm3,%xmm2
3490238405Sjkim	pxor	%xmm1,%xmm0
3491298998Sjkim	pshufd	$255,%xmm0,%xmm3
3492238405Sjkim	pxor	%xmm3,%xmm2
3493238405Sjkim	.byte	0xf3,0xc3
3494238405Sjkim
3495238405Sjkim.align	16
3496238405Sjkim.Lkey_expansion_192b:
3497238405Sjkim	movaps	%xmm0,%xmm3
3498298998Sjkim	shufps	$68,%xmm0,%xmm5
3499238405Sjkim	movups	%xmm5,(%rax)
3500298998Sjkim	shufps	$78,%xmm2,%xmm3
3501238405Sjkim	movups	%xmm3,16(%rax)
3502238405Sjkim	leaq	32(%rax),%rax
3503238405Sjkim	jmp	.Lkey_expansion_192b_warm
3504238405Sjkim
3505238405Sjkim.align	16
3506238405Sjkim.Lkey_expansion_256a:
3507238405Sjkim	movups	%xmm2,(%rax)
3508238405Sjkim	leaq	16(%rax),%rax
3509238405Sjkim.Lkey_expansion_256a_cold:
3510298998Sjkim	shufps	$16,%xmm0,%xmm4
3511238405Sjkim	xorps	%xmm4,%xmm0
3512298998Sjkim	shufps	$140,%xmm0,%xmm4
3513238405Sjkim	xorps	%xmm4,%xmm0
3514298998Sjkim	shufps	$255,%xmm1,%xmm1
3515238405Sjkim	xorps	%xmm1,%xmm0
3516238405Sjkim	.byte	0xf3,0xc3
3517238405Sjkim
3518238405Sjkim.align	16
3519238405Sjkim.Lkey_expansion_256b:
3520238405Sjkim	movups	%xmm0,(%rax)
3521238405Sjkim	leaq	16(%rax),%rax
3522238405Sjkim
3523298998Sjkim	shufps	$16,%xmm2,%xmm4
3524238405Sjkim	xorps	%xmm4,%xmm2
3525298998Sjkim	shufps	$140,%xmm2,%xmm4
3526238405Sjkim	xorps	%xmm4,%xmm2
3527298998Sjkim	shufps	$170,%xmm1,%xmm1
3528238405Sjkim	xorps	%xmm1,%xmm2
3529238405Sjkim	.byte	0xf3,0xc3
3530238405Sjkim.size	aesni_set_encrypt_key,.-aesni_set_encrypt_key
3531238405Sjkim.size	__aesni_set_encrypt_key,.-__aesni_set_encrypt_key
3532238405Sjkim.align	64
3533238405Sjkim.Lbswap_mask:
3534238405Sjkim.byte	15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
3535238405Sjkim.Lincrement32:
3536238405Sjkim.long	6,6,6,0
3537238405Sjkim.Lincrement64:
3538238405Sjkim.long	1,0,0,0
3539238405Sjkim.Lxts_magic:
3540238405Sjkim.long	0x87,0,1,0
3541290207Sjkim.Lincrement1:
3542290207Sjkim.byte	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
3543290207Sjkim.Lkey_rotate:
3544290207Sjkim.long	0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
3545290207Sjkim.Lkey_rotate192:
3546290207Sjkim.long	0x04070605,0x04070605,0x04070605,0x04070605
3547290207Sjkim.Lkey_rcon1:
3548290207Sjkim.long	1,1,1,1
3549290207Sjkim.Lkey_rcon1b:
3550290207Sjkim.long	0x1b,0x1b,0x1b,0x1b
3551238405Sjkim
3552238405Sjkim.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
3553238405Sjkim.align	64
3554