vpaes-x86.S revision 305153
1/* $FreeBSD: stable/11/secure/lib/libcrypto/i386/vpaes-x86.S 305153 2016-08-31 20:33:59Z jkim $ */
2/* Do not modify. This file is auto-generated from vpaes-x86.pl. */
3#ifdef PIC
4.file	"vpaes-x86.S"
5.text
6.align	64
7.L_vpaes_consts:
8.long	218628480,235210255,168496130,67568393
9.long	252381056,17041926,33884169,51187212
10.long	252645135,252645135,252645135,252645135
11.long	1512730624,3266504856,1377990664,3401244816
12.long	830229760,1275146365,2969422977,3447763452
13.long	3411033600,2979783055,338359620,2782886510
14.long	4209124096,907596821,221174255,1006095553
15.long	191964160,3799684038,3164090317,1589111125
16.long	182528256,1777043520,2877432650,3265356744
17.long	1874708224,3503451415,3305285752,363511674
18.long	1606117888,3487855781,1093350906,2384367825
19.long	197121,67569157,134941193,202313229
20.long	67569157,134941193,202313229,197121
21.long	134941193,202313229,197121,67569157
22.long	202313229,197121,67569157,134941193
23.long	33619971,100992007,168364043,235736079
24.long	235736079,33619971,100992007,168364043
25.long	168364043,235736079,33619971,100992007
26.long	100992007,168364043,235736079,33619971
27.long	50462976,117835012,185207048,252579084
28.long	252314880,51251460,117574920,184942860
29.long	184682752,252054788,50987272,118359308
30.long	118099200,185467140,251790600,50727180
31.long	2946363062,528716217,1300004225,1881839624
32.long	1532713819,1532713819,1532713819,1532713819
33.long	3602276352,4288629033,3737020424,4153884961
34.long	1354558464,32357713,2958822624,3775749553
35.long	1201988352,132424512,1572796698,503232858
36.long	2213177600,1597421020,4103937655,675398315
37.long	2749646592,4273543773,1511898873,121693092
38.long	3040248576,1103263732,2871565598,1608280554
39.long	2236667136,2588920351,482954393,64377734
40.long	3069987328,291237287,2117370568,3650299247
41.long	533321216,3573750986,2572112006,1401264716
42.long	1339849704,2721158661,548607111,3445553514
43.long	2128193280,3054596040,2183486460,1257083700
44.long	655635200,1165381986,3923443150,2344132524
45.long	190078720,256924420,290342170,357187870
46.long	1610966272,2263057382,4103205268,309794674
47.long	2592527872,2233205587,1335446729,3402964816
48.long	3973531904,3225098121,3002836325,1918774430
49.long	3870401024,2102906079,2284471353,4117666579
50.long	617007872,1021508343,366931923,691083277
51.long	2528395776,3491914898,2968704004,1613121270
52.long	3445188352,3247741094,844474987,4093578302
53.long	651481088,1190302358,1689581232,574775300
54.long	4289380608,206939853,2555985458,2489840491
55.long	2130264064,327674451,3566485037,3349835193
56.long	2470714624,316102159,3636825756,3393945945
57.byte	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
58.byte	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
59.byte	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
60.byte	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
61.byte	118,101,114,115,105,116,121,41,0
62.align	64
63.type	_vpaes_preheat,@function
64.align	16
65_vpaes_preheat:
66	addl	(%esp),%ebp
67	movdqa	-48(%ebp),%xmm7
68	movdqa	-16(%ebp),%xmm6
69	ret
70.size	_vpaes_preheat,.-_vpaes_preheat
71.type	_vpaes_encrypt_core,@function
72.align	16
73_vpaes_encrypt_core:
74	movl	$16,%ecx
75	movl	240(%edx),%eax
76	movdqa	%xmm6,%xmm1
77	movdqa	(%ebp),%xmm2
78	pandn	%xmm0,%xmm1
79	pand	%xmm6,%xmm0
80	movdqu	(%edx),%xmm5
81.byte	102,15,56,0,208
82	movdqa	16(%ebp),%xmm0
83	pxor	%xmm5,%xmm2
84	psrld	$4,%xmm1
85	addl	$16,%edx
86.byte	102,15,56,0,193
87	leal	192(%ebp),%ebx
88	pxor	%xmm2,%xmm0
89	jmp	.L000enc_entry
90.align	16
91.L001enc_loop:
92	movdqa	32(%ebp),%xmm4
93	movdqa	48(%ebp),%xmm0
94.byte	102,15,56,0,226
95.byte	102,15,56,0,195
96	pxor	%xmm5,%xmm4
97	movdqa	64(%ebp),%xmm5
98	pxor	%xmm4,%xmm0
99	movdqa	-64(%ebx,%ecx,1),%xmm1
100.byte	102,15,56,0,234
101	movdqa	80(%ebp),%xmm2
102	movdqa	(%ebx,%ecx,1),%xmm4
103.byte	102,15,56,0,211
104	movdqa	%xmm0,%xmm3
105	pxor	%xmm5,%xmm2
106.byte	102,15,56,0,193
107	addl	$16,%edx
108	pxor	%xmm2,%xmm0
109.byte	102,15,56,0,220
110	addl	$16,%ecx
111	pxor	%xmm0,%xmm3
112.byte	102,15,56,0,193
113	andl	$48,%ecx
114	subl	$1,%eax
115	pxor	%xmm3,%xmm0
116.L000enc_entry:
117	movdqa	%xmm6,%xmm1
118	movdqa	-32(%ebp),%xmm5
119	pandn	%xmm0,%xmm1
120	psrld	$4,%xmm1
121	pand	%xmm6,%xmm0
122.byte	102,15,56,0,232
123	movdqa	%xmm7,%xmm3
124	pxor	%xmm1,%xmm0
125.byte	102,15,56,0,217
126	movdqa	%xmm7,%xmm4
127	pxor	%xmm5,%xmm3
128.byte	102,15,56,0,224
129	movdqa	%xmm7,%xmm2
130	pxor	%xmm5,%xmm4
131.byte	102,15,56,0,211
132	movdqa	%xmm7,%xmm3
133	pxor	%xmm0,%xmm2
134.byte	102,15,56,0,220
135	movdqu	(%edx),%xmm5
136	pxor	%xmm1,%xmm3
137	jnz	.L001enc_loop
138	movdqa	96(%ebp),%xmm4
139	movdqa	112(%ebp),%xmm0
140.byte	102,15,56,0,226
141	pxor	%xmm5,%xmm4
142.byte	102,15,56,0,195
143	movdqa	64(%ebx,%ecx,1),%xmm1
144	pxor	%xmm4,%xmm0
145.byte	102,15,56,0,193
146	ret
147.size	_vpaes_encrypt_core,.-_vpaes_encrypt_core
148.type	_vpaes_decrypt_core,@function
149.align	16
150_vpaes_decrypt_core:
151	leal	608(%ebp),%ebx
152	movl	240(%edx),%eax
153	movdqa	%xmm6,%xmm1
154	movdqa	-64(%ebx),%xmm2
155	pandn	%xmm0,%xmm1
156	movl	%eax,%ecx
157	psrld	$4,%xmm1
158	movdqu	(%edx),%xmm5
159	shll	$4,%ecx
160	pand	%xmm6,%xmm0
161.byte	102,15,56,0,208
162	movdqa	-48(%ebx),%xmm0
163	xorl	$48,%ecx
164.byte	102,15,56,0,193
165	andl	$48,%ecx
166	pxor	%xmm5,%xmm2
167	movdqa	176(%ebp),%xmm5
168	pxor	%xmm2,%xmm0
169	addl	$16,%edx
170	leal	-352(%ebx,%ecx,1),%ecx
171	jmp	.L002dec_entry
172.align	16
173.L003dec_loop:
174	movdqa	-32(%ebx),%xmm4
175	movdqa	-16(%ebx),%xmm1
176.byte	102,15,56,0,226
177.byte	102,15,56,0,203
178	pxor	%xmm4,%xmm0
179	movdqa	(%ebx),%xmm4
180	pxor	%xmm1,%xmm0
181	movdqa	16(%ebx),%xmm1
182.byte	102,15,56,0,226
183.byte	102,15,56,0,197
184.byte	102,15,56,0,203
185	pxor	%xmm4,%xmm0
186	movdqa	32(%ebx),%xmm4
187	pxor	%xmm1,%xmm0
188	movdqa	48(%ebx),%xmm1
189.byte	102,15,56,0,226
190.byte	102,15,56,0,197
191.byte	102,15,56,0,203
192	pxor	%xmm4,%xmm0
193	movdqa	64(%ebx),%xmm4
194	pxor	%xmm1,%xmm0
195	movdqa	80(%ebx),%xmm1
196.byte	102,15,56,0,226
197.byte	102,15,56,0,197
198.byte	102,15,56,0,203
199	pxor	%xmm4,%xmm0
200	addl	$16,%edx
201.byte	102,15,58,15,237,12
202	pxor	%xmm1,%xmm0
203	subl	$1,%eax
204.L002dec_entry:
205	movdqa	%xmm6,%xmm1
206	movdqa	-32(%ebp),%xmm2
207	pandn	%xmm0,%xmm1
208	pand	%xmm6,%xmm0
209	psrld	$4,%xmm1
210.byte	102,15,56,0,208
211	movdqa	%xmm7,%xmm3
212	pxor	%xmm1,%xmm0
213.byte	102,15,56,0,217
214	movdqa	%xmm7,%xmm4
215	pxor	%xmm2,%xmm3
216.byte	102,15,56,0,224
217	pxor	%xmm2,%xmm4
218	movdqa	%xmm7,%xmm2
219.byte	102,15,56,0,211
220	movdqa	%xmm7,%xmm3
221	pxor	%xmm0,%xmm2
222.byte	102,15,56,0,220
223	movdqu	(%edx),%xmm0
224	pxor	%xmm1,%xmm3
225	jnz	.L003dec_loop
226	movdqa	96(%ebx),%xmm4
227.byte	102,15,56,0,226
228	pxor	%xmm0,%xmm4
229	movdqa	112(%ebx),%xmm0
230	movdqa	(%ecx),%xmm2
231.byte	102,15,56,0,195
232	pxor	%xmm4,%xmm0
233.byte	102,15,56,0,194
234	ret
235.size	_vpaes_decrypt_core,.-_vpaes_decrypt_core
236.type	_vpaes_schedule_core,@function
237.align	16
238_vpaes_schedule_core:
239	addl	(%esp),%ebp
240	movdqu	(%esi),%xmm0
241	movdqa	320(%ebp),%xmm2
242	movdqa	%xmm0,%xmm3
243	leal	(%ebp),%ebx
244	movdqa	%xmm2,4(%esp)
245	call	_vpaes_schedule_transform
246	movdqa	%xmm0,%xmm7
247	testl	%edi,%edi
248	jnz	.L004schedule_am_decrypting
249	movdqu	%xmm0,(%edx)
250	jmp	.L005schedule_go
251.L004schedule_am_decrypting:
252	movdqa	256(%ebp,%ecx,1),%xmm1
253.byte	102,15,56,0,217
254	movdqu	%xmm3,(%edx)
255	xorl	$48,%ecx
256.L005schedule_go:
257	cmpl	$192,%eax
258	ja	.L006schedule_256
259	je	.L007schedule_192
260.L008schedule_128:
261	movl	$10,%eax
262.L009loop_schedule_128:
263	call	_vpaes_schedule_round
264	decl	%eax
265	jz	.L010schedule_mangle_last
266	call	_vpaes_schedule_mangle
267	jmp	.L009loop_schedule_128
268.align	16
269.L007schedule_192:
270	movdqu	8(%esi),%xmm0
271	call	_vpaes_schedule_transform
272	movdqa	%xmm0,%xmm6
273	pxor	%xmm4,%xmm4
274	movhlps	%xmm4,%xmm6
275	movl	$4,%eax
276.L011loop_schedule_192:
277	call	_vpaes_schedule_round
278.byte	102,15,58,15,198,8
279	call	_vpaes_schedule_mangle
280	call	_vpaes_schedule_192_smear
281	call	_vpaes_schedule_mangle
282	call	_vpaes_schedule_round
283	decl	%eax
284	jz	.L010schedule_mangle_last
285	call	_vpaes_schedule_mangle
286	call	_vpaes_schedule_192_smear
287	jmp	.L011loop_schedule_192
288.align	16
289.L006schedule_256:
290	movdqu	16(%esi),%xmm0
291	call	_vpaes_schedule_transform
292	movl	$7,%eax
293.L012loop_schedule_256:
294	call	_vpaes_schedule_mangle
295	movdqa	%xmm0,%xmm6
296	call	_vpaes_schedule_round
297	decl	%eax
298	jz	.L010schedule_mangle_last
299	call	_vpaes_schedule_mangle
300	pshufd	$255,%xmm0,%xmm0
301	movdqa	%xmm7,20(%esp)
302	movdqa	%xmm6,%xmm7
303	call	.L_vpaes_schedule_low_round
304	movdqa	20(%esp),%xmm7
305	jmp	.L012loop_schedule_256
306.align	16
307.L010schedule_mangle_last:
308	leal	384(%ebp),%ebx
309	testl	%edi,%edi
310	jnz	.L013schedule_mangle_last_dec
311	movdqa	256(%ebp,%ecx,1),%xmm1
312.byte	102,15,56,0,193
313	leal	352(%ebp),%ebx
314	addl	$32,%edx
315.L013schedule_mangle_last_dec:
316	addl	$-16,%edx
317	pxor	336(%ebp),%xmm0
318	call	_vpaes_schedule_transform
319	movdqu	%xmm0,(%edx)
320	pxor	%xmm0,%xmm0
321	pxor	%xmm1,%xmm1
322	pxor	%xmm2,%xmm2
323	pxor	%xmm3,%xmm3
324	pxor	%xmm4,%xmm4
325	pxor	%xmm5,%xmm5
326	pxor	%xmm6,%xmm6
327	pxor	%xmm7,%xmm7
328	ret
329.size	_vpaes_schedule_core,.-_vpaes_schedule_core
330.type	_vpaes_schedule_192_smear,@function
331.align	16
332_vpaes_schedule_192_smear:
333	pshufd	$128,%xmm6,%xmm1
334	pshufd	$254,%xmm7,%xmm0
335	pxor	%xmm1,%xmm6
336	pxor	%xmm1,%xmm1
337	pxor	%xmm0,%xmm6
338	movdqa	%xmm6,%xmm0
339	movhlps	%xmm1,%xmm6
340	ret
341.size	_vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
342.type	_vpaes_schedule_round,@function
343.align	16
344_vpaes_schedule_round:
345	movdqa	8(%esp),%xmm2
346	pxor	%xmm1,%xmm1
347.byte	102,15,58,15,202,15
348.byte	102,15,58,15,210,15
349	pxor	%xmm1,%xmm7
350	pshufd	$255,%xmm0,%xmm0
351.byte	102,15,58,15,192,1
352	movdqa	%xmm2,8(%esp)
353.L_vpaes_schedule_low_round:
354	movdqa	%xmm7,%xmm1
355	pslldq	$4,%xmm7
356	pxor	%xmm1,%xmm7
357	movdqa	%xmm7,%xmm1
358	pslldq	$8,%xmm7
359	pxor	%xmm1,%xmm7
360	pxor	336(%ebp),%xmm7
361	movdqa	-16(%ebp),%xmm4
362	movdqa	-48(%ebp),%xmm5
363	movdqa	%xmm4,%xmm1
364	pandn	%xmm0,%xmm1
365	psrld	$4,%xmm1
366	pand	%xmm4,%xmm0
367	movdqa	-32(%ebp),%xmm2
368.byte	102,15,56,0,208
369	pxor	%xmm1,%xmm0
370	movdqa	%xmm5,%xmm3
371.byte	102,15,56,0,217
372	pxor	%xmm2,%xmm3
373	movdqa	%xmm5,%xmm4
374.byte	102,15,56,0,224
375	pxor	%xmm2,%xmm4
376	movdqa	%xmm5,%xmm2
377.byte	102,15,56,0,211
378	pxor	%xmm0,%xmm2
379	movdqa	%xmm5,%xmm3
380.byte	102,15,56,0,220
381	pxor	%xmm1,%xmm3
382	movdqa	32(%ebp),%xmm4
383.byte	102,15,56,0,226
384	movdqa	48(%ebp),%xmm0
385.byte	102,15,56,0,195
386	pxor	%xmm4,%xmm0
387	pxor	%xmm7,%xmm0
388	movdqa	%xmm0,%xmm7
389	ret
390.size	_vpaes_schedule_round,.-_vpaes_schedule_round
391.type	_vpaes_schedule_transform,@function
392.align	16
393_vpaes_schedule_transform:
394	movdqa	-16(%ebp),%xmm2
395	movdqa	%xmm2,%xmm1
396	pandn	%xmm0,%xmm1
397	psrld	$4,%xmm1
398	pand	%xmm2,%xmm0
399	movdqa	(%ebx),%xmm2
400.byte	102,15,56,0,208
401	movdqa	16(%ebx),%xmm0
402.byte	102,15,56,0,193
403	pxor	%xmm2,%xmm0
404	ret
405.size	_vpaes_schedule_transform,.-_vpaes_schedule_transform
406.type	_vpaes_schedule_mangle,@function
407.align	16
408_vpaes_schedule_mangle:
409	movdqa	%xmm0,%xmm4
410	movdqa	128(%ebp),%xmm5
411	testl	%edi,%edi
412	jnz	.L014schedule_mangle_dec
413	addl	$16,%edx
414	pxor	336(%ebp),%xmm4
415.byte	102,15,56,0,229
416	movdqa	%xmm4,%xmm3
417.byte	102,15,56,0,229
418	pxor	%xmm4,%xmm3
419.byte	102,15,56,0,229
420	pxor	%xmm4,%xmm3
421	jmp	.L015schedule_mangle_both
422.align	16
423.L014schedule_mangle_dec:
424	movdqa	-16(%ebp),%xmm2
425	leal	416(%ebp),%esi
426	movdqa	%xmm2,%xmm1
427	pandn	%xmm4,%xmm1
428	psrld	$4,%xmm1
429	pand	%xmm2,%xmm4
430	movdqa	(%esi),%xmm2
431.byte	102,15,56,0,212
432	movdqa	16(%esi),%xmm3
433.byte	102,15,56,0,217
434	pxor	%xmm2,%xmm3
435.byte	102,15,56,0,221
436	movdqa	32(%esi),%xmm2
437.byte	102,15,56,0,212
438	pxor	%xmm3,%xmm2
439	movdqa	48(%esi),%xmm3
440.byte	102,15,56,0,217
441	pxor	%xmm2,%xmm3
442.byte	102,15,56,0,221
443	movdqa	64(%esi),%xmm2
444.byte	102,15,56,0,212
445	pxor	%xmm3,%xmm2
446	movdqa	80(%esi),%xmm3
447.byte	102,15,56,0,217
448	pxor	%xmm2,%xmm3
449.byte	102,15,56,0,221
450	movdqa	96(%esi),%xmm2
451.byte	102,15,56,0,212
452	pxor	%xmm3,%xmm2
453	movdqa	112(%esi),%xmm3
454.byte	102,15,56,0,217
455	pxor	%xmm2,%xmm3
456	addl	$-16,%edx
457.L015schedule_mangle_both:
458	movdqa	256(%ebp,%ecx,1),%xmm1
459.byte	102,15,56,0,217
460	addl	$-16,%ecx
461	andl	$48,%ecx
462	movdqu	%xmm3,(%edx)
463	ret
464.size	_vpaes_schedule_mangle,.-_vpaes_schedule_mangle
465.globl	vpaes_set_encrypt_key
466.type	vpaes_set_encrypt_key,@function
467.align	16
468vpaes_set_encrypt_key:
469.L_vpaes_set_encrypt_key_begin:
470	pushl	%ebp
471	pushl	%ebx
472	pushl	%esi
473	pushl	%edi
474	movl	20(%esp),%esi
475	leal	-56(%esp),%ebx
476	movl	24(%esp),%eax
477	andl	$-16,%ebx
478	movl	28(%esp),%edx
479	xchgl	%esp,%ebx
480	movl	%ebx,48(%esp)
481	movl	%eax,%ebx
482	shrl	$5,%ebx
483	addl	$5,%ebx
484	movl	%ebx,240(%edx)
485	movl	$48,%ecx
486	movl	$0,%edi
487	leal	.L_vpaes_consts+0x30-.L016pic_point,%ebp
488	call	_vpaes_schedule_core
489.L016pic_point:
490	movl	48(%esp),%esp
491	xorl	%eax,%eax
492	popl	%edi
493	popl	%esi
494	popl	%ebx
495	popl	%ebp
496	ret
497.size	vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin
498.globl	vpaes_set_decrypt_key
499.type	vpaes_set_decrypt_key,@function
500.align	16
501vpaes_set_decrypt_key:
502.L_vpaes_set_decrypt_key_begin:
503	pushl	%ebp
504	pushl	%ebx
505	pushl	%esi
506	pushl	%edi
507	movl	20(%esp),%esi
508	leal	-56(%esp),%ebx
509	movl	24(%esp),%eax
510	andl	$-16,%ebx
511	movl	28(%esp),%edx
512	xchgl	%esp,%ebx
513	movl	%ebx,48(%esp)
514	movl	%eax,%ebx
515	shrl	$5,%ebx
516	addl	$5,%ebx
517	movl	%ebx,240(%edx)
518	shll	$4,%ebx
519	leal	16(%edx,%ebx,1),%edx
520	movl	$1,%edi
521	movl	%eax,%ecx
522	shrl	$1,%ecx
523	andl	$32,%ecx
524	xorl	$32,%ecx
525	leal	.L_vpaes_consts+0x30-.L017pic_point,%ebp
526	call	_vpaes_schedule_core
527.L017pic_point:
528	movl	48(%esp),%esp
529	xorl	%eax,%eax
530	popl	%edi
531	popl	%esi
532	popl	%ebx
533	popl	%ebp
534	ret
535.size	vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin
536.globl	vpaes_encrypt
537.type	vpaes_encrypt,@function
538.align	16
539vpaes_encrypt:
540.L_vpaes_encrypt_begin:
541	pushl	%ebp
542	pushl	%ebx
543	pushl	%esi
544	pushl	%edi
545	leal	.L_vpaes_consts+0x30-.L018pic_point,%ebp
546	call	_vpaes_preheat
547.L018pic_point:
548	movl	20(%esp),%esi
549	leal	-56(%esp),%ebx
550	movl	24(%esp),%edi
551	andl	$-16,%ebx
552	movl	28(%esp),%edx
553	xchgl	%esp,%ebx
554	movl	%ebx,48(%esp)
555	movdqu	(%esi),%xmm0
556	call	_vpaes_encrypt_core
557	movdqu	%xmm0,(%edi)
558	movl	48(%esp),%esp
559	popl	%edi
560	popl	%esi
561	popl	%ebx
562	popl	%ebp
563	ret
564.size	vpaes_encrypt,.-.L_vpaes_encrypt_begin
565.globl	vpaes_decrypt
566.type	vpaes_decrypt,@function
567.align	16
568vpaes_decrypt:
569.L_vpaes_decrypt_begin:
570	pushl	%ebp
571	pushl	%ebx
572	pushl	%esi
573	pushl	%edi
574	leal	.L_vpaes_consts+0x30-.L019pic_point,%ebp
575	call	_vpaes_preheat
576.L019pic_point:
577	movl	20(%esp),%esi
578	leal	-56(%esp),%ebx
579	movl	24(%esp),%edi
580	andl	$-16,%ebx
581	movl	28(%esp),%edx
582	xchgl	%esp,%ebx
583	movl	%ebx,48(%esp)
584	movdqu	(%esi),%xmm0
585	call	_vpaes_decrypt_core
586	movdqu	%xmm0,(%edi)
587	movl	48(%esp),%esp
588	popl	%edi
589	popl	%esi
590	popl	%ebx
591	popl	%ebp
592	ret
593.size	vpaes_decrypt,.-.L_vpaes_decrypt_begin
594.globl	vpaes_cbc_encrypt
595.type	vpaes_cbc_encrypt,@function
596.align	16
597vpaes_cbc_encrypt:
598.L_vpaes_cbc_encrypt_begin:
599	pushl	%ebp
600	pushl	%ebx
601	pushl	%esi
602	pushl	%edi
603	movl	20(%esp),%esi
604	movl	24(%esp),%edi
605	movl	28(%esp),%eax
606	movl	32(%esp),%edx
607	subl	$16,%eax
608	jc	.L020cbc_abort
609	leal	-56(%esp),%ebx
610	movl	36(%esp),%ebp
611	andl	$-16,%ebx
612	movl	40(%esp),%ecx
613	xchgl	%esp,%ebx
614	movdqu	(%ebp),%xmm1
615	subl	%esi,%edi
616	movl	%ebx,48(%esp)
617	movl	%edi,(%esp)
618	movl	%edx,4(%esp)
619	movl	%ebp,8(%esp)
620	movl	%eax,%edi
621	leal	.L_vpaes_consts+0x30-.L021pic_point,%ebp
622	call	_vpaes_preheat
623.L021pic_point:
624	cmpl	$0,%ecx
625	je	.L022cbc_dec_loop
626	jmp	.L023cbc_enc_loop
627.align	16
628.L023cbc_enc_loop:
629	movdqu	(%esi),%xmm0
630	pxor	%xmm1,%xmm0
631	call	_vpaes_encrypt_core
632	movl	(%esp),%ebx
633	movl	4(%esp),%edx
634	movdqa	%xmm0,%xmm1
635	movdqu	%xmm0,(%ebx,%esi,1)
636	leal	16(%esi),%esi
637	subl	$16,%edi
638	jnc	.L023cbc_enc_loop
639	jmp	.L024cbc_done
640.align	16
641.L022cbc_dec_loop:
642	movdqu	(%esi),%xmm0
643	movdqa	%xmm1,16(%esp)
644	movdqa	%xmm0,32(%esp)
645	call	_vpaes_decrypt_core
646	movl	(%esp),%ebx
647	movl	4(%esp),%edx
648	pxor	16(%esp),%xmm0
649	movdqa	32(%esp),%xmm1
650	movdqu	%xmm0,(%ebx,%esi,1)
651	leal	16(%esi),%esi
652	subl	$16,%edi
653	jnc	.L022cbc_dec_loop
654.L024cbc_done:
655	movl	8(%esp),%ebx
656	movl	48(%esp),%esp
657	movdqu	%xmm1,(%ebx)
658.L020cbc_abort:
659	popl	%edi
660	popl	%esi
661	popl	%ebx
662	popl	%ebp
663	ret
664.size	vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin
665#else
666.file	"vpaes-x86.S"
667.text
668.align	64
669.L_vpaes_consts:
670.long	218628480,235210255,168496130,67568393
671.long	252381056,17041926,33884169,51187212
672.long	252645135,252645135,252645135,252645135
673.long	1512730624,3266504856,1377990664,3401244816
674.long	830229760,1275146365,2969422977,3447763452
675.long	3411033600,2979783055,338359620,2782886510
676.long	4209124096,907596821,221174255,1006095553
677.long	191964160,3799684038,3164090317,1589111125
678.long	182528256,1777043520,2877432650,3265356744
679.long	1874708224,3503451415,3305285752,363511674
680.long	1606117888,3487855781,1093350906,2384367825
681.long	197121,67569157,134941193,202313229
682.long	67569157,134941193,202313229,197121
683.long	134941193,202313229,197121,67569157
684.long	202313229,197121,67569157,134941193
685.long	33619971,100992007,168364043,235736079
686.long	235736079,33619971,100992007,168364043
687.long	168364043,235736079,33619971,100992007
688.long	100992007,168364043,235736079,33619971
689.long	50462976,117835012,185207048,252579084
690.long	252314880,51251460,117574920,184942860
691.long	184682752,252054788,50987272,118359308
692.long	118099200,185467140,251790600,50727180
693.long	2946363062,528716217,1300004225,1881839624
694.long	1532713819,1532713819,1532713819,1532713819
695.long	3602276352,4288629033,3737020424,4153884961
696.long	1354558464,32357713,2958822624,3775749553
697.long	1201988352,132424512,1572796698,503232858
698.long	2213177600,1597421020,4103937655,675398315
699.long	2749646592,4273543773,1511898873,121693092
700.long	3040248576,1103263732,2871565598,1608280554
701.long	2236667136,2588920351,482954393,64377734
702.long	3069987328,291237287,2117370568,3650299247
703.long	533321216,3573750986,2572112006,1401264716
704.long	1339849704,2721158661,548607111,3445553514
705.long	2128193280,3054596040,2183486460,1257083700
706.long	655635200,1165381986,3923443150,2344132524
707.long	190078720,256924420,290342170,357187870
708.long	1610966272,2263057382,4103205268,309794674
709.long	2592527872,2233205587,1335446729,3402964816
710.long	3973531904,3225098121,3002836325,1918774430
711.long	3870401024,2102906079,2284471353,4117666579
712.long	617007872,1021508343,366931923,691083277
713.long	2528395776,3491914898,2968704004,1613121270
714.long	3445188352,3247741094,844474987,4093578302
715.long	651481088,1190302358,1689581232,574775300
716.long	4289380608,206939853,2555985458,2489840491
717.long	2130264064,327674451,3566485037,3349835193
718.long	2470714624,316102159,3636825756,3393945945
719.byte	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
720.byte	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
721.byte	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
722.byte	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
723.byte	118,101,114,115,105,116,121,41,0
724.align	64
725.type	_vpaes_preheat,@function
726.align	16
727_vpaes_preheat:
728	addl	(%esp),%ebp
729	movdqa	-48(%ebp),%xmm7
730	movdqa	-16(%ebp),%xmm6
731	ret
732.size	_vpaes_preheat,.-_vpaes_preheat
733.type	_vpaes_encrypt_core,@function
734.align	16
735_vpaes_encrypt_core:
736	movl	$16,%ecx
737	movl	240(%edx),%eax
738	movdqa	%xmm6,%xmm1
739	movdqa	(%ebp),%xmm2
740	pandn	%xmm0,%xmm1
741	pand	%xmm6,%xmm0
742	movdqu	(%edx),%xmm5
743.byte	102,15,56,0,208
744	movdqa	16(%ebp),%xmm0
745	pxor	%xmm5,%xmm2
746	psrld	$4,%xmm1
747	addl	$16,%edx
748.byte	102,15,56,0,193
749	leal	192(%ebp),%ebx
750	pxor	%xmm2,%xmm0
751	jmp	.L000enc_entry
752.align	16
753.L001enc_loop:
754	movdqa	32(%ebp),%xmm4
755	movdqa	48(%ebp),%xmm0
756.byte	102,15,56,0,226
757.byte	102,15,56,0,195
758	pxor	%xmm5,%xmm4
759	movdqa	64(%ebp),%xmm5
760	pxor	%xmm4,%xmm0
761	movdqa	-64(%ebx,%ecx,1),%xmm1
762.byte	102,15,56,0,234
763	movdqa	80(%ebp),%xmm2
764	movdqa	(%ebx,%ecx,1),%xmm4
765.byte	102,15,56,0,211
766	movdqa	%xmm0,%xmm3
767	pxor	%xmm5,%xmm2
768.byte	102,15,56,0,193
769	addl	$16,%edx
770	pxor	%xmm2,%xmm0
771.byte	102,15,56,0,220
772	addl	$16,%ecx
773	pxor	%xmm0,%xmm3
774.byte	102,15,56,0,193
775	andl	$48,%ecx
776	subl	$1,%eax
777	pxor	%xmm3,%xmm0
778.L000enc_entry:
779	movdqa	%xmm6,%xmm1
780	movdqa	-32(%ebp),%xmm5
781	pandn	%xmm0,%xmm1
782	psrld	$4,%xmm1
783	pand	%xmm6,%xmm0
784.byte	102,15,56,0,232
785	movdqa	%xmm7,%xmm3
786	pxor	%xmm1,%xmm0
787.byte	102,15,56,0,217
788	movdqa	%xmm7,%xmm4
789	pxor	%xmm5,%xmm3
790.byte	102,15,56,0,224
791	movdqa	%xmm7,%xmm2
792	pxor	%xmm5,%xmm4
793.byte	102,15,56,0,211
794	movdqa	%xmm7,%xmm3
795	pxor	%xmm0,%xmm2
796.byte	102,15,56,0,220
797	movdqu	(%edx),%xmm5
798	pxor	%xmm1,%xmm3
799	jnz	.L001enc_loop
800	movdqa	96(%ebp),%xmm4
801	movdqa	112(%ebp),%xmm0
802.byte	102,15,56,0,226
803	pxor	%xmm5,%xmm4
804.byte	102,15,56,0,195
805	movdqa	64(%ebx,%ecx,1),%xmm1
806	pxor	%xmm4,%xmm0
807.byte	102,15,56,0,193
808	ret
809.size	_vpaes_encrypt_core,.-_vpaes_encrypt_core
810.type	_vpaes_decrypt_core,@function
811.align	16
812_vpaes_decrypt_core:
813	leal	608(%ebp),%ebx
814	movl	240(%edx),%eax
815	movdqa	%xmm6,%xmm1
816	movdqa	-64(%ebx),%xmm2
817	pandn	%xmm0,%xmm1
818	movl	%eax,%ecx
819	psrld	$4,%xmm1
820	movdqu	(%edx),%xmm5
821	shll	$4,%ecx
822	pand	%xmm6,%xmm0
823.byte	102,15,56,0,208
824	movdqa	-48(%ebx),%xmm0
825	xorl	$48,%ecx
826.byte	102,15,56,0,193
827	andl	$48,%ecx
828	pxor	%xmm5,%xmm2
829	movdqa	176(%ebp),%xmm5
830	pxor	%xmm2,%xmm0
831	addl	$16,%edx
832	leal	-352(%ebx,%ecx,1),%ecx
833	jmp	.L002dec_entry
834.align	16
835.L003dec_loop:
836	movdqa	-32(%ebx),%xmm4
837	movdqa	-16(%ebx),%xmm1
838.byte	102,15,56,0,226
839.byte	102,15,56,0,203
840	pxor	%xmm4,%xmm0
841	movdqa	(%ebx),%xmm4
842	pxor	%xmm1,%xmm0
843	movdqa	16(%ebx),%xmm1
844.byte	102,15,56,0,226
845.byte	102,15,56,0,197
846.byte	102,15,56,0,203
847	pxor	%xmm4,%xmm0
848	movdqa	32(%ebx),%xmm4
849	pxor	%xmm1,%xmm0
850	movdqa	48(%ebx),%xmm1
851.byte	102,15,56,0,226
852.byte	102,15,56,0,197
853.byte	102,15,56,0,203
854	pxor	%xmm4,%xmm0
855	movdqa	64(%ebx),%xmm4
856	pxor	%xmm1,%xmm0
857	movdqa	80(%ebx),%xmm1
858.byte	102,15,56,0,226
859.byte	102,15,56,0,197
860.byte	102,15,56,0,203
861	pxor	%xmm4,%xmm0
862	addl	$16,%edx
863.byte	102,15,58,15,237,12
864	pxor	%xmm1,%xmm0
865	subl	$1,%eax
866.L002dec_entry:
867	movdqa	%xmm6,%xmm1
868	movdqa	-32(%ebp),%xmm2
869	pandn	%xmm0,%xmm1
870	pand	%xmm6,%xmm0
871	psrld	$4,%xmm1
872.byte	102,15,56,0,208
873	movdqa	%xmm7,%xmm3
874	pxor	%xmm1,%xmm0
875.byte	102,15,56,0,217
876	movdqa	%xmm7,%xmm4
877	pxor	%xmm2,%xmm3
878.byte	102,15,56,0,224
879	pxor	%xmm2,%xmm4
880	movdqa	%xmm7,%xmm2
881.byte	102,15,56,0,211
882	movdqa	%xmm7,%xmm3
883	pxor	%xmm0,%xmm2
884.byte	102,15,56,0,220
885	movdqu	(%edx),%xmm0
886	pxor	%xmm1,%xmm3
887	jnz	.L003dec_loop
888	movdqa	96(%ebx),%xmm4
889.byte	102,15,56,0,226
890	pxor	%xmm0,%xmm4
891	movdqa	112(%ebx),%xmm0
892	movdqa	(%ecx),%xmm2
893.byte	102,15,56,0,195
894	pxor	%xmm4,%xmm0
895.byte	102,15,56,0,194
896	ret
897.size	_vpaes_decrypt_core,.-_vpaes_decrypt_core
898.type	_vpaes_schedule_core,@function
899.align	16
900_vpaes_schedule_core:
901	addl	(%esp),%ebp
902	movdqu	(%esi),%xmm0
903	movdqa	320(%ebp),%xmm2
904	movdqa	%xmm0,%xmm3
905	leal	(%ebp),%ebx
906	movdqa	%xmm2,4(%esp)
907	call	_vpaes_schedule_transform
908	movdqa	%xmm0,%xmm7
909	testl	%edi,%edi
910	jnz	.L004schedule_am_decrypting
911	movdqu	%xmm0,(%edx)
912	jmp	.L005schedule_go
913.L004schedule_am_decrypting:
914	movdqa	256(%ebp,%ecx,1),%xmm1
915.byte	102,15,56,0,217
916	movdqu	%xmm3,(%edx)
917	xorl	$48,%ecx
918.L005schedule_go:
919	cmpl	$192,%eax
920	ja	.L006schedule_256
921	je	.L007schedule_192
922.L008schedule_128:
923	movl	$10,%eax
924.L009loop_schedule_128:
925	call	_vpaes_schedule_round
926	decl	%eax
927	jz	.L010schedule_mangle_last
928	call	_vpaes_schedule_mangle
929	jmp	.L009loop_schedule_128
930.align	16
931.L007schedule_192:
932	movdqu	8(%esi),%xmm0
933	call	_vpaes_schedule_transform
934	movdqa	%xmm0,%xmm6
935	pxor	%xmm4,%xmm4
936	movhlps	%xmm4,%xmm6
937	movl	$4,%eax
938.L011loop_schedule_192:
939	call	_vpaes_schedule_round
940.byte	102,15,58,15,198,8
941	call	_vpaes_schedule_mangle
942	call	_vpaes_schedule_192_smear
943	call	_vpaes_schedule_mangle
944	call	_vpaes_schedule_round
945	decl	%eax
946	jz	.L010schedule_mangle_last
947	call	_vpaes_schedule_mangle
948	call	_vpaes_schedule_192_smear
949	jmp	.L011loop_schedule_192
950.align	16
951.L006schedule_256:
952	movdqu	16(%esi),%xmm0
953	call	_vpaes_schedule_transform
954	movl	$7,%eax
955.L012loop_schedule_256:
956	call	_vpaes_schedule_mangle
957	movdqa	%xmm0,%xmm6
958	call	_vpaes_schedule_round
959	decl	%eax
960	jz	.L010schedule_mangle_last
961	call	_vpaes_schedule_mangle
962	pshufd	$255,%xmm0,%xmm0
963	movdqa	%xmm7,20(%esp)
964	movdqa	%xmm6,%xmm7
965	call	.L_vpaes_schedule_low_round
966	movdqa	20(%esp),%xmm7
967	jmp	.L012loop_schedule_256
968.align	16
969.L010schedule_mangle_last:
970	leal	384(%ebp),%ebx
971	testl	%edi,%edi
972	jnz	.L013schedule_mangle_last_dec
973	movdqa	256(%ebp,%ecx,1),%xmm1
974.byte	102,15,56,0,193
975	leal	352(%ebp),%ebx
976	addl	$32,%edx
977.L013schedule_mangle_last_dec:
978	addl	$-16,%edx
979	pxor	336(%ebp),%xmm0
980	call	_vpaes_schedule_transform
981	movdqu	%xmm0,(%edx)
982	pxor	%xmm0,%xmm0
983	pxor	%xmm1,%xmm1
984	pxor	%xmm2,%xmm2
985	pxor	%xmm3,%xmm3
986	pxor	%xmm4,%xmm4
987	pxor	%xmm5,%xmm5
988	pxor	%xmm6,%xmm6
989	pxor	%xmm7,%xmm7
990	ret
991.size	_vpaes_schedule_core,.-_vpaes_schedule_core
992.type	_vpaes_schedule_192_smear,@function
993.align	16
994_vpaes_schedule_192_smear:
995	pshufd	$128,%xmm6,%xmm1
996	pshufd	$254,%xmm7,%xmm0
997	pxor	%xmm1,%xmm6
998	pxor	%xmm1,%xmm1
999	pxor	%xmm0,%xmm6
1000	movdqa	%xmm6,%xmm0
1001	movhlps	%xmm1,%xmm6
1002	ret
1003.size	_vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
1004.type	_vpaes_schedule_round,@function
1005.align	16
1006_vpaes_schedule_round:
1007	movdqa	8(%esp),%xmm2
1008	pxor	%xmm1,%xmm1
1009.byte	102,15,58,15,202,15
1010.byte	102,15,58,15,210,15
1011	pxor	%xmm1,%xmm7
1012	pshufd	$255,%xmm0,%xmm0
1013.byte	102,15,58,15,192,1
1014	movdqa	%xmm2,8(%esp)
1015.L_vpaes_schedule_low_round:
1016	movdqa	%xmm7,%xmm1
1017	pslldq	$4,%xmm7
1018	pxor	%xmm1,%xmm7
1019	movdqa	%xmm7,%xmm1
1020	pslldq	$8,%xmm7
1021	pxor	%xmm1,%xmm7
1022	pxor	336(%ebp),%xmm7
1023	movdqa	-16(%ebp),%xmm4
1024	movdqa	-48(%ebp),%xmm5
1025	movdqa	%xmm4,%xmm1
1026	pandn	%xmm0,%xmm1
1027	psrld	$4,%xmm1
1028	pand	%xmm4,%xmm0
1029	movdqa	-32(%ebp),%xmm2
1030.byte	102,15,56,0,208
1031	pxor	%xmm1,%xmm0
1032	movdqa	%xmm5,%xmm3
1033.byte	102,15,56,0,217
1034	pxor	%xmm2,%xmm3
1035	movdqa	%xmm5,%xmm4
1036.byte	102,15,56,0,224
1037	pxor	%xmm2,%xmm4
1038	movdqa	%xmm5,%xmm2
1039.byte	102,15,56,0,211
1040	pxor	%xmm0,%xmm2
1041	movdqa	%xmm5,%xmm3
1042.byte	102,15,56,0,220
1043	pxor	%xmm1,%xmm3
1044	movdqa	32(%ebp),%xmm4
1045.byte	102,15,56,0,226
1046	movdqa	48(%ebp),%xmm0
1047.byte	102,15,56,0,195
1048	pxor	%xmm4,%xmm0
1049	pxor	%xmm7,%xmm0
1050	movdqa	%xmm0,%xmm7
1051	ret
1052.size	_vpaes_schedule_round,.-_vpaes_schedule_round
1053.type	_vpaes_schedule_transform,@function
1054.align	16
1055_vpaes_schedule_transform:
1056	movdqa	-16(%ebp),%xmm2
1057	movdqa	%xmm2,%xmm1
1058	pandn	%xmm0,%xmm1
1059	psrld	$4,%xmm1
1060	pand	%xmm2,%xmm0
1061	movdqa	(%ebx),%xmm2
1062.byte	102,15,56,0,208
1063	movdqa	16(%ebx),%xmm0
1064.byte	102,15,56,0,193
1065	pxor	%xmm2,%xmm0
1066	ret
1067.size	_vpaes_schedule_transform,.-_vpaes_schedule_transform
1068.type	_vpaes_schedule_mangle,@function
1069.align	16
1070_vpaes_schedule_mangle:
1071	movdqa	%xmm0,%xmm4
1072	movdqa	128(%ebp),%xmm5
1073	testl	%edi,%edi
1074	jnz	.L014schedule_mangle_dec
1075	addl	$16,%edx
1076	pxor	336(%ebp),%xmm4
1077.byte	102,15,56,0,229
1078	movdqa	%xmm4,%xmm3
1079.byte	102,15,56,0,229
1080	pxor	%xmm4,%xmm3
1081.byte	102,15,56,0,229
1082	pxor	%xmm4,%xmm3
1083	jmp	.L015schedule_mangle_both
1084.align	16
1085.L014schedule_mangle_dec:
1086	movdqa	-16(%ebp),%xmm2
1087	leal	416(%ebp),%esi
1088	movdqa	%xmm2,%xmm1
1089	pandn	%xmm4,%xmm1
1090	psrld	$4,%xmm1
1091	pand	%xmm2,%xmm4
1092	movdqa	(%esi),%xmm2
1093.byte	102,15,56,0,212
1094	movdqa	16(%esi),%xmm3
1095.byte	102,15,56,0,217
1096	pxor	%xmm2,%xmm3
1097.byte	102,15,56,0,221
1098	movdqa	32(%esi),%xmm2
1099.byte	102,15,56,0,212
1100	pxor	%xmm3,%xmm2
1101	movdqa	48(%esi),%xmm3
1102.byte	102,15,56,0,217
1103	pxor	%xmm2,%xmm3
1104.byte	102,15,56,0,221
1105	movdqa	64(%esi),%xmm2
1106.byte	102,15,56,0,212
1107	pxor	%xmm3,%xmm2
1108	movdqa	80(%esi),%xmm3
1109.byte	102,15,56,0,217
1110	pxor	%xmm2,%xmm3
1111.byte	102,15,56,0,221
1112	movdqa	96(%esi),%xmm2
1113.byte	102,15,56,0,212
1114	pxor	%xmm3,%xmm2
1115	movdqa	112(%esi),%xmm3
1116.byte	102,15,56,0,217
1117	pxor	%xmm2,%xmm3
1118	addl	$-16,%edx
1119.L015schedule_mangle_both:
1120	movdqa	256(%ebp,%ecx,1),%xmm1
1121.byte	102,15,56,0,217
1122	addl	$-16,%ecx
1123	andl	$48,%ecx
1124	movdqu	%xmm3,(%edx)
1125	ret
1126.size	_vpaes_schedule_mangle,.-_vpaes_schedule_mangle
1127.globl	vpaes_set_encrypt_key
1128.type	vpaes_set_encrypt_key,@function
1129.align	16
1130vpaes_set_encrypt_key:
1131.L_vpaes_set_encrypt_key_begin:
1132	pushl	%ebp
1133	pushl	%ebx
1134	pushl	%esi
1135	pushl	%edi
1136	movl	20(%esp),%esi
1137	leal	-56(%esp),%ebx
1138	movl	24(%esp),%eax
1139	andl	$-16,%ebx
1140	movl	28(%esp),%edx
1141	xchgl	%esp,%ebx
1142	movl	%ebx,48(%esp)
1143	movl	%eax,%ebx
1144	shrl	$5,%ebx
1145	addl	$5,%ebx
1146	movl	%ebx,240(%edx)
1147	movl	$48,%ecx
1148	movl	$0,%edi
1149	leal	.L_vpaes_consts+0x30-.L016pic_point,%ebp
1150	call	_vpaes_schedule_core
1151.L016pic_point:
1152	movl	48(%esp),%esp
1153	xorl	%eax,%eax
1154	popl	%edi
1155	popl	%esi
1156	popl	%ebx
1157	popl	%ebp
1158	ret
1159.size	vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin
1160.globl	vpaes_set_decrypt_key
1161.type	vpaes_set_decrypt_key,@function
1162.align	16
1163vpaes_set_decrypt_key:
1164.L_vpaes_set_decrypt_key_begin:
1165	pushl	%ebp
1166	pushl	%ebx
1167	pushl	%esi
1168	pushl	%edi
1169	movl	20(%esp),%esi
1170	leal	-56(%esp),%ebx
1171	movl	24(%esp),%eax
1172	andl	$-16,%ebx
1173	movl	28(%esp),%edx
1174	xchgl	%esp,%ebx
1175	movl	%ebx,48(%esp)
1176	movl	%eax,%ebx
1177	shrl	$5,%ebx
1178	addl	$5,%ebx
1179	movl	%ebx,240(%edx)
1180	shll	$4,%ebx
1181	leal	16(%edx,%ebx,1),%edx
1182	movl	$1,%edi
1183	movl	%eax,%ecx
1184	shrl	$1,%ecx
1185	andl	$32,%ecx
1186	xorl	$32,%ecx
1187	leal	.L_vpaes_consts+0x30-.L017pic_point,%ebp
1188	call	_vpaes_schedule_core
1189.L017pic_point:
1190	movl	48(%esp),%esp
1191	xorl	%eax,%eax
1192	popl	%edi
1193	popl	%esi
1194	popl	%ebx
1195	popl	%ebp
1196	ret
1197.size	vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin
1198.globl	vpaes_encrypt
1199.type	vpaes_encrypt,@function
1200.align	16
1201vpaes_encrypt:
1202.L_vpaes_encrypt_begin:
1203	pushl	%ebp
1204	pushl	%ebx
1205	pushl	%esi
1206	pushl	%edi
1207	leal	.L_vpaes_consts+0x30-.L018pic_point,%ebp
1208	call	_vpaes_preheat
1209.L018pic_point:
1210	movl	20(%esp),%esi
1211	leal	-56(%esp),%ebx
1212	movl	24(%esp),%edi
1213	andl	$-16,%ebx
1214	movl	28(%esp),%edx
1215	xchgl	%esp,%ebx
1216	movl	%ebx,48(%esp)
1217	movdqu	(%esi),%xmm0
1218	call	_vpaes_encrypt_core
1219	movdqu	%xmm0,(%edi)
1220	movl	48(%esp),%esp
1221	popl	%edi
1222	popl	%esi
1223	popl	%ebx
1224	popl	%ebp
1225	ret
1226.size	vpaes_encrypt,.-.L_vpaes_encrypt_begin
1227.globl	vpaes_decrypt
1228.type	vpaes_decrypt,@function
1229.align	16
1230vpaes_decrypt:
1231.L_vpaes_decrypt_begin:
1232	pushl	%ebp
1233	pushl	%ebx
1234	pushl	%esi
1235	pushl	%edi
1236	leal	.L_vpaes_consts+0x30-.L019pic_point,%ebp
1237	call	_vpaes_preheat
1238.L019pic_point:
1239	movl	20(%esp),%esi
1240	leal	-56(%esp),%ebx
1241	movl	24(%esp),%edi
1242	andl	$-16,%ebx
1243	movl	28(%esp),%edx
1244	xchgl	%esp,%ebx
1245	movl	%ebx,48(%esp)
1246	movdqu	(%esi),%xmm0
1247	call	_vpaes_decrypt_core
1248	movdqu	%xmm0,(%edi)
1249	movl	48(%esp),%esp
1250	popl	%edi
1251	popl	%esi
1252	popl	%ebx
1253	popl	%ebp
1254	ret
1255.size	vpaes_decrypt,.-.L_vpaes_decrypt_begin
1256.globl	vpaes_cbc_encrypt
1257.type	vpaes_cbc_encrypt,@function
1258.align	16
1259vpaes_cbc_encrypt:
1260.L_vpaes_cbc_encrypt_begin:
1261	pushl	%ebp
1262	pushl	%ebx
1263	pushl	%esi
1264	pushl	%edi
1265	movl	20(%esp),%esi
1266	movl	24(%esp),%edi
1267	movl	28(%esp),%eax
1268	movl	32(%esp),%edx
1269	subl	$16,%eax
1270	jc	.L020cbc_abort
1271	leal	-56(%esp),%ebx
1272	movl	36(%esp),%ebp
1273	andl	$-16,%ebx
1274	movl	40(%esp),%ecx
1275	xchgl	%esp,%ebx
1276	movdqu	(%ebp),%xmm1
1277	subl	%esi,%edi
1278	movl	%ebx,48(%esp)
1279	movl	%edi,(%esp)
1280	movl	%edx,4(%esp)
1281	movl	%ebp,8(%esp)
1282	movl	%eax,%edi
1283	leal	.L_vpaes_consts+0x30-.L021pic_point,%ebp
1284	call	_vpaes_preheat
1285.L021pic_point:
1286	cmpl	$0,%ecx
1287	je	.L022cbc_dec_loop
1288	jmp	.L023cbc_enc_loop
1289.align	16
1290.L023cbc_enc_loop:
1291	movdqu	(%esi),%xmm0
1292	pxor	%xmm1,%xmm0
1293	call	_vpaes_encrypt_core
1294	movl	(%esp),%ebx
1295	movl	4(%esp),%edx
1296	movdqa	%xmm0,%xmm1
1297	movdqu	%xmm0,(%ebx,%esi,1)
1298	leal	16(%esi),%esi
1299	subl	$16,%edi
1300	jnc	.L023cbc_enc_loop
1301	jmp	.L024cbc_done
1302.align	16
1303.L022cbc_dec_loop:
1304	movdqu	(%esi),%xmm0
1305	movdqa	%xmm1,16(%esp)
1306	movdqa	%xmm0,32(%esp)
1307	call	_vpaes_decrypt_core
1308	movl	(%esp),%ebx
1309	movl	4(%esp),%edx
1310	pxor	16(%esp),%xmm0
1311	movdqa	32(%esp),%xmm1
1312	movdqu	%xmm0,(%ebx,%esi,1)
1313	leal	16(%esi),%esi
1314	subl	$16,%edi
1315	jnc	.L022cbc_dec_loop
1316.L024cbc_done:
1317	movl	8(%esp),%ebx
1318	movl	48(%esp),%esp
1319	movdqu	%xmm1,(%ebx)
1320.L020cbc_abort:
1321	popl	%edi
1322	popl	%esi
1323	popl	%ebx
1324	popl	%ebp
1325	ret
1326.size	vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin
1327#endif
1328