1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(__i386__)
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.file	"vpaes-x86.S"
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.text
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	6,0x90
5116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL_vpaes_consts:
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	218628480,235210255,168496130,67568393
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	252381056,17041926,33884169,51187212
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	252645135,252645135,252645135,252645135
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	1512730624,3266504856,1377990664,3401244816
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	830229760,1275146365,2969422977,3447763452
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	3411033600,2979783055,338359620,2782886510
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	4209124096,907596821,221174255,1006095553
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	191964160,3799684038,3164090317,1589111125
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	182528256,1777043520,2877432650,3265356744
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	1874708224,3503451415,3305285752,363511674
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	1606117888,3487855781,1093350906,2384367825
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	197121,67569157,134941193,202313229
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	67569157,134941193,202313229,197121
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	134941193,202313229,197121,67569157
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	202313229,197121,67569157,134941193
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	33619971,100992007,168364043,235736079
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	235736079,33619971,100992007,168364043
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	168364043,235736079,33619971,100992007
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	100992007,168364043,235736079,33619971
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	50462976,117835012,185207048,252579084
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	252314880,51251460,117574920,184942860
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	184682752,252054788,50987272,118359308
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	118099200,185467140,251790600,50727180
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	2946363062,528716217,1300004225,1881839624
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	1532713819,1532713819,1532713819,1532713819
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	3602276352,4288629033,3737020424,4153884961
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	1354558464,32357713,2958822624,3775749553
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	1201988352,132424512,1572796698,503232858
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	2213177600,1597421020,4103937655,675398315
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	2749646592,4273543773,1511898873,121693092
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	3040248576,1103263732,2871565598,1608280554
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	2236667136,2588920351,482954393,64377734
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	3069987328,291237287,2117370568,3650299247
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	533321216,3573750986,2572112006,1401264716
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	1339849704,2721158661,548607111,3445553514
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	2128193280,3054596040,2183486460,1257083700
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	655635200,1165381986,3923443150,2344132524
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	190078720,256924420,290342170,357187870
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	1610966272,2263057382,4103205268,309794674
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	2592527872,2233205587,1335446729,3402964816
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	3973531904,3225098121,3002836325,1918774430
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	3870401024,2102906079,2284471353,4117666579
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	617007872,1021508343,366931923,691083277
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	2528395776,3491914898,2968704004,1613121270
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	3445188352,3247741094,844474987,4093578302
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	651481088,1190302358,1689581232,574775300
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	4289380608,206939853,2555985458,2489840491
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	2130264064,327674451,3566485037,3349835193
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.long	2470714624,316102159,3636825756,3393945945
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	118,101,114,115,105,116,121,41,0
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	6,0x90
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).private_extern	__vpaes_preheat
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__vpaes_preheat:
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	(%esp),%ebp
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-48(%ebp),%xmm7
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-16(%ebp),%xmm6
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ret
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).private_extern	__vpaes_encrypt_core
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__vpaes_encrypt_core:
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	$16,%ecx
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	240(%edx),%eax
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm6,%xmm1
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	(%ebp),%xmm2
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pandn	%xmm0,%xmm1
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	%xmm6,%xmm0
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	(%edx),%xmm5
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,208
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	16(%ebp),%xmm0
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm5,%xmm2
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	psrld	$4,%xmm1
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	$16,%edx
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,193
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	192(%ebp),%ebx
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm2,%xmm0
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	L000enc_entry
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4,0x90
88116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL001enc_loop:
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	32(%ebp),%xmm4
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	48(%ebp),%xmm0
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,226
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,195
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm5,%xmm4
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	64(%ebp),%xmm5
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm4,%xmm0
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-64(%ebx,%ecx,1),%xmm1
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,234
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	80(%ebp),%xmm2
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	(%ebx,%ecx,1),%xmm4
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,211
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm0,%xmm3
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm5,%xmm2
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,193
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	$16,%edx
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm2,%xmm0
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,220
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	$16,%ecx
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm0,%xmm3
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,193
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	andl	$48,%ecx
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	subl	$1,%eax
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm3,%xmm0
113116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL000enc_entry:
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm6,%xmm1
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-32(%ebp),%xmm5
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pandn	%xmm0,%xmm1
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	psrld	$4,%xmm1
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	%xmm6,%xmm0
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,232
120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm7,%xmm3
121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm0
122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,217
123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm7,%xmm4
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm5,%xmm3
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,224
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm7,%xmm2
127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm5,%xmm4
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,211
129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm7,%xmm3
130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm0,%xmm2
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,220
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	(%edx),%xmm5
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm3
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	L001enc_loop
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	96(%ebp),%xmm4
136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	112(%ebp),%xmm0
137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,226
138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm5,%xmm4
139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,195
140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	64(%ebx,%ecx,1),%xmm1
141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm4,%xmm0
142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,193
143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ret
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).private_extern	__vpaes_decrypt_core
145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__vpaes_decrypt_core:
147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	608(%ebp),%ebx
148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	240(%edx),%eax
149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm6,%xmm1
150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-64(%ebx),%xmm2
151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pandn	%xmm0,%xmm1
152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%eax,%ecx
153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	psrld	$4,%xmm1
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	(%edx),%xmm5
155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shll	$4,%ecx
156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	%xmm6,%xmm0
157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,208
158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-48(%ebx),%xmm0
159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xorl	$48,%ecx
160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,193
161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	andl	$48,%ecx
162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm5,%xmm2
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	176(%ebp),%xmm5
164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm2,%xmm0
165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	$16,%edx
166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	-352(%ebx,%ecx,1),%ecx
167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	L002dec_entry
168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4,0x90
169116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL003dec_loop:
170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-32(%ebx),%xmm4
171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-16(%ebx),%xmm1
172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,226
173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,203
174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm4,%xmm0
175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	(%ebx),%xmm4
176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm0
177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	16(%ebx),%xmm1
178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,226
179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,197
180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,203
181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm4,%xmm0
182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	32(%ebx),%xmm4
183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm0
184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	48(%ebx),%xmm1
185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,226
186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,197
187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,203
188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm4,%xmm0
189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	64(%ebx),%xmm4
190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm0
191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	80(%ebx),%xmm1
192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,226
193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,197
194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,203
195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm4,%xmm0
196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	$16,%edx
197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,58,15,237,12
198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm0
199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	subl	$1,%eax
200116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL002dec_entry:
201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm6,%xmm1
202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-32(%ebp),%xmm2
203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pandn	%xmm0,%xmm1
204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	%xmm6,%xmm0
205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	psrld	$4,%xmm1
206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,208
207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm7,%xmm3
208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm0
209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,217
210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm7,%xmm4
211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm2,%xmm3
212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,224
213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm2,%xmm4
214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm7,%xmm2
215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,211
216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm7,%xmm3
217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm0,%xmm2
218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,220
219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	(%edx),%xmm0
220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm3
221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	L003dec_loop
222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	96(%ebx),%xmm4
223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,226
224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm0,%xmm4
225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	112(%ebx),%xmm0
226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	(%ecx),%xmm2
227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,195
228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm4,%xmm0
229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,194
230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ret
2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).private_extern	__vpaes_schedule_core
232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__vpaes_schedule_core:
234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	(%esp),%ebp
235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	(%esi),%xmm0
236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	320(%ebp),%xmm2
237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm0,%xmm3
238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	(%ebp),%ebx
239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm2,4(%esp)
240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_transform
241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm0,%xmm7
242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	testl	%edi,%edi
243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	L004schedule_am_decrypting
244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	%xmm0,(%edx)
245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	L005schedule_go
246116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL004schedule_am_decrypting:
247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	256(%ebp,%ecx,1),%xmm1
248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,217
249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	%xmm3,(%edx)
250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xorl	$48,%ecx
251116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL005schedule_go:
252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmpl	$192,%eax
253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ja	L006schedule_256
254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	je	L007schedule_192
255116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL008schedule_128:
256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	$10,%eax
257116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL009loop_schedule_128:
258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_round
259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	decl	%eax
260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jz	L010schedule_mangle_last
261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_mangle
262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	L009loop_schedule_128
263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4,0x90
264116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL007schedule_192:
265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	8(%esi),%xmm0
266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_transform
267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm0,%xmm6
268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm4,%xmm4
269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movhlps	%xmm4,%xmm6
270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	$4,%eax
271116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL011loop_schedule_192:
272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_round
273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,58,15,198,8
274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_mangle
275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_192_smear
276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_mangle
277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_round
278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	decl	%eax
279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jz	L010schedule_mangle_last
280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_mangle
281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_192_smear
282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	L011loop_schedule_192
283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4,0x90
284116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL006schedule_256:
285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	16(%esi),%xmm0
286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_transform
287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	$7,%eax
288116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL012loop_schedule_256:
289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_mangle
290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm0,%xmm6
291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_round
292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	decl	%eax
293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jz	L010schedule_mangle_last
294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_mangle
295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pshufd	$255,%xmm0,%xmm0
296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm7,20(%esp)
297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm6,%xmm7
298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	L_vpaes_schedule_low_round
299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	20(%esp),%xmm7
300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	L012loop_schedule_256
301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4,0x90
302116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL010schedule_mangle_last:
303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	384(%ebp),%ebx
304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	testl	%edi,%edi
305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	L013schedule_mangle_last_dec
306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	256(%ebp,%ecx,1),%xmm1
307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,193
308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	352(%ebp),%ebx
309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	$32,%edx
310116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL013schedule_mangle_last_dec:
311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	$-16,%edx
312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	336(%ebp),%xmm0
313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_transform
314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	%xmm0,(%edx)
315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm0,%xmm0
316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm1
317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm2,%xmm2
318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm3,%xmm3
319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm4,%xmm4
320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm5,%xmm5
321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm6,%xmm6
322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm7,%xmm7
323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ret
3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).private_extern	__vpaes_schedule_192_smear
325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__vpaes_schedule_192_smear:
327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pshufd	$128,%xmm6,%xmm1
328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pshufd	$254,%xmm7,%xmm0
329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm6
330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm1
331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm0,%xmm6
332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm6,%xmm0
333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movhlps	%xmm1,%xmm6
334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ret
3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).private_extern	__vpaes_schedule_round
336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__vpaes_schedule_round:
338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	8(%esp),%xmm2
339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm1
340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,58,15,202,15
341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,58,15,210,15
342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm7
343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pshufd	$255,%xmm0,%xmm0
344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,58,15,192,1
345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm2,8(%esp)
346116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL_vpaes_schedule_low_round:
347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm7,%xmm1
348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pslldq	$4,%xmm7
349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm7
350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm7,%xmm1
351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pslldq	$8,%xmm7
352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm7
353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	336(%ebp),%xmm7
354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-16(%ebp),%xmm4
355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-48(%ebp),%xmm5
356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm4,%xmm1
357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pandn	%xmm0,%xmm1
358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	psrld	$4,%xmm1
359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	%xmm4,%xmm0
360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-32(%ebp),%xmm2
361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,208
362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm0
363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm5,%xmm3
364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,217
365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm2,%xmm3
366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm5,%xmm4
367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,224
368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm2,%xmm4
369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm5,%xmm2
370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,211
371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm0,%xmm2
372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm5,%xmm3
373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,220
374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm3
375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	32(%ebp),%xmm4
376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,226
377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	48(%ebp),%xmm0
378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,195
379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm4,%xmm0
380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm7,%xmm0
381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm0,%xmm7
382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ret
3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).private_extern	__vpaes_schedule_transform
384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__vpaes_schedule_transform:
386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-16(%ebp),%xmm2
387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm2,%xmm1
388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pandn	%xmm0,%xmm1
389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	psrld	$4,%xmm1
390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	%xmm2,%xmm0
391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	(%ebx),%xmm2
392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,208
393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	16(%ebx),%xmm0
394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,193
395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm2,%xmm0
396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ret
3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).private_extern	__vpaes_schedule_mangle
398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__vpaes_schedule_mangle:
400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm0,%xmm4
401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	128(%ebp),%xmm5
402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	testl	%edi,%edi
403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	L014schedule_mangle_dec
404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	$16,%edx
405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	336(%ebp),%xmm4
406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,229
407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm4,%xmm3
408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,229
409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm4,%xmm3
410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,229
411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm4,%xmm3
412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	L015schedule_mangle_both
413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4,0x90
414116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL014schedule_mangle_dec:
415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	-16(%ebp),%xmm2
416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	416(%ebp),%esi
417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm2,%xmm1
418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pandn	%xmm4,%xmm1
419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	psrld	$4,%xmm1
420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	%xmm2,%xmm4
421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	(%esi),%xmm2
422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,212
423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	16(%esi),%xmm3
424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,217
425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm2,%xmm3
426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,221
427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	32(%esi),%xmm2
428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,212
429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm3,%xmm2
430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	48(%esi),%xmm3
431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,217
432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm2,%xmm3
433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,221
434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	64(%esi),%xmm2
435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,212
436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm3,%xmm2
437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	80(%esi),%xmm3
438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,217
439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm2,%xmm3
440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,221
441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	96(%esi),%xmm2
442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,212
443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm3,%xmm2
444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	112(%esi),%xmm3
445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,217
446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm2,%xmm3
447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	$-16,%edx
448116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL015schedule_mangle_both:
449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	256(%ebp,%ecx,1),%xmm1
450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.byte	102,15,56,0,217
451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	$-16,%ecx
452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	andl	$48,%ecx
453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	%xmm3,(%edx)
454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ret
455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.globl	_vpaes_set_encrypt_key
4565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).private_extern	_vpaes_set_encrypt_key
457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch_vpaes_set_encrypt_key:
459116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL_vpaes_set_encrypt_key_begin:
460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%ebp
461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%ebx
462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%esi
463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%edi
464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	20(%esp),%esi
465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	-56(%esp),%ebx
466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	24(%esp),%eax
467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	andl	$-16,%ebx
468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	28(%esp),%edx
469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xchgl	%esp,%ebx
470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%ebx,48(%esp)
471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%eax,%ebx
472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shrl	$5,%ebx
473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	$5,%ebx
474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%ebx,240(%edx)
475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	$48,%ecx
476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	$0,%edi
477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	L_vpaes_consts+0x30-L016pic_point,%ebp
478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_core
479116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL016pic_point:
480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	48(%esp),%esp
481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xorl	%eax,%eax
482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%edi
483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%esi
484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%ebx
485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%ebp
486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ret
487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.globl	_vpaes_set_decrypt_key
4885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).private_extern	_vpaes_set_decrypt_key
489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch_vpaes_set_decrypt_key:
491116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL_vpaes_set_decrypt_key_begin:
492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%ebp
493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%ebx
494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%esi
495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%edi
496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	20(%esp),%esi
497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	-56(%esp),%ebx
498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	24(%esp),%eax
499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	andl	$-16,%ebx
500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	28(%esp),%edx
501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xchgl	%esp,%ebx
502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%ebx,48(%esp)
503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%eax,%ebx
504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shrl	$5,%ebx
505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	addl	$5,%ebx
506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%ebx,240(%edx)
507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shll	$4,%ebx
508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	16(%edx,%ebx,1),%edx
509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	$1,%edi
510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%eax,%ecx
511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shrl	$1,%ecx
512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	andl	$32,%ecx
513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xorl	$32,%ecx
514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	L_vpaes_consts+0x30-L017pic_point,%ebp
515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_schedule_core
516116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL017pic_point:
517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	48(%esp),%esp
518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xorl	%eax,%eax
519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%edi
520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%esi
521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%ebx
522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%ebp
523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ret
524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.globl	_vpaes_encrypt
5255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).private_extern	_vpaes_encrypt
526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch_vpaes_encrypt:
528116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL_vpaes_encrypt_begin:
529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%ebp
530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%ebx
531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%esi
532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%edi
533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	L_vpaes_consts+0x30-L018pic_point,%ebp
534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_preheat
535116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL018pic_point:
536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	20(%esp),%esi
537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	-56(%esp),%ebx
538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	24(%esp),%edi
539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	andl	$-16,%ebx
540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	28(%esp),%edx
541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xchgl	%esp,%ebx
542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%ebx,48(%esp)
543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	(%esi),%xmm0
544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_encrypt_core
545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	%xmm0,(%edi)
546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	48(%esp),%esp
547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%edi
548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%esi
549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%ebx
550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%ebp
551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ret
552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.globl	_vpaes_decrypt
5535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).private_extern	_vpaes_decrypt
554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch_vpaes_decrypt:
556116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL_vpaes_decrypt_begin:
557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%ebp
558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%ebx
559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%esi
560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%edi
561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	L_vpaes_consts+0x30-L019pic_point,%ebp
562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_preheat
563116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL019pic_point:
564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	20(%esp),%esi
565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	-56(%esp),%ebx
566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	24(%esp),%edi
567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	andl	$-16,%ebx
568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	28(%esp),%edx
569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xchgl	%esp,%ebx
570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%ebx,48(%esp)
571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	(%esi),%xmm0
572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_decrypt_core
573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	%xmm0,(%edi)
574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	48(%esp),%esp
575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%edi
576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%esi
577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%ebx
578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%ebp
579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ret
580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.globl	_vpaes_cbc_encrypt
5815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).private_extern	_vpaes_cbc_encrypt
582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch_vpaes_cbc_encrypt:
584116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL_vpaes_cbc_encrypt_begin:
585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%ebp
586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%ebx
587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%esi
588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushl	%edi
589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	20(%esp),%esi
590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	24(%esp),%edi
591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	28(%esp),%eax
592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	32(%esp),%edx
593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	subl	$16,%eax
594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jc	L020cbc_abort
595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	-56(%esp),%ebx
596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	36(%esp),%ebp
597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	andl	$-16,%ebx
598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	40(%esp),%ecx
599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xchgl	%esp,%ebx
600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	(%ebp),%xmm1
601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	subl	%esi,%edi
602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%ebx,48(%esp)
603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%edi,(%esp)
604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%edx,4(%esp)
605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%ebp,8(%esp)
606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	%eax,%edi
607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	L_vpaes_consts+0x30-L021pic_point,%ebp
608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_preheat
609116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL021pic_point:
610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmpl	$0,%ecx
611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	je	L022cbc_dec_loop
612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	L023cbc_enc_loop
613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4,0x90
614116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL023cbc_enc_loop:
615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	(%esi),%xmm0
616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	%xmm1,%xmm0
617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_encrypt_core
618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	(%esp),%ebx
619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	4(%esp),%edx
620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm0,%xmm1
621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	%xmm0,(%ebx,%esi,1)
622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	16(%esi),%esi
623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	subl	$16,%edi
624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnc	L023cbc_enc_loop
625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	L024cbc_done
626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4,0x90
627116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL022cbc_dec_loop:
628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	(%esi),%xmm0
629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm1,16(%esp)
630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	%xmm0,32(%esp)
631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__vpaes_decrypt_core
632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	(%esp),%ebx
633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	4(%esp),%edx
634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	16(%esp),%xmm0
635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	32(%esp),%xmm1
636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	%xmm0,(%ebx,%esi,1)
637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	leal	16(%esi),%esi
638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	subl	$16,%edi
639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnc	L022cbc_dec_loop
640116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL024cbc_done:
641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	8(%esp),%ebx
642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movl	48(%esp),%esp
643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	%xmm1,(%ebx)
644116680a4aac90f2aa7413d9095a592090648e557Ben MurdochL020cbc_abort:
645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%edi
646116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%esi
647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%ebx
648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popl	%ebp
649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ret
6505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
651