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