110710Sddmitriev# $FreeBSD$
210710Sddmitriev# Do not modify. This file is auto-generated from aesni-x86.pl.
310710Sddmitriev#ifdef PIC
410710Sddmitriev.file	"aesni-x86.S"
510710Sddmitriev.text
610710Sddmitriev.globl	aesni_encrypt
710710Sddmitriev.type	aesni_encrypt,@function
810710Sddmitriev.align	16
910710Sddmitrievaesni_encrypt:
1010710Sddmitriev.L_aesni_encrypt_begin:
1110710Sddmitriev	movl	4(%esp),%eax
1210710Sddmitriev	movl	12(%esp),%edx
1310710Sddmitriev	movups	(%eax),%xmm2
1410710Sddmitriev	movl	240(%edx),%ecx
1510710Sddmitriev	movl	8(%esp),%eax
1610710Sddmitriev	movups	(%edx),%xmm0
1710710Sddmitriev	movups	16(%edx),%xmm1
1810710Sddmitriev	leal	32(%edx),%edx
1910710Sddmitriev	xorps	%xmm0,%xmm2
2010710Sddmitriev.L000enc1_loop_1:
2110710Sddmitriev.byte	102,15,56,220,209
2210710Sddmitriev	decl	%ecx
2310710Sddmitriev	movups	(%edx),%xmm1
2410710Sddmitriev	leal	16(%edx),%edx
2510710Sddmitriev	jnz	.L000enc1_loop_1
2610710Sddmitriev.byte	102,15,56,221,209
2710710Sddmitriev	movups	%xmm2,(%eax)
2810710Sddmitriev	ret
2910710Sddmitriev.size	aesni_encrypt,.-.L_aesni_encrypt_begin
3010710Sddmitriev.globl	aesni_decrypt
3110710Sddmitriev.type	aesni_decrypt,@function
3210710Sddmitriev.align	16
3310710Sddmitrievaesni_decrypt:
3410710Sddmitriev.L_aesni_decrypt_begin:
3510710Sddmitriev	movl	4(%esp),%eax
3610710Sddmitriev	movl	12(%esp),%edx
3710710Sddmitriev	movups	(%eax),%xmm2
3810710Sddmitriev	movl	240(%edx),%ecx
3910710Sddmitriev	movl	8(%esp),%eax
4010710Sddmitriev	movups	(%edx),%xmm0
4110710Sddmitriev	movups	16(%edx),%xmm1
4210710Sddmitriev	leal	32(%edx),%edx
4310710Sddmitriev	xorps	%xmm0,%xmm2
4410710Sddmitriev.L001dec1_loop_2:
4510710Sddmitriev.byte	102,15,56,222,209
4610710Sddmitriev	decl	%ecx
4710710Sddmitriev	movups	(%edx),%xmm1
4810710Sddmitriev	leal	16(%edx),%edx
4910710Sddmitriev	jnz	.L001dec1_loop_2
5010710Sddmitriev.byte	102,15,56,223,209
5110710Sddmitriev	movups	%xmm2,(%eax)
5210710Sddmitriev	ret
5310710Sddmitriev.size	aesni_decrypt,.-.L_aesni_decrypt_begin
5410710Sddmitriev.type	_aesni_encrypt3,@function
5510710Sddmitriev.align	16
5610710Sddmitriev_aesni_encrypt3:
5710710Sddmitriev	movups	(%edx),%xmm0
5810710Sddmitriev	shrl	$1,%ecx
5910710Sddmitriev	movups	16(%edx),%xmm1
6010710Sddmitriev	leal	32(%edx),%edx
6110710Sddmitriev	xorps	%xmm0,%xmm2
6210710Sddmitriev	pxor	%xmm0,%xmm3
6310710Sddmitriev	pxor	%xmm0,%xmm4
6410710Sddmitriev	movups	(%edx),%xmm0
6510710Sddmitriev.L002enc3_loop:
6610710Sddmitriev.byte	102,15,56,220,209
6710710Sddmitriev.byte	102,15,56,220,217
6810710Sddmitriev	decl	%ecx
6910710Sddmitriev.byte	102,15,56,220,225
7010710Sddmitriev	movups	16(%edx),%xmm1
7110710Sddmitriev.byte	102,15,56,220,208
7210710Sddmitriev.byte	102,15,56,220,216
7310710Sddmitriev	leal	32(%edx),%edx
7410710Sddmitriev.byte	102,15,56,220,224
7510710Sddmitriev	movups	(%edx),%xmm0
7610710Sddmitriev	jnz	.L002enc3_loop
7710710Sddmitriev.byte	102,15,56,220,209
7810710Sddmitriev.byte	102,15,56,220,217
7910710Sddmitriev.byte	102,15,56,220,225
8010710Sddmitriev.byte	102,15,56,221,208
8110710Sddmitriev.byte	102,15,56,221,216
8210710Sddmitriev.byte	102,15,56,221,224
8310710Sddmitriev	ret
8410710Sddmitriev.size	_aesni_encrypt3,.-_aesni_encrypt3
8510710Sddmitriev.type	_aesni_decrypt3,@function
8610710Sddmitriev.align	16
8710710Sddmitriev_aesni_decrypt3:
8810710Sddmitriev	movups	(%edx),%xmm0
8910710Sddmitriev	shrl	$1,%ecx
9010710Sddmitriev	movups	16(%edx),%xmm1
9110710Sddmitriev	leal	32(%edx),%edx
9210710Sddmitriev	xorps	%xmm0,%xmm2
9310710Sddmitriev	pxor	%xmm0,%xmm3
9410710Sddmitriev	pxor	%xmm0,%xmm4
9510710Sddmitriev	movups	(%edx),%xmm0
9610710Sddmitriev.L003dec3_loop:
9710710Sddmitriev.byte	102,15,56,222,209
9810710Sddmitriev.byte	102,15,56,222,217
9910710Sddmitriev	decl	%ecx
10010710Sddmitriev.byte	102,15,56,222,225
10110710Sddmitriev	movups	16(%edx),%xmm1
10210710Sddmitriev.byte	102,15,56,222,208
10310710Sddmitriev.byte	102,15,56,222,216
10410710Sddmitriev	leal	32(%edx),%edx
10510710Sddmitriev.byte	102,15,56,222,224
10610710Sddmitriev	movups	(%edx),%xmm0
10710710Sddmitriev	jnz	.L003dec3_loop
10810710Sddmitriev.byte	102,15,56,222,209
10910710Sddmitriev.byte	102,15,56,222,217
11010710Sddmitriev.byte	102,15,56,222,225
11110710Sddmitriev.byte	102,15,56,223,208
11210710Sddmitriev.byte	102,15,56,223,216
11310710Sddmitriev.byte	102,15,56,223,224
11410710Sddmitriev	ret
11510710Sddmitriev.size	_aesni_decrypt3,.-_aesni_decrypt3
11610710Sddmitriev.type	_aesni_encrypt4,@function
11710710Sddmitriev.align	16
11810710Sddmitriev_aesni_encrypt4:
11910710Sddmitriev	movups	(%edx),%xmm0
12010710Sddmitriev	movups	16(%edx),%xmm1
12110710Sddmitriev	shrl	$1,%ecx
12210710Sddmitriev	leal	32(%edx),%edx
12310710Sddmitriev	xorps	%xmm0,%xmm2
12410710Sddmitriev	pxor	%xmm0,%xmm3
12510710Sddmitriev	pxor	%xmm0,%xmm4
12610710Sddmitriev	pxor	%xmm0,%xmm5
12710710Sddmitriev	movups	(%edx),%xmm0
12810710Sddmitriev.L004enc4_loop:
12910710Sddmitriev.byte	102,15,56,220,209
13010710Sddmitriev.byte	102,15,56,220,217
13110710Sddmitriev	decl	%ecx
13210710Sddmitriev.byte	102,15,56,220,225
13310710Sddmitriev.byte	102,15,56,220,233
13410710Sddmitriev	movups	16(%edx),%xmm1
13510710Sddmitriev.byte	102,15,56,220,208
13610710Sddmitriev.byte	102,15,56,220,216
13710710Sddmitriev	leal	32(%edx),%edx
13810710Sddmitriev.byte	102,15,56,220,224
13910710Sddmitriev.byte	102,15,56,220,232
14010710Sddmitriev	movups	(%edx),%xmm0
14110710Sddmitriev	jnz	.L004enc4_loop
14210710Sddmitriev.byte	102,15,56,220,209
14310710Sddmitriev.byte	102,15,56,220,217
14410710Sddmitriev.byte	102,15,56,220,225
14510710Sddmitriev.byte	102,15,56,220,233
14610710Sddmitriev.byte	102,15,56,221,208
14710710Sddmitriev.byte	102,15,56,221,216
14810710Sddmitriev.byte	102,15,56,221,224
14910710Sddmitriev.byte	102,15,56,221,232
15010710Sddmitriev	ret
15110710Sddmitriev.size	_aesni_encrypt4,.-_aesni_encrypt4
15210710Sddmitriev.type	_aesni_decrypt4,@function
15310710Sddmitriev.align	16
15410710Sddmitriev_aesni_decrypt4:
15510710Sddmitriev	movups	(%edx),%xmm0
15610710Sddmitriev	movups	16(%edx),%xmm1
15710710Sddmitriev	shrl	$1,%ecx
15810710Sddmitriev	leal	32(%edx),%edx
15910710Sddmitriev	xorps	%xmm0,%xmm2
16010710Sddmitriev	pxor	%xmm0,%xmm3
16110710Sddmitriev	pxor	%xmm0,%xmm4
16210710Sddmitriev	pxor	%xmm0,%xmm5
16310710Sddmitriev	movups	(%edx),%xmm0
16410710Sddmitriev.L005dec4_loop:
16510710Sddmitriev.byte	102,15,56,222,209
16610710Sddmitriev.byte	102,15,56,222,217
16710710Sddmitriev	decl	%ecx
16810710Sddmitriev.byte	102,15,56,222,225
16910710Sddmitriev.byte	102,15,56,222,233
17010710Sddmitriev	movups	16(%edx),%xmm1
17110710Sddmitriev.byte	102,15,56,222,208
17210710Sddmitriev.byte	102,15,56,222,216
17310710Sddmitriev	leal	32(%edx),%edx
17410710Sddmitriev.byte	102,15,56,222,224
17510710Sddmitriev.byte	102,15,56,222,232
17610710Sddmitriev	movups	(%edx),%xmm0
17710710Sddmitriev	jnz	.L005dec4_loop
17810710Sddmitriev.byte	102,15,56,222,209
17910710Sddmitriev.byte	102,15,56,222,217
18010710Sddmitriev.byte	102,15,56,222,225
18110710Sddmitriev.byte	102,15,56,222,233
18210710Sddmitriev.byte	102,15,56,223,208
18310710Sddmitriev.byte	102,15,56,223,216
18410710Sddmitriev.byte	102,15,56,223,224
18510710Sddmitriev.byte	102,15,56,223,232
18610710Sddmitriev	ret
18710710Sddmitriev.size	_aesni_decrypt4,.-_aesni_decrypt4
18810710Sddmitriev.type	_aesni_encrypt6,@function
18910710Sddmitriev.align	16
19010710Sddmitriev_aesni_encrypt6:
19110710Sddmitriev	movups	(%edx),%xmm0
19210710Sddmitriev	shrl	$1,%ecx
19310710Sddmitriev	movups	16(%edx),%xmm1
19410710Sddmitriev	leal	32(%edx),%edx
19510710Sddmitriev	xorps	%xmm0,%xmm2
19610710Sddmitriev	pxor	%xmm0,%xmm3
19710710Sddmitriev.byte	102,15,56,220,209
19810710Sddmitriev	pxor	%xmm0,%xmm4
19910710Sddmitriev.byte	102,15,56,220,217
20010710Sddmitriev	pxor	%xmm0,%xmm5
20110710Sddmitriev	decl	%ecx
20210710Sddmitriev.byte	102,15,56,220,225
20310710Sddmitriev	pxor	%xmm0,%xmm6
20410710Sddmitriev.byte	102,15,56,220,233
20510710Sddmitriev	pxor	%xmm0,%xmm7
20610710Sddmitriev.byte	102,15,56,220,241
20710710Sddmitriev	movups	(%edx),%xmm0
20810710Sddmitriev.byte	102,15,56,220,249
20910710Sddmitriev	jmp	.L_aesni_encrypt6_enter
21010710Sddmitriev.align	16
21110710Sddmitriev.L006enc6_loop:
21210710Sddmitriev.byte	102,15,56,220,209
21310710Sddmitriev.byte	102,15,56,220,217
21410710Sddmitriev	decl	%ecx
21510710Sddmitriev.byte	102,15,56,220,225
21610710Sddmitriev.byte	102,15,56,220,233
21710710Sddmitriev.byte	102,15,56,220,241
21810710Sddmitriev.byte	102,15,56,220,249
21910710Sddmitriev.align	16
22010710Sddmitriev.L_aesni_encrypt6_enter:
22110710Sddmitriev	movups	16(%edx),%xmm1
22210710Sddmitriev.byte	102,15,56,220,208
22310710Sddmitriev.byte	102,15,56,220,216
22410710Sddmitriev	leal	32(%edx),%edx
22510710Sddmitriev.byte	102,15,56,220,224
22610710Sddmitriev.byte	102,15,56,220,232
22710710Sddmitriev.byte	102,15,56,220,240
22810710Sddmitriev.byte	102,15,56,220,248
22910710Sddmitriev	movups	(%edx),%xmm0
23010710Sddmitriev	jnz	.L006enc6_loop
23110710Sddmitriev.byte	102,15,56,220,209
23210710Sddmitriev.byte	102,15,56,220,217
23310710Sddmitriev.byte	102,15,56,220,225
23410710Sddmitriev.byte	102,15,56,220,233
23510710Sddmitriev.byte	102,15,56,220,241
23610710Sddmitriev.byte	102,15,56,220,249
23710710Sddmitriev.byte	102,15,56,221,208
23810710Sddmitriev.byte	102,15,56,221,216
23910710Sddmitriev.byte	102,15,56,221,224
24010710Sddmitriev.byte	102,15,56,221,232
24110710Sddmitriev.byte	102,15,56,221,240
24210710Sddmitriev.byte	102,15,56,221,248
24310710Sddmitriev	ret
24410710Sddmitriev.size	_aesni_encrypt6,.-_aesni_encrypt6
24510710Sddmitriev.type	_aesni_decrypt6,@function
24610710Sddmitriev.align	16
24710710Sddmitriev_aesni_decrypt6:
24810710Sddmitriev	movups	(%edx),%xmm0
24910710Sddmitriev	shrl	$1,%ecx
25010710Sddmitriev	movups	16(%edx),%xmm1
25110710Sddmitriev	leal	32(%edx),%edx
25210710Sddmitriev	xorps	%xmm0,%xmm2
25310710Sddmitriev	pxor	%xmm0,%xmm3
25410710Sddmitriev.byte	102,15,56,222,209
25510710Sddmitriev	pxor	%xmm0,%xmm4
25610710Sddmitriev.byte	102,15,56,222,217
25710710Sddmitriev	pxor	%xmm0,%xmm5
25810710Sddmitriev	decl	%ecx
25910710Sddmitriev.byte	102,15,56,222,225
26010710Sddmitriev	pxor	%xmm0,%xmm6
26110710Sddmitriev.byte	102,15,56,222,233
26210710Sddmitriev	pxor	%xmm0,%xmm7
26310710Sddmitriev.byte	102,15,56,222,241
26410710Sddmitriev	movups	(%edx),%xmm0
26510710Sddmitriev.byte	102,15,56,222,249
26610710Sddmitriev	jmp	.L_aesni_decrypt6_enter
26710710Sddmitriev.align	16
26810710Sddmitriev.L007dec6_loop:
26910710Sddmitriev.byte	102,15,56,222,209
27010710Sddmitriev.byte	102,15,56,222,217
27110710Sddmitriev	decl	%ecx
27210710Sddmitriev.byte	102,15,56,222,225
27310710Sddmitriev.byte	102,15,56,222,233
27410710Sddmitriev.byte	102,15,56,222,241
27510710Sddmitriev.byte	102,15,56,222,249
27610710Sddmitriev.align	16
27710710Sddmitriev.L_aesni_decrypt6_enter:
27810710Sddmitriev	movups	16(%edx),%xmm1
27910710Sddmitriev.byte	102,15,56,222,208
28010710Sddmitriev.byte	102,15,56,222,216
28110710Sddmitriev	leal	32(%edx),%edx
28210710Sddmitriev.byte	102,15,56,222,224
28310710Sddmitriev.byte	102,15,56,222,232
28410710Sddmitriev.byte	102,15,56,222,240
28510710Sddmitriev.byte	102,15,56,222,248
28610710Sddmitriev	movups	(%edx),%xmm0
28710710Sddmitriev	jnz	.L007dec6_loop
28810710Sddmitriev.byte	102,15,56,222,209
28910710Sddmitriev.byte	102,15,56,222,217
29010710Sddmitriev.byte	102,15,56,222,225
29110710Sddmitriev.byte	102,15,56,222,233
29210710Sddmitriev.byte	102,15,56,222,241
29310710Sddmitriev.byte	102,15,56,222,249
29410710Sddmitriev.byte	102,15,56,223,208
29510710Sddmitriev.byte	102,15,56,223,216
29610710Sddmitriev.byte	102,15,56,223,224
29710710Sddmitriev.byte	102,15,56,223,232
29810710Sddmitriev.byte	102,15,56,223,240
29910710Sddmitriev.byte	102,15,56,223,248
30010710Sddmitriev	ret
30110710Sddmitriev.size	_aesni_decrypt6,.-_aesni_decrypt6
30210710Sddmitriev.globl	aesni_ecb_encrypt
30310710Sddmitriev.type	aesni_ecb_encrypt,@function
30410710Sddmitriev.align	16
30510710Sddmitrievaesni_ecb_encrypt:
30610710Sddmitriev.L_aesni_ecb_encrypt_begin:
30710710Sddmitriev	pushl	%ebp
30810710Sddmitriev	pushl	%ebx
30910710Sddmitriev	pushl	%esi
31010710Sddmitriev	pushl	%edi
31110710Sddmitriev	movl	20(%esp),%esi
31210710Sddmitriev	movl	24(%esp),%edi
31310710Sddmitriev	movl	28(%esp),%eax
31410710Sddmitriev	movl	32(%esp),%edx
31510710Sddmitriev	movl	36(%esp),%ebx
31610710Sddmitriev	andl	$-16,%eax
31710710Sddmitriev	jz	.L008ecb_ret
31810710Sddmitriev	movl	240(%edx),%ecx
31910710Sddmitriev	testl	%ebx,%ebx
32010710Sddmitriev	jz	.L009ecb_decrypt
32110710Sddmitriev	movl	%edx,%ebp
32210710Sddmitriev	movl	%ecx,%ebx
32310710Sddmitriev	cmpl	$96,%eax
32410710Sddmitriev	jb	.L010ecb_enc_tail
32510710Sddmitriev	movdqu	(%esi),%xmm2
32610710Sddmitriev	movdqu	16(%esi),%xmm3
32710710Sddmitriev	movdqu	32(%esi),%xmm4
32810710Sddmitriev	movdqu	48(%esi),%xmm5
32910710Sddmitriev	movdqu	64(%esi),%xmm6
33010710Sddmitriev	movdqu	80(%esi),%xmm7
33110710Sddmitriev	leal	96(%esi),%esi
33210710Sddmitriev	subl	$96,%eax
33310710Sddmitriev	jmp	.L011ecb_enc_loop6_enter
33410710Sddmitriev.align	16
33510710Sddmitriev.L012ecb_enc_loop6:
33610710Sddmitriev	movups	%xmm2,(%edi)
33710710Sddmitriev	movdqu	(%esi),%xmm2
33810710Sddmitriev	movups	%xmm3,16(%edi)
33910710Sddmitriev	movdqu	16(%esi),%xmm3
34010710Sddmitriev	movups	%xmm4,32(%edi)
34110710Sddmitriev	movdqu	32(%esi),%xmm4
34210710Sddmitriev	movups	%xmm5,48(%edi)
34310710Sddmitriev	movdqu	48(%esi),%xmm5
34410710Sddmitriev	movups	%xmm6,64(%edi)
34510710Sddmitriev	movdqu	64(%esi),%xmm6
34610710Sddmitriev	movups	%xmm7,80(%edi)
34710710Sddmitriev	leal	96(%edi),%edi
34810710Sddmitriev	movdqu	80(%esi),%xmm7
34910710Sddmitriev	leal	96(%esi),%esi
35010710Sddmitriev.L011ecb_enc_loop6_enter:
35110710Sddmitriev	call	_aesni_encrypt6
35210710Sddmitriev	movl	%ebp,%edx
35310710Sddmitriev	movl	%ebx,%ecx
35410710Sddmitriev	subl	$96,%eax
35510710Sddmitriev	jnc	.L012ecb_enc_loop6
35610710Sddmitriev	movups	%xmm2,(%edi)
35710710Sddmitriev	movups	%xmm3,16(%edi)
35810710Sddmitriev	movups	%xmm4,32(%edi)
35910710Sddmitriev	movups	%xmm5,48(%edi)
36010710Sddmitriev	movups	%xmm6,64(%edi)
36110710Sddmitriev	movups	%xmm7,80(%edi)
36210710Sddmitriev	leal	96(%edi),%edi
36310710Sddmitriev	addl	$96,%eax
36410710Sddmitriev	jz	.L008ecb_ret
36510710Sddmitriev.L010ecb_enc_tail:
36610710Sddmitriev	movups	(%esi),%xmm2
36710710Sddmitriev	cmpl	$32,%eax
36810710Sddmitriev	jb	.L013ecb_enc_one
36910710Sddmitriev	movups	16(%esi),%xmm3
37010710Sddmitriev	je	.L014ecb_enc_two
37110710Sddmitriev	movups	32(%esi),%xmm4
37210710Sddmitriev	cmpl	$64,%eax
37310710Sddmitriev	jb	.L015ecb_enc_three
37410710Sddmitriev	movups	48(%esi),%xmm5
37510710Sddmitriev	je	.L016ecb_enc_four
37610710Sddmitriev	movups	64(%esi),%xmm6
37710710Sddmitriev	xorps	%xmm7,%xmm7
37810710Sddmitriev	call	_aesni_encrypt6
37910710Sddmitriev	movups	%xmm2,(%edi)
38010710Sddmitriev	movups	%xmm3,16(%edi)
38110710Sddmitriev	movups	%xmm4,32(%edi)
38210710Sddmitriev	movups	%xmm5,48(%edi)
38310710Sddmitriev	movups	%xmm6,64(%edi)
38410710Sddmitriev	jmp	.L008ecb_ret
38510710Sddmitriev.align	16
38610710Sddmitriev.L013ecb_enc_one:
38710710Sddmitriev	movups	(%edx),%xmm0
38810710Sddmitriev	movups	16(%edx),%xmm1
38910710Sddmitriev	leal	32(%edx),%edx
39010710Sddmitriev	xorps	%xmm0,%xmm2
39110710Sddmitriev.L017enc1_loop_3:
39210710Sddmitriev.byte	102,15,56,220,209
39310710Sddmitriev	decl	%ecx
39410710Sddmitriev	movups	(%edx),%xmm1
39510710Sddmitriev	leal	16(%edx),%edx
39610710Sddmitriev	jnz	.L017enc1_loop_3
39710710Sddmitriev.byte	102,15,56,221,209
39810710Sddmitriev	movups	%xmm2,(%edi)
39910710Sddmitriev	jmp	.L008ecb_ret
40010710Sddmitriev.align	16
40110710Sddmitriev.L014ecb_enc_two:
40210710Sddmitriev	xorps	%xmm4,%xmm4
40310710Sddmitriev	call	_aesni_encrypt3
40410710Sddmitriev	movups	%xmm2,(%edi)
40510710Sddmitriev	movups	%xmm3,16(%edi)
40610710Sddmitriev	jmp	.L008ecb_ret
40710710Sddmitriev.align	16
40810710Sddmitriev.L015ecb_enc_three:
40910710Sddmitriev	call	_aesni_encrypt3
41010710Sddmitriev	movups	%xmm2,(%edi)
41110710Sddmitriev	movups	%xmm3,16(%edi)
41210710Sddmitriev	movups	%xmm4,32(%edi)
41310710Sddmitriev	jmp	.L008ecb_ret
41410710Sddmitriev.align	16
41510710Sddmitriev.L016ecb_enc_four:
41610710Sddmitriev	call	_aesni_encrypt4
41710710Sddmitriev	movups	%xmm2,(%edi)
41810710Sddmitriev	movups	%xmm3,16(%edi)
41910710Sddmitriev	movups	%xmm4,32(%edi)
42010710Sddmitriev	movups	%xmm5,48(%edi)
42110710Sddmitriev	jmp	.L008ecb_ret
42210710Sddmitriev.align	16
42310710Sddmitriev.L009ecb_decrypt:
42410710Sddmitriev	movl	%edx,%ebp
42510710Sddmitriev	movl	%ecx,%ebx
42610710Sddmitriev	cmpl	$96,%eax
42710710Sddmitriev	jb	.L018ecb_dec_tail
42810710Sddmitriev	movdqu	(%esi),%xmm2
42910710Sddmitriev	movdqu	16(%esi),%xmm3
43010710Sddmitriev	movdqu	32(%esi),%xmm4
43110710Sddmitriev	movdqu	48(%esi),%xmm5
43210710Sddmitriev	movdqu	64(%esi),%xmm6
43310710Sddmitriev	movdqu	80(%esi),%xmm7
43410710Sddmitriev	leal	96(%esi),%esi
43510710Sddmitriev	subl	$96,%eax
43610710Sddmitriev	jmp	.L019ecb_dec_loop6_enter
43710710Sddmitriev.align	16
43810710Sddmitriev.L020ecb_dec_loop6:
43910710Sddmitriev	movups	%xmm2,(%edi)
44010710Sddmitriev	movdqu	(%esi),%xmm2
44110710Sddmitriev	movups	%xmm3,16(%edi)
44210710Sddmitriev	movdqu	16(%esi),%xmm3
44310710Sddmitriev	movups	%xmm4,32(%edi)
44410710Sddmitriev	movdqu	32(%esi),%xmm4
44510710Sddmitriev	movups	%xmm5,48(%edi)
44610710Sddmitriev	movdqu	48(%esi),%xmm5
44710710Sddmitriev	movups	%xmm6,64(%edi)
44810710Sddmitriev	movdqu	64(%esi),%xmm6
44910710Sddmitriev	movups	%xmm7,80(%edi)
45010710Sddmitriev	leal	96(%edi),%edi
45110710Sddmitriev	movdqu	80(%esi),%xmm7
45210710Sddmitriev	leal	96(%esi),%esi
45310710Sddmitriev.L019ecb_dec_loop6_enter:
45410710Sddmitriev	call	_aesni_decrypt6
45510710Sddmitriev	movl	%ebp,%edx
45610710Sddmitriev	movl	%ebx,%ecx
45710710Sddmitriev	subl	$96,%eax
45810710Sddmitriev	jnc	.L020ecb_dec_loop6
45910710Sddmitriev	movups	%xmm2,(%edi)
46010710Sddmitriev	movups	%xmm3,16(%edi)
46110710Sddmitriev	movups	%xmm4,32(%edi)
46210710Sddmitriev	movups	%xmm5,48(%edi)
46310710Sddmitriev	movups	%xmm6,64(%edi)
46410710Sddmitriev	movups	%xmm7,80(%edi)
46510710Sddmitriev	leal	96(%edi),%edi
46610710Sddmitriev	addl	$96,%eax
46710710Sddmitriev	jz	.L008ecb_ret
46810710Sddmitriev.L018ecb_dec_tail:
46910710Sddmitriev	movups	(%esi),%xmm2
47010710Sddmitriev	cmpl	$32,%eax
47110710Sddmitriev	jb	.L021ecb_dec_one
47210710Sddmitriev	movups	16(%esi),%xmm3
47310710Sddmitriev	je	.L022ecb_dec_two
47410710Sddmitriev	movups	32(%esi),%xmm4
47510710Sddmitriev	cmpl	$64,%eax
47610710Sddmitriev	jb	.L023ecb_dec_three
47710710Sddmitriev	movups	48(%esi),%xmm5
47810710Sddmitriev	je	.L024ecb_dec_four
47910710Sddmitriev	movups	64(%esi),%xmm6
48010710Sddmitriev	xorps	%xmm7,%xmm7
48110710Sddmitriev	call	_aesni_decrypt6
48210710Sddmitriev	movups	%xmm2,(%edi)
48310710Sddmitriev	movups	%xmm3,16(%edi)
48410710Sddmitriev	movups	%xmm4,32(%edi)
48510710Sddmitriev	movups	%xmm5,48(%edi)
48610710Sddmitriev	movups	%xmm6,64(%edi)
48710710Sddmitriev	jmp	.L008ecb_ret
48810710Sddmitriev.align	16
48910710Sddmitriev.L021ecb_dec_one:
49010710Sddmitriev	movups	(%edx),%xmm0
49110710Sddmitriev	movups	16(%edx),%xmm1
49210710Sddmitriev	leal	32(%edx),%edx
49310710Sddmitriev	xorps	%xmm0,%xmm2
49410710Sddmitriev.L025dec1_loop_4:
49510710Sddmitriev.byte	102,15,56,222,209
49610710Sddmitriev	decl	%ecx
49710710Sddmitriev	movups	(%edx),%xmm1
49810710Sddmitriev	leal	16(%edx),%edx
49910710Sddmitriev	jnz	.L025dec1_loop_4
50010710Sddmitriev.byte	102,15,56,223,209
50110710Sddmitriev	movups	%xmm2,(%edi)
50210710Sddmitriev	jmp	.L008ecb_ret
50310710Sddmitriev.align	16
50410710Sddmitriev.L022ecb_dec_two:
50510710Sddmitriev	xorps	%xmm4,%xmm4
50610710Sddmitriev	call	_aesni_decrypt3
50710710Sddmitriev	movups	%xmm2,(%edi)
50810710Sddmitriev	movups	%xmm3,16(%edi)
50910710Sddmitriev	jmp	.L008ecb_ret
51010710Sddmitriev.align	16
51110710Sddmitriev.L023ecb_dec_three:
51210710Sddmitriev	call	_aesni_decrypt3
51310710Sddmitriev	movups	%xmm2,(%edi)
51410710Sddmitriev	movups	%xmm3,16(%edi)
51510710Sddmitriev	movups	%xmm4,32(%edi)
51610710Sddmitriev	jmp	.L008ecb_ret
51710710Sddmitriev.align	16
51810710Sddmitriev.L024ecb_dec_four:
51910710Sddmitriev	call	_aesni_decrypt4
52010710Sddmitriev	movups	%xmm2,(%edi)
52110710Sddmitriev	movups	%xmm3,16(%edi)
52210710Sddmitriev	movups	%xmm4,32(%edi)
52310710Sddmitriev	movups	%xmm5,48(%edi)
52410710Sddmitriev.L008ecb_ret:
52510710Sddmitriev	popl	%edi
52610710Sddmitriev	popl	%esi
52710710Sddmitriev	popl	%ebx
52810710Sddmitriev	popl	%ebp
52910710Sddmitriev	ret
53010710Sddmitriev.size	aesni_ecb_encrypt,.-.L_aesni_ecb_encrypt_begin
53110710Sddmitriev.globl	aesni_ccm64_encrypt_blocks
53210710Sddmitriev.type	aesni_ccm64_encrypt_blocks,@function
53310710Sddmitriev.align	16
53410710Sddmitrievaesni_ccm64_encrypt_blocks:
53510710Sddmitriev.L_aesni_ccm64_encrypt_blocks_begin:
53610710Sddmitriev	pushl	%ebp
53710710Sddmitriev	pushl	%ebx
53810710Sddmitriev	pushl	%esi
53910710Sddmitriev	pushl	%edi
54010710Sddmitriev	movl	20(%esp),%esi
54110710Sddmitriev	movl	24(%esp),%edi
54210710Sddmitriev	movl	28(%esp),%eax
54310710Sddmitriev	movl	32(%esp),%edx
54410710Sddmitriev	movl	36(%esp),%ebx
54510710Sddmitriev	movl	40(%esp),%ecx
54610710Sddmitriev	movl	%esp,%ebp
54710710Sddmitriev	subl	$60,%esp
54810710Sddmitriev	andl	$-16,%esp
54910710Sddmitriev	movl	%ebp,48(%esp)
55010710Sddmitriev	movdqu	(%ebx),%xmm7
55110710Sddmitriev	movdqu	(%ecx),%xmm3
55210710Sddmitriev	movl	240(%edx),%ecx
55310710Sddmitriev	movl	$202182159,(%esp)
55410710Sddmitriev	movl	$134810123,4(%esp)
55510710Sddmitriev	movl	$67438087,8(%esp)
55610710Sddmitriev	movl	$66051,12(%esp)
55710710Sddmitriev	movl	$1,%ebx
55810710Sddmitriev	xorl	%ebp,%ebp
55910710Sddmitriev	movl	%ebx,16(%esp)
56010710Sddmitriev	movl	%ebp,20(%esp)
56110710Sddmitriev	movl	%ebp,24(%esp)
56210710Sddmitriev	movl	%ebp,28(%esp)
56310710Sddmitriev	shrl	$1,%ecx
56410710Sddmitriev	leal	(%edx),%ebp
56510710Sddmitriev	movdqa	(%esp),%xmm5
56610710Sddmitriev	movdqa	%xmm7,%xmm2
56710710Sddmitriev	movl	%ecx,%ebx
56810710Sddmitriev.byte	102,15,56,0,253
56910710Sddmitriev.L026ccm64_enc_outer:
57010710Sddmitriev	movups	(%ebp),%xmm0
57110710Sddmitriev	movl	%ebx,%ecx
57210710Sddmitriev	movups	(%esi),%xmm6
57310710Sddmitriev	xorps	%xmm0,%xmm2
57410710Sddmitriev	movups	16(%ebp),%xmm1
57510710Sddmitriev	xorps	%xmm6,%xmm0
57610710Sddmitriev	leal	32(%ebp),%edx
57710710Sddmitriev	xorps	%xmm0,%xmm3
57810710Sddmitriev	movups	(%edx),%xmm0
57910710Sddmitriev.L027ccm64_enc2_loop:
58010710Sddmitriev.byte	102,15,56,220,209
58110710Sddmitriev	decl	%ecx
58210710Sddmitriev.byte	102,15,56,220,217
58310710Sddmitriev	movups	16(%edx),%xmm1
58410710Sddmitriev.byte	102,15,56,220,208
58510710Sddmitriev	leal	32(%edx),%edx
58610710Sddmitriev.byte	102,15,56,220,216
58710710Sddmitriev	movups	(%edx),%xmm0
58810710Sddmitriev	jnz	.L027ccm64_enc2_loop
58910710Sddmitriev.byte	102,15,56,220,209
59010710Sddmitriev.byte	102,15,56,220,217
59110710Sddmitriev	paddq	16(%esp),%xmm7
59210710Sddmitriev.byte	102,15,56,221,208
59310710Sddmitriev.byte	102,15,56,221,216
59410710Sddmitriev	decl	%eax
59510710Sddmitriev	leal	16(%esi),%esi
59610710Sddmitriev	xorps	%xmm2,%xmm6
59710710Sddmitriev	movdqa	%xmm7,%xmm2
59810710Sddmitriev	movups	%xmm6,(%edi)
59910710Sddmitriev	leal	16(%edi),%edi
60010710Sddmitriev.byte	102,15,56,0,213
60110710Sddmitriev	jnz	.L026ccm64_enc_outer
60210710Sddmitriev	movl	48(%esp),%esp
60310710Sddmitriev	movl	40(%esp),%edi
60410710Sddmitriev	movups	%xmm3,(%edi)
60510710Sddmitriev	popl	%edi
60610710Sddmitriev	popl	%esi
60710710Sddmitriev	popl	%ebx
60810710Sddmitriev	popl	%ebp
60910710Sddmitriev	ret
61010710Sddmitriev.size	aesni_ccm64_encrypt_blocks,.-.L_aesni_ccm64_encrypt_blocks_begin
61110710Sddmitriev.globl	aesni_ccm64_decrypt_blocks
61210710Sddmitriev.type	aesni_ccm64_decrypt_blocks,@function
61310710Sddmitriev.align	16
61410710Sddmitrievaesni_ccm64_decrypt_blocks:
61510710Sddmitriev.L_aesni_ccm64_decrypt_blocks_begin:
61610710Sddmitriev	pushl	%ebp
61710710Sddmitriev	pushl	%ebx
61810710Sddmitriev	pushl	%esi
61910710Sddmitriev	pushl	%edi
62010710Sddmitriev	movl	20(%esp),%esi
62110710Sddmitriev	movl	24(%esp),%edi
62210710Sddmitriev	movl	28(%esp),%eax
62310710Sddmitriev	movl	32(%esp),%edx
62410710Sddmitriev	movl	36(%esp),%ebx
62510710Sddmitriev	movl	40(%esp),%ecx
62610710Sddmitriev	movl	%esp,%ebp
62710710Sddmitriev	subl	$60,%esp
62810710Sddmitriev	andl	$-16,%esp
62910710Sddmitriev	movl	%ebp,48(%esp)
63010710Sddmitriev	movdqu	(%ebx),%xmm7
63110710Sddmitriev	movdqu	(%ecx),%xmm3
63210710Sddmitriev	movl	240(%edx),%ecx
63310710Sddmitriev	movl	$202182159,(%esp)
63410710Sddmitriev	movl	$134810123,4(%esp)
63510710Sddmitriev	movl	$67438087,8(%esp)
63610710Sddmitriev	movl	$66051,12(%esp)
63710710Sddmitriev	movl	$1,%ebx
63810710Sddmitriev	xorl	%ebp,%ebp
63910710Sddmitriev	movl	%ebx,16(%esp)
64010710Sddmitriev	movl	%ebp,20(%esp)
64110710Sddmitriev	movl	%ebp,24(%esp)
64210710Sddmitriev	movl	%ebp,28(%esp)
64310710Sddmitriev	movdqa	(%esp),%xmm5
64410710Sddmitriev	movdqa	%xmm7,%xmm2
64510710Sddmitriev	movl	%edx,%ebp
64610710Sddmitriev	movl	%ecx,%ebx
64710710Sddmitriev.byte	102,15,56,0,253
64810710Sddmitriev	movups	(%edx),%xmm0
64910710Sddmitriev	movups	16(%edx),%xmm1
65010710Sddmitriev	leal	32(%edx),%edx
65110710Sddmitriev	xorps	%xmm0,%xmm2
65210710Sddmitriev.L028enc1_loop_5:
65310710Sddmitriev.byte	102,15,56,220,209
65410710Sddmitriev	decl	%ecx
65510710Sddmitriev	movups	(%edx),%xmm1
65610710Sddmitriev	leal	16(%edx),%edx
65710710Sddmitriev	jnz	.L028enc1_loop_5
65810710Sddmitriev.byte	102,15,56,221,209
65910710Sddmitriev	movups	(%esi),%xmm6
66010710Sddmitriev	paddq	16(%esp),%xmm7
66110710Sddmitriev	leal	16(%esi),%esi
66210710Sddmitriev	jmp	.L029ccm64_dec_outer
66310710Sddmitriev.align	16
66410710Sddmitriev.L029ccm64_dec_outer:
66510710Sddmitriev	xorps	%xmm2,%xmm6
66610710Sddmitriev	movdqa	%xmm7,%xmm2
66710710Sddmitriev	movl	%ebx,%ecx
66810710Sddmitriev	movups	%xmm6,(%edi)
66910710Sddmitriev	leal	16(%edi),%edi
67010710Sddmitriev.byte	102,15,56,0,213
67110710Sddmitriev	subl	$1,%eax
67210710Sddmitriev	jz	.L030ccm64_dec_break
67310710Sddmitriev	movups	(%ebp),%xmm0
67410710Sddmitriev	shrl	$1,%ecx
67510710Sddmitriev	movups	16(%ebp),%xmm1
67610710Sddmitriev	xorps	%xmm0,%xmm6
67710710Sddmitriev	leal	32(%ebp),%edx
67810710Sddmitriev	xorps	%xmm0,%xmm2
67910710Sddmitriev	xorps	%xmm6,%xmm3
68010710Sddmitriev	movups	(%edx),%xmm0
68110710Sddmitriev.L031ccm64_dec2_loop:
68210710Sddmitriev.byte	102,15,56,220,209
68310710Sddmitriev	decl	%ecx
68410710Sddmitriev.byte	102,15,56,220,217
68510710Sddmitriev	movups	16(%edx),%xmm1
68610710Sddmitriev.byte	102,15,56,220,208
68710710Sddmitriev	leal	32(%edx),%edx
68810710Sddmitriev.byte	102,15,56,220,216
68910710Sddmitriev	movups	(%edx),%xmm0
69010710Sddmitriev	jnz	.L031ccm64_dec2_loop
69110710Sddmitriev	movups	(%esi),%xmm6
69210710Sddmitriev	paddq	16(%esp),%xmm7
69310710Sddmitriev.byte	102,15,56,220,209
69410710Sddmitriev.byte	102,15,56,220,217
69510710Sddmitriev	leal	16(%esi),%esi
69610710Sddmitriev.byte	102,15,56,221,208
69710710Sddmitriev.byte	102,15,56,221,216
69810710Sddmitriev	jmp	.L029ccm64_dec_outer
69910710Sddmitriev.align	16
70010710Sddmitriev.L030ccm64_dec_break:
70110710Sddmitriev	movl	%ebp,%edx
70210710Sddmitriev	movups	(%edx),%xmm0
70310710Sddmitriev	movups	16(%edx),%xmm1
70410710Sddmitriev	xorps	%xmm0,%xmm6
70510710Sddmitriev	leal	32(%edx),%edx
70610710Sddmitriev	xorps	%xmm6,%xmm3
70710710Sddmitriev.L032enc1_loop_6:
70810710Sddmitriev.byte	102,15,56,220,217
70910710Sddmitriev	decl	%ecx
71010710Sddmitriev	movups	(%edx),%xmm1
71110710Sddmitriev	leal	16(%edx),%edx
71210710Sddmitriev	jnz	.L032enc1_loop_6
71310710Sddmitriev.byte	102,15,56,221,217
71410710Sddmitriev	movl	48(%esp),%esp
71510710Sddmitriev	movl	40(%esp),%edi
71610710Sddmitriev	movups	%xmm3,(%edi)
71710710Sddmitriev	popl	%edi
71810710Sddmitriev	popl	%esi
71910710Sddmitriev	popl	%ebx
72010710Sddmitriev	popl	%ebp
72110710Sddmitriev	ret
72210710Sddmitriev.size	aesni_ccm64_decrypt_blocks,.-.L_aesni_ccm64_decrypt_blocks_begin
72310710Sddmitriev.globl	aesni_ctr32_encrypt_blocks
72410710Sddmitriev.type	aesni_ctr32_encrypt_blocks,@function
72510710Sddmitriev.align	16
72610710Sddmitrievaesni_ctr32_encrypt_blocks:
72710710Sddmitriev.L_aesni_ctr32_encrypt_blocks_begin:
72810710Sddmitriev	pushl	%ebp
72910710Sddmitriev	pushl	%ebx
73010710Sddmitriev	pushl	%esi
73110710Sddmitriev	pushl	%edi
73210710Sddmitriev	movl	20(%esp),%esi
73310710Sddmitriev	movl	24(%esp),%edi
73410710Sddmitriev	movl	28(%esp),%eax
73510710Sddmitriev	movl	32(%esp),%edx
73610710Sddmitriev	movl	36(%esp),%ebx
73710710Sddmitriev	movl	%esp,%ebp
73810710Sddmitriev	subl	$88,%esp
73910710Sddmitriev	andl	$-16,%esp
74010710Sddmitriev	movl	%ebp,80(%esp)
74110710Sddmitriev	cmpl	$1,%eax
74210710Sddmitriev	je	.L033ctr32_one_shortcut
74310710Sddmitriev	movdqu	(%ebx),%xmm7
74410710Sddmitriev	movl	$202182159,(%esp)
74510710Sddmitriev	movl	$134810123,4(%esp)
74610710Sddmitriev	movl	$67438087,8(%esp)
74710710Sddmitriev	movl	$66051,12(%esp)
74810710Sddmitriev	movl	$6,%ecx
74910710Sddmitriev	xorl	%ebp,%ebp
75010710Sddmitriev	movl	%ecx,16(%esp)
75110710Sddmitriev	movl	%ecx,20(%esp)
75210710Sddmitriev	movl	%ecx,24(%esp)
75310710Sddmitriev	movl	%ebp,28(%esp)
75410710Sddmitriev.byte	102,15,58,22,251,3
75510710Sddmitriev.byte	102,15,58,34,253,3
75610710Sddmitriev	movl	240(%edx),%ecx
75710710Sddmitriev	bswap	%ebx
75810710Sddmitriev	pxor	%xmm1,%xmm1
75910710Sddmitriev	pxor	%xmm0,%xmm0
76010710Sddmitriev	movdqa	(%esp),%xmm2
76110710Sddmitriev.byte	102,15,58,34,203,0
76210710Sddmitriev	leal	3(%ebx),%ebp
76310710Sddmitriev.byte	102,15,58,34,197,0
76410710Sddmitriev	incl	%ebx
76510710Sddmitriev.byte	102,15,58,34,203,1
76610710Sddmitriev	incl	%ebp
76710710Sddmitriev.byte	102,15,58,34,197,1
76810710Sddmitriev	incl	%ebx
76910710Sddmitriev.byte	102,15,58,34,203,2
77010710Sddmitriev	incl	%ebp
77110710Sddmitriev.byte	102,15,58,34,197,2
77210710Sddmitriev	movdqa	%xmm1,48(%esp)
77310710Sddmitriev.byte	102,15,56,0,202
77410710Sddmitriev	movdqa	%xmm0,64(%esp)
77510710Sddmitriev.byte	102,15,56,0,194
77610710Sddmitriev	pshufd	$192,%xmm1,%xmm2
77710710Sddmitriev	pshufd	$128,%xmm1,%xmm3
77810710Sddmitriev	cmpl	$6,%eax
77910710Sddmitriev	jb	.L034ctr32_tail
78010710Sddmitriev	movdqa	%xmm7,32(%esp)
78110710Sddmitriev	shrl	$1,%ecx
78210710Sddmitriev	movl	%edx,%ebp
78310710Sddmitriev	movl	%ecx,%ebx
78410710Sddmitriev	subl	$6,%eax
78510710Sddmitriev	jmp	.L035ctr32_loop6
78610710Sddmitriev.align	16
78710710Sddmitriev.L035ctr32_loop6:
78810710Sddmitriev	pshufd	$64,%xmm1,%xmm4
78910710Sddmitriev	movdqa	32(%esp),%xmm1
79010710Sddmitriev	pshufd	$192,%xmm0,%xmm5
79110710Sddmitriev	por	%xmm1,%xmm2
79210710Sddmitriev	pshufd	$128,%xmm0,%xmm6
79310710Sddmitriev	por	%xmm1,%xmm3
79410710Sddmitriev	pshufd	$64,%xmm0,%xmm7
79510710Sddmitriev	por	%xmm1,%xmm4
79610710Sddmitriev	por	%xmm1,%xmm5
79710710Sddmitriev	por	%xmm1,%xmm6
79810710Sddmitriev	por	%xmm1,%xmm7
79910710Sddmitriev	movups	(%ebp),%xmm0
80010710Sddmitriev	movups	16(%ebp),%xmm1
80110710Sddmitriev	leal	32(%ebp),%edx
80210710Sddmitriev	decl	%ecx
80310710Sddmitriev	pxor	%xmm0,%xmm2
80410710Sddmitriev	pxor	%xmm0,%xmm3
80510710Sddmitriev.byte	102,15,56,220,209
80610710Sddmitriev	pxor	%xmm0,%xmm4
80710710Sddmitriev.byte	102,15,56,220,217
80810710Sddmitriev	pxor	%xmm0,%xmm5
80910710Sddmitriev.byte	102,15,56,220,225
81010710Sddmitriev	pxor	%xmm0,%xmm6
81110710Sddmitriev.byte	102,15,56,220,233
81210710Sddmitriev	pxor	%xmm0,%xmm7
81310710Sddmitriev.byte	102,15,56,220,241
81410710Sddmitriev	movups	(%edx),%xmm0
81510710Sddmitriev.byte	102,15,56,220,249
81610710Sddmitriev	call	.L_aesni_encrypt6_enter
81710710Sddmitriev	movups	(%esi),%xmm1
81810710Sddmitriev	movups	16(%esi),%xmm0
81910710Sddmitriev	xorps	%xmm1,%xmm2
82010710Sddmitriev	movups	32(%esi),%xmm1
82110710Sddmitriev	xorps	%xmm0,%xmm3
82210710Sddmitriev	movups	%xmm2,(%edi)
82310710Sddmitriev	movdqa	16(%esp),%xmm0
82410710Sddmitriev	xorps	%xmm1,%xmm4
82510710Sddmitriev	movdqa	48(%esp),%xmm1
82610710Sddmitriev	movups	%xmm3,16(%edi)
82710710Sddmitriev	movups	%xmm4,32(%edi)
82810710Sddmitriev	paddd	%xmm0,%xmm1
82910710Sddmitriev	paddd	64(%esp),%xmm0
83010710Sddmitriev	movdqa	(%esp),%xmm2
83110710Sddmitriev	movups	48(%esi),%xmm3
83210710Sddmitriev	movups	64(%esi),%xmm4
83310710Sddmitriev	xorps	%xmm3,%xmm5
83410710Sddmitriev	movups	80(%esi),%xmm3
83510710Sddmitriev	leal	96(%esi),%esi
83610710Sddmitriev	movdqa	%xmm1,48(%esp)
83710710Sddmitriev.byte	102,15,56,0,202
83810710Sddmitriev	xorps	%xmm4,%xmm6
83910710Sddmitriev	movups	%xmm5,48(%edi)
84010710Sddmitriev	xorps	%xmm3,%xmm7
84110710Sddmitriev	movdqa	%xmm0,64(%esp)
84210710Sddmitriev.byte	102,15,56,0,194
84310710Sddmitriev	movups	%xmm6,64(%edi)
84410710Sddmitriev	pshufd	$192,%xmm1,%xmm2
84510710Sddmitriev	movups	%xmm7,80(%edi)
84610710Sddmitriev	leal	96(%edi),%edi
84710710Sddmitriev	movl	%ebx,%ecx
84810710Sddmitriev	pshufd	$128,%xmm1,%xmm3
84910710Sddmitriev	subl	$6,%eax
85010710Sddmitriev	jnc	.L035ctr32_loop6
85110710Sddmitriev	addl	$6,%eax
85210710Sddmitriev	jz	.L036ctr32_ret
85310710Sddmitriev	movl	%ebp,%edx
85410710Sddmitriev	leal	1(,%ecx,2),%ecx
85510710Sddmitriev	movdqa	32(%esp),%xmm7
85610710Sddmitriev.L034ctr32_tail:
85710710Sddmitriev	por	%xmm7,%xmm2
85810710Sddmitriev	cmpl	$2,%eax
85910710Sddmitriev	jb	.L037ctr32_one
86010710Sddmitriev	pshufd	$64,%xmm1,%xmm4
86110710Sddmitriev	por	%xmm7,%xmm3
86210710Sddmitriev	je	.L038ctr32_two
86310710Sddmitriev	pshufd	$192,%xmm0,%xmm5
86410710Sddmitriev	por	%xmm7,%xmm4
86510710Sddmitriev	cmpl	$4,%eax
86610710Sddmitriev	jb	.L039ctr32_three
86710710Sddmitriev	pshufd	$128,%xmm0,%xmm6
86810710Sddmitriev	por	%xmm7,%xmm5
86910710Sddmitriev	je	.L040ctr32_four
87010710Sddmitriev	por	%xmm7,%xmm6
87110710Sddmitriev	call	_aesni_encrypt6
87210710Sddmitriev	movups	(%esi),%xmm1
87310710Sddmitriev	movups	16(%esi),%xmm0
87410710Sddmitriev	xorps	%xmm1,%xmm2
87510710Sddmitriev	movups	32(%esi),%xmm1
87610710Sddmitriev	xorps	%xmm0,%xmm3
87710710Sddmitriev	movups	48(%esi),%xmm0
87810710Sddmitriev	xorps	%xmm1,%xmm4
87910710Sddmitriev	movups	64(%esi),%xmm1
88010710Sddmitriev	xorps	%xmm0,%xmm5
88110710Sddmitriev	movups	%xmm2,(%edi)
88210710Sddmitriev	xorps	%xmm1,%xmm6
88310710Sddmitriev	movups	%xmm3,16(%edi)
88410710Sddmitriev	movups	%xmm4,32(%edi)
88510710Sddmitriev	movups	%xmm5,48(%edi)
88610710Sddmitriev	movups	%xmm6,64(%edi)
88710710Sddmitriev	jmp	.L036ctr32_ret
88810710Sddmitriev.align	16
88910710Sddmitriev.L033ctr32_one_shortcut:
89010710Sddmitriev	movups	(%ebx),%xmm2
89110710Sddmitriev	movl	240(%edx),%ecx
89210710Sddmitriev.L037ctr32_one:
89310710Sddmitriev	movups	(%edx),%xmm0
89410710Sddmitriev	movups	16(%edx),%xmm1
89510710Sddmitriev	leal	32(%edx),%edx
89610710Sddmitriev	xorps	%xmm0,%xmm2
89710710Sddmitriev.L041enc1_loop_7:
89810710Sddmitriev.byte	102,15,56,220,209
89910710Sddmitriev	decl	%ecx
90010710Sddmitriev	movups	(%edx),%xmm1
90110710Sddmitriev	leal	16(%edx),%edx
90210710Sddmitriev	jnz	.L041enc1_loop_7
90310710Sddmitriev.byte	102,15,56,221,209
90410710Sddmitriev	movups	(%esi),%xmm6
90510710Sddmitriev	xorps	%xmm2,%xmm6
90610710Sddmitriev	movups	%xmm6,(%edi)
90710710Sddmitriev	jmp	.L036ctr32_ret
90810710Sddmitriev.align	16
90910710Sddmitriev.L038ctr32_two:
91010710Sddmitriev	call	_aesni_encrypt3
91110710Sddmitriev	movups	(%esi),%xmm5
91210710Sddmitriev	movups	16(%esi),%xmm6
91310710Sddmitriev	xorps	%xmm5,%xmm2
91410710Sddmitriev	xorps	%xmm6,%xmm3
91510710Sddmitriev	movups	%xmm2,(%edi)
91610710Sddmitriev	movups	%xmm3,16(%edi)
91710710Sddmitriev	jmp	.L036ctr32_ret
91810710Sddmitriev.align	16
91910710Sddmitriev.L039ctr32_three:
92010710Sddmitriev	call	_aesni_encrypt3
92110710Sddmitriev	movups	(%esi),%xmm5
92210710Sddmitriev	movups	16(%esi),%xmm6
92310710Sddmitriev	xorps	%xmm5,%xmm2
92410710Sddmitriev	movups	32(%esi),%xmm7
92510710Sddmitriev	xorps	%xmm6,%xmm3
92610710Sddmitriev	movups	%xmm2,(%edi)
92710710Sddmitriev	xorps	%xmm7,%xmm4
92810710Sddmitriev	movups	%xmm3,16(%edi)
92910710Sddmitriev	movups	%xmm4,32(%edi)
93010710Sddmitriev	jmp	.L036ctr32_ret
93110710Sddmitriev.align	16
93210710Sddmitriev.L040ctr32_four:
93310710Sddmitriev	call	_aesni_encrypt4
93410710Sddmitriev	movups	(%esi),%xmm6
93510710Sddmitriev	movups	16(%esi),%xmm7
93610710Sddmitriev	movups	32(%esi),%xmm1
93710710Sddmitriev	xorps	%xmm6,%xmm2
93810710Sddmitriev	movups	48(%esi),%xmm0
93910710Sddmitriev	xorps	%xmm7,%xmm3
94010710Sddmitriev	movups	%xmm2,(%edi)
94110710Sddmitriev	xorps	%xmm1,%xmm4
94210710Sddmitriev	movups	%xmm3,16(%edi)
94310710Sddmitriev	xorps	%xmm0,%xmm5
94410710Sddmitriev	movups	%xmm4,32(%edi)
94510710Sddmitriev	movups	%xmm5,48(%edi)
94610710Sddmitriev.L036ctr32_ret:
94710710Sddmitriev	movl	80(%esp),%esp
94810710Sddmitriev	popl	%edi
94910710Sddmitriev	popl	%esi
95010710Sddmitriev	popl	%ebx
95110710Sddmitriev	popl	%ebp
95210710Sddmitriev	ret
95310710Sddmitriev.size	aesni_ctr32_encrypt_blocks,.-.L_aesni_ctr32_encrypt_blocks_begin
95410710Sddmitriev.globl	aesni_xts_encrypt
95510710Sddmitriev.type	aesni_xts_encrypt,@function
95610710Sddmitriev.align	16
95710710Sddmitrievaesni_xts_encrypt:
95810710Sddmitriev.L_aesni_xts_encrypt_begin:
95910710Sddmitriev	pushl	%ebp
96010710Sddmitriev	pushl	%ebx
96110710Sddmitriev	pushl	%esi
96210710Sddmitriev	pushl	%edi
96310710Sddmitriev	movl	36(%esp),%edx
96410710Sddmitriev	movl	40(%esp),%esi
96510710Sddmitriev	movl	240(%edx),%ecx
96610710Sddmitriev	movups	(%esi),%xmm2
96710710Sddmitriev	movups	(%edx),%xmm0
96810710Sddmitriev	movups	16(%edx),%xmm1
96910710Sddmitriev	leal	32(%edx),%edx
97010710Sddmitriev	xorps	%xmm0,%xmm2
97110710Sddmitriev.L042enc1_loop_8:
97210710Sddmitriev.byte	102,15,56,220,209
97310710Sddmitriev	decl	%ecx
97410710Sddmitriev	movups	(%edx),%xmm1
97510710Sddmitriev	leal	16(%edx),%edx
97610710Sddmitriev	jnz	.L042enc1_loop_8
97710710Sddmitriev.byte	102,15,56,221,209
97810710Sddmitriev	movl	20(%esp),%esi
97910710Sddmitriev	movl	24(%esp),%edi
98010710Sddmitriev	movl	28(%esp),%eax
98110710Sddmitriev	movl	32(%esp),%edx
98210710Sddmitriev	movl	%esp,%ebp
98310710Sddmitriev	subl	$120,%esp
98410710Sddmitriev	movl	240(%edx),%ecx
98510710Sddmitriev	andl	$-16,%esp
98610710Sddmitriev	movl	$135,96(%esp)
98710710Sddmitriev	movl	$0,100(%esp)
98810710Sddmitriev	movl	$1,104(%esp)
98910710Sddmitriev	movl	$0,108(%esp)
99010710Sddmitriev	movl	%eax,112(%esp)
99110710Sddmitriev	movl	%ebp,116(%esp)
99210710Sddmitriev	movdqa	%xmm2,%xmm1
99310710Sddmitriev	pxor	%xmm0,%xmm0
99410710Sddmitriev	movdqa	96(%esp),%xmm3
99510710Sddmitriev	pcmpgtd	%xmm1,%xmm0
99610710Sddmitriev	andl	$-16,%eax
99710710Sddmitriev	movl	%edx,%ebp
99810710Sddmitriev	movl	%ecx,%ebx
99910710Sddmitriev	subl	$96,%eax
100010710Sddmitriev	jc	.L043xts_enc_short
100110710Sddmitriev	shrl	$1,%ecx
100210710Sddmitriev	movl	%ecx,%ebx
100310710Sddmitriev	jmp	.L044xts_enc_loop6
100410710Sddmitriev.align	16
100510710Sddmitriev.L044xts_enc_loop6:
100610710Sddmitriev	pshufd	$19,%xmm0,%xmm2
100710710Sddmitriev	pxor	%xmm0,%xmm0
100810710Sddmitriev	movdqa	%xmm1,(%esp)
100910710Sddmitriev	paddq	%xmm1,%xmm1
101010710Sddmitriev	pand	%xmm3,%xmm2
101110710Sddmitriev	pcmpgtd	%xmm1,%xmm0
101210710Sddmitriev	pxor	%xmm2,%xmm1
101310710Sddmitriev	pshufd	$19,%xmm0,%xmm2
101410710Sddmitriev	pxor	%xmm0,%xmm0
101510710Sddmitriev	movdqa	%xmm1,16(%esp)
101610710Sddmitriev	paddq	%xmm1,%xmm1
101710710Sddmitriev	pand	%xmm3,%xmm2
101810710Sddmitriev	pcmpgtd	%xmm1,%xmm0
101910710Sddmitriev	pxor	%xmm2,%xmm1
102010710Sddmitriev	pshufd	$19,%xmm0,%xmm2
102110710Sddmitriev	pxor	%xmm0,%xmm0
102210710Sddmitriev	movdqa	%xmm1,32(%esp)
102310710Sddmitriev	paddq	%xmm1,%xmm1
102410710Sddmitriev	pand	%xmm3,%xmm2
102510710Sddmitriev	pcmpgtd	%xmm1,%xmm0
102610710Sddmitriev	pxor	%xmm2,%xmm1
102710710Sddmitriev	pshufd	$19,%xmm0,%xmm2
102810710Sddmitriev	pxor	%xmm0,%xmm0
102910710Sddmitriev	movdqa	%xmm1,48(%esp)
103010710Sddmitriev	paddq	%xmm1,%xmm1
103110710Sddmitriev	pand	%xmm3,%xmm2
103210710Sddmitriev	pcmpgtd	%xmm1,%xmm0
103310710Sddmitriev	pxor	%xmm2,%xmm1
103410710Sddmitriev	pshufd	$19,%xmm0,%xmm7
103510710Sddmitriev	movdqa	%xmm1,64(%esp)
103610710Sddmitriev	paddq	%xmm1,%xmm1
103710710Sddmitriev	movups	(%ebp),%xmm0
103810710Sddmitriev	pand	%xmm3,%xmm7
103910710Sddmitriev	movups	(%esi),%xmm2
104010710Sddmitriev	pxor	%xmm1,%xmm7
104110710Sddmitriev	movdqu	16(%esi),%xmm3
104210710Sddmitriev	xorps	%xmm0,%xmm2
104310710Sddmitriev	movdqu	32(%esi),%xmm4
104410710Sddmitriev	pxor	%xmm0,%xmm3
104510710Sddmitriev	movdqu	48(%esi),%xmm5
104610710Sddmitriev	pxor	%xmm0,%xmm4
104710710Sddmitriev	movdqu	64(%esi),%xmm6
104810710Sddmitriev	pxor	%xmm0,%xmm5
104910710Sddmitriev	movdqu	80(%esi),%xmm1
105010710Sddmitriev	pxor	%xmm0,%xmm6
105110710Sddmitriev	leal	96(%esi),%esi
105210710Sddmitriev	pxor	(%esp),%xmm2
105310710Sddmitriev	movdqa	%xmm7,80(%esp)
105410710Sddmitriev	pxor	%xmm1,%xmm7
105510710Sddmitriev	movups	16(%ebp),%xmm1
105610710Sddmitriev	leal	32(%ebp),%edx
105710710Sddmitriev	pxor	16(%esp),%xmm3
105810710Sddmitriev.byte	102,15,56,220,209
105910710Sddmitriev	pxor	32(%esp),%xmm4
106010710Sddmitriev.byte	102,15,56,220,217
106110710Sddmitriev	pxor	48(%esp),%xmm5
106210710Sddmitriev	decl	%ecx
106310710Sddmitriev.byte	102,15,56,220,225
106410710Sddmitriev	pxor	64(%esp),%xmm6
106510710Sddmitriev.byte	102,15,56,220,233
106610710Sddmitriev	pxor	%xmm0,%xmm7
106710710Sddmitriev.byte	102,15,56,220,241
106810710Sddmitriev	movups	(%edx),%xmm0
106910710Sddmitriev.byte	102,15,56,220,249
107010710Sddmitriev	call	.L_aesni_encrypt6_enter
107110710Sddmitriev	movdqa	80(%esp),%xmm1
107210710Sddmitriev	pxor	%xmm0,%xmm0
107310710Sddmitriev	xorps	(%esp),%xmm2
107410710Sddmitriev	pcmpgtd	%xmm1,%xmm0
107510710Sddmitriev	xorps	16(%esp),%xmm3
107610710Sddmitriev	movups	%xmm2,(%edi)
107710710Sddmitriev	xorps	32(%esp),%xmm4
107810710Sddmitriev	movups	%xmm3,16(%edi)
107910710Sddmitriev	xorps	48(%esp),%xmm5
108010710Sddmitriev	movups	%xmm4,32(%edi)
108110710Sddmitriev	xorps	64(%esp),%xmm6
108210710Sddmitriev	movups	%xmm5,48(%edi)
108310710Sddmitriev	xorps	%xmm1,%xmm7
108410710Sddmitriev	movups	%xmm6,64(%edi)
108510710Sddmitriev	pshufd	$19,%xmm0,%xmm2
108610710Sddmitriev	movups	%xmm7,80(%edi)
108710710Sddmitriev	leal	96(%edi),%edi
108810710Sddmitriev	movdqa	96(%esp),%xmm3
108910710Sddmitriev	pxor	%xmm0,%xmm0
109010710Sddmitriev	paddq	%xmm1,%xmm1
109110710Sddmitriev	pand	%xmm3,%xmm2
109210710Sddmitriev	pcmpgtd	%xmm1,%xmm0
109310710Sddmitriev	movl	%ebx,%ecx
109410710Sddmitriev	pxor	%xmm2,%xmm1
109510710Sddmitriev	subl	$96,%eax
109610710Sddmitriev	jnc	.L044xts_enc_loop6
109710710Sddmitriev	leal	1(,%ecx,2),%ecx
109810710Sddmitriev	movl	%ebp,%edx
109910710Sddmitriev	movl	%ecx,%ebx
110010710Sddmitriev.L043xts_enc_short:
110110710Sddmitriev	addl	$96,%eax
110210710Sddmitriev	jz	.L045xts_enc_done6x
110310710Sddmitriev	movdqa	%xmm1,%xmm5
110410710Sddmitriev	cmpl	$32,%eax
110510710Sddmitriev	jb	.L046xts_enc_one
110610710Sddmitriev	pshufd	$19,%xmm0,%xmm2
110710710Sddmitriev	pxor	%xmm0,%xmm0
110810710Sddmitriev	paddq	%xmm1,%xmm1
110910710Sddmitriev	pand	%xmm3,%xmm2
111010710Sddmitriev	pcmpgtd	%xmm1,%xmm0
111110710Sddmitriev	pxor	%xmm2,%xmm1
111210710Sddmitriev	je	.L047xts_enc_two
111310710Sddmitriev	pshufd	$19,%xmm0,%xmm2
111410710Sddmitriev	pxor	%xmm0,%xmm0
111510710Sddmitriev	movdqa	%xmm1,%xmm6
111610710Sddmitriev	paddq	%xmm1,%xmm1
111710710Sddmitriev	pand	%xmm3,%xmm2
111810710Sddmitriev	pcmpgtd	%xmm1,%xmm0
111910710Sddmitriev	pxor	%xmm2,%xmm1
112010710Sddmitriev	cmpl	$64,%eax
112110710Sddmitriev	jb	.L048xts_enc_three
112210710Sddmitriev	pshufd	$19,%xmm0,%xmm2
112310710Sddmitriev	pxor	%xmm0,%xmm0
112410710Sddmitriev	movdqa	%xmm1,%xmm7
112510710Sddmitriev	paddq	%xmm1,%xmm1
112610710Sddmitriev	pand	%xmm3,%xmm2
112710710Sddmitriev	pcmpgtd	%xmm1,%xmm0
112810710Sddmitriev	pxor	%xmm2,%xmm1
112910710Sddmitriev	movdqa	%xmm5,(%esp)
113010710Sddmitriev	movdqa	%xmm6,16(%esp)
113110710Sddmitriev	je	.L049xts_enc_four
113210710Sddmitriev	movdqa	%xmm7,32(%esp)
113310710Sddmitriev	pshufd	$19,%xmm0,%xmm7
113410710Sddmitriev	movdqa	%xmm1,48(%esp)
113510710Sddmitriev	paddq	%xmm1,%xmm1
113610710Sddmitriev	pand	%xmm3,%xmm7
113710710Sddmitriev	pxor	%xmm1,%xmm7
113810710Sddmitriev	movdqu	(%esi),%xmm2
113910710Sddmitriev	movdqu	16(%esi),%xmm3
114010710Sddmitriev	movdqu	32(%esi),%xmm4
114110710Sddmitriev	pxor	(%esp),%xmm2
114210710Sddmitriev	movdqu	48(%esi),%xmm5
114310710Sddmitriev	pxor	16(%esp),%xmm3
114410710Sddmitriev	movdqu	64(%esi),%xmm6
114510710Sddmitriev	pxor	32(%esp),%xmm4
114610710Sddmitriev	leal	80(%esi),%esi
114710710Sddmitriev	pxor	48(%esp),%xmm5
114810710Sddmitriev	movdqa	%xmm7,64(%esp)
114910710Sddmitriev	pxor	%xmm7,%xmm6
115010710Sddmitriev	call	_aesni_encrypt6
115110710Sddmitriev	movaps	64(%esp),%xmm1
115210710Sddmitriev	xorps	(%esp),%xmm2
115310710Sddmitriev	xorps	16(%esp),%xmm3
115410710Sddmitriev	xorps	32(%esp),%xmm4
115510710Sddmitriev	movups	%xmm2,(%edi)
115610710Sddmitriev	xorps	48(%esp),%xmm5
115710710Sddmitriev	movups	%xmm3,16(%edi)
115810710Sddmitriev	xorps	%xmm1,%xmm6
115910710Sddmitriev	movups	%xmm4,32(%edi)
116010710Sddmitriev	movups	%xmm5,48(%edi)
116110710Sddmitriev	movups	%xmm6,64(%edi)
116210710Sddmitriev	leal	80(%edi),%edi
116310710Sddmitriev	jmp	.L050xts_enc_done
116410710Sddmitriev.align	16
116510710Sddmitriev.L046xts_enc_one:
116610710Sddmitriev	movups	(%esi),%xmm2
116710710Sddmitriev	leal	16(%esi),%esi
116810710Sddmitriev	xorps	%xmm5,%xmm2
116910710Sddmitriev	movups	(%edx),%xmm0
117010710Sddmitriev	movups	16(%edx),%xmm1
117110710Sddmitriev	leal	32(%edx),%edx
117210710Sddmitriev	xorps	%xmm0,%xmm2
117310710Sddmitriev.L051enc1_loop_9:
117410710Sddmitriev.byte	102,15,56,220,209
117510710Sddmitriev	decl	%ecx
117610710Sddmitriev	movups	(%edx),%xmm1
117710710Sddmitriev	leal	16(%edx),%edx
117810710Sddmitriev	jnz	.L051enc1_loop_9
117910710Sddmitriev.byte	102,15,56,221,209
118010710Sddmitriev	xorps	%xmm5,%xmm2
118110710Sddmitriev	movups	%xmm2,(%edi)
118210710Sddmitriev	leal	16(%edi),%edi
118310710Sddmitriev	movdqa	%xmm5,%xmm1
118410710Sddmitriev	jmp	.L050xts_enc_done
118510710Sddmitriev.align	16
118610710Sddmitriev.L047xts_enc_two:
118710710Sddmitriev	movaps	%xmm1,%xmm6
118810710Sddmitriev	movups	(%esi),%xmm2
118910710Sddmitriev	movups	16(%esi),%xmm3
119010710Sddmitriev	leal	32(%esi),%esi
119110710Sddmitriev	xorps	%xmm5,%xmm2
119210710Sddmitriev	xorps	%xmm6,%xmm3
119310710Sddmitriev	xorps	%xmm4,%xmm4
119410710Sddmitriev	call	_aesni_encrypt3
119510710Sddmitriev	xorps	%xmm5,%xmm2
119610710Sddmitriev	xorps	%xmm6,%xmm3
119710710Sddmitriev	movups	%xmm2,(%edi)
119810710Sddmitriev	movups	%xmm3,16(%edi)
119910710Sddmitriev	leal	32(%edi),%edi
120010710Sddmitriev	movdqa	%xmm6,%xmm1
120110710Sddmitriev	jmp	.L050xts_enc_done
120210710Sddmitriev.align	16
120310710Sddmitriev.L048xts_enc_three:
120410710Sddmitriev	movaps	%xmm1,%xmm7
120510710Sddmitriev	movups	(%esi),%xmm2
120610710Sddmitriev	movups	16(%esi),%xmm3
120710710Sddmitriev	movups	32(%esi),%xmm4
120810710Sddmitriev	leal	48(%esi),%esi
120910710Sddmitriev	xorps	%xmm5,%xmm2
121010710Sddmitriev	xorps	%xmm6,%xmm3
121110710Sddmitriev	xorps	%xmm7,%xmm4
121210710Sddmitriev	call	_aesni_encrypt3
121310710Sddmitriev	xorps	%xmm5,%xmm2
121410710Sddmitriev	xorps	%xmm6,%xmm3
121510710Sddmitriev	xorps	%xmm7,%xmm4
121610710Sddmitriev	movups	%xmm2,(%edi)
121710710Sddmitriev	movups	%xmm3,16(%edi)
121810710Sddmitriev	movups	%xmm4,32(%edi)
121910710Sddmitriev	leal	48(%edi),%edi
122010710Sddmitriev	movdqa	%xmm7,%xmm1
122110710Sddmitriev	jmp	.L050xts_enc_done
122210710Sddmitriev.align	16
122310710Sddmitriev.L049xts_enc_four:
122410710Sddmitriev	movaps	%xmm1,%xmm6
122510710Sddmitriev	movups	(%esi),%xmm2
122610710Sddmitriev	movups	16(%esi),%xmm3
122710710Sddmitriev	movups	32(%esi),%xmm4
122810710Sddmitriev	xorps	(%esp),%xmm2
122910710Sddmitriev	movups	48(%esi),%xmm5
123010710Sddmitriev	leal	64(%esi),%esi
123110710Sddmitriev	xorps	16(%esp),%xmm3
123210710Sddmitriev	xorps	%xmm7,%xmm4
123310710Sddmitriev	xorps	%xmm6,%xmm5
123410710Sddmitriev	call	_aesni_encrypt4
123510710Sddmitriev	xorps	(%esp),%xmm2
123610710Sddmitriev	xorps	16(%esp),%xmm3
123710710Sddmitriev	xorps	%xmm7,%xmm4
123810710Sddmitriev	movups	%xmm2,(%edi)
123910710Sddmitriev	xorps	%xmm6,%xmm5
124010710Sddmitriev	movups	%xmm3,16(%edi)
124110710Sddmitriev	movups	%xmm4,32(%edi)
124210710Sddmitriev	movups	%xmm5,48(%edi)
124310710Sddmitriev	leal	64(%edi),%edi
124410710Sddmitriev	movdqa	%xmm6,%xmm1
124510710Sddmitriev	jmp	.L050xts_enc_done
124610710Sddmitriev.align	16
124710710Sddmitriev.L045xts_enc_done6x:
124810710Sddmitriev	movl	112(%esp),%eax
124910710Sddmitriev	andl	$15,%eax
125010710Sddmitriev	jz	.L052xts_enc_ret
125110710Sddmitriev	movdqa	%xmm1,%xmm5
125210710Sddmitriev	movl	%eax,112(%esp)
125310710Sddmitriev	jmp	.L053xts_enc_steal
125410710Sddmitriev.align	16
125510710Sddmitriev.L050xts_enc_done:
125610710Sddmitriev	movl	112(%esp),%eax
125710710Sddmitriev	pxor	%xmm0,%xmm0
125810710Sddmitriev	andl	$15,%eax
125910710Sddmitriev	jz	.L052xts_enc_ret
126010710Sddmitriev	pcmpgtd	%xmm1,%xmm0
126110710Sddmitriev	movl	%eax,112(%esp)
126210710Sddmitriev	pshufd	$19,%xmm0,%xmm5
126310710Sddmitriev	paddq	%xmm1,%xmm1
126410710Sddmitriev	pand	96(%esp),%xmm5
126510710Sddmitriev	pxor	%xmm1,%xmm5
126610710Sddmitriev.L053xts_enc_steal:
126710710Sddmitriev	movzbl	(%esi),%ecx
126810710Sddmitriev	movzbl	-16(%edi),%edx
126910710Sddmitriev	leal	1(%esi),%esi
127010710Sddmitriev	movb	%cl,-16(%edi)
127110710Sddmitriev	movb	%dl,(%edi)
127210710Sddmitriev	leal	1(%edi),%edi
127310710Sddmitriev	subl	$1,%eax
127410710Sddmitriev	jnz	.L053xts_enc_steal
127510710Sddmitriev	subl	112(%esp),%edi
127610710Sddmitriev	movl	%ebp,%edx
127710710Sddmitriev	movl	%ebx,%ecx
127810710Sddmitriev	movups	-16(%edi),%xmm2
127910710Sddmitriev	xorps	%xmm5,%xmm2
128010710Sddmitriev	movups	(%edx),%xmm0
128110710Sddmitriev	movups	16(%edx),%xmm1
128210710Sddmitriev	leal	32(%edx),%edx
128310710Sddmitriev	xorps	%xmm0,%xmm2
128410710Sddmitriev.L054enc1_loop_10:
128510710Sddmitriev.byte	102,15,56,220,209
128610710Sddmitriev	decl	%ecx
128710710Sddmitriev	movups	(%edx),%xmm1
128810710Sddmitriev	leal	16(%edx),%edx
128910710Sddmitriev	jnz	.L054enc1_loop_10
129010710Sddmitriev.byte	102,15,56,221,209
129110710Sddmitriev	xorps	%xmm5,%xmm2
129210710Sddmitriev	movups	%xmm2,-16(%edi)
129310710Sddmitriev.L052xts_enc_ret:
129410710Sddmitriev	movl	116(%esp),%esp
129510710Sddmitriev	popl	%edi
129610710Sddmitriev	popl	%esi
129710710Sddmitriev	popl	%ebx
129810710Sddmitriev	popl	%ebp
129910710Sddmitriev	ret
130010710Sddmitriev.size	aesni_xts_encrypt,.-.L_aesni_xts_encrypt_begin
130110710Sddmitriev.globl	aesni_xts_decrypt
130210710Sddmitriev.type	aesni_xts_decrypt,@function
130310710Sddmitriev.align	16
130410710Sddmitrievaesni_xts_decrypt:
130510710Sddmitriev.L_aesni_xts_decrypt_begin:
130610710Sddmitriev	pushl	%ebp
130710710Sddmitriev	pushl	%ebx
130810710Sddmitriev	pushl	%esi
130910710Sddmitriev	pushl	%edi
131010710Sddmitriev	movl	36(%esp),%edx
131110710Sddmitriev	movl	40(%esp),%esi
131210710Sddmitriev	movl	240(%edx),%ecx
131310710Sddmitriev	movups	(%esi),%xmm2
131410710Sddmitriev	movups	(%edx),%xmm0
131510710Sddmitriev	movups	16(%edx),%xmm1
131610710Sddmitriev	leal	32(%edx),%edx
131710710Sddmitriev	xorps	%xmm0,%xmm2
131810710Sddmitriev.L055enc1_loop_11:
131910710Sddmitriev.byte	102,15,56,220,209
132010710Sddmitriev	decl	%ecx
132110710Sddmitriev	movups	(%edx),%xmm1
132210710Sddmitriev	leal	16(%edx),%edx
132310710Sddmitriev	jnz	.L055enc1_loop_11
132410710Sddmitriev.byte	102,15,56,221,209
132510710Sddmitriev	movl	20(%esp),%esi
132610710Sddmitriev	movl	24(%esp),%edi
132710710Sddmitriev	movl	28(%esp),%eax
132810710Sddmitriev	movl	32(%esp),%edx
132910710Sddmitriev	movl	%esp,%ebp
133010710Sddmitriev	subl	$120,%esp
133110710Sddmitriev	andl	$-16,%esp
133210710Sddmitriev	xorl	%ebx,%ebx
133310710Sddmitriev	testl	$15,%eax
133410710Sddmitriev	setnz	%bl
133510710Sddmitriev	shll	$4,%ebx
133610710Sddmitriev	subl	%ebx,%eax
133710710Sddmitriev	movl	$135,96(%esp)
133810710Sddmitriev	movl	$0,100(%esp)
133910710Sddmitriev	movl	$1,104(%esp)
134010710Sddmitriev	movl	$0,108(%esp)
134110710Sddmitriev	movl	%eax,112(%esp)
134210710Sddmitriev	movl	%ebp,116(%esp)
134310710Sddmitriev	movl	240(%edx),%ecx
134410710Sddmitriev	movl	%edx,%ebp
134510710Sddmitriev	movl	%ecx,%ebx
134610710Sddmitriev	movdqa	%xmm2,%xmm1
134710710Sddmitriev	pxor	%xmm0,%xmm0
134810710Sddmitriev	movdqa	96(%esp),%xmm3
134910710Sddmitriev	pcmpgtd	%xmm1,%xmm0
135010710Sddmitriev	andl	$-16,%eax
135110710Sddmitriev	subl	$96,%eax
135210710Sddmitriev	jc	.L056xts_dec_short
135310710Sddmitriev	shrl	$1,%ecx
135410710Sddmitriev	movl	%ecx,%ebx
135510710Sddmitriev	jmp	.L057xts_dec_loop6
135610710Sddmitriev.align	16
135710710Sddmitriev.L057xts_dec_loop6:
135810710Sddmitriev	pshufd	$19,%xmm0,%xmm2
135910710Sddmitriev	pxor	%xmm0,%xmm0
136010710Sddmitriev	movdqa	%xmm1,(%esp)
136110710Sddmitriev	paddq	%xmm1,%xmm1
136210710Sddmitriev	pand	%xmm3,%xmm2
136310710Sddmitriev	pcmpgtd	%xmm1,%xmm0
136410710Sddmitriev	pxor	%xmm2,%xmm1
136510710Sddmitriev	pshufd	$19,%xmm0,%xmm2
136610710Sddmitriev	pxor	%xmm0,%xmm0
136710710Sddmitriev	movdqa	%xmm1,16(%esp)
136810710Sddmitriev	paddq	%xmm1,%xmm1
136910710Sddmitriev	pand	%xmm3,%xmm2
137010710Sddmitriev	pcmpgtd	%xmm1,%xmm0
137110710Sddmitriev	pxor	%xmm2,%xmm1
137210710Sddmitriev	pshufd	$19,%xmm0,%xmm2
137310710Sddmitriev	pxor	%xmm0,%xmm0
137410710Sddmitriev	movdqa	%xmm1,32(%esp)
137510710Sddmitriev	paddq	%xmm1,%xmm1
137610710Sddmitriev	pand	%xmm3,%xmm2
137710710Sddmitriev	pcmpgtd	%xmm1,%xmm0
137810710Sddmitriev	pxor	%xmm2,%xmm1
137910710Sddmitriev	pshufd	$19,%xmm0,%xmm2
138010710Sddmitriev	pxor	%xmm0,%xmm0
138110710Sddmitriev	movdqa	%xmm1,48(%esp)
138210710Sddmitriev	paddq	%xmm1,%xmm1
138310710Sddmitriev	pand	%xmm3,%xmm2
138410710Sddmitriev	pcmpgtd	%xmm1,%xmm0
138510710Sddmitriev	pxor	%xmm2,%xmm1
138610710Sddmitriev	pshufd	$19,%xmm0,%xmm7
138710710Sddmitriev	movdqa	%xmm1,64(%esp)
138810710Sddmitriev	paddq	%xmm1,%xmm1
138910710Sddmitriev	movups	(%ebp),%xmm0
139010710Sddmitriev	pand	%xmm3,%xmm7
139110710Sddmitriev	movups	(%esi),%xmm2
139210710Sddmitriev	pxor	%xmm1,%xmm7
139310710Sddmitriev	movdqu	16(%esi),%xmm3
139410710Sddmitriev	xorps	%xmm0,%xmm2
139510710Sddmitriev	movdqu	32(%esi),%xmm4
139610710Sddmitriev	pxor	%xmm0,%xmm3
139710710Sddmitriev	movdqu	48(%esi),%xmm5
139810710Sddmitriev	pxor	%xmm0,%xmm4
139910710Sddmitriev	movdqu	64(%esi),%xmm6
140010710Sddmitriev	pxor	%xmm0,%xmm5
140110710Sddmitriev	movdqu	80(%esi),%xmm1
140210710Sddmitriev	pxor	%xmm0,%xmm6
140310710Sddmitriev	leal	96(%esi),%esi
140410710Sddmitriev	pxor	(%esp),%xmm2
140510710Sddmitriev	movdqa	%xmm7,80(%esp)
140610710Sddmitriev	pxor	%xmm1,%xmm7
140710710Sddmitriev	movups	16(%ebp),%xmm1
140810710Sddmitriev	leal	32(%ebp),%edx
140910710Sddmitriev	pxor	16(%esp),%xmm3
141010710Sddmitriev.byte	102,15,56,222,209
141110710Sddmitriev	pxor	32(%esp),%xmm4
141210710Sddmitriev.byte	102,15,56,222,217
141310710Sddmitriev	pxor	48(%esp),%xmm5
141410710Sddmitriev	decl	%ecx
141510710Sddmitriev.byte	102,15,56,222,225
141610710Sddmitriev	pxor	64(%esp),%xmm6
141710710Sddmitriev.byte	102,15,56,222,233
141810710Sddmitriev	pxor	%xmm0,%xmm7
141910710Sddmitriev.byte	102,15,56,222,241
142010710Sddmitriev	movups	(%edx),%xmm0
142110710Sddmitriev.byte	102,15,56,222,249
142210710Sddmitriev	call	.L_aesni_decrypt6_enter
142310710Sddmitriev	movdqa	80(%esp),%xmm1
142410710Sddmitriev	pxor	%xmm0,%xmm0
142510710Sddmitriev	xorps	(%esp),%xmm2
142610710Sddmitriev	pcmpgtd	%xmm1,%xmm0
142710710Sddmitriev	xorps	16(%esp),%xmm3
142810710Sddmitriev	movups	%xmm2,(%edi)
142910710Sddmitriev	xorps	32(%esp),%xmm4
143010710Sddmitriev	movups	%xmm3,16(%edi)
143110710Sddmitriev	xorps	48(%esp),%xmm5
143210710Sddmitriev	movups	%xmm4,32(%edi)
143310710Sddmitriev	xorps	64(%esp),%xmm6
143410710Sddmitriev	movups	%xmm5,48(%edi)
143510710Sddmitriev	xorps	%xmm1,%xmm7
143610710Sddmitriev	movups	%xmm6,64(%edi)
143710710Sddmitriev	pshufd	$19,%xmm0,%xmm2
143810710Sddmitriev	movups	%xmm7,80(%edi)
143910710Sddmitriev	leal	96(%edi),%edi
144010710Sddmitriev	movdqa	96(%esp),%xmm3
144110710Sddmitriev	pxor	%xmm0,%xmm0
144210710Sddmitriev	paddq	%xmm1,%xmm1
144310710Sddmitriev	pand	%xmm3,%xmm2
144410710Sddmitriev	pcmpgtd	%xmm1,%xmm0
144510710Sddmitriev	movl	%ebx,%ecx
144610710Sddmitriev	pxor	%xmm2,%xmm1
144710710Sddmitriev	subl	$96,%eax
144810710Sddmitriev	jnc	.L057xts_dec_loop6
144910710Sddmitriev	leal	1(,%ecx,2),%ecx
145010710Sddmitriev	movl	%ebp,%edx
145110710Sddmitriev	movl	%ecx,%ebx
145210710Sddmitriev.L056xts_dec_short:
145310710Sddmitriev	addl	$96,%eax
145410710Sddmitriev	jz	.L058xts_dec_done6x
145510710Sddmitriev	movdqa	%xmm1,%xmm5
145610710Sddmitriev	cmpl	$32,%eax
145710710Sddmitriev	jb	.L059xts_dec_one
145810710Sddmitriev	pshufd	$19,%xmm0,%xmm2
145910710Sddmitriev	pxor	%xmm0,%xmm0
146010710Sddmitriev	paddq	%xmm1,%xmm1
146110710Sddmitriev	pand	%xmm3,%xmm2
146210710Sddmitriev	pcmpgtd	%xmm1,%xmm0
146310710Sddmitriev	pxor	%xmm2,%xmm1
146410710Sddmitriev	je	.L060xts_dec_two
146510710Sddmitriev	pshufd	$19,%xmm0,%xmm2
146610710Sddmitriev	pxor	%xmm0,%xmm0
146710710Sddmitriev	movdqa	%xmm1,%xmm6
146810710Sddmitriev	paddq	%xmm1,%xmm1
146910710Sddmitriev	pand	%xmm3,%xmm2
147010710Sddmitriev	pcmpgtd	%xmm1,%xmm0
147110710Sddmitriev	pxor	%xmm2,%xmm1
147210710Sddmitriev	cmpl	$64,%eax
147310710Sddmitriev	jb	.L061xts_dec_three
147410710Sddmitriev	pshufd	$19,%xmm0,%xmm2
147510710Sddmitriev	pxor	%xmm0,%xmm0
147610710Sddmitriev	movdqa	%xmm1,%xmm7
147710710Sddmitriev	paddq	%xmm1,%xmm1
147810710Sddmitriev	pand	%xmm3,%xmm2
147910710Sddmitriev	pcmpgtd	%xmm1,%xmm0
148010710Sddmitriev	pxor	%xmm2,%xmm1
148110710Sddmitriev	movdqa	%xmm5,(%esp)
148210710Sddmitriev	movdqa	%xmm6,16(%esp)
148310710Sddmitriev	je	.L062xts_dec_four
148410710Sddmitriev	movdqa	%xmm7,32(%esp)
148510710Sddmitriev	pshufd	$19,%xmm0,%xmm7
148610710Sddmitriev	movdqa	%xmm1,48(%esp)
148710710Sddmitriev	paddq	%xmm1,%xmm1
148810710Sddmitriev	pand	%xmm3,%xmm7
148910710Sddmitriev	pxor	%xmm1,%xmm7
149010710Sddmitriev	movdqu	(%esi),%xmm2
149110710Sddmitriev	movdqu	16(%esi),%xmm3
149210710Sddmitriev	movdqu	32(%esi),%xmm4
149310710Sddmitriev	pxor	(%esp),%xmm2
149410710Sddmitriev	movdqu	48(%esi),%xmm5
149510710Sddmitriev	pxor	16(%esp),%xmm3
149610710Sddmitriev	movdqu	64(%esi),%xmm6
149710710Sddmitriev	pxor	32(%esp),%xmm4
149810710Sddmitriev	leal	80(%esi),%esi
149910710Sddmitriev	pxor	48(%esp),%xmm5
150010710Sddmitriev	movdqa	%xmm7,64(%esp)
150110710Sddmitriev	pxor	%xmm7,%xmm6
150210710Sddmitriev	call	_aesni_decrypt6
150310710Sddmitriev	movaps	64(%esp),%xmm1
150410710Sddmitriev	xorps	(%esp),%xmm2
150510710Sddmitriev	xorps	16(%esp),%xmm3
150610710Sddmitriev	xorps	32(%esp),%xmm4
150710710Sddmitriev	movups	%xmm2,(%edi)
150810710Sddmitriev	xorps	48(%esp),%xmm5
150910710Sddmitriev	movups	%xmm3,16(%edi)
151010710Sddmitriev	xorps	%xmm1,%xmm6
151110710Sddmitriev	movups	%xmm4,32(%edi)
151210710Sddmitriev	movups	%xmm5,48(%edi)
151310710Sddmitriev	movups	%xmm6,64(%edi)
151410710Sddmitriev	leal	80(%edi),%edi
151510710Sddmitriev	jmp	.L063xts_dec_done
151610710Sddmitriev.align	16
151710710Sddmitriev.L059xts_dec_one:
151810710Sddmitriev	movups	(%esi),%xmm2
151910710Sddmitriev	leal	16(%esi),%esi
152010710Sddmitriev	xorps	%xmm5,%xmm2
152110710Sddmitriev	movups	(%edx),%xmm0
152210710Sddmitriev	movups	16(%edx),%xmm1
152310710Sddmitriev	leal	32(%edx),%edx
152410710Sddmitriev	xorps	%xmm0,%xmm2
152510710Sddmitriev.L064dec1_loop_12:
152610710Sddmitriev.byte	102,15,56,222,209
152710710Sddmitriev	decl	%ecx
152810710Sddmitriev	movups	(%edx),%xmm1
152910710Sddmitriev	leal	16(%edx),%edx
153010710Sddmitriev	jnz	.L064dec1_loop_12
153110710Sddmitriev.byte	102,15,56,223,209
153210710Sddmitriev	xorps	%xmm5,%xmm2
153310710Sddmitriev	movups	%xmm2,(%edi)
153410710Sddmitriev	leal	16(%edi),%edi
153510710Sddmitriev	movdqa	%xmm5,%xmm1
153610710Sddmitriev	jmp	.L063xts_dec_done
153710710Sddmitriev.align	16
153810710Sddmitriev.L060xts_dec_two:
153910710Sddmitriev	movaps	%xmm1,%xmm6
154010710Sddmitriev	movups	(%esi),%xmm2
154110710Sddmitriev	movups	16(%esi),%xmm3
154210710Sddmitriev	leal	32(%esi),%esi
154310710Sddmitriev	xorps	%xmm5,%xmm2
154410710Sddmitriev	xorps	%xmm6,%xmm3
154510710Sddmitriev	call	_aesni_decrypt3
154610710Sddmitriev	xorps	%xmm5,%xmm2
154710710Sddmitriev	xorps	%xmm6,%xmm3
154810710Sddmitriev	movups	%xmm2,(%edi)
154910710Sddmitriev	movups	%xmm3,16(%edi)
155010710Sddmitriev	leal	32(%edi),%edi
155110710Sddmitriev	movdqa	%xmm6,%xmm1
155210710Sddmitriev	jmp	.L063xts_dec_done
155310710Sddmitriev.align	16
155410710Sddmitriev.L061xts_dec_three:
155510710Sddmitriev	movaps	%xmm1,%xmm7
155610710Sddmitriev	movups	(%esi),%xmm2
155710710Sddmitriev	movups	16(%esi),%xmm3
155810710Sddmitriev	movups	32(%esi),%xmm4
155910710Sddmitriev	leal	48(%esi),%esi
156010710Sddmitriev	xorps	%xmm5,%xmm2
156110710Sddmitriev	xorps	%xmm6,%xmm3
156210710Sddmitriev	xorps	%xmm7,%xmm4
156310710Sddmitriev	call	_aesni_decrypt3
156410710Sddmitriev	xorps	%xmm5,%xmm2
156510710Sddmitriev	xorps	%xmm6,%xmm3
156610710Sddmitriev	xorps	%xmm7,%xmm4
156710710Sddmitriev	movups	%xmm2,(%edi)
156810710Sddmitriev	movups	%xmm3,16(%edi)
156910710Sddmitriev	movups	%xmm4,32(%edi)
157010710Sddmitriev	leal	48(%edi),%edi
157110710Sddmitriev	movdqa	%xmm7,%xmm1
157210710Sddmitriev	jmp	.L063xts_dec_done
157310710Sddmitriev.align	16
157410710Sddmitriev.L062xts_dec_four:
157510710Sddmitriev	movaps	%xmm1,%xmm6
157610710Sddmitriev	movups	(%esi),%xmm2
157710710Sddmitriev	movups	16(%esi),%xmm3
157810710Sddmitriev	movups	32(%esi),%xmm4
157910710Sddmitriev	xorps	(%esp),%xmm2
158010710Sddmitriev	movups	48(%esi),%xmm5
158110710Sddmitriev	leal	64(%esi),%esi
158210710Sddmitriev	xorps	16(%esp),%xmm3
158310710Sddmitriev	xorps	%xmm7,%xmm4
158410710Sddmitriev	xorps	%xmm6,%xmm5
158510710Sddmitriev	call	_aesni_decrypt4
158610710Sddmitriev	xorps	(%esp),%xmm2
158710710Sddmitriev	xorps	16(%esp),%xmm3
158810710Sddmitriev	xorps	%xmm7,%xmm4
158910710Sddmitriev	movups	%xmm2,(%edi)
159010710Sddmitriev	xorps	%xmm6,%xmm5
159110710Sddmitriev	movups	%xmm3,16(%edi)
159210710Sddmitriev	movups	%xmm4,32(%edi)
159310710Sddmitriev	movups	%xmm5,48(%edi)
159410710Sddmitriev	leal	64(%edi),%edi
159510710Sddmitriev	movdqa	%xmm6,%xmm1
159610710Sddmitriev	jmp	.L063xts_dec_done
159710710Sddmitriev.align	16
159810710Sddmitriev.L058xts_dec_done6x:
159910710Sddmitriev	movl	112(%esp),%eax
160010710Sddmitriev	andl	$15,%eax
160110710Sddmitriev	jz	.L065xts_dec_ret
160210710Sddmitriev	movl	%eax,112(%esp)
160310710Sddmitriev	jmp	.L066xts_dec_only_one_more
160410710Sddmitriev.align	16
160510710Sddmitriev.L063xts_dec_done:
160610710Sddmitriev	movl	112(%esp),%eax
160710710Sddmitriev	pxor	%xmm0,%xmm0
160810710Sddmitriev	andl	$15,%eax
160910710Sddmitriev	jz	.L065xts_dec_ret
161010710Sddmitriev	pcmpgtd	%xmm1,%xmm0
161110710Sddmitriev	movl	%eax,112(%esp)
161210710Sddmitriev	pshufd	$19,%xmm0,%xmm2
161310710Sddmitriev	pxor	%xmm0,%xmm0
161410710Sddmitriev	movdqa	96(%esp),%xmm3
161510710Sddmitriev	paddq	%xmm1,%xmm1
161610710Sddmitriev	pand	%xmm3,%xmm2
161710710Sddmitriev	pcmpgtd	%xmm1,%xmm0
161810710Sddmitriev	pxor	%xmm2,%xmm1
161910710Sddmitriev.L066xts_dec_only_one_more:
162010710Sddmitriev	pshufd	$19,%xmm0,%xmm5
162110710Sddmitriev	movdqa	%xmm1,%xmm6
162210710Sddmitriev	paddq	%xmm1,%xmm1
162310710Sddmitriev	pand	%xmm3,%xmm5
162410710Sddmitriev	pxor	%xmm1,%xmm5
162510710Sddmitriev	movl	%ebp,%edx
162610710Sddmitriev	movl	%ebx,%ecx
162710710Sddmitriev	movups	(%esi),%xmm2
162810710Sddmitriev	xorps	%xmm5,%xmm2
162910710Sddmitriev	movups	(%edx),%xmm0
163010710Sddmitriev	movups	16(%edx),%xmm1
163110710Sddmitriev	leal	32(%edx),%edx
163210710Sddmitriev	xorps	%xmm0,%xmm2
163310710Sddmitriev.L067dec1_loop_13:
163410710Sddmitriev.byte	102,15,56,222,209
163510710Sddmitriev	decl	%ecx
163610710Sddmitriev	movups	(%edx),%xmm1
163710710Sddmitriev	leal	16(%edx),%edx
163810710Sddmitriev	jnz	.L067dec1_loop_13
163910710Sddmitriev.byte	102,15,56,223,209
164010710Sddmitriev	xorps	%xmm5,%xmm2
164110710Sddmitriev	movups	%xmm2,(%edi)
164210710Sddmitriev.L068xts_dec_steal:
164310710Sddmitriev	movzbl	16(%esi),%ecx
164410710Sddmitriev	movzbl	(%edi),%edx
164510710Sddmitriev	leal	1(%esi),%esi
164610710Sddmitriev	movb	%cl,(%edi)
164710710Sddmitriev	movb	%dl,16(%edi)
164810710Sddmitriev	leal	1(%edi),%edi
164910710Sddmitriev	subl	$1,%eax
165010710Sddmitriev	jnz	.L068xts_dec_steal
165110710Sddmitriev	subl	112(%esp),%edi
165210710Sddmitriev	movl	%ebp,%edx
165310710Sddmitriev	movl	%ebx,%ecx
165410710Sddmitriev	movups	(%edi),%xmm2
165510710Sddmitriev	xorps	%xmm6,%xmm2
165610710Sddmitriev	movups	(%edx),%xmm0
165710710Sddmitriev	movups	16(%edx),%xmm1
165810710Sddmitriev	leal	32(%edx),%edx
165910710Sddmitriev	xorps	%xmm0,%xmm2
166010710Sddmitriev.L069dec1_loop_14:
166110710Sddmitriev.byte	102,15,56,222,209
166210710Sddmitriev	decl	%ecx
166310710Sddmitriev	movups	(%edx),%xmm1
166410710Sddmitriev	leal	16(%edx),%edx
166510710Sddmitriev	jnz	.L069dec1_loop_14
166610710Sddmitriev.byte	102,15,56,223,209
166710710Sddmitriev	xorps	%xmm6,%xmm2
166810710Sddmitriev	movups	%xmm2,(%edi)
166910710Sddmitriev.L065xts_dec_ret:
167010710Sddmitriev	movl	116(%esp),%esp
167110710Sddmitriev	popl	%edi
167210710Sddmitriev	popl	%esi
167310710Sddmitriev	popl	%ebx
167410710Sddmitriev	popl	%ebp
167510710Sddmitriev	ret
167610710Sddmitriev.size	aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin
167710710Sddmitriev.globl	aesni_cbc_encrypt
167810710Sddmitriev.type	aesni_cbc_encrypt,@function
167910710Sddmitriev.align	16
168010710Sddmitrievaesni_cbc_encrypt:
168110710Sddmitriev.L_aesni_cbc_encrypt_begin:
168210710Sddmitriev	pushl	%ebp
168310710Sddmitriev	pushl	%ebx
168410710Sddmitriev	pushl	%esi
168510710Sddmitriev	pushl	%edi
168610710Sddmitriev	movl	20(%esp),%esi
168710710Sddmitriev	movl	%esp,%ebx
168810710Sddmitriev	movl	24(%esp),%edi
168910710Sddmitriev	subl	$24,%ebx
169010710Sddmitriev	movl	28(%esp),%eax
169110710Sddmitriev	andl	$-16,%ebx
169210710Sddmitriev	movl	32(%esp),%edx
169310710Sddmitriev	movl	36(%esp),%ebp
169410710Sddmitriev	testl	%eax,%eax
169510710Sddmitriev	jz	.L070cbc_abort
169610710Sddmitriev	cmpl	$0,40(%esp)
169710710Sddmitriev	xchgl	%esp,%ebx
169810710Sddmitriev	movups	(%ebp),%xmm7
169910710Sddmitriev	movl	240(%edx),%ecx
170010710Sddmitriev	movl	%edx,%ebp
170110710Sddmitriev	movl	%ebx,16(%esp)
170210710Sddmitriev	movl	%ecx,%ebx
170310710Sddmitriev	je	.L071cbc_decrypt
170410710Sddmitriev	movaps	%xmm7,%xmm2
170510710Sddmitriev	cmpl	$16,%eax
170610710Sddmitriev	jb	.L072cbc_enc_tail
170710710Sddmitriev	subl	$16,%eax
170810710Sddmitriev	jmp	.L073cbc_enc_loop
170910710Sddmitriev.align	16
171010710Sddmitriev.L073cbc_enc_loop:
171110710Sddmitriev	movups	(%esi),%xmm7
171210710Sddmitriev	leal	16(%esi),%esi
171310710Sddmitriev	movups	(%edx),%xmm0
171410710Sddmitriev	movups	16(%edx),%xmm1
171510710Sddmitriev	xorps	%xmm0,%xmm7
171610710Sddmitriev	leal	32(%edx),%edx
171710710Sddmitriev	xorps	%xmm7,%xmm2
171810710Sddmitriev.L074enc1_loop_15:
171910710Sddmitriev.byte	102,15,56,220,209
172010710Sddmitriev	decl	%ecx
172110710Sddmitriev	movups	(%edx),%xmm1
172210710Sddmitriev	leal	16(%edx),%edx
172310710Sddmitriev	jnz	.L074enc1_loop_15
172410710Sddmitriev.byte	102,15,56,221,209
172510710Sddmitriev	movl	%ebx,%ecx
172610710Sddmitriev	movl	%ebp,%edx
172710710Sddmitriev	movups	%xmm2,(%edi)
172810710Sddmitriev	leal	16(%edi),%edi
172910710Sddmitriev	subl	$16,%eax
173010710Sddmitriev	jnc	.L073cbc_enc_loop
173110710Sddmitriev	addl	$16,%eax
173210710Sddmitriev	jnz	.L072cbc_enc_tail
173310710Sddmitriev	movaps	%xmm2,%xmm7
173410710Sddmitriev	jmp	.L075cbc_ret
173510710Sddmitriev.L072cbc_enc_tail:
173610710Sddmitriev	movl	%eax,%ecx
173710710Sddmitriev.long	2767451785
173810710Sddmitriev	movl	$16,%ecx
173910710Sddmitriev	subl	%eax,%ecx
174010710Sddmitriev	xorl	%eax,%eax
174110710Sddmitriev.long	2868115081
174210710Sddmitriev	leal	-16(%edi),%edi
174310710Sddmitriev	movl	%ebx,%ecx
174410710Sddmitriev	movl	%edi,%esi
174510710Sddmitriev	movl	%ebp,%edx
174610710Sddmitriev	jmp	.L073cbc_enc_loop
174710710Sddmitriev.align	16
174810710Sddmitriev.L071cbc_decrypt:
174910710Sddmitriev	cmpl	$80,%eax
175010710Sddmitriev	jbe	.L076cbc_dec_tail
175110710Sddmitriev	movaps	%xmm7,(%esp)
175210710Sddmitriev	subl	$80,%eax
175310710Sddmitriev	jmp	.L077cbc_dec_loop6_enter
175410710Sddmitriev.align	16
175510710Sddmitriev.L078cbc_dec_loop6:
175610710Sddmitriev	movaps	%xmm0,(%esp)
175710710Sddmitriev	movups	%xmm7,(%edi)
175810710Sddmitriev	leal	16(%edi),%edi
175910710Sddmitriev.L077cbc_dec_loop6_enter:
176010710Sddmitriev	movdqu	(%esi),%xmm2
176110710Sddmitriev	movdqu	16(%esi),%xmm3
176210710Sddmitriev	movdqu	32(%esi),%xmm4
176310710Sddmitriev	movdqu	48(%esi),%xmm5
176410710Sddmitriev	movdqu	64(%esi),%xmm6
176510710Sddmitriev	movdqu	80(%esi),%xmm7
176610710Sddmitriev	call	_aesni_decrypt6
176710710Sddmitriev	movups	(%esi),%xmm1
176810710Sddmitriev	movups	16(%esi),%xmm0
176910710Sddmitriev	xorps	(%esp),%xmm2
177010710Sddmitriev	xorps	%xmm1,%xmm3
177110710Sddmitriev	movups	32(%esi),%xmm1
177210710Sddmitriev	xorps	%xmm0,%xmm4
177310710Sddmitriev	movups	48(%esi),%xmm0
177410710Sddmitriev	xorps	%xmm1,%xmm5
177510710Sddmitriev	movups	64(%esi),%xmm1
177610710Sddmitriev	xorps	%xmm0,%xmm6
177710710Sddmitriev	movups	80(%esi),%xmm0
177810710Sddmitriev	xorps	%xmm1,%xmm7
177910710Sddmitriev	movups	%xmm2,(%edi)
178010710Sddmitriev	movups	%xmm3,16(%edi)
178110710Sddmitriev	leal	96(%esi),%esi
178210710Sddmitriev	movups	%xmm4,32(%edi)
178310710Sddmitriev	movl	%ebx,%ecx
178410710Sddmitriev	movups	%xmm5,48(%edi)
178510710Sddmitriev	movl	%ebp,%edx
178610710Sddmitriev	movups	%xmm6,64(%edi)
178710710Sddmitriev	leal	80(%edi),%edi
178810710Sddmitriev	subl	$96,%eax
178910710Sddmitriev	ja	.L078cbc_dec_loop6
179010710Sddmitriev	movaps	%xmm7,%xmm2
179110710Sddmitriev	movaps	%xmm0,%xmm7
179210710Sddmitriev	addl	$80,%eax
179310710Sddmitriev	jle	.L079cbc_dec_tail_collected
179410710Sddmitriev	movups	%xmm2,(%edi)
179510710Sddmitriev	leal	16(%edi),%edi
179610710Sddmitriev.L076cbc_dec_tail:
179710710Sddmitriev	movups	(%esi),%xmm2
179810710Sddmitriev	movaps	%xmm2,%xmm6
179910710Sddmitriev	cmpl	$16,%eax
180010710Sddmitriev	jbe	.L080cbc_dec_one
180110710Sddmitriev	movups	16(%esi),%xmm3
180210710Sddmitriev	movaps	%xmm3,%xmm5
180310710Sddmitriev	cmpl	$32,%eax
180410710Sddmitriev	jbe	.L081cbc_dec_two
180510710Sddmitriev	movups	32(%esi),%xmm4
180610710Sddmitriev	cmpl	$48,%eax
180710710Sddmitriev	jbe	.L082cbc_dec_three
180810710Sddmitriev	movups	48(%esi),%xmm5
180910710Sddmitriev	cmpl	$64,%eax
181010710Sddmitriev	jbe	.L083cbc_dec_four
181110710Sddmitriev	movups	64(%esi),%xmm6
181210710Sddmitriev	movaps	%xmm7,(%esp)
181310710Sddmitriev	movups	(%esi),%xmm2
181410710Sddmitriev	xorps	%xmm7,%xmm7
181510710Sddmitriev	call	_aesni_decrypt6
181610710Sddmitriev	movups	(%esi),%xmm1
181710710Sddmitriev	movups	16(%esi),%xmm0
181810710Sddmitriev	xorps	(%esp),%xmm2
181910710Sddmitriev	xorps	%xmm1,%xmm3
182010710Sddmitriev	movups	32(%esi),%xmm1
182110710Sddmitriev	xorps	%xmm0,%xmm4
182210710Sddmitriev	movups	48(%esi),%xmm0
182310710Sddmitriev	xorps	%xmm1,%xmm5
182410710Sddmitriev	movups	64(%esi),%xmm7
182510710Sddmitriev	xorps	%xmm0,%xmm6
182610710Sddmitriev	movups	%xmm2,(%edi)
182710710Sddmitriev	movups	%xmm3,16(%edi)
182810710Sddmitriev	movups	%xmm4,32(%edi)
182910710Sddmitriev	movups	%xmm5,48(%edi)
183010710Sddmitriev	leal	64(%edi),%edi
183110710Sddmitriev	movaps	%xmm6,%xmm2
183210710Sddmitriev	subl	$80,%eax
183310710Sddmitriev	jmp	.L079cbc_dec_tail_collected
183410710Sddmitriev.align	16
183510710Sddmitriev.L080cbc_dec_one:
183610710Sddmitriev	movups	(%edx),%xmm0
183710710Sddmitriev	movups	16(%edx),%xmm1
183810710Sddmitriev	leal	32(%edx),%edx
183910710Sddmitriev	xorps	%xmm0,%xmm2
184010710Sddmitriev.L084dec1_loop_16:
184110710Sddmitriev.byte	102,15,56,222,209
184210710Sddmitriev	decl	%ecx
184310710Sddmitriev	movups	(%edx),%xmm1
184410710Sddmitriev	leal	16(%edx),%edx
184510710Sddmitriev	jnz	.L084dec1_loop_16
184610710Sddmitriev.byte	102,15,56,223,209
184710710Sddmitriev	xorps	%xmm7,%xmm2
184810710Sddmitriev	movaps	%xmm6,%xmm7
184910710Sddmitriev	subl	$16,%eax
185010710Sddmitriev	jmp	.L079cbc_dec_tail_collected
185110710Sddmitriev.align	16
185210710Sddmitriev.L081cbc_dec_two:
185310710Sddmitriev	xorps	%xmm4,%xmm4
185410710Sddmitriev	call	_aesni_decrypt3
185510710Sddmitriev	xorps	%xmm7,%xmm2
185610710Sddmitriev	xorps	%xmm6,%xmm3
185710710Sddmitriev	movups	%xmm2,(%edi)
185810710Sddmitriev	movaps	%xmm3,%xmm2
185910710Sddmitriev	leal	16(%edi),%edi
186010710Sddmitriev	movaps	%xmm5,%xmm7
186110710Sddmitriev	subl	$32,%eax
186210710Sddmitriev	jmp	.L079cbc_dec_tail_collected
186310710Sddmitriev.align	16
186410710Sddmitriev.L082cbc_dec_three:
186510710Sddmitriev	call	_aesni_decrypt3
186610710Sddmitriev	xorps	%xmm7,%xmm2
186710710Sddmitriev	xorps	%xmm6,%xmm3
186810710Sddmitriev	xorps	%xmm5,%xmm4
186910710Sddmitriev	movups	%xmm2,(%edi)
187010710Sddmitriev	movaps	%xmm4,%xmm2
187110710Sddmitriev	movups	%xmm3,16(%edi)
187210710Sddmitriev	leal	32(%edi),%edi
187310710Sddmitriev	movups	32(%esi),%xmm7
187410710Sddmitriev	subl	$48,%eax
187510710Sddmitriev	jmp	.L079cbc_dec_tail_collected
187610710Sddmitriev.align	16
187710710Sddmitriev.L083cbc_dec_four:
187810710Sddmitriev	call	_aesni_decrypt4
187910710Sddmitriev	movups	16(%esi),%xmm1
188010710Sddmitriev	movups	32(%esi),%xmm0
188110710Sddmitriev	xorps	%xmm7,%xmm2
188210710Sddmitriev	movups	48(%esi),%xmm7
188310710Sddmitriev	xorps	%xmm6,%xmm3
188410710Sddmitriev	movups	%xmm2,(%edi)
188510710Sddmitriev	xorps	%xmm1,%xmm4
188610710Sddmitriev	movups	%xmm3,16(%edi)
188710710Sddmitriev	xorps	%xmm0,%xmm5
188810710Sddmitriev	movups	%xmm4,32(%edi)
188910710Sddmitriev	leal	48(%edi),%edi
189010710Sddmitriev	movaps	%xmm5,%xmm2
189110710Sddmitriev	subl	$64,%eax
189210710Sddmitriev.L079cbc_dec_tail_collected:
189310710Sddmitriev	andl	$15,%eax
189410710Sddmitriev	jnz	.L085cbc_dec_tail_partial
189510710Sddmitriev	movups	%xmm2,(%edi)
189610710Sddmitriev	jmp	.L075cbc_ret
189710710Sddmitriev.align	16
189810710Sddmitriev.L085cbc_dec_tail_partial:
189910710Sddmitriev	movaps	%xmm2,(%esp)
190010710Sddmitriev	movl	$16,%ecx
190110710Sddmitriev	movl	%esp,%esi
190210710Sddmitriev	subl	%eax,%ecx
190310710Sddmitriev.long	2767451785
190410710Sddmitriev.L075cbc_ret:
190510710Sddmitriev	movl	16(%esp),%esp
190610710Sddmitriev	movl	36(%esp),%ebp
190710710Sddmitriev	movups	%xmm7,(%ebp)
190810710Sddmitriev.L070cbc_abort:
190910710Sddmitriev	popl	%edi
191010710Sddmitriev	popl	%esi
191110710Sddmitriev	popl	%ebx
191210710Sddmitriev	popl	%ebp
191310710Sddmitriev	ret
191410710Sddmitriev.size	aesni_cbc_encrypt,.-.L_aesni_cbc_encrypt_begin
191510710Sddmitriev.type	_aesni_set_encrypt_key,@function
191610710Sddmitriev.align	16
191710710Sddmitriev_aesni_set_encrypt_key:
191810710Sddmitriev	testl	%eax,%eax
191910710Sddmitriev	jz	.L086bad_pointer
192010710Sddmitriev	testl	%edx,%edx
192110710Sddmitriev	jz	.L086bad_pointer
192210710Sddmitriev	movups	(%eax),%xmm0
192310710Sddmitriev	xorps	%xmm4,%xmm4
192410710Sddmitriev	leal	16(%edx),%edx
192510710Sddmitriev	cmpl	$256,%ecx
192610710Sddmitriev	je	.L08714rounds
192710710Sddmitriev	cmpl	$192,%ecx
192810710Sddmitriev	je	.L08812rounds
192910710Sddmitriev	cmpl	$128,%ecx
193010710Sddmitriev	jne	.L089bad_keybits
193110710Sddmitriev.align	16
193210710Sddmitriev.L09010rounds:
193310710Sddmitriev	movl	$9,%ecx
193410710Sddmitriev	movups	%xmm0,-16(%edx)
193510710Sddmitriev.byte	102,15,58,223,200,1
193610710Sddmitriev	call	.L091key_128_cold
193710710Sddmitriev.byte	102,15,58,223,200,2
193810710Sddmitriev	call	.L092key_128
193910710Sddmitriev.byte	102,15,58,223,200,4
194010710Sddmitriev	call	.L092key_128
194110710Sddmitriev.byte	102,15,58,223,200,8
194210710Sddmitriev	call	.L092key_128
194310710Sddmitriev.byte	102,15,58,223,200,16
194410710Sddmitriev	call	.L092key_128
194510710Sddmitriev.byte	102,15,58,223,200,32
194610710Sddmitriev	call	.L092key_128
194710710Sddmitriev.byte	102,15,58,223,200,64
194810710Sddmitriev	call	.L092key_128
194910710Sddmitriev.byte	102,15,58,223,200,128
195010710Sddmitriev	call	.L092key_128
195110710Sddmitriev.byte	102,15,58,223,200,27
195210710Sddmitriev	call	.L092key_128
195310710Sddmitriev.byte	102,15,58,223,200,54
195410710Sddmitriev	call	.L092key_128
195510710Sddmitriev	movups	%xmm0,(%edx)
195610710Sddmitriev	movl	%ecx,80(%edx)
195710710Sddmitriev	xorl	%eax,%eax
195810710Sddmitriev	ret
195910710Sddmitriev.align	16
196010710Sddmitriev.L092key_128:
196110710Sddmitriev	movups	%xmm0,(%edx)
196210710Sddmitriev	leal	16(%edx),%edx
196310710Sddmitriev.L091key_128_cold:
196410710Sddmitriev	shufps	$16,%xmm0,%xmm4
196510710Sddmitriev	xorps	%xmm4,%xmm0
196610710Sddmitriev	shufps	$140,%xmm0,%xmm4
196710710Sddmitriev	xorps	%xmm4,%xmm0
196810710Sddmitriev	shufps	$255,%xmm1,%xmm1
196910710Sddmitriev	xorps	%xmm1,%xmm0
197010710Sddmitriev	ret
197110710Sddmitriev.align	16
197210710Sddmitriev.L08812rounds:
197310710Sddmitriev	movq	16(%eax),%xmm2
197410710Sddmitriev	movl	$11,%ecx
197510710Sddmitriev	movups	%xmm0,-16(%edx)
197610710Sddmitriev.byte	102,15,58,223,202,1
197710710Sddmitriev	call	.L093key_192a_cold
197810710Sddmitriev.byte	102,15,58,223,202,2
197910710Sddmitriev	call	.L094key_192b
198010710Sddmitriev.byte	102,15,58,223,202,4
198110710Sddmitriev	call	.L095key_192a
198210710Sddmitriev.byte	102,15,58,223,202,8
198310710Sddmitriev	call	.L094key_192b
198410710Sddmitriev.byte	102,15,58,223,202,16
198510710Sddmitriev	call	.L095key_192a
198610710Sddmitriev.byte	102,15,58,223,202,32
198710710Sddmitriev	call	.L094key_192b
198810710Sddmitriev.byte	102,15,58,223,202,64
198910710Sddmitriev	call	.L095key_192a
199010710Sddmitriev.byte	102,15,58,223,202,128
199110710Sddmitriev	call	.L094key_192b
199210710Sddmitriev	movups	%xmm0,(%edx)
199310710Sddmitriev	movl	%ecx,48(%edx)
199410710Sddmitriev	xorl	%eax,%eax
199510710Sddmitriev	ret
199610710Sddmitriev.align	16
199710710Sddmitriev.L095key_192a:
199810710Sddmitriev	movups	%xmm0,(%edx)
199910710Sddmitriev	leal	16(%edx),%edx
200010710Sddmitriev.align	16
200110710Sddmitriev.L093key_192a_cold:
200210710Sddmitriev	movaps	%xmm2,%xmm5
200310710Sddmitriev.L096key_192b_warm:
200410710Sddmitriev	shufps	$16,%xmm0,%xmm4
200510710Sddmitriev	movdqa	%xmm2,%xmm3
200610710Sddmitriev	xorps	%xmm4,%xmm0
200710710Sddmitriev	shufps	$140,%xmm0,%xmm4
200810710Sddmitriev	pslldq	$4,%xmm3
200910710Sddmitriev	xorps	%xmm4,%xmm0
201010710Sddmitriev	pshufd	$85,%xmm1,%xmm1
201110710Sddmitriev	pxor	%xmm3,%xmm2
201210710Sddmitriev	pxor	%xmm1,%xmm0
201310710Sddmitriev	pshufd	$255,%xmm0,%xmm3
201410710Sddmitriev	pxor	%xmm3,%xmm2
201510710Sddmitriev	ret
201610710Sddmitriev.align	16
201710710Sddmitriev.L094key_192b:
201810710Sddmitriev	movaps	%xmm0,%xmm3
201910710Sddmitriev	shufps	$68,%xmm0,%xmm5
202010710Sddmitriev	movups	%xmm5,(%edx)
202110710Sddmitriev	shufps	$78,%xmm2,%xmm3
202210710Sddmitriev	movups	%xmm3,16(%edx)
202310710Sddmitriev	leal	32(%edx),%edx
202410710Sddmitriev	jmp	.L096key_192b_warm
202510710Sddmitriev.align	16
202610710Sddmitriev.L08714rounds:
202710710Sddmitriev	movups	16(%eax),%xmm2
202810710Sddmitriev	movl	$13,%ecx
202910710Sddmitriev	leal	16(%edx),%edx
203010710Sddmitriev	movups	%xmm0,-32(%edx)
203110710Sddmitriev	movups	%xmm2,-16(%edx)
203210710Sddmitriev.byte	102,15,58,223,202,1
203310710Sddmitriev	call	.L097key_256a_cold
203410710Sddmitriev.byte	102,15,58,223,200,1
203510710Sddmitriev	call	.L098key_256b
203610710Sddmitriev.byte	102,15,58,223,202,2
203710710Sddmitriev	call	.L099key_256a
203810710Sddmitriev.byte	102,15,58,223,200,2
203910710Sddmitriev	call	.L098key_256b
204010710Sddmitriev.byte	102,15,58,223,202,4
204110710Sddmitriev	call	.L099key_256a
204210710Sddmitriev.byte	102,15,58,223,200,4
204310710Sddmitriev	call	.L098key_256b
204410710Sddmitriev.byte	102,15,58,223,202,8
204510710Sddmitriev	call	.L099key_256a
204610710Sddmitriev.byte	102,15,58,223,200,8
204710710Sddmitriev	call	.L098key_256b
204810710Sddmitriev.byte	102,15,58,223,202,16
204910710Sddmitriev	call	.L099key_256a
205010710Sddmitriev.byte	102,15,58,223,200,16
205110710Sddmitriev	call	.L098key_256b
205210710Sddmitriev.byte	102,15,58,223,202,32
205310710Sddmitriev	call	.L099key_256a
205410710Sddmitriev.byte	102,15,58,223,200,32
205510710Sddmitriev	call	.L098key_256b
205610710Sddmitriev.byte	102,15,58,223,202,64
205710710Sddmitriev	call	.L099key_256a
205810710Sddmitriev	movups	%xmm0,(%edx)
205910710Sddmitriev	movl	%ecx,16(%edx)
206010710Sddmitriev	xorl	%eax,%eax
206110710Sddmitriev	ret
206210710Sddmitriev.align	16
206310710Sddmitriev.L099key_256a:
206410710Sddmitriev	movups	%xmm2,(%edx)
206510710Sddmitriev	leal	16(%edx),%edx
206610710Sddmitriev.L097key_256a_cold:
206710710Sddmitriev	shufps	$16,%xmm0,%xmm4
206810710Sddmitriev	xorps	%xmm4,%xmm0
206910710Sddmitriev	shufps	$140,%xmm0,%xmm4
207010710Sddmitriev	xorps	%xmm4,%xmm0
207110710Sddmitriev	shufps	$255,%xmm1,%xmm1
207210710Sddmitriev	xorps	%xmm1,%xmm0
207310710Sddmitriev	ret
207410710Sddmitriev.align	16
207510710Sddmitriev.L098key_256b:
207610710Sddmitriev	movups	%xmm0,(%edx)
207710710Sddmitriev	leal	16(%edx),%edx
207810710Sddmitriev	shufps	$16,%xmm2,%xmm4
207910710Sddmitriev	xorps	%xmm4,%xmm2
208010710Sddmitriev	shufps	$140,%xmm2,%xmm4
208110710Sddmitriev	xorps	%xmm4,%xmm2
208210710Sddmitriev	shufps	$170,%xmm1,%xmm1
208310710Sddmitriev	xorps	%xmm1,%xmm2
208410710Sddmitriev	ret
208510710Sddmitriev.align	4
208610710Sddmitriev.L086bad_pointer:
208710710Sddmitriev	movl	$-1,%eax
208810710Sddmitriev	ret
208910710Sddmitriev.align	4
209010710Sddmitriev.L089bad_keybits:
209110710Sddmitriev	movl	$-2,%eax
209210710Sddmitriev	ret
209310710Sddmitriev.size	_aesni_set_encrypt_key,.-_aesni_set_encrypt_key
209410710Sddmitriev.globl	aesni_set_encrypt_key
209510710Sddmitriev.type	aesni_set_encrypt_key,@function
209610710Sddmitriev.align	16
209710710Sddmitrievaesni_set_encrypt_key:
209810710Sddmitriev.L_aesni_set_encrypt_key_begin:
209910710Sddmitriev	movl	4(%esp),%eax
210010710Sddmitriev	movl	8(%esp),%ecx
210110710Sddmitriev	movl	12(%esp),%edx
210210710Sddmitriev	call	_aesni_set_encrypt_key
210310710Sddmitriev	ret
210410710Sddmitriev.size	aesni_set_encrypt_key,.-.L_aesni_set_encrypt_key_begin
210510710Sddmitriev.globl	aesni_set_decrypt_key
210610710Sddmitriev.type	aesni_set_decrypt_key,@function
210710710Sddmitriev.align	16
210810710Sddmitrievaesni_set_decrypt_key:
210910710Sddmitriev.L_aesni_set_decrypt_key_begin:
211010710Sddmitriev	movl	4(%esp),%eax
211110710Sddmitriev	movl	8(%esp),%ecx
211210710Sddmitriev	movl	12(%esp),%edx
211310710Sddmitriev	call	_aesni_set_encrypt_key
211410710Sddmitriev	movl	12(%esp),%edx
211510710Sddmitriev	shll	$4,%ecx
211610710Sddmitriev	testl	%eax,%eax
211710710Sddmitriev	jnz	.L100dec_key_ret
211810710Sddmitriev	leal	16(%edx,%ecx,1),%eax
211910710Sddmitriev	movups	(%edx),%xmm0
212010710Sddmitriev	movups	(%eax),%xmm1
212110710Sddmitriev	movups	%xmm0,(%eax)
212210710Sddmitriev	movups	%xmm1,(%edx)
212310710Sddmitriev	leal	16(%edx),%edx
212410710Sddmitriev	leal	-16(%eax),%eax
212510710Sddmitriev.L101dec_key_inverse:
212610710Sddmitriev	movups	(%edx),%xmm0
212710710Sddmitriev	movups	(%eax),%xmm1
212810710Sddmitriev.byte	102,15,56,219,192
212910710Sddmitriev.byte	102,15,56,219,201
213010710Sddmitriev	leal	16(%edx),%edx
213110710Sddmitriev	leal	-16(%eax),%eax
213210710Sddmitriev	movups	%xmm0,16(%eax)
213310710Sddmitriev	movups	%xmm1,-16(%edx)
213410710Sddmitriev	cmpl	%edx,%eax
213510710Sddmitriev	ja	.L101dec_key_inverse
213610710Sddmitriev	movups	(%edx),%xmm0
213710710Sddmitriev.byte	102,15,56,219,192
213810710Sddmitriev	movups	%xmm0,(%edx)
213910710Sddmitriev	xorl	%eax,%eax
214010710Sddmitriev.L100dec_key_ret:
214110710Sddmitriev	ret
214210710Sddmitriev.size	aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin
214310710Sddmitriev.byte	65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
214410710Sddmitriev.byte	83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
214510710Sddmitriev.byte	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
214610710Sddmitriev.byte	115,108,46,111,114,103,62,0
214710710Sddmitriev#else
214810710Sddmitriev.file	"aesni-x86.S"
214910710Sddmitriev.text
215010710Sddmitriev.globl	aesni_encrypt
215110710Sddmitriev.type	aesni_encrypt,@function
215210710Sddmitriev.align	16
215310710Sddmitrievaesni_encrypt:
215410710Sddmitriev.L_aesni_encrypt_begin:
215510710Sddmitriev	movl	4(%esp),%eax
215610710Sddmitriev	movl	12(%esp),%edx
215710710Sddmitriev	movups	(%eax),%xmm2
215810710Sddmitriev	movl	240(%edx),%ecx
215910710Sddmitriev	movl	8(%esp),%eax
216010710Sddmitriev	movups	(%edx),%xmm0
216110710Sddmitriev	movups	16(%edx),%xmm1
216210710Sddmitriev	leal	32(%edx),%edx
216310710Sddmitriev	xorps	%xmm0,%xmm2
216410710Sddmitriev.L000enc1_loop_1:
216510710Sddmitriev.byte	102,15,56,220,209
216610710Sddmitriev	decl	%ecx
216710710Sddmitriev	movups	(%edx),%xmm1
216810710Sddmitriev	leal	16(%edx),%edx
216910710Sddmitriev	jnz	.L000enc1_loop_1
217010710Sddmitriev.byte	102,15,56,221,209
217110710Sddmitriev	movups	%xmm2,(%eax)
217210710Sddmitriev	ret
217310710Sddmitriev.size	aesni_encrypt,.-.L_aesni_encrypt_begin
217410710Sddmitriev.globl	aesni_decrypt
217510710Sddmitriev.type	aesni_decrypt,@function
217610710Sddmitriev.align	16
217710710Sddmitrievaesni_decrypt:
217810710Sddmitriev.L_aesni_decrypt_begin:
217910710Sddmitriev	movl	4(%esp),%eax
218010710Sddmitriev	movl	12(%esp),%edx
218110710Sddmitriev	movups	(%eax),%xmm2
218210710Sddmitriev	movl	240(%edx),%ecx
218310710Sddmitriev	movl	8(%esp),%eax
218410710Sddmitriev	movups	(%edx),%xmm0
218510710Sddmitriev	movups	16(%edx),%xmm1
218610710Sddmitriev	leal	32(%edx),%edx
218710710Sddmitriev	xorps	%xmm0,%xmm2
218810710Sddmitriev.L001dec1_loop_2:
218910710Sddmitriev.byte	102,15,56,222,209
219010710Sddmitriev	decl	%ecx
219110710Sddmitriev	movups	(%edx),%xmm1
219210710Sddmitriev	leal	16(%edx),%edx
219310710Sddmitriev	jnz	.L001dec1_loop_2
219410710Sddmitriev.byte	102,15,56,223,209
219510710Sddmitriev	movups	%xmm2,(%eax)
219610710Sddmitriev	ret
219710710Sddmitriev.size	aesni_decrypt,.-.L_aesni_decrypt_begin
219810710Sddmitriev.type	_aesni_encrypt3,@function
219910710Sddmitriev.align	16
220010710Sddmitriev_aesni_encrypt3:
220110710Sddmitriev	movups	(%edx),%xmm0
220210710Sddmitriev	shrl	$1,%ecx
220310710Sddmitriev	movups	16(%edx),%xmm1
220410710Sddmitriev	leal	32(%edx),%edx
220510710Sddmitriev	xorps	%xmm0,%xmm2
220610710Sddmitriev	pxor	%xmm0,%xmm3
220710710Sddmitriev	pxor	%xmm0,%xmm4
220810710Sddmitriev	movups	(%edx),%xmm0
220910710Sddmitriev.L002enc3_loop:
221010710Sddmitriev.byte	102,15,56,220,209
221110710Sddmitriev.byte	102,15,56,220,217
221210710Sddmitriev	decl	%ecx
221310710Sddmitriev.byte	102,15,56,220,225
221410710Sddmitriev	movups	16(%edx),%xmm1
221510710Sddmitriev.byte	102,15,56,220,208
221610710Sddmitriev.byte	102,15,56,220,216
221710710Sddmitriev	leal	32(%edx),%edx
221810710Sddmitriev.byte	102,15,56,220,224
221910710Sddmitriev	movups	(%edx),%xmm0
222010710Sddmitriev	jnz	.L002enc3_loop
222110710Sddmitriev.byte	102,15,56,220,209
222210710Sddmitriev.byte	102,15,56,220,217
222310710Sddmitriev.byte	102,15,56,220,225
222410710Sddmitriev.byte	102,15,56,221,208
222510710Sddmitriev.byte	102,15,56,221,216
222610710Sddmitriev.byte	102,15,56,221,224
222710710Sddmitriev	ret
222810710Sddmitriev.size	_aesni_encrypt3,.-_aesni_encrypt3
222910710Sddmitriev.type	_aesni_decrypt3,@function
223010710Sddmitriev.align	16
223110710Sddmitriev_aesni_decrypt3:
223210710Sddmitriev	movups	(%edx),%xmm0
223310710Sddmitriev	shrl	$1,%ecx
223410710Sddmitriev	movups	16(%edx),%xmm1
223510710Sddmitriev	leal	32(%edx),%edx
223610710Sddmitriev	xorps	%xmm0,%xmm2
223710710Sddmitriev	pxor	%xmm0,%xmm3
223810710Sddmitriev	pxor	%xmm0,%xmm4
223910710Sddmitriev	movups	(%edx),%xmm0
224010710Sddmitriev.L003dec3_loop:
224110710Sddmitriev.byte	102,15,56,222,209
224210710Sddmitriev.byte	102,15,56,222,217
224310710Sddmitriev	decl	%ecx
224410710Sddmitriev.byte	102,15,56,222,225
224510710Sddmitriev	movups	16(%edx),%xmm1
224610710Sddmitriev.byte	102,15,56,222,208
224710710Sddmitriev.byte	102,15,56,222,216
224810710Sddmitriev	leal	32(%edx),%edx
224910710Sddmitriev.byte	102,15,56,222,224
225010710Sddmitriev	movups	(%edx),%xmm0
225110710Sddmitriev	jnz	.L003dec3_loop
225210710Sddmitriev.byte	102,15,56,222,209
225310710Sddmitriev.byte	102,15,56,222,217
225410710Sddmitriev.byte	102,15,56,222,225
225510710Sddmitriev.byte	102,15,56,223,208
225610710Sddmitriev.byte	102,15,56,223,216
225710710Sddmitriev.byte	102,15,56,223,224
225810710Sddmitriev	ret
225910710Sddmitriev.size	_aesni_decrypt3,.-_aesni_decrypt3
226010710Sddmitriev.type	_aesni_encrypt4,@function
226110710Sddmitriev.align	16
226210710Sddmitriev_aesni_encrypt4:
226310710Sddmitriev	movups	(%edx),%xmm0
226410710Sddmitriev	movups	16(%edx),%xmm1
226510710Sddmitriev	shrl	$1,%ecx
226610710Sddmitriev	leal	32(%edx),%edx
226710710Sddmitriev	xorps	%xmm0,%xmm2
226810710Sddmitriev	pxor	%xmm0,%xmm3
226910710Sddmitriev	pxor	%xmm0,%xmm4
227010710Sddmitriev	pxor	%xmm0,%xmm5
227110710Sddmitriev	movups	(%edx),%xmm0
227210710Sddmitriev.L004enc4_loop:
227310710Sddmitriev.byte	102,15,56,220,209
227410710Sddmitriev.byte	102,15,56,220,217
227510710Sddmitriev	decl	%ecx
227610710Sddmitriev.byte	102,15,56,220,225
227710710Sddmitriev.byte	102,15,56,220,233
227810710Sddmitriev	movups	16(%edx),%xmm1
227910710Sddmitriev.byte	102,15,56,220,208
228010710Sddmitriev.byte	102,15,56,220,216
228110710Sddmitriev	leal	32(%edx),%edx
228210710Sddmitriev.byte	102,15,56,220,224
228310710Sddmitriev.byte	102,15,56,220,232
228410710Sddmitriev	movups	(%edx),%xmm0
228510710Sddmitriev	jnz	.L004enc4_loop
228610710Sddmitriev.byte	102,15,56,220,209
228710710Sddmitriev.byte	102,15,56,220,217
228810710Sddmitriev.byte	102,15,56,220,225
228910710Sddmitriev.byte	102,15,56,220,233
229010710Sddmitriev.byte	102,15,56,221,208
229110710Sddmitriev.byte	102,15,56,221,216
229210710Sddmitriev.byte	102,15,56,221,224
229310710Sddmitriev.byte	102,15,56,221,232
229410710Sddmitriev	ret
229510710Sddmitriev.size	_aesni_encrypt4,.-_aesni_encrypt4
229610710Sddmitriev.type	_aesni_decrypt4,@function
229710710Sddmitriev.align	16
229810710Sddmitriev_aesni_decrypt4:
229910710Sddmitriev	movups	(%edx),%xmm0
230010710Sddmitriev	movups	16(%edx),%xmm1
230110710Sddmitriev	shrl	$1,%ecx
230210710Sddmitriev	leal	32(%edx),%edx
230310710Sddmitriev	xorps	%xmm0,%xmm2
230410710Sddmitriev	pxor	%xmm0,%xmm3
230510710Sddmitriev	pxor	%xmm0,%xmm4
230610710Sddmitriev	pxor	%xmm0,%xmm5
230710710Sddmitriev	movups	(%edx),%xmm0
230810710Sddmitriev.L005dec4_loop:
230910710Sddmitriev.byte	102,15,56,222,209
231010710Sddmitriev.byte	102,15,56,222,217
231110710Sddmitriev	decl	%ecx
231210710Sddmitriev.byte	102,15,56,222,225
231310710Sddmitriev.byte	102,15,56,222,233
231410710Sddmitriev	movups	16(%edx),%xmm1
231510710Sddmitriev.byte	102,15,56,222,208
231610710Sddmitriev.byte	102,15,56,222,216
231710710Sddmitriev	leal	32(%edx),%edx
231810710Sddmitriev.byte	102,15,56,222,224
231910710Sddmitriev.byte	102,15,56,222,232
232010710Sddmitriev	movups	(%edx),%xmm0
232110710Sddmitriev	jnz	.L005dec4_loop
232210710Sddmitriev.byte	102,15,56,222,209
232310710Sddmitriev.byte	102,15,56,222,217
232410710Sddmitriev.byte	102,15,56,222,225
232510710Sddmitriev.byte	102,15,56,222,233
232610710Sddmitriev.byte	102,15,56,223,208
232710710Sddmitriev.byte	102,15,56,223,216
232810710Sddmitriev.byte	102,15,56,223,224
232910710Sddmitriev.byte	102,15,56,223,232
233010710Sddmitriev	ret
233110710Sddmitriev.size	_aesni_decrypt4,.-_aesni_decrypt4
233210710Sddmitriev.type	_aesni_encrypt6,@function
233310710Sddmitriev.align	16
233410710Sddmitriev_aesni_encrypt6:
233510710Sddmitriev	movups	(%edx),%xmm0
233610710Sddmitriev	shrl	$1,%ecx
233710710Sddmitriev	movups	16(%edx),%xmm1
233810710Sddmitriev	leal	32(%edx),%edx
233910710Sddmitriev	xorps	%xmm0,%xmm2
234010710Sddmitriev	pxor	%xmm0,%xmm3
234110710Sddmitriev.byte	102,15,56,220,209
234210710Sddmitriev	pxor	%xmm0,%xmm4
234310710Sddmitriev.byte	102,15,56,220,217
234410710Sddmitriev	pxor	%xmm0,%xmm5
234510710Sddmitriev	decl	%ecx
234610710Sddmitriev.byte	102,15,56,220,225
234710710Sddmitriev	pxor	%xmm0,%xmm6
234810710Sddmitriev.byte	102,15,56,220,233
234910710Sddmitriev	pxor	%xmm0,%xmm7
235010710Sddmitriev.byte	102,15,56,220,241
235110710Sddmitriev	movups	(%edx),%xmm0
235210710Sddmitriev.byte	102,15,56,220,249
235310710Sddmitriev	jmp	.L_aesni_encrypt6_enter
235410710Sddmitriev.align	16
235510710Sddmitriev.L006enc6_loop:
235610710Sddmitriev.byte	102,15,56,220,209
235710710Sddmitriev.byte	102,15,56,220,217
235810710Sddmitriev	decl	%ecx
235910710Sddmitriev.byte	102,15,56,220,225
236010710Sddmitriev.byte	102,15,56,220,233
236110710Sddmitriev.byte	102,15,56,220,241
236210710Sddmitriev.byte	102,15,56,220,249
236310710Sddmitriev.align	16
236410710Sddmitriev.L_aesni_encrypt6_enter:
236510710Sddmitriev	movups	16(%edx),%xmm1
236610710Sddmitriev.byte	102,15,56,220,208
236710710Sddmitriev.byte	102,15,56,220,216
236810710Sddmitriev	leal	32(%edx),%edx
236910710Sddmitriev.byte	102,15,56,220,224
237010710Sddmitriev.byte	102,15,56,220,232
237110710Sddmitriev.byte	102,15,56,220,240
237210710Sddmitriev.byte	102,15,56,220,248
237310710Sddmitriev	movups	(%edx),%xmm0
237410710Sddmitriev	jnz	.L006enc6_loop
237510710Sddmitriev.byte	102,15,56,220,209
237610710Sddmitriev.byte	102,15,56,220,217
237710710Sddmitriev.byte	102,15,56,220,225
237810710Sddmitriev.byte	102,15,56,220,233
237910710Sddmitriev.byte	102,15,56,220,241
238010710Sddmitriev.byte	102,15,56,220,249
238110710Sddmitriev.byte	102,15,56,221,208
238210710Sddmitriev.byte	102,15,56,221,216
238310710Sddmitriev.byte	102,15,56,221,224
238410710Sddmitriev.byte	102,15,56,221,232
238510710Sddmitriev.byte	102,15,56,221,240
238610710Sddmitriev.byte	102,15,56,221,248
238710710Sddmitriev	ret
238810710Sddmitriev.size	_aesni_encrypt6,.-_aesni_encrypt6
238910710Sddmitriev.type	_aesni_decrypt6,@function
239010710Sddmitriev.align	16
239110710Sddmitriev_aesni_decrypt6:
239210710Sddmitriev	movups	(%edx),%xmm0
239310710Sddmitriev	shrl	$1,%ecx
239410710Sddmitriev	movups	16(%edx),%xmm1
239510710Sddmitriev	leal	32(%edx),%edx
239610710Sddmitriev	xorps	%xmm0,%xmm2
239710710Sddmitriev	pxor	%xmm0,%xmm3
239810710Sddmitriev.byte	102,15,56,222,209
239910710Sddmitriev	pxor	%xmm0,%xmm4
240010710Sddmitriev.byte	102,15,56,222,217
240110710Sddmitriev	pxor	%xmm0,%xmm5
240210710Sddmitriev	decl	%ecx
240310710Sddmitriev.byte	102,15,56,222,225
240410710Sddmitriev	pxor	%xmm0,%xmm6
240510710Sddmitriev.byte	102,15,56,222,233
240610710Sddmitriev	pxor	%xmm0,%xmm7
240710710Sddmitriev.byte	102,15,56,222,241
240810710Sddmitriev	movups	(%edx),%xmm0
240910710Sddmitriev.byte	102,15,56,222,249
241010710Sddmitriev	jmp	.L_aesni_decrypt6_enter
241110710Sddmitriev.align	16
241210710Sddmitriev.L007dec6_loop:
241310710Sddmitriev.byte	102,15,56,222,209
241410710Sddmitriev.byte	102,15,56,222,217
241510710Sddmitriev	decl	%ecx
241610710Sddmitriev.byte	102,15,56,222,225
241710710Sddmitriev.byte	102,15,56,222,233
241810710Sddmitriev.byte	102,15,56,222,241
241910710Sddmitriev.byte	102,15,56,222,249
242010710Sddmitriev.align	16
242110710Sddmitriev.L_aesni_decrypt6_enter:
242210710Sddmitriev	movups	16(%edx),%xmm1
242310710Sddmitriev.byte	102,15,56,222,208
242410710Sddmitriev.byte	102,15,56,222,216
242510710Sddmitriev	leal	32(%edx),%edx
242610710Sddmitriev.byte	102,15,56,222,224
242710710Sddmitriev.byte	102,15,56,222,232
242810710Sddmitriev.byte	102,15,56,222,240
242910710Sddmitriev.byte	102,15,56,222,248
243010710Sddmitriev	movups	(%edx),%xmm0
243110710Sddmitriev	jnz	.L007dec6_loop
243210710Sddmitriev.byte	102,15,56,222,209
243310710Sddmitriev.byte	102,15,56,222,217
243410710Sddmitriev.byte	102,15,56,222,225
243510710Sddmitriev.byte	102,15,56,222,233
243610710Sddmitriev.byte	102,15,56,222,241
243710710Sddmitriev.byte	102,15,56,222,249
243810710Sddmitriev.byte	102,15,56,223,208
243910710Sddmitriev.byte	102,15,56,223,216
244010710Sddmitriev.byte	102,15,56,223,224
244110710Sddmitriev.byte	102,15,56,223,232
244210710Sddmitriev.byte	102,15,56,223,240
244310710Sddmitriev.byte	102,15,56,223,248
244410710Sddmitriev	ret
244510710Sddmitriev.size	_aesni_decrypt6,.-_aesni_decrypt6
244610710Sddmitriev.globl	aesni_ecb_encrypt
244710710Sddmitriev.type	aesni_ecb_encrypt,@function
244810710Sddmitriev.align	16
244910710Sddmitrievaesni_ecb_encrypt:
245010710Sddmitriev.L_aesni_ecb_encrypt_begin:
245110710Sddmitriev	pushl	%ebp
245210710Sddmitriev	pushl	%ebx
245310710Sddmitriev	pushl	%esi
245410710Sddmitriev	pushl	%edi
245510710Sddmitriev	movl	20(%esp),%esi
245610710Sddmitriev	movl	24(%esp),%edi
245710710Sddmitriev	movl	28(%esp),%eax
245810710Sddmitriev	movl	32(%esp),%edx
245910710Sddmitriev	movl	36(%esp),%ebx
246010710Sddmitriev	andl	$-16,%eax
246110710Sddmitriev	jz	.L008ecb_ret
246210710Sddmitriev	movl	240(%edx),%ecx
246310710Sddmitriev	testl	%ebx,%ebx
246410710Sddmitriev	jz	.L009ecb_decrypt
246510710Sddmitriev	movl	%edx,%ebp
246610710Sddmitriev	movl	%ecx,%ebx
246710710Sddmitriev	cmpl	$96,%eax
246810710Sddmitriev	jb	.L010ecb_enc_tail
246910710Sddmitriev	movdqu	(%esi),%xmm2
247010710Sddmitriev	movdqu	16(%esi),%xmm3
247110710Sddmitriev	movdqu	32(%esi),%xmm4
247210710Sddmitriev	movdqu	48(%esi),%xmm5
247310710Sddmitriev	movdqu	64(%esi),%xmm6
247410710Sddmitriev	movdqu	80(%esi),%xmm7
247510710Sddmitriev	leal	96(%esi),%esi
247610710Sddmitriev	subl	$96,%eax
247710710Sddmitriev	jmp	.L011ecb_enc_loop6_enter
247810710Sddmitriev.align	16
247910710Sddmitriev.L012ecb_enc_loop6:
248010710Sddmitriev	movups	%xmm2,(%edi)
248110710Sddmitriev	movdqu	(%esi),%xmm2
248210710Sddmitriev	movups	%xmm3,16(%edi)
248310710Sddmitriev	movdqu	16(%esi),%xmm3
248410710Sddmitriev	movups	%xmm4,32(%edi)
248510710Sddmitriev	movdqu	32(%esi),%xmm4
248610710Sddmitriev	movups	%xmm5,48(%edi)
248710710Sddmitriev	movdqu	48(%esi),%xmm5
248810710Sddmitriev	movups	%xmm6,64(%edi)
248910710Sddmitriev	movdqu	64(%esi),%xmm6
249010710Sddmitriev	movups	%xmm7,80(%edi)
249110710Sddmitriev	leal	96(%edi),%edi
249210710Sddmitriev	movdqu	80(%esi),%xmm7
249310710Sddmitriev	leal	96(%esi),%esi
249410710Sddmitriev.L011ecb_enc_loop6_enter:
249510710Sddmitriev	call	_aesni_encrypt6
249610710Sddmitriev	movl	%ebp,%edx
249710710Sddmitriev	movl	%ebx,%ecx
249810710Sddmitriev	subl	$96,%eax
249910710Sddmitriev	jnc	.L012ecb_enc_loop6
250010710Sddmitriev	movups	%xmm2,(%edi)
250110710Sddmitriev	movups	%xmm3,16(%edi)
250210710Sddmitriev	movups	%xmm4,32(%edi)
250310710Sddmitriev	movups	%xmm5,48(%edi)
250410710Sddmitriev	movups	%xmm6,64(%edi)
250510710Sddmitriev	movups	%xmm7,80(%edi)
250610710Sddmitriev	leal	96(%edi),%edi
250710710Sddmitriev	addl	$96,%eax
250810710Sddmitriev	jz	.L008ecb_ret
250910710Sddmitriev.L010ecb_enc_tail:
251010710Sddmitriev	movups	(%esi),%xmm2
251110710Sddmitriev	cmpl	$32,%eax
251210710Sddmitriev	jb	.L013ecb_enc_one
251310710Sddmitriev	movups	16(%esi),%xmm3
251410710Sddmitriev	je	.L014ecb_enc_two
251510710Sddmitriev	movups	32(%esi),%xmm4
251610710Sddmitriev	cmpl	$64,%eax
251710710Sddmitriev	jb	.L015ecb_enc_three
251810710Sddmitriev	movups	48(%esi),%xmm5
251910710Sddmitriev	je	.L016ecb_enc_four
252010710Sddmitriev	movups	64(%esi),%xmm6
252110710Sddmitriev	xorps	%xmm7,%xmm7
252210710Sddmitriev	call	_aesni_encrypt6
252310710Sddmitriev	movups	%xmm2,(%edi)
252410710Sddmitriev	movups	%xmm3,16(%edi)
252510710Sddmitriev	movups	%xmm4,32(%edi)
252610710Sddmitriev	movups	%xmm5,48(%edi)
252710710Sddmitriev	movups	%xmm6,64(%edi)
252810710Sddmitriev	jmp	.L008ecb_ret
252910710Sddmitriev.align	16
253010710Sddmitriev.L013ecb_enc_one:
253110710Sddmitriev	movups	(%edx),%xmm0
253210710Sddmitriev	movups	16(%edx),%xmm1
253310710Sddmitriev	leal	32(%edx),%edx
253410710Sddmitriev	xorps	%xmm0,%xmm2
253510710Sddmitriev.L017enc1_loop_3:
253610710Sddmitriev.byte	102,15,56,220,209
253710710Sddmitriev	decl	%ecx
253810710Sddmitriev	movups	(%edx),%xmm1
253910710Sddmitriev	leal	16(%edx),%edx
254010710Sddmitriev	jnz	.L017enc1_loop_3
254110710Sddmitriev.byte	102,15,56,221,209
254210710Sddmitriev	movups	%xmm2,(%edi)
254310710Sddmitriev	jmp	.L008ecb_ret
254410710Sddmitriev.align	16
254510710Sddmitriev.L014ecb_enc_two:
254610710Sddmitriev	xorps	%xmm4,%xmm4
254710710Sddmitriev	call	_aesni_encrypt3
254810710Sddmitriev	movups	%xmm2,(%edi)
254910710Sddmitriev	movups	%xmm3,16(%edi)
255010710Sddmitriev	jmp	.L008ecb_ret
255110710Sddmitriev.align	16
255210710Sddmitriev.L015ecb_enc_three:
255310710Sddmitriev	call	_aesni_encrypt3
255410710Sddmitriev	movups	%xmm2,(%edi)
255510710Sddmitriev	movups	%xmm3,16(%edi)
255610710Sddmitriev	movups	%xmm4,32(%edi)
255710710Sddmitriev	jmp	.L008ecb_ret
255810710Sddmitriev.align	16
255910710Sddmitriev.L016ecb_enc_four:
256010710Sddmitriev	call	_aesni_encrypt4
256110710Sddmitriev	movups	%xmm2,(%edi)
256210710Sddmitriev	movups	%xmm3,16(%edi)
256310710Sddmitriev	movups	%xmm4,32(%edi)
256410710Sddmitriev	movups	%xmm5,48(%edi)
256510710Sddmitriev	jmp	.L008ecb_ret
256610710Sddmitriev.align	16
256710710Sddmitriev.L009ecb_decrypt:
256810710Sddmitriev	movl	%edx,%ebp
256910710Sddmitriev	movl	%ecx,%ebx
257010710Sddmitriev	cmpl	$96,%eax
257110710Sddmitriev	jb	.L018ecb_dec_tail
257210710Sddmitriev	movdqu	(%esi),%xmm2
257310710Sddmitriev	movdqu	16(%esi),%xmm3
257410710Sddmitriev	movdqu	32(%esi),%xmm4
257510710Sddmitriev	movdqu	48(%esi),%xmm5
257610710Sddmitriev	movdqu	64(%esi),%xmm6
257710710Sddmitriev	movdqu	80(%esi),%xmm7
257810710Sddmitriev	leal	96(%esi),%esi
257910710Sddmitriev	subl	$96,%eax
258010710Sddmitriev	jmp	.L019ecb_dec_loop6_enter
258110710Sddmitriev.align	16
258210710Sddmitriev.L020ecb_dec_loop6:
258310710Sddmitriev	movups	%xmm2,(%edi)
258410710Sddmitriev	movdqu	(%esi),%xmm2
258510710Sddmitriev	movups	%xmm3,16(%edi)
258610710Sddmitriev	movdqu	16(%esi),%xmm3
258710710Sddmitriev	movups	%xmm4,32(%edi)
258810710Sddmitriev	movdqu	32(%esi),%xmm4
258910710Sddmitriev	movups	%xmm5,48(%edi)
259010710Sddmitriev	movdqu	48(%esi),%xmm5
259110710Sddmitriev	movups	%xmm6,64(%edi)
259210710Sddmitriev	movdqu	64(%esi),%xmm6
259310710Sddmitriev	movups	%xmm7,80(%edi)
259410710Sddmitriev	leal	96(%edi),%edi
259510710Sddmitriev	movdqu	80(%esi),%xmm7
259610710Sddmitriev	leal	96(%esi),%esi
259710710Sddmitriev.L019ecb_dec_loop6_enter:
259810710Sddmitriev	call	_aesni_decrypt6
259910710Sddmitriev	movl	%ebp,%edx
260010710Sddmitriev	movl	%ebx,%ecx
260110710Sddmitriev	subl	$96,%eax
260210710Sddmitriev	jnc	.L020ecb_dec_loop6
260310710Sddmitriev	movups	%xmm2,(%edi)
260410710Sddmitriev	movups	%xmm3,16(%edi)
260510710Sddmitriev	movups	%xmm4,32(%edi)
260610710Sddmitriev	movups	%xmm5,48(%edi)
260710710Sddmitriev	movups	%xmm6,64(%edi)
260810710Sddmitriev	movups	%xmm7,80(%edi)
260910710Sddmitriev	leal	96(%edi),%edi
261010710Sddmitriev	addl	$96,%eax
261110710Sddmitriev	jz	.L008ecb_ret
261210710Sddmitriev.L018ecb_dec_tail:
261310710Sddmitriev	movups	(%esi),%xmm2
261410710Sddmitriev	cmpl	$32,%eax
261510710Sddmitriev	jb	.L021ecb_dec_one
261610710Sddmitriev	movups	16(%esi),%xmm3
261710710Sddmitriev	je	.L022ecb_dec_two
261810710Sddmitriev	movups	32(%esi),%xmm4
261910710Sddmitriev	cmpl	$64,%eax
262010710Sddmitriev	jb	.L023ecb_dec_three
262110710Sddmitriev	movups	48(%esi),%xmm5
262210710Sddmitriev	je	.L024ecb_dec_four
262310710Sddmitriev	movups	64(%esi),%xmm6
262410710Sddmitriev	xorps	%xmm7,%xmm7
262510710Sddmitriev	call	_aesni_decrypt6
262610710Sddmitriev	movups	%xmm2,(%edi)
262710710Sddmitriev	movups	%xmm3,16(%edi)
262810710Sddmitriev	movups	%xmm4,32(%edi)
262910710Sddmitriev	movups	%xmm5,48(%edi)
263010710Sddmitriev	movups	%xmm6,64(%edi)
263110710Sddmitriev	jmp	.L008ecb_ret
263210710Sddmitriev.align	16
263310710Sddmitriev.L021ecb_dec_one:
263410710Sddmitriev	movups	(%edx),%xmm0
263510710Sddmitriev	movups	16(%edx),%xmm1
263610710Sddmitriev	leal	32(%edx),%edx
263710710Sddmitriev	xorps	%xmm0,%xmm2
263810710Sddmitriev.L025dec1_loop_4:
263910710Sddmitriev.byte	102,15,56,222,209
264010710Sddmitriev	decl	%ecx
264110710Sddmitriev	movups	(%edx),%xmm1
264210710Sddmitriev	leal	16(%edx),%edx
264310710Sddmitriev	jnz	.L025dec1_loop_4
264410710Sddmitriev.byte	102,15,56,223,209
264510710Sddmitriev	movups	%xmm2,(%edi)
264610710Sddmitriev	jmp	.L008ecb_ret
264710710Sddmitriev.align	16
264810710Sddmitriev.L022ecb_dec_two:
264910710Sddmitriev	xorps	%xmm4,%xmm4
265010710Sddmitriev	call	_aesni_decrypt3
265110710Sddmitriev	movups	%xmm2,(%edi)
265210710Sddmitriev	movups	%xmm3,16(%edi)
265310710Sddmitriev	jmp	.L008ecb_ret
265410710Sddmitriev.align	16
265510710Sddmitriev.L023ecb_dec_three:
265610710Sddmitriev	call	_aesni_decrypt3
265710710Sddmitriev	movups	%xmm2,(%edi)
265810710Sddmitriev	movups	%xmm3,16(%edi)
265910710Sddmitriev	movups	%xmm4,32(%edi)
266010710Sddmitriev	jmp	.L008ecb_ret
266110710Sddmitriev.align	16
266210710Sddmitriev.L024ecb_dec_four:
266310710Sddmitriev	call	_aesni_decrypt4
266410710Sddmitriev	movups	%xmm2,(%edi)
266510710Sddmitriev	movups	%xmm3,16(%edi)
266610710Sddmitriev	movups	%xmm4,32(%edi)
266710710Sddmitriev	movups	%xmm5,48(%edi)
266810710Sddmitriev.L008ecb_ret:
266910710Sddmitriev	popl	%edi
267010710Sddmitriev	popl	%esi
267110710Sddmitriev	popl	%ebx
267210710Sddmitriev	popl	%ebp
267310710Sddmitriev	ret
267410710Sddmitriev.size	aesni_ecb_encrypt,.-.L_aesni_ecb_encrypt_begin
267510710Sddmitriev.globl	aesni_ccm64_encrypt_blocks
267610710Sddmitriev.type	aesni_ccm64_encrypt_blocks,@function
267710710Sddmitriev.align	16
267810710Sddmitrievaesni_ccm64_encrypt_blocks:
267910710Sddmitriev.L_aesni_ccm64_encrypt_blocks_begin:
268010710Sddmitriev	pushl	%ebp
268110710Sddmitriev	pushl	%ebx
268210710Sddmitriev	pushl	%esi
268310710Sddmitriev	pushl	%edi
268410710Sddmitriev	movl	20(%esp),%esi
268510710Sddmitriev	movl	24(%esp),%edi
268610710Sddmitriev	movl	28(%esp),%eax
268710710Sddmitriev	movl	32(%esp),%edx
268810710Sddmitriev	movl	36(%esp),%ebx
268910710Sddmitriev	movl	40(%esp),%ecx
269010710Sddmitriev	movl	%esp,%ebp
269110710Sddmitriev	subl	$60,%esp
269210710Sddmitriev	andl	$-16,%esp
269310710Sddmitriev	movl	%ebp,48(%esp)
269410710Sddmitriev	movdqu	(%ebx),%xmm7
269510710Sddmitriev	movdqu	(%ecx),%xmm3
269610710Sddmitriev	movl	240(%edx),%ecx
269710710Sddmitriev	movl	$202182159,(%esp)
269810710Sddmitriev	movl	$134810123,4(%esp)
269910710Sddmitriev	movl	$67438087,8(%esp)
270010710Sddmitriev	movl	$66051,12(%esp)
270110710Sddmitriev	movl	$1,%ebx
270210710Sddmitriev	xorl	%ebp,%ebp
270310710Sddmitriev	movl	%ebx,16(%esp)
270410710Sddmitriev	movl	%ebp,20(%esp)
270510710Sddmitriev	movl	%ebp,24(%esp)
270610710Sddmitriev	movl	%ebp,28(%esp)
270710710Sddmitriev	shrl	$1,%ecx
270810710Sddmitriev	leal	(%edx),%ebp
270910710Sddmitriev	movdqa	(%esp),%xmm5
271010710Sddmitriev	movdqa	%xmm7,%xmm2
271110710Sddmitriev	movl	%ecx,%ebx
271210710Sddmitriev.byte	102,15,56,0,253
271310710Sddmitriev.L026ccm64_enc_outer:
271410710Sddmitriev	movups	(%ebp),%xmm0
271510710Sddmitriev	movl	%ebx,%ecx
271610710Sddmitriev	movups	(%esi),%xmm6
271710710Sddmitriev	xorps	%xmm0,%xmm2
271810710Sddmitriev	movups	16(%ebp),%xmm1
271910710Sddmitriev	xorps	%xmm6,%xmm0
272010710Sddmitriev	leal	32(%ebp),%edx
272110710Sddmitriev	xorps	%xmm0,%xmm3
272210710Sddmitriev	movups	(%edx),%xmm0
272310710Sddmitriev.L027ccm64_enc2_loop:
272410710Sddmitriev.byte	102,15,56,220,209
272510710Sddmitriev	decl	%ecx
272610710Sddmitriev.byte	102,15,56,220,217
272710710Sddmitriev	movups	16(%edx),%xmm1
272810710Sddmitriev.byte	102,15,56,220,208
272910710Sddmitriev	leal	32(%edx),%edx
273010710Sddmitriev.byte	102,15,56,220,216
273110710Sddmitriev	movups	(%edx),%xmm0
273210710Sddmitriev	jnz	.L027ccm64_enc2_loop
273310710Sddmitriev.byte	102,15,56,220,209
273410710Sddmitriev.byte	102,15,56,220,217
273510710Sddmitriev	paddq	16(%esp),%xmm7
273610710Sddmitriev.byte	102,15,56,221,208
273710710Sddmitriev.byte	102,15,56,221,216
273810710Sddmitriev	decl	%eax
273910710Sddmitriev	leal	16(%esi),%esi
274010710Sddmitriev	xorps	%xmm2,%xmm6
274110710Sddmitriev	movdqa	%xmm7,%xmm2
274210710Sddmitriev	movups	%xmm6,(%edi)
274310710Sddmitriev	leal	16(%edi),%edi
274410710Sddmitriev.byte	102,15,56,0,213
274510710Sddmitriev	jnz	.L026ccm64_enc_outer
274610710Sddmitriev	movl	48(%esp),%esp
274710710Sddmitriev	movl	40(%esp),%edi
274810710Sddmitriev	movups	%xmm3,(%edi)
274910710Sddmitriev	popl	%edi
275010710Sddmitriev	popl	%esi
275110710Sddmitriev	popl	%ebx
275210710Sddmitriev	popl	%ebp
275310710Sddmitriev	ret
275410710Sddmitriev.size	aesni_ccm64_encrypt_blocks,.-.L_aesni_ccm64_encrypt_blocks_begin
275510710Sddmitriev.globl	aesni_ccm64_decrypt_blocks
275610710Sddmitriev.type	aesni_ccm64_decrypt_blocks,@function
275710710Sddmitriev.align	16
275810710Sddmitrievaesni_ccm64_decrypt_blocks:
275910710Sddmitriev.L_aesni_ccm64_decrypt_blocks_begin:
276010710Sddmitriev	pushl	%ebp
276110710Sddmitriev	pushl	%ebx
276210710Sddmitriev	pushl	%esi
276310710Sddmitriev	pushl	%edi
276410710Sddmitriev	movl	20(%esp),%esi
276510710Sddmitriev	movl	24(%esp),%edi
276610710Sddmitriev	movl	28(%esp),%eax
276710710Sddmitriev	movl	32(%esp),%edx
276810710Sddmitriev	movl	36(%esp),%ebx
276910710Sddmitriev	movl	40(%esp),%ecx
277010710Sddmitriev	movl	%esp,%ebp
277110710Sddmitriev	subl	$60,%esp
277210710Sddmitriev	andl	$-16,%esp
277310710Sddmitriev	movl	%ebp,48(%esp)
277410710Sddmitriev	movdqu	(%ebx),%xmm7
277510710Sddmitriev	movdqu	(%ecx),%xmm3
277610710Sddmitriev	movl	240(%edx),%ecx
277710710Sddmitriev	movl	$202182159,(%esp)
277810710Sddmitriev	movl	$134810123,4(%esp)
277910710Sddmitriev	movl	$67438087,8(%esp)
278010710Sddmitriev	movl	$66051,12(%esp)
278110710Sddmitriev	movl	$1,%ebx
278210710Sddmitriev	xorl	%ebp,%ebp
278310710Sddmitriev	movl	%ebx,16(%esp)
278410710Sddmitriev	movl	%ebp,20(%esp)
278510710Sddmitriev	movl	%ebp,24(%esp)
278610710Sddmitriev	movl	%ebp,28(%esp)
278710710Sddmitriev	movdqa	(%esp),%xmm5
278810710Sddmitriev	movdqa	%xmm7,%xmm2
278910710Sddmitriev	movl	%edx,%ebp
279010710Sddmitriev	movl	%ecx,%ebx
279110710Sddmitriev.byte	102,15,56,0,253
279210710Sddmitriev	movups	(%edx),%xmm0
279310710Sddmitriev	movups	16(%edx),%xmm1
279410710Sddmitriev	leal	32(%edx),%edx
279510710Sddmitriev	xorps	%xmm0,%xmm2
279610710Sddmitriev.L028enc1_loop_5:
279710710Sddmitriev.byte	102,15,56,220,209
279810710Sddmitriev	decl	%ecx
279910710Sddmitriev	movups	(%edx),%xmm1
280010710Sddmitriev	leal	16(%edx),%edx
280110710Sddmitriev	jnz	.L028enc1_loop_5
280210710Sddmitriev.byte	102,15,56,221,209
280310710Sddmitriev	movups	(%esi),%xmm6
280410710Sddmitriev	paddq	16(%esp),%xmm7
280510710Sddmitriev	leal	16(%esi),%esi
280610710Sddmitriev	jmp	.L029ccm64_dec_outer
280710710Sddmitriev.align	16
280810710Sddmitriev.L029ccm64_dec_outer:
280910710Sddmitriev	xorps	%xmm2,%xmm6
281010710Sddmitriev	movdqa	%xmm7,%xmm2
281110710Sddmitriev	movl	%ebx,%ecx
281210710Sddmitriev	movups	%xmm6,(%edi)
281310710Sddmitriev	leal	16(%edi),%edi
281410710Sddmitriev.byte	102,15,56,0,213
281510710Sddmitriev	subl	$1,%eax
281610710Sddmitriev	jz	.L030ccm64_dec_break
281710710Sddmitriev	movups	(%ebp),%xmm0
281810710Sddmitriev	shrl	$1,%ecx
281910710Sddmitriev	movups	16(%ebp),%xmm1
282010710Sddmitriev	xorps	%xmm0,%xmm6
282110710Sddmitriev	leal	32(%ebp),%edx
282210710Sddmitriev	xorps	%xmm0,%xmm2
282310710Sddmitriev	xorps	%xmm6,%xmm3
282410710Sddmitriev	movups	(%edx),%xmm0
282510710Sddmitriev.L031ccm64_dec2_loop:
282610710Sddmitriev.byte	102,15,56,220,209
282710710Sddmitriev	decl	%ecx
282810710Sddmitriev.byte	102,15,56,220,217
282910710Sddmitriev	movups	16(%edx),%xmm1
283010710Sddmitriev.byte	102,15,56,220,208
283110710Sddmitriev	leal	32(%edx),%edx
283210710Sddmitriev.byte	102,15,56,220,216
283310710Sddmitriev	movups	(%edx),%xmm0
283410710Sddmitriev	jnz	.L031ccm64_dec2_loop
283510710Sddmitriev	movups	(%esi),%xmm6
283610710Sddmitriev	paddq	16(%esp),%xmm7
283710710Sddmitriev.byte	102,15,56,220,209
283810710Sddmitriev.byte	102,15,56,220,217
283910710Sddmitriev	leal	16(%esi),%esi
284010710Sddmitriev.byte	102,15,56,221,208
284110710Sddmitriev.byte	102,15,56,221,216
284210710Sddmitriev	jmp	.L029ccm64_dec_outer
284310710Sddmitriev.align	16
284410710Sddmitriev.L030ccm64_dec_break:
284510710Sddmitriev	movl	%ebp,%edx
284610710Sddmitriev	movups	(%edx),%xmm0
284710710Sddmitriev	movups	16(%edx),%xmm1
284810710Sddmitriev	xorps	%xmm0,%xmm6
284910710Sddmitriev	leal	32(%edx),%edx
285010710Sddmitriev	xorps	%xmm6,%xmm3
285110710Sddmitriev.L032enc1_loop_6:
285210710Sddmitriev.byte	102,15,56,220,217
285310710Sddmitriev	decl	%ecx
285410710Sddmitriev	movups	(%edx),%xmm1
285510710Sddmitriev	leal	16(%edx),%edx
285610710Sddmitriev	jnz	.L032enc1_loop_6
285710710Sddmitriev.byte	102,15,56,221,217
285810710Sddmitriev	movl	48(%esp),%esp
285910710Sddmitriev	movl	40(%esp),%edi
286010710Sddmitriev	movups	%xmm3,(%edi)
286110710Sddmitriev	popl	%edi
286210710Sddmitriev	popl	%esi
286310710Sddmitriev	popl	%ebx
286410710Sddmitriev	popl	%ebp
286510710Sddmitriev	ret
286610710Sddmitriev.size	aesni_ccm64_decrypt_blocks,.-.L_aesni_ccm64_decrypt_blocks_begin
286710710Sddmitriev.globl	aesni_ctr32_encrypt_blocks
286810710Sddmitriev.type	aesni_ctr32_encrypt_blocks,@function
286910710Sddmitriev.align	16
287010710Sddmitrievaesni_ctr32_encrypt_blocks:
287110710Sddmitriev.L_aesni_ctr32_encrypt_blocks_begin:
287210710Sddmitriev	pushl	%ebp
287310710Sddmitriev	pushl	%ebx
287410710Sddmitriev	pushl	%esi
287510710Sddmitriev	pushl	%edi
287610710Sddmitriev	movl	20(%esp),%esi
287710710Sddmitriev	movl	24(%esp),%edi
287810710Sddmitriev	movl	28(%esp),%eax
287910710Sddmitriev	movl	32(%esp),%edx
288010710Sddmitriev	movl	36(%esp),%ebx
288110710Sddmitriev	movl	%esp,%ebp
288210710Sddmitriev	subl	$88,%esp
288310710Sddmitriev	andl	$-16,%esp
288410710Sddmitriev	movl	%ebp,80(%esp)
288510710Sddmitriev	cmpl	$1,%eax
288610710Sddmitriev	je	.L033ctr32_one_shortcut
288710710Sddmitriev	movdqu	(%ebx),%xmm7
288810710Sddmitriev	movl	$202182159,(%esp)
288910710Sddmitriev	movl	$134810123,4(%esp)
289010710Sddmitriev	movl	$67438087,8(%esp)
289110710Sddmitriev	movl	$66051,12(%esp)
289210710Sddmitriev	movl	$6,%ecx
289310710Sddmitriev	xorl	%ebp,%ebp
289410710Sddmitriev	movl	%ecx,16(%esp)
289510710Sddmitriev	movl	%ecx,20(%esp)
289610710Sddmitriev	movl	%ecx,24(%esp)
289710710Sddmitriev	movl	%ebp,28(%esp)
289810710Sddmitriev.byte	102,15,58,22,251,3
289910710Sddmitriev.byte	102,15,58,34,253,3
290010710Sddmitriev	movl	240(%edx),%ecx
290110710Sddmitriev	bswap	%ebx
290210710Sddmitriev	pxor	%xmm1,%xmm1
290310710Sddmitriev	pxor	%xmm0,%xmm0
290410710Sddmitriev	movdqa	(%esp),%xmm2
290510710Sddmitriev.byte	102,15,58,34,203,0
290610710Sddmitriev	leal	3(%ebx),%ebp
290710710Sddmitriev.byte	102,15,58,34,197,0
290810710Sddmitriev	incl	%ebx
290910710Sddmitriev.byte	102,15,58,34,203,1
291010710Sddmitriev	incl	%ebp
291110710Sddmitriev.byte	102,15,58,34,197,1
291210710Sddmitriev	incl	%ebx
291310710Sddmitriev.byte	102,15,58,34,203,2
291410710Sddmitriev	incl	%ebp
291510710Sddmitriev.byte	102,15,58,34,197,2
291610710Sddmitriev	movdqa	%xmm1,48(%esp)
291710710Sddmitriev.byte	102,15,56,0,202
291810710Sddmitriev	movdqa	%xmm0,64(%esp)
291910710Sddmitriev.byte	102,15,56,0,194
292010710Sddmitriev	pshufd	$192,%xmm1,%xmm2
292110710Sddmitriev	pshufd	$128,%xmm1,%xmm3
292210710Sddmitriev	cmpl	$6,%eax
292310710Sddmitriev	jb	.L034ctr32_tail
292410710Sddmitriev	movdqa	%xmm7,32(%esp)
292510710Sddmitriev	shrl	$1,%ecx
292610710Sddmitriev	movl	%edx,%ebp
292710710Sddmitriev	movl	%ecx,%ebx
292810710Sddmitriev	subl	$6,%eax
292910710Sddmitriev	jmp	.L035ctr32_loop6
293010710Sddmitriev.align	16
293110710Sddmitriev.L035ctr32_loop6:
293210710Sddmitriev	pshufd	$64,%xmm1,%xmm4
293310710Sddmitriev	movdqa	32(%esp),%xmm1
293410710Sddmitriev	pshufd	$192,%xmm0,%xmm5
293510710Sddmitriev	por	%xmm1,%xmm2
293610710Sddmitriev	pshufd	$128,%xmm0,%xmm6
293710710Sddmitriev	por	%xmm1,%xmm3
293810710Sddmitriev	pshufd	$64,%xmm0,%xmm7
293910710Sddmitriev	por	%xmm1,%xmm4
294010710Sddmitriev	por	%xmm1,%xmm5
294110710Sddmitriev	por	%xmm1,%xmm6
294210710Sddmitriev	por	%xmm1,%xmm7
294310710Sddmitriev	movups	(%ebp),%xmm0
294410710Sddmitriev	movups	16(%ebp),%xmm1
294510710Sddmitriev	leal	32(%ebp),%edx
294610710Sddmitriev	decl	%ecx
294710710Sddmitriev	pxor	%xmm0,%xmm2
294810710Sddmitriev	pxor	%xmm0,%xmm3
294910710Sddmitriev.byte	102,15,56,220,209
295010710Sddmitriev	pxor	%xmm0,%xmm4
295110710Sddmitriev.byte	102,15,56,220,217
295210710Sddmitriev	pxor	%xmm0,%xmm5
295310710Sddmitriev.byte	102,15,56,220,225
295410710Sddmitriev	pxor	%xmm0,%xmm6
295510710Sddmitriev.byte	102,15,56,220,233
295610710Sddmitriev	pxor	%xmm0,%xmm7
295710710Sddmitriev.byte	102,15,56,220,241
295810710Sddmitriev	movups	(%edx),%xmm0
295910710Sddmitriev.byte	102,15,56,220,249
296010710Sddmitriev	call	.L_aesni_encrypt6_enter
296110710Sddmitriev	movups	(%esi),%xmm1
296210710Sddmitriev	movups	16(%esi),%xmm0
296310710Sddmitriev	xorps	%xmm1,%xmm2
296410710Sddmitriev	movups	32(%esi),%xmm1
296510710Sddmitriev	xorps	%xmm0,%xmm3
296610710Sddmitriev	movups	%xmm2,(%edi)
296710710Sddmitriev	movdqa	16(%esp),%xmm0
296810710Sddmitriev	xorps	%xmm1,%xmm4
296910710Sddmitriev	movdqa	48(%esp),%xmm1
297010710Sddmitriev	movups	%xmm3,16(%edi)
297110710Sddmitriev	movups	%xmm4,32(%edi)
297210710Sddmitriev	paddd	%xmm0,%xmm1
297310710Sddmitriev	paddd	64(%esp),%xmm0
297410710Sddmitriev	movdqa	(%esp),%xmm2
297510710Sddmitriev	movups	48(%esi),%xmm3
297610710Sddmitriev	movups	64(%esi),%xmm4
297710710Sddmitriev	xorps	%xmm3,%xmm5
297810710Sddmitriev	movups	80(%esi),%xmm3
297910710Sddmitriev	leal	96(%esi),%esi
298010710Sddmitriev	movdqa	%xmm1,48(%esp)
298110710Sddmitriev.byte	102,15,56,0,202
298210710Sddmitriev	xorps	%xmm4,%xmm6
298310710Sddmitriev	movups	%xmm5,48(%edi)
298410710Sddmitriev	xorps	%xmm3,%xmm7
298510710Sddmitriev	movdqa	%xmm0,64(%esp)
298610710Sddmitriev.byte	102,15,56,0,194
298710710Sddmitriev	movups	%xmm6,64(%edi)
298810710Sddmitriev	pshufd	$192,%xmm1,%xmm2
298910710Sddmitriev	movups	%xmm7,80(%edi)
299010710Sddmitriev	leal	96(%edi),%edi
299110710Sddmitriev	movl	%ebx,%ecx
299210710Sddmitriev	pshufd	$128,%xmm1,%xmm3
299310710Sddmitriev	subl	$6,%eax
299410710Sddmitriev	jnc	.L035ctr32_loop6
299510710Sddmitriev	addl	$6,%eax
299610710Sddmitriev	jz	.L036ctr32_ret
299710710Sddmitriev	movl	%ebp,%edx
299810710Sddmitriev	leal	1(,%ecx,2),%ecx
299910710Sddmitriev	movdqa	32(%esp),%xmm7
300010710Sddmitriev.L034ctr32_tail:
300110710Sddmitriev	por	%xmm7,%xmm2
300210710Sddmitriev	cmpl	$2,%eax
300310710Sddmitriev	jb	.L037ctr32_one
300410710Sddmitriev	pshufd	$64,%xmm1,%xmm4
300510710Sddmitriev	por	%xmm7,%xmm3
300610710Sddmitriev	je	.L038ctr32_two
300710710Sddmitriev	pshufd	$192,%xmm0,%xmm5
300810710Sddmitriev	por	%xmm7,%xmm4
300910710Sddmitriev	cmpl	$4,%eax
301010710Sddmitriev	jb	.L039ctr32_three
301110710Sddmitriev	pshufd	$128,%xmm0,%xmm6
301210710Sddmitriev	por	%xmm7,%xmm5
301310710Sddmitriev	je	.L040ctr32_four
301410710Sddmitriev	por	%xmm7,%xmm6
301510710Sddmitriev	call	_aesni_encrypt6
301610710Sddmitriev	movups	(%esi),%xmm1
301710710Sddmitriev	movups	16(%esi),%xmm0
301810710Sddmitriev	xorps	%xmm1,%xmm2
301910710Sddmitriev	movups	32(%esi),%xmm1
302010710Sddmitriev	xorps	%xmm0,%xmm3
302110710Sddmitriev	movups	48(%esi),%xmm0
302210710Sddmitriev	xorps	%xmm1,%xmm4
302310710Sddmitriev	movups	64(%esi),%xmm1
302410710Sddmitriev	xorps	%xmm0,%xmm5
302510710Sddmitriev	movups	%xmm2,(%edi)
302610710Sddmitriev	xorps	%xmm1,%xmm6
302710710Sddmitriev	movups	%xmm3,16(%edi)
302810710Sddmitriev	movups	%xmm4,32(%edi)
302910710Sddmitriev	movups	%xmm5,48(%edi)
303010710Sddmitriev	movups	%xmm6,64(%edi)
303110710Sddmitriev	jmp	.L036ctr32_ret
303210710Sddmitriev.align	16
303310710Sddmitriev.L033ctr32_one_shortcut:
303410710Sddmitriev	movups	(%ebx),%xmm2
303510710Sddmitriev	movl	240(%edx),%ecx
303610710Sddmitriev.L037ctr32_one:
303710710Sddmitriev	movups	(%edx),%xmm0
303810710Sddmitriev	movups	16(%edx),%xmm1
303910710Sddmitriev	leal	32(%edx),%edx
304010710Sddmitriev	xorps	%xmm0,%xmm2
304110710Sddmitriev.L041enc1_loop_7:
304210710Sddmitriev.byte	102,15,56,220,209
304310710Sddmitriev	decl	%ecx
304410710Sddmitriev	movups	(%edx),%xmm1
304510710Sddmitriev	leal	16(%edx),%edx
304610710Sddmitriev	jnz	.L041enc1_loop_7
304710710Sddmitriev.byte	102,15,56,221,209
304810710Sddmitriev	movups	(%esi),%xmm6
304910710Sddmitriev	xorps	%xmm2,%xmm6
305010710Sddmitriev	movups	%xmm6,(%edi)
305110710Sddmitriev	jmp	.L036ctr32_ret
305210710Sddmitriev.align	16
305310710Sddmitriev.L038ctr32_two:
305410710Sddmitriev	call	_aesni_encrypt3
305510710Sddmitriev	movups	(%esi),%xmm5
305610710Sddmitriev	movups	16(%esi),%xmm6
305710710Sddmitriev	xorps	%xmm5,%xmm2
305810710Sddmitriev	xorps	%xmm6,%xmm3
305910710Sddmitriev	movups	%xmm2,(%edi)
306010710Sddmitriev	movups	%xmm3,16(%edi)
306110710Sddmitriev	jmp	.L036ctr32_ret
306210710Sddmitriev.align	16
306310710Sddmitriev.L039ctr32_three:
306410710Sddmitriev	call	_aesni_encrypt3
306510710Sddmitriev	movups	(%esi),%xmm5
306610710Sddmitriev	movups	16(%esi),%xmm6
306710710Sddmitriev	xorps	%xmm5,%xmm2
306810710Sddmitriev	movups	32(%esi),%xmm7
306910710Sddmitriev	xorps	%xmm6,%xmm3
307010710Sddmitriev	movups	%xmm2,(%edi)
307110710Sddmitriev	xorps	%xmm7,%xmm4
307210710Sddmitriev	movups	%xmm3,16(%edi)
307310710Sddmitriev	movups	%xmm4,32(%edi)
307410710Sddmitriev	jmp	.L036ctr32_ret
307510710Sddmitriev.align	16
307610710Sddmitriev.L040ctr32_four:
307710710Sddmitriev	call	_aesni_encrypt4
307810710Sddmitriev	movups	(%esi),%xmm6
307910710Sddmitriev	movups	16(%esi),%xmm7
308010710Sddmitriev	movups	32(%esi),%xmm1
308110710Sddmitriev	xorps	%xmm6,%xmm2
308210710Sddmitriev	movups	48(%esi),%xmm0
308310710Sddmitriev	xorps	%xmm7,%xmm3
308410710Sddmitriev	movups	%xmm2,(%edi)
308510710Sddmitriev	xorps	%xmm1,%xmm4
308610710Sddmitriev	movups	%xmm3,16(%edi)
308710710Sddmitriev	xorps	%xmm0,%xmm5
308810710Sddmitriev	movups	%xmm4,32(%edi)
308910710Sddmitriev	movups	%xmm5,48(%edi)
309010710Sddmitriev.L036ctr32_ret:
309110710Sddmitriev	movl	80(%esp),%esp
309210710Sddmitriev	popl	%edi
309310710Sddmitriev	popl	%esi
309410710Sddmitriev	popl	%ebx
309510710Sddmitriev	popl	%ebp
309610710Sddmitriev	ret
309710710Sddmitriev.size	aesni_ctr32_encrypt_blocks,.-.L_aesni_ctr32_encrypt_blocks_begin
309810710Sddmitriev.globl	aesni_xts_encrypt
309910710Sddmitriev.type	aesni_xts_encrypt,@function
310010710Sddmitriev.align	16
310110710Sddmitrievaesni_xts_encrypt:
310210710Sddmitriev.L_aesni_xts_encrypt_begin:
310310710Sddmitriev	pushl	%ebp
310410710Sddmitriev	pushl	%ebx
310510710Sddmitriev	pushl	%esi
310610710Sddmitriev	pushl	%edi
310710710Sddmitriev	movl	36(%esp),%edx
310810710Sddmitriev	movl	40(%esp),%esi
310910710Sddmitriev	movl	240(%edx),%ecx
311010710Sddmitriev	movups	(%esi),%xmm2
311110710Sddmitriev	movups	(%edx),%xmm0
311210710Sddmitriev	movups	16(%edx),%xmm1
311310710Sddmitriev	leal	32(%edx),%edx
311410710Sddmitriev	xorps	%xmm0,%xmm2
311510710Sddmitriev.L042enc1_loop_8:
311610710Sddmitriev.byte	102,15,56,220,209
311710710Sddmitriev	decl	%ecx
311810710Sddmitriev	movups	(%edx),%xmm1
311910710Sddmitriev	leal	16(%edx),%edx
312010710Sddmitriev	jnz	.L042enc1_loop_8
312110710Sddmitriev.byte	102,15,56,221,209
312210710Sddmitriev	movl	20(%esp),%esi
312310710Sddmitriev	movl	24(%esp),%edi
312410710Sddmitriev	movl	28(%esp),%eax
312510710Sddmitriev	movl	32(%esp),%edx
312610710Sddmitriev	movl	%esp,%ebp
312710710Sddmitriev	subl	$120,%esp
312810710Sddmitriev	movl	240(%edx),%ecx
312910710Sddmitriev	andl	$-16,%esp
313010710Sddmitriev	movl	$135,96(%esp)
313110710Sddmitriev	movl	$0,100(%esp)
313210710Sddmitriev	movl	$1,104(%esp)
313310710Sddmitriev	movl	$0,108(%esp)
313410710Sddmitriev	movl	%eax,112(%esp)
313510710Sddmitriev	movl	%ebp,116(%esp)
313610710Sddmitriev	movdqa	%xmm2,%xmm1
313710710Sddmitriev	pxor	%xmm0,%xmm0
313810710Sddmitriev	movdqa	96(%esp),%xmm3
313910710Sddmitriev	pcmpgtd	%xmm1,%xmm0
314010710Sddmitriev	andl	$-16,%eax
314110710Sddmitriev	movl	%edx,%ebp
314210710Sddmitriev	movl	%ecx,%ebx
314310710Sddmitriev	subl	$96,%eax
314410710Sddmitriev	jc	.L043xts_enc_short
314510710Sddmitriev	shrl	$1,%ecx
314610710Sddmitriev	movl	%ecx,%ebx
314710710Sddmitriev	jmp	.L044xts_enc_loop6
314810710Sddmitriev.align	16
314910710Sddmitriev.L044xts_enc_loop6:
315010710Sddmitriev	pshufd	$19,%xmm0,%xmm2
315110710Sddmitriev	pxor	%xmm0,%xmm0
315210710Sddmitriev	movdqa	%xmm1,(%esp)
315310710Sddmitriev	paddq	%xmm1,%xmm1
315410710Sddmitriev	pand	%xmm3,%xmm2
315510710Sddmitriev	pcmpgtd	%xmm1,%xmm0
315610710Sddmitriev	pxor	%xmm2,%xmm1
315710710Sddmitriev	pshufd	$19,%xmm0,%xmm2
315810710Sddmitriev	pxor	%xmm0,%xmm0
315910710Sddmitriev	movdqa	%xmm1,16(%esp)
316010710Sddmitriev	paddq	%xmm1,%xmm1
316110710Sddmitriev	pand	%xmm3,%xmm2
316210710Sddmitriev	pcmpgtd	%xmm1,%xmm0
316310710Sddmitriev	pxor	%xmm2,%xmm1
316410710Sddmitriev	pshufd	$19,%xmm0,%xmm2
316510710Sddmitriev	pxor	%xmm0,%xmm0
316610710Sddmitriev	movdqa	%xmm1,32(%esp)
316710710Sddmitriev	paddq	%xmm1,%xmm1
316810710Sddmitriev	pand	%xmm3,%xmm2
316910710Sddmitriev	pcmpgtd	%xmm1,%xmm0
317010710Sddmitriev	pxor	%xmm2,%xmm1
317110710Sddmitriev	pshufd	$19,%xmm0,%xmm2
317210710Sddmitriev	pxor	%xmm0,%xmm0
317310710Sddmitriev	movdqa	%xmm1,48(%esp)
317410710Sddmitriev	paddq	%xmm1,%xmm1
317510710Sddmitriev	pand	%xmm3,%xmm2
317610710Sddmitriev	pcmpgtd	%xmm1,%xmm0
317710710Sddmitriev	pxor	%xmm2,%xmm1
317810710Sddmitriev	pshufd	$19,%xmm0,%xmm7
317910710Sddmitriev	movdqa	%xmm1,64(%esp)
318010710Sddmitriev	paddq	%xmm1,%xmm1
318110710Sddmitriev	movups	(%ebp),%xmm0
318210710Sddmitriev	pand	%xmm3,%xmm7
318310710Sddmitriev	movups	(%esi),%xmm2
318410710Sddmitriev	pxor	%xmm1,%xmm7
318510710Sddmitriev	movdqu	16(%esi),%xmm3
318610710Sddmitriev	xorps	%xmm0,%xmm2
318710710Sddmitriev	movdqu	32(%esi),%xmm4
318810710Sddmitriev	pxor	%xmm0,%xmm3
318910710Sddmitriev	movdqu	48(%esi),%xmm5
319010710Sddmitriev	pxor	%xmm0,%xmm4
319110710Sddmitriev	movdqu	64(%esi),%xmm6
319210710Sddmitriev	pxor	%xmm0,%xmm5
319310710Sddmitriev	movdqu	80(%esi),%xmm1
319410710Sddmitriev	pxor	%xmm0,%xmm6
319510710Sddmitriev	leal	96(%esi),%esi
319610710Sddmitriev	pxor	(%esp),%xmm2
319710710Sddmitriev	movdqa	%xmm7,80(%esp)
319810710Sddmitriev	pxor	%xmm1,%xmm7
319910710Sddmitriev	movups	16(%ebp),%xmm1
320010710Sddmitriev	leal	32(%ebp),%edx
320110710Sddmitriev	pxor	16(%esp),%xmm3
320210710Sddmitriev.byte	102,15,56,220,209
320310710Sddmitriev	pxor	32(%esp),%xmm4
320410710Sddmitriev.byte	102,15,56,220,217
320510710Sddmitriev	pxor	48(%esp),%xmm5
320610710Sddmitriev	decl	%ecx
320710710Sddmitriev.byte	102,15,56,220,225
320810710Sddmitriev	pxor	64(%esp),%xmm6
320910710Sddmitriev.byte	102,15,56,220,233
321010710Sddmitriev	pxor	%xmm0,%xmm7
321110710Sddmitriev.byte	102,15,56,220,241
321210710Sddmitriev	movups	(%edx),%xmm0
321310710Sddmitriev.byte	102,15,56,220,249
321410710Sddmitriev	call	.L_aesni_encrypt6_enter
321510710Sddmitriev	movdqa	80(%esp),%xmm1
321610710Sddmitriev	pxor	%xmm0,%xmm0
321710710Sddmitriev	xorps	(%esp),%xmm2
321810710Sddmitriev	pcmpgtd	%xmm1,%xmm0
321910710Sddmitriev	xorps	16(%esp),%xmm3
322010710Sddmitriev	movups	%xmm2,(%edi)
322110710Sddmitriev	xorps	32(%esp),%xmm4
322210710Sddmitriev	movups	%xmm3,16(%edi)
322310710Sddmitriev	xorps	48(%esp),%xmm5
322410710Sddmitriev	movups	%xmm4,32(%edi)
322510710Sddmitriev	xorps	64(%esp),%xmm6
322610710Sddmitriev	movups	%xmm5,48(%edi)
322710710Sddmitriev	xorps	%xmm1,%xmm7
322810710Sddmitriev	movups	%xmm6,64(%edi)
322910710Sddmitriev	pshufd	$19,%xmm0,%xmm2
323010710Sddmitriev	movups	%xmm7,80(%edi)
323110710Sddmitriev	leal	96(%edi),%edi
323210710Sddmitriev	movdqa	96(%esp),%xmm3
323310710Sddmitriev	pxor	%xmm0,%xmm0
323410710Sddmitriev	paddq	%xmm1,%xmm1
323510710Sddmitriev	pand	%xmm3,%xmm2
323610710Sddmitriev	pcmpgtd	%xmm1,%xmm0
323710710Sddmitriev	movl	%ebx,%ecx
323810710Sddmitriev	pxor	%xmm2,%xmm1
323910710Sddmitriev	subl	$96,%eax
324010710Sddmitriev	jnc	.L044xts_enc_loop6
324110710Sddmitriev	leal	1(,%ecx,2),%ecx
324210710Sddmitriev	movl	%ebp,%edx
324310710Sddmitriev	movl	%ecx,%ebx
324410710Sddmitriev.L043xts_enc_short:
324510710Sddmitriev	addl	$96,%eax
324610710Sddmitriev	jz	.L045xts_enc_done6x
324710710Sddmitriev	movdqa	%xmm1,%xmm5
324810710Sddmitriev	cmpl	$32,%eax
324910710Sddmitriev	jb	.L046xts_enc_one
325010710Sddmitriev	pshufd	$19,%xmm0,%xmm2
325110710Sddmitriev	pxor	%xmm0,%xmm0
325210710Sddmitriev	paddq	%xmm1,%xmm1
325310710Sddmitriev	pand	%xmm3,%xmm2
325410710Sddmitriev	pcmpgtd	%xmm1,%xmm0
325510710Sddmitriev	pxor	%xmm2,%xmm1
325610710Sddmitriev	je	.L047xts_enc_two
325710710Sddmitriev	pshufd	$19,%xmm0,%xmm2
325810710Sddmitriev	pxor	%xmm0,%xmm0
325910710Sddmitriev	movdqa	%xmm1,%xmm6
326010710Sddmitriev	paddq	%xmm1,%xmm1
326110710Sddmitriev	pand	%xmm3,%xmm2
326210710Sddmitriev	pcmpgtd	%xmm1,%xmm0
326310710Sddmitriev	pxor	%xmm2,%xmm1
326410710Sddmitriev	cmpl	$64,%eax
326510710Sddmitriev	jb	.L048xts_enc_three
326610710Sddmitriev	pshufd	$19,%xmm0,%xmm2
326710710Sddmitriev	pxor	%xmm0,%xmm0
326810710Sddmitriev	movdqa	%xmm1,%xmm7
326910710Sddmitriev	paddq	%xmm1,%xmm1
327010710Sddmitriev	pand	%xmm3,%xmm2
327110710Sddmitriev	pcmpgtd	%xmm1,%xmm0
327210710Sddmitriev	pxor	%xmm2,%xmm1
327310710Sddmitriev	movdqa	%xmm5,(%esp)
327410710Sddmitriev	movdqa	%xmm6,16(%esp)
327510710Sddmitriev	je	.L049xts_enc_four
327610710Sddmitriev	movdqa	%xmm7,32(%esp)
327710710Sddmitriev	pshufd	$19,%xmm0,%xmm7
327810710Sddmitriev	movdqa	%xmm1,48(%esp)
327910710Sddmitriev	paddq	%xmm1,%xmm1
328010710Sddmitriev	pand	%xmm3,%xmm7
328110710Sddmitriev	pxor	%xmm1,%xmm7
328210710Sddmitriev	movdqu	(%esi),%xmm2
328310710Sddmitriev	movdqu	16(%esi),%xmm3
328410710Sddmitriev	movdqu	32(%esi),%xmm4
328510710Sddmitriev	pxor	(%esp),%xmm2
328610710Sddmitriev	movdqu	48(%esi),%xmm5
328710710Sddmitriev	pxor	16(%esp),%xmm3
328810710Sddmitriev	movdqu	64(%esi),%xmm6
328910710Sddmitriev	pxor	32(%esp),%xmm4
329010710Sddmitriev	leal	80(%esi),%esi
329110710Sddmitriev	pxor	48(%esp),%xmm5
329210710Sddmitriev	movdqa	%xmm7,64(%esp)
329310710Sddmitriev	pxor	%xmm7,%xmm6
329410710Sddmitriev	call	_aesni_encrypt6
329510710Sddmitriev	movaps	64(%esp),%xmm1
329610710Sddmitriev	xorps	(%esp),%xmm2
329710710Sddmitriev	xorps	16(%esp),%xmm3
329810710Sddmitriev	xorps	32(%esp),%xmm4
329910710Sddmitriev	movups	%xmm2,(%edi)
330010710Sddmitriev	xorps	48(%esp),%xmm5
330110710Sddmitriev	movups	%xmm3,16(%edi)
330210710Sddmitriev	xorps	%xmm1,%xmm6
330310710Sddmitriev	movups	%xmm4,32(%edi)
330410710Sddmitriev	movups	%xmm5,48(%edi)
330510710Sddmitriev	movups	%xmm6,64(%edi)
330610710Sddmitriev	leal	80(%edi),%edi
330710710Sddmitriev	jmp	.L050xts_enc_done
330810710Sddmitriev.align	16
330910710Sddmitriev.L046xts_enc_one:
331010710Sddmitriev	movups	(%esi),%xmm2
331110710Sddmitriev	leal	16(%esi),%esi
331210710Sddmitriev	xorps	%xmm5,%xmm2
331310710Sddmitriev	movups	(%edx),%xmm0
331410710Sddmitriev	movups	16(%edx),%xmm1
331510710Sddmitriev	leal	32(%edx),%edx
331610710Sddmitriev	xorps	%xmm0,%xmm2
331710710Sddmitriev.L051enc1_loop_9:
331810710Sddmitriev.byte	102,15,56,220,209
331910710Sddmitriev	decl	%ecx
332010710Sddmitriev	movups	(%edx),%xmm1
332110710Sddmitriev	leal	16(%edx),%edx
332210710Sddmitriev	jnz	.L051enc1_loop_9
332310710Sddmitriev.byte	102,15,56,221,209
332410710Sddmitriev	xorps	%xmm5,%xmm2
332510710Sddmitriev	movups	%xmm2,(%edi)
332610710Sddmitriev	leal	16(%edi),%edi
332710710Sddmitriev	movdqa	%xmm5,%xmm1
332810710Sddmitriev	jmp	.L050xts_enc_done
332910710Sddmitriev.align	16
333010710Sddmitriev.L047xts_enc_two:
333110710Sddmitriev	movaps	%xmm1,%xmm6
333210710Sddmitriev	movups	(%esi),%xmm2
333310710Sddmitriev	movups	16(%esi),%xmm3
333410710Sddmitriev	leal	32(%esi),%esi
333510710Sddmitriev	xorps	%xmm5,%xmm2
333610710Sddmitriev	xorps	%xmm6,%xmm3
333710710Sddmitriev	xorps	%xmm4,%xmm4
333810710Sddmitriev	call	_aesni_encrypt3
333910710Sddmitriev	xorps	%xmm5,%xmm2
334010710Sddmitriev	xorps	%xmm6,%xmm3
334110710Sddmitriev	movups	%xmm2,(%edi)
334210710Sddmitriev	movups	%xmm3,16(%edi)
334310710Sddmitriev	leal	32(%edi),%edi
334410710Sddmitriev	movdqa	%xmm6,%xmm1
334510710Sddmitriev	jmp	.L050xts_enc_done
334610710Sddmitriev.align	16
334710710Sddmitriev.L048xts_enc_three:
334810710Sddmitriev	movaps	%xmm1,%xmm7
334910710Sddmitriev	movups	(%esi),%xmm2
335010710Sddmitriev	movups	16(%esi),%xmm3
335110710Sddmitriev	movups	32(%esi),%xmm4
335210710Sddmitriev	leal	48(%esi),%esi
335310710Sddmitriev	xorps	%xmm5,%xmm2
335410710Sddmitriev	xorps	%xmm6,%xmm3
335510710Sddmitriev	xorps	%xmm7,%xmm4
335610710Sddmitriev	call	_aesni_encrypt3
335710710Sddmitriev	xorps	%xmm5,%xmm2
335810710Sddmitriev	xorps	%xmm6,%xmm3
335910710Sddmitriev	xorps	%xmm7,%xmm4
336010710Sddmitriev	movups	%xmm2,(%edi)
336110710Sddmitriev	movups	%xmm3,16(%edi)
336210710Sddmitriev	movups	%xmm4,32(%edi)
336310710Sddmitriev	leal	48(%edi),%edi
336410710Sddmitriev	movdqa	%xmm7,%xmm1
336510710Sddmitriev	jmp	.L050xts_enc_done
336610710Sddmitriev.align	16
336710710Sddmitriev.L049xts_enc_four:
336810710Sddmitriev	movaps	%xmm1,%xmm6
336910710Sddmitriev	movups	(%esi),%xmm2
337010710Sddmitriev	movups	16(%esi),%xmm3
337110710Sddmitriev	movups	32(%esi),%xmm4
337210710Sddmitriev	xorps	(%esp),%xmm2
337310710Sddmitriev	movups	48(%esi),%xmm5
337410710Sddmitriev	leal	64(%esi),%esi
337510710Sddmitriev	xorps	16(%esp),%xmm3
337610710Sddmitriev	xorps	%xmm7,%xmm4
337710710Sddmitriev	xorps	%xmm6,%xmm5
337810710Sddmitriev	call	_aesni_encrypt4
337910710Sddmitriev	xorps	(%esp),%xmm2
338010710Sddmitriev	xorps	16(%esp),%xmm3
338110710Sddmitriev	xorps	%xmm7,%xmm4
338210710Sddmitriev	movups	%xmm2,(%edi)
338310710Sddmitriev	xorps	%xmm6,%xmm5
338410710Sddmitriev	movups	%xmm3,16(%edi)
338510710Sddmitriev	movups	%xmm4,32(%edi)
338610710Sddmitriev	movups	%xmm5,48(%edi)
338710710Sddmitriev	leal	64(%edi),%edi
338810710Sddmitriev	movdqa	%xmm6,%xmm1
338910710Sddmitriev	jmp	.L050xts_enc_done
339010710Sddmitriev.align	16
339110710Sddmitriev.L045xts_enc_done6x:
339210710Sddmitriev	movl	112(%esp),%eax
339310710Sddmitriev	andl	$15,%eax
339410710Sddmitriev	jz	.L052xts_enc_ret
339510710Sddmitriev	movdqa	%xmm1,%xmm5
339610710Sddmitriev	movl	%eax,112(%esp)
339710710Sddmitriev	jmp	.L053xts_enc_steal
339810710Sddmitriev.align	16
339910710Sddmitriev.L050xts_enc_done:
340010710Sddmitriev	movl	112(%esp),%eax
340110710Sddmitriev	pxor	%xmm0,%xmm0
340210710Sddmitriev	andl	$15,%eax
340310710Sddmitriev	jz	.L052xts_enc_ret
340410710Sddmitriev	pcmpgtd	%xmm1,%xmm0
340510710Sddmitriev	movl	%eax,112(%esp)
340610710Sddmitriev	pshufd	$19,%xmm0,%xmm5
340710710Sddmitriev	paddq	%xmm1,%xmm1
340810710Sddmitriev	pand	96(%esp),%xmm5
340910710Sddmitriev	pxor	%xmm1,%xmm5
341010710Sddmitriev.L053xts_enc_steal:
341110710Sddmitriev	movzbl	(%esi),%ecx
341210710Sddmitriev	movzbl	-16(%edi),%edx
341310710Sddmitriev	leal	1(%esi),%esi
341410710Sddmitriev	movb	%cl,-16(%edi)
341510710Sddmitriev	movb	%dl,(%edi)
341610710Sddmitriev	leal	1(%edi),%edi
341710710Sddmitriev	subl	$1,%eax
341810710Sddmitriev	jnz	.L053xts_enc_steal
341910710Sddmitriev	subl	112(%esp),%edi
342010710Sddmitriev	movl	%ebp,%edx
342110710Sddmitriev	movl	%ebx,%ecx
342210710Sddmitriev	movups	-16(%edi),%xmm2
342310710Sddmitriev	xorps	%xmm5,%xmm2
342410710Sddmitriev	movups	(%edx),%xmm0
342510710Sddmitriev	movups	16(%edx),%xmm1
342610710Sddmitriev	leal	32(%edx),%edx
342710710Sddmitriev	xorps	%xmm0,%xmm2
342810710Sddmitriev.L054enc1_loop_10:
342910710Sddmitriev.byte	102,15,56,220,209
343010710Sddmitriev	decl	%ecx
343110710Sddmitriev	movups	(%edx),%xmm1
343210710Sddmitriev	leal	16(%edx),%edx
343310710Sddmitriev	jnz	.L054enc1_loop_10
343410710Sddmitriev.byte	102,15,56,221,209
343510710Sddmitriev	xorps	%xmm5,%xmm2
343610710Sddmitriev	movups	%xmm2,-16(%edi)
343710710Sddmitriev.L052xts_enc_ret:
343810710Sddmitriev	movl	116(%esp),%esp
343910710Sddmitriev	popl	%edi
344010710Sddmitriev	popl	%esi
344110710Sddmitriev	popl	%ebx
344210710Sddmitriev	popl	%ebp
344310710Sddmitriev	ret
344410710Sddmitriev.size	aesni_xts_encrypt,.-.L_aesni_xts_encrypt_begin
344510710Sddmitriev.globl	aesni_xts_decrypt
344610710Sddmitriev.type	aesni_xts_decrypt,@function
344710710Sddmitriev.align	16
344810710Sddmitrievaesni_xts_decrypt:
344910710Sddmitriev.L_aesni_xts_decrypt_begin:
345010710Sddmitriev	pushl	%ebp
345110710Sddmitriev	pushl	%ebx
345210710Sddmitriev	pushl	%esi
345310710Sddmitriev	pushl	%edi
345410710Sddmitriev	movl	36(%esp),%edx
345510710Sddmitriev	movl	40(%esp),%esi
345610710Sddmitriev	movl	240(%edx),%ecx
345710710Sddmitriev	movups	(%esi),%xmm2
345810710Sddmitriev	movups	(%edx),%xmm0
345910710Sddmitriev	movups	16(%edx),%xmm1
346010710Sddmitriev	leal	32(%edx),%edx
346110710Sddmitriev	xorps	%xmm0,%xmm2
346210710Sddmitriev.L055enc1_loop_11:
346310710Sddmitriev.byte	102,15,56,220,209
346410710Sddmitriev	decl	%ecx
346510710Sddmitriev	movups	(%edx),%xmm1
346610710Sddmitriev	leal	16(%edx),%edx
346710710Sddmitriev	jnz	.L055enc1_loop_11
346810710Sddmitriev.byte	102,15,56,221,209
346910710Sddmitriev	movl	20(%esp),%esi
347010710Sddmitriev	movl	24(%esp),%edi
347110710Sddmitriev	movl	28(%esp),%eax
347210710Sddmitriev	movl	32(%esp),%edx
347310710Sddmitriev	movl	%esp,%ebp
347410710Sddmitriev	subl	$120,%esp
347510710Sddmitriev	andl	$-16,%esp
347610710Sddmitriev	xorl	%ebx,%ebx
347710710Sddmitriev	testl	$15,%eax
347810710Sddmitriev	setnz	%bl
347910710Sddmitriev	shll	$4,%ebx
348010710Sddmitriev	subl	%ebx,%eax
348110710Sddmitriev	movl	$135,96(%esp)
348210710Sddmitriev	movl	$0,100(%esp)
348310710Sddmitriev	movl	$1,104(%esp)
348410710Sddmitriev	movl	$0,108(%esp)
348510710Sddmitriev	movl	%eax,112(%esp)
348610710Sddmitriev	movl	%ebp,116(%esp)
348710710Sddmitriev	movl	240(%edx),%ecx
348810710Sddmitriev	movl	%edx,%ebp
348910710Sddmitriev	movl	%ecx,%ebx
349010710Sddmitriev	movdqa	%xmm2,%xmm1
349110710Sddmitriev	pxor	%xmm0,%xmm0
349210710Sddmitriev	movdqa	96(%esp),%xmm3
349310710Sddmitriev	pcmpgtd	%xmm1,%xmm0
349410710Sddmitriev	andl	$-16,%eax
349510710Sddmitriev	subl	$96,%eax
349610710Sddmitriev	jc	.L056xts_dec_short
349710710Sddmitriev	shrl	$1,%ecx
349810710Sddmitriev	movl	%ecx,%ebx
349910710Sddmitriev	jmp	.L057xts_dec_loop6
350010710Sddmitriev.align	16
350110710Sddmitriev.L057xts_dec_loop6:
350210710Sddmitriev	pshufd	$19,%xmm0,%xmm2
350310710Sddmitriev	pxor	%xmm0,%xmm0
350410710Sddmitriev	movdqa	%xmm1,(%esp)
350510710Sddmitriev	paddq	%xmm1,%xmm1
350610710Sddmitriev	pand	%xmm3,%xmm2
350710710Sddmitriev	pcmpgtd	%xmm1,%xmm0
350810710Sddmitriev	pxor	%xmm2,%xmm1
350910710Sddmitriev	pshufd	$19,%xmm0,%xmm2
351010710Sddmitriev	pxor	%xmm0,%xmm0
351110710Sddmitriev	movdqa	%xmm1,16(%esp)
351210710Sddmitriev	paddq	%xmm1,%xmm1
351310710Sddmitriev	pand	%xmm3,%xmm2
351410710Sddmitriev	pcmpgtd	%xmm1,%xmm0
351510710Sddmitriev	pxor	%xmm2,%xmm1
351610710Sddmitriev	pshufd	$19,%xmm0,%xmm2
351710710Sddmitriev	pxor	%xmm0,%xmm0
351810710Sddmitriev	movdqa	%xmm1,32(%esp)
351910710Sddmitriev	paddq	%xmm1,%xmm1
352010710Sddmitriev	pand	%xmm3,%xmm2
352110710Sddmitriev	pcmpgtd	%xmm1,%xmm0
352210710Sddmitriev	pxor	%xmm2,%xmm1
352310710Sddmitriev	pshufd	$19,%xmm0,%xmm2
352410710Sddmitriev	pxor	%xmm0,%xmm0
352510710Sddmitriev	movdqa	%xmm1,48(%esp)
352610710Sddmitriev	paddq	%xmm1,%xmm1
352710710Sddmitriev	pand	%xmm3,%xmm2
352810710Sddmitriev	pcmpgtd	%xmm1,%xmm0
352910710Sddmitriev	pxor	%xmm2,%xmm1
353010710Sddmitriev	pshufd	$19,%xmm0,%xmm7
353110710Sddmitriev	movdqa	%xmm1,64(%esp)
353210710Sddmitriev	paddq	%xmm1,%xmm1
353310710Sddmitriev	movups	(%ebp),%xmm0
353410710Sddmitriev	pand	%xmm3,%xmm7
353510710Sddmitriev	movups	(%esi),%xmm2
353610710Sddmitriev	pxor	%xmm1,%xmm7
353710710Sddmitriev	movdqu	16(%esi),%xmm3
353810710Sddmitriev	xorps	%xmm0,%xmm2
353910710Sddmitriev	movdqu	32(%esi),%xmm4
354010710Sddmitriev	pxor	%xmm0,%xmm3
354110710Sddmitriev	movdqu	48(%esi),%xmm5
354210710Sddmitriev	pxor	%xmm0,%xmm4
354310710Sddmitriev	movdqu	64(%esi),%xmm6
354410710Sddmitriev	pxor	%xmm0,%xmm5
354510710Sddmitriev	movdqu	80(%esi),%xmm1
354610710Sddmitriev	pxor	%xmm0,%xmm6
354710710Sddmitriev	leal	96(%esi),%esi
354810710Sddmitriev	pxor	(%esp),%xmm2
354910710Sddmitriev	movdqa	%xmm7,80(%esp)
355010710Sddmitriev	pxor	%xmm1,%xmm7
355110710Sddmitriev	movups	16(%ebp),%xmm1
355210710Sddmitriev	leal	32(%ebp),%edx
355310710Sddmitriev	pxor	16(%esp),%xmm3
355410710Sddmitriev.byte	102,15,56,222,209
355510710Sddmitriev	pxor	32(%esp),%xmm4
355610710Sddmitriev.byte	102,15,56,222,217
355710710Sddmitriev	pxor	48(%esp),%xmm5
355810710Sddmitriev	decl	%ecx
355910710Sddmitriev.byte	102,15,56,222,225
356010710Sddmitriev	pxor	64(%esp),%xmm6
356110710Sddmitriev.byte	102,15,56,222,233
356210710Sddmitriev	pxor	%xmm0,%xmm7
356310710Sddmitriev.byte	102,15,56,222,241
356410710Sddmitriev	movups	(%edx),%xmm0
356510710Sddmitriev.byte	102,15,56,222,249
356610710Sddmitriev	call	.L_aesni_decrypt6_enter
356710710Sddmitriev	movdqa	80(%esp),%xmm1
356810710Sddmitriev	pxor	%xmm0,%xmm0
356910710Sddmitriev	xorps	(%esp),%xmm2
357010710Sddmitriev	pcmpgtd	%xmm1,%xmm0
357110710Sddmitriev	xorps	16(%esp),%xmm3
357210710Sddmitriev	movups	%xmm2,(%edi)
357310710Sddmitriev	xorps	32(%esp),%xmm4
357410710Sddmitriev	movups	%xmm3,16(%edi)
357510710Sddmitriev	xorps	48(%esp),%xmm5
357610710Sddmitriev	movups	%xmm4,32(%edi)
357710710Sddmitriev	xorps	64(%esp),%xmm6
357810710Sddmitriev	movups	%xmm5,48(%edi)
357910710Sddmitriev	xorps	%xmm1,%xmm7
358010710Sddmitriev	movups	%xmm6,64(%edi)
358110710Sddmitriev	pshufd	$19,%xmm0,%xmm2
358210710Sddmitriev	movups	%xmm7,80(%edi)
358310710Sddmitriev	leal	96(%edi),%edi
358410710Sddmitriev	movdqa	96(%esp),%xmm3
358510710Sddmitriev	pxor	%xmm0,%xmm0
358610710Sddmitriev	paddq	%xmm1,%xmm1
358710710Sddmitriev	pand	%xmm3,%xmm2
358810710Sddmitriev	pcmpgtd	%xmm1,%xmm0
358910710Sddmitriev	movl	%ebx,%ecx
359010710Sddmitriev	pxor	%xmm2,%xmm1
359110710Sddmitriev	subl	$96,%eax
359210710Sddmitriev	jnc	.L057xts_dec_loop6
359310710Sddmitriev	leal	1(,%ecx,2),%ecx
359410710Sddmitriev	movl	%ebp,%edx
359510710Sddmitriev	movl	%ecx,%ebx
359610710Sddmitriev.L056xts_dec_short:
359710710Sddmitriev	addl	$96,%eax
359810710Sddmitriev	jz	.L058xts_dec_done6x
359910710Sddmitriev	movdqa	%xmm1,%xmm5
360010710Sddmitriev	cmpl	$32,%eax
360110710Sddmitriev	jb	.L059xts_dec_one
360210710Sddmitriev	pshufd	$19,%xmm0,%xmm2
360310710Sddmitriev	pxor	%xmm0,%xmm0
360410710Sddmitriev	paddq	%xmm1,%xmm1
360510710Sddmitriev	pand	%xmm3,%xmm2
360610710Sddmitriev	pcmpgtd	%xmm1,%xmm0
360710710Sddmitriev	pxor	%xmm2,%xmm1
360810710Sddmitriev	je	.L060xts_dec_two
360910710Sddmitriev	pshufd	$19,%xmm0,%xmm2
361010710Sddmitriev	pxor	%xmm0,%xmm0
361110710Sddmitriev	movdqa	%xmm1,%xmm6
361210710Sddmitriev	paddq	%xmm1,%xmm1
361310710Sddmitriev	pand	%xmm3,%xmm2
361410710Sddmitriev	pcmpgtd	%xmm1,%xmm0
361510710Sddmitriev	pxor	%xmm2,%xmm1
361610710Sddmitriev	cmpl	$64,%eax
361710710Sddmitriev	jb	.L061xts_dec_three
361810710Sddmitriev	pshufd	$19,%xmm0,%xmm2
361910710Sddmitriev	pxor	%xmm0,%xmm0
362010710Sddmitriev	movdqa	%xmm1,%xmm7
362110710Sddmitriev	paddq	%xmm1,%xmm1
362210710Sddmitriev	pand	%xmm3,%xmm2
362310710Sddmitriev	pcmpgtd	%xmm1,%xmm0
362410710Sddmitriev	pxor	%xmm2,%xmm1
362510710Sddmitriev	movdqa	%xmm5,(%esp)
362610710Sddmitriev	movdqa	%xmm6,16(%esp)
362710710Sddmitriev	je	.L062xts_dec_four
362810710Sddmitriev	movdqa	%xmm7,32(%esp)
362910710Sddmitriev	pshufd	$19,%xmm0,%xmm7
363010710Sddmitriev	movdqa	%xmm1,48(%esp)
363110710Sddmitriev	paddq	%xmm1,%xmm1
363210710Sddmitriev	pand	%xmm3,%xmm7
363310710Sddmitriev	pxor	%xmm1,%xmm7
363410710Sddmitriev	movdqu	(%esi),%xmm2
363510710Sddmitriev	movdqu	16(%esi),%xmm3
363610710Sddmitriev	movdqu	32(%esi),%xmm4
363710710Sddmitriev	pxor	(%esp),%xmm2
363810710Sddmitriev	movdqu	48(%esi),%xmm5
363910710Sddmitriev	pxor	16(%esp),%xmm3
364010710Sddmitriev	movdqu	64(%esi),%xmm6
364110710Sddmitriev	pxor	32(%esp),%xmm4
364210710Sddmitriev	leal	80(%esi),%esi
364310710Sddmitriev	pxor	48(%esp),%xmm5
364410710Sddmitriev	movdqa	%xmm7,64(%esp)
364510710Sddmitriev	pxor	%xmm7,%xmm6
364610710Sddmitriev	call	_aesni_decrypt6
364710710Sddmitriev	movaps	64(%esp),%xmm1
364810710Sddmitriev	xorps	(%esp),%xmm2
364910710Sddmitriev	xorps	16(%esp),%xmm3
365010710Sddmitriev	xorps	32(%esp),%xmm4
365110710Sddmitriev	movups	%xmm2,(%edi)
365210710Sddmitriev	xorps	48(%esp),%xmm5
365310710Sddmitriev	movups	%xmm3,16(%edi)
365410710Sddmitriev	xorps	%xmm1,%xmm6
365510710Sddmitriev	movups	%xmm4,32(%edi)
365610710Sddmitriev	movups	%xmm5,48(%edi)
365710710Sddmitriev	movups	%xmm6,64(%edi)
365810710Sddmitriev	leal	80(%edi),%edi
365910710Sddmitriev	jmp	.L063xts_dec_done
366010710Sddmitriev.align	16
366110710Sddmitriev.L059xts_dec_one:
366210710Sddmitriev	movups	(%esi),%xmm2
366310710Sddmitriev	leal	16(%esi),%esi
366410710Sddmitriev	xorps	%xmm5,%xmm2
366510710Sddmitriev	movups	(%edx),%xmm0
366610710Sddmitriev	movups	16(%edx),%xmm1
366710710Sddmitriev	leal	32(%edx),%edx
366810710Sddmitriev	xorps	%xmm0,%xmm2
366910710Sddmitriev.L064dec1_loop_12:
367010710Sddmitriev.byte	102,15,56,222,209
367110710Sddmitriev	decl	%ecx
367210710Sddmitriev	movups	(%edx),%xmm1
367310710Sddmitriev	leal	16(%edx),%edx
367410710Sddmitriev	jnz	.L064dec1_loop_12
367510710Sddmitriev.byte	102,15,56,223,209
367610710Sddmitriev	xorps	%xmm5,%xmm2
367710710Sddmitriev	movups	%xmm2,(%edi)
367810710Sddmitriev	leal	16(%edi),%edi
367910710Sddmitriev	movdqa	%xmm5,%xmm1
368010710Sddmitriev	jmp	.L063xts_dec_done
368110710Sddmitriev.align	16
368210710Sddmitriev.L060xts_dec_two:
368310710Sddmitriev	movaps	%xmm1,%xmm6
368410710Sddmitriev	movups	(%esi),%xmm2
368510710Sddmitriev	movups	16(%esi),%xmm3
368610710Sddmitriev	leal	32(%esi),%esi
368710710Sddmitriev	xorps	%xmm5,%xmm2
368810710Sddmitriev	xorps	%xmm6,%xmm3
368910710Sddmitriev	call	_aesni_decrypt3
369010710Sddmitriev	xorps	%xmm5,%xmm2
369110710Sddmitriev	xorps	%xmm6,%xmm3
369210710Sddmitriev	movups	%xmm2,(%edi)
369310710Sddmitriev	movups	%xmm3,16(%edi)
369410710Sddmitriev	leal	32(%edi),%edi
369510710Sddmitriev	movdqa	%xmm6,%xmm1
369610710Sddmitriev	jmp	.L063xts_dec_done
369710710Sddmitriev.align	16
369810710Sddmitriev.L061xts_dec_three:
369910710Sddmitriev	movaps	%xmm1,%xmm7
370010710Sddmitriev	movups	(%esi),%xmm2
370110710Sddmitriev	movups	16(%esi),%xmm3
370210710Sddmitriev	movups	32(%esi),%xmm4
370310710Sddmitriev	leal	48(%esi),%esi
370410710Sddmitriev	xorps	%xmm5,%xmm2
370510710Sddmitriev	xorps	%xmm6,%xmm3
370610710Sddmitriev	xorps	%xmm7,%xmm4
370710710Sddmitriev	call	_aesni_decrypt3
370810710Sddmitriev	xorps	%xmm5,%xmm2
370910710Sddmitriev	xorps	%xmm6,%xmm3
371010710Sddmitriev	xorps	%xmm7,%xmm4
371110710Sddmitriev	movups	%xmm2,(%edi)
371210710Sddmitriev	movups	%xmm3,16(%edi)
371310710Sddmitriev	movups	%xmm4,32(%edi)
371410710Sddmitriev	leal	48(%edi),%edi
371510710Sddmitriev	movdqa	%xmm7,%xmm1
371610710Sddmitriev	jmp	.L063xts_dec_done
371710710Sddmitriev.align	16
371810710Sddmitriev.L062xts_dec_four:
371910710Sddmitriev	movaps	%xmm1,%xmm6
372010710Sddmitriev	movups	(%esi),%xmm2
372110710Sddmitriev	movups	16(%esi),%xmm3
372210710Sddmitriev	movups	32(%esi),%xmm4
372310710Sddmitriev	xorps	(%esp),%xmm2
372410710Sddmitriev	movups	48(%esi),%xmm5
372510710Sddmitriev	leal	64(%esi),%esi
372610710Sddmitriev	xorps	16(%esp),%xmm3
372710710Sddmitriev	xorps	%xmm7,%xmm4
372810710Sddmitriev	xorps	%xmm6,%xmm5
372910710Sddmitriev	call	_aesni_decrypt4
373010710Sddmitriev	xorps	(%esp),%xmm2
373110710Sddmitriev	xorps	16(%esp),%xmm3
373210710Sddmitriev	xorps	%xmm7,%xmm4
373310710Sddmitriev	movups	%xmm2,(%edi)
373410710Sddmitriev	xorps	%xmm6,%xmm5
373510710Sddmitriev	movups	%xmm3,16(%edi)
373610710Sddmitriev	movups	%xmm4,32(%edi)
373710710Sddmitriev	movups	%xmm5,48(%edi)
373810710Sddmitriev	leal	64(%edi),%edi
373910710Sddmitriev	movdqa	%xmm6,%xmm1
374010710Sddmitriev	jmp	.L063xts_dec_done
374110710Sddmitriev.align	16
374210710Sddmitriev.L058xts_dec_done6x:
374310710Sddmitriev	movl	112(%esp),%eax
374410710Sddmitriev	andl	$15,%eax
374510710Sddmitriev	jz	.L065xts_dec_ret
374610710Sddmitriev	movl	%eax,112(%esp)
374710710Sddmitriev	jmp	.L066xts_dec_only_one_more
374810710Sddmitriev.align	16
374910710Sddmitriev.L063xts_dec_done:
375010710Sddmitriev	movl	112(%esp),%eax
375110710Sddmitriev	pxor	%xmm0,%xmm0
375210710Sddmitriev	andl	$15,%eax
375310710Sddmitriev	jz	.L065xts_dec_ret
375410710Sddmitriev	pcmpgtd	%xmm1,%xmm0
375510710Sddmitriev	movl	%eax,112(%esp)
375610710Sddmitriev	pshufd	$19,%xmm0,%xmm2
375710710Sddmitriev	pxor	%xmm0,%xmm0
375810710Sddmitriev	movdqa	96(%esp),%xmm3
375910710Sddmitriev	paddq	%xmm1,%xmm1
376010710Sddmitriev	pand	%xmm3,%xmm2
376110710Sddmitriev	pcmpgtd	%xmm1,%xmm0
376210710Sddmitriev	pxor	%xmm2,%xmm1
376310710Sddmitriev.L066xts_dec_only_one_more:
376410710Sddmitriev	pshufd	$19,%xmm0,%xmm5
376510710Sddmitriev	movdqa	%xmm1,%xmm6
376610710Sddmitriev	paddq	%xmm1,%xmm1
376710710Sddmitriev	pand	%xmm3,%xmm5
376810710Sddmitriev	pxor	%xmm1,%xmm5
376910710Sddmitriev	movl	%ebp,%edx
377010710Sddmitriev	movl	%ebx,%ecx
377110710Sddmitriev	movups	(%esi),%xmm2
377210710Sddmitriev	xorps	%xmm5,%xmm2
377310710Sddmitriev	movups	(%edx),%xmm0
377410710Sddmitriev	movups	16(%edx),%xmm1
377510710Sddmitriev	leal	32(%edx),%edx
377610710Sddmitriev	xorps	%xmm0,%xmm2
377710710Sddmitriev.L067dec1_loop_13:
377810710Sddmitriev.byte	102,15,56,222,209
377910710Sddmitriev	decl	%ecx
378010710Sddmitriev	movups	(%edx),%xmm1
378110710Sddmitriev	leal	16(%edx),%edx
378210710Sddmitriev	jnz	.L067dec1_loop_13
378310710Sddmitriev.byte	102,15,56,223,209
378410710Sddmitriev	xorps	%xmm5,%xmm2
378510710Sddmitriev	movups	%xmm2,(%edi)
378610710Sddmitriev.L068xts_dec_steal:
378710710Sddmitriev	movzbl	16(%esi),%ecx
378810710Sddmitriev	movzbl	(%edi),%edx
378910710Sddmitriev	leal	1(%esi),%esi
379010710Sddmitriev	movb	%cl,(%edi)
379110710Sddmitriev	movb	%dl,16(%edi)
379210710Sddmitriev	leal	1(%edi),%edi
379310710Sddmitriev	subl	$1,%eax
379410710Sddmitriev	jnz	.L068xts_dec_steal
379510710Sddmitriev	subl	112(%esp),%edi
379610710Sddmitriev	movl	%ebp,%edx
379710710Sddmitriev	movl	%ebx,%ecx
379810710Sddmitriev	movups	(%edi),%xmm2
379910710Sddmitriev	xorps	%xmm6,%xmm2
380010710Sddmitriev	movups	(%edx),%xmm0
380110710Sddmitriev	movups	16(%edx),%xmm1
380210710Sddmitriev	leal	32(%edx),%edx
380310710Sddmitriev	xorps	%xmm0,%xmm2
380410710Sddmitriev.L069dec1_loop_14:
380510710Sddmitriev.byte	102,15,56,222,209
380610710Sddmitriev	decl	%ecx
380710710Sddmitriev	movups	(%edx),%xmm1
380810710Sddmitriev	leal	16(%edx),%edx
380910710Sddmitriev	jnz	.L069dec1_loop_14
381010710Sddmitriev.byte	102,15,56,223,209
381110710Sddmitriev	xorps	%xmm6,%xmm2
381210710Sddmitriev	movups	%xmm2,(%edi)
381310710Sddmitriev.L065xts_dec_ret:
381410710Sddmitriev	movl	116(%esp),%esp
381510710Sddmitriev	popl	%edi
381610710Sddmitriev	popl	%esi
381710710Sddmitriev	popl	%ebx
381810710Sddmitriev	popl	%ebp
381910710Sddmitriev	ret
382010710Sddmitriev.size	aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin
382110710Sddmitriev.globl	aesni_cbc_encrypt
382210710Sddmitriev.type	aesni_cbc_encrypt,@function
382310710Sddmitriev.align	16
382410710Sddmitrievaesni_cbc_encrypt:
382510710Sddmitriev.L_aesni_cbc_encrypt_begin:
382610710Sddmitriev	pushl	%ebp
382710710Sddmitriev	pushl	%ebx
382810710Sddmitriev	pushl	%esi
382910710Sddmitriev	pushl	%edi
383010710Sddmitriev	movl	20(%esp),%esi
383110710Sddmitriev	movl	%esp,%ebx
383210710Sddmitriev	movl	24(%esp),%edi
383310710Sddmitriev	subl	$24,%ebx
383410710Sddmitriev	movl	28(%esp),%eax
383510710Sddmitriev	andl	$-16,%ebx
383610710Sddmitriev	movl	32(%esp),%edx
383710710Sddmitriev	movl	36(%esp),%ebp
383810710Sddmitriev	testl	%eax,%eax
383910710Sddmitriev	jz	.L070cbc_abort
384010710Sddmitriev	cmpl	$0,40(%esp)
384110710Sddmitriev	xchgl	%esp,%ebx
384210710Sddmitriev	movups	(%ebp),%xmm7
384310710Sddmitriev	movl	240(%edx),%ecx
384410710Sddmitriev	movl	%edx,%ebp
384510710Sddmitriev	movl	%ebx,16(%esp)
384610710Sddmitriev	movl	%ecx,%ebx
384710710Sddmitriev	je	.L071cbc_decrypt
384810710Sddmitriev	movaps	%xmm7,%xmm2
384910710Sddmitriev	cmpl	$16,%eax
385010710Sddmitriev	jb	.L072cbc_enc_tail
385110710Sddmitriev	subl	$16,%eax
385210710Sddmitriev	jmp	.L073cbc_enc_loop
385310710Sddmitriev.align	16
385410710Sddmitriev.L073cbc_enc_loop:
385510710Sddmitriev	movups	(%esi),%xmm7
385610710Sddmitriev	leal	16(%esi),%esi
385710710Sddmitriev	movups	(%edx),%xmm0
385810710Sddmitriev	movups	16(%edx),%xmm1
385910710Sddmitriev	xorps	%xmm0,%xmm7
386010710Sddmitriev	leal	32(%edx),%edx
386110710Sddmitriev	xorps	%xmm7,%xmm2
386210710Sddmitriev.L074enc1_loop_15:
386310710Sddmitriev.byte	102,15,56,220,209
386410710Sddmitriev	decl	%ecx
386510710Sddmitriev	movups	(%edx),%xmm1
386610710Sddmitriev	leal	16(%edx),%edx
386710710Sddmitriev	jnz	.L074enc1_loop_15
386810710Sddmitriev.byte	102,15,56,221,209
386910710Sddmitriev	movl	%ebx,%ecx
387010710Sddmitriev	movl	%ebp,%edx
387110710Sddmitriev	movups	%xmm2,(%edi)
387210710Sddmitriev	leal	16(%edi),%edi
387310710Sddmitriev	subl	$16,%eax
387410710Sddmitriev	jnc	.L073cbc_enc_loop
387510710Sddmitriev	addl	$16,%eax
387610710Sddmitriev	jnz	.L072cbc_enc_tail
387710710Sddmitriev	movaps	%xmm2,%xmm7
387810710Sddmitriev	jmp	.L075cbc_ret
387910710Sddmitriev.L072cbc_enc_tail:
388010710Sddmitriev	movl	%eax,%ecx
388110710Sddmitriev.long	2767451785
388210710Sddmitriev	movl	$16,%ecx
388310710Sddmitriev	subl	%eax,%ecx
388410710Sddmitriev	xorl	%eax,%eax
388510710Sddmitriev.long	2868115081
388610710Sddmitriev	leal	-16(%edi),%edi
388710710Sddmitriev	movl	%ebx,%ecx
388810710Sddmitriev	movl	%edi,%esi
388910710Sddmitriev	movl	%ebp,%edx
389010710Sddmitriev	jmp	.L073cbc_enc_loop
389110710Sddmitriev.align	16
389210710Sddmitriev.L071cbc_decrypt:
389310710Sddmitriev	cmpl	$80,%eax
389410710Sddmitriev	jbe	.L076cbc_dec_tail
389510710Sddmitriev	movaps	%xmm7,(%esp)
389610710Sddmitriev	subl	$80,%eax
389710710Sddmitriev	jmp	.L077cbc_dec_loop6_enter
389810710Sddmitriev.align	16
389910710Sddmitriev.L078cbc_dec_loop6:
390010710Sddmitriev	movaps	%xmm0,(%esp)
390110710Sddmitriev	movups	%xmm7,(%edi)
390210710Sddmitriev	leal	16(%edi),%edi
390310710Sddmitriev.L077cbc_dec_loop6_enter:
390410710Sddmitriev	movdqu	(%esi),%xmm2
390510710Sddmitriev	movdqu	16(%esi),%xmm3
390610710Sddmitriev	movdqu	32(%esi),%xmm4
390710710Sddmitriev	movdqu	48(%esi),%xmm5
390810710Sddmitriev	movdqu	64(%esi),%xmm6
390910710Sddmitriev	movdqu	80(%esi),%xmm7
391010710Sddmitriev	call	_aesni_decrypt6
391110710Sddmitriev	movups	(%esi),%xmm1
391210710Sddmitriev	movups	16(%esi),%xmm0
391310710Sddmitriev	xorps	(%esp),%xmm2
391410710Sddmitriev	xorps	%xmm1,%xmm3
391510710Sddmitriev	movups	32(%esi),%xmm1
391610710Sddmitriev	xorps	%xmm0,%xmm4
391710710Sddmitriev	movups	48(%esi),%xmm0
391810710Sddmitriev	xorps	%xmm1,%xmm5
391910710Sddmitriev	movups	64(%esi),%xmm1
392010710Sddmitriev	xorps	%xmm0,%xmm6
392110710Sddmitriev	movups	80(%esi),%xmm0
392210710Sddmitriev	xorps	%xmm1,%xmm7
392310710Sddmitriev	movups	%xmm2,(%edi)
392410710Sddmitriev	movups	%xmm3,16(%edi)
392510710Sddmitriev	leal	96(%esi),%esi
392610710Sddmitriev	movups	%xmm4,32(%edi)
392710710Sddmitriev	movl	%ebx,%ecx
392810710Sddmitriev	movups	%xmm5,48(%edi)
392910710Sddmitriev	movl	%ebp,%edx
393010710Sddmitriev	movups	%xmm6,64(%edi)
393110710Sddmitriev	leal	80(%edi),%edi
393210710Sddmitriev	subl	$96,%eax
393310710Sddmitriev	ja	.L078cbc_dec_loop6
393410710Sddmitriev	movaps	%xmm7,%xmm2
393510710Sddmitriev	movaps	%xmm0,%xmm7
393610710Sddmitriev	addl	$80,%eax
393710710Sddmitriev	jle	.L079cbc_dec_tail_collected
393810710Sddmitriev	movups	%xmm2,(%edi)
393910710Sddmitriev	leal	16(%edi),%edi
394010710Sddmitriev.L076cbc_dec_tail:
394110710Sddmitriev	movups	(%esi),%xmm2
394210710Sddmitriev	movaps	%xmm2,%xmm6
394310710Sddmitriev	cmpl	$16,%eax
394410710Sddmitriev	jbe	.L080cbc_dec_one
394510710Sddmitriev	movups	16(%esi),%xmm3
394610710Sddmitriev	movaps	%xmm3,%xmm5
394710710Sddmitriev	cmpl	$32,%eax
394810710Sddmitriev	jbe	.L081cbc_dec_two
394910710Sddmitriev	movups	32(%esi),%xmm4
395010710Sddmitriev	cmpl	$48,%eax
395110710Sddmitriev	jbe	.L082cbc_dec_three
395210710Sddmitriev	movups	48(%esi),%xmm5
395310710Sddmitriev	cmpl	$64,%eax
395410710Sddmitriev	jbe	.L083cbc_dec_four
395510710Sddmitriev	movups	64(%esi),%xmm6
395610710Sddmitriev	movaps	%xmm7,(%esp)
395710710Sddmitriev	movups	(%esi),%xmm2
395810710Sddmitriev	xorps	%xmm7,%xmm7
395910710Sddmitriev	call	_aesni_decrypt6
396010710Sddmitriev	movups	(%esi),%xmm1
396110710Sddmitriev	movups	16(%esi),%xmm0
396210710Sddmitriev	xorps	(%esp),%xmm2
396310710Sddmitriev	xorps	%xmm1,%xmm3
396410710Sddmitriev	movups	32(%esi),%xmm1
396510710Sddmitriev	xorps	%xmm0,%xmm4
396610710Sddmitriev	movups	48(%esi),%xmm0
396710710Sddmitriev	xorps	%xmm1,%xmm5
396810710Sddmitriev	movups	64(%esi),%xmm7
396910710Sddmitriev	xorps	%xmm0,%xmm6
397010710Sddmitriev	movups	%xmm2,(%edi)
397110710Sddmitriev	movups	%xmm3,16(%edi)
397210710Sddmitriev	movups	%xmm4,32(%edi)
397310710Sddmitriev	movups	%xmm5,48(%edi)
397410710Sddmitriev	leal	64(%edi),%edi
397510710Sddmitriev	movaps	%xmm6,%xmm2
397610710Sddmitriev	subl	$80,%eax
397710710Sddmitriev	jmp	.L079cbc_dec_tail_collected
397810710Sddmitriev.align	16
397910710Sddmitriev.L080cbc_dec_one:
398010710Sddmitriev	movups	(%edx),%xmm0
398110710Sddmitriev	movups	16(%edx),%xmm1
398210710Sddmitriev	leal	32(%edx),%edx
398310710Sddmitriev	xorps	%xmm0,%xmm2
398410710Sddmitriev.L084dec1_loop_16:
398510710Sddmitriev.byte	102,15,56,222,209
398610710Sddmitriev	decl	%ecx
398710710Sddmitriev	movups	(%edx),%xmm1
398810710Sddmitriev	leal	16(%edx),%edx
398910710Sddmitriev	jnz	.L084dec1_loop_16
399010710Sddmitriev.byte	102,15,56,223,209
399110710Sddmitriev	xorps	%xmm7,%xmm2
399210710Sddmitriev	movaps	%xmm6,%xmm7
399310710Sddmitriev	subl	$16,%eax
399410710Sddmitriev	jmp	.L079cbc_dec_tail_collected
399510710Sddmitriev.align	16
399610710Sddmitriev.L081cbc_dec_two:
399710710Sddmitriev	xorps	%xmm4,%xmm4
399810710Sddmitriev	call	_aesni_decrypt3
399910710Sddmitriev	xorps	%xmm7,%xmm2
400010710Sddmitriev	xorps	%xmm6,%xmm3
400110710Sddmitriev	movups	%xmm2,(%edi)
400210710Sddmitriev	movaps	%xmm3,%xmm2
400310710Sddmitriev	leal	16(%edi),%edi
400410710Sddmitriev	movaps	%xmm5,%xmm7
400510710Sddmitriev	subl	$32,%eax
400610710Sddmitriev	jmp	.L079cbc_dec_tail_collected
400710710Sddmitriev.align	16
400810710Sddmitriev.L082cbc_dec_three:
400910710Sddmitriev	call	_aesni_decrypt3
401010710Sddmitriev	xorps	%xmm7,%xmm2
401110710Sddmitriev	xorps	%xmm6,%xmm3
401210710Sddmitriev	xorps	%xmm5,%xmm4
401310710Sddmitriev	movups	%xmm2,(%edi)
401410710Sddmitriev	movaps	%xmm4,%xmm2
401510710Sddmitriev	movups	%xmm3,16(%edi)
401610710Sddmitriev	leal	32(%edi),%edi
401710710Sddmitriev	movups	32(%esi),%xmm7
401810710Sddmitriev	subl	$48,%eax
401910710Sddmitriev	jmp	.L079cbc_dec_tail_collected
402010710Sddmitriev.align	16
402110710Sddmitriev.L083cbc_dec_four:
402210710Sddmitriev	call	_aesni_decrypt4
402310710Sddmitriev	movups	16(%esi),%xmm1
402410710Sddmitriev	movups	32(%esi),%xmm0
402510710Sddmitriev	xorps	%xmm7,%xmm2
402610710Sddmitriev	movups	48(%esi),%xmm7
402710710Sddmitriev	xorps	%xmm6,%xmm3
402810710Sddmitriev	movups	%xmm2,(%edi)
402910710Sddmitriev	xorps	%xmm1,%xmm4
403010710Sddmitriev	movups	%xmm3,16(%edi)
403110710Sddmitriev	xorps	%xmm0,%xmm5
403210710Sddmitriev	movups	%xmm4,32(%edi)
403310710Sddmitriev	leal	48(%edi),%edi
403410710Sddmitriev	movaps	%xmm5,%xmm2
403510710Sddmitriev	subl	$64,%eax
403610710Sddmitriev.L079cbc_dec_tail_collected:
403710710Sddmitriev	andl	$15,%eax
403810710Sddmitriev	jnz	.L085cbc_dec_tail_partial
403910710Sddmitriev	movups	%xmm2,(%edi)
404010710Sddmitriev	jmp	.L075cbc_ret
404110710Sddmitriev.align	16
404210710Sddmitriev.L085cbc_dec_tail_partial:
404310710Sddmitriev	movaps	%xmm2,(%esp)
404410710Sddmitriev	movl	$16,%ecx
404510710Sddmitriev	movl	%esp,%esi
404610710Sddmitriev	subl	%eax,%ecx
404710710Sddmitriev.long	2767451785
404810710Sddmitriev.L075cbc_ret:
404910710Sddmitriev	movl	16(%esp),%esp
405010710Sddmitriev	movl	36(%esp),%ebp
405110710Sddmitriev	movups	%xmm7,(%ebp)
405210710Sddmitriev.L070cbc_abort:
405310710Sddmitriev	popl	%edi
405410710Sddmitriev	popl	%esi
405510710Sddmitriev	popl	%ebx
405610710Sddmitriev	popl	%ebp
405710710Sddmitriev	ret
405810710Sddmitriev.size	aesni_cbc_encrypt,.-.L_aesni_cbc_encrypt_begin
405910710Sddmitriev.type	_aesni_set_encrypt_key,@function
406010710Sddmitriev.align	16
406110710Sddmitriev_aesni_set_encrypt_key:
406210710Sddmitriev	testl	%eax,%eax
406310710Sddmitriev	jz	.L086bad_pointer
406410710Sddmitriev	testl	%edx,%edx
406510710Sddmitriev	jz	.L086bad_pointer
406610710Sddmitriev	movups	(%eax),%xmm0
406710710Sddmitriev	xorps	%xmm4,%xmm4
406810710Sddmitriev	leal	16(%edx),%edx
406910710Sddmitriev	cmpl	$256,%ecx
407010710Sddmitriev	je	.L08714rounds
407110710Sddmitriev	cmpl	$192,%ecx
407210710Sddmitriev	je	.L08812rounds
407310710Sddmitriev	cmpl	$128,%ecx
407410710Sddmitriev	jne	.L089bad_keybits
407510710Sddmitriev.align	16
407610710Sddmitriev.L09010rounds:
407710710Sddmitriev	movl	$9,%ecx
407810710Sddmitriev	movups	%xmm0,-16(%edx)
407910710Sddmitriev.byte	102,15,58,223,200,1
408010710Sddmitriev	call	.L091key_128_cold
408110710Sddmitriev.byte	102,15,58,223,200,2
408210710Sddmitriev	call	.L092key_128
408310710Sddmitriev.byte	102,15,58,223,200,4
408410710Sddmitriev	call	.L092key_128
408510710Sddmitriev.byte	102,15,58,223,200,8
408610710Sddmitriev	call	.L092key_128
408710710Sddmitriev.byte	102,15,58,223,200,16
408810710Sddmitriev	call	.L092key_128
408910710Sddmitriev.byte	102,15,58,223,200,32
409010710Sddmitriev	call	.L092key_128
409110710Sddmitriev.byte	102,15,58,223,200,64
409210710Sddmitriev	call	.L092key_128
409310710Sddmitriev.byte	102,15,58,223,200,128
409410710Sddmitriev	call	.L092key_128
409510710Sddmitriev.byte	102,15,58,223,200,27
409610710Sddmitriev	call	.L092key_128
409710710Sddmitriev.byte	102,15,58,223,200,54
409810710Sddmitriev	call	.L092key_128
409910710Sddmitriev	movups	%xmm0,(%edx)
410010710Sddmitriev	movl	%ecx,80(%edx)
410110710Sddmitriev	xorl	%eax,%eax
410210710Sddmitriev	ret
410310710Sddmitriev.align	16
410410710Sddmitriev.L092key_128:
410510710Sddmitriev	movups	%xmm0,(%edx)
410610710Sddmitriev	leal	16(%edx),%edx
410710710Sddmitriev.L091key_128_cold:
410810710Sddmitriev	shufps	$16,%xmm0,%xmm4
410910710Sddmitriev	xorps	%xmm4,%xmm0
411010710Sddmitriev	shufps	$140,%xmm0,%xmm4
411110710Sddmitriev	xorps	%xmm4,%xmm0
411210710Sddmitriev	shufps	$255,%xmm1,%xmm1
411310710Sddmitriev	xorps	%xmm1,%xmm0
411410710Sddmitriev	ret
411510710Sddmitriev.align	16
411610710Sddmitriev.L08812rounds:
411710710Sddmitriev	movq	16(%eax),%xmm2
411810710Sddmitriev	movl	$11,%ecx
411910710Sddmitriev	movups	%xmm0,-16(%edx)
412010710Sddmitriev.byte	102,15,58,223,202,1
412110710Sddmitriev	call	.L093key_192a_cold
412210710Sddmitriev.byte	102,15,58,223,202,2
412310710Sddmitriev	call	.L094key_192b
412410710Sddmitriev.byte	102,15,58,223,202,4
412510710Sddmitriev	call	.L095key_192a
412610710Sddmitriev.byte	102,15,58,223,202,8
412710710Sddmitriev	call	.L094key_192b
412810710Sddmitriev.byte	102,15,58,223,202,16
412910710Sddmitriev	call	.L095key_192a
413010710Sddmitriev.byte	102,15,58,223,202,32
413110710Sddmitriev	call	.L094key_192b
413210710Sddmitriev.byte	102,15,58,223,202,64
413310710Sddmitriev	call	.L095key_192a
413410710Sddmitriev.byte	102,15,58,223,202,128
413510710Sddmitriev	call	.L094key_192b
413610710Sddmitriev	movups	%xmm0,(%edx)
413710710Sddmitriev	movl	%ecx,48(%edx)
413810710Sddmitriev	xorl	%eax,%eax
413910710Sddmitriev	ret
414010710Sddmitriev.align	16
414110710Sddmitriev.L095key_192a:
414210710Sddmitriev	movups	%xmm0,(%edx)
414310710Sddmitriev	leal	16(%edx),%edx
414410710Sddmitriev.align	16
414510710Sddmitriev.L093key_192a_cold:
414610710Sddmitriev	movaps	%xmm2,%xmm5
414710710Sddmitriev.L096key_192b_warm:
414810710Sddmitriev	shufps	$16,%xmm0,%xmm4
414910710Sddmitriev	movdqa	%xmm2,%xmm3
415010710Sddmitriev	xorps	%xmm4,%xmm0
415110710Sddmitriev	shufps	$140,%xmm0,%xmm4
415210710Sddmitriev	pslldq	$4,%xmm3
415310710Sddmitriev	xorps	%xmm4,%xmm0
415410710Sddmitriev	pshufd	$85,%xmm1,%xmm1
415510710Sddmitriev	pxor	%xmm3,%xmm2
415610710Sddmitriev	pxor	%xmm1,%xmm0
415710710Sddmitriev	pshufd	$255,%xmm0,%xmm3
415810710Sddmitriev	pxor	%xmm3,%xmm2
415910710Sddmitriev	ret
416010710Sddmitriev.align	16
416110710Sddmitriev.L094key_192b:
416210710Sddmitriev	movaps	%xmm0,%xmm3
416310710Sddmitriev	shufps	$68,%xmm0,%xmm5
416410710Sddmitriev	movups	%xmm5,(%edx)
416510710Sddmitriev	shufps	$78,%xmm2,%xmm3
416610710Sddmitriev	movups	%xmm3,16(%edx)
416710710Sddmitriev	leal	32(%edx),%edx
416810710Sddmitriev	jmp	.L096key_192b_warm
416910710Sddmitriev.align	16
417010710Sddmitriev.L08714rounds:
417110710Sddmitriev	movups	16(%eax),%xmm2
417210710Sddmitriev	movl	$13,%ecx
417310710Sddmitriev	leal	16(%edx),%edx
417410710Sddmitriev	movups	%xmm0,-32(%edx)
417510710Sddmitriev	movups	%xmm2,-16(%edx)
417610710Sddmitriev.byte	102,15,58,223,202,1
417710710Sddmitriev	call	.L097key_256a_cold
417810710Sddmitriev.byte	102,15,58,223,200,1
417910710Sddmitriev	call	.L098key_256b
418010710Sddmitriev.byte	102,15,58,223,202,2
418110710Sddmitriev	call	.L099key_256a
418210710Sddmitriev.byte	102,15,58,223,200,2
418310710Sddmitriev	call	.L098key_256b
418410710Sddmitriev.byte	102,15,58,223,202,4
418510710Sddmitriev	call	.L099key_256a
418610710Sddmitriev.byte	102,15,58,223,200,4
418710710Sddmitriev	call	.L098key_256b
418810710Sddmitriev.byte	102,15,58,223,202,8
418910710Sddmitriev	call	.L099key_256a
419010710Sddmitriev.byte	102,15,58,223,200,8
419110710Sddmitriev	call	.L098key_256b
419210710Sddmitriev.byte	102,15,58,223,202,16
419310710Sddmitriev	call	.L099key_256a
419410710Sddmitriev.byte	102,15,58,223,200,16
419510710Sddmitriev	call	.L098key_256b
419610710Sddmitriev.byte	102,15,58,223,202,32
419710710Sddmitriev	call	.L099key_256a
419810710Sddmitriev.byte	102,15,58,223,200,32
419910710Sddmitriev	call	.L098key_256b
420010710Sddmitriev.byte	102,15,58,223,202,64
420110710Sddmitriev	call	.L099key_256a
420210710Sddmitriev	movups	%xmm0,(%edx)
420310710Sddmitriev	movl	%ecx,16(%edx)
420410710Sddmitriev	xorl	%eax,%eax
420510710Sddmitriev	ret
420610710Sddmitriev.align	16
420710710Sddmitriev.L099key_256a:
420810710Sddmitriev	movups	%xmm2,(%edx)
420910710Sddmitriev	leal	16(%edx),%edx
421010710Sddmitriev.L097key_256a_cold:
421110710Sddmitriev	shufps	$16,%xmm0,%xmm4
421210710Sddmitriev	xorps	%xmm4,%xmm0
421310710Sddmitriev	shufps	$140,%xmm0,%xmm4
421410710Sddmitriev	xorps	%xmm4,%xmm0
421510710Sddmitriev	shufps	$255,%xmm1,%xmm1
421610710Sddmitriev	xorps	%xmm1,%xmm0
421710710Sddmitriev	ret
421810710Sddmitriev.align	16
421910710Sddmitriev.L098key_256b:
422010710Sddmitriev	movups	%xmm0,(%edx)
422110710Sddmitriev	leal	16(%edx),%edx
422210710Sddmitriev	shufps	$16,%xmm2,%xmm4
422310710Sddmitriev	xorps	%xmm4,%xmm2
422410710Sddmitriev	shufps	$140,%xmm2,%xmm4
422510710Sddmitriev	xorps	%xmm4,%xmm2
422610710Sddmitriev	shufps	$170,%xmm1,%xmm1
422710710Sddmitriev	xorps	%xmm1,%xmm2
422810710Sddmitriev	ret
422910710Sddmitriev.align	4
423010710Sddmitriev.L086bad_pointer:
423110710Sddmitriev	movl	$-1,%eax
423210710Sddmitriev	ret
423310710Sddmitriev.align	4
423410710Sddmitriev.L089bad_keybits:
423510710Sddmitriev	movl	$-2,%eax
423610710Sddmitriev	ret
423710710Sddmitriev.size	_aesni_set_encrypt_key,.-_aesni_set_encrypt_key
423810710Sddmitriev.globl	aesni_set_encrypt_key
423910710Sddmitriev.type	aesni_set_encrypt_key,@function
424010710Sddmitriev.align	16
424110710Sddmitrievaesni_set_encrypt_key:
424210710Sddmitriev.L_aesni_set_encrypt_key_begin:
424310710Sddmitriev	movl	4(%esp),%eax
424410710Sddmitriev	movl	8(%esp),%ecx
424510710Sddmitriev	movl	12(%esp),%edx
424610710Sddmitriev	call	_aesni_set_encrypt_key
424710710Sddmitriev	ret
424810710Sddmitriev.size	aesni_set_encrypt_key,.-.L_aesni_set_encrypt_key_begin
424910710Sddmitriev.globl	aesni_set_decrypt_key
425010710Sddmitriev.type	aesni_set_decrypt_key,@function
425110710Sddmitriev.align	16
425210710Sddmitrievaesni_set_decrypt_key:
425310710Sddmitriev.L_aesni_set_decrypt_key_begin:
425410710Sddmitriev	movl	4(%esp),%eax
425510710Sddmitriev	movl	8(%esp),%ecx
425610710Sddmitriev	movl	12(%esp),%edx
425710710Sddmitriev	call	_aesni_set_encrypt_key
425810710Sddmitriev	movl	12(%esp),%edx
425910710Sddmitriev	shll	$4,%ecx
426010710Sddmitriev	testl	%eax,%eax
426110710Sddmitriev	jnz	.L100dec_key_ret
426210710Sddmitriev	leal	16(%edx,%ecx,1),%eax
426310710Sddmitriev	movups	(%edx),%xmm0
426410710Sddmitriev	movups	(%eax),%xmm1
426510710Sddmitriev	movups	%xmm0,(%eax)
426610710Sddmitriev	movups	%xmm1,(%edx)
426710710Sddmitriev	leal	16(%edx),%edx
426810710Sddmitriev	leal	-16(%eax),%eax
426910710Sddmitriev.L101dec_key_inverse:
427010710Sddmitriev	movups	(%edx),%xmm0
427110710Sddmitriev	movups	(%eax),%xmm1
427210710Sddmitriev.byte	102,15,56,219,192
427310710Sddmitriev.byte	102,15,56,219,201
427410710Sddmitriev	leal	16(%edx),%edx
427510710Sddmitriev	leal	-16(%eax),%eax
427610710Sddmitriev	movups	%xmm0,16(%eax)
427710710Sddmitriev	movups	%xmm1,-16(%edx)
427810710Sddmitriev	cmpl	%edx,%eax
427910710Sddmitriev	ja	.L101dec_key_inverse
428010710Sddmitriev	movups	(%edx),%xmm0
428110710Sddmitriev.byte	102,15,56,219,192
428210710Sddmitriev	movups	%xmm0,(%edx)
428310710Sddmitriev	xorl	%eax,%eax
428410710Sddmitriev.L100dec_key_ret:
428510710Sddmitriev	ret
428610710Sddmitriev.size	aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin
428710710Sddmitriev.byte	65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
428810710Sddmitriev.byte	83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
428910710Sddmitriev.byte	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
429010710Sddmitriev.byte	115,108,46,111,114,103,62,0
429110710Sddmitriev#endif
429210710Sddmitriev