• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#if defined(__i386__)
2.text
3.align	6,0x90
4L_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	6,0x90
60.private_extern	__vpaes_preheat
61.align	4
62__vpaes_preheat:
63	addl	(%esp),%ebp
64	movdqa	-48(%ebp),%xmm7
65	movdqa	-16(%ebp),%xmm6
66	ret
67.private_extern	__vpaes_encrypt_core
68.align	4
69__vpaes_encrypt_core:
70	movl	$16,%ecx
71	movl	240(%edx),%eax
72	movdqa	%xmm6,%xmm1
73	movdqa	(%ebp),%xmm2
74	pandn	%xmm0,%xmm1
75	pand	%xmm6,%xmm0
76	movdqu	(%edx),%xmm5
77.byte	102,15,56,0,208
78	movdqa	16(%ebp),%xmm0
79	pxor	%xmm5,%xmm2
80	psrld	$4,%xmm1
81	addl	$16,%edx
82.byte	102,15,56,0,193
83	leal	192(%ebp),%ebx
84	pxor	%xmm2,%xmm0
85	jmp	L000enc_entry
86.align	4,0x90
87L001enc_loop:
88	movdqa	32(%ebp),%xmm4
89	movdqa	48(%ebp),%xmm0
90.byte	102,15,56,0,226
91.byte	102,15,56,0,195
92	pxor	%xmm5,%xmm4
93	movdqa	64(%ebp),%xmm5
94	pxor	%xmm4,%xmm0
95	movdqa	-64(%ebx,%ecx,1),%xmm1
96.byte	102,15,56,0,234
97	movdqa	80(%ebp),%xmm2
98	movdqa	(%ebx,%ecx,1),%xmm4
99.byte	102,15,56,0,211
100	movdqa	%xmm0,%xmm3
101	pxor	%xmm5,%xmm2
102.byte	102,15,56,0,193
103	addl	$16,%edx
104	pxor	%xmm2,%xmm0
105.byte	102,15,56,0,220
106	addl	$16,%ecx
107	pxor	%xmm0,%xmm3
108.byte	102,15,56,0,193
109	andl	$48,%ecx
110	subl	$1,%eax
111	pxor	%xmm3,%xmm0
112L000enc_entry:
113	movdqa	%xmm6,%xmm1
114	movdqa	-32(%ebp),%xmm5
115	pandn	%xmm0,%xmm1
116	psrld	$4,%xmm1
117	pand	%xmm6,%xmm0
118.byte	102,15,56,0,232
119	movdqa	%xmm7,%xmm3
120	pxor	%xmm1,%xmm0
121.byte	102,15,56,0,217
122	movdqa	%xmm7,%xmm4
123	pxor	%xmm5,%xmm3
124.byte	102,15,56,0,224
125	movdqa	%xmm7,%xmm2
126	pxor	%xmm5,%xmm4
127.byte	102,15,56,0,211
128	movdqa	%xmm7,%xmm3
129	pxor	%xmm0,%xmm2
130.byte	102,15,56,0,220
131	movdqu	(%edx),%xmm5
132	pxor	%xmm1,%xmm3
133	jnz	L001enc_loop
134	movdqa	96(%ebp),%xmm4
135	movdqa	112(%ebp),%xmm0
136.byte	102,15,56,0,226
137	pxor	%xmm5,%xmm4
138.byte	102,15,56,0,195
139	movdqa	64(%ebx,%ecx,1),%xmm1
140	pxor	%xmm4,%xmm0
141.byte	102,15,56,0,193
142	ret
143.private_extern	__vpaes_decrypt_core
144.align	4
145__vpaes_decrypt_core:
146	leal	608(%ebp),%ebx
147	movl	240(%edx),%eax
148	movdqa	%xmm6,%xmm1
149	movdqa	-64(%ebx),%xmm2
150	pandn	%xmm0,%xmm1
151	movl	%eax,%ecx
152	psrld	$4,%xmm1
153	movdqu	(%edx),%xmm5
154	shll	$4,%ecx
155	pand	%xmm6,%xmm0
156.byte	102,15,56,0,208
157	movdqa	-48(%ebx),%xmm0
158	xorl	$48,%ecx
159.byte	102,15,56,0,193
160	andl	$48,%ecx
161	pxor	%xmm5,%xmm2
162	movdqa	176(%ebp),%xmm5
163	pxor	%xmm2,%xmm0
164	addl	$16,%edx
165	leal	-352(%ebx,%ecx,1),%ecx
166	jmp	L002dec_entry
167.align	4,0x90
168L003dec_loop:
169	movdqa	-32(%ebx),%xmm4
170	movdqa	-16(%ebx),%xmm1
171.byte	102,15,56,0,226
172.byte	102,15,56,0,203
173	pxor	%xmm4,%xmm0
174	movdqa	(%ebx),%xmm4
175	pxor	%xmm1,%xmm0
176	movdqa	16(%ebx),%xmm1
177.byte	102,15,56,0,226
178.byte	102,15,56,0,197
179.byte	102,15,56,0,203
180	pxor	%xmm4,%xmm0
181	movdqa	32(%ebx),%xmm4
182	pxor	%xmm1,%xmm0
183	movdqa	48(%ebx),%xmm1
184.byte	102,15,56,0,226
185.byte	102,15,56,0,197
186.byte	102,15,56,0,203
187	pxor	%xmm4,%xmm0
188	movdqa	64(%ebx),%xmm4
189	pxor	%xmm1,%xmm0
190	movdqa	80(%ebx),%xmm1
191.byte	102,15,56,0,226
192.byte	102,15,56,0,197
193.byte	102,15,56,0,203
194	pxor	%xmm4,%xmm0
195	addl	$16,%edx
196.byte	102,15,58,15,237,12
197	pxor	%xmm1,%xmm0
198	subl	$1,%eax
199L002dec_entry:
200	movdqa	%xmm6,%xmm1
201	movdqa	-32(%ebp),%xmm2
202	pandn	%xmm0,%xmm1
203	pand	%xmm6,%xmm0
204	psrld	$4,%xmm1
205.byte	102,15,56,0,208
206	movdqa	%xmm7,%xmm3
207	pxor	%xmm1,%xmm0
208.byte	102,15,56,0,217
209	movdqa	%xmm7,%xmm4
210	pxor	%xmm2,%xmm3
211.byte	102,15,56,0,224
212	pxor	%xmm2,%xmm4
213	movdqa	%xmm7,%xmm2
214.byte	102,15,56,0,211
215	movdqa	%xmm7,%xmm3
216	pxor	%xmm0,%xmm2
217.byte	102,15,56,0,220
218	movdqu	(%edx),%xmm0
219	pxor	%xmm1,%xmm3
220	jnz	L003dec_loop
221	movdqa	96(%ebx),%xmm4
222.byte	102,15,56,0,226
223	pxor	%xmm0,%xmm4
224	movdqa	112(%ebx),%xmm0
225	movdqa	(%ecx),%xmm2
226.byte	102,15,56,0,195
227	pxor	%xmm4,%xmm0
228.byte	102,15,56,0,194
229	ret
230.private_extern	__vpaes_schedule_core
231.align	4
232__vpaes_schedule_core:
233	addl	(%esp),%ebp
234	movdqu	(%esi),%xmm0
235	movdqa	320(%ebp),%xmm2
236	movdqa	%xmm0,%xmm3
237	leal	(%ebp),%ebx
238	movdqa	%xmm2,4(%esp)
239	call	__vpaes_schedule_transform
240	movdqa	%xmm0,%xmm7
241	testl	%edi,%edi
242	jnz	L004schedule_am_decrypting
243	movdqu	%xmm0,(%edx)
244	jmp	L005schedule_go
245L004schedule_am_decrypting:
246	movdqa	256(%ebp,%ecx,1),%xmm1
247.byte	102,15,56,0,217
248	movdqu	%xmm3,(%edx)
249	xorl	$48,%ecx
250L005schedule_go:
251	cmpl	$192,%eax
252	ja	L006schedule_256
253	je	L007schedule_192
254L008schedule_128:
255	movl	$10,%eax
256L009loop_schedule_128:
257	call	__vpaes_schedule_round
258	decl	%eax
259	jz	L010schedule_mangle_last
260	call	__vpaes_schedule_mangle
261	jmp	L009loop_schedule_128
262.align	4,0x90
263L007schedule_192:
264	movdqu	8(%esi),%xmm0
265	call	__vpaes_schedule_transform
266	movdqa	%xmm0,%xmm6
267	pxor	%xmm4,%xmm4
268	movhlps	%xmm4,%xmm6
269	movl	$4,%eax
270L011loop_schedule_192:
271	call	__vpaes_schedule_round
272.byte	102,15,58,15,198,8
273	call	__vpaes_schedule_mangle
274	call	__vpaes_schedule_192_smear
275	call	__vpaes_schedule_mangle
276	call	__vpaes_schedule_round
277	decl	%eax
278	jz	L010schedule_mangle_last
279	call	__vpaes_schedule_mangle
280	call	__vpaes_schedule_192_smear
281	jmp	L011loop_schedule_192
282.align	4,0x90
283L006schedule_256:
284	movdqu	16(%esi),%xmm0
285	call	__vpaes_schedule_transform
286	movl	$7,%eax
287L012loop_schedule_256:
288	call	__vpaes_schedule_mangle
289	movdqa	%xmm0,%xmm6
290	call	__vpaes_schedule_round
291	decl	%eax
292	jz	L010schedule_mangle_last
293	call	__vpaes_schedule_mangle
294	pshufd	$255,%xmm0,%xmm0
295	movdqa	%xmm7,20(%esp)
296	movdqa	%xmm6,%xmm7
297	call	L_vpaes_schedule_low_round
298	movdqa	20(%esp),%xmm7
299	jmp	L012loop_schedule_256
300.align	4,0x90
301L010schedule_mangle_last:
302	leal	384(%ebp),%ebx
303	testl	%edi,%edi
304	jnz	L013schedule_mangle_last_dec
305	movdqa	256(%ebp,%ecx,1),%xmm1
306.byte	102,15,56,0,193
307	leal	352(%ebp),%ebx
308	addl	$32,%edx
309L013schedule_mangle_last_dec:
310	addl	$-16,%edx
311	pxor	336(%ebp),%xmm0
312	call	__vpaes_schedule_transform
313	movdqu	%xmm0,(%edx)
314	pxor	%xmm0,%xmm0
315	pxor	%xmm1,%xmm1
316	pxor	%xmm2,%xmm2
317	pxor	%xmm3,%xmm3
318	pxor	%xmm4,%xmm4
319	pxor	%xmm5,%xmm5
320	pxor	%xmm6,%xmm6
321	pxor	%xmm7,%xmm7
322	ret
323.private_extern	__vpaes_schedule_192_smear
324.align	4
325__vpaes_schedule_192_smear:
326	pshufd	$128,%xmm6,%xmm1
327	pshufd	$254,%xmm7,%xmm0
328	pxor	%xmm1,%xmm6
329	pxor	%xmm1,%xmm1
330	pxor	%xmm0,%xmm6
331	movdqa	%xmm6,%xmm0
332	movhlps	%xmm1,%xmm6
333	ret
334.private_extern	__vpaes_schedule_round
335.align	4
336__vpaes_schedule_round:
337	movdqa	8(%esp),%xmm2
338	pxor	%xmm1,%xmm1
339.byte	102,15,58,15,202,15
340.byte	102,15,58,15,210,15
341	pxor	%xmm1,%xmm7
342	pshufd	$255,%xmm0,%xmm0
343.byte	102,15,58,15,192,1
344	movdqa	%xmm2,8(%esp)
345L_vpaes_schedule_low_round:
346	movdqa	%xmm7,%xmm1
347	pslldq	$4,%xmm7
348	pxor	%xmm1,%xmm7
349	movdqa	%xmm7,%xmm1
350	pslldq	$8,%xmm7
351	pxor	%xmm1,%xmm7
352	pxor	336(%ebp),%xmm7
353	movdqa	-16(%ebp),%xmm4
354	movdqa	-48(%ebp),%xmm5
355	movdqa	%xmm4,%xmm1
356	pandn	%xmm0,%xmm1
357	psrld	$4,%xmm1
358	pand	%xmm4,%xmm0
359	movdqa	-32(%ebp),%xmm2
360.byte	102,15,56,0,208
361	pxor	%xmm1,%xmm0
362	movdqa	%xmm5,%xmm3
363.byte	102,15,56,0,217
364	pxor	%xmm2,%xmm3
365	movdqa	%xmm5,%xmm4
366.byte	102,15,56,0,224
367	pxor	%xmm2,%xmm4
368	movdqa	%xmm5,%xmm2
369.byte	102,15,56,0,211
370	pxor	%xmm0,%xmm2
371	movdqa	%xmm5,%xmm3
372.byte	102,15,56,0,220
373	pxor	%xmm1,%xmm3
374	movdqa	32(%ebp),%xmm4
375.byte	102,15,56,0,226
376	movdqa	48(%ebp),%xmm0
377.byte	102,15,56,0,195
378	pxor	%xmm4,%xmm0
379	pxor	%xmm7,%xmm0
380	movdqa	%xmm0,%xmm7
381	ret
382.private_extern	__vpaes_schedule_transform
383.align	4
384__vpaes_schedule_transform:
385	movdqa	-16(%ebp),%xmm2
386	movdqa	%xmm2,%xmm1
387	pandn	%xmm0,%xmm1
388	psrld	$4,%xmm1
389	pand	%xmm2,%xmm0
390	movdqa	(%ebx),%xmm2
391.byte	102,15,56,0,208
392	movdqa	16(%ebx),%xmm0
393.byte	102,15,56,0,193
394	pxor	%xmm2,%xmm0
395	ret
396.private_extern	__vpaes_schedule_mangle
397.align	4
398__vpaes_schedule_mangle:
399	movdqa	%xmm0,%xmm4
400	movdqa	128(%ebp),%xmm5
401	testl	%edi,%edi
402	jnz	L014schedule_mangle_dec
403	addl	$16,%edx
404	pxor	336(%ebp),%xmm4
405.byte	102,15,56,0,229
406	movdqa	%xmm4,%xmm3
407.byte	102,15,56,0,229
408	pxor	%xmm4,%xmm3
409.byte	102,15,56,0,229
410	pxor	%xmm4,%xmm3
411	jmp	L015schedule_mangle_both
412.align	4,0x90
413L014schedule_mangle_dec:
414	movdqa	-16(%ebp),%xmm2
415	leal	416(%ebp),%esi
416	movdqa	%xmm2,%xmm1
417	pandn	%xmm4,%xmm1
418	psrld	$4,%xmm1
419	pand	%xmm2,%xmm4
420	movdqa	(%esi),%xmm2
421.byte	102,15,56,0,212
422	movdqa	16(%esi),%xmm3
423.byte	102,15,56,0,217
424	pxor	%xmm2,%xmm3
425.byte	102,15,56,0,221
426	movdqa	32(%esi),%xmm2
427.byte	102,15,56,0,212
428	pxor	%xmm3,%xmm2
429	movdqa	48(%esi),%xmm3
430.byte	102,15,56,0,217
431	pxor	%xmm2,%xmm3
432.byte	102,15,56,0,221
433	movdqa	64(%esi),%xmm2
434.byte	102,15,56,0,212
435	pxor	%xmm3,%xmm2
436	movdqa	80(%esi),%xmm3
437.byte	102,15,56,0,217
438	pxor	%xmm2,%xmm3
439.byte	102,15,56,0,221
440	movdqa	96(%esi),%xmm2
441.byte	102,15,56,0,212
442	pxor	%xmm3,%xmm2
443	movdqa	112(%esi),%xmm3
444.byte	102,15,56,0,217
445	pxor	%xmm2,%xmm3
446	addl	$-16,%edx
447L015schedule_mangle_both:
448	movdqa	256(%ebp,%ecx,1),%xmm1
449.byte	102,15,56,0,217
450	addl	$-16,%ecx
451	andl	$48,%ecx
452	movdqu	%xmm3,(%edx)
453	ret
454.globl	_vpaes_set_encrypt_key
455.private_extern	_vpaes_set_encrypt_key
456.align	4
457_vpaes_set_encrypt_key:
458L_vpaes_set_encrypt_key_begin:
459	pushl	%ebp
460	pushl	%ebx
461	pushl	%esi
462	pushl	%edi
463	movl	20(%esp),%esi
464	leal	-56(%esp),%ebx
465	movl	24(%esp),%eax
466	andl	$-16,%ebx
467	movl	28(%esp),%edx
468	xchgl	%esp,%ebx
469	movl	%ebx,48(%esp)
470	movl	%eax,%ebx
471	shrl	$5,%ebx
472	addl	$5,%ebx
473	movl	%ebx,240(%edx)
474	movl	$48,%ecx
475	movl	$0,%edi
476	leal	L_vpaes_consts+0x30-L016pic_point,%ebp
477	call	__vpaes_schedule_core
478L016pic_point:
479	movl	48(%esp),%esp
480	xorl	%eax,%eax
481	popl	%edi
482	popl	%esi
483	popl	%ebx
484	popl	%ebp
485	ret
486.globl	_vpaes_set_decrypt_key
487.private_extern	_vpaes_set_decrypt_key
488.align	4
489_vpaes_set_decrypt_key:
490L_vpaes_set_decrypt_key_begin:
491	pushl	%ebp
492	pushl	%ebx
493	pushl	%esi
494	pushl	%edi
495	movl	20(%esp),%esi
496	leal	-56(%esp),%ebx
497	movl	24(%esp),%eax
498	andl	$-16,%ebx
499	movl	28(%esp),%edx
500	xchgl	%esp,%ebx
501	movl	%ebx,48(%esp)
502	movl	%eax,%ebx
503	shrl	$5,%ebx
504	addl	$5,%ebx
505	movl	%ebx,240(%edx)
506	shll	$4,%ebx
507	leal	16(%edx,%ebx,1),%edx
508	movl	$1,%edi
509	movl	%eax,%ecx
510	shrl	$1,%ecx
511	andl	$32,%ecx
512	xorl	$32,%ecx
513	leal	L_vpaes_consts+0x30-L017pic_point,%ebp
514	call	__vpaes_schedule_core
515L017pic_point:
516	movl	48(%esp),%esp
517	xorl	%eax,%eax
518	popl	%edi
519	popl	%esi
520	popl	%ebx
521	popl	%ebp
522	ret
523.globl	_vpaes_encrypt
524.private_extern	_vpaes_encrypt
525.align	4
526_vpaes_encrypt:
527L_vpaes_encrypt_begin:
528	pushl	%ebp
529	pushl	%ebx
530	pushl	%esi
531	pushl	%edi
532	leal	L_vpaes_consts+0x30-L018pic_point,%ebp
533	call	__vpaes_preheat
534L018pic_point:
535	movl	20(%esp),%esi
536	leal	-56(%esp),%ebx
537	movl	24(%esp),%edi
538	andl	$-16,%ebx
539	movl	28(%esp),%edx
540	xchgl	%esp,%ebx
541	movl	%ebx,48(%esp)
542	movdqu	(%esi),%xmm0
543	call	__vpaes_encrypt_core
544	movdqu	%xmm0,(%edi)
545	movl	48(%esp),%esp
546	popl	%edi
547	popl	%esi
548	popl	%ebx
549	popl	%ebp
550	ret
551.globl	_vpaes_decrypt
552.private_extern	_vpaes_decrypt
553.align	4
554_vpaes_decrypt:
555L_vpaes_decrypt_begin:
556	pushl	%ebp
557	pushl	%ebx
558	pushl	%esi
559	pushl	%edi
560	leal	L_vpaes_consts+0x30-L019pic_point,%ebp
561	call	__vpaes_preheat
562L019pic_point:
563	movl	20(%esp),%esi
564	leal	-56(%esp),%ebx
565	movl	24(%esp),%edi
566	andl	$-16,%ebx
567	movl	28(%esp),%edx
568	xchgl	%esp,%ebx
569	movl	%ebx,48(%esp)
570	movdqu	(%esi),%xmm0
571	call	__vpaes_decrypt_core
572	movdqu	%xmm0,(%edi)
573	movl	48(%esp),%esp
574	popl	%edi
575	popl	%esi
576	popl	%ebx
577	popl	%ebp
578	ret
579.globl	_vpaes_cbc_encrypt
580.private_extern	_vpaes_cbc_encrypt
581.align	4
582_vpaes_cbc_encrypt:
583L_vpaes_cbc_encrypt_begin:
584	pushl	%ebp
585	pushl	%ebx
586	pushl	%esi
587	pushl	%edi
588	movl	20(%esp),%esi
589	movl	24(%esp),%edi
590	movl	28(%esp),%eax
591	movl	32(%esp),%edx
592	subl	$16,%eax
593	jc	L020cbc_abort
594	leal	-56(%esp),%ebx
595	movl	36(%esp),%ebp
596	andl	$-16,%ebx
597	movl	40(%esp),%ecx
598	xchgl	%esp,%ebx
599	movdqu	(%ebp),%xmm1
600	subl	%esi,%edi
601	movl	%ebx,48(%esp)
602	movl	%edi,(%esp)
603	movl	%edx,4(%esp)
604	movl	%ebp,8(%esp)
605	movl	%eax,%edi
606	leal	L_vpaes_consts+0x30-L021pic_point,%ebp
607	call	__vpaes_preheat
608L021pic_point:
609	cmpl	$0,%ecx
610	je	L022cbc_dec_loop
611	jmp	L023cbc_enc_loop
612.align	4,0x90
613L023cbc_enc_loop:
614	movdqu	(%esi),%xmm0
615	pxor	%xmm1,%xmm0
616	call	__vpaes_encrypt_core
617	movl	(%esp),%ebx
618	movl	4(%esp),%edx
619	movdqa	%xmm0,%xmm1
620	movdqu	%xmm0,(%ebx,%esi,1)
621	leal	16(%esi),%esi
622	subl	$16,%edi
623	jnc	L023cbc_enc_loop
624	jmp	L024cbc_done
625.align	4,0x90
626L022cbc_dec_loop:
627	movdqu	(%esi),%xmm0
628	movdqa	%xmm1,16(%esp)
629	movdqa	%xmm0,32(%esp)
630	call	__vpaes_decrypt_core
631	movl	(%esp),%ebx
632	movl	4(%esp),%edx
633	pxor	16(%esp),%xmm0
634	movdqa	32(%esp),%xmm1
635	movdqu	%xmm0,(%ebx,%esi,1)
636	leal	16(%esi),%esi
637	subl	$16,%edi
638	jnc	L022cbc_dec_loop
639L024cbc_done:
640	movl	8(%esp),%ebx
641	movl	48(%esp),%esp
642	movdqu	%xmm1,(%ebx)
643L020cbc_abort:
644	popl	%edi
645	popl	%esi
646	popl	%ebx
647	popl	%ebp
648	ret
649#endif
650