vpaes-x86.S revision 238405
1238405Sjkim	# $FreeBSD: head/secure/lib/libcrypto/i386/vpaes-x86.s 238405 2012-07-12 19:30:53Z jkim $
2238405Sjkim.file	"vpaes-x86.s"
3238405Sjkim.text
4238405Sjkim.align	64
5238405Sjkim.L_vpaes_consts:
6238405Sjkim.long	218628480,235210255,168496130,67568393
7238405Sjkim.long	252381056,17041926,33884169,51187212
8238405Sjkim.long	252645135,252645135,252645135,252645135
9238405Sjkim.long	1512730624,3266504856,1377990664,3401244816
10238405Sjkim.long	830229760,1275146365,2969422977,3447763452
11238405Sjkim.long	3411033600,2979783055,338359620,2782886510
12238405Sjkim.long	4209124096,907596821,221174255,1006095553
13238405Sjkim.long	191964160,3799684038,3164090317,1589111125
14238405Sjkim.long	182528256,1777043520,2877432650,3265356744
15238405Sjkim.long	1874708224,3503451415,3305285752,363511674
16238405Sjkim.long	1606117888,3487855781,1093350906,2384367825
17238405Sjkim.long	197121,67569157,134941193,202313229
18238405Sjkim.long	67569157,134941193,202313229,197121
19238405Sjkim.long	134941193,202313229,197121,67569157
20238405Sjkim.long	202313229,197121,67569157,134941193
21238405Sjkim.long	33619971,100992007,168364043,235736079
22238405Sjkim.long	235736079,33619971,100992007,168364043
23238405Sjkim.long	168364043,235736079,33619971,100992007
24238405Sjkim.long	100992007,168364043,235736079,33619971
25238405Sjkim.long	50462976,117835012,185207048,252579084
26238405Sjkim.long	252314880,51251460,117574920,184942860
27238405Sjkim.long	184682752,252054788,50987272,118359308
28238405Sjkim.long	118099200,185467140,251790600,50727180
29238405Sjkim.long	2946363062,528716217,1300004225,1881839624
30238405Sjkim.long	1532713819,1532713819,1532713819,1532713819
31238405Sjkim.long	3602276352,4288629033,3737020424,4153884961
32238405Sjkim.long	1354558464,32357713,2958822624,3775749553
33238405Sjkim.long	1201988352,132424512,1572796698,503232858
34238405Sjkim.long	2213177600,1597421020,4103937655,675398315
35238405Sjkim.long	2749646592,4273543773,1511898873,121693092
36238405Sjkim.long	3040248576,1103263732,2871565598,1608280554
37238405Sjkim.long	2236667136,2588920351,482954393,64377734
38238405Sjkim.long	3069987328,291237287,2117370568,3650299247
39238405Sjkim.long	533321216,3573750986,2572112006,1401264716
40238405Sjkim.long	1339849704,2721158661,548607111,3445553514
41238405Sjkim.long	2128193280,3054596040,2183486460,1257083700
42238405Sjkim.long	655635200,1165381986,3923443150,2344132524
43238405Sjkim.long	190078720,256924420,290342170,357187870
44238405Sjkim.long	1610966272,2263057382,4103205268,309794674
45238405Sjkim.long	2592527872,2233205587,1335446729,3402964816
46238405Sjkim.long	3973531904,3225098121,3002836325,1918774430
47238405Sjkim.long	3870401024,2102906079,2284471353,4117666579
48238405Sjkim.long	617007872,1021508343,366931923,691083277
49238405Sjkim.long	2528395776,3491914898,2968704004,1613121270
50238405Sjkim.long	3445188352,3247741094,844474987,4093578302
51238405Sjkim.long	651481088,1190302358,1689581232,574775300
52238405Sjkim.long	4289380608,206939853,2555985458,2489840491
53238405Sjkim.long	2130264064,327674451,3566485037,3349835193
54238405Sjkim.long	2470714624,316102159,3636825756,3393945945
55238405Sjkim.byte	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
56238405Sjkim.byte	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
57238405Sjkim.byte	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
58238405Sjkim.byte	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
59238405Sjkim.byte	118,101,114,115,105,116,121,41,0
60238405Sjkim.align	64
61238405Sjkim.type	_vpaes_preheat,@function
62238405Sjkim.align	16
63238405Sjkim_vpaes_preheat:
64238405Sjkim	addl	(%esp),%ebp
65238405Sjkim	movdqa	-48(%ebp),%xmm7
66238405Sjkim	movdqa	-16(%ebp),%xmm6
67238405Sjkim	ret
68238405Sjkim.size	_vpaes_preheat,.-_vpaes_preheat
69238405Sjkim.type	_vpaes_encrypt_core,@function
70238405Sjkim.align	16
71238405Sjkim_vpaes_encrypt_core:
72238405Sjkim	movl	$16,%ecx
73238405Sjkim	movl	240(%edx),%eax
74238405Sjkim	movdqa	%xmm6,%xmm1
75238405Sjkim	movdqa	(%ebp),%xmm2
76238405Sjkim	pandn	%xmm0,%xmm1
77238405Sjkim	movdqu	(%edx),%xmm5
78238405Sjkim	psrld	$4,%xmm1
79238405Sjkim	pand	%xmm6,%xmm0
80238405Sjkim.byte	102,15,56,0,208
81238405Sjkim	movdqa	16(%ebp),%xmm0
82238405Sjkim.byte	102,15,56,0,193
83238405Sjkim	pxor	%xmm5,%xmm2
84238405Sjkim	pxor	%xmm2,%xmm0
85238405Sjkim	addl	$16,%edx
86238405Sjkim	leal	192(%ebp),%ebx
87238405Sjkim	jmp	.L000enc_entry
88238405Sjkim.align	16
89238405Sjkim.L001enc_loop:
90238405Sjkim	movdqa	32(%ebp),%xmm4
91238405Sjkim.byte	102,15,56,0,226
92238405Sjkim	pxor	%xmm5,%xmm4
93238405Sjkim	movdqa	48(%ebp),%xmm0
94238405Sjkim.byte	102,15,56,0,195
95238405Sjkim	pxor	%xmm4,%xmm0
96238405Sjkim	movdqa	64(%ebp),%xmm5
97238405Sjkim.byte	102,15,56,0,234
98238405Sjkim	movdqa	-64(%ebx,%ecx,1),%xmm1
99238405Sjkim	movdqa	80(%ebp),%xmm2
100238405Sjkim.byte	102,15,56,0,211
101238405Sjkim	pxor	%xmm5,%xmm2
102238405Sjkim	movdqa	(%ebx,%ecx,1),%xmm4
103238405Sjkim	movdqa	%xmm0,%xmm3
104238405Sjkim.byte	102,15,56,0,193
105238405Sjkim	addl	$16,%edx
106238405Sjkim	pxor	%xmm2,%xmm0
107238405Sjkim.byte	102,15,56,0,220
108238405Sjkim	addl	$16,%ecx
109238405Sjkim	pxor	%xmm0,%xmm3
110238405Sjkim.byte	102,15,56,0,193
111238405Sjkim	andl	$48,%ecx
112238405Sjkim	pxor	%xmm3,%xmm0
113238405Sjkim	subl	$1,%eax
114238405Sjkim.L000enc_entry:
115238405Sjkim	movdqa	%xmm6,%xmm1
116238405Sjkim	pandn	%xmm0,%xmm1
117238405Sjkim	psrld	$4,%xmm1
118238405Sjkim	pand	%xmm6,%xmm0
119238405Sjkim	movdqa	-32(%ebp),%xmm5
120238405Sjkim.byte	102,15,56,0,232
121238405Sjkim	pxor	%xmm1,%xmm0
122238405Sjkim	movdqa	%xmm7,%xmm3
123238405Sjkim.byte	102,15,56,0,217
124238405Sjkim	pxor	%xmm5,%xmm3
125238405Sjkim	movdqa	%xmm7,%xmm4
126238405Sjkim.byte	102,15,56,0,224
127238405Sjkim	pxor	%xmm5,%xmm4
128238405Sjkim	movdqa	%xmm7,%xmm2
129238405Sjkim.byte	102,15,56,0,211
130238405Sjkim	pxor	%xmm0,%xmm2
131238405Sjkim	movdqa	%xmm7,%xmm3
132238405Sjkim	movdqu	(%edx),%xmm5
133238405Sjkim.byte	102,15,56,0,220
134238405Sjkim	pxor	%xmm1,%xmm3
135238405Sjkim	jnz	.L001enc_loop
136238405Sjkim	movdqa	96(%ebp),%xmm4
137238405Sjkim	movdqa	112(%ebp),%xmm0
138238405Sjkim.byte	102,15,56,0,226
139238405Sjkim	pxor	%xmm5,%xmm4
140238405Sjkim.byte	102,15,56,0,195
141238405Sjkim	movdqa	64(%ebx,%ecx,1),%xmm1
142238405Sjkim	pxor	%xmm4,%xmm0
143238405Sjkim.byte	102,15,56,0,193
144238405Sjkim	ret
145238405Sjkim.size	_vpaes_encrypt_core,.-_vpaes_encrypt_core
146238405Sjkim.type	_vpaes_decrypt_core,@function
147238405Sjkim.align	16
148238405Sjkim_vpaes_decrypt_core:
149238405Sjkim	movl	240(%edx),%eax
150238405Sjkim	leal	608(%ebp),%ebx
151238405Sjkim	movdqa	%xmm6,%xmm1
152238405Sjkim	movdqa	-64(%ebx),%xmm2
153238405Sjkim	pandn	%xmm0,%xmm1
154238405Sjkim	movl	%eax,%ecx
155238405Sjkim	psrld	$4,%xmm1
156238405Sjkim	movdqu	(%edx),%xmm5
157238405Sjkim	shll	$4,%ecx
158238405Sjkim	pand	%xmm6,%xmm0
159238405Sjkim.byte	102,15,56,0,208
160238405Sjkim	movdqa	-48(%ebx),%xmm0
161238405Sjkim	xorl	$48,%ecx
162238405Sjkim.byte	102,15,56,0,193
163238405Sjkim	andl	$48,%ecx
164238405Sjkim	pxor	%xmm5,%xmm2
165238405Sjkim	movdqa	176(%ebp),%xmm5
166238405Sjkim	pxor	%xmm2,%xmm0
167238405Sjkim	addl	$16,%edx
168238405Sjkim	leal	-352(%ebx,%ecx,1),%ecx
169238405Sjkim	jmp	.L002dec_entry
170238405Sjkim.align	16
171238405Sjkim.L003dec_loop:
172238405Sjkim	movdqa	-32(%ebx),%xmm4
173238405Sjkim.byte	102,15,56,0,226
174238405Sjkim	pxor	%xmm0,%xmm4
175238405Sjkim	movdqa	-16(%ebx),%xmm0
176238405Sjkim.byte	102,15,56,0,195
177238405Sjkim	pxor	%xmm4,%xmm0
178238405Sjkim	addl	$16,%edx
179238405Sjkim.byte	102,15,56,0,197
180238405Sjkim	movdqa	(%ebx),%xmm4
181238405Sjkim.byte	102,15,56,0,226
182238405Sjkim	pxor	%xmm0,%xmm4
183238405Sjkim	movdqa	16(%ebx),%xmm0
184238405Sjkim.byte	102,15,56,0,195
185238405Sjkim	pxor	%xmm4,%xmm0
186238405Sjkim	subl	$1,%eax
187238405Sjkim.byte	102,15,56,0,197
188238405Sjkim	movdqa	32(%ebx),%xmm4
189238405Sjkim.byte	102,15,56,0,226
190238405Sjkim	pxor	%xmm0,%xmm4
191238405Sjkim	movdqa	48(%ebx),%xmm0
192238405Sjkim.byte	102,15,56,0,195
193238405Sjkim	pxor	%xmm4,%xmm0
194238405Sjkim.byte	102,15,56,0,197
195238405Sjkim	movdqa	64(%ebx),%xmm4
196238405Sjkim.byte	102,15,56,0,226
197238405Sjkim	pxor	%xmm0,%xmm4
198238405Sjkim	movdqa	80(%ebx),%xmm0
199238405Sjkim.byte	102,15,56,0,195
200238405Sjkim	pxor	%xmm4,%xmm0
201238405Sjkim.byte	102,15,58,15,237,12
202238405Sjkim.L002dec_entry:
203238405Sjkim	movdqa	%xmm6,%xmm1
204238405Sjkim	pandn	%xmm0,%xmm1
205238405Sjkim	psrld	$4,%xmm1
206238405Sjkim	pand	%xmm6,%xmm0
207238405Sjkim	movdqa	-32(%ebp),%xmm2
208238405Sjkim.byte	102,15,56,0,208
209238405Sjkim	pxor	%xmm1,%xmm0
210238405Sjkim	movdqa	%xmm7,%xmm3
211238405Sjkim.byte	102,15,56,0,217
212238405Sjkim	pxor	%xmm2,%xmm3
213238405Sjkim	movdqa	%xmm7,%xmm4
214238405Sjkim.byte	102,15,56,0,224
215238405Sjkim	pxor	%xmm2,%xmm4
216238405Sjkim	movdqa	%xmm7,%xmm2
217238405Sjkim.byte	102,15,56,0,211
218238405Sjkim	pxor	%xmm0,%xmm2
219238405Sjkim	movdqa	%xmm7,%xmm3
220238405Sjkim.byte	102,15,56,0,220
221238405Sjkim	pxor	%xmm1,%xmm3
222238405Sjkim	movdqu	(%edx),%xmm0
223238405Sjkim	jnz	.L003dec_loop
224238405Sjkim	movdqa	96(%ebx),%xmm4
225238405Sjkim.byte	102,15,56,0,226
226238405Sjkim	pxor	%xmm0,%xmm4
227238405Sjkim	movdqa	112(%ebx),%xmm0
228238405Sjkim	movdqa	(%ecx),%xmm2
229238405Sjkim.byte	102,15,56,0,195
230238405Sjkim	pxor	%xmm4,%xmm0
231238405Sjkim.byte	102,15,56,0,194
232238405Sjkim	ret
233238405Sjkim.size	_vpaes_decrypt_core,.-_vpaes_decrypt_core
234238405Sjkim.type	_vpaes_schedule_core,@function
235238405Sjkim.align	16
236238405Sjkim_vpaes_schedule_core:
237238405Sjkim	addl	(%esp),%ebp
238238405Sjkim	movdqu	(%esi),%xmm0
239238405Sjkim	movdqa	320(%ebp),%xmm2
240238405Sjkim	movdqa	%xmm0,%xmm3
241238405Sjkim	leal	(%ebp),%ebx
242238405Sjkim	movdqa	%xmm2,4(%esp)
243238405Sjkim	call	_vpaes_schedule_transform
244238405Sjkim	movdqa	%xmm0,%xmm7
245238405Sjkim	testl	%edi,%edi
246238405Sjkim	jnz	.L004schedule_am_decrypting
247238405Sjkim	movdqu	%xmm0,(%edx)
248238405Sjkim	jmp	.L005schedule_go
249238405Sjkim.L004schedule_am_decrypting:
250238405Sjkim	movdqa	256(%ebp,%ecx,1),%xmm1
251238405Sjkim.byte	102,15,56,0,217
252238405Sjkim	movdqu	%xmm3,(%edx)
253238405Sjkim	xorl	$48,%ecx
254238405Sjkim.L005schedule_go:
255238405Sjkim	cmpl	$192,%eax
256238405Sjkim	ja	.L006schedule_256
257238405Sjkim	je	.L007schedule_192
258238405Sjkim.L008schedule_128:
259238405Sjkim	movl	$10,%eax
260238405Sjkim.L009loop_schedule_128:
261238405Sjkim	call	_vpaes_schedule_round
262238405Sjkim	decl	%eax
263238405Sjkim	jz	.L010schedule_mangle_last
264238405Sjkim	call	_vpaes_schedule_mangle
265238405Sjkim	jmp	.L009loop_schedule_128
266238405Sjkim.align	16
267238405Sjkim.L007schedule_192:
268238405Sjkim	movdqu	8(%esi),%xmm0
269238405Sjkim	call	_vpaes_schedule_transform
270238405Sjkim	movdqa	%xmm0,%xmm6
271238405Sjkim	pxor	%xmm4,%xmm4
272238405Sjkim	movhlps	%xmm4,%xmm6
273238405Sjkim	movl	$4,%eax
274238405Sjkim.L011loop_schedule_192:
275238405Sjkim	call	_vpaes_schedule_round
276238405Sjkim.byte	102,15,58,15,198,8
277238405Sjkim	call	_vpaes_schedule_mangle
278238405Sjkim	call	_vpaes_schedule_192_smear
279238405Sjkim	call	_vpaes_schedule_mangle
280238405Sjkim	call	_vpaes_schedule_round
281238405Sjkim	decl	%eax
282238405Sjkim	jz	.L010schedule_mangle_last
283238405Sjkim	call	_vpaes_schedule_mangle
284238405Sjkim	call	_vpaes_schedule_192_smear
285238405Sjkim	jmp	.L011loop_schedule_192
286238405Sjkim.align	16
287238405Sjkim.L006schedule_256:
288238405Sjkim	movdqu	16(%esi),%xmm0
289238405Sjkim	call	_vpaes_schedule_transform
290238405Sjkim	movl	$7,%eax
291238405Sjkim.L012loop_schedule_256:
292238405Sjkim	call	_vpaes_schedule_mangle
293238405Sjkim	movdqa	%xmm0,%xmm6
294238405Sjkim	call	_vpaes_schedule_round
295238405Sjkim	decl	%eax
296238405Sjkim	jz	.L010schedule_mangle_last
297238405Sjkim	call	_vpaes_schedule_mangle
298238405Sjkim	pshufd	$255,%xmm0,%xmm0
299238405Sjkim	movdqa	%xmm7,20(%esp)
300238405Sjkim	movdqa	%xmm6,%xmm7
301238405Sjkim	call	.L_vpaes_schedule_low_round
302238405Sjkim	movdqa	20(%esp),%xmm7
303238405Sjkim	jmp	.L012loop_schedule_256
304238405Sjkim.align	16
305238405Sjkim.L010schedule_mangle_last:
306238405Sjkim	leal	384(%ebp),%ebx
307238405Sjkim	testl	%edi,%edi
308238405Sjkim	jnz	.L013schedule_mangle_last_dec
309238405Sjkim	movdqa	256(%ebp,%ecx,1),%xmm1
310238405Sjkim.byte	102,15,56,0,193
311238405Sjkim	leal	352(%ebp),%ebx
312238405Sjkim	addl	$32,%edx
313238405Sjkim.L013schedule_mangle_last_dec:
314238405Sjkim	addl	$-16,%edx
315238405Sjkim	pxor	336(%ebp),%xmm0
316238405Sjkim	call	_vpaes_schedule_transform
317238405Sjkim	movdqu	%xmm0,(%edx)
318238405Sjkim	pxor	%xmm0,%xmm0
319238405Sjkim	pxor	%xmm1,%xmm1
320238405Sjkim	pxor	%xmm2,%xmm2
321238405Sjkim	pxor	%xmm3,%xmm3
322238405Sjkim	pxor	%xmm4,%xmm4
323238405Sjkim	pxor	%xmm5,%xmm5
324238405Sjkim	pxor	%xmm6,%xmm6
325238405Sjkim	pxor	%xmm7,%xmm7
326238405Sjkim	ret
327238405Sjkim.size	_vpaes_schedule_core,.-_vpaes_schedule_core
328238405Sjkim.type	_vpaes_schedule_192_smear,@function
329238405Sjkim.align	16
330238405Sjkim_vpaes_schedule_192_smear:
331238405Sjkim	pshufd	$128,%xmm6,%xmm0
332238405Sjkim	pxor	%xmm0,%xmm6
333238405Sjkim	pshufd	$254,%xmm7,%xmm0
334238405Sjkim	pxor	%xmm0,%xmm6
335238405Sjkim	movdqa	%xmm6,%xmm0
336238405Sjkim	pxor	%xmm1,%xmm1
337238405Sjkim	movhlps	%xmm1,%xmm6
338238405Sjkim	ret
339238405Sjkim.size	_vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
340238405Sjkim.type	_vpaes_schedule_round,@function
341238405Sjkim.align	16
342238405Sjkim_vpaes_schedule_round:
343238405Sjkim	movdqa	8(%esp),%xmm2
344238405Sjkim	pxor	%xmm1,%xmm1
345238405Sjkim.byte	102,15,58,15,202,15
346238405Sjkim.byte	102,15,58,15,210,15
347238405Sjkim	pxor	%xmm1,%xmm7
348238405Sjkim	pshufd	$255,%xmm0,%xmm0
349238405Sjkim.byte	102,15,58,15,192,1
350238405Sjkim	movdqa	%xmm2,8(%esp)
351238405Sjkim.L_vpaes_schedule_low_round:
352238405Sjkim	movdqa	%xmm7,%xmm1
353238405Sjkim	pslldq	$4,%xmm7
354238405Sjkim	pxor	%xmm1,%xmm7
355238405Sjkim	movdqa	%xmm7,%xmm1
356238405Sjkim	pslldq	$8,%xmm7
357238405Sjkim	pxor	%xmm1,%xmm7
358238405Sjkim	pxor	336(%ebp),%xmm7
359238405Sjkim	movdqa	-16(%ebp),%xmm4
360238405Sjkim	movdqa	-48(%ebp),%xmm5
361238405Sjkim	movdqa	%xmm4,%xmm1
362238405Sjkim	pandn	%xmm0,%xmm1
363238405Sjkim	psrld	$4,%xmm1
364238405Sjkim	pand	%xmm4,%xmm0
365238405Sjkim	movdqa	-32(%ebp),%xmm2
366238405Sjkim.byte	102,15,56,0,208
367238405Sjkim	pxor	%xmm1,%xmm0
368238405Sjkim	movdqa	%xmm5,%xmm3
369238405Sjkim.byte	102,15,56,0,217
370238405Sjkim	pxor	%xmm2,%xmm3
371238405Sjkim	movdqa	%xmm5,%xmm4
372238405Sjkim.byte	102,15,56,0,224
373238405Sjkim	pxor	%xmm2,%xmm4
374238405Sjkim	movdqa	%xmm5,%xmm2
375238405Sjkim.byte	102,15,56,0,211
376238405Sjkim	pxor	%xmm0,%xmm2
377238405Sjkim	movdqa	%xmm5,%xmm3
378238405Sjkim.byte	102,15,56,0,220
379238405Sjkim	pxor	%xmm1,%xmm3
380238405Sjkim	movdqa	32(%ebp),%xmm4
381238405Sjkim.byte	102,15,56,0,226
382238405Sjkim	movdqa	48(%ebp),%xmm0
383238405Sjkim.byte	102,15,56,0,195
384238405Sjkim	pxor	%xmm4,%xmm0
385238405Sjkim	pxor	%xmm7,%xmm0
386238405Sjkim	movdqa	%xmm0,%xmm7
387238405Sjkim	ret
388238405Sjkim.size	_vpaes_schedule_round,.-_vpaes_schedule_round
389238405Sjkim.type	_vpaes_schedule_transform,@function
390238405Sjkim.align	16
391238405Sjkim_vpaes_schedule_transform:
392238405Sjkim	movdqa	-16(%ebp),%xmm2
393238405Sjkim	movdqa	%xmm2,%xmm1
394238405Sjkim	pandn	%xmm0,%xmm1
395238405Sjkim	psrld	$4,%xmm1
396238405Sjkim	pand	%xmm2,%xmm0
397238405Sjkim	movdqa	(%ebx),%xmm2
398238405Sjkim.byte	102,15,56,0,208
399238405Sjkim	movdqa	16(%ebx),%xmm0
400238405Sjkim.byte	102,15,56,0,193
401238405Sjkim	pxor	%xmm2,%xmm0
402238405Sjkim	ret
403238405Sjkim.size	_vpaes_schedule_transform,.-_vpaes_schedule_transform
404238405Sjkim.type	_vpaes_schedule_mangle,@function
405238405Sjkim.align	16
406238405Sjkim_vpaes_schedule_mangle:
407238405Sjkim	movdqa	%xmm0,%xmm4
408238405Sjkim	movdqa	128(%ebp),%xmm5
409238405Sjkim	testl	%edi,%edi
410238405Sjkim	jnz	.L014schedule_mangle_dec
411238405Sjkim	addl	$16,%edx
412238405Sjkim	pxor	336(%ebp),%xmm4
413238405Sjkim.byte	102,15,56,0,229
414238405Sjkim	movdqa	%xmm4,%xmm3
415238405Sjkim.byte	102,15,56,0,229
416238405Sjkim	pxor	%xmm4,%xmm3
417238405Sjkim.byte	102,15,56,0,229
418238405Sjkim	pxor	%xmm4,%xmm3
419238405Sjkim	jmp	.L015schedule_mangle_both
420238405Sjkim.align	16
421238405Sjkim.L014schedule_mangle_dec:
422238405Sjkim	movdqa	-16(%ebp),%xmm2
423238405Sjkim	leal	416(%ebp),%esi
424238405Sjkim	movdqa	%xmm2,%xmm1
425238405Sjkim	pandn	%xmm4,%xmm1
426238405Sjkim	psrld	$4,%xmm1
427238405Sjkim	pand	%xmm2,%xmm4
428238405Sjkim	movdqa	(%esi),%xmm2
429238405Sjkim.byte	102,15,56,0,212
430238405Sjkim	movdqa	16(%esi),%xmm3
431238405Sjkim.byte	102,15,56,0,217
432238405Sjkim	pxor	%xmm2,%xmm3
433238405Sjkim.byte	102,15,56,0,221
434238405Sjkim	movdqa	32(%esi),%xmm2
435238405Sjkim.byte	102,15,56,0,212
436238405Sjkim	pxor	%xmm3,%xmm2
437238405Sjkim	movdqa	48(%esi),%xmm3
438238405Sjkim.byte	102,15,56,0,217
439238405Sjkim	pxor	%xmm2,%xmm3
440238405Sjkim.byte	102,15,56,0,221
441238405Sjkim	movdqa	64(%esi),%xmm2
442238405Sjkim.byte	102,15,56,0,212
443238405Sjkim	pxor	%xmm3,%xmm2
444238405Sjkim	movdqa	80(%esi),%xmm3
445238405Sjkim.byte	102,15,56,0,217
446238405Sjkim	pxor	%xmm2,%xmm3
447238405Sjkim.byte	102,15,56,0,221
448238405Sjkim	movdqa	96(%esi),%xmm2
449238405Sjkim.byte	102,15,56,0,212
450238405Sjkim	pxor	%xmm3,%xmm2
451238405Sjkim	movdqa	112(%esi),%xmm3
452238405Sjkim.byte	102,15,56,0,217
453238405Sjkim	pxor	%xmm2,%xmm3
454238405Sjkim	addl	$-16,%edx
455238405Sjkim.L015schedule_mangle_both:
456238405Sjkim	movdqa	256(%ebp,%ecx,1),%xmm1
457238405Sjkim.byte	102,15,56,0,217
458238405Sjkim	addl	$-16,%ecx
459238405Sjkim	andl	$48,%ecx
460238405Sjkim	movdqu	%xmm3,(%edx)
461238405Sjkim	ret
462238405Sjkim.size	_vpaes_schedule_mangle,.-_vpaes_schedule_mangle
463238405Sjkim.globl	vpaes_set_encrypt_key
464238405Sjkim.type	vpaes_set_encrypt_key,@function
465238405Sjkim.align	16
466238405Sjkimvpaes_set_encrypt_key:
467238405Sjkim.L_vpaes_set_encrypt_key_begin:
468238405Sjkim	pushl	%ebp
469238405Sjkim	pushl	%ebx
470238405Sjkim	pushl	%esi
471238405Sjkim	pushl	%edi
472238405Sjkim	movl	20(%esp),%esi
473238405Sjkim	leal	-56(%esp),%ebx
474238405Sjkim	movl	24(%esp),%eax
475238405Sjkim	andl	$-16,%ebx
476238405Sjkim	movl	28(%esp),%edx
477238405Sjkim	xchgl	%esp,%ebx
478238405Sjkim	movl	%ebx,48(%esp)
479238405Sjkim	movl	%eax,%ebx
480238405Sjkim	shrl	$5,%ebx
481238405Sjkim	addl	$5,%ebx
482238405Sjkim	movl	%ebx,240(%edx)
483238405Sjkim	movl	$48,%ecx
484238405Sjkim	movl	$0,%edi
485238405Sjkim	leal	.L_vpaes_consts+0x30-.L016pic_point,%ebp
486238405Sjkim	call	_vpaes_schedule_core
487238405Sjkim.L016pic_point:
488238405Sjkim	movl	48(%esp),%esp
489238405Sjkim	xorl	%eax,%eax
490238405Sjkim	popl	%edi
491238405Sjkim	popl	%esi
492238405Sjkim	popl	%ebx
493238405Sjkim	popl	%ebp
494238405Sjkim	ret
495238405Sjkim.size	vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin
496238405Sjkim.globl	vpaes_set_decrypt_key
497238405Sjkim.type	vpaes_set_decrypt_key,@function
498238405Sjkim.align	16
499238405Sjkimvpaes_set_decrypt_key:
500238405Sjkim.L_vpaes_set_decrypt_key_begin:
501238405Sjkim	pushl	%ebp
502238405Sjkim	pushl	%ebx
503238405Sjkim	pushl	%esi
504238405Sjkim	pushl	%edi
505238405Sjkim	movl	20(%esp),%esi
506238405Sjkim	leal	-56(%esp),%ebx
507238405Sjkim	movl	24(%esp),%eax
508238405Sjkim	andl	$-16,%ebx
509238405Sjkim	movl	28(%esp),%edx
510238405Sjkim	xchgl	%esp,%ebx
511238405Sjkim	movl	%ebx,48(%esp)
512238405Sjkim	movl	%eax,%ebx
513238405Sjkim	shrl	$5,%ebx
514238405Sjkim	addl	$5,%ebx
515238405Sjkim	movl	%ebx,240(%edx)
516238405Sjkim	shll	$4,%ebx
517238405Sjkim	leal	16(%edx,%ebx,1),%edx
518238405Sjkim	movl	$1,%edi
519238405Sjkim	movl	%eax,%ecx
520238405Sjkim	shrl	$1,%ecx
521238405Sjkim	andl	$32,%ecx
522238405Sjkim	xorl	$32,%ecx
523238405Sjkim	leal	.L_vpaes_consts+0x30-.L017pic_point,%ebp
524238405Sjkim	call	_vpaes_schedule_core
525238405Sjkim.L017pic_point:
526238405Sjkim	movl	48(%esp),%esp
527238405Sjkim	xorl	%eax,%eax
528238405Sjkim	popl	%edi
529238405Sjkim	popl	%esi
530238405Sjkim	popl	%ebx
531238405Sjkim	popl	%ebp
532238405Sjkim	ret
533238405Sjkim.size	vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin
534238405Sjkim.globl	vpaes_encrypt
535238405Sjkim.type	vpaes_encrypt,@function
536238405Sjkim.align	16
537238405Sjkimvpaes_encrypt:
538238405Sjkim.L_vpaes_encrypt_begin:
539238405Sjkim	pushl	%ebp
540238405Sjkim	pushl	%ebx
541238405Sjkim	pushl	%esi
542238405Sjkim	pushl	%edi
543238405Sjkim	leal	.L_vpaes_consts+0x30-.L018pic_point,%ebp
544238405Sjkim	call	_vpaes_preheat
545238405Sjkim.L018pic_point:
546238405Sjkim	movl	20(%esp),%esi
547238405Sjkim	leal	-56(%esp),%ebx
548238405Sjkim	movl	24(%esp),%edi
549238405Sjkim	andl	$-16,%ebx
550238405Sjkim	movl	28(%esp),%edx
551238405Sjkim	xchgl	%esp,%ebx
552238405Sjkim	movl	%ebx,48(%esp)
553238405Sjkim	movdqu	(%esi),%xmm0
554238405Sjkim	call	_vpaes_encrypt_core
555238405Sjkim	movdqu	%xmm0,(%edi)
556238405Sjkim	movl	48(%esp),%esp
557238405Sjkim	popl	%edi
558238405Sjkim	popl	%esi
559238405Sjkim	popl	%ebx
560238405Sjkim	popl	%ebp
561238405Sjkim	ret
562238405Sjkim.size	vpaes_encrypt,.-.L_vpaes_encrypt_begin
563238405Sjkim.globl	vpaes_decrypt
564238405Sjkim.type	vpaes_decrypt,@function
565238405Sjkim.align	16
566238405Sjkimvpaes_decrypt:
567238405Sjkim.L_vpaes_decrypt_begin:
568238405Sjkim	pushl	%ebp
569238405Sjkim	pushl	%ebx
570238405Sjkim	pushl	%esi
571238405Sjkim	pushl	%edi
572238405Sjkim	leal	.L_vpaes_consts+0x30-.L019pic_point,%ebp
573238405Sjkim	call	_vpaes_preheat
574238405Sjkim.L019pic_point:
575238405Sjkim	movl	20(%esp),%esi
576238405Sjkim	leal	-56(%esp),%ebx
577238405Sjkim	movl	24(%esp),%edi
578238405Sjkim	andl	$-16,%ebx
579238405Sjkim	movl	28(%esp),%edx
580238405Sjkim	xchgl	%esp,%ebx
581238405Sjkim	movl	%ebx,48(%esp)
582238405Sjkim	movdqu	(%esi),%xmm0
583238405Sjkim	call	_vpaes_decrypt_core
584238405Sjkim	movdqu	%xmm0,(%edi)
585238405Sjkim	movl	48(%esp),%esp
586238405Sjkim	popl	%edi
587238405Sjkim	popl	%esi
588238405Sjkim	popl	%ebx
589238405Sjkim	popl	%ebp
590238405Sjkim	ret
591238405Sjkim.size	vpaes_decrypt,.-.L_vpaes_decrypt_begin
592238405Sjkim.globl	vpaes_cbc_encrypt
593238405Sjkim.type	vpaes_cbc_encrypt,@function
594238405Sjkim.align	16
595238405Sjkimvpaes_cbc_encrypt:
596238405Sjkim.L_vpaes_cbc_encrypt_begin:
597238405Sjkim	pushl	%ebp
598238405Sjkim	pushl	%ebx
599238405Sjkim	pushl	%esi
600238405Sjkim	pushl	%edi
601238405Sjkim	movl	20(%esp),%esi
602238405Sjkim	movl	24(%esp),%edi
603238405Sjkim	movl	28(%esp),%eax
604238405Sjkim	movl	32(%esp),%edx
605238405Sjkim	subl	$16,%eax
606238405Sjkim	jc	.L020cbc_abort
607238405Sjkim	leal	-56(%esp),%ebx
608238405Sjkim	movl	36(%esp),%ebp
609238405Sjkim	andl	$-16,%ebx
610238405Sjkim	movl	40(%esp),%ecx
611238405Sjkim	xchgl	%esp,%ebx
612238405Sjkim	movdqu	(%ebp),%xmm1
613238405Sjkim	subl	%esi,%edi
614238405Sjkim	movl	%ebx,48(%esp)
615238405Sjkim	movl	%edi,(%esp)
616238405Sjkim	movl	%edx,4(%esp)
617238405Sjkim	movl	%ebp,8(%esp)
618238405Sjkim	movl	%eax,%edi
619238405Sjkim	leal	.L_vpaes_consts+0x30-.L021pic_point,%ebp
620238405Sjkim	call	_vpaes_preheat
621238405Sjkim.L021pic_point:
622238405Sjkim	cmpl	$0,%ecx
623238405Sjkim	je	.L022cbc_dec_loop
624238405Sjkim	jmp	.L023cbc_enc_loop
625238405Sjkim.align	16
626238405Sjkim.L023cbc_enc_loop:
627238405Sjkim	movdqu	(%esi),%xmm0
628238405Sjkim	pxor	%xmm1,%xmm0
629238405Sjkim	call	_vpaes_encrypt_core
630238405Sjkim	movl	(%esp),%ebx
631238405Sjkim	movl	4(%esp),%edx
632238405Sjkim	movdqa	%xmm0,%xmm1
633238405Sjkim	movdqu	%xmm0,(%ebx,%esi,1)
634238405Sjkim	leal	16(%esi),%esi
635238405Sjkim	subl	$16,%edi
636238405Sjkim	jnc	.L023cbc_enc_loop
637238405Sjkim	jmp	.L024cbc_done
638238405Sjkim.align	16
639238405Sjkim.L022cbc_dec_loop:
640238405Sjkim	movdqu	(%esi),%xmm0
641238405Sjkim	movdqa	%xmm1,16(%esp)
642238405Sjkim	movdqa	%xmm0,32(%esp)
643238405Sjkim	call	_vpaes_decrypt_core
644238405Sjkim	movl	(%esp),%ebx
645238405Sjkim	movl	4(%esp),%edx
646238405Sjkim	pxor	16(%esp),%xmm0
647238405Sjkim	movdqa	32(%esp),%xmm1
648238405Sjkim	movdqu	%xmm0,(%ebx,%esi,1)
649238405Sjkim	leal	16(%esi),%esi
650238405Sjkim	subl	$16,%edi
651238405Sjkim	jnc	.L022cbc_dec_loop
652238405Sjkim.L024cbc_done:
653238405Sjkim	movl	8(%esp),%ebx
654238405Sjkim	movl	48(%esp),%esp
655238405Sjkim	movdqu	%xmm1,(%ebx)
656238405Sjkim.L020cbc_abort:
657238405Sjkim	popl	%edi
658238405Sjkim	popl	%esi
659238405Sjkim	popl	%ebx
660238405Sjkim	popl	%ebp
661238405Sjkim	ret
662238405Sjkim.size	vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin
663