1238405Sjkim	# $FreeBSD$
2238405Sjkim.file	"aesni-x86.s"
3238405Sjkim.text
4238405Sjkim.globl	aesni_encrypt
5238405Sjkim.type	aesni_encrypt,@function
6238405Sjkim.align	16
7238405Sjkimaesni_encrypt:
8238405Sjkim.L_aesni_encrypt_begin:
9238405Sjkim	movl	4(%esp),%eax
10238405Sjkim	movl	12(%esp),%edx
11238405Sjkim	movups	(%eax),%xmm2
12238405Sjkim	movl	240(%edx),%ecx
13238405Sjkim	movl	8(%esp),%eax
14238405Sjkim	movups	(%edx),%xmm0
15238405Sjkim	movups	16(%edx),%xmm1
16238405Sjkim	leal	32(%edx),%edx
17238405Sjkim	xorps	%xmm0,%xmm2
18238405Sjkim.L000enc1_loop_1:
19238405Sjkim.byte	102,15,56,220,209
20238405Sjkim	decl	%ecx
21238405Sjkim	movups	(%edx),%xmm1
22238405Sjkim	leal	16(%edx),%edx
23238405Sjkim	jnz	.L000enc1_loop_1
24238405Sjkim.byte	102,15,56,221,209
25238405Sjkim	movups	%xmm2,(%eax)
26238405Sjkim	ret
27238405Sjkim.size	aesni_encrypt,.-.L_aesni_encrypt_begin
28238405Sjkim.globl	aesni_decrypt
29238405Sjkim.type	aesni_decrypt,@function
30238405Sjkim.align	16
31238405Sjkimaesni_decrypt:
32238405Sjkim.L_aesni_decrypt_begin:
33238405Sjkim	movl	4(%esp),%eax
34238405Sjkim	movl	12(%esp),%edx
35238405Sjkim	movups	(%eax),%xmm2
36238405Sjkim	movl	240(%edx),%ecx
37238405Sjkim	movl	8(%esp),%eax
38238405Sjkim	movups	(%edx),%xmm0
39238405Sjkim	movups	16(%edx),%xmm1
40238405Sjkim	leal	32(%edx),%edx
41238405Sjkim	xorps	%xmm0,%xmm2
42238405Sjkim.L001dec1_loop_2:
43238405Sjkim.byte	102,15,56,222,209
44238405Sjkim	decl	%ecx
45238405Sjkim	movups	(%edx),%xmm1
46238405Sjkim	leal	16(%edx),%edx
47238405Sjkim	jnz	.L001dec1_loop_2
48238405Sjkim.byte	102,15,56,223,209
49238405Sjkim	movups	%xmm2,(%eax)
50238405Sjkim	ret
51238405Sjkim.size	aesni_decrypt,.-.L_aesni_decrypt_begin
52238405Sjkim.type	_aesni_encrypt3,@function
53238405Sjkim.align	16
54238405Sjkim_aesni_encrypt3:
55238405Sjkim	movups	(%edx),%xmm0
56238405Sjkim	shrl	$1,%ecx
57238405Sjkim	movups	16(%edx),%xmm1
58238405Sjkim	leal	32(%edx),%edx
59238405Sjkim	xorps	%xmm0,%xmm2
60238405Sjkim	pxor	%xmm0,%xmm3
61238405Sjkim	pxor	%xmm0,%xmm4
62238405Sjkim	movups	(%edx),%xmm0
63238405Sjkim.L002enc3_loop:
64238405Sjkim.byte	102,15,56,220,209
65238405Sjkim.byte	102,15,56,220,217
66238405Sjkim	decl	%ecx
67238405Sjkim.byte	102,15,56,220,225
68238405Sjkim	movups	16(%edx),%xmm1
69238405Sjkim.byte	102,15,56,220,208
70238405Sjkim.byte	102,15,56,220,216
71238405Sjkim	leal	32(%edx),%edx
72238405Sjkim.byte	102,15,56,220,224
73238405Sjkim	movups	(%edx),%xmm0
74238405Sjkim	jnz	.L002enc3_loop
75238405Sjkim.byte	102,15,56,220,209
76238405Sjkim.byte	102,15,56,220,217
77238405Sjkim.byte	102,15,56,220,225
78238405Sjkim.byte	102,15,56,221,208
79238405Sjkim.byte	102,15,56,221,216
80238405Sjkim.byte	102,15,56,221,224
81238405Sjkim	ret
82238405Sjkim.size	_aesni_encrypt3,.-_aesni_encrypt3
83238405Sjkim.type	_aesni_decrypt3,@function
84238405Sjkim.align	16
85238405Sjkim_aesni_decrypt3:
86238405Sjkim	movups	(%edx),%xmm0
87238405Sjkim	shrl	$1,%ecx
88238405Sjkim	movups	16(%edx),%xmm1
89238405Sjkim	leal	32(%edx),%edx
90238405Sjkim	xorps	%xmm0,%xmm2
91238405Sjkim	pxor	%xmm0,%xmm3
92238405Sjkim	pxor	%xmm0,%xmm4
93238405Sjkim	movups	(%edx),%xmm0
94238405Sjkim.L003dec3_loop:
95238405Sjkim.byte	102,15,56,222,209
96238405Sjkim.byte	102,15,56,222,217
97238405Sjkim	decl	%ecx
98238405Sjkim.byte	102,15,56,222,225
99238405Sjkim	movups	16(%edx),%xmm1
100238405Sjkim.byte	102,15,56,222,208
101238405Sjkim.byte	102,15,56,222,216
102238405Sjkim	leal	32(%edx),%edx
103238405Sjkim.byte	102,15,56,222,224
104238405Sjkim	movups	(%edx),%xmm0
105238405Sjkim	jnz	.L003dec3_loop
106238405Sjkim.byte	102,15,56,222,209
107238405Sjkim.byte	102,15,56,222,217
108238405Sjkim.byte	102,15,56,222,225
109238405Sjkim.byte	102,15,56,223,208
110238405Sjkim.byte	102,15,56,223,216
111238405Sjkim.byte	102,15,56,223,224
112238405Sjkim	ret
113238405Sjkim.size	_aesni_decrypt3,.-_aesni_decrypt3
114238405Sjkim.type	_aesni_encrypt4,@function
115238405Sjkim.align	16
116238405Sjkim_aesni_encrypt4:
117238405Sjkim	movups	(%edx),%xmm0
118238405Sjkim	movups	16(%edx),%xmm1
119238405Sjkim	shrl	$1,%ecx
120238405Sjkim	leal	32(%edx),%edx
121238405Sjkim	xorps	%xmm0,%xmm2
122238405Sjkim	pxor	%xmm0,%xmm3
123238405Sjkim	pxor	%xmm0,%xmm4
124238405Sjkim	pxor	%xmm0,%xmm5
125238405Sjkim	movups	(%edx),%xmm0
126238405Sjkim.L004enc4_loop:
127238405Sjkim.byte	102,15,56,220,209
128238405Sjkim.byte	102,15,56,220,217
129238405Sjkim	decl	%ecx
130238405Sjkim.byte	102,15,56,220,225
131238405Sjkim.byte	102,15,56,220,233
132238405Sjkim	movups	16(%edx),%xmm1
133238405Sjkim.byte	102,15,56,220,208
134238405Sjkim.byte	102,15,56,220,216
135238405Sjkim	leal	32(%edx),%edx
136238405Sjkim.byte	102,15,56,220,224
137238405Sjkim.byte	102,15,56,220,232
138238405Sjkim	movups	(%edx),%xmm0
139238405Sjkim	jnz	.L004enc4_loop
140238405Sjkim.byte	102,15,56,220,209
141238405Sjkim.byte	102,15,56,220,217
142238405Sjkim.byte	102,15,56,220,225
143238405Sjkim.byte	102,15,56,220,233
144238405Sjkim.byte	102,15,56,221,208
145238405Sjkim.byte	102,15,56,221,216
146238405Sjkim.byte	102,15,56,221,224
147238405Sjkim.byte	102,15,56,221,232
148238405Sjkim	ret
149238405Sjkim.size	_aesni_encrypt4,.-_aesni_encrypt4
150238405Sjkim.type	_aesni_decrypt4,@function
151238405Sjkim.align	16
152238405Sjkim_aesni_decrypt4:
153238405Sjkim	movups	(%edx),%xmm0
154238405Sjkim	movups	16(%edx),%xmm1
155238405Sjkim	shrl	$1,%ecx
156238405Sjkim	leal	32(%edx),%edx
157238405Sjkim	xorps	%xmm0,%xmm2
158238405Sjkim	pxor	%xmm0,%xmm3
159238405Sjkim	pxor	%xmm0,%xmm4
160238405Sjkim	pxor	%xmm0,%xmm5
161238405Sjkim	movups	(%edx),%xmm0
162238405Sjkim.L005dec4_loop:
163238405Sjkim.byte	102,15,56,222,209
164238405Sjkim.byte	102,15,56,222,217
165238405Sjkim	decl	%ecx
166238405Sjkim.byte	102,15,56,222,225
167238405Sjkim.byte	102,15,56,222,233
168238405Sjkim	movups	16(%edx),%xmm1
169238405Sjkim.byte	102,15,56,222,208
170238405Sjkim.byte	102,15,56,222,216
171238405Sjkim	leal	32(%edx),%edx
172238405Sjkim.byte	102,15,56,222,224
173238405Sjkim.byte	102,15,56,222,232
174238405Sjkim	movups	(%edx),%xmm0
175238405Sjkim	jnz	.L005dec4_loop
176238405Sjkim.byte	102,15,56,222,209
177238405Sjkim.byte	102,15,56,222,217
178238405Sjkim.byte	102,15,56,222,225
179238405Sjkim.byte	102,15,56,222,233
180238405Sjkim.byte	102,15,56,223,208
181238405Sjkim.byte	102,15,56,223,216
182238405Sjkim.byte	102,15,56,223,224
183238405Sjkim.byte	102,15,56,223,232
184238405Sjkim	ret
185238405Sjkim.size	_aesni_decrypt4,.-_aesni_decrypt4
186238405Sjkim.type	_aesni_encrypt6,@function
187238405Sjkim.align	16
188238405Sjkim_aesni_encrypt6:
189238405Sjkim	movups	(%edx),%xmm0
190238405Sjkim	shrl	$1,%ecx
191238405Sjkim	movups	16(%edx),%xmm1
192238405Sjkim	leal	32(%edx),%edx
193238405Sjkim	xorps	%xmm0,%xmm2
194238405Sjkim	pxor	%xmm0,%xmm3
195238405Sjkim.byte	102,15,56,220,209
196238405Sjkim	pxor	%xmm0,%xmm4
197238405Sjkim.byte	102,15,56,220,217
198238405Sjkim	pxor	%xmm0,%xmm5
199238405Sjkim	decl	%ecx
200238405Sjkim.byte	102,15,56,220,225
201238405Sjkim	pxor	%xmm0,%xmm6
202238405Sjkim.byte	102,15,56,220,233
203238405Sjkim	pxor	%xmm0,%xmm7
204238405Sjkim.byte	102,15,56,220,241
205238405Sjkim	movups	(%edx),%xmm0
206238405Sjkim.byte	102,15,56,220,249
207238405Sjkim	jmp	.L_aesni_encrypt6_enter
208238405Sjkim.align	16
209238405Sjkim.L006enc6_loop:
210238405Sjkim.byte	102,15,56,220,209
211238405Sjkim.byte	102,15,56,220,217
212238405Sjkim	decl	%ecx
213238405Sjkim.byte	102,15,56,220,225
214238405Sjkim.byte	102,15,56,220,233
215238405Sjkim.byte	102,15,56,220,241
216238405Sjkim.byte	102,15,56,220,249
217238405Sjkim.align	16
218238405Sjkim.L_aesni_encrypt6_enter:
219238405Sjkim	movups	16(%edx),%xmm1
220238405Sjkim.byte	102,15,56,220,208
221238405Sjkim.byte	102,15,56,220,216
222238405Sjkim	leal	32(%edx),%edx
223238405Sjkim.byte	102,15,56,220,224
224238405Sjkim.byte	102,15,56,220,232
225238405Sjkim.byte	102,15,56,220,240
226238405Sjkim.byte	102,15,56,220,248
227238405Sjkim	movups	(%edx),%xmm0
228238405Sjkim	jnz	.L006enc6_loop
229238405Sjkim.byte	102,15,56,220,209
230238405Sjkim.byte	102,15,56,220,217
231238405Sjkim.byte	102,15,56,220,225
232238405Sjkim.byte	102,15,56,220,233
233238405Sjkim.byte	102,15,56,220,241
234238405Sjkim.byte	102,15,56,220,249
235238405Sjkim.byte	102,15,56,221,208
236238405Sjkim.byte	102,15,56,221,216
237238405Sjkim.byte	102,15,56,221,224
238238405Sjkim.byte	102,15,56,221,232
239238405Sjkim.byte	102,15,56,221,240
240238405Sjkim.byte	102,15,56,221,248
241238405Sjkim	ret
242238405Sjkim.size	_aesni_encrypt6,.-_aesni_encrypt6
243238405Sjkim.type	_aesni_decrypt6,@function
244238405Sjkim.align	16
245238405Sjkim_aesni_decrypt6:
246238405Sjkim	movups	(%edx),%xmm0
247238405Sjkim	shrl	$1,%ecx
248238405Sjkim	movups	16(%edx),%xmm1
249238405Sjkim	leal	32(%edx),%edx
250238405Sjkim	xorps	%xmm0,%xmm2
251238405Sjkim	pxor	%xmm0,%xmm3
252238405Sjkim.byte	102,15,56,222,209
253238405Sjkim	pxor	%xmm0,%xmm4
254238405Sjkim.byte	102,15,56,222,217
255238405Sjkim	pxor	%xmm0,%xmm5
256238405Sjkim	decl	%ecx
257238405Sjkim.byte	102,15,56,222,225
258238405Sjkim	pxor	%xmm0,%xmm6
259238405Sjkim.byte	102,15,56,222,233
260238405Sjkim	pxor	%xmm0,%xmm7
261238405Sjkim.byte	102,15,56,222,241
262238405Sjkim	movups	(%edx),%xmm0
263238405Sjkim.byte	102,15,56,222,249
264238405Sjkim	jmp	.L_aesni_decrypt6_enter
265238405Sjkim.align	16
266238405Sjkim.L007dec6_loop:
267238405Sjkim.byte	102,15,56,222,209
268238405Sjkim.byte	102,15,56,222,217
269238405Sjkim	decl	%ecx
270238405Sjkim.byte	102,15,56,222,225
271238405Sjkim.byte	102,15,56,222,233
272238405Sjkim.byte	102,15,56,222,241
273238405Sjkim.byte	102,15,56,222,249
274238405Sjkim.align	16
275238405Sjkim.L_aesni_decrypt6_enter:
276238405Sjkim	movups	16(%edx),%xmm1
277238405Sjkim.byte	102,15,56,222,208
278238405Sjkim.byte	102,15,56,222,216
279238405Sjkim	leal	32(%edx),%edx
280238405Sjkim.byte	102,15,56,222,224
281238405Sjkim.byte	102,15,56,222,232
282238405Sjkim.byte	102,15,56,222,240
283238405Sjkim.byte	102,15,56,222,248
284238405Sjkim	movups	(%edx),%xmm0
285238405Sjkim	jnz	.L007dec6_loop
286238405Sjkim.byte	102,15,56,222,209
287238405Sjkim.byte	102,15,56,222,217
288238405Sjkim.byte	102,15,56,222,225
289238405Sjkim.byte	102,15,56,222,233
290238405Sjkim.byte	102,15,56,222,241
291238405Sjkim.byte	102,15,56,222,249
292238405Sjkim.byte	102,15,56,223,208
293238405Sjkim.byte	102,15,56,223,216
294238405Sjkim.byte	102,15,56,223,224
295238405Sjkim.byte	102,15,56,223,232
296238405Sjkim.byte	102,15,56,223,240
297238405Sjkim.byte	102,15,56,223,248
298238405Sjkim	ret
299238405Sjkim.size	_aesni_decrypt6,.-_aesni_decrypt6
300238405Sjkim.globl	aesni_ecb_encrypt
301238405Sjkim.type	aesni_ecb_encrypt,@function
302238405Sjkim.align	16
303238405Sjkimaesni_ecb_encrypt:
304238405Sjkim.L_aesni_ecb_encrypt_begin:
305238405Sjkim	pushl	%ebp
306238405Sjkim	pushl	%ebx
307238405Sjkim	pushl	%esi
308238405Sjkim	pushl	%edi
309238405Sjkim	movl	20(%esp),%esi
310238405Sjkim	movl	24(%esp),%edi
311238405Sjkim	movl	28(%esp),%eax
312238405Sjkim	movl	32(%esp),%edx
313238405Sjkim	movl	36(%esp),%ebx
314238405Sjkim	andl	$-16,%eax
315238405Sjkim	jz	.L008ecb_ret
316238405Sjkim	movl	240(%edx),%ecx
317238405Sjkim	testl	%ebx,%ebx
318238405Sjkim	jz	.L009ecb_decrypt
319238405Sjkim	movl	%edx,%ebp
320238405Sjkim	movl	%ecx,%ebx
321238405Sjkim	cmpl	$96,%eax
322238405Sjkim	jb	.L010ecb_enc_tail
323238405Sjkim	movdqu	(%esi),%xmm2
324238405Sjkim	movdqu	16(%esi),%xmm3
325238405Sjkim	movdqu	32(%esi),%xmm4
326238405Sjkim	movdqu	48(%esi),%xmm5
327238405Sjkim	movdqu	64(%esi),%xmm6
328238405Sjkim	movdqu	80(%esi),%xmm7
329238405Sjkim	leal	96(%esi),%esi
330238405Sjkim	subl	$96,%eax
331238405Sjkim	jmp	.L011ecb_enc_loop6_enter
332238405Sjkim.align	16
333238405Sjkim.L012ecb_enc_loop6:
334238405Sjkim	movups	%xmm2,(%edi)
335238405Sjkim	movdqu	(%esi),%xmm2
336238405Sjkim	movups	%xmm3,16(%edi)
337238405Sjkim	movdqu	16(%esi),%xmm3
338238405Sjkim	movups	%xmm4,32(%edi)
339238405Sjkim	movdqu	32(%esi),%xmm4
340238405Sjkim	movups	%xmm5,48(%edi)
341238405Sjkim	movdqu	48(%esi),%xmm5
342238405Sjkim	movups	%xmm6,64(%edi)
343238405Sjkim	movdqu	64(%esi),%xmm6
344238405Sjkim	movups	%xmm7,80(%edi)
345238405Sjkim	leal	96(%edi),%edi
346238405Sjkim	movdqu	80(%esi),%xmm7
347238405Sjkim	leal	96(%esi),%esi
348238405Sjkim.L011ecb_enc_loop6_enter:
349238405Sjkim	call	_aesni_encrypt6
350238405Sjkim	movl	%ebp,%edx
351238405Sjkim	movl	%ebx,%ecx
352238405Sjkim	subl	$96,%eax
353238405Sjkim	jnc	.L012ecb_enc_loop6
354238405Sjkim	movups	%xmm2,(%edi)
355238405Sjkim	movups	%xmm3,16(%edi)
356238405Sjkim	movups	%xmm4,32(%edi)
357238405Sjkim	movups	%xmm5,48(%edi)
358238405Sjkim	movups	%xmm6,64(%edi)
359238405Sjkim	movups	%xmm7,80(%edi)
360238405Sjkim	leal	96(%edi),%edi
361238405Sjkim	addl	$96,%eax
362238405Sjkim	jz	.L008ecb_ret
363238405Sjkim.L010ecb_enc_tail:
364238405Sjkim	movups	(%esi),%xmm2
365238405Sjkim	cmpl	$32,%eax
366238405Sjkim	jb	.L013ecb_enc_one
367238405Sjkim	movups	16(%esi),%xmm3
368238405Sjkim	je	.L014ecb_enc_two
369238405Sjkim	movups	32(%esi),%xmm4
370238405Sjkim	cmpl	$64,%eax
371238405Sjkim	jb	.L015ecb_enc_three
372238405Sjkim	movups	48(%esi),%xmm5
373238405Sjkim	je	.L016ecb_enc_four
374238405Sjkim	movups	64(%esi),%xmm6
375238405Sjkim	xorps	%xmm7,%xmm7
376238405Sjkim	call	_aesni_encrypt6
377238405Sjkim	movups	%xmm2,(%edi)
378238405Sjkim	movups	%xmm3,16(%edi)
379238405Sjkim	movups	%xmm4,32(%edi)
380238405Sjkim	movups	%xmm5,48(%edi)
381238405Sjkim	movups	%xmm6,64(%edi)
382238405Sjkim	jmp	.L008ecb_ret
383238405Sjkim.align	16
384238405Sjkim.L013ecb_enc_one:
385238405Sjkim	movups	(%edx),%xmm0
386238405Sjkim	movups	16(%edx),%xmm1
387238405Sjkim	leal	32(%edx),%edx
388238405Sjkim	xorps	%xmm0,%xmm2
389238405Sjkim.L017enc1_loop_3:
390238405Sjkim.byte	102,15,56,220,209
391238405Sjkim	decl	%ecx
392238405Sjkim	movups	(%edx),%xmm1
393238405Sjkim	leal	16(%edx),%edx
394238405Sjkim	jnz	.L017enc1_loop_3
395238405Sjkim.byte	102,15,56,221,209
396238405Sjkim	movups	%xmm2,(%edi)
397238405Sjkim	jmp	.L008ecb_ret
398238405Sjkim.align	16
399238405Sjkim.L014ecb_enc_two:
400238405Sjkim	xorps	%xmm4,%xmm4
401238405Sjkim	call	_aesni_encrypt3
402238405Sjkim	movups	%xmm2,(%edi)
403238405Sjkim	movups	%xmm3,16(%edi)
404238405Sjkim	jmp	.L008ecb_ret
405238405Sjkim.align	16
406238405Sjkim.L015ecb_enc_three:
407238405Sjkim	call	_aesni_encrypt3
408238405Sjkim	movups	%xmm2,(%edi)
409238405Sjkim	movups	%xmm3,16(%edi)
410238405Sjkim	movups	%xmm4,32(%edi)
411238405Sjkim	jmp	.L008ecb_ret
412238405Sjkim.align	16
413238405Sjkim.L016ecb_enc_four:
414238405Sjkim	call	_aesni_encrypt4
415238405Sjkim	movups	%xmm2,(%edi)
416238405Sjkim	movups	%xmm3,16(%edi)
417238405Sjkim	movups	%xmm4,32(%edi)
418238405Sjkim	movups	%xmm5,48(%edi)
419238405Sjkim	jmp	.L008ecb_ret
420238405Sjkim.align	16
421238405Sjkim.L009ecb_decrypt:
422238405Sjkim	movl	%edx,%ebp
423238405Sjkim	movl	%ecx,%ebx
424238405Sjkim	cmpl	$96,%eax
425238405Sjkim	jb	.L018ecb_dec_tail
426238405Sjkim	movdqu	(%esi),%xmm2
427238405Sjkim	movdqu	16(%esi),%xmm3
428238405Sjkim	movdqu	32(%esi),%xmm4
429238405Sjkim	movdqu	48(%esi),%xmm5
430238405Sjkim	movdqu	64(%esi),%xmm6
431238405Sjkim	movdqu	80(%esi),%xmm7
432238405Sjkim	leal	96(%esi),%esi
433238405Sjkim	subl	$96,%eax
434238405Sjkim	jmp	.L019ecb_dec_loop6_enter
435238405Sjkim.align	16
436238405Sjkim.L020ecb_dec_loop6:
437238405Sjkim	movups	%xmm2,(%edi)
438238405Sjkim	movdqu	(%esi),%xmm2
439238405Sjkim	movups	%xmm3,16(%edi)
440238405Sjkim	movdqu	16(%esi),%xmm3
441238405Sjkim	movups	%xmm4,32(%edi)
442238405Sjkim	movdqu	32(%esi),%xmm4
443238405Sjkim	movups	%xmm5,48(%edi)
444238405Sjkim	movdqu	48(%esi),%xmm5
445238405Sjkim	movups	%xmm6,64(%edi)
446238405Sjkim	movdqu	64(%esi),%xmm6
447238405Sjkim	movups	%xmm7,80(%edi)
448238405Sjkim	leal	96(%edi),%edi
449238405Sjkim	movdqu	80(%esi),%xmm7
450238405Sjkim	leal	96(%esi),%esi
451238405Sjkim.L019ecb_dec_loop6_enter:
452238405Sjkim	call	_aesni_decrypt6
453238405Sjkim	movl	%ebp,%edx
454238405Sjkim	movl	%ebx,%ecx
455238405Sjkim	subl	$96,%eax
456238405Sjkim	jnc	.L020ecb_dec_loop6
457238405Sjkim	movups	%xmm2,(%edi)
458238405Sjkim	movups	%xmm3,16(%edi)
459238405Sjkim	movups	%xmm4,32(%edi)
460238405Sjkim	movups	%xmm5,48(%edi)
461238405Sjkim	movups	%xmm6,64(%edi)
462238405Sjkim	movups	%xmm7,80(%edi)
463238405Sjkim	leal	96(%edi),%edi
464238405Sjkim	addl	$96,%eax
465238405Sjkim	jz	.L008ecb_ret
466238405Sjkim.L018ecb_dec_tail:
467238405Sjkim	movups	(%esi),%xmm2
468238405Sjkim	cmpl	$32,%eax
469238405Sjkim	jb	.L021ecb_dec_one
470238405Sjkim	movups	16(%esi),%xmm3
471238405Sjkim	je	.L022ecb_dec_two
472238405Sjkim	movups	32(%esi),%xmm4
473238405Sjkim	cmpl	$64,%eax
474238405Sjkim	jb	.L023ecb_dec_three
475238405Sjkim	movups	48(%esi),%xmm5
476238405Sjkim	je	.L024ecb_dec_four
477238405Sjkim	movups	64(%esi),%xmm6
478238405Sjkim	xorps	%xmm7,%xmm7
479238405Sjkim	call	_aesni_decrypt6
480238405Sjkim	movups	%xmm2,(%edi)
481238405Sjkim	movups	%xmm3,16(%edi)
482238405Sjkim	movups	%xmm4,32(%edi)
483238405Sjkim	movups	%xmm5,48(%edi)
484238405Sjkim	movups	%xmm6,64(%edi)
485238405Sjkim	jmp	.L008ecb_ret
486238405Sjkim.align	16
487238405Sjkim.L021ecb_dec_one:
488238405Sjkim	movups	(%edx),%xmm0
489238405Sjkim	movups	16(%edx),%xmm1
490238405Sjkim	leal	32(%edx),%edx
491238405Sjkim	xorps	%xmm0,%xmm2
492238405Sjkim.L025dec1_loop_4:
493238405Sjkim.byte	102,15,56,222,209
494238405Sjkim	decl	%ecx
495238405Sjkim	movups	(%edx),%xmm1
496238405Sjkim	leal	16(%edx),%edx
497238405Sjkim	jnz	.L025dec1_loop_4
498238405Sjkim.byte	102,15,56,223,209
499238405Sjkim	movups	%xmm2,(%edi)
500238405Sjkim	jmp	.L008ecb_ret
501238405Sjkim.align	16
502238405Sjkim.L022ecb_dec_two:
503238405Sjkim	xorps	%xmm4,%xmm4
504238405Sjkim	call	_aesni_decrypt3
505238405Sjkim	movups	%xmm2,(%edi)
506238405Sjkim	movups	%xmm3,16(%edi)
507238405Sjkim	jmp	.L008ecb_ret
508238405Sjkim.align	16
509238405Sjkim.L023ecb_dec_three:
510238405Sjkim	call	_aesni_decrypt3
511238405Sjkim	movups	%xmm2,(%edi)
512238405Sjkim	movups	%xmm3,16(%edi)
513238405Sjkim	movups	%xmm4,32(%edi)
514238405Sjkim	jmp	.L008ecb_ret
515238405Sjkim.align	16
516238405Sjkim.L024ecb_dec_four:
517238405Sjkim	call	_aesni_decrypt4
518238405Sjkim	movups	%xmm2,(%edi)
519238405Sjkim	movups	%xmm3,16(%edi)
520238405Sjkim	movups	%xmm4,32(%edi)
521238405Sjkim	movups	%xmm5,48(%edi)
522238405Sjkim.L008ecb_ret:
523238405Sjkim	popl	%edi
524238405Sjkim	popl	%esi
525238405Sjkim	popl	%ebx
526238405Sjkim	popl	%ebp
527238405Sjkim	ret
528238405Sjkim.size	aesni_ecb_encrypt,.-.L_aesni_ecb_encrypt_begin
529238405Sjkim.globl	aesni_ccm64_encrypt_blocks
530238405Sjkim.type	aesni_ccm64_encrypt_blocks,@function
531238405Sjkim.align	16
532238405Sjkimaesni_ccm64_encrypt_blocks:
533238405Sjkim.L_aesni_ccm64_encrypt_blocks_begin:
534238405Sjkim	pushl	%ebp
535238405Sjkim	pushl	%ebx
536238405Sjkim	pushl	%esi
537238405Sjkim	pushl	%edi
538238405Sjkim	movl	20(%esp),%esi
539238405Sjkim	movl	24(%esp),%edi
540238405Sjkim	movl	28(%esp),%eax
541238405Sjkim	movl	32(%esp),%edx
542238405Sjkim	movl	36(%esp),%ebx
543238405Sjkim	movl	40(%esp),%ecx
544238405Sjkim	movl	%esp,%ebp
545238405Sjkim	subl	$60,%esp
546238405Sjkim	andl	$-16,%esp
547238405Sjkim	movl	%ebp,48(%esp)
548238405Sjkim	movdqu	(%ebx),%xmm7
549238405Sjkim	movdqu	(%ecx),%xmm3
550238405Sjkim	movl	240(%edx),%ecx
551238405Sjkim	movl	$202182159,(%esp)
552238405Sjkim	movl	$134810123,4(%esp)
553238405Sjkim	movl	$67438087,8(%esp)
554238405Sjkim	movl	$66051,12(%esp)
555238405Sjkim	movl	$1,%ebx
556238405Sjkim	xorl	%ebp,%ebp
557238405Sjkim	movl	%ebx,16(%esp)
558238405Sjkim	movl	%ebp,20(%esp)
559238405Sjkim	movl	%ebp,24(%esp)
560238405Sjkim	movl	%ebp,28(%esp)
561238405Sjkim	shrl	$1,%ecx
562238405Sjkim	leal	(%edx),%ebp
563238405Sjkim	movdqa	(%esp),%xmm5
564238405Sjkim	movdqa	%xmm7,%xmm2
565238405Sjkim	movl	%ecx,%ebx
566238405Sjkim.byte	102,15,56,0,253
567238405Sjkim.L026ccm64_enc_outer:
568238405Sjkim	movups	(%ebp),%xmm0
569238405Sjkim	movl	%ebx,%ecx
570238405Sjkim	movups	(%esi),%xmm6
571238405Sjkim	xorps	%xmm0,%xmm2
572238405Sjkim	movups	16(%ebp),%xmm1
573238405Sjkim	xorps	%xmm6,%xmm0
574238405Sjkim	leal	32(%ebp),%edx
575238405Sjkim	xorps	%xmm0,%xmm3
576238405Sjkim	movups	(%edx),%xmm0
577238405Sjkim.L027ccm64_enc2_loop:
578238405Sjkim.byte	102,15,56,220,209
579238405Sjkim	decl	%ecx
580238405Sjkim.byte	102,15,56,220,217
581238405Sjkim	movups	16(%edx),%xmm1
582238405Sjkim.byte	102,15,56,220,208
583238405Sjkim	leal	32(%edx),%edx
584238405Sjkim.byte	102,15,56,220,216
585238405Sjkim	movups	(%edx),%xmm0
586238405Sjkim	jnz	.L027ccm64_enc2_loop
587238405Sjkim.byte	102,15,56,220,209
588238405Sjkim.byte	102,15,56,220,217
589238405Sjkim	paddq	16(%esp),%xmm7
590238405Sjkim.byte	102,15,56,221,208
591238405Sjkim.byte	102,15,56,221,216
592238405Sjkim	decl	%eax
593238405Sjkim	leal	16(%esi),%esi
594238405Sjkim	xorps	%xmm2,%xmm6
595238405Sjkim	movdqa	%xmm7,%xmm2
596238405Sjkim	movups	%xmm6,(%edi)
597238405Sjkim	leal	16(%edi),%edi
598238405Sjkim.byte	102,15,56,0,213
599238405Sjkim	jnz	.L026ccm64_enc_outer
600238405Sjkim	movl	48(%esp),%esp
601238405Sjkim	movl	40(%esp),%edi
602238405Sjkim	movups	%xmm3,(%edi)
603238405Sjkim	popl	%edi
604238405Sjkim	popl	%esi
605238405Sjkim	popl	%ebx
606238405Sjkim	popl	%ebp
607238405Sjkim	ret
608238405Sjkim.size	aesni_ccm64_encrypt_blocks,.-.L_aesni_ccm64_encrypt_blocks_begin
609238405Sjkim.globl	aesni_ccm64_decrypt_blocks
610238405Sjkim.type	aesni_ccm64_decrypt_blocks,@function
611238405Sjkim.align	16
612238405Sjkimaesni_ccm64_decrypt_blocks:
613238405Sjkim.L_aesni_ccm64_decrypt_blocks_begin:
614238405Sjkim	pushl	%ebp
615238405Sjkim	pushl	%ebx
616238405Sjkim	pushl	%esi
617238405Sjkim	pushl	%edi
618238405Sjkim	movl	20(%esp),%esi
619238405Sjkim	movl	24(%esp),%edi
620238405Sjkim	movl	28(%esp),%eax
621238405Sjkim	movl	32(%esp),%edx
622238405Sjkim	movl	36(%esp),%ebx
623238405Sjkim	movl	40(%esp),%ecx
624238405Sjkim	movl	%esp,%ebp
625238405Sjkim	subl	$60,%esp
626238405Sjkim	andl	$-16,%esp
627238405Sjkim	movl	%ebp,48(%esp)
628238405Sjkim	movdqu	(%ebx),%xmm7
629238405Sjkim	movdqu	(%ecx),%xmm3
630238405Sjkim	movl	240(%edx),%ecx
631238405Sjkim	movl	$202182159,(%esp)
632238405Sjkim	movl	$134810123,4(%esp)
633238405Sjkim	movl	$67438087,8(%esp)
634238405Sjkim	movl	$66051,12(%esp)
635238405Sjkim	movl	$1,%ebx
636238405Sjkim	xorl	%ebp,%ebp
637238405Sjkim	movl	%ebx,16(%esp)
638238405Sjkim	movl	%ebp,20(%esp)
639238405Sjkim	movl	%ebp,24(%esp)
640238405Sjkim	movl	%ebp,28(%esp)
641238405Sjkim	movdqa	(%esp),%xmm5
642238405Sjkim	movdqa	%xmm7,%xmm2
643238405Sjkim	movl	%edx,%ebp
644238405Sjkim	movl	%ecx,%ebx
645238405Sjkim.byte	102,15,56,0,253
646238405Sjkim	movups	(%edx),%xmm0
647238405Sjkim	movups	16(%edx),%xmm1
648238405Sjkim	leal	32(%edx),%edx
649238405Sjkim	xorps	%xmm0,%xmm2
650238405Sjkim.L028enc1_loop_5:
651238405Sjkim.byte	102,15,56,220,209
652238405Sjkim	decl	%ecx
653238405Sjkim	movups	(%edx),%xmm1
654238405Sjkim	leal	16(%edx),%edx
655238405Sjkim	jnz	.L028enc1_loop_5
656238405Sjkim.byte	102,15,56,221,209
657238405Sjkim	movups	(%esi),%xmm6
658238405Sjkim	paddq	16(%esp),%xmm7
659238405Sjkim	leal	16(%esi),%esi
660238405Sjkim	jmp	.L029ccm64_dec_outer
661238405Sjkim.align	16
662238405Sjkim.L029ccm64_dec_outer:
663238405Sjkim	xorps	%xmm2,%xmm6
664238405Sjkim	movdqa	%xmm7,%xmm2
665238405Sjkim	movl	%ebx,%ecx
666238405Sjkim	movups	%xmm6,(%edi)
667238405Sjkim	leal	16(%edi),%edi
668238405Sjkim.byte	102,15,56,0,213
669238405Sjkim	subl	$1,%eax
670238405Sjkim	jz	.L030ccm64_dec_break
671238405Sjkim	movups	(%ebp),%xmm0
672238405Sjkim	shrl	$1,%ecx
673238405Sjkim	movups	16(%ebp),%xmm1
674238405Sjkim	xorps	%xmm0,%xmm6
675238405Sjkim	leal	32(%ebp),%edx
676238405Sjkim	xorps	%xmm0,%xmm2
677238405Sjkim	xorps	%xmm6,%xmm3
678238405Sjkim	movups	(%edx),%xmm0
679238405Sjkim.L031ccm64_dec2_loop:
680238405Sjkim.byte	102,15,56,220,209
681238405Sjkim	decl	%ecx
682238405Sjkim.byte	102,15,56,220,217
683238405Sjkim	movups	16(%edx),%xmm1
684238405Sjkim.byte	102,15,56,220,208
685238405Sjkim	leal	32(%edx),%edx
686238405Sjkim.byte	102,15,56,220,216
687238405Sjkim	movups	(%edx),%xmm0
688238405Sjkim	jnz	.L031ccm64_dec2_loop
689238405Sjkim	movups	(%esi),%xmm6
690238405Sjkim	paddq	16(%esp),%xmm7
691238405Sjkim.byte	102,15,56,220,209
692238405Sjkim.byte	102,15,56,220,217
693238405Sjkim	leal	16(%esi),%esi
694238405Sjkim.byte	102,15,56,221,208
695238405Sjkim.byte	102,15,56,221,216
696238405Sjkim	jmp	.L029ccm64_dec_outer
697238405Sjkim.align	16
698238405Sjkim.L030ccm64_dec_break:
699238405Sjkim	movl	%ebp,%edx
700238405Sjkim	movups	(%edx),%xmm0
701238405Sjkim	movups	16(%edx),%xmm1
702238405Sjkim	xorps	%xmm0,%xmm6
703238405Sjkim	leal	32(%edx),%edx
704238405Sjkim	xorps	%xmm6,%xmm3
705238405Sjkim.L032enc1_loop_6:
706238405Sjkim.byte	102,15,56,220,217
707238405Sjkim	decl	%ecx
708238405Sjkim	movups	(%edx),%xmm1
709238405Sjkim	leal	16(%edx),%edx
710238405Sjkim	jnz	.L032enc1_loop_6
711238405Sjkim.byte	102,15,56,221,217
712238405Sjkim	movl	48(%esp),%esp
713238405Sjkim	movl	40(%esp),%edi
714238405Sjkim	movups	%xmm3,(%edi)
715238405Sjkim	popl	%edi
716238405Sjkim	popl	%esi
717238405Sjkim	popl	%ebx
718238405Sjkim	popl	%ebp
719238405Sjkim	ret
720238405Sjkim.size	aesni_ccm64_decrypt_blocks,.-.L_aesni_ccm64_decrypt_blocks_begin
721238405Sjkim.globl	aesni_ctr32_encrypt_blocks
722238405Sjkim.type	aesni_ctr32_encrypt_blocks,@function
723238405Sjkim.align	16
724238405Sjkimaesni_ctr32_encrypt_blocks:
725238405Sjkim.L_aesni_ctr32_encrypt_blocks_begin:
726238405Sjkim	pushl	%ebp
727238405Sjkim	pushl	%ebx
728238405Sjkim	pushl	%esi
729238405Sjkim	pushl	%edi
730238405Sjkim	movl	20(%esp),%esi
731238405Sjkim	movl	24(%esp),%edi
732238405Sjkim	movl	28(%esp),%eax
733238405Sjkim	movl	32(%esp),%edx
734238405Sjkim	movl	36(%esp),%ebx
735238405Sjkim	movl	%esp,%ebp
736238405Sjkim	subl	$88,%esp
737238405Sjkim	andl	$-16,%esp
738238405Sjkim	movl	%ebp,80(%esp)
739238405Sjkim	cmpl	$1,%eax
740238405Sjkim	je	.L033ctr32_one_shortcut
741238405Sjkim	movdqu	(%ebx),%xmm7
742238405Sjkim	movl	$202182159,(%esp)
743238405Sjkim	movl	$134810123,4(%esp)
744238405Sjkim	movl	$67438087,8(%esp)
745238405Sjkim	movl	$66051,12(%esp)
746238405Sjkim	movl	$6,%ecx
747238405Sjkim	xorl	%ebp,%ebp
748238405Sjkim	movl	%ecx,16(%esp)
749238405Sjkim	movl	%ecx,20(%esp)
750238405Sjkim	movl	%ecx,24(%esp)
751238405Sjkim	movl	%ebp,28(%esp)
752238405Sjkim.byte	102,15,58,22,251,3
753238405Sjkim.byte	102,15,58,34,253,3
754238405Sjkim	movl	240(%edx),%ecx
755238405Sjkim	bswap	%ebx
756238405Sjkim	pxor	%xmm1,%xmm1
757238405Sjkim	pxor	%xmm0,%xmm0
758238405Sjkim	movdqa	(%esp),%xmm2
759238405Sjkim.byte	102,15,58,34,203,0
760238405Sjkim	leal	3(%ebx),%ebp
761238405Sjkim.byte	102,15,58,34,197,0
762238405Sjkim	incl	%ebx
763238405Sjkim.byte	102,15,58,34,203,1
764238405Sjkim	incl	%ebp
765238405Sjkim.byte	102,15,58,34,197,1
766238405Sjkim	incl	%ebx
767238405Sjkim.byte	102,15,58,34,203,2
768238405Sjkim	incl	%ebp
769238405Sjkim.byte	102,15,58,34,197,2
770238405Sjkim	movdqa	%xmm1,48(%esp)
771238405Sjkim.byte	102,15,56,0,202
772238405Sjkim	movdqa	%xmm0,64(%esp)
773238405Sjkim.byte	102,15,56,0,194
774238405Sjkim	pshufd	$192,%xmm1,%xmm2
775238405Sjkim	pshufd	$128,%xmm1,%xmm3
776238405Sjkim	cmpl	$6,%eax
777238405Sjkim	jb	.L034ctr32_tail
778238405Sjkim	movdqa	%xmm7,32(%esp)
779238405Sjkim	shrl	$1,%ecx
780238405Sjkim	movl	%edx,%ebp
781238405Sjkim	movl	%ecx,%ebx
782238405Sjkim	subl	$6,%eax
783238405Sjkim	jmp	.L035ctr32_loop6
784238405Sjkim.align	16
785238405Sjkim.L035ctr32_loop6:
786238405Sjkim	pshufd	$64,%xmm1,%xmm4
787238405Sjkim	movdqa	32(%esp),%xmm1
788238405Sjkim	pshufd	$192,%xmm0,%xmm5
789238405Sjkim	por	%xmm1,%xmm2
790238405Sjkim	pshufd	$128,%xmm0,%xmm6
791238405Sjkim	por	%xmm1,%xmm3
792238405Sjkim	pshufd	$64,%xmm0,%xmm7
793238405Sjkim	por	%xmm1,%xmm4
794238405Sjkim	por	%xmm1,%xmm5
795238405Sjkim	por	%xmm1,%xmm6
796238405Sjkim	por	%xmm1,%xmm7
797238405Sjkim	movups	(%ebp),%xmm0
798238405Sjkim	movups	16(%ebp),%xmm1
799238405Sjkim	leal	32(%ebp),%edx
800238405Sjkim	decl	%ecx
801238405Sjkim	pxor	%xmm0,%xmm2
802238405Sjkim	pxor	%xmm0,%xmm3
803238405Sjkim.byte	102,15,56,220,209
804238405Sjkim	pxor	%xmm0,%xmm4
805238405Sjkim.byte	102,15,56,220,217
806238405Sjkim	pxor	%xmm0,%xmm5
807238405Sjkim.byte	102,15,56,220,225
808238405Sjkim	pxor	%xmm0,%xmm6
809238405Sjkim.byte	102,15,56,220,233
810238405Sjkim	pxor	%xmm0,%xmm7
811238405Sjkim.byte	102,15,56,220,241
812238405Sjkim	movups	(%edx),%xmm0
813238405Sjkim.byte	102,15,56,220,249
814238405Sjkim	call	.L_aesni_encrypt6_enter
815238405Sjkim	movups	(%esi),%xmm1
816238405Sjkim	movups	16(%esi),%xmm0
817238405Sjkim	xorps	%xmm1,%xmm2
818238405Sjkim	movups	32(%esi),%xmm1
819238405Sjkim	xorps	%xmm0,%xmm3
820238405Sjkim	movups	%xmm2,(%edi)
821238405Sjkim	movdqa	16(%esp),%xmm0
822238405Sjkim	xorps	%xmm1,%xmm4
823238405Sjkim	movdqa	48(%esp),%xmm1
824238405Sjkim	movups	%xmm3,16(%edi)
825238405Sjkim	movups	%xmm4,32(%edi)
826238405Sjkim	paddd	%xmm0,%xmm1
827238405Sjkim	paddd	64(%esp),%xmm0
828238405Sjkim	movdqa	(%esp),%xmm2
829238405Sjkim	movups	48(%esi),%xmm3
830238405Sjkim	movups	64(%esi),%xmm4
831238405Sjkim	xorps	%xmm3,%xmm5
832238405Sjkim	movups	80(%esi),%xmm3
833238405Sjkim	leal	96(%esi),%esi
834238405Sjkim	movdqa	%xmm1,48(%esp)
835238405Sjkim.byte	102,15,56,0,202
836238405Sjkim	xorps	%xmm4,%xmm6
837238405Sjkim	movups	%xmm5,48(%edi)
838238405Sjkim	xorps	%xmm3,%xmm7
839238405Sjkim	movdqa	%xmm0,64(%esp)
840238405Sjkim.byte	102,15,56,0,194
841238405Sjkim	movups	%xmm6,64(%edi)
842238405Sjkim	pshufd	$192,%xmm1,%xmm2
843238405Sjkim	movups	%xmm7,80(%edi)
844238405Sjkim	leal	96(%edi),%edi
845238405Sjkim	movl	%ebx,%ecx
846238405Sjkim	pshufd	$128,%xmm1,%xmm3
847238405Sjkim	subl	$6,%eax
848238405Sjkim	jnc	.L035ctr32_loop6
849238405Sjkim	addl	$6,%eax
850238405Sjkim	jz	.L036ctr32_ret
851238405Sjkim	movl	%ebp,%edx
852238405Sjkim	leal	1(,%ecx,2),%ecx
853238405Sjkim	movdqa	32(%esp),%xmm7
854238405Sjkim.L034ctr32_tail:
855238405Sjkim	por	%xmm7,%xmm2
856238405Sjkim	cmpl	$2,%eax
857238405Sjkim	jb	.L037ctr32_one
858238405Sjkim	pshufd	$64,%xmm1,%xmm4
859238405Sjkim	por	%xmm7,%xmm3
860238405Sjkim	je	.L038ctr32_two
861238405Sjkim	pshufd	$192,%xmm0,%xmm5
862238405Sjkim	por	%xmm7,%xmm4
863238405Sjkim	cmpl	$4,%eax
864238405Sjkim	jb	.L039ctr32_three
865238405Sjkim	pshufd	$128,%xmm0,%xmm6
866238405Sjkim	por	%xmm7,%xmm5
867238405Sjkim	je	.L040ctr32_four
868238405Sjkim	por	%xmm7,%xmm6
869238405Sjkim	call	_aesni_encrypt6
870238405Sjkim	movups	(%esi),%xmm1
871238405Sjkim	movups	16(%esi),%xmm0
872238405Sjkim	xorps	%xmm1,%xmm2
873238405Sjkim	movups	32(%esi),%xmm1
874238405Sjkim	xorps	%xmm0,%xmm3
875238405Sjkim	movups	48(%esi),%xmm0
876238405Sjkim	xorps	%xmm1,%xmm4
877238405Sjkim	movups	64(%esi),%xmm1
878238405Sjkim	xorps	%xmm0,%xmm5
879238405Sjkim	movups	%xmm2,(%edi)
880238405Sjkim	xorps	%xmm1,%xmm6
881238405Sjkim	movups	%xmm3,16(%edi)
882238405Sjkim	movups	%xmm4,32(%edi)
883238405Sjkim	movups	%xmm5,48(%edi)
884238405Sjkim	movups	%xmm6,64(%edi)
885238405Sjkim	jmp	.L036ctr32_ret
886238405Sjkim.align	16
887238405Sjkim.L033ctr32_one_shortcut:
888238405Sjkim	movups	(%ebx),%xmm2
889238405Sjkim	movl	240(%edx),%ecx
890238405Sjkim.L037ctr32_one:
891238405Sjkim	movups	(%edx),%xmm0
892238405Sjkim	movups	16(%edx),%xmm1
893238405Sjkim	leal	32(%edx),%edx
894238405Sjkim	xorps	%xmm0,%xmm2
895238405Sjkim.L041enc1_loop_7:
896238405Sjkim.byte	102,15,56,220,209
897238405Sjkim	decl	%ecx
898238405Sjkim	movups	(%edx),%xmm1
899238405Sjkim	leal	16(%edx),%edx
900238405Sjkim	jnz	.L041enc1_loop_7
901238405Sjkim.byte	102,15,56,221,209
902238405Sjkim	movups	(%esi),%xmm6
903238405Sjkim	xorps	%xmm2,%xmm6
904238405Sjkim	movups	%xmm6,(%edi)
905238405Sjkim	jmp	.L036ctr32_ret
906238405Sjkim.align	16
907238405Sjkim.L038ctr32_two:
908238405Sjkim	call	_aesni_encrypt3
909238405Sjkim	movups	(%esi),%xmm5
910238405Sjkim	movups	16(%esi),%xmm6
911238405Sjkim	xorps	%xmm5,%xmm2
912238405Sjkim	xorps	%xmm6,%xmm3
913238405Sjkim	movups	%xmm2,(%edi)
914238405Sjkim	movups	%xmm3,16(%edi)
915238405Sjkim	jmp	.L036ctr32_ret
916238405Sjkim.align	16
917238405Sjkim.L039ctr32_three:
918238405Sjkim	call	_aesni_encrypt3
919238405Sjkim	movups	(%esi),%xmm5
920238405Sjkim	movups	16(%esi),%xmm6
921238405Sjkim	xorps	%xmm5,%xmm2
922238405Sjkim	movups	32(%esi),%xmm7
923238405Sjkim	xorps	%xmm6,%xmm3
924238405Sjkim	movups	%xmm2,(%edi)
925238405Sjkim	xorps	%xmm7,%xmm4
926238405Sjkim	movups	%xmm3,16(%edi)
927238405Sjkim	movups	%xmm4,32(%edi)
928238405Sjkim	jmp	.L036ctr32_ret
929238405Sjkim.align	16
930238405Sjkim.L040ctr32_four:
931238405Sjkim	call	_aesni_encrypt4
932238405Sjkim	movups	(%esi),%xmm6
933238405Sjkim	movups	16(%esi),%xmm7
934238405Sjkim	movups	32(%esi),%xmm1
935238405Sjkim	xorps	%xmm6,%xmm2
936238405Sjkim	movups	48(%esi),%xmm0
937238405Sjkim	xorps	%xmm7,%xmm3
938238405Sjkim	movups	%xmm2,(%edi)
939238405Sjkim	xorps	%xmm1,%xmm4
940238405Sjkim	movups	%xmm3,16(%edi)
941238405Sjkim	xorps	%xmm0,%xmm5
942238405Sjkim	movups	%xmm4,32(%edi)
943238405Sjkim	movups	%xmm5,48(%edi)
944238405Sjkim.L036ctr32_ret:
945238405Sjkim	movl	80(%esp),%esp
946238405Sjkim	popl	%edi
947238405Sjkim	popl	%esi
948238405Sjkim	popl	%ebx
949238405Sjkim	popl	%ebp
950238405Sjkim	ret
951238405Sjkim.size	aesni_ctr32_encrypt_blocks,.-.L_aesni_ctr32_encrypt_blocks_begin
952238405Sjkim.globl	aesni_xts_encrypt
953238405Sjkim.type	aesni_xts_encrypt,@function
954238405Sjkim.align	16
955238405Sjkimaesni_xts_encrypt:
956238405Sjkim.L_aesni_xts_encrypt_begin:
957238405Sjkim	pushl	%ebp
958238405Sjkim	pushl	%ebx
959238405Sjkim	pushl	%esi
960238405Sjkim	pushl	%edi
961238405Sjkim	movl	36(%esp),%edx
962238405Sjkim	movl	40(%esp),%esi
963238405Sjkim	movl	240(%edx),%ecx
964238405Sjkim	movups	(%esi),%xmm2
965238405Sjkim	movups	(%edx),%xmm0
966238405Sjkim	movups	16(%edx),%xmm1
967238405Sjkim	leal	32(%edx),%edx
968238405Sjkim	xorps	%xmm0,%xmm2
969238405Sjkim.L042enc1_loop_8:
970238405Sjkim.byte	102,15,56,220,209
971238405Sjkim	decl	%ecx
972238405Sjkim	movups	(%edx),%xmm1
973238405Sjkim	leal	16(%edx),%edx
974238405Sjkim	jnz	.L042enc1_loop_8
975238405Sjkim.byte	102,15,56,221,209
976238405Sjkim	movl	20(%esp),%esi
977238405Sjkim	movl	24(%esp),%edi
978238405Sjkim	movl	28(%esp),%eax
979238405Sjkim	movl	32(%esp),%edx
980238405Sjkim	movl	%esp,%ebp
981238405Sjkim	subl	$120,%esp
982238405Sjkim	movl	240(%edx),%ecx
983238405Sjkim	andl	$-16,%esp
984238405Sjkim	movl	$135,96(%esp)
985238405Sjkim	movl	$0,100(%esp)
986238405Sjkim	movl	$1,104(%esp)
987238405Sjkim	movl	$0,108(%esp)
988238405Sjkim	movl	%eax,112(%esp)
989238405Sjkim	movl	%ebp,116(%esp)
990238405Sjkim	movdqa	%xmm2,%xmm1
991238405Sjkim	pxor	%xmm0,%xmm0
992238405Sjkim	movdqa	96(%esp),%xmm3
993238405Sjkim	pcmpgtd	%xmm1,%xmm0
994238405Sjkim	andl	$-16,%eax
995238405Sjkim	movl	%edx,%ebp
996238405Sjkim	movl	%ecx,%ebx
997238405Sjkim	subl	$96,%eax
998238405Sjkim	jc	.L043xts_enc_short
999238405Sjkim	shrl	$1,%ecx
1000238405Sjkim	movl	%ecx,%ebx
1001238405Sjkim	jmp	.L044xts_enc_loop6
1002238405Sjkim.align	16
1003238405Sjkim.L044xts_enc_loop6:
1004238405Sjkim	pshufd	$19,%xmm0,%xmm2
1005238405Sjkim	pxor	%xmm0,%xmm0
1006238405Sjkim	movdqa	%xmm1,(%esp)
1007238405Sjkim	paddq	%xmm1,%xmm1
1008238405Sjkim	pand	%xmm3,%xmm2
1009238405Sjkim	pcmpgtd	%xmm1,%xmm0
1010238405Sjkim	pxor	%xmm2,%xmm1
1011238405Sjkim	pshufd	$19,%xmm0,%xmm2
1012238405Sjkim	pxor	%xmm0,%xmm0
1013238405Sjkim	movdqa	%xmm1,16(%esp)
1014238405Sjkim	paddq	%xmm1,%xmm1
1015238405Sjkim	pand	%xmm3,%xmm2
1016238405Sjkim	pcmpgtd	%xmm1,%xmm0
1017238405Sjkim	pxor	%xmm2,%xmm1
1018238405Sjkim	pshufd	$19,%xmm0,%xmm2
1019238405Sjkim	pxor	%xmm0,%xmm0
1020238405Sjkim	movdqa	%xmm1,32(%esp)
1021238405Sjkim	paddq	%xmm1,%xmm1
1022238405Sjkim	pand	%xmm3,%xmm2
1023238405Sjkim	pcmpgtd	%xmm1,%xmm0
1024238405Sjkim	pxor	%xmm2,%xmm1
1025238405Sjkim	pshufd	$19,%xmm0,%xmm2
1026238405Sjkim	pxor	%xmm0,%xmm0
1027238405Sjkim	movdqa	%xmm1,48(%esp)
1028238405Sjkim	paddq	%xmm1,%xmm1
1029238405Sjkim	pand	%xmm3,%xmm2
1030238405Sjkim	pcmpgtd	%xmm1,%xmm0
1031238405Sjkim	pxor	%xmm2,%xmm1
1032238405Sjkim	pshufd	$19,%xmm0,%xmm7
1033238405Sjkim	movdqa	%xmm1,64(%esp)
1034238405Sjkim	paddq	%xmm1,%xmm1
1035238405Sjkim	movups	(%ebp),%xmm0
1036238405Sjkim	pand	%xmm3,%xmm7
1037238405Sjkim	movups	(%esi),%xmm2
1038238405Sjkim	pxor	%xmm1,%xmm7
1039238405Sjkim	movdqu	16(%esi),%xmm3
1040238405Sjkim	xorps	%xmm0,%xmm2
1041238405Sjkim	movdqu	32(%esi),%xmm4
1042238405Sjkim	pxor	%xmm0,%xmm3
1043238405Sjkim	movdqu	48(%esi),%xmm5
1044238405Sjkim	pxor	%xmm0,%xmm4
1045238405Sjkim	movdqu	64(%esi),%xmm6
1046238405Sjkim	pxor	%xmm0,%xmm5
1047238405Sjkim	movdqu	80(%esi),%xmm1
1048238405Sjkim	pxor	%xmm0,%xmm6
1049238405Sjkim	leal	96(%esi),%esi
1050238405Sjkim	pxor	(%esp),%xmm2
1051238405Sjkim	movdqa	%xmm7,80(%esp)
1052238405Sjkim	pxor	%xmm1,%xmm7
1053238405Sjkim	movups	16(%ebp),%xmm1
1054238405Sjkim	leal	32(%ebp),%edx
1055238405Sjkim	pxor	16(%esp),%xmm3
1056238405Sjkim.byte	102,15,56,220,209
1057238405Sjkim	pxor	32(%esp),%xmm4
1058238405Sjkim.byte	102,15,56,220,217
1059238405Sjkim	pxor	48(%esp),%xmm5
1060238405Sjkim	decl	%ecx
1061238405Sjkim.byte	102,15,56,220,225
1062238405Sjkim	pxor	64(%esp),%xmm6
1063238405Sjkim.byte	102,15,56,220,233
1064238405Sjkim	pxor	%xmm0,%xmm7
1065238405Sjkim.byte	102,15,56,220,241
1066238405Sjkim	movups	(%edx),%xmm0
1067238405Sjkim.byte	102,15,56,220,249
1068238405Sjkim	call	.L_aesni_encrypt6_enter
1069238405Sjkim	movdqa	80(%esp),%xmm1
1070238405Sjkim	pxor	%xmm0,%xmm0
1071238405Sjkim	xorps	(%esp),%xmm2
1072238405Sjkim	pcmpgtd	%xmm1,%xmm0
1073238405Sjkim	xorps	16(%esp),%xmm3
1074238405Sjkim	movups	%xmm2,(%edi)
1075238405Sjkim	xorps	32(%esp),%xmm4
1076238405Sjkim	movups	%xmm3,16(%edi)
1077238405Sjkim	xorps	48(%esp),%xmm5
1078238405Sjkim	movups	%xmm4,32(%edi)
1079238405Sjkim	xorps	64(%esp),%xmm6
1080238405Sjkim	movups	%xmm5,48(%edi)
1081238405Sjkim	xorps	%xmm1,%xmm7
1082238405Sjkim	movups	%xmm6,64(%edi)
1083238405Sjkim	pshufd	$19,%xmm0,%xmm2
1084238405Sjkim	movups	%xmm7,80(%edi)
1085238405Sjkim	leal	96(%edi),%edi
1086238405Sjkim	movdqa	96(%esp),%xmm3
1087238405Sjkim	pxor	%xmm0,%xmm0
1088238405Sjkim	paddq	%xmm1,%xmm1
1089238405Sjkim	pand	%xmm3,%xmm2
1090238405Sjkim	pcmpgtd	%xmm1,%xmm0
1091238405Sjkim	movl	%ebx,%ecx
1092238405Sjkim	pxor	%xmm2,%xmm1
1093238405Sjkim	subl	$96,%eax
1094238405Sjkim	jnc	.L044xts_enc_loop6
1095238405Sjkim	leal	1(,%ecx,2),%ecx
1096238405Sjkim	movl	%ebp,%edx
1097238405Sjkim	movl	%ecx,%ebx
1098238405Sjkim.L043xts_enc_short:
1099238405Sjkim	addl	$96,%eax
1100238405Sjkim	jz	.L045xts_enc_done6x
1101238405Sjkim	movdqa	%xmm1,%xmm5
1102238405Sjkim	cmpl	$32,%eax
1103238405Sjkim	jb	.L046xts_enc_one
1104238405Sjkim	pshufd	$19,%xmm0,%xmm2
1105238405Sjkim	pxor	%xmm0,%xmm0
1106238405Sjkim	paddq	%xmm1,%xmm1
1107238405Sjkim	pand	%xmm3,%xmm2
1108238405Sjkim	pcmpgtd	%xmm1,%xmm0
1109238405Sjkim	pxor	%xmm2,%xmm1
1110238405Sjkim	je	.L047xts_enc_two
1111238405Sjkim	pshufd	$19,%xmm0,%xmm2
1112238405Sjkim	pxor	%xmm0,%xmm0
1113238405Sjkim	movdqa	%xmm1,%xmm6
1114238405Sjkim	paddq	%xmm1,%xmm1
1115238405Sjkim	pand	%xmm3,%xmm2
1116238405Sjkim	pcmpgtd	%xmm1,%xmm0
1117238405Sjkim	pxor	%xmm2,%xmm1
1118238405Sjkim	cmpl	$64,%eax
1119238405Sjkim	jb	.L048xts_enc_three
1120238405Sjkim	pshufd	$19,%xmm0,%xmm2
1121238405Sjkim	pxor	%xmm0,%xmm0
1122238405Sjkim	movdqa	%xmm1,%xmm7
1123238405Sjkim	paddq	%xmm1,%xmm1
1124238405Sjkim	pand	%xmm3,%xmm2
1125238405Sjkim	pcmpgtd	%xmm1,%xmm0
1126238405Sjkim	pxor	%xmm2,%xmm1
1127238405Sjkim	movdqa	%xmm5,(%esp)
1128238405Sjkim	movdqa	%xmm6,16(%esp)
1129238405Sjkim	je	.L049xts_enc_four
1130238405Sjkim	movdqa	%xmm7,32(%esp)
1131238405Sjkim	pshufd	$19,%xmm0,%xmm7
1132238405Sjkim	movdqa	%xmm1,48(%esp)
1133238405Sjkim	paddq	%xmm1,%xmm1
1134238405Sjkim	pand	%xmm3,%xmm7
1135238405Sjkim	pxor	%xmm1,%xmm7
1136238405Sjkim	movdqu	(%esi),%xmm2
1137238405Sjkim	movdqu	16(%esi),%xmm3
1138238405Sjkim	movdqu	32(%esi),%xmm4
1139238405Sjkim	pxor	(%esp),%xmm2
1140238405Sjkim	movdqu	48(%esi),%xmm5
1141238405Sjkim	pxor	16(%esp),%xmm3
1142238405Sjkim	movdqu	64(%esi),%xmm6
1143238405Sjkim	pxor	32(%esp),%xmm4
1144238405Sjkim	leal	80(%esi),%esi
1145238405Sjkim	pxor	48(%esp),%xmm5
1146238405Sjkim	movdqa	%xmm7,64(%esp)
1147238405Sjkim	pxor	%xmm7,%xmm6
1148238405Sjkim	call	_aesni_encrypt6
1149238405Sjkim	movaps	64(%esp),%xmm1
1150238405Sjkim	xorps	(%esp),%xmm2
1151238405Sjkim	xorps	16(%esp),%xmm3
1152238405Sjkim	xorps	32(%esp),%xmm4
1153238405Sjkim	movups	%xmm2,(%edi)
1154238405Sjkim	xorps	48(%esp),%xmm5
1155238405Sjkim	movups	%xmm3,16(%edi)
1156238405Sjkim	xorps	%xmm1,%xmm6
1157238405Sjkim	movups	%xmm4,32(%edi)
1158238405Sjkim	movups	%xmm5,48(%edi)
1159238405Sjkim	movups	%xmm6,64(%edi)
1160238405Sjkim	leal	80(%edi),%edi
1161238405Sjkim	jmp	.L050xts_enc_done
1162238405Sjkim.align	16
1163238405Sjkim.L046xts_enc_one:
1164238405Sjkim	movups	(%esi),%xmm2
1165238405Sjkim	leal	16(%esi),%esi
1166238405Sjkim	xorps	%xmm5,%xmm2
1167238405Sjkim	movups	(%edx),%xmm0
1168238405Sjkim	movups	16(%edx),%xmm1
1169238405Sjkim	leal	32(%edx),%edx
1170238405Sjkim	xorps	%xmm0,%xmm2
1171238405Sjkim.L051enc1_loop_9:
1172238405Sjkim.byte	102,15,56,220,209
1173238405Sjkim	decl	%ecx
1174238405Sjkim	movups	(%edx),%xmm1
1175238405Sjkim	leal	16(%edx),%edx
1176238405Sjkim	jnz	.L051enc1_loop_9
1177238405Sjkim.byte	102,15,56,221,209
1178238405Sjkim	xorps	%xmm5,%xmm2
1179238405Sjkim	movups	%xmm2,(%edi)
1180238405Sjkim	leal	16(%edi),%edi
1181238405Sjkim	movdqa	%xmm5,%xmm1
1182238405Sjkim	jmp	.L050xts_enc_done
1183238405Sjkim.align	16
1184238405Sjkim.L047xts_enc_two:
1185238405Sjkim	movaps	%xmm1,%xmm6
1186238405Sjkim	movups	(%esi),%xmm2
1187238405Sjkim	movups	16(%esi),%xmm3
1188238405Sjkim	leal	32(%esi),%esi
1189238405Sjkim	xorps	%xmm5,%xmm2
1190238405Sjkim	xorps	%xmm6,%xmm3
1191238405Sjkim	xorps	%xmm4,%xmm4
1192238405Sjkim	call	_aesni_encrypt3
1193238405Sjkim	xorps	%xmm5,%xmm2
1194238405Sjkim	xorps	%xmm6,%xmm3
1195238405Sjkim	movups	%xmm2,(%edi)
1196238405Sjkim	movups	%xmm3,16(%edi)
1197238405Sjkim	leal	32(%edi),%edi
1198238405Sjkim	movdqa	%xmm6,%xmm1
1199238405Sjkim	jmp	.L050xts_enc_done
1200238405Sjkim.align	16
1201238405Sjkim.L048xts_enc_three:
1202238405Sjkim	movaps	%xmm1,%xmm7
1203238405Sjkim	movups	(%esi),%xmm2
1204238405Sjkim	movups	16(%esi),%xmm3
1205238405Sjkim	movups	32(%esi),%xmm4
1206238405Sjkim	leal	48(%esi),%esi
1207238405Sjkim	xorps	%xmm5,%xmm2
1208238405Sjkim	xorps	%xmm6,%xmm3
1209238405Sjkim	xorps	%xmm7,%xmm4
1210238405Sjkim	call	_aesni_encrypt3
1211238405Sjkim	xorps	%xmm5,%xmm2
1212238405Sjkim	xorps	%xmm6,%xmm3
1213238405Sjkim	xorps	%xmm7,%xmm4
1214238405Sjkim	movups	%xmm2,(%edi)
1215238405Sjkim	movups	%xmm3,16(%edi)
1216238405Sjkim	movups	%xmm4,32(%edi)
1217238405Sjkim	leal	48(%edi),%edi
1218238405Sjkim	movdqa	%xmm7,%xmm1
1219238405Sjkim	jmp	.L050xts_enc_done
1220238405Sjkim.align	16
1221238405Sjkim.L049xts_enc_four:
1222238405Sjkim	movaps	%xmm1,%xmm6
1223238405Sjkim	movups	(%esi),%xmm2
1224238405Sjkim	movups	16(%esi),%xmm3
1225238405Sjkim	movups	32(%esi),%xmm4
1226238405Sjkim	xorps	(%esp),%xmm2
1227238405Sjkim	movups	48(%esi),%xmm5
1228238405Sjkim	leal	64(%esi),%esi
1229238405Sjkim	xorps	16(%esp),%xmm3
1230238405Sjkim	xorps	%xmm7,%xmm4
1231238405Sjkim	xorps	%xmm6,%xmm5
1232238405Sjkim	call	_aesni_encrypt4
1233238405Sjkim	xorps	(%esp),%xmm2
1234238405Sjkim	xorps	16(%esp),%xmm3
1235238405Sjkim	xorps	%xmm7,%xmm4
1236238405Sjkim	movups	%xmm2,(%edi)
1237238405Sjkim	xorps	%xmm6,%xmm5
1238238405Sjkim	movups	%xmm3,16(%edi)
1239238405Sjkim	movups	%xmm4,32(%edi)
1240238405Sjkim	movups	%xmm5,48(%edi)
1241238405Sjkim	leal	64(%edi),%edi
1242238405Sjkim	movdqa	%xmm6,%xmm1
1243238405Sjkim	jmp	.L050xts_enc_done
1244238405Sjkim.align	16
1245238405Sjkim.L045xts_enc_done6x:
1246238405Sjkim	movl	112(%esp),%eax
1247238405Sjkim	andl	$15,%eax
1248238405Sjkim	jz	.L052xts_enc_ret
1249238405Sjkim	movdqa	%xmm1,%xmm5
1250238405Sjkim	movl	%eax,112(%esp)
1251238405Sjkim	jmp	.L053xts_enc_steal
1252238405Sjkim.align	16
1253238405Sjkim.L050xts_enc_done:
1254238405Sjkim	movl	112(%esp),%eax
1255238405Sjkim	pxor	%xmm0,%xmm0
1256238405Sjkim	andl	$15,%eax
1257238405Sjkim	jz	.L052xts_enc_ret
1258238405Sjkim	pcmpgtd	%xmm1,%xmm0
1259238405Sjkim	movl	%eax,112(%esp)
1260238405Sjkim	pshufd	$19,%xmm0,%xmm5
1261238405Sjkim	paddq	%xmm1,%xmm1
1262238405Sjkim	pand	96(%esp),%xmm5
1263238405Sjkim	pxor	%xmm1,%xmm5
1264238405Sjkim.L053xts_enc_steal:
1265238405Sjkim	movzbl	(%esi),%ecx
1266238405Sjkim	movzbl	-16(%edi),%edx
1267238405Sjkim	leal	1(%esi),%esi
1268238405Sjkim	movb	%cl,-16(%edi)
1269238405Sjkim	movb	%dl,(%edi)
1270238405Sjkim	leal	1(%edi),%edi
1271238405Sjkim	subl	$1,%eax
1272238405Sjkim	jnz	.L053xts_enc_steal
1273238405Sjkim	subl	112(%esp),%edi
1274238405Sjkim	movl	%ebp,%edx
1275238405Sjkim	movl	%ebx,%ecx
1276238405Sjkim	movups	-16(%edi),%xmm2
1277238405Sjkim	xorps	%xmm5,%xmm2
1278238405Sjkim	movups	(%edx),%xmm0
1279238405Sjkim	movups	16(%edx),%xmm1
1280238405Sjkim	leal	32(%edx),%edx
1281238405Sjkim	xorps	%xmm0,%xmm2
1282238405Sjkim.L054enc1_loop_10:
1283238405Sjkim.byte	102,15,56,220,209
1284238405Sjkim	decl	%ecx
1285238405Sjkim	movups	(%edx),%xmm1
1286238405Sjkim	leal	16(%edx),%edx
1287238405Sjkim	jnz	.L054enc1_loop_10
1288238405Sjkim.byte	102,15,56,221,209
1289238405Sjkim	xorps	%xmm5,%xmm2
1290238405Sjkim	movups	%xmm2,-16(%edi)
1291238405Sjkim.L052xts_enc_ret:
1292238405Sjkim	movl	116(%esp),%esp
1293238405Sjkim	popl	%edi
1294238405Sjkim	popl	%esi
1295238405Sjkim	popl	%ebx
1296238405Sjkim	popl	%ebp
1297238405Sjkim	ret
1298238405Sjkim.size	aesni_xts_encrypt,.-.L_aesni_xts_encrypt_begin
1299238405Sjkim.globl	aesni_xts_decrypt
1300238405Sjkim.type	aesni_xts_decrypt,@function
1301238405Sjkim.align	16
1302238405Sjkimaesni_xts_decrypt:
1303238405Sjkim.L_aesni_xts_decrypt_begin:
1304238405Sjkim	pushl	%ebp
1305238405Sjkim	pushl	%ebx
1306238405Sjkim	pushl	%esi
1307238405Sjkim	pushl	%edi
1308238405Sjkim	movl	36(%esp),%edx
1309238405Sjkim	movl	40(%esp),%esi
1310238405Sjkim	movl	240(%edx),%ecx
1311238405Sjkim	movups	(%esi),%xmm2
1312238405Sjkim	movups	(%edx),%xmm0
1313238405Sjkim	movups	16(%edx),%xmm1
1314238405Sjkim	leal	32(%edx),%edx
1315238405Sjkim	xorps	%xmm0,%xmm2
1316238405Sjkim.L055enc1_loop_11:
1317238405Sjkim.byte	102,15,56,220,209
1318238405Sjkim	decl	%ecx
1319238405Sjkim	movups	(%edx),%xmm1
1320238405Sjkim	leal	16(%edx),%edx
1321238405Sjkim	jnz	.L055enc1_loop_11
1322238405Sjkim.byte	102,15,56,221,209
1323238405Sjkim	movl	20(%esp),%esi
1324238405Sjkim	movl	24(%esp),%edi
1325238405Sjkim	movl	28(%esp),%eax
1326238405Sjkim	movl	32(%esp),%edx
1327238405Sjkim	movl	%esp,%ebp
1328238405Sjkim	subl	$120,%esp
1329238405Sjkim	andl	$-16,%esp
1330238405Sjkim	xorl	%ebx,%ebx
1331238405Sjkim	testl	$15,%eax
1332238405Sjkim	setnz	%bl
1333238405Sjkim	shll	$4,%ebx
1334238405Sjkim	subl	%ebx,%eax
1335238405Sjkim	movl	$135,96(%esp)
1336238405Sjkim	movl	$0,100(%esp)
1337238405Sjkim	movl	$1,104(%esp)
1338238405Sjkim	movl	$0,108(%esp)
1339238405Sjkim	movl	%eax,112(%esp)
1340238405Sjkim	movl	%ebp,116(%esp)
1341238405Sjkim	movl	240(%edx),%ecx
1342238405Sjkim	movl	%edx,%ebp
1343238405Sjkim	movl	%ecx,%ebx
1344238405Sjkim	movdqa	%xmm2,%xmm1
1345238405Sjkim	pxor	%xmm0,%xmm0
1346238405Sjkim	movdqa	96(%esp),%xmm3
1347238405Sjkim	pcmpgtd	%xmm1,%xmm0
1348238405Sjkim	andl	$-16,%eax
1349238405Sjkim	subl	$96,%eax
1350238405Sjkim	jc	.L056xts_dec_short
1351238405Sjkim	shrl	$1,%ecx
1352238405Sjkim	movl	%ecx,%ebx
1353238405Sjkim	jmp	.L057xts_dec_loop6
1354238405Sjkim.align	16
1355238405Sjkim.L057xts_dec_loop6:
1356238405Sjkim	pshufd	$19,%xmm0,%xmm2
1357238405Sjkim	pxor	%xmm0,%xmm0
1358238405Sjkim	movdqa	%xmm1,(%esp)
1359238405Sjkim	paddq	%xmm1,%xmm1
1360238405Sjkim	pand	%xmm3,%xmm2
1361238405Sjkim	pcmpgtd	%xmm1,%xmm0
1362238405Sjkim	pxor	%xmm2,%xmm1
1363238405Sjkim	pshufd	$19,%xmm0,%xmm2
1364238405Sjkim	pxor	%xmm0,%xmm0
1365238405Sjkim	movdqa	%xmm1,16(%esp)
1366238405Sjkim	paddq	%xmm1,%xmm1
1367238405Sjkim	pand	%xmm3,%xmm2
1368238405Sjkim	pcmpgtd	%xmm1,%xmm0
1369238405Sjkim	pxor	%xmm2,%xmm1
1370238405Sjkim	pshufd	$19,%xmm0,%xmm2
1371238405Sjkim	pxor	%xmm0,%xmm0
1372238405Sjkim	movdqa	%xmm1,32(%esp)
1373238405Sjkim	paddq	%xmm1,%xmm1
1374238405Sjkim	pand	%xmm3,%xmm2
1375238405Sjkim	pcmpgtd	%xmm1,%xmm0
1376238405Sjkim	pxor	%xmm2,%xmm1
1377238405Sjkim	pshufd	$19,%xmm0,%xmm2
1378238405Sjkim	pxor	%xmm0,%xmm0
1379238405Sjkim	movdqa	%xmm1,48(%esp)
1380238405Sjkim	paddq	%xmm1,%xmm1
1381238405Sjkim	pand	%xmm3,%xmm2
1382238405Sjkim	pcmpgtd	%xmm1,%xmm0
1383238405Sjkim	pxor	%xmm2,%xmm1
1384238405Sjkim	pshufd	$19,%xmm0,%xmm7
1385238405Sjkim	movdqa	%xmm1,64(%esp)
1386238405Sjkim	paddq	%xmm1,%xmm1
1387238405Sjkim	movups	(%ebp),%xmm0
1388238405Sjkim	pand	%xmm3,%xmm7
1389238405Sjkim	movups	(%esi),%xmm2
1390238405Sjkim	pxor	%xmm1,%xmm7
1391238405Sjkim	movdqu	16(%esi),%xmm3
1392238405Sjkim	xorps	%xmm0,%xmm2
1393238405Sjkim	movdqu	32(%esi),%xmm4
1394238405Sjkim	pxor	%xmm0,%xmm3
1395238405Sjkim	movdqu	48(%esi),%xmm5
1396238405Sjkim	pxor	%xmm0,%xmm4
1397238405Sjkim	movdqu	64(%esi),%xmm6
1398238405Sjkim	pxor	%xmm0,%xmm5
1399238405Sjkim	movdqu	80(%esi),%xmm1
1400238405Sjkim	pxor	%xmm0,%xmm6
1401238405Sjkim	leal	96(%esi),%esi
1402238405Sjkim	pxor	(%esp),%xmm2
1403238405Sjkim	movdqa	%xmm7,80(%esp)
1404238405Sjkim	pxor	%xmm1,%xmm7
1405238405Sjkim	movups	16(%ebp),%xmm1
1406238405Sjkim	leal	32(%ebp),%edx
1407238405Sjkim	pxor	16(%esp),%xmm3
1408238405Sjkim.byte	102,15,56,222,209
1409238405Sjkim	pxor	32(%esp),%xmm4
1410238405Sjkim.byte	102,15,56,222,217
1411238405Sjkim	pxor	48(%esp),%xmm5
1412238405Sjkim	decl	%ecx
1413238405Sjkim.byte	102,15,56,222,225
1414238405Sjkim	pxor	64(%esp),%xmm6
1415238405Sjkim.byte	102,15,56,222,233
1416238405Sjkim	pxor	%xmm0,%xmm7
1417238405Sjkim.byte	102,15,56,222,241
1418238405Sjkim	movups	(%edx),%xmm0
1419238405Sjkim.byte	102,15,56,222,249
1420238405Sjkim	call	.L_aesni_decrypt6_enter
1421238405Sjkim	movdqa	80(%esp),%xmm1
1422238405Sjkim	pxor	%xmm0,%xmm0
1423238405Sjkim	xorps	(%esp),%xmm2
1424238405Sjkim	pcmpgtd	%xmm1,%xmm0
1425238405Sjkim	xorps	16(%esp),%xmm3
1426238405Sjkim	movups	%xmm2,(%edi)
1427238405Sjkim	xorps	32(%esp),%xmm4
1428238405Sjkim	movups	%xmm3,16(%edi)
1429238405Sjkim	xorps	48(%esp),%xmm5
1430238405Sjkim	movups	%xmm4,32(%edi)
1431238405Sjkim	xorps	64(%esp),%xmm6
1432238405Sjkim	movups	%xmm5,48(%edi)
1433238405Sjkim	xorps	%xmm1,%xmm7
1434238405Sjkim	movups	%xmm6,64(%edi)
1435238405Sjkim	pshufd	$19,%xmm0,%xmm2
1436238405Sjkim	movups	%xmm7,80(%edi)
1437238405Sjkim	leal	96(%edi),%edi
1438238405Sjkim	movdqa	96(%esp),%xmm3
1439238405Sjkim	pxor	%xmm0,%xmm0
1440238405Sjkim	paddq	%xmm1,%xmm1
1441238405Sjkim	pand	%xmm3,%xmm2
1442238405Sjkim	pcmpgtd	%xmm1,%xmm0
1443238405Sjkim	movl	%ebx,%ecx
1444238405Sjkim	pxor	%xmm2,%xmm1
1445238405Sjkim	subl	$96,%eax
1446238405Sjkim	jnc	.L057xts_dec_loop6
1447238405Sjkim	leal	1(,%ecx,2),%ecx
1448238405Sjkim	movl	%ebp,%edx
1449238405Sjkim	movl	%ecx,%ebx
1450238405Sjkim.L056xts_dec_short:
1451238405Sjkim	addl	$96,%eax
1452238405Sjkim	jz	.L058xts_dec_done6x
1453238405Sjkim	movdqa	%xmm1,%xmm5
1454238405Sjkim	cmpl	$32,%eax
1455238405Sjkim	jb	.L059xts_dec_one
1456238405Sjkim	pshufd	$19,%xmm0,%xmm2
1457238405Sjkim	pxor	%xmm0,%xmm0
1458238405Sjkim	paddq	%xmm1,%xmm1
1459238405Sjkim	pand	%xmm3,%xmm2
1460238405Sjkim	pcmpgtd	%xmm1,%xmm0
1461238405Sjkim	pxor	%xmm2,%xmm1
1462238405Sjkim	je	.L060xts_dec_two
1463238405Sjkim	pshufd	$19,%xmm0,%xmm2
1464238405Sjkim	pxor	%xmm0,%xmm0
1465238405Sjkim	movdqa	%xmm1,%xmm6
1466238405Sjkim	paddq	%xmm1,%xmm1
1467238405Sjkim	pand	%xmm3,%xmm2
1468238405Sjkim	pcmpgtd	%xmm1,%xmm0
1469238405Sjkim	pxor	%xmm2,%xmm1
1470238405Sjkim	cmpl	$64,%eax
1471238405Sjkim	jb	.L061xts_dec_three
1472238405Sjkim	pshufd	$19,%xmm0,%xmm2
1473238405Sjkim	pxor	%xmm0,%xmm0
1474238405Sjkim	movdqa	%xmm1,%xmm7
1475238405Sjkim	paddq	%xmm1,%xmm1
1476238405Sjkim	pand	%xmm3,%xmm2
1477238405Sjkim	pcmpgtd	%xmm1,%xmm0
1478238405Sjkim	pxor	%xmm2,%xmm1
1479238405Sjkim	movdqa	%xmm5,(%esp)
1480238405Sjkim	movdqa	%xmm6,16(%esp)
1481238405Sjkim	je	.L062xts_dec_four
1482238405Sjkim	movdqa	%xmm7,32(%esp)
1483238405Sjkim	pshufd	$19,%xmm0,%xmm7
1484238405Sjkim	movdqa	%xmm1,48(%esp)
1485238405Sjkim	paddq	%xmm1,%xmm1
1486238405Sjkim	pand	%xmm3,%xmm7
1487238405Sjkim	pxor	%xmm1,%xmm7
1488238405Sjkim	movdqu	(%esi),%xmm2
1489238405Sjkim	movdqu	16(%esi),%xmm3
1490238405Sjkim	movdqu	32(%esi),%xmm4
1491238405Sjkim	pxor	(%esp),%xmm2
1492238405Sjkim	movdqu	48(%esi),%xmm5
1493238405Sjkim	pxor	16(%esp),%xmm3
1494238405Sjkim	movdqu	64(%esi),%xmm6
1495238405Sjkim	pxor	32(%esp),%xmm4
1496238405Sjkim	leal	80(%esi),%esi
1497238405Sjkim	pxor	48(%esp),%xmm5
1498238405Sjkim	movdqa	%xmm7,64(%esp)
1499238405Sjkim	pxor	%xmm7,%xmm6
1500238405Sjkim	call	_aesni_decrypt6
1501238405Sjkim	movaps	64(%esp),%xmm1
1502238405Sjkim	xorps	(%esp),%xmm2
1503238405Sjkim	xorps	16(%esp),%xmm3
1504238405Sjkim	xorps	32(%esp),%xmm4
1505238405Sjkim	movups	%xmm2,(%edi)
1506238405Sjkim	xorps	48(%esp),%xmm5
1507238405Sjkim	movups	%xmm3,16(%edi)
1508238405Sjkim	xorps	%xmm1,%xmm6
1509238405Sjkim	movups	%xmm4,32(%edi)
1510238405Sjkim	movups	%xmm5,48(%edi)
1511238405Sjkim	movups	%xmm6,64(%edi)
1512238405Sjkim	leal	80(%edi),%edi
1513238405Sjkim	jmp	.L063xts_dec_done
1514238405Sjkim.align	16
1515238405Sjkim.L059xts_dec_one:
1516238405Sjkim	movups	(%esi),%xmm2
1517238405Sjkim	leal	16(%esi),%esi
1518238405Sjkim	xorps	%xmm5,%xmm2
1519238405Sjkim	movups	(%edx),%xmm0
1520238405Sjkim	movups	16(%edx),%xmm1
1521238405Sjkim	leal	32(%edx),%edx
1522238405Sjkim	xorps	%xmm0,%xmm2
1523238405Sjkim.L064dec1_loop_12:
1524238405Sjkim.byte	102,15,56,222,209
1525238405Sjkim	decl	%ecx
1526238405Sjkim	movups	(%edx),%xmm1
1527238405Sjkim	leal	16(%edx),%edx
1528238405Sjkim	jnz	.L064dec1_loop_12
1529238405Sjkim.byte	102,15,56,223,209
1530238405Sjkim	xorps	%xmm5,%xmm2
1531238405Sjkim	movups	%xmm2,(%edi)
1532238405Sjkim	leal	16(%edi),%edi
1533238405Sjkim	movdqa	%xmm5,%xmm1
1534238405Sjkim	jmp	.L063xts_dec_done
1535238405Sjkim.align	16
1536238405Sjkim.L060xts_dec_two:
1537238405Sjkim	movaps	%xmm1,%xmm6
1538238405Sjkim	movups	(%esi),%xmm2
1539238405Sjkim	movups	16(%esi),%xmm3
1540238405Sjkim	leal	32(%esi),%esi
1541238405Sjkim	xorps	%xmm5,%xmm2
1542238405Sjkim	xorps	%xmm6,%xmm3
1543238405Sjkim	call	_aesni_decrypt3
1544238405Sjkim	xorps	%xmm5,%xmm2
1545238405Sjkim	xorps	%xmm6,%xmm3
1546238405Sjkim	movups	%xmm2,(%edi)
1547238405Sjkim	movups	%xmm3,16(%edi)
1548238405Sjkim	leal	32(%edi),%edi
1549238405Sjkim	movdqa	%xmm6,%xmm1
1550238405Sjkim	jmp	.L063xts_dec_done
1551238405Sjkim.align	16
1552238405Sjkim.L061xts_dec_three:
1553238405Sjkim	movaps	%xmm1,%xmm7
1554238405Sjkim	movups	(%esi),%xmm2
1555238405Sjkim	movups	16(%esi),%xmm3
1556238405Sjkim	movups	32(%esi),%xmm4
1557238405Sjkim	leal	48(%esi),%esi
1558238405Sjkim	xorps	%xmm5,%xmm2
1559238405Sjkim	xorps	%xmm6,%xmm3
1560238405Sjkim	xorps	%xmm7,%xmm4
1561238405Sjkim	call	_aesni_decrypt3
1562238405Sjkim	xorps	%xmm5,%xmm2
1563238405Sjkim	xorps	%xmm6,%xmm3
1564238405Sjkim	xorps	%xmm7,%xmm4
1565238405Sjkim	movups	%xmm2,(%edi)
1566238405Sjkim	movups	%xmm3,16(%edi)
1567238405Sjkim	movups	%xmm4,32(%edi)
1568238405Sjkim	leal	48(%edi),%edi
1569238405Sjkim	movdqa	%xmm7,%xmm1
1570238405Sjkim	jmp	.L063xts_dec_done
1571238405Sjkim.align	16
1572238405Sjkim.L062xts_dec_four:
1573238405Sjkim	movaps	%xmm1,%xmm6
1574238405Sjkim	movups	(%esi),%xmm2
1575238405Sjkim	movups	16(%esi),%xmm3
1576238405Sjkim	movups	32(%esi),%xmm4
1577238405Sjkim	xorps	(%esp),%xmm2
1578238405Sjkim	movups	48(%esi),%xmm5
1579238405Sjkim	leal	64(%esi),%esi
1580238405Sjkim	xorps	16(%esp),%xmm3
1581238405Sjkim	xorps	%xmm7,%xmm4
1582238405Sjkim	xorps	%xmm6,%xmm5
1583238405Sjkim	call	_aesni_decrypt4
1584238405Sjkim	xorps	(%esp),%xmm2
1585238405Sjkim	xorps	16(%esp),%xmm3
1586238405Sjkim	xorps	%xmm7,%xmm4
1587238405Sjkim	movups	%xmm2,(%edi)
1588238405Sjkim	xorps	%xmm6,%xmm5
1589238405Sjkim	movups	%xmm3,16(%edi)
1590238405Sjkim	movups	%xmm4,32(%edi)
1591238405Sjkim	movups	%xmm5,48(%edi)
1592238405Sjkim	leal	64(%edi),%edi
1593238405Sjkim	movdqa	%xmm6,%xmm1
1594238405Sjkim	jmp	.L063xts_dec_done
1595238405Sjkim.align	16
1596238405Sjkim.L058xts_dec_done6x:
1597238405Sjkim	movl	112(%esp),%eax
1598238405Sjkim	andl	$15,%eax
1599238405Sjkim	jz	.L065xts_dec_ret
1600238405Sjkim	movl	%eax,112(%esp)
1601238405Sjkim	jmp	.L066xts_dec_only_one_more
1602238405Sjkim.align	16
1603238405Sjkim.L063xts_dec_done:
1604238405Sjkim	movl	112(%esp),%eax
1605238405Sjkim	pxor	%xmm0,%xmm0
1606238405Sjkim	andl	$15,%eax
1607238405Sjkim	jz	.L065xts_dec_ret
1608238405Sjkim	pcmpgtd	%xmm1,%xmm0
1609238405Sjkim	movl	%eax,112(%esp)
1610238405Sjkim	pshufd	$19,%xmm0,%xmm2
1611238405Sjkim	pxor	%xmm0,%xmm0
1612238405Sjkim	movdqa	96(%esp),%xmm3
1613238405Sjkim	paddq	%xmm1,%xmm1
1614238405Sjkim	pand	%xmm3,%xmm2
1615238405Sjkim	pcmpgtd	%xmm1,%xmm0
1616238405Sjkim	pxor	%xmm2,%xmm1
1617238405Sjkim.L066xts_dec_only_one_more:
1618238405Sjkim	pshufd	$19,%xmm0,%xmm5
1619238405Sjkim	movdqa	%xmm1,%xmm6
1620238405Sjkim	paddq	%xmm1,%xmm1
1621238405Sjkim	pand	%xmm3,%xmm5
1622238405Sjkim	pxor	%xmm1,%xmm5
1623238405Sjkim	movl	%ebp,%edx
1624238405Sjkim	movl	%ebx,%ecx
1625238405Sjkim	movups	(%esi),%xmm2
1626238405Sjkim	xorps	%xmm5,%xmm2
1627238405Sjkim	movups	(%edx),%xmm0
1628238405Sjkim	movups	16(%edx),%xmm1
1629238405Sjkim	leal	32(%edx),%edx
1630238405Sjkim	xorps	%xmm0,%xmm2
1631238405Sjkim.L067dec1_loop_13:
1632238405Sjkim.byte	102,15,56,222,209
1633238405Sjkim	decl	%ecx
1634238405Sjkim	movups	(%edx),%xmm1
1635238405Sjkim	leal	16(%edx),%edx
1636238405Sjkim	jnz	.L067dec1_loop_13
1637238405Sjkim.byte	102,15,56,223,209
1638238405Sjkim	xorps	%xmm5,%xmm2
1639238405Sjkim	movups	%xmm2,(%edi)
1640238405Sjkim.L068xts_dec_steal:
1641238405Sjkim	movzbl	16(%esi),%ecx
1642238405Sjkim	movzbl	(%edi),%edx
1643238405Sjkim	leal	1(%esi),%esi
1644238405Sjkim	movb	%cl,(%edi)
1645238405Sjkim	movb	%dl,16(%edi)
1646238405Sjkim	leal	1(%edi),%edi
1647238405Sjkim	subl	$1,%eax
1648238405Sjkim	jnz	.L068xts_dec_steal
1649238405Sjkim	subl	112(%esp),%edi
1650238405Sjkim	movl	%ebp,%edx
1651238405Sjkim	movl	%ebx,%ecx
1652238405Sjkim	movups	(%edi),%xmm2
1653238405Sjkim	xorps	%xmm6,%xmm2
1654238405Sjkim	movups	(%edx),%xmm0
1655238405Sjkim	movups	16(%edx),%xmm1
1656238405Sjkim	leal	32(%edx),%edx
1657238405Sjkim	xorps	%xmm0,%xmm2
1658238405Sjkim.L069dec1_loop_14:
1659238405Sjkim.byte	102,15,56,222,209
1660238405Sjkim	decl	%ecx
1661238405Sjkim	movups	(%edx),%xmm1
1662238405Sjkim	leal	16(%edx),%edx
1663238405Sjkim	jnz	.L069dec1_loop_14
1664238405Sjkim.byte	102,15,56,223,209
1665238405Sjkim	xorps	%xmm6,%xmm2
1666238405Sjkim	movups	%xmm2,(%edi)
1667238405Sjkim.L065xts_dec_ret:
1668238405Sjkim	movl	116(%esp),%esp
1669238405Sjkim	popl	%edi
1670238405Sjkim	popl	%esi
1671238405Sjkim	popl	%ebx
1672238405Sjkim	popl	%ebp
1673238405Sjkim	ret
1674238405Sjkim.size	aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin
1675238405Sjkim.globl	aesni_cbc_encrypt
1676238405Sjkim.type	aesni_cbc_encrypt,@function
1677238405Sjkim.align	16
1678238405Sjkimaesni_cbc_encrypt:
1679238405Sjkim.L_aesni_cbc_encrypt_begin:
1680238405Sjkim	pushl	%ebp
1681238405Sjkim	pushl	%ebx
1682238405Sjkim	pushl	%esi
1683238405Sjkim	pushl	%edi
1684238405Sjkim	movl	20(%esp),%esi
1685238405Sjkim	movl	%esp,%ebx
1686238405Sjkim	movl	24(%esp),%edi
1687238405Sjkim	subl	$24,%ebx
1688238405Sjkim	movl	28(%esp),%eax
1689238405Sjkim	andl	$-16,%ebx
1690238405Sjkim	movl	32(%esp),%edx
1691238405Sjkim	movl	36(%esp),%ebp
1692238405Sjkim	testl	%eax,%eax
1693238405Sjkim	jz	.L070cbc_abort
1694238405Sjkim	cmpl	$0,40(%esp)
1695238405Sjkim	xchgl	%esp,%ebx
1696238405Sjkim	movups	(%ebp),%xmm7
1697238405Sjkim	movl	240(%edx),%ecx
1698238405Sjkim	movl	%edx,%ebp
1699238405Sjkim	movl	%ebx,16(%esp)
1700238405Sjkim	movl	%ecx,%ebx
1701238405Sjkim	je	.L071cbc_decrypt
1702238405Sjkim	movaps	%xmm7,%xmm2
1703238405Sjkim	cmpl	$16,%eax
1704238405Sjkim	jb	.L072cbc_enc_tail
1705238405Sjkim	subl	$16,%eax
1706238405Sjkim	jmp	.L073cbc_enc_loop
1707238405Sjkim.align	16
1708238405Sjkim.L073cbc_enc_loop:
1709238405Sjkim	movups	(%esi),%xmm7
1710238405Sjkim	leal	16(%esi),%esi
1711238405Sjkim	movups	(%edx),%xmm0
1712238405Sjkim	movups	16(%edx),%xmm1
1713238405Sjkim	xorps	%xmm0,%xmm7
1714238405Sjkim	leal	32(%edx),%edx
1715238405Sjkim	xorps	%xmm7,%xmm2
1716238405Sjkim.L074enc1_loop_15:
1717238405Sjkim.byte	102,15,56,220,209
1718238405Sjkim	decl	%ecx
1719238405Sjkim	movups	(%edx),%xmm1
1720238405Sjkim	leal	16(%edx),%edx
1721238405Sjkim	jnz	.L074enc1_loop_15
1722238405Sjkim.byte	102,15,56,221,209
1723238405Sjkim	movl	%ebx,%ecx
1724238405Sjkim	movl	%ebp,%edx
1725238405Sjkim	movups	%xmm2,(%edi)
1726238405Sjkim	leal	16(%edi),%edi
1727238405Sjkim	subl	$16,%eax
1728238405Sjkim	jnc	.L073cbc_enc_loop
1729238405Sjkim	addl	$16,%eax
1730238405Sjkim	jnz	.L072cbc_enc_tail
1731238405Sjkim	movaps	%xmm2,%xmm7
1732238405Sjkim	jmp	.L075cbc_ret
1733238405Sjkim.L072cbc_enc_tail:
1734238405Sjkim	movl	%eax,%ecx
1735238405Sjkim.long	2767451785
1736238405Sjkim	movl	$16,%ecx
1737238405Sjkim	subl	%eax,%ecx
1738238405Sjkim	xorl	%eax,%eax
1739238405Sjkim.long	2868115081
1740238405Sjkim	leal	-16(%edi),%edi
1741238405Sjkim	movl	%ebx,%ecx
1742238405Sjkim	movl	%edi,%esi
1743238405Sjkim	movl	%ebp,%edx
1744238405Sjkim	jmp	.L073cbc_enc_loop
1745238405Sjkim.align	16
1746238405Sjkim.L071cbc_decrypt:
1747238405Sjkim	cmpl	$80,%eax
1748238405Sjkim	jbe	.L076cbc_dec_tail
1749238405Sjkim	movaps	%xmm7,(%esp)
1750238405Sjkim	subl	$80,%eax
1751238405Sjkim	jmp	.L077cbc_dec_loop6_enter
1752238405Sjkim.align	16
1753238405Sjkim.L078cbc_dec_loop6:
1754238405Sjkim	movaps	%xmm0,(%esp)
1755238405Sjkim	movups	%xmm7,(%edi)
1756238405Sjkim	leal	16(%edi),%edi
1757238405Sjkim.L077cbc_dec_loop6_enter:
1758238405Sjkim	movdqu	(%esi),%xmm2
1759238405Sjkim	movdqu	16(%esi),%xmm3
1760238405Sjkim	movdqu	32(%esi),%xmm4
1761238405Sjkim	movdqu	48(%esi),%xmm5
1762238405Sjkim	movdqu	64(%esi),%xmm6
1763238405Sjkim	movdqu	80(%esi),%xmm7
1764238405Sjkim	call	_aesni_decrypt6
1765238405Sjkim	movups	(%esi),%xmm1
1766238405Sjkim	movups	16(%esi),%xmm0
1767238405Sjkim	xorps	(%esp),%xmm2
1768238405Sjkim	xorps	%xmm1,%xmm3
1769238405Sjkim	movups	32(%esi),%xmm1
1770238405Sjkim	xorps	%xmm0,%xmm4
1771238405Sjkim	movups	48(%esi),%xmm0
1772238405Sjkim	xorps	%xmm1,%xmm5
1773238405Sjkim	movups	64(%esi),%xmm1
1774238405Sjkim	xorps	%xmm0,%xmm6
1775238405Sjkim	movups	80(%esi),%xmm0
1776238405Sjkim	xorps	%xmm1,%xmm7
1777238405Sjkim	movups	%xmm2,(%edi)
1778238405Sjkim	movups	%xmm3,16(%edi)
1779238405Sjkim	leal	96(%esi),%esi
1780238405Sjkim	movups	%xmm4,32(%edi)
1781238405Sjkim	movl	%ebx,%ecx
1782238405Sjkim	movups	%xmm5,48(%edi)
1783238405Sjkim	movl	%ebp,%edx
1784238405Sjkim	movups	%xmm6,64(%edi)
1785238405Sjkim	leal	80(%edi),%edi
1786238405Sjkim	subl	$96,%eax
1787238405Sjkim	ja	.L078cbc_dec_loop6
1788238405Sjkim	movaps	%xmm7,%xmm2
1789238405Sjkim	movaps	%xmm0,%xmm7
1790238405Sjkim	addl	$80,%eax
1791238405Sjkim	jle	.L079cbc_dec_tail_collected
1792238405Sjkim	movups	%xmm2,(%edi)
1793238405Sjkim	leal	16(%edi),%edi
1794238405Sjkim.L076cbc_dec_tail:
1795238405Sjkim	movups	(%esi),%xmm2
1796238405Sjkim	movaps	%xmm2,%xmm6
1797238405Sjkim	cmpl	$16,%eax
1798238405Sjkim	jbe	.L080cbc_dec_one
1799238405Sjkim	movups	16(%esi),%xmm3
1800238405Sjkim	movaps	%xmm3,%xmm5
1801238405Sjkim	cmpl	$32,%eax
1802238405Sjkim	jbe	.L081cbc_dec_two
1803238405Sjkim	movups	32(%esi),%xmm4
1804238405Sjkim	cmpl	$48,%eax
1805238405Sjkim	jbe	.L082cbc_dec_three
1806238405Sjkim	movups	48(%esi),%xmm5
1807238405Sjkim	cmpl	$64,%eax
1808238405Sjkim	jbe	.L083cbc_dec_four
1809238405Sjkim	movups	64(%esi),%xmm6
1810238405Sjkim	movaps	%xmm7,(%esp)
1811238405Sjkim	movups	(%esi),%xmm2
1812238405Sjkim	xorps	%xmm7,%xmm7
1813238405Sjkim	call	_aesni_decrypt6
1814238405Sjkim	movups	(%esi),%xmm1
1815238405Sjkim	movups	16(%esi),%xmm0
1816238405Sjkim	xorps	(%esp),%xmm2
1817238405Sjkim	xorps	%xmm1,%xmm3
1818238405Sjkim	movups	32(%esi),%xmm1
1819238405Sjkim	xorps	%xmm0,%xmm4
1820238405Sjkim	movups	48(%esi),%xmm0
1821238405Sjkim	xorps	%xmm1,%xmm5
1822238405Sjkim	movups	64(%esi),%xmm7
1823238405Sjkim	xorps	%xmm0,%xmm6
1824238405Sjkim	movups	%xmm2,(%edi)
1825238405Sjkim	movups	%xmm3,16(%edi)
1826238405Sjkim	movups	%xmm4,32(%edi)
1827238405Sjkim	movups	%xmm5,48(%edi)
1828238405Sjkim	leal	64(%edi),%edi
1829238405Sjkim	movaps	%xmm6,%xmm2
1830238405Sjkim	subl	$80,%eax
1831238405Sjkim	jmp	.L079cbc_dec_tail_collected
1832238405Sjkim.align	16
1833238405Sjkim.L080cbc_dec_one:
1834238405Sjkim	movups	(%edx),%xmm0
1835238405Sjkim	movups	16(%edx),%xmm1
1836238405Sjkim	leal	32(%edx),%edx
1837238405Sjkim	xorps	%xmm0,%xmm2
1838238405Sjkim.L084dec1_loop_16:
1839238405Sjkim.byte	102,15,56,222,209
1840238405Sjkim	decl	%ecx
1841238405Sjkim	movups	(%edx),%xmm1
1842238405Sjkim	leal	16(%edx),%edx
1843238405Sjkim	jnz	.L084dec1_loop_16
1844238405Sjkim.byte	102,15,56,223,209
1845238405Sjkim	xorps	%xmm7,%xmm2
1846238405Sjkim	movaps	%xmm6,%xmm7
1847238405Sjkim	subl	$16,%eax
1848238405Sjkim	jmp	.L079cbc_dec_tail_collected
1849238405Sjkim.align	16
1850238405Sjkim.L081cbc_dec_two:
1851238405Sjkim	xorps	%xmm4,%xmm4
1852238405Sjkim	call	_aesni_decrypt3
1853238405Sjkim	xorps	%xmm7,%xmm2
1854238405Sjkim	xorps	%xmm6,%xmm3
1855238405Sjkim	movups	%xmm2,(%edi)
1856238405Sjkim	movaps	%xmm3,%xmm2
1857238405Sjkim	leal	16(%edi),%edi
1858238405Sjkim	movaps	%xmm5,%xmm7
1859238405Sjkim	subl	$32,%eax
1860238405Sjkim	jmp	.L079cbc_dec_tail_collected
1861238405Sjkim.align	16
1862238405Sjkim.L082cbc_dec_three:
1863238405Sjkim	call	_aesni_decrypt3
1864238405Sjkim	xorps	%xmm7,%xmm2
1865238405Sjkim	xorps	%xmm6,%xmm3
1866238405Sjkim	xorps	%xmm5,%xmm4
1867238405Sjkim	movups	%xmm2,(%edi)
1868238405Sjkim	movaps	%xmm4,%xmm2
1869238405Sjkim	movups	%xmm3,16(%edi)
1870238405Sjkim	leal	32(%edi),%edi
1871238405Sjkim	movups	32(%esi),%xmm7
1872238405Sjkim	subl	$48,%eax
1873238405Sjkim	jmp	.L079cbc_dec_tail_collected
1874238405Sjkim.align	16
1875238405Sjkim.L083cbc_dec_four:
1876238405Sjkim	call	_aesni_decrypt4
1877238405Sjkim	movups	16(%esi),%xmm1
1878238405Sjkim	movups	32(%esi),%xmm0
1879238405Sjkim	xorps	%xmm7,%xmm2
1880238405Sjkim	movups	48(%esi),%xmm7
1881238405Sjkim	xorps	%xmm6,%xmm3
1882238405Sjkim	movups	%xmm2,(%edi)
1883238405Sjkim	xorps	%xmm1,%xmm4
1884238405Sjkim	movups	%xmm3,16(%edi)
1885238405Sjkim	xorps	%xmm0,%xmm5
1886238405Sjkim	movups	%xmm4,32(%edi)
1887238405Sjkim	leal	48(%edi),%edi
1888238405Sjkim	movaps	%xmm5,%xmm2
1889238405Sjkim	subl	$64,%eax
1890238405Sjkim.L079cbc_dec_tail_collected:
1891238405Sjkim	andl	$15,%eax
1892238405Sjkim	jnz	.L085cbc_dec_tail_partial
1893238405Sjkim	movups	%xmm2,(%edi)
1894238405Sjkim	jmp	.L075cbc_ret
1895238405Sjkim.align	16
1896238405Sjkim.L085cbc_dec_tail_partial:
1897238405Sjkim	movaps	%xmm2,(%esp)
1898238405Sjkim	movl	$16,%ecx
1899238405Sjkim	movl	%esp,%esi
1900238405Sjkim	subl	%eax,%ecx
1901238405Sjkim.long	2767451785
1902238405Sjkim.L075cbc_ret:
1903238405Sjkim	movl	16(%esp),%esp
1904238405Sjkim	movl	36(%esp),%ebp
1905238405Sjkim	movups	%xmm7,(%ebp)
1906238405Sjkim.L070cbc_abort:
1907238405Sjkim	popl	%edi
1908238405Sjkim	popl	%esi
1909238405Sjkim	popl	%ebx
1910238405Sjkim	popl	%ebp
1911238405Sjkim	ret
1912238405Sjkim.size	aesni_cbc_encrypt,.-.L_aesni_cbc_encrypt_begin
1913238405Sjkim.type	_aesni_set_encrypt_key,@function
1914238405Sjkim.align	16
1915238405Sjkim_aesni_set_encrypt_key:
1916238405Sjkim	testl	%eax,%eax
1917238405Sjkim	jz	.L086bad_pointer
1918238405Sjkim	testl	%edx,%edx
1919238405Sjkim	jz	.L086bad_pointer
1920238405Sjkim	movups	(%eax),%xmm0
1921238405Sjkim	xorps	%xmm4,%xmm4
1922238405Sjkim	leal	16(%edx),%edx
1923238405Sjkim	cmpl	$256,%ecx
1924238405Sjkim	je	.L08714rounds
1925238405Sjkim	cmpl	$192,%ecx
1926238405Sjkim	je	.L08812rounds
1927238405Sjkim	cmpl	$128,%ecx
1928238405Sjkim	jne	.L089bad_keybits
1929238405Sjkim.align	16
1930238405Sjkim.L09010rounds:
1931238405Sjkim	movl	$9,%ecx
1932238405Sjkim	movups	%xmm0,-16(%edx)
1933238405Sjkim.byte	102,15,58,223,200,1
1934238405Sjkim	call	.L091key_128_cold
1935238405Sjkim.byte	102,15,58,223,200,2
1936238405Sjkim	call	.L092key_128
1937238405Sjkim.byte	102,15,58,223,200,4
1938238405Sjkim	call	.L092key_128
1939238405Sjkim.byte	102,15,58,223,200,8
1940238405Sjkim	call	.L092key_128
1941238405Sjkim.byte	102,15,58,223,200,16
1942238405Sjkim	call	.L092key_128
1943238405Sjkim.byte	102,15,58,223,200,32
1944238405Sjkim	call	.L092key_128
1945238405Sjkim.byte	102,15,58,223,200,64
1946238405Sjkim	call	.L092key_128
1947238405Sjkim.byte	102,15,58,223,200,128
1948238405Sjkim	call	.L092key_128
1949238405Sjkim.byte	102,15,58,223,200,27
1950238405Sjkim	call	.L092key_128
1951238405Sjkim.byte	102,15,58,223,200,54
1952238405Sjkim	call	.L092key_128
1953238405Sjkim	movups	%xmm0,(%edx)
1954238405Sjkim	movl	%ecx,80(%edx)
1955238405Sjkim	xorl	%eax,%eax
1956238405Sjkim	ret
1957238405Sjkim.align	16
1958238405Sjkim.L092key_128:
1959238405Sjkim	movups	%xmm0,(%edx)
1960238405Sjkim	leal	16(%edx),%edx
1961238405Sjkim.L091key_128_cold:
1962238405Sjkim	shufps	$16,%xmm0,%xmm4
1963238405Sjkim	xorps	%xmm4,%xmm0
1964238405Sjkim	shufps	$140,%xmm0,%xmm4
1965238405Sjkim	xorps	%xmm4,%xmm0
1966238405Sjkim	shufps	$255,%xmm1,%xmm1
1967238405Sjkim	xorps	%xmm1,%xmm0
1968238405Sjkim	ret
1969238405Sjkim.align	16
1970238405Sjkim.L08812rounds:
1971238405Sjkim	movq	16(%eax),%xmm2
1972238405Sjkim	movl	$11,%ecx
1973238405Sjkim	movups	%xmm0,-16(%edx)
1974238405Sjkim.byte	102,15,58,223,202,1
1975238405Sjkim	call	.L093key_192a_cold
1976238405Sjkim.byte	102,15,58,223,202,2
1977238405Sjkim	call	.L094key_192b
1978238405Sjkim.byte	102,15,58,223,202,4
1979238405Sjkim	call	.L095key_192a
1980238405Sjkim.byte	102,15,58,223,202,8
1981238405Sjkim	call	.L094key_192b
1982238405Sjkim.byte	102,15,58,223,202,16
1983238405Sjkim	call	.L095key_192a
1984238405Sjkim.byte	102,15,58,223,202,32
1985238405Sjkim	call	.L094key_192b
1986238405Sjkim.byte	102,15,58,223,202,64
1987238405Sjkim	call	.L095key_192a
1988238405Sjkim.byte	102,15,58,223,202,128
1989238405Sjkim	call	.L094key_192b
1990238405Sjkim	movups	%xmm0,(%edx)
1991238405Sjkim	movl	%ecx,48(%edx)
1992238405Sjkim	xorl	%eax,%eax
1993238405Sjkim	ret
1994238405Sjkim.align	16
1995238405Sjkim.L095key_192a:
1996238405Sjkim	movups	%xmm0,(%edx)
1997238405Sjkim	leal	16(%edx),%edx
1998238405Sjkim.align	16
1999238405Sjkim.L093key_192a_cold:
2000238405Sjkim	movaps	%xmm2,%xmm5
2001238405Sjkim.L096key_192b_warm:
2002238405Sjkim	shufps	$16,%xmm0,%xmm4
2003238405Sjkim	movdqa	%xmm2,%xmm3
2004238405Sjkim	xorps	%xmm4,%xmm0
2005238405Sjkim	shufps	$140,%xmm0,%xmm4
2006238405Sjkim	pslldq	$4,%xmm3
2007238405Sjkim	xorps	%xmm4,%xmm0
2008238405Sjkim	pshufd	$85,%xmm1,%xmm1
2009238405Sjkim	pxor	%xmm3,%xmm2
2010238405Sjkim	pxor	%xmm1,%xmm0
2011238405Sjkim	pshufd	$255,%xmm0,%xmm3
2012238405Sjkim	pxor	%xmm3,%xmm2
2013238405Sjkim	ret
2014238405Sjkim.align	16
2015238405Sjkim.L094key_192b:
2016238405Sjkim	movaps	%xmm0,%xmm3
2017238405Sjkim	shufps	$68,%xmm0,%xmm5
2018238405Sjkim	movups	%xmm5,(%edx)
2019238405Sjkim	shufps	$78,%xmm2,%xmm3
2020238405Sjkim	movups	%xmm3,16(%edx)
2021238405Sjkim	leal	32(%edx),%edx
2022238405Sjkim	jmp	.L096key_192b_warm
2023238405Sjkim.align	16
2024238405Sjkim.L08714rounds:
2025238405Sjkim	movups	16(%eax),%xmm2
2026238405Sjkim	movl	$13,%ecx
2027238405Sjkim	leal	16(%edx),%edx
2028238405Sjkim	movups	%xmm0,-32(%edx)
2029238405Sjkim	movups	%xmm2,-16(%edx)
2030238405Sjkim.byte	102,15,58,223,202,1
2031238405Sjkim	call	.L097key_256a_cold
2032238405Sjkim.byte	102,15,58,223,200,1
2033238405Sjkim	call	.L098key_256b
2034238405Sjkim.byte	102,15,58,223,202,2
2035238405Sjkim	call	.L099key_256a
2036238405Sjkim.byte	102,15,58,223,200,2
2037238405Sjkim	call	.L098key_256b
2038238405Sjkim.byte	102,15,58,223,202,4
2039238405Sjkim	call	.L099key_256a
2040238405Sjkim.byte	102,15,58,223,200,4
2041238405Sjkim	call	.L098key_256b
2042238405Sjkim.byte	102,15,58,223,202,8
2043238405Sjkim	call	.L099key_256a
2044238405Sjkim.byte	102,15,58,223,200,8
2045238405Sjkim	call	.L098key_256b
2046238405Sjkim.byte	102,15,58,223,202,16
2047238405Sjkim	call	.L099key_256a
2048238405Sjkim.byte	102,15,58,223,200,16
2049238405Sjkim	call	.L098key_256b
2050238405Sjkim.byte	102,15,58,223,202,32
2051238405Sjkim	call	.L099key_256a
2052238405Sjkim.byte	102,15,58,223,200,32
2053238405Sjkim	call	.L098key_256b
2054238405Sjkim.byte	102,15,58,223,202,64
2055238405Sjkim	call	.L099key_256a
2056238405Sjkim	movups	%xmm0,(%edx)
2057238405Sjkim	movl	%ecx,16(%edx)
2058238405Sjkim	xorl	%eax,%eax
2059238405Sjkim	ret
2060238405Sjkim.align	16
2061238405Sjkim.L099key_256a:
2062238405Sjkim	movups	%xmm2,(%edx)
2063238405Sjkim	leal	16(%edx),%edx
2064238405Sjkim.L097key_256a_cold:
2065238405Sjkim	shufps	$16,%xmm0,%xmm4
2066238405Sjkim	xorps	%xmm4,%xmm0
2067238405Sjkim	shufps	$140,%xmm0,%xmm4
2068238405Sjkim	xorps	%xmm4,%xmm0
2069238405Sjkim	shufps	$255,%xmm1,%xmm1
2070238405Sjkim	xorps	%xmm1,%xmm0
2071238405Sjkim	ret
2072238405Sjkim.align	16
2073238405Sjkim.L098key_256b:
2074238405Sjkim	movups	%xmm0,(%edx)
2075238405Sjkim	leal	16(%edx),%edx
2076238405Sjkim	shufps	$16,%xmm2,%xmm4
2077238405Sjkim	xorps	%xmm4,%xmm2
2078238405Sjkim	shufps	$140,%xmm2,%xmm4
2079238405Sjkim	xorps	%xmm4,%xmm2
2080238405Sjkim	shufps	$170,%xmm1,%xmm1
2081238405Sjkim	xorps	%xmm1,%xmm2
2082238405Sjkim	ret
2083238405Sjkim.align	4
2084238405Sjkim.L086bad_pointer:
2085238405Sjkim	movl	$-1,%eax
2086238405Sjkim	ret
2087238405Sjkim.align	4
2088238405Sjkim.L089bad_keybits:
2089238405Sjkim	movl	$-2,%eax
2090238405Sjkim	ret
2091238405Sjkim.size	_aesni_set_encrypt_key,.-_aesni_set_encrypt_key
2092238405Sjkim.globl	aesni_set_encrypt_key
2093238405Sjkim.type	aesni_set_encrypt_key,@function
2094238405Sjkim.align	16
2095238405Sjkimaesni_set_encrypt_key:
2096238405Sjkim.L_aesni_set_encrypt_key_begin:
2097238405Sjkim	movl	4(%esp),%eax
2098238405Sjkim	movl	8(%esp),%ecx
2099238405Sjkim	movl	12(%esp),%edx
2100238405Sjkim	call	_aesni_set_encrypt_key
2101238405Sjkim	ret
2102238405Sjkim.size	aesni_set_encrypt_key,.-.L_aesni_set_encrypt_key_begin
2103238405Sjkim.globl	aesni_set_decrypt_key
2104238405Sjkim.type	aesni_set_decrypt_key,@function
2105238405Sjkim.align	16
2106238405Sjkimaesni_set_decrypt_key:
2107238405Sjkim.L_aesni_set_decrypt_key_begin:
2108238405Sjkim	movl	4(%esp),%eax
2109238405Sjkim	movl	8(%esp),%ecx
2110238405Sjkim	movl	12(%esp),%edx
2111238405Sjkim	call	_aesni_set_encrypt_key
2112238405Sjkim	movl	12(%esp),%edx
2113238405Sjkim	shll	$4,%ecx
2114238405Sjkim	testl	%eax,%eax
2115238405Sjkim	jnz	.L100dec_key_ret
2116238405Sjkim	leal	16(%edx,%ecx,1),%eax
2117238405Sjkim	movups	(%edx),%xmm0
2118238405Sjkim	movups	(%eax),%xmm1
2119238405Sjkim	movups	%xmm0,(%eax)
2120238405Sjkim	movups	%xmm1,(%edx)
2121238405Sjkim	leal	16(%edx),%edx
2122238405Sjkim	leal	-16(%eax),%eax
2123238405Sjkim.L101dec_key_inverse:
2124238405Sjkim	movups	(%edx),%xmm0
2125238405Sjkim	movups	(%eax),%xmm1
2126238405Sjkim.byte	102,15,56,219,192
2127238405Sjkim.byte	102,15,56,219,201
2128238405Sjkim	leal	16(%edx),%edx
2129238405Sjkim	leal	-16(%eax),%eax
2130238405Sjkim	movups	%xmm0,16(%eax)
2131238405Sjkim	movups	%xmm1,-16(%edx)
2132238405Sjkim	cmpl	%edx,%eax
2133238405Sjkim	ja	.L101dec_key_inverse
2134238405Sjkim	movups	(%edx),%xmm0
2135238405Sjkim.byte	102,15,56,219,192
2136238405Sjkim	movups	%xmm0,(%edx)
2137238405Sjkim	xorl	%eax,%eax
2138238405Sjkim.L100dec_key_ret:
2139238405Sjkim	ret
2140238405Sjkim.size	aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin
2141238405Sjkim.byte	65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
2142238405Sjkim.byte	83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
2143238405Sjkim.byte	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
2144238405Sjkim.byte	115,108,46,111,114,103,62,0
2145