1d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if defined(__i386__)
2d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.text
3d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	6,0x90
4d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL_vpaes_consts:
5d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	218628480,235210255,168496130,67568393
6d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	252381056,17041926,33884169,51187212
7d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	252645135,252645135,252645135,252645135
8d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	1512730624,3266504856,1377990664,3401244816
9d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	830229760,1275146365,2969422977,3447763452
10d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	3411033600,2979783055,338359620,2782886510
11d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	4209124096,907596821,221174255,1006095553
12d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	191964160,3799684038,3164090317,1589111125
13d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	182528256,1777043520,2877432650,3265356744
14d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	1874708224,3503451415,3305285752,363511674
15d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	1606117888,3487855781,1093350906,2384367825
16d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	197121,67569157,134941193,202313229
17d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	67569157,134941193,202313229,197121
18d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	134941193,202313229,197121,67569157
19d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	202313229,197121,67569157,134941193
20d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	33619971,100992007,168364043,235736079
21d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	235736079,33619971,100992007,168364043
22d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	168364043,235736079,33619971,100992007
23d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	100992007,168364043,235736079,33619971
24d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	50462976,117835012,185207048,252579084
25d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	252314880,51251460,117574920,184942860
26d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	184682752,252054788,50987272,118359308
27d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	118099200,185467140,251790600,50727180
28d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	2946363062,528716217,1300004225,1881839624
29d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	1532713819,1532713819,1532713819,1532713819
30d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	3602276352,4288629033,3737020424,4153884961
31d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	1354558464,32357713,2958822624,3775749553
32d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	1201988352,132424512,1572796698,503232858
33d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	2213177600,1597421020,4103937655,675398315
34d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	2749646592,4273543773,1511898873,121693092
35d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	3040248576,1103263732,2871565598,1608280554
36d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	2236667136,2588920351,482954393,64377734
37d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	3069987328,291237287,2117370568,3650299247
38d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	533321216,3573750986,2572112006,1401264716
39d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	1339849704,2721158661,548607111,3445553514
40d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	2128193280,3054596040,2183486460,1257083700
41d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	655635200,1165381986,3923443150,2344132524
42d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	190078720,256924420,290342170,357187870
43d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	1610966272,2263057382,4103205268,309794674
44d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	2592527872,2233205587,1335446729,3402964816
45d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	3973531904,3225098121,3002836325,1918774430
46d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	3870401024,2102906079,2284471353,4117666579
47d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	617007872,1021508343,366931923,691083277
48d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	2528395776,3491914898,2968704004,1613121270
49d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	3445188352,3247741094,844474987,4093578302
50d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	651481088,1190302358,1689581232,574775300
51d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	4289380608,206939853,2555985458,2489840491
52d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	2130264064,327674451,3566485037,3349835193
53d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	2470714624,316102159,3636825756,3393945945
54d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
55d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
56d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
57d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
58d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	118,101,114,115,105,116,121,41,0
59d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	6,0x90
60d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern	__vpaes_preheat
61d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
62d9e397b599b13d642138480a28c14db7a136bf0Adam Langley__vpaes_preheat:
63d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	(%esp),%ebp
64d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-48(%ebp),%xmm7
65d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-16(%ebp),%xmm6
66d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ret
67d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern	__vpaes_encrypt_core
68d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
69d9e397b599b13d642138480a28c14db7a136bf0Adam Langley__vpaes_encrypt_core:
70d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	$16,%ecx
71d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	240(%edx),%eax
72d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm6,%xmm1
73d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	(%ebp),%xmm2
74d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pandn	%xmm0,%xmm1
75d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pand	%xmm6,%xmm0
76d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%edx),%xmm5
77d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,208
78d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	16(%ebp),%xmm0
79d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm2
80d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrld	$4,%xmm1
81d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	$16,%edx
82d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,193
83d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	192(%ebp),%ebx
84d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm0
85d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L000enc_entry
86d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4,0x90
87d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL001enc_loop:
88d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	32(%ebp),%xmm4
89d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	48(%ebp),%xmm0
90d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,226
91d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,195
92d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm4
93d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	64(%ebp),%xmm5
94d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
95d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-64(%ebx,%ecx,1),%xmm1
96d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,234
97d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	80(%ebp),%xmm2
98d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	(%ebx,%ecx,1),%xmm4
99d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,211
100d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
101d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm2
102d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,193
103d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	$16,%edx
104d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm0
105d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,220
106d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	$16,%ecx
107d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
108d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,193
109d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andl	$48,%ecx
110d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subl	$1,%eax
111d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm0
112d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL000enc_entry:
113d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm6,%xmm1
114d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-32(%ebp),%xmm5
115d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pandn	%xmm0,%xmm1
116d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrld	$4,%xmm1
117d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pand	%xmm6,%xmm0
118d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,232
119d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm7,%xmm3
120d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
121d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,217
122d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm7,%xmm4
123d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm3
124d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,224
125d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm7,%xmm2
126d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm4
127d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,211
128d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm7,%xmm3
129d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm2
130d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,220
131d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%edx),%xmm5
132d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm3
133d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnz	L001enc_loop
134d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	96(%ebp),%xmm4
135d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	112(%ebp),%xmm0
136d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,226
137d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm4
138d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,195
139d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	64(%ebx,%ecx,1),%xmm1
140d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
141d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,193
142d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ret
143d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern	__vpaes_decrypt_core
144d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
145d9e397b599b13d642138480a28c14db7a136bf0Adam Langley__vpaes_decrypt_core:
146d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	608(%ebp),%ebx
147d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	240(%edx),%eax
148d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm6,%xmm1
149d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-64(%ebx),%xmm2
150d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pandn	%xmm0,%xmm1
151d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%eax,%ecx
152d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrld	$4,%xmm1
153d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%edx),%xmm5
154d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shll	$4,%ecx
155d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pand	%xmm6,%xmm0
156d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,208
157d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-48(%ebx),%xmm0
158d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorl	$48,%ecx
159d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,193
160d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andl	$48,%ecx
161d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm2
162d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	176(%ebp),%xmm5
163d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm0
164d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	$16,%edx
165d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	-352(%ebx,%ecx,1),%ecx
166d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L002dec_entry
167d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4,0x90
168d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL003dec_loop:
169d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-32(%ebx),%xmm4
170d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-16(%ebx),%xmm1
171d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,226
172d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,203
173d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
174d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	(%ebx),%xmm4
175d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
176d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	16(%ebx),%xmm1
177d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,226
178d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,197
179d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,203
180d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
181d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	32(%ebx),%xmm4
182d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
183d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	48(%ebx),%xmm1
184d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,226
185d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,197
186d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,203
187d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
188d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	64(%ebx),%xmm4
189d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
190d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	80(%ebx),%xmm1
191d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,226
192d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,197
193d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,203
194d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
195d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	$16,%edx
196d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,15,237,12
197d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
198d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subl	$1,%eax
199d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL002dec_entry:
200d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm6,%xmm1
201d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-32(%ebp),%xmm2
202d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pandn	%xmm0,%xmm1
203d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pand	%xmm6,%xmm0
204d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrld	$4,%xmm1
205d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,208
206d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm7,%xmm3
207d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
208d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,217
209d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm7,%xmm4
210d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm3
211d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,224
212d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm4
213d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm7,%xmm2
214d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,211
215d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm7,%xmm3
216d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm2
217d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,220
218d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%edx),%xmm0
219d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm3
220d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnz	L003dec_loop
221d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	96(%ebx),%xmm4
222d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,226
223d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm4
224d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	112(%ebx),%xmm0
225d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	(%ecx),%xmm2
226d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,195
227d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
228d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,194
229d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ret
230d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern	__vpaes_schedule_core
231d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
232d9e397b599b13d642138480a28c14db7a136bf0Adam Langley__vpaes_schedule_core:
233d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	(%esp),%ebp
234d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%esi),%xmm0
235d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	320(%ebp),%xmm2
236d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
237d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	(%ebp),%ebx
238d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm2,4(%esp)
239d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_transform
240d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm7
241d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	testl	%edi,%edi
242d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnz	L004schedule_am_decrypting
243d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm0,(%edx)
244d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L005schedule_go
245d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL004schedule_am_decrypting:
246d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	256(%ebp,%ecx,1),%xmm1
247d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,217
248d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm3,(%edx)
249d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorl	$48,%ecx
250d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL005schedule_go:
251d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	cmpl	$192,%eax
252d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ja	L006schedule_256
253d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	je	L007schedule_192
254d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL008schedule_128:
255d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	$10,%eax
256d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL009loop_schedule_128:
257d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_round
258d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	decl	%eax
259d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jz	L010schedule_mangle_last
260d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_mangle
261d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L009loop_schedule_128
262d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4,0x90
263d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL007schedule_192:
264d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	8(%esi),%xmm0
265d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_transform
266d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm6
267d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm4
268d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movhlps	%xmm4,%xmm6
269d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	$4,%eax
270d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL011loop_schedule_192:
271d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_round
272d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,15,198,8
273d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_mangle
274d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_192_smear
275d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_mangle
276d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_round
277d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	decl	%eax
278d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jz	L010schedule_mangle_last
279d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_mangle
280d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_192_smear
281d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L011loop_schedule_192
282d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4,0x90
283d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL006schedule_256:
284d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	16(%esi),%xmm0
285d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_transform
286d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	$7,%eax
287d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL012loop_schedule_256:
288d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_mangle
289d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm6
290d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_round
291d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	decl	%eax
292d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jz	L010schedule_mangle_last
293d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_mangle
294d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$255,%xmm0,%xmm0
295d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm7,20(%esp)
296d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm6,%xmm7
297d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	L_vpaes_schedule_low_round
298d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	20(%esp),%xmm7
299d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L012loop_schedule_256
300d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4,0x90
301d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL010schedule_mangle_last:
302d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	384(%ebp),%ebx
303d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	testl	%edi,%edi
304d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnz	L013schedule_mangle_last_dec
305d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	256(%ebp,%ecx,1),%xmm1
306d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,193
307d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	352(%ebp),%ebx
308d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	$32,%edx
309d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL013schedule_mangle_last_dec:
310d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	$-16,%edx
311d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	336(%ebp),%xmm0
312d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_transform
313d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm0,(%edx)
314d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm0
315d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm1
316d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm2
317d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm3
318d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm4
319d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm5
320d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm6,%xmm6
321d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm7,%xmm7
322d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ret
323d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern	__vpaes_schedule_192_smear
324d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
325d9e397b599b13d642138480a28c14db7a136bf0Adam Langley__vpaes_schedule_192_smear:
326d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$128,%xmm6,%xmm1
327d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$254,%xmm7,%xmm0
328d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm6
329d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm1
330d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm6
331d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm6,%xmm0
332d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movhlps	%xmm1,%xmm6
333d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ret
334d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern	__vpaes_schedule_round
335d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
336d9e397b599b13d642138480a28c14db7a136bf0Adam Langley__vpaes_schedule_round:
337d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	8(%esp),%xmm2
338d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm1
339d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,15,202,15
340d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,15,210,15
341d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm7
342d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$255,%xmm0,%xmm0
343d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,15,192,1
344d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm2,8(%esp)
345d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL_vpaes_schedule_low_round:
346d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm7,%xmm1
347d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$4,%xmm7
348d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm7
349d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm7,%xmm1
350d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm7
351d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm7
352d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	336(%ebp),%xmm7
353d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-16(%ebp),%xmm4
354d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-48(%ebp),%xmm5
355d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm4,%xmm1
356d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pandn	%xmm0,%xmm1
357d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrld	$4,%xmm1
358d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pand	%xmm4,%xmm0
359d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-32(%ebp),%xmm2
360d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,208
361d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
362d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm5,%xmm3
363d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,217
364d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm3
365d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm5,%xmm4
366d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,224
367d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm4
368d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm5,%xmm2
369d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,211
370d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm2
371d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm5,%xmm3
372d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,220
373d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm3
374d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	32(%ebp),%xmm4
375d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,226
376d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	48(%ebp),%xmm0
377d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,195
378d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
379d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm7,%xmm0
380d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm7
381d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ret
382d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern	__vpaes_schedule_transform
383d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
384d9e397b599b13d642138480a28c14db7a136bf0Adam Langley__vpaes_schedule_transform:
385d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-16(%ebp),%xmm2
386d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm2,%xmm1
387d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pandn	%xmm0,%xmm1
388d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrld	$4,%xmm1
389d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pand	%xmm2,%xmm0
390d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	(%ebx),%xmm2
391d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,208
392d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	16(%ebx),%xmm0
393d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,193
394d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm0
395d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ret
396d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern	__vpaes_schedule_mangle
397d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
398d9e397b599b13d642138480a28c14db7a136bf0Adam Langley__vpaes_schedule_mangle:
399d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
400d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	128(%ebp),%xmm5
401d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	testl	%edi,%edi
402d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnz	L014schedule_mangle_dec
403d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	$16,%edx
404d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	336(%ebp),%xmm4
405d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,229
406d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm4,%xmm3
407d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,229
408d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm3
409d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,229
410d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm3
411d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L015schedule_mangle_both
412d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4,0x90
413d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL014schedule_mangle_dec:
414d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	-16(%ebp),%xmm2
415d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	416(%ebp),%esi
416d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm2,%xmm1
417d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pandn	%xmm4,%xmm1
418d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrld	$4,%xmm1
419d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pand	%xmm2,%xmm4
420d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	(%esi),%xmm2
421d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,212
422d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	16(%esi),%xmm3
423d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,217
424d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm3
425d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,221
426d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	32(%esi),%xmm2
427d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,212
428d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm2
429d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	48(%esi),%xmm3
430d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,217
431d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm3
432d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,221
433d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	64(%esi),%xmm2
434d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,212
435d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm2
436d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	80(%esi),%xmm3
437d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,217
438d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm3
439d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,221
440d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	96(%esi),%xmm2
441d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,212
442d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm2
443d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	112(%esi),%xmm3
444d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,217
445d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm3
446d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	$-16,%edx
447d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL015schedule_mangle_both:
448d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	256(%ebp,%ecx,1),%xmm1
449d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,217
450d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	$-16,%ecx
451d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andl	$48,%ecx
452d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm3,(%edx)
453d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ret
454d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	_vpaes_set_encrypt_key
455d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern	_vpaes_set_encrypt_key
456d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
457d9e397b599b13d642138480a28c14db7a136bf0Adam Langley_vpaes_set_encrypt_key:
458d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL_vpaes_set_encrypt_key_begin:
459d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%ebp
460d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%ebx
461d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%esi
462d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%edi
463d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	20(%esp),%esi
464d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	-56(%esp),%ebx
465d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	24(%esp),%eax
466d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andl	$-16,%ebx
467d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	28(%esp),%edx
468d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xchgl	%esp,%ebx
469d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%ebx,48(%esp)
470d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%eax,%ebx
471d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$5,%ebx
472d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	$5,%ebx
473d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%ebx,240(%edx)
474d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	$48,%ecx
475d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	$0,%edi
476d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	L_vpaes_consts+0x30-L016pic_point,%ebp
477d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_core
478d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL016pic_point:
479d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	48(%esp),%esp
480d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorl	%eax,%eax
481d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%edi
482d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%esi
483d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%ebx
484d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%ebp
485d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ret
486d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	_vpaes_set_decrypt_key
487d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern	_vpaes_set_decrypt_key
488d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
489d9e397b599b13d642138480a28c14db7a136bf0Adam Langley_vpaes_set_decrypt_key:
490d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL_vpaes_set_decrypt_key_begin:
491d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%ebp
492d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%ebx
493d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%esi
494d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%edi
495d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	20(%esp),%esi
496d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	-56(%esp),%ebx
497d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	24(%esp),%eax
498d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andl	$-16,%ebx
499d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	28(%esp),%edx
500d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xchgl	%esp,%ebx
501d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%ebx,48(%esp)
502d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%eax,%ebx
503d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$5,%ebx
504d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addl	$5,%ebx
505d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%ebx,240(%edx)
506d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shll	$4,%ebx
507d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	16(%edx,%ebx,1),%edx
508d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	$1,%edi
509d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%eax,%ecx
510d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$1,%ecx
511d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andl	$32,%ecx
512d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorl	$32,%ecx
513d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	L_vpaes_consts+0x30-L017pic_point,%ebp
514d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_schedule_core
515d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL017pic_point:
516d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	48(%esp),%esp
517d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorl	%eax,%eax
518d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%edi
519d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%esi
520d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%ebx
521d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%ebp
522d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ret
523d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	_vpaes_encrypt
524d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern	_vpaes_encrypt
525d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
526d9e397b599b13d642138480a28c14db7a136bf0Adam Langley_vpaes_encrypt:
527d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL_vpaes_encrypt_begin:
528d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%ebp
529d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%ebx
530d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%esi
531d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%edi
532d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	L_vpaes_consts+0x30-L018pic_point,%ebp
533d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_preheat
534d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL018pic_point:
535d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	20(%esp),%esi
536d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	-56(%esp),%ebx
537d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	24(%esp),%edi
538d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andl	$-16,%ebx
539d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	28(%esp),%edx
540d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xchgl	%esp,%ebx
541d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%ebx,48(%esp)
542d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%esi),%xmm0
543d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_encrypt_core
544d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm0,(%edi)
545d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	48(%esp),%esp
546d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%edi
547d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%esi
548d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%ebx
549d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%ebp
550d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ret
551d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	_vpaes_decrypt
552d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern	_vpaes_decrypt
553d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
554d9e397b599b13d642138480a28c14db7a136bf0Adam Langley_vpaes_decrypt:
555d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL_vpaes_decrypt_begin:
556d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%ebp
557d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%ebx
558d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%esi
559d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%edi
560d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	L_vpaes_consts+0x30-L019pic_point,%ebp
561d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_preheat
562d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL019pic_point:
563d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	20(%esp),%esi
564d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	-56(%esp),%ebx
565d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	24(%esp),%edi
566d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andl	$-16,%ebx
567d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	28(%esp),%edx
568d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xchgl	%esp,%ebx
569d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%ebx,48(%esp)
570d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%esi),%xmm0
571d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_decrypt_core
572d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm0,(%edi)
573d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	48(%esp),%esp
574d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%edi
575d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%esi
576d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%ebx
577d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%ebp
578d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ret
579d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	_vpaes_cbc_encrypt
580d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern	_vpaes_cbc_encrypt
581d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
582d9e397b599b13d642138480a28c14db7a136bf0Adam Langley_vpaes_cbc_encrypt:
583d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL_vpaes_cbc_encrypt_begin:
584d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%ebp
585d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%ebx
586d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%esi
587d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushl	%edi
588d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	20(%esp),%esi
589d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	24(%esp),%edi
590d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	28(%esp),%eax
591d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	32(%esp),%edx
592d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subl	$16,%eax
593d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jc	L020cbc_abort
594d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	-56(%esp),%ebx
595d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	36(%esp),%ebp
596d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andl	$-16,%ebx
597d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	40(%esp),%ecx
598d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xchgl	%esp,%ebx
599d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%ebp),%xmm1
600d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subl	%esi,%edi
601d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%ebx,48(%esp)
602d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%edi,(%esp)
603d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%edx,4(%esp)
604d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%ebp,8(%esp)
605d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%eax,%edi
606d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	L_vpaes_consts+0x30-L021pic_point,%ebp
607d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_preheat
608d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL021pic_point:
609d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	cmpl	$0,%ecx
610d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	je	L022cbc_dec_loop
611d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L023cbc_enc_loop
612d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4,0x90
613d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL023cbc_enc_loop:
614d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%esi),%xmm0
615d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
616d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_encrypt_core
617d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	(%esp),%ebx
618d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	4(%esp),%edx
619d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm1
620d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm0,(%ebx,%esi,1)
621d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	16(%esi),%esi
622d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subl	$16,%edi
623d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnc	L023cbc_enc_loop
624d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L024cbc_done
625d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4,0x90
626d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL022cbc_dec_loop:
627d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%esi),%xmm0
628d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm1,16(%esp)
629d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,32(%esp)
630d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__vpaes_decrypt_core
631d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	(%esp),%ebx
632d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	4(%esp),%edx
633d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	16(%esp),%xmm0
634d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	32(%esp),%xmm1
635d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm0,(%ebx,%esi,1)
636d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leal	16(%esi),%esi
637d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subl	$16,%edi
638d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnc	L022cbc_dec_loop
639d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL024cbc_done:
640d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	8(%esp),%ebx
641d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	48(%esp),%esp
642d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm1,(%ebx)
643d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL020cbc_abort:
644d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%edi
645d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%esi
646d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%ebx
647d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	popl	%ebp
648d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ret
649d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
650