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