1// This file is generated from a similarly-named Perl script in the BoringSSL
2// source tree. Do not edit by hand.
3
4#include <ring-core/asm_base.h>
5
6#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86) && defined(__ELF__)
7.text
8#ifdef BORINGSSL_DISPATCH_TEST
9#endif
10.align	64
11.L_vpaes_consts:
12.long	218628480,235210255,168496130,67568393
13.long	252381056,17041926,33884169,51187212
14.long	252645135,252645135,252645135,252645135
15.long	1512730624,3266504856,1377990664,3401244816
16.long	830229760,1275146365,2969422977,3447763452
17.long	3411033600,2979783055,338359620,2782886510
18.long	4209124096,907596821,221174255,1006095553
19.long	191964160,3799684038,3164090317,1589111125
20.long	182528256,1777043520,2877432650,3265356744
21.long	1874708224,3503451415,3305285752,363511674
22.long	1606117888,3487855781,1093350906,2384367825
23.long	197121,67569157,134941193,202313229
24.long	67569157,134941193,202313229,197121
25.long	134941193,202313229,197121,67569157
26.long	202313229,197121,67569157,134941193
27.long	33619971,100992007,168364043,235736079
28.long	235736079,33619971,100992007,168364043
29.long	168364043,235736079,33619971,100992007
30.long	100992007,168364043,235736079,33619971
31.long	50462976,117835012,185207048,252579084
32.long	252314880,51251460,117574920,184942860
33.long	184682752,252054788,50987272,118359308
34.long	118099200,185467140,251790600,50727180
35.long	2946363062,528716217,1300004225,1881839624
36.long	1532713819,1532713819,1532713819,1532713819
37.long	3602276352,4288629033,3737020424,4153884961
38.long	1354558464,32357713,2958822624,3775749553
39.long	1201988352,132424512,1572796698,503232858
40.long	2213177600,1597421020,4103937655,675398315
41.byte	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
42.byte	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
43.byte	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
44.byte	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
45.byte	118,101,114,115,105,116,121,41,0
46.align	64
47.hidden	_vpaes_preheat
48.type	_vpaes_preheat,@function
49.align	16
50_vpaes_preheat:
51	addl	(%esp),%ebp
52	movdqa	-48(%ebp),%xmm7
53	movdqa	-16(%ebp),%xmm6
54	ret
55.size	_vpaes_preheat,.-_vpaes_preheat
56.hidden	_vpaes_encrypt_core
57.type	_vpaes_encrypt_core,@function
58.align	16
59_vpaes_encrypt_core:
60	movl	$16,%ecx
61	movl	240(%edx),%eax
62	movdqa	%xmm6,%xmm1
63	movdqa	(%ebp),%xmm2
64	pandn	%xmm0,%xmm1
65	pand	%xmm6,%xmm0
66	movdqu	(%edx),%xmm5
67.byte	102,15,56,0,208
68	movdqa	16(%ebp),%xmm0
69	pxor	%xmm5,%xmm2
70	psrld	$4,%xmm1
71	addl	$16,%edx
72.byte	102,15,56,0,193
73	leal	192(%ebp),%ebx
74	pxor	%xmm2,%xmm0
75	jmp	.L000enc_entry
76.align	16
77.L001enc_loop:
78	movdqa	32(%ebp),%xmm4
79	movdqa	48(%ebp),%xmm0
80.byte	102,15,56,0,226
81.byte	102,15,56,0,195
82	pxor	%xmm5,%xmm4
83	movdqa	64(%ebp),%xmm5
84	pxor	%xmm4,%xmm0
85	movdqa	-64(%ebx,%ecx,1),%xmm1
86.byte	102,15,56,0,234
87	movdqa	80(%ebp),%xmm2
88	movdqa	(%ebx,%ecx,1),%xmm4
89.byte	102,15,56,0,211
90	movdqa	%xmm0,%xmm3
91	pxor	%xmm5,%xmm2
92.byte	102,15,56,0,193
93	addl	$16,%edx
94	pxor	%xmm2,%xmm0
95.byte	102,15,56,0,220
96	addl	$16,%ecx
97	pxor	%xmm0,%xmm3
98.byte	102,15,56,0,193
99	andl	$48,%ecx
100	subl	$1,%eax
101	pxor	%xmm3,%xmm0
102.L000enc_entry:
103	movdqa	%xmm6,%xmm1
104	movdqa	-32(%ebp),%xmm5
105	pandn	%xmm0,%xmm1
106	psrld	$4,%xmm1
107	pand	%xmm6,%xmm0
108.byte	102,15,56,0,232
109	movdqa	%xmm7,%xmm3
110	pxor	%xmm1,%xmm0
111.byte	102,15,56,0,217
112	movdqa	%xmm7,%xmm4
113	pxor	%xmm5,%xmm3
114.byte	102,15,56,0,224
115	movdqa	%xmm7,%xmm2
116	pxor	%xmm5,%xmm4
117.byte	102,15,56,0,211
118	movdqa	%xmm7,%xmm3
119	pxor	%xmm0,%xmm2
120.byte	102,15,56,0,220
121	movdqu	(%edx),%xmm5
122	pxor	%xmm1,%xmm3
123	jnz	.L001enc_loop
124	movdqa	96(%ebp),%xmm4
125	movdqa	112(%ebp),%xmm0
126.byte	102,15,56,0,226
127	pxor	%xmm5,%xmm4
128.byte	102,15,56,0,195
129	movdqa	64(%ebx,%ecx,1),%xmm1
130	pxor	%xmm4,%xmm0
131.byte	102,15,56,0,193
132	ret
133.size	_vpaes_encrypt_core,.-_vpaes_encrypt_core
134.hidden	_vpaes_schedule_core
135.type	_vpaes_schedule_core,@function
136.align	16
137_vpaes_schedule_core:
138	addl	(%esp),%ebp
139	movdqu	(%esi),%xmm0
140	movdqa	320(%ebp),%xmm2
141	movdqa	%xmm0,%xmm3
142	leal	(%ebp),%ebx
143	movdqa	%xmm2,4(%esp)
144	call	_vpaes_schedule_transform
145	movdqa	%xmm0,%xmm7
146	testl	%edi,%edi
147	jnz	.L002schedule_am_decrypting
148	movdqu	%xmm0,(%edx)
149	jmp	.L003schedule_go
150.L002schedule_am_decrypting:
151	movdqa	256(%ebp,%ecx,1),%xmm1
152.byte	102,15,56,0,217
153	movdqu	%xmm3,(%edx)
154	xorl	$48,%ecx
155.L003schedule_go:
156	cmpl	$192,%eax
157	ja	.L004schedule_256
158.L005schedule_128:
159	movl	$10,%eax
160.L006loop_schedule_128:
161	call	_vpaes_schedule_round
162	decl	%eax
163	jz	.L007schedule_mangle_last
164	call	_vpaes_schedule_mangle
165	jmp	.L006loop_schedule_128
166.align	16
167.L004schedule_256:
168	movdqu	16(%esi),%xmm0
169	call	_vpaes_schedule_transform
170	movl	$7,%eax
171.L008loop_schedule_256:
172	call	_vpaes_schedule_mangle
173	movdqa	%xmm0,%xmm6
174	call	_vpaes_schedule_round
175	decl	%eax
176	jz	.L007schedule_mangle_last
177	call	_vpaes_schedule_mangle
178	pshufd	$255,%xmm0,%xmm0
179	movdqa	%xmm7,20(%esp)
180	movdqa	%xmm6,%xmm7
181	call	.L_vpaes_schedule_low_round
182	movdqa	20(%esp),%xmm7
183	jmp	.L008loop_schedule_256
184.align	16
185.L007schedule_mangle_last:
186	leal	384(%ebp),%ebx
187	testl	%edi,%edi
188	jnz	.L009schedule_mangle_last_dec
189	movdqa	256(%ebp,%ecx,1),%xmm1
190.byte	102,15,56,0,193
191	leal	352(%ebp),%ebx
192	addl	$32,%edx
193.L009schedule_mangle_last_dec:
194	addl	$-16,%edx
195	pxor	336(%ebp),%xmm0
196	call	_vpaes_schedule_transform
197	movdqu	%xmm0,(%edx)
198	pxor	%xmm0,%xmm0
199	pxor	%xmm1,%xmm1
200	pxor	%xmm2,%xmm2
201	pxor	%xmm3,%xmm3
202	pxor	%xmm4,%xmm4
203	pxor	%xmm5,%xmm5
204	pxor	%xmm6,%xmm6
205	pxor	%xmm7,%xmm7
206	ret
207.size	_vpaes_schedule_core,.-_vpaes_schedule_core
208.hidden	_vpaes_schedule_round
209.type	_vpaes_schedule_round,@function
210.align	16
211_vpaes_schedule_round:
212	movdqa	8(%esp),%xmm2
213	pxor	%xmm1,%xmm1
214.byte	102,15,58,15,202,15
215.byte	102,15,58,15,210,15
216	pxor	%xmm1,%xmm7
217	pshufd	$255,%xmm0,%xmm0
218.byte	102,15,58,15,192,1
219	movdqa	%xmm2,8(%esp)
220.L_vpaes_schedule_low_round:
221	movdqa	%xmm7,%xmm1
222	pslldq	$4,%xmm7
223	pxor	%xmm1,%xmm7
224	movdqa	%xmm7,%xmm1
225	pslldq	$8,%xmm7
226	pxor	%xmm1,%xmm7
227	pxor	336(%ebp),%xmm7
228	movdqa	-16(%ebp),%xmm4
229	movdqa	-48(%ebp),%xmm5
230	movdqa	%xmm4,%xmm1
231	pandn	%xmm0,%xmm1
232	psrld	$4,%xmm1
233	pand	%xmm4,%xmm0
234	movdqa	-32(%ebp),%xmm2
235.byte	102,15,56,0,208
236	pxor	%xmm1,%xmm0
237	movdqa	%xmm5,%xmm3
238.byte	102,15,56,0,217
239	pxor	%xmm2,%xmm3
240	movdqa	%xmm5,%xmm4
241.byte	102,15,56,0,224
242	pxor	%xmm2,%xmm4
243	movdqa	%xmm5,%xmm2
244.byte	102,15,56,0,211
245	pxor	%xmm0,%xmm2
246	movdqa	%xmm5,%xmm3
247.byte	102,15,56,0,220
248	pxor	%xmm1,%xmm3
249	movdqa	32(%ebp),%xmm4
250.byte	102,15,56,0,226
251	movdqa	48(%ebp),%xmm0
252.byte	102,15,56,0,195
253	pxor	%xmm4,%xmm0
254	pxor	%xmm7,%xmm0
255	movdqa	%xmm0,%xmm7
256	ret
257.size	_vpaes_schedule_round,.-_vpaes_schedule_round
258.hidden	_vpaes_schedule_transform
259.type	_vpaes_schedule_transform,@function
260.align	16
261_vpaes_schedule_transform:
262	movdqa	-16(%ebp),%xmm2
263	movdqa	%xmm2,%xmm1
264	pandn	%xmm0,%xmm1
265	psrld	$4,%xmm1
266	pand	%xmm2,%xmm0
267	movdqa	(%ebx),%xmm2
268.byte	102,15,56,0,208
269	movdqa	16(%ebx),%xmm0
270.byte	102,15,56,0,193
271	pxor	%xmm2,%xmm0
272	ret
273.size	_vpaes_schedule_transform,.-_vpaes_schedule_transform
274.hidden	_vpaes_schedule_mangle
275.type	_vpaes_schedule_mangle,@function
276.align	16
277_vpaes_schedule_mangle:
278	movdqa	%xmm0,%xmm4
279	movdqa	128(%ebp),%xmm5
280	testl	%edi,%edi
281	jnz	.L010schedule_mangle_dec
282	addl	$16,%edx
283	pxor	336(%ebp),%xmm4
284.byte	102,15,56,0,229
285	movdqa	%xmm4,%xmm3
286.byte	102,15,56,0,229
287	pxor	%xmm4,%xmm3
288.byte	102,15,56,0,229
289	pxor	%xmm4,%xmm3
290	jmp	.L011schedule_mangle_both
291.align	16
292.L010schedule_mangle_dec:
293	movdqa	-16(%ebp),%xmm2
294	leal	(%ebp),%esi
295	movdqa	%xmm2,%xmm1
296	pandn	%xmm4,%xmm1
297	psrld	$4,%xmm1
298	pand	%xmm2,%xmm4
299	movdqa	(%esi),%xmm2
300.byte	102,15,56,0,212
301	movdqa	16(%esi),%xmm3
302.byte	102,15,56,0,217
303	pxor	%xmm2,%xmm3
304.byte	102,15,56,0,221
305	movdqa	32(%esi),%xmm2
306.byte	102,15,56,0,212
307	pxor	%xmm3,%xmm2
308	movdqa	48(%esi),%xmm3
309.byte	102,15,56,0,217
310	pxor	%xmm2,%xmm3
311.byte	102,15,56,0,221
312	movdqa	64(%esi),%xmm2
313.byte	102,15,56,0,212
314	pxor	%xmm3,%xmm2
315	movdqa	80(%esi),%xmm3
316.byte	102,15,56,0,217
317	pxor	%xmm2,%xmm3
318.byte	102,15,56,0,221
319	movdqa	96(%esi),%xmm2
320.byte	102,15,56,0,212
321	pxor	%xmm3,%xmm2
322	movdqa	112(%esi),%xmm3
323.byte	102,15,56,0,217
324	pxor	%xmm2,%xmm3
325	addl	$-16,%edx
326.L011schedule_mangle_both:
327	movdqa	256(%ebp,%ecx,1),%xmm1
328.byte	102,15,56,0,217
329	addl	$-16,%ecx
330	andl	$48,%ecx
331	movdqu	%xmm3,(%edx)
332	ret
333.size	_vpaes_schedule_mangle,.-_vpaes_schedule_mangle
334.globl	vpaes_set_encrypt_key
335.hidden	vpaes_set_encrypt_key
336.type	vpaes_set_encrypt_key,@function
337.align	16
338vpaes_set_encrypt_key:
339.L_vpaes_set_encrypt_key_begin:
340	pushl	%ebp
341	pushl	%ebx
342	pushl	%esi
343	pushl	%edi
344#ifdef BORINGSSL_DISPATCH_TEST
345	pushl	%ebx
346	pushl	%edx
347	call	.L012pic
348.L012pic:
349	popl	%ebx
350	leal	BORINGSSL_function_hit+5-.L012pic(%ebx),%ebx
351	movl	$1,%edx
352	movb	%dl,(%ebx)
353	popl	%edx
354	popl	%ebx
355#endif
356	movl	20(%esp),%esi
357	leal	-56(%esp),%ebx
358	movl	24(%esp),%eax
359	andl	$-16,%ebx
360	movl	28(%esp),%edx
361	xchgl	%esp,%ebx
362	movl	%ebx,48(%esp)
363	movl	%eax,%ebx
364	shrl	$5,%ebx
365	addl	$5,%ebx
366	movl	%ebx,240(%edx)
367	movl	$48,%ecx
368	movl	$0,%edi
369	leal	.L_vpaes_consts+0x30-.L013pic_point,%ebp
370	call	_vpaes_schedule_core
371.L013pic_point:
372	movl	48(%esp),%esp
373	xorl	%eax,%eax
374	popl	%edi
375	popl	%esi
376	popl	%ebx
377	popl	%ebp
378	ret
379.size	vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin
380.globl	vpaes_encrypt
381.hidden	vpaes_encrypt
382.type	vpaes_encrypt,@function
383.align	16
384vpaes_encrypt:
385.L_vpaes_encrypt_begin:
386	pushl	%ebp
387	pushl	%ebx
388	pushl	%esi
389	pushl	%edi
390#ifdef BORINGSSL_DISPATCH_TEST
391	pushl	%ebx
392	pushl	%edx
393	call	.L014pic
394.L014pic:
395	popl	%ebx
396	leal	BORINGSSL_function_hit+4-.L014pic(%ebx),%ebx
397	movl	$1,%edx
398	movb	%dl,(%ebx)
399	popl	%edx
400	popl	%ebx
401#endif
402	leal	.L_vpaes_consts+0x30-.L015pic_point,%ebp
403	call	_vpaes_preheat
404.L015pic_point:
405	movl	20(%esp),%esi
406	leal	-56(%esp),%ebx
407	movl	24(%esp),%edi
408	andl	$-16,%ebx
409	movl	28(%esp),%edx
410	xchgl	%esp,%ebx
411	movl	%ebx,48(%esp)
412	movdqu	(%esi),%xmm0
413	call	_vpaes_encrypt_core
414	movdqu	%xmm0,(%edi)
415	movl	48(%esp),%esp
416	popl	%edi
417	popl	%esi
418	popl	%ebx
419	popl	%ebp
420	ret
421.size	vpaes_encrypt,.-.L_vpaes_encrypt_begin
422#endif  // !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86) && defined(__ELF__)
423