10Sstevel@tonic-gate	# $FreeBSD: releng/10.3/secure/lib/libcrypto/i386/vpaes-x86.s 238405 2012-07-12 19:30:53Z jkim $
20Sstevel@tonic-gate.file	"vpaes-x86.s"
30Sstevel@tonic-gate.text
40Sstevel@tonic-gate.align	64
53914Spm145316.L_vpaes_consts:
63914Spm145316.long	218628480,235210255,168496130,67568393
70Sstevel@tonic-gate.long	252381056,17041926,33884169,51187212
80Sstevel@tonic-gate.long	252645135,252645135,252645135,252645135
90Sstevel@tonic-gate.long	1512730624,3266504856,1377990664,3401244816
100Sstevel@tonic-gate.long	830229760,1275146365,2969422977,3447763452
110Sstevel@tonic-gate.long	3411033600,2979783055,338359620,2782886510
120Sstevel@tonic-gate.long	4209124096,907596821,221174255,1006095553
130Sstevel@tonic-gate.long	191964160,3799684038,3164090317,1589111125
140Sstevel@tonic-gate.long	182528256,1777043520,2877432650,3265356744
150Sstevel@tonic-gate.long	1874708224,3503451415,3305285752,363511674
160Sstevel@tonic-gate.long	1606117888,3487855781,1093350906,2384367825
170Sstevel@tonic-gate.long	197121,67569157,134941193,202313229
180Sstevel@tonic-gate.long	67569157,134941193,202313229,197121
190Sstevel@tonic-gate.long	134941193,202313229,197121,67569157
200Sstevel@tonic-gate.long	202313229,197121,67569157,134941193
210Sstevel@tonic-gate.long	33619971,100992007,168364043,235736079
2212230SFrank.Rival@oracle.com.long	235736079,33619971,100992007,168364043
230Sstevel@tonic-gate.long	168364043,235736079,33619971,100992007
240Sstevel@tonic-gate.long	100992007,168364043,235736079,33619971
250Sstevel@tonic-gate.long	50462976,117835012,185207048,252579084
260Sstevel@tonic-gate.long	252314880,51251460,117574920,184942860
270Sstevel@tonic-gate.long	184682752,252054788,50987272,118359308
280Sstevel@tonic-gate.long	118099200,185467140,251790600,50727180
290Sstevel@tonic-gate.long	2946363062,528716217,1300004225,1881839624
300Sstevel@tonic-gate.long	1532713819,1532713819,1532713819,1532713819
310Sstevel@tonic-gate.long	3602276352,4288629033,3737020424,4153884961
320Sstevel@tonic-gate.long	1354558464,32357713,2958822624,3775749553
330Sstevel@tonic-gate.long	1201988352,132424512,1572796698,503232858
340Sstevel@tonic-gate.long	2213177600,1597421020,4103937655,675398315
350Sstevel@tonic-gate.long	2749646592,4273543773,1511898873,121693092
360Sstevel@tonic-gate.long	3040248576,1103263732,2871565598,1608280554
370Sstevel@tonic-gate.long	2236667136,2588920351,482954393,64377734
380Sstevel@tonic-gate.long	3069987328,291237287,2117370568,3650299247
390Sstevel@tonic-gate.long	533321216,3573750986,2572112006,1401264716
400Sstevel@tonic-gate.long	1339849704,2721158661,548607111,3445553514
410Sstevel@tonic-gate.long	2128193280,3054596040,2183486460,1257083700
420Sstevel@tonic-gate.long	655635200,1165381986,3923443150,2344132524
430Sstevel@tonic-gate.long	190078720,256924420,290342170,357187870
440Sstevel@tonic-gate.long	1610966272,2263057382,4103205268,309794674
450Sstevel@tonic-gate.long	2592527872,2233205587,1335446729,3402964816
460Sstevel@tonic-gate.long	3973531904,3225098121,3002836325,1918774430
470Sstevel@tonic-gate.long	3870401024,2102906079,2284471353,4117666579
480Sstevel@tonic-gate.long	617007872,1021508343,366931923,691083277
490Sstevel@tonic-gate.long	2528395776,3491914898,2968704004,1613121270
500Sstevel@tonic-gate.long	3445188352,3247741094,844474987,4093578302
510Sstevel@tonic-gate.long	651481088,1190302358,1689581232,574775300
520Sstevel@tonic-gate.long	4289380608,206939853,2555985458,2489840491
530Sstevel@tonic-gate.long	2130264064,327674451,3566485037,3349835193
540Sstevel@tonic-gate.long	2470714624,316102159,3636825756,3393945945
550Sstevel@tonic-gate.byte	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
560Sstevel@tonic-gate.byte	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
570Sstevel@tonic-gate.byte	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
580Sstevel@tonic-gate.byte	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
590Sstevel@tonic-gate.byte	118,101,114,115,105,116,121,41,0
600Sstevel@tonic-gate.align	64
610Sstevel@tonic-gate.type	_vpaes_preheat,@function
620Sstevel@tonic-gate.align	16
630Sstevel@tonic-gate_vpaes_preheat:
640Sstevel@tonic-gate	addl	(%esp),%ebp
650Sstevel@tonic-gate	movdqa	-48(%ebp),%xmm7
660Sstevel@tonic-gate	movdqa	-16(%ebp),%xmm6
670Sstevel@tonic-gate	ret
680Sstevel@tonic-gate.size	_vpaes_preheat,.-_vpaes_preheat
690Sstevel@tonic-gate.type	_vpaes_encrypt_core,@function
700Sstevel@tonic-gate.align	16
710Sstevel@tonic-gate_vpaes_encrypt_core:
720Sstevel@tonic-gate	movl	$16,%ecx
7312230SFrank.Rival@oracle.com	movl	240(%edx),%eax
7412230SFrank.Rival@oracle.com	movdqa	%xmm6,%xmm1
7512230SFrank.Rival@oracle.com	movdqa	(%ebp),%xmm2
7612230SFrank.Rival@oracle.com	pandn	%xmm0,%xmm1
7712230SFrank.Rival@oracle.com	movdqu	(%edx),%xmm5
7812230SFrank.Rival@oracle.com	psrld	$4,%xmm1
7912230SFrank.Rival@oracle.com	pand	%xmm6,%xmm0
8012230SFrank.Rival@oracle.com.byte	102,15,56,0,208
8112230SFrank.Rival@oracle.com	movdqa	16(%ebp),%xmm0
8212230SFrank.Rival@oracle.com.byte	102,15,56,0,193
8312230SFrank.Rival@oracle.com	pxor	%xmm5,%xmm2
8412230SFrank.Rival@oracle.com	pxor	%xmm2,%xmm0
850Sstevel@tonic-gate	addl	$16,%edx
869160SSherry.Moore@Sun.COM	leal	192(%ebp),%ebx
870Sstevel@tonic-gate	jmp	.L000enc_entry
880Sstevel@tonic-gate.align	16
890Sstevel@tonic-gate.L001enc_loop:
900Sstevel@tonic-gate	movdqa	32(%ebp),%xmm4
910Sstevel@tonic-gate.byte	102,15,56,0,226
920Sstevel@tonic-gate	pxor	%xmm5,%xmm4
936712Stomee	movdqa	48(%ebp),%xmm0
946712Stomee.byte	102,15,56,0,195
955834Spt157919	pxor	%xmm4,%xmm0
965834Spt157919	movdqa	64(%ebp),%xmm5
975834Spt157919.byte	102,15,56,0,234
985834Spt157919	movdqa	-64(%ebx,%ecx,1),%xmm1
995834Spt157919	movdqa	80(%ebp),%xmm2
1005834Spt157919.byte	102,15,56,0,211
1015834Spt157919	pxor	%xmm5,%xmm2
1025834Spt157919	movdqa	(%ebx,%ecx,1),%xmm4
1035834Spt157919	movdqa	%xmm0,%xmm3
1045834Spt157919.byte	102,15,56,0,193
1050Sstevel@tonic-gate	addl	$16,%edx
1066138Ssvemuri	pxor	%xmm2,%xmm0
1076138Ssvemuri.byte	102,15,56,0,220
1086138Ssvemuri	addl	$16,%ecx
1090Sstevel@tonic-gate	pxor	%xmm0,%xmm3
1100Sstevel@tonic-gate.byte	102,15,56,0,193
1110Sstevel@tonic-gate	andl	$48,%ecx
1120Sstevel@tonic-gate	pxor	%xmm3,%xmm0
1130Sstevel@tonic-gate	subl	$1,%eax
1140Sstevel@tonic-gate.L000enc_entry:
1150Sstevel@tonic-gate	movdqa	%xmm6,%xmm1
1160Sstevel@tonic-gate	pandn	%xmm0,%xmm1
1170Sstevel@tonic-gate	psrld	$4,%xmm1
118	pand	%xmm6,%xmm0
119	movdqa	-32(%ebp),%xmm5
120.byte	102,15,56,0,232
121	pxor	%xmm1,%xmm0
122	movdqa	%xmm7,%xmm3
123.byte	102,15,56,0,217
124	pxor	%xmm5,%xmm3
125	movdqa	%xmm7,%xmm4
126.byte	102,15,56,0,224
127	pxor	%xmm5,%xmm4
128	movdqa	%xmm7,%xmm2
129.byte	102,15,56,0,211
130	pxor	%xmm0,%xmm2
131	movdqa	%xmm7,%xmm3
132	movdqu	(%edx),%xmm5
133.byte	102,15,56,0,220
134	pxor	%xmm1,%xmm3
135	jnz	.L001enc_loop
136	movdqa	96(%ebp),%xmm4
137	movdqa	112(%ebp),%xmm0
138.byte	102,15,56,0,226
139	pxor	%xmm5,%xmm4
140.byte	102,15,56,0,195
141	movdqa	64(%ebx,%ecx,1),%xmm1
142	pxor	%xmm4,%xmm0
143.byte	102,15,56,0,193
144	ret
145.size	_vpaes_encrypt_core,.-_vpaes_encrypt_core
146.type	_vpaes_decrypt_core,@function
147.align	16
148_vpaes_decrypt_core:
149	movl	240(%edx),%eax
150	leal	608(%ebp),%ebx
151	movdqa	%xmm6,%xmm1
152	movdqa	-64(%ebx),%xmm2
153	pandn	%xmm0,%xmm1
154	movl	%eax,%ecx
155	psrld	$4,%xmm1
156	movdqu	(%edx),%xmm5
157	shll	$4,%ecx
158	pand	%xmm6,%xmm0
159.byte	102,15,56,0,208
160	movdqa	-48(%ebx),%xmm0
161	xorl	$48,%ecx
162.byte	102,15,56,0,193
163	andl	$48,%ecx
164	pxor	%xmm5,%xmm2
165	movdqa	176(%ebp),%xmm5
166	pxor	%xmm2,%xmm0
167	addl	$16,%edx
168	leal	-352(%ebx,%ecx,1),%ecx
169	jmp	.L002dec_entry
170.align	16
171.L003dec_loop:
172	movdqa	-32(%ebx),%xmm4
173.byte	102,15,56,0,226
174	pxor	%xmm0,%xmm4
175	movdqa	-16(%ebx),%xmm0
176.byte	102,15,56,0,195
177	pxor	%xmm4,%xmm0
178	addl	$16,%edx
179.byte	102,15,56,0,197
180	movdqa	(%ebx),%xmm4
181.byte	102,15,56,0,226
182	pxor	%xmm0,%xmm4
183	movdqa	16(%ebx),%xmm0
184.byte	102,15,56,0,195
185	pxor	%xmm4,%xmm0
186	subl	$1,%eax
187.byte	102,15,56,0,197
188	movdqa	32(%ebx),%xmm4
189.byte	102,15,56,0,226
190	pxor	%xmm0,%xmm4
191	movdqa	48(%ebx),%xmm0
192.byte	102,15,56,0,195
193	pxor	%xmm4,%xmm0
194.byte	102,15,56,0,197
195	movdqa	64(%ebx),%xmm4
196.byte	102,15,56,0,226
197	pxor	%xmm0,%xmm4
198	movdqa	80(%ebx),%xmm0
199.byte	102,15,56,0,195
200	pxor	%xmm4,%xmm0
201.byte	102,15,58,15,237,12
202.L002dec_entry:
203	movdqa	%xmm6,%xmm1
204	pandn	%xmm0,%xmm1
205	psrld	$4,%xmm1
206	pand	%xmm6,%xmm0
207	movdqa	-32(%ebp),%xmm2
208.byte	102,15,56,0,208
209	pxor	%xmm1,%xmm0
210	movdqa	%xmm7,%xmm3
211.byte	102,15,56,0,217
212	pxor	%xmm2,%xmm3
213	movdqa	%xmm7,%xmm4
214.byte	102,15,56,0,224
215	pxor	%xmm2,%xmm4
216	movdqa	%xmm7,%xmm2
217.byte	102,15,56,0,211
218	pxor	%xmm0,%xmm2
219	movdqa	%xmm7,%xmm3
220.byte	102,15,56,0,220
221	pxor	%xmm1,%xmm3
222	movdqu	(%edx),%xmm0
223	jnz	.L003dec_loop
224	movdqa	96(%ebx),%xmm4
225.byte	102,15,56,0,226
226	pxor	%xmm0,%xmm4
227	movdqa	112(%ebx),%xmm0
228	movdqa	(%ecx),%xmm2
229.byte	102,15,56,0,195
230	pxor	%xmm4,%xmm0
231.byte	102,15,56,0,194
232	ret
233.size	_vpaes_decrypt_core,.-_vpaes_decrypt_core
234.type	_vpaes_schedule_core,@function
235.align	16
236_vpaes_schedule_core:
237	addl	(%esp),%ebp
238	movdqu	(%esi),%xmm0
239	movdqa	320(%ebp),%xmm2
240	movdqa	%xmm0,%xmm3
241	leal	(%ebp),%ebx
242	movdqa	%xmm2,4(%esp)
243	call	_vpaes_schedule_transform
244	movdqa	%xmm0,%xmm7
245	testl	%edi,%edi
246	jnz	.L004schedule_am_decrypting
247	movdqu	%xmm0,(%edx)
248	jmp	.L005schedule_go
249.L004schedule_am_decrypting:
250	movdqa	256(%ebp,%ecx,1),%xmm1
251.byte	102,15,56,0,217
252	movdqu	%xmm3,(%edx)
253	xorl	$48,%ecx
254.L005schedule_go:
255	cmpl	$192,%eax
256	ja	.L006schedule_256
257	je	.L007schedule_192
258.L008schedule_128:
259	movl	$10,%eax
260.L009loop_schedule_128:
261	call	_vpaes_schedule_round
262	decl	%eax
263	jz	.L010schedule_mangle_last
264	call	_vpaes_schedule_mangle
265	jmp	.L009loop_schedule_128
266.align	16
267.L007schedule_192:
268	movdqu	8(%esi),%xmm0
269	call	_vpaes_schedule_transform
270	movdqa	%xmm0,%xmm6
271	pxor	%xmm4,%xmm4
272	movhlps	%xmm4,%xmm6
273	movl	$4,%eax
274.L011loop_schedule_192:
275	call	_vpaes_schedule_round
276.byte	102,15,58,15,198,8
277	call	_vpaes_schedule_mangle
278	call	_vpaes_schedule_192_smear
279	call	_vpaes_schedule_mangle
280	call	_vpaes_schedule_round
281	decl	%eax
282	jz	.L010schedule_mangle_last
283	call	_vpaes_schedule_mangle
284	call	_vpaes_schedule_192_smear
285	jmp	.L011loop_schedule_192
286.align	16
287.L006schedule_256:
288	movdqu	16(%esi),%xmm0
289	call	_vpaes_schedule_transform
290	movl	$7,%eax
291.L012loop_schedule_256:
292	call	_vpaes_schedule_mangle
293	movdqa	%xmm0,%xmm6
294	call	_vpaes_schedule_round
295	decl	%eax
296	jz	.L010schedule_mangle_last
297	call	_vpaes_schedule_mangle
298	pshufd	$255,%xmm0,%xmm0
299	movdqa	%xmm7,20(%esp)
300	movdqa	%xmm6,%xmm7
301	call	.L_vpaes_schedule_low_round
302	movdqa	20(%esp),%xmm7
303	jmp	.L012loop_schedule_256
304.align	16
305.L010schedule_mangle_last:
306	leal	384(%ebp),%ebx
307	testl	%edi,%edi
308	jnz	.L013schedule_mangle_last_dec
309	movdqa	256(%ebp,%ecx,1),%xmm1
310.byte	102,15,56,0,193
311	leal	352(%ebp),%ebx
312	addl	$32,%edx
313.L013schedule_mangle_last_dec:
314	addl	$-16,%edx
315	pxor	336(%ebp),%xmm0
316	call	_vpaes_schedule_transform
317	movdqu	%xmm0,(%edx)
318	pxor	%xmm0,%xmm0
319	pxor	%xmm1,%xmm1
320	pxor	%xmm2,%xmm2
321	pxor	%xmm3,%xmm3
322	pxor	%xmm4,%xmm4
323	pxor	%xmm5,%xmm5
324	pxor	%xmm6,%xmm6
325	pxor	%xmm7,%xmm7
326	ret
327.size	_vpaes_schedule_core,.-_vpaes_schedule_core
328.type	_vpaes_schedule_192_smear,@function
329.align	16
330_vpaes_schedule_192_smear:
331	pshufd	$128,%xmm6,%xmm0
332	pxor	%xmm0,%xmm6
333	pshufd	$254,%xmm7,%xmm0
334	pxor	%xmm0,%xmm6
335	movdqa	%xmm6,%xmm0
336	pxor	%xmm1,%xmm1
337	movhlps	%xmm1,%xmm6
338	ret
339.size	_vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
340.type	_vpaes_schedule_round,@function
341.align	16
342_vpaes_schedule_round:
343	movdqa	8(%esp),%xmm2
344	pxor	%xmm1,%xmm1
345.byte	102,15,58,15,202,15
346.byte	102,15,58,15,210,15
347	pxor	%xmm1,%xmm7
348	pshufd	$255,%xmm0,%xmm0
349.byte	102,15,58,15,192,1
350	movdqa	%xmm2,8(%esp)
351.L_vpaes_schedule_low_round:
352	movdqa	%xmm7,%xmm1
353	pslldq	$4,%xmm7
354	pxor	%xmm1,%xmm7
355	movdqa	%xmm7,%xmm1
356	pslldq	$8,%xmm7
357	pxor	%xmm1,%xmm7
358	pxor	336(%ebp),%xmm7
359	movdqa	-16(%ebp),%xmm4
360	movdqa	-48(%ebp),%xmm5
361	movdqa	%xmm4,%xmm1
362	pandn	%xmm0,%xmm1
363	psrld	$4,%xmm1
364	pand	%xmm4,%xmm0
365	movdqa	-32(%ebp),%xmm2
366.byte	102,15,56,0,208
367	pxor	%xmm1,%xmm0
368	movdqa	%xmm5,%xmm3
369.byte	102,15,56,0,217
370	pxor	%xmm2,%xmm3
371	movdqa	%xmm5,%xmm4
372.byte	102,15,56,0,224
373	pxor	%xmm2,%xmm4
374	movdqa	%xmm5,%xmm2
375.byte	102,15,56,0,211
376	pxor	%xmm0,%xmm2
377	movdqa	%xmm5,%xmm3
378.byte	102,15,56,0,220
379	pxor	%xmm1,%xmm3
380	movdqa	32(%ebp),%xmm4
381.byte	102,15,56,0,226
382	movdqa	48(%ebp),%xmm0
383.byte	102,15,56,0,195
384	pxor	%xmm4,%xmm0
385	pxor	%xmm7,%xmm0
386	movdqa	%xmm0,%xmm7
387	ret
388.size	_vpaes_schedule_round,.-_vpaes_schedule_round
389.type	_vpaes_schedule_transform,@function
390.align	16
391_vpaes_schedule_transform:
392	movdqa	-16(%ebp),%xmm2
393	movdqa	%xmm2,%xmm1
394	pandn	%xmm0,%xmm1
395	psrld	$4,%xmm1
396	pand	%xmm2,%xmm0
397	movdqa	(%ebx),%xmm2
398.byte	102,15,56,0,208
399	movdqa	16(%ebx),%xmm0
400.byte	102,15,56,0,193
401	pxor	%xmm2,%xmm0
402	ret
403.size	_vpaes_schedule_transform,.-_vpaes_schedule_transform
404.type	_vpaes_schedule_mangle,@function
405.align	16
406_vpaes_schedule_mangle:
407	movdqa	%xmm0,%xmm4
408	movdqa	128(%ebp),%xmm5
409	testl	%edi,%edi
410	jnz	.L014schedule_mangle_dec
411	addl	$16,%edx
412	pxor	336(%ebp),%xmm4
413.byte	102,15,56,0,229
414	movdqa	%xmm4,%xmm3
415.byte	102,15,56,0,229
416	pxor	%xmm4,%xmm3
417.byte	102,15,56,0,229
418	pxor	%xmm4,%xmm3
419	jmp	.L015schedule_mangle_both
420.align	16
421.L014schedule_mangle_dec:
422	movdqa	-16(%ebp),%xmm2
423	leal	416(%ebp),%esi
424	movdqa	%xmm2,%xmm1
425	pandn	%xmm4,%xmm1
426	psrld	$4,%xmm1
427	pand	%xmm2,%xmm4
428	movdqa	(%esi),%xmm2
429.byte	102,15,56,0,212
430	movdqa	16(%esi),%xmm3
431.byte	102,15,56,0,217
432	pxor	%xmm2,%xmm3
433.byte	102,15,56,0,221
434	movdqa	32(%esi),%xmm2
435.byte	102,15,56,0,212
436	pxor	%xmm3,%xmm2
437	movdqa	48(%esi),%xmm3
438.byte	102,15,56,0,217
439	pxor	%xmm2,%xmm3
440.byte	102,15,56,0,221
441	movdqa	64(%esi),%xmm2
442.byte	102,15,56,0,212
443	pxor	%xmm3,%xmm2
444	movdqa	80(%esi),%xmm3
445.byte	102,15,56,0,217
446	pxor	%xmm2,%xmm3
447.byte	102,15,56,0,221
448	movdqa	96(%esi),%xmm2
449.byte	102,15,56,0,212
450	pxor	%xmm3,%xmm2
451	movdqa	112(%esi),%xmm3
452.byte	102,15,56,0,217
453	pxor	%xmm2,%xmm3
454	addl	$-16,%edx
455.L015schedule_mangle_both:
456	movdqa	256(%ebp,%ecx,1),%xmm1
457.byte	102,15,56,0,217
458	addl	$-16,%ecx
459	andl	$48,%ecx
460	movdqu	%xmm3,(%edx)
461	ret
462.size	_vpaes_schedule_mangle,.-_vpaes_schedule_mangle
463.globl	vpaes_set_encrypt_key
464.type	vpaes_set_encrypt_key,@function
465.align	16
466vpaes_set_encrypt_key:
467.L_vpaes_set_encrypt_key_begin:
468	pushl	%ebp
469	pushl	%ebx
470	pushl	%esi
471	pushl	%edi
472	movl	20(%esp),%esi
473	leal	-56(%esp),%ebx
474	movl	24(%esp),%eax
475	andl	$-16,%ebx
476	movl	28(%esp),%edx
477	xchgl	%esp,%ebx
478	movl	%ebx,48(%esp)
479	movl	%eax,%ebx
480	shrl	$5,%ebx
481	addl	$5,%ebx
482	movl	%ebx,240(%edx)
483	movl	$48,%ecx
484	movl	$0,%edi
485	leal	.L_vpaes_consts+0x30-.L016pic_point,%ebp
486	call	_vpaes_schedule_core
487.L016pic_point:
488	movl	48(%esp),%esp
489	xorl	%eax,%eax
490	popl	%edi
491	popl	%esi
492	popl	%ebx
493	popl	%ebp
494	ret
495.size	vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin
496.globl	vpaes_set_decrypt_key
497.type	vpaes_set_decrypt_key,@function
498.align	16
499vpaes_set_decrypt_key:
500.L_vpaes_set_decrypt_key_begin:
501	pushl	%ebp
502	pushl	%ebx
503	pushl	%esi
504	pushl	%edi
505	movl	20(%esp),%esi
506	leal	-56(%esp),%ebx
507	movl	24(%esp),%eax
508	andl	$-16,%ebx
509	movl	28(%esp),%edx
510	xchgl	%esp,%ebx
511	movl	%ebx,48(%esp)
512	movl	%eax,%ebx
513	shrl	$5,%ebx
514	addl	$5,%ebx
515	movl	%ebx,240(%edx)
516	shll	$4,%ebx
517	leal	16(%edx,%ebx,1),%edx
518	movl	$1,%edi
519	movl	%eax,%ecx
520	shrl	$1,%ecx
521	andl	$32,%ecx
522	xorl	$32,%ecx
523	leal	.L_vpaes_consts+0x30-.L017pic_point,%ebp
524	call	_vpaes_schedule_core
525.L017pic_point:
526	movl	48(%esp),%esp
527	xorl	%eax,%eax
528	popl	%edi
529	popl	%esi
530	popl	%ebx
531	popl	%ebp
532	ret
533.size	vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin
534.globl	vpaes_encrypt
535.type	vpaes_encrypt,@function
536.align	16
537vpaes_encrypt:
538.L_vpaes_encrypt_begin:
539	pushl	%ebp
540	pushl	%ebx
541	pushl	%esi
542	pushl	%edi
543	leal	.L_vpaes_consts+0x30-.L018pic_point,%ebp
544	call	_vpaes_preheat
545.L018pic_point:
546	movl	20(%esp),%esi
547	leal	-56(%esp),%ebx
548	movl	24(%esp),%edi
549	andl	$-16,%ebx
550	movl	28(%esp),%edx
551	xchgl	%esp,%ebx
552	movl	%ebx,48(%esp)
553	movdqu	(%esi),%xmm0
554	call	_vpaes_encrypt_core
555	movdqu	%xmm0,(%edi)
556	movl	48(%esp),%esp
557	popl	%edi
558	popl	%esi
559	popl	%ebx
560	popl	%ebp
561	ret
562.size	vpaes_encrypt,.-.L_vpaes_encrypt_begin
563.globl	vpaes_decrypt
564.type	vpaes_decrypt,@function
565.align	16
566vpaes_decrypt:
567.L_vpaes_decrypt_begin:
568	pushl	%ebp
569	pushl	%ebx
570	pushl	%esi
571	pushl	%edi
572	leal	.L_vpaes_consts+0x30-.L019pic_point,%ebp
573	call	_vpaes_preheat
574.L019pic_point:
575	movl	20(%esp),%esi
576	leal	-56(%esp),%ebx
577	movl	24(%esp),%edi
578	andl	$-16,%ebx
579	movl	28(%esp),%edx
580	xchgl	%esp,%ebx
581	movl	%ebx,48(%esp)
582	movdqu	(%esi),%xmm0
583	call	_vpaes_decrypt_core
584	movdqu	%xmm0,(%edi)
585	movl	48(%esp),%esp
586	popl	%edi
587	popl	%esi
588	popl	%ebx
589	popl	%ebp
590	ret
591.size	vpaes_decrypt,.-.L_vpaes_decrypt_begin
592.globl	vpaes_cbc_encrypt
593.type	vpaes_cbc_encrypt,@function
594.align	16
595vpaes_cbc_encrypt:
596.L_vpaes_cbc_encrypt_begin:
597	pushl	%ebp
598	pushl	%ebx
599	pushl	%esi
600	pushl	%edi
601	movl	20(%esp),%esi
602	movl	24(%esp),%edi
603	movl	28(%esp),%eax
604	movl	32(%esp),%edx
605	subl	$16,%eax
606	jc	.L020cbc_abort
607	leal	-56(%esp),%ebx
608	movl	36(%esp),%ebp
609	andl	$-16,%ebx
610	movl	40(%esp),%ecx
611	xchgl	%esp,%ebx
612	movdqu	(%ebp),%xmm1
613	subl	%esi,%edi
614	movl	%ebx,48(%esp)
615	movl	%edi,(%esp)
616	movl	%edx,4(%esp)
617	movl	%ebp,8(%esp)
618	movl	%eax,%edi
619	leal	.L_vpaes_consts+0x30-.L021pic_point,%ebp
620	call	_vpaes_preheat
621.L021pic_point:
622	cmpl	$0,%ecx
623	je	.L022cbc_dec_loop
624	jmp	.L023cbc_enc_loop
625.align	16
626.L023cbc_enc_loop:
627	movdqu	(%esi),%xmm0
628	pxor	%xmm1,%xmm0
629	call	_vpaes_encrypt_core
630	movl	(%esp),%ebx
631	movl	4(%esp),%edx
632	movdqa	%xmm0,%xmm1
633	movdqu	%xmm0,(%ebx,%esi,1)
634	leal	16(%esi),%esi
635	subl	$16,%edi
636	jnc	.L023cbc_enc_loop
637	jmp	.L024cbc_done
638.align	16
639.L022cbc_dec_loop:
640	movdqu	(%esi),%xmm0
641	movdqa	%xmm1,16(%esp)
642	movdqa	%xmm0,32(%esp)
643	call	_vpaes_decrypt_core
644	movl	(%esp),%ebx
645	movl	4(%esp),%edx
646	pxor	16(%esp),%xmm0
647	movdqa	32(%esp),%xmm1
648	movdqu	%xmm0,(%ebx,%esi,1)
649	leal	16(%esi),%esi
650	subl	$16,%edi
651	jnc	.L022cbc_dec_loop
652.L024cbc_done:
653	movl	8(%esp),%ebx
654	movl	48(%esp),%esp
655	movdqu	%xmm1,(%ebx)
656.L020cbc_abort:
657	popl	%edi
658	popl	%esi
659	popl	%ebx
660	popl	%ebp
661	ret
662.size	vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin
663