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