1	# $FreeBSD$
2.file	"vpaes-x86.s"
3.text
4.align	64
5.L_vpaes_consts:
6.long	218628480,235210255,168496130,67568393
7.long	252381056,17041926,33884169,51187212
8.long	252645135,252645135,252645135,252645135
9.long	1512730624,3266504856,1377990664,3401244816
10.long	830229760,1275146365,2969422977,3447763452
11.long	3411033600,2979783055,338359620,2782886510
12.long	4209124096,907596821,221174255,1006095553
13.long	191964160,3799684038,3164090317,1589111125
14.long	182528256,1777043520,2877432650,3265356744
15.long	1874708224,3503451415,3305285752,363511674
16.long	1606117888,3487855781,1093350906,2384367825
17.long	197121,67569157,134941193,202313229
18.long	67569157,134941193,202313229,197121
19.long	134941193,202313229,197121,67569157
20.long	202313229,197121,67569157,134941193
21.long	33619971,100992007,168364043,235736079
22.long	235736079,33619971,100992007,168364043
23.long	168364043,235736079,33619971,100992007
24.long	100992007,168364043,235736079,33619971
25.long	50462976,117835012,185207048,252579084
26.long	252314880,51251460,117574920,184942860
27.long	184682752,252054788,50987272,118359308
28.long	118099200,185467140,251790600,50727180
29.long	2946363062,528716217,1300004225,1881839624
30.long	1532713819,1532713819,1532713819,1532713819
31.long	3602276352,4288629033,3737020424,4153884961
32.long	1354558464,32357713,2958822624,3775749553
33.long	1201988352,132424512,1572796698,503232858
34.long	2213177600,1597421020,4103937655,675398315
35.long	2749646592,4273543773,1511898873,121693092
36.long	3040248576,1103263732,2871565598,1608280554
37.long	2236667136,2588920351,482954393,64377734
38.long	3069987328,291237287,2117370568,3650299247
39.long	533321216,3573750986,2572112006,1401264716
40.long	1339849704,2721158661,548607111,3445553514
41.long	2128193280,3054596040,2183486460,1257083700
42.long	655635200,1165381986,3923443150,2344132524
43.long	190078720,256924420,290342170,357187870
44.long	1610966272,2263057382,4103205268,309794674
45.long	2592527872,2233205587,1335446729,3402964816
46.long	3973531904,3225098121,3002836325,1918774430
47.long	3870401024,2102906079,2284471353,4117666579
48.long	617007872,1021508343,366931923,691083277
49.long	2528395776,3491914898,2968704004,1613121270
50.long	3445188352,3247741094,844474987,4093578302
51.long	651481088,1190302358,1689581232,574775300
52.long	4289380608,206939853,2555985458,2489840491
53.long	2130264064,327674451,3566485037,3349835193
54.long	2470714624,316102159,3636825756,3393945945
55.byte	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
56.byte	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
57.byte	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
58.byte	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
59.byte	118,101,114,115,105,116,121,41,0
60.align	64
61.type	_vpaes_preheat,@function
62.align	16
63_vpaes_preheat:
64	addl	(%esp),%ebp
65	movdqa	-48(%ebp),%xmm7
66	movdqa	-16(%ebp),%xmm6
67	ret
68.size	_vpaes_preheat,.-_vpaes_preheat
69.type	_vpaes_encrypt_core,@function
70.align	16
71_vpaes_encrypt_core:
72	movl	$16,%ecx
73	movl	240(%edx),%eax
74	movdqa	%xmm6,%xmm1
75	movdqa	(%ebp),%xmm2
76	pandn	%xmm0,%xmm1
77	movdqu	(%edx),%xmm5
78	psrld	$4,%xmm1
79	pand	%xmm6,%xmm0
80.byte	102,15,56,0,208
81	movdqa	16(%ebp),%xmm0
82.byte	102,15,56,0,193
83	pxor	%xmm5,%xmm2
84	pxor	%xmm2,%xmm0
85	addl	$16,%edx
86	leal	192(%ebp),%ebx
87	jmp	.L000enc_entry
88.align	16
89.L001enc_loop:
90	movdqa	32(%ebp),%xmm4
91.byte	102,15,56,0,226
92	pxor	%xmm5,%xmm4
93	movdqa	48(%ebp),%xmm0
94.byte	102,15,56,0,195
95	pxor	%xmm4,%xmm0
96	movdqa	64(%ebp),%xmm5
97.byte	102,15,56,0,234
98	movdqa	-64(%ebx,%ecx,1),%xmm1
99	movdqa	80(%ebp),%xmm2
100.byte	102,15,56,0,211
101	pxor	%xmm5,%xmm2
102	movdqa	(%ebx,%ecx,1),%xmm4
103	movdqa	%xmm0,%xmm3
104.byte	102,15,56,0,193
105	addl	$16,%edx
106	pxor	%xmm2,%xmm0
107.byte	102,15,56,0,220
108	addl	$16,%ecx
109	pxor	%xmm0,%xmm3
110.byte	102,15,56,0,193
111	andl	$48,%ecx
112	pxor	%xmm3,%xmm0
113	subl	$1,%eax
114.L000enc_entry:
115	movdqa	%xmm6,%xmm1
116	pandn	%xmm0,%xmm1
117	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