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