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