xref: /freebsd/sys/crypto/openssl/i386/vpaes-x86.S (revision 2a63c3be158216222d89a073dcbd6a72ee4aab5a)
1/* Do not modify. This file is auto-generated from vpaes-x86.pl. */
2#ifdef PIC
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	pand	%xmm6,%xmm0
78	movdqu	(%edx),%xmm5
79.byte	102,15,56,0,208
80	movdqa	16(%ebp),%xmm0
81	pxor	%xmm5,%xmm2
82	psrld	$4,%xmm1
83	addl	$16,%edx
84.byte	102,15,56,0,193
85	leal	192(%ebp),%ebx
86	pxor	%xmm2,%xmm0
87	jmp	.L000enc_entry
88.align	16
89.L001enc_loop:
90	movdqa	32(%ebp),%xmm4
91	movdqa	48(%ebp),%xmm0
92.byte	102,15,56,0,226
93.byte	102,15,56,0,195
94	pxor	%xmm5,%xmm4
95	movdqa	64(%ebp),%xmm5
96	pxor	%xmm4,%xmm0
97	movdqa	-64(%ebx,%ecx,1),%xmm1
98.byte	102,15,56,0,234
99	movdqa	80(%ebp),%xmm2
100	movdqa	(%ebx,%ecx,1),%xmm4
101.byte	102,15,56,0,211
102	movdqa	%xmm0,%xmm3
103	pxor	%xmm5,%xmm2
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	subl	$1,%eax
113	pxor	%xmm3,%xmm0
114.L000enc_entry:
115	movdqa	%xmm6,%xmm1
116	movdqa	-32(%ebp),%xmm5
117	pandn	%xmm0,%xmm1
118	psrld	$4,%xmm1
119	pand	%xmm6,%xmm0
120.byte	102,15,56,0,232
121	movdqa	%xmm7,%xmm3
122	pxor	%xmm1,%xmm0
123.byte	102,15,56,0,217
124	movdqa	%xmm7,%xmm4
125	pxor	%xmm5,%xmm3
126.byte	102,15,56,0,224
127	movdqa	%xmm7,%xmm2
128	pxor	%xmm5,%xmm4
129.byte	102,15,56,0,211
130	movdqa	%xmm7,%xmm3
131	pxor	%xmm0,%xmm2
132.byte	102,15,56,0,220
133	movdqu	(%edx),%xmm5
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	leal	608(%ebp),%ebx
150	movl	240(%edx),%eax
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	movdqa	-16(%ebx),%xmm1
174.byte	102,15,56,0,226
175.byte	102,15,56,0,203
176	pxor	%xmm4,%xmm0
177	movdqa	(%ebx),%xmm4
178	pxor	%xmm1,%xmm0
179	movdqa	16(%ebx),%xmm1
180.byte	102,15,56,0,226
181.byte	102,15,56,0,197
182.byte	102,15,56,0,203
183	pxor	%xmm4,%xmm0
184	movdqa	32(%ebx),%xmm4
185	pxor	%xmm1,%xmm0
186	movdqa	48(%ebx),%xmm1
187.byte	102,15,56,0,226
188.byte	102,15,56,0,197
189.byte	102,15,56,0,203
190	pxor	%xmm4,%xmm0
191	movdqa	64(%ebx),%xmm4
192	pxor	%xmm1,%xmm0
193	movdqa	80(%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	addl	$16,%edx
199.byte	102,15,58,15,237,12
200	pxor	%xmm1,%xmm0
201	subl	$1,%eax
202.L002dec_entry:
203	movdqa	%xmm6,%xmm1
204	movdqa	-32(%ebp),%xmm2
205	pandn	%xmm0,%xmm1
206	pand	%xmm6,%xmm0
207	psrld	$4,%xmm1
208.byte	102,15,56,0,208
209	movdqa	%xmm7,%xmm3
210	pxor	%xmm1,%xmm0
211.byte	102,15,56,0,217
212	movdqa	%xmm7,%xmm4
213	pxor	%xmm2,%xmm3
214.byte	102,15,56,0,224
215	pxor	%xmm2,%xmm4
216	movdqa	%xmm7,%xmm2
217.byte	102,15,56,0,211
218	movdqa	%xmm7,%xmm3
219	pxor	%xmm0,%xmm2
220.byte	102,15,56,0,220
221	movdqu	(%edx),%xmm0
222	pxor	%xmm1,%xmm3
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,%xmm1
332	pshufd	$254,%xmm7,%xmm0
333	pxor	%xmm1,%xmm6
334	pxor	%xmm1,%xmm1
335	pxor	%xmm0,%xmm6
336	movdqa	%xmm6,%xmm0
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#else
664.text
665.align	64
666.L_vpaes_consts:
667.long	218628480,235210255,168496130,67568393
668.long	252381056,17041926,33884169,51187212
669.long	252645135,252645135,252645135,252645135
670.long	1512730624,3266504856,1377990664,3401244816
671.long	830229760,1275146365,2969422977,3447763452
672.long	3411033600,2979783055,338359620,2782886510
673.long	4209124096,907596821,221174255,1006095553
674.long	191964160,3799684038,3164090317,1589111125
675.long	182528256,1777043520,2877432650,3265356744
676.long	1874708224,3503451415,3305285752,363511674
677.long	1606117888,3487855781,1093350906,2384367825
678.long	197121,67569157,134941193,202313229
679.long	67569157,134941193,202313229,197121
680.long	134941193,202313229,197121,67569157
681.long	202313229,197121,67569157,134941193
682.long	33619971,100992007,168364043,235736079
683.long	235736079,33619971,100992007,168364043
684.long	168364043,235736079,33619971,100992007
685.long	100992007,168364043,235736079,33619971
686.long	50462976,117835012,185207048,252579084
687.long	252314880,51251460,117574920,184942860
688.long	184682752,252054788,50987272,118359308
689.long	118099200,185467140,251790600,50727180
690.long	2946363062,528716217,1300004225,1881839624
691.long	1532713819,1532713819,1532713819,1532713819
692.long	3602276352,4288629033,3737020424,4153884961
693.long	1354558464,32357713,2958822624,3775749553
694.long	1201988352,132424512,1572796698,503232858
695.long	2213177600,1597421020,4103937655,675398315
696.long	2749646592,4273543773,1511898873,121693092
697.long	3040248576,1103263732,2871565598,1608280554
698.long	2236667136,2588920351,482954393,64377734
699.long	3069987328,291237287,2117370568,3650299247
700.long	533321216,3573750986,2572112006,1401264716
701.long	1339849704,2721158661,548607111,3445553514
702.long	2128193280,3054596040,2183486460,1257083700
703.long	655635200,1165381986,3923443150,2344132524
704.long	190078720,256924420,290342170,357187870
705.long	1610966272,2263057382,4103205268,309794674
706.long	2592527872,2233205587,1335446729,3402964816
707.long	3973531904,3225098121,3002836325,1918774430
708.long	3870401024,2102906079,2284471353,4117666579
709.long	617007872,1021508343,366931923,691083277
710.long	2528395776,3491914898,2968704004,1613121270
711.long	3445188352,3247741094,844474987,4093578302
712.long	651481088,1190302358,1689581232,574775300
713.long	4289380608,206939853,2555985458,2489840491
714.long	2130264064,327674451,3566485037,3349835193
715.long	2470714624,316102159,3636825756,3393945945
716.byte	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
717.byte	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
718.byte	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
719.byte	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
720.byte	118,101,114,115,105,116,121,41,0
721.align	64
722.type	_vpaes_preheat,@function
723.align	16
724_vpaes_preheat:
725	addl	(%esp),%ebp
726	movdqa	-48(%ebp),%xmm7
727	movdqa	-16(%ebp),%xmm6
728	ret
729.size	_vpaes_preheat,.-_vpaes_preheat
730.type	_vpaes_encrypt_core,@function
731.align	16
732_vpaes_encrypt_core:
733	movl	$16,%ecx
734	movl	240(%edx),%eax
735	movdqa	%xmm6,%xmm1
736	movdqa	(%ebp),%xmm2
737	pandn	%xmm0,%xmm1
738	pand	%xmm6,%xmm0
739	movdqu	(%edx),%xmm5
740.byte	102,15,56,0,208
741	movdqa	16(%ebp),%xmm0
742	pxor	%xmm5,%xmm2
743	psrld	$4,%xmm1
744	addl	$16,%edx
745.byte	102,15,56,0,193
746	leal	192(%ebp),%ebx
747	pxor	%xmm2,%xmm0
748	jmp	.L000enc_entry
749.align	16
750.L001enc_loop:
751	movdqa	32(%ebp),%xmm4
752	movdqa	48(%ebp),%xmm0
753.byte	102,15,56,0,226
754.byte	102,15,56,0,195
755	pxor	%xmm5,%xmm4
756	movdqa	64(%ebp),%xmm5
757	pxor	%xmm4,%xmm0
758	movdqa	-64(%ebx,%ecx,1),%xmm1
759.byte	102,15,56,0,234
760	movdqa	80(%ebp),%xmm2
761	movdqa	(%ebx,%ecx,1),%xmm4
762.byte	102,15,56,0,211
763	movdqa	%xmm0,%xmm3
764	pxor	%xmm5,%xmm2
765.byte	102,15,56,0,193
766	addl	$16,%edx
767	pxor	%xmm2,%xmm0
768.byte	102,15,56,0,220
769	addl	$16,%ecx
770	pxor	%xmm0,%xmm3
771.byte	102,15,56,0,193
772	andl	$48,%ecx
773	subl	$1,%eax
774	pxor	%xmm3,%xmm0
775.L000enc_entry:
776	movdqa	%xmm6,%xmm1
777	movdqa	-32(%ebp),%xmm5
778	pandn	%xmm0,%xmm1
779	psrld	$4,%xmm1
780	pand	%xmm6,%xmm0
781.byte	102,15,56,0,232
782	movdqa	%xmm7,%xmm3
783	pxor	%xmm1,%xmm0
784.byte	102,15,56,0,217
785	movdqa	%xmm7,%xmm4
786	pxor	%xmm5,%xmm3
787.byte	102,15,56,0,224
788	movdqa	%xmm7,%xmm2
789	pxor	%xmm5,%xmm4
790.byte	102,15,56,0,211
791	movdqa	%xmm7,%xmm3
792	pxor	%xmm0,%xmm2
793.byte	102,15,56,0,220
794	movdqu	(%edx),%xmm5
795	pxor	%xmm1,%xmm3
796	jnz	.L001enc_loop
797	movdqa	96(%ebp),%xmm4
798	movdqa	112(%ebp),%xmm0
799.byte	102,15,56,0,226
800	pxor	%xmm5,%xmm4
801.byte	102,15,56,0,195
802	movdqa	64(%ebx,%ecx,1),%xmm1
803	pxor	%xmm4,%xmm0
804.byte	102,15,56,0,193
805	ret
806.size	_vpaes_encrypt_core,.-_vpaes_encrypt_core
807.type	_vpaes_decrypt_core,@function
808.align	16
809_vpaes_decrypt_core:
810	leal	608(%ebp),%ebx
811	movl	240(%edx),%eax
812	movdqa	%xmm6,%xmm1
813	movdqa	-64(%ebx),%xmm2
814	pandn	%xmm0,%xmm1
815	movl	%eax,%ecx
816	psrld	$4,%xmm1
817	movdqu	(%edx),%xmm5
818	shll	$4,%ecx
819	pand	%xmm6,%xmm0
820.byte	102,15,56,0,208
821	movdqa	-48(%ebx),%xmm0
822	xorl	$48,%ecx
823.byte	102,15,56,0,193
824	andl	$48,%ecx
825	pxor	%xmm5,%xmm2
826	movdqa	176(%ebp),%xmm5
827	pxor	%xmm2,%xmm0
828	addl	$16,%edx
829	leal	-352(%ebx,%ecx,1),%ecx
830	jmp	.L002dec_entry
831.align	16
832.L003dec_loop:
833	movdqa	-32(%ebx),%xmm4
834	movdqa	-16(%ebx),%xmm1
835.byte	102,15,56,0,226
836.byte	102,15,56,0,203
837	pxor	%xmm4,%xmm0
838	movdqa	(%ebx),%xmm4
839	pxor	%xmm1,%xmm0
840	movdqa	16(%ebx),%xmm1
841.byte	102,15,56,0,226
842.byte	102,15,56,0,197
843.byte	102,15,56,0,203
844	pxor	%xmm4,%xmm0
845	movdqa	32(%ebx),%xmm4
846	pxor	%xmm1,%xmm0
847	movdqa	48(%ebx),%xmm1
848.byte	102,15,56,0,226
849.byte	102,15,56,0,197
850.byte	102,15,56,0,203
851	pxor	%xmm4,%xmm0
852	movdqa	64(%ebx),%xmm4
853	pxor	%xmm1,%xmm0
854	movdqa	80(%ebx),%xmm1
855.byte	102,15,56,0,226
856.byte	102,15,56,0,197
857.byte	102,15,56,0,203
858	pxor	%xmm4,%xmm0
859	addl	$16,%edx
860.byte	102,15,58,15,237,12
861	pxor	%xmm1,%xmm0
862	subl	$1,%eax
863.L002dec_entry:
864	movdqa	%xmm6,%xmm1
865	movdqa	-32(%ebp),%xmm2
866	pandn	%xmm0,%xmm1
867	pand	%xmm6,%xmm0
868	psrld	$4,%xmm1
869.byte	102,15,56,0,208
870	movdqa	%xmm7,%xmm3
871	pxor	%xmm1,%xmm0
872.byte	102,15,56,0,217
873	movdqa	%xmm7,%xmm4
874	pxor	%xmm2,%xmm3
875.byte	102,15,56,0,224
876	pxor	%xmm2,%xmm4
877	movdqa	%xmm7,%xmm2
878.byte	102,15,56,0,211
879	movdqa	%xmm7,%xmm3
880	pxor	%xmm0,%xmm2
881.byte	102,15,56,0,220
882	movdqu	(%edx),%xmm0
883	pxor	%xmm1,%xmm3
884	jnz	.L003dec_loop
885	movdqa	96(%ebx),%xmm4
886.byte	102,15,56,0,226
887	pxor	%xmm0,%xmm4
888	movdqa	112(%ebx),%xmm0
889	movdqa	(%ecx),%xmm2
890.byte	102,15,56,0,195
891	pxor	%xmm4,%xmm0
892.byte	102,15,56,0,194
893	ret
894.size	_vpaes_decrypt_core,.-_vpaes_decrypt_core
895.type	_vpaes_schedule_core,@function
896.align	16
897_vpaes_schedule_core:
898	addl	(%esp),%ebp
899	movdqu	(%esi),%xmm0
900	movdqa	320(%ebp),%xmm2
901	movdqa	%xmm0,%xmm3
902	leal	(%ebp),%ebx
903	movdqa	%xmm2,4(%esp)
904	call	_vpaes_schedule_transform
905	movdqa	%xmm0,%xmm7
906	testl	%edi,%edi
907	jnz	.L004schedule_am_decrypting
908	movdqu	%xmm0,(%edx)
909	jmp	.L005schedule_go
910.L004schedule_am_decrypting:
911	movdqa	256(%ebp,%ecx,1),%xmm1
912.byte	102,15,56,0,217
913	movdqu	%xmm3,(%edx)
914	xorl	$48,%ecx
915.L005schedule_go:
916	cmpl	$192,%eax
917	ja	.L006schedule_256
918	je	.L007schedule_192
919.L008schedule_128:
920	movl	$10,%eax
921.L009loop_schedule_128:
922	call	_vpaes_schedule_round
923	decl	%eax
924	jz	.L010schedule_mangle_last
925	call	_vpaes_schedule_mangle
926	jmp	.L009loop_schedule_128
927.align	16
928.L007schedule_192:
929	movdqu	8(%esi),%xmm0
930	call	_vpaes_schedule_transform
931	movdqa	%xmm0,%xmm6
932	pxor	%xmm4,%xmm4
933	movhlps	%xmm4,%xmm6
934	movl	$4,%eax
935.L011loop_schedule_192:
936	call	_vpaes_schedule_round
937.byte	102,15,58,15,198,8
938	call	_vpaes_schedule_mangle
939	call	_vpaes_schedule_192_smear
940	call	_vpaes_schedule_mangle
941	call	_vpaes_schedule_round
942	decl	%eax
943	jz	.L010schedule_mangle_last
944	call	_vpaes_schedule_mangle
945	call	_vpaes_schedule_192_smear
946	jmp	.L011loop_schedule_192
947.align	16
948.L006schedule_256:
949	movdqu	16(%esi),%xmm0
950	call	_vpaes_schedule_transform
951	movl	$7,%eax
952.L012loop_schedule_256:
953	call	_vpaes_schedule_mangle
954	movdqa	%xmm0,%xmm6
955	call	_vpaes_schedule_round
956	decl	%eax
957	jz	.L010schedule_mangle_last
958	call	_vpaes_schedule_mangle
959	pshufd	$255,%xmm0,%xmm0
960	movdqa	%xmm7,20(%esp)
961	movdqa	%xmm6,%xmm7
962	call	.L_vpaes_schedule_low_round
963	movdqa	20(%esp),%xmm7
964	jmp	.L012loop_schedule_256
965.align	16
966.L010schedule_mangle_last:
967	leal	384(%ebp),%ebx
968	testl	%edi,%edi
969	jnz	.L013schedule_mangle_last_dec
970	movdqa	256(%ebp,%ecx,1),%xmm1
971.byte	102,15,56,0,193
972	leal	352(%ebp),%ebx
973	addl	$32,%edx
974.L013schedule_mangle_last_dec:
975	addl	$-16,%edx
976	pxor	336(%ebp),%xmm0
977	call	_vpaes_schedule_transform
978	movdqu	%xmm0,(%edx)
979	pxor	%xmm0,%xmm0
980	pxor	%xmm1,%xmm1
981	pxor	%xmm2,%xmm2
982	pxor	%xmm3,%xmm3
983	pxor	%xmm4,%xmm4
984	pxor	%xmm5,%xmm5
985	pxor	%xmm6,%xmm6
986	pxor	%xmm7,%xmm7
987	ret
988.size	_vpaes_schedule_core,.-_vpaes_schedule_core
989.type	_vpaes_schedule_192_smear,@function
990.align	16
991_vpaes_schedule_192_smear:
992	pshufd	$128,%xmm6,%xmm1
993	pshufd	$254,%xmm7,%xmm0
994	pxor	%xmm1,%xmm6
995	pxor	%xmm1,%xmm1
996	pxor	%xmm0,%xmm6
997	movdqa	%xmm6,%xmm0
998	movhlps	%xmm1,%xmm6
999	ret
1000.size	_vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
1001.type	_vpaes_schedule_round,@function
1002.align	16
1003_vpaes_schedule_round:
1004	movdqa	8(%esp),%xmm2
1005	pxor	%xmm1,%xmm1
1006.byte	102,15,58,15,202,15
1007.byte	102,15,58,15,210,15
1008	pxor	%xmm1,%xmm7
1009	pshufd	$255,%xmm0,%xmm0
1010.byte	102,15,58,15,192,1
1011	movdqa	%xmm2,8(%esp)
1012.L_vpaes_schedule_low_round:
1013	movdqa	%xmm7,%xmm1
1014	pslldq	$4,%xmm7
1015	pxor	%xmm1,%xmm7
1016	movdqa	%xmm7,%xmm1
1017	pslldq	$8,%xmm7
1018	pxor	%xmm1,%xmm7
1019	pxor	336(%ebp),%xmm7
1020	movdqa	-16(%ebp),%xmm4
1021	movdqa	-48(%ebp),%xmm5
1022	movdqa	%xmm4,%xmm1
1023	pandn	%xmm0,%xmm1
1024	psrld	$4,%xmm1
1025	pand	%xmm4,%xmm0
1026	movdqa	-32(%ebp),%xmm2
1027.byte	102,15,56,0,208
1028	pxor	%xmm1,%xmm0
1029	movdqa	%xmm5,%xmm3
1030.byte	102,15,56,0,217
1031	pxor	%xmm2,%xmm3
1032	movdqa	%xmm5,%xmm4
1033.byte	102,15,56,0,224
1034	pxor	%xmm2,%xmm4
1035	movdqa	%xmm5,%xmm2
1036.byte	102,15,56,0,211
1037	pxor	%xmm0,%xmm2
1038	movdqa	%xmm5,%xmm3
1039.byte	102,15,56,0,220
1040	pxor	%xmm1,%xmm3
1041	movdqa	32(%ebp),%xmm4
1042.byte	102,15,56,0,226
1043	movdqa	48(%ebp),%xmm0
1044.byte	102,15,56,0,195
1045	pxor	%xmm4,%xmm0
1046	pxor	%xmm7,%xmm0
1047	movdqa	%xmm0,%xmm7
1048	ret
1049.size	_vpaes_schedule_round,.-_vpaes_schedule_round
1050.type	_vpaes_schedule_transform,@function
1051.align	16
1052_vpaes_schedule_transform:
1053	movdqa	-16(%ebp),%xmm2
1054	movdqa	%xmm2,%xmm1
1055	pandn	%xmm0,%xmm1
1056	psrld	$4,%xmm1
1057	pand	%xmm2,%xmm0
1058	movdqa	(%ebx),%xmm2
1059.byte	102,15,56,0,208
1060	movdqa	16(%ebx),%xmm0
1061.byte	102,15,56,0,193
1062	pxor	%xmm2,%xmm0
1063	ret
1064.size	_vpaes_schedule_transform,.-_vpaes_schedule_transform
1065.type	_vpaes_schedule_mangle,@function
1066.align	16
1067_vpaes_schedule_mangle:
1068	movdqa	%xmm0,%xmm4
1069	movdqa	128(%ebp),%xmm5
1070	testl	%edi,%edi
1071	jnz	.L014schedule_mangle_dec
1072	addl	$16,%edx
1073	pxor	336(%ebp),%xmm4
1074.byte	102,15,56,0,229
1075	movdqa	%xmm4,%xmm3
1076.byte	102,15,56,0,229
1077	pxor	%xmm4,%xmm3
1078.byte	102,15,56,0,229
1079	pxor	%xmm4,%xmm3
1080	jmp	.L015schedule_mangle_both
1081.align	16
1082.L014schedule_mangle_dec:
1083	movdqa	-16(%ebp),%xmm2
1084	leal	416(%ebp),%esi
1085	movdqa	%xmm2,%xmm1
1086	pandn	%xmm4,%xmm1
1087	psrld	$4,%xmm1
1088	pand	%xmm2,%xmm4
1089	movdqa	(%esi),%xmm2
1090.byte	102,15,56,0,212
1091	movdqa	16(%esi),%xmm3
1092.byte	102,15,56,0,217
1093	pxor	%xmm2,%xmm3
1094.byte	102,15,56,0,221
1095	movdqa	32(%esi),%xmm2
1096.byte	102,15,56,0,212
1097	pxor	%xmm3,%xmm2
1098	movdqa	48(%esi),%xmm3
1099.byte	102,15,56,0,217
1100	pxor	%xmm2,%xmm3
1101.byte	102,15,56,0,221
1102	movdqa	64(%esi),%xmm2
1103.byte	102,15,56,0,212
1104	pxor	%xmm3,%xmm2
1105	movdqa	80(%esi),%xmm3
1106.byte	102,15,56,0,217
1107	pxor	%xmm2,%xmm3
1108.byte	102,15,56,0,221
1109	movdqa	96(%esi),%xmm2
1110.byte	102,15,56,0,212
1111	pxor	%xmm3,%xmm2
1112	movdqa	112(%esi),%xmm3
1113.byte	102,15,56,0,217
1114	pxor	%xmm2,%xmm3
1115	addl	$-16,%edx
1116.L015schedule_mangle_both:
1117	movdqa	256(%ebp,%ecx,1),%xmm1
1118.byte	102,15,56,0,217
1119	addl	$-16,%ecx
1120	andl	$48,%ecx
1121	movdqu	%xmm3,(%edx)
1122	ret
1123.size	_vpaes_schedule_mangle,.-_vpaes_schedule_mangle
1124.globl	vpaes_set_encrypt_key
1125.type	vpaes_set_encrypt_key,@function
1126.align	16
1127vpaes_set_encrypt_key:
1128.L_vpaes_set_encrypt_key_begin:
1129	pushl	%ebp
1130	pushl	%ebx
1131	pushl	%esi
1132	pushl	%edi
1133	movl	20(%esp),%esi
1134	leal	-56(%esp),%ebx
1135	movl	24(%esp),%eax
1136	andl	$-16,%ebx
1137	movl	28(%esp),%edx
1138	xchgl	%esp,%ebx
1139	movl	%ebx,48(%esp)
1140	movl	%eax,%ebx
1141	shrl	$5,%ebx
1142	addl	$5,%ebx
1143	movl	%ebx,240(%edx)
1144	movl	$48,%ecx
1145	movl	$0,%edi
1146	leal	.L_vpaes_consts+0x30-.L016pic_point,%ebp
1147	call	_vpaes_schedule_core
1148.L016pic_point:
1149	movl	48(%esp),%esp
1150	xorl	%eax,%eax
1151	popl	%edi
1152	popl	%esi
1153	popl	%ebx
1154	popl	%ebp
1155	ret
1156.size	vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin
1157.globl	vpaes_set_decrypt_key
1158.type	vpaes_set_decrypt_key,@function
1159.align	16
1160vpaes_set_decrypt_key:
1161.L_vpaes_set_decrypt_key_begin:
1162	pushl	%ebp
1163	pushl	%ebx
1164	pushl	%esi
1165	pushl	%edi
1166	movl	20(%esp),%esi
1167	leal	-56(%esp),%ebx
1168	movl	24(%esp),%eax
1169	andl	$-16,%ebx
1170	movl	28(%esp),%edx
1171	xchgl	%esp,%ebx
1172	movl	%ebx,48(%esp)
1173	movl	%eax,%ebx
1174	shrl	$5,%ebx
1175	addl	$5,%ebx
1176	movl	%ebx,240(%edx)
1177	shll	$4,%ebx
1178	leal	16(%edx,%ebx,1),%edx
1179	movl	$1,%edi
1180	movl	%eax,%ecx
1181	shrl	$1,%ecx
1182	andl	$32,%ecx
1183	xorl	$32,%ecx
1184	leal	.L_vpaes_consts+0x30-.L017pic_point,%ebp
1185	call	_vpaes_schedule_core
1186.L017pic_point:
1187	movl	48(%esp),%esp
1188	xorl	%eax,%eax
1189	popl	%edi
1190	popl	%esi
1191	popl	%ebx
1192	popl	%ebp
1193	ret
1194.size	vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin
1195.globl	vpaes_encrypt
1196.type	vpaes_encrypt,@function
1197.align	16
1198vpaes_encrypt:
1199.L_vpaes_encrypt_begin:
1200	pushl	%ebp
1201	pushl	%ebx
1202	pushl	%esi
1203	pushl	%edi
1204	leal	.L_vpaes_consts+0x30-.L018pic_point,%ebp
1205	call	_vpaes_preheat
1206.L018pic_point:
1207	movl	20(%esp),%esi
1208	leal	-56(%esp),%ebx
1209	movl	24(%esp),%edi
1210	andl	$-16,%ebx
1211	movl	28(%esp),%edx
1212	xchgl	%esp,%ebx
1213	movl	%ebx,48(%esp)
1214	movdqu	(%esi),%xmm0
1215	call	_vpaes_encrypt_core
1216	movdqu	%xmm0,(%edi)
1217	movl	48(%esp),%esp
1218	popl	%edi
1219	popl	%esi
1220	popl	%ebx
1221	popl	%ebp
1222	ret
1223.size	vpaes_encrypt,.-.L_vpaes_encrypt_begin
1224.globl	vpaes_decrypt
1225.type	vpaes_decrypt,@function
1226.align	16
1227vpaes_decrypt:
1228.L_vpaes_decrypt_begin:
1229	pushl	%ebp
1230	pushl	%ebx
1231	pushl	%esi
1232	pushl	%edi
1233	leal	.L_vpaes_consts+0x30-.L019pic_point,%ebp
1234	call	_vpaes_preheat
1235.L019pic_point:
1236	movl	20(%esp),%esi
1237	leal	-56(%esp),%ebx
1238	movl	24(%esp),%edi
1239	andl	$-16,%ebx
1240	movl	28(%esp),%edx
1241	xchgl	%esp,%ebx
1242	movl	%ebx,48(%esp)
1243	movdqu	(%esi),%xmm0
1244	call	_vpaes_decrypt_core
1245	movdqu	%xmm0,(%edi)
1246	movl	48(%esp),%esp
1247	popl	%edi
1248	popl	%esi
1249	popl	%ebx
1250	popl	%ebp
1251	ret
1252.size	vpaes_decrypt,.-.L_vpaes_decrypt_begin
1253.globl	vpaes_cbc_encrypt
1254.type	vpaes_cbc_encrypt,@function
1255.align	16
1256vpaes_cbc_encrypt:
1257.L_vpaes_cbc_encrypt_begin:
1258	pushl	%ebp
1259	pushl	%ebx
1260	pushl	%esi
1261	pushl	%edi
1262	movl	20(%esp),%esi
1263	movl	24(%esp),%edi
1264	movl	28(%esp),%eax
1265	movl	32(%esp),%edx
1266	subl	$16,%eax
1267	jc	.L020cbc_abort
1268	leal	-56(%esp),%ebx
1269	movl	36(%esp),%ebp
1270	andl	$-16,%ebx
1271	movl	40(%esp),%ecx
1272	xchgl	%esp,%ebx
1273	movdqu	(%ebp),%xmm1
1274	subl	%esi,%edi
1275	movl	%ebx,48(%esp)
1276	movl	%edi,(%esp)
1277	movl	%edx,4(%esp)
1278	movl	%ebp,8(%esp)
1279	movl	%eax,%edi
1280	leal	.L_vpaes_consts+0x30-.L021pic_point,%ebp
1281	call	_vpaes_preheat
1282.L021pic_point:
1283	cmpl	$0,%ecx
1284	je	.L022cbc_dec_loop
1285	jmp	.L023cbc_enc_loop
1286.align	16
1287.L023cbc_enc_loop:
1288	movdqu	(%esi),%xmm0
1289	pxor	%xmm1,%xmm0
1290	call	_vpaes_encrypt_core
1291	movl	(%esp),%ebx
1292	movl	4(%esp),%edx
1293	movdqa	%xmm0,%xmm1
1294	movdqu	%xmm0,(%ebx,%esi,1)
1295	leal	16(%esi),%esi
1296	subl	$16,%edi
1297	jnc	.L023cbc_enc_loop
1298	jmp	.L024cbc_done
1299.align	16
1300.L022cbc_dec_loop:
1301	movdqu	(%esi),%xmm0
1302	movdqa	%xmm1,16(%esp)
1303	movdqa	%xmm0,32(%esp)
1304	call	_vpaes_decrypt_core
1305	movl	(%esp),%ebx
1306	movl	4(%esp),%edx
1307	pxor	16(%esp),%xmm0
1308	movdqa	32(%esp),%xmm1
1309	movdqu	%xmm0,(%ebx,%esi,1)
1310	leal	16(%esi),%esi
1311	subl	$16,%edi
1312	jnc	.L022cbc_dec_loop
1313.L024cbc_done:
1314	movl	8(%esp),%ebx
1315	movl	48(%esp),%esp
1316	movdqu	%xmm1,(%ebx)
1317.L020cbc_abort:
1318	popl	%edi
1319	popl	%esi
1320	popl	%ebx
1321	popl	%ebp
1322	ret
1323.size	vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin
1324#endif
1325