• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// This file is generated from a similarly-named Perl script in the BoringSSL
2// source tree. Do not edit by hand.
3
4#if defined(__has_feature)
5#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
6#define OPENSSL_NO_ASM
7#endif
8#endif
9
10#if !defined(OPENSSL_NO_ASM) && defined(__i386__) && defined(__APPLE__)
11#if defined(BORINGSSL_PREFIX)
12#include <boringssl_prefix_symbols_asm.h>
13#endif
14.text
15#ifdef BORINGSSL_DISPATCH_TEST
16#endif
17.align	6,0x90
18L_vpaes_consts:
19.long	218628480,235210255,168496130,67568393
20.long	252381056,17041926,33884169,51187212
21.long	252645135,252645135,252645135,252645135
22.long	1512730624,3266504856,1377990664,3401244816
23.long	830229760,1275146365,2969422977,3447763452
24.long	3411033600,2979783055,338359620,2782886510
25.long	4209124096,907596821,221174255,1006095553
26.long	191964160,3799684038,3164090317,1589111125
27.long	182528256,1777043520,2877432650,3265356744
28.long	1874708224,3503451415,3305285752,363511674
29.long	1606117888,3487855781,1093350906,2384367825
30.long	197121,67569157,134941193,202313229
31.long	67569157,134941193,202313229,197121
32.long	134941193,202313229,197121,67569157
33.long	202313229,197121,67569157,134941193
34.long	33619971,100992007,168364043,235736079
35.long	235736079,33619971,100992007,168364043
36.long	168364043,235736079,33619971,100992007
37.long	100992007,168364043,235736079,33619971
38.long	50462976,117835012,185207048,252579084
39.long	252314880,51251460,117574920,184942860
40.long	184682752,252054788,50987272,118359308
41.long	118099200,185467140,251790600,50727180
42.long	2946363062,528716217,1300004225,1881839624
43.long	1532713819,1532713819,1532713819,1532713819
44.long	3602276352,4288629033,3737020424,4153884961
45.long	1354558464,32357713,2958822624,3775749553
46.long	1201988352,132424512,1572796698,503232858
47.long	2213177600,1597421020,4103937655,675398315
48.long	2749646592,4273543773,1511898873,121693092
49.long	3040248576,1103263732,2871565598,1608280554
50.long	2236667136,2588920351,482954393,64377734
51.long	3069987328,291237287,2117370568,3650299247
52.long	533321216,3573750986,2572112006,1401264716
53.long	1339849704,2721158661,548607111,3445553514
54.long	2128193280,3054596040,2183486460,1257083700
55.long	655635200,1165381986,3923443150,2344132524
56.long	190078720,256924420,290342170,357187870
57.long	1610966272,2263057382,4103205268,309794674
58.long	2592527872,2233205587,1335446729,3402964816
59.long	3973531904,3225098121,3002836325,1918774430
60.long	3870401024,2102906079,2284471353,4117666579
61.long	617007872,1021508343,366931923,691083277
62.long	2528395776,3491914898,2968704004,1613121270
63.long	3445188352,3247741094,844474987,4093578302
64.long	651481088,1190302358,1689581232,574775300
65.long	4289380608,206939853,2555985458,2489840491
66.long	2130264064,327674451,3566485037,3349835193
67.long	2470714624,316102159,3636825756,3393945945
68.byte	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
69.byte	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
70.byte	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
71.byte	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
72.byte	118,101,114,115,105,116,121,41,0
73.align	6,0x90
74.private_extern	__vpaes_preheat
75.align	4
76__vpaes_preheat:
77	addl	(%esp),%ebp
78	movdqa	-48(%ebp),%xmm7
79	movdqa	-16(%ebp),%xmm6
80	ret
81.private_extern	__vpaes_encrypt_core
82.align	4
83__vpaes_encrypt_core:
84	movl	$16,%ecx
85	movl	240(%edx),%eax
86	movdqa	%xmm6,%xmm1
87	movdqa	(%ebp),%xmm2
88	pandn	%xmm0,%xmm1
89	pand	%xmm6,%xmm0
90	movdqu	(%edx),%xmm5
91.byte	102,15,56,0,208
92	movdqa	16(%ebp),%xmm0
93	pxor	%xmm5,%xmm2
94	psrld	$4,%xmm1
95	addl	$16,%edx
96.byte	102,15,56,0,193
97	leal	192(%ebp),%ebx
98	pxor	%xmm2,%xmm0
99	jmp	L000enc_entry
100.align	4,0x90
101L001enc_loop:
102	movdqa	32(%ebp),%xmm4
103	movdqa	48(%ebp),%xmm0
104.byte	102,15,56,0,226
105.byte	102,15,56,0,195
106	pxor	%xmm5,%xmm4
107	movdqa	64(%ebp),%xmm5
108	pxor	%xmm4,%xmm0
109	movdqa	-64(%ebx,%ecx,1),%xmm1
110.byte	102,15,56,0,234
111	movdqa	80(%ebp),%xmm2
112	movdqa	(%ebx,%ecx,1),%xmm4
113.byte	102,15,56,0,211
114	movdqa	%xmm0,%xmm3
115	pxor	%xmm5,%xmm2
116.byte	102,15,56,0,193
117	addl	$16,%edx
118	pxor	%xmm2,%xmm0
119.byte	102,15,56,0,220
120	addl	$16,%ecx
121	pxor	%xmm0,%xmm3
122.byte	102,15,56,0,193
123	andl	$48,%ecx
124	subl	$1,%eax
125	pxor	%xmm3,%xmm0
126L000enc_entry:
127	movdqa	%xmm6,%xmm1
128	movdqa	-32(%ebp),%xmm5
129	pandn	%xmm0,%xmm1
130	psrld	$4,%xmm1
131	pand	%xmm6,%xmm0
132.byte	102,15,56,0,232
133	movdqa	%xmm7,%xmm3
134	pxor	%xmm1,%xmm0
135.byte	102,15,56,0,217
136	movdqa	%xmm7,%xmm4
137	pxor	%xmm5,%xmm3
138.byte	102,15,56,0,224
139	movdqa	%xmm7,%xmm2
140	pxor	%xmm5,%xmm4
141.byte	102,15,56,0,211
142	movdqa	%xmm7,%xmm3
143	pxor	%xmm0,%xmm2
144.byte	102,15,56,0,220
145	movdqu	(%edx),%xmm5
146	pxor	%xmm1,%xmm3
147	jnz	L001enc_loop
148	movdqa	96(%ebp),%xmm4
149	movdqa	112(%ebp),%xmm0
150.byte	102,15,56,0,226
151	pxor	%xmm5,%xmm4
152.byte	102,15,56,0,195
153	movdqa	64(%ebx,%ecx,1),%xmm1
154	pxor	%xmm4,%xmm0
155.byte	102,15,56,0,193
156	ret
157.private_extern	__vpaes_decrypt_core
158.align	4
159__vpaes_decrypt_core:
160	leal	608(%ebp),%ebx
161	movl	240(%edx),%eax
162	movdqa	%xmm6,%xmm1
163	movdqa	-64(%ebx),%xmm2
164	pandn	%xmm0,%xmm1
165	movl	%eax,%ecx
166	psrld	$4,%xmm1
167	movdqu	(%edx),%xmm5
168	shll	$4,%ecx
169	pand	%xmm6,%xmm0
170.byte	102,15,56,0,208
171	movdqa	-48(%ebx),%xmm0
172	xorl	$48,%ecx
173.byte	102,15,56,0,193
174	andl	$48,%ecx
175	pxor	%xmm5,%xmm2
176	movdqa	176(%ebp),%xmm5
177	pxor	%xmm2,%xmm0
178	addl	$16,%edx
179	leal	-352(%ebx,%ecx,1),%ecx
180	jmp	L002dec_entry
181.align	4,0x90
182L003dec_loop:
183	movdqa	-32(%ebx),%xmm4
184	movdqa	-16(%ebx),%xmm1
185.byte	102,15,56,0,226
186.byte	102,15,56,0,203
187	pxor	%xmm4,%xmm0
188	movdqa	(%ebx),%xmm4
189	pxor	%xmm1,%xmm0
190	movdqa	16(%ebx),%xmm1
191.byte	102,15,56,0,226
192.byte	102,15,56,0,197
193.byte	102,15,56,0,203
194	pxor	%xmm4,%xmm0
195	movdqa	32(%ebx),%xmm4
196	pxor	%xmm1,%xmm0
197	movdqa	48(%ebx),%xmm1
198.byte	102,15,56,0,226
199.byte	102,15,56,0,197
200.byte	102,15,56,0,203
201	pxor	%xmm4,%xmm0
202	movdqa	64(%ebx),%xmm4
203	pxor	%xmm1,%xmm0
204	movdqa	80(%ebx),%xmm1
205.byte	102,15,56,0,226
206.byte	102,15,56,0,197
207.byte	102,15,56,0,203
208	pxor	%xmm4,%xmm0
209	addl	$16,%edx
210.byte	102,15,58,15,237,12
211	pxor	%xmm1,%xmm0
212	subl	$1,%eax
213L002dec_entry:
214	movdqa	%xmm6,%xmm1
215	movdqa	-32(%ebp),%xmm2
216	pandn	%xmm0,%xmm1
217	pand	%xmm6,%xmm0
218	psrld	$4,%xmm1
219.byte	102,15,56,0,208
220	movdqa	%xmm7,%xmm3
221	pxor	%xmm1,%xmm0
222.byte	102,15,56,0,217
223	movdqa	%xmm7,%xmm4
224	pxor	%xmm2,%xmm3
225.byte	102,15,56,0,224
226	pxor	%xmm2,%xmm4
227	movdqa	%xmm7,%xmm2
228.byte	102,15,56,0,211
229	movdqa	%xmm7,%xmm3
230	pxor	%xmm0,%xmm2
231.byte	102,15,56,0,220
232	movdqu	(%edx),%xmm0
233	pxor	%xmm1,%xmm3
234	jnz	L003dec_loop
235	movdqa	96(%ebx),%xmm4
236.byte	102,15,56,0,226
237	pxor	%xmm0,%xmm4
238	movdqa	112(%ebx),%xmm0
239	movdqa	(%ecx),%xmm2
240.byte	102,15,56,0,195
241	pxor	%xmm4,%xmm0
242.byte	102,15,56,0,194
243	ret
244.private_extern	__vpaes_schedule_core
245.align	4
246__vpaes_schedule_core:
247	addl	(%esp),%ebp
248	movdqu	(%esi),%xmm0
249	movdqa	320(%ebp),%xmm2
250	movdqa	%xmm0,%xmm3
251	leal	(%ebp),%ebx
252	movdqa	%xmm2,4(%esp)
253	call	__vpaes_schedule_transform
254	movdqa	%xmm0,%xmm7
255	testl	%edi,%edi
256	jnz	L004schedule_am_decrypting
257	movdqu	%xmm0,(%edx)
258	jmp	L005schedule_go
259L004schedule_am_decrypting:
260	movdqa	256(%ebp,%ecx,1),%xmm1
261.byte	102,15,56,0,217
262	movdqu	%xmm3,(%edx)
263	xorl	$48,%ecx
264L005schedule_go:
265	cmpl	$192,%eax
266	ja	L006schedule_256
267	je	L007schedule_192
268L008schedule_128:
269	movl	$10,%eax
270L009loop_schedule_128:
271	call	__vpaes_schedule_round
272	decl	%eax
273	jz	L010schedule_mangle_last
274	call	__vpaes_schedule_mangle
275	jmp	L009loop_schedule_128
276.align	4,0x90
277L007schedule_192:
278	movdqu	8(%esi),%xmm0
279	call	__vpaes_schedule_transform
280	movdqa	%xmm0,%xmm6
281	pxor	%xmm4,%xmm4
282	movhlps	%xmm4,%xmm6
283	movl	$4,%eax
284L011loop_schedule_192:
285	call	__vpaes_schedule_round
286.byte	102,15,58,15,198,8
287	call	__vpaes_schedule_mangle
288	call	__vpaes_schedule_192_smear
289	call	__vpaes_schedule_mangle
290	call	__vpaes_schedule_round
291	decl	%eax
292	jz	L010schedule_mangle_last
293	call	__vpaes_schedule_mangle
294	call	__vpaes_schedule_192_smear
295	jmp	L011loop_schedule_192
296.align	4,0x90
297L006schedule_256:
298	movdqu	16(%esi),%xmm0
299	call	__vpaes_schedule_transform
300	movl	$7,%eax
301L012loop_schedule_256:
302	call	__vpaes_schedule_mangle
303	movdqa	%xmm0,%xmm6
304	call	__vpaes_schedule_round
305	decl	%eax
306	jz	L010schedule_mangle_last
307	call	__vpaes_schedule_mangle
308	pshufd	$255,%xmm0,%xmm0
309	movdqa	%xmm7,20(%esp)
310	movdqa	%xmm6,%xmm7
311	call	L_vpaes_schedule_low_round
312	movdqa	20(%esp),%xmm7
313	jmp	L012loop_schedule_256
314.align	4,0x90
315L010schedule_mangle_last:
316	leal	384(%ebp),%ebx
317	testl	%edi,%edi
318	jnz	L013schedule_mangle_last_dec
319	movdqa	256(%ebp,%ecx,1),%xmm1
320.byte	102,15,56,0,193
321	leal	352(%ebp),%ebx
322	addl	$32,%edx
323L013schedule_mangle_last_dec:
324	addl	$-16,%edx
325	pxor	336(%ebp),%xmm0
326	call	__vpaes_schedule_transform
327	movdqu	%xmm0,(%edx)
328	pxor	%xmm0,%xmm0
329	pxor	%xmm1,%xmm1
330	pxor	%xmm2,%xmm2
331	pxor	%xmm3,%xmm3
332	pxor	%xmm4,%xmm4
333	pxor	%xmm5,%xmm5
334	pxor	%xmm6,%xmm6
335	pxor	%xmm7,%xmm7
336	ret
337.private_extern	__vpaes_schedule_192_smear
338.align	4
339__vpaes_schedule_192_smear:
340	pshufd	$128,%xmm6,%xmm1
341	pshufd	$254,%xmm7,%xmm0
342	pxor	%xmm1,%xmm6
343	pxor	%xmm1,%xmm1
344	pxor	%xmm0,%xmm6
345	movdqa	%xmm6,%xmm0
346	movhlps	%xmm1,%xmm6
347	ret
348.private_extern	__vpaes_schedule_round
349.align	4
350__vpaes_schedule_round:
351	movdqa	8(%esp),%xmm2
352	pxor	%xmm1,%xmm1
353.byte	102,15,58,15,202,15
354.byte	102,15,58,15,210,15
355	pxor	%xmm1,%xmm7
356	pshufd	$255,%xmm0,%xmm0
357.byte	102,15,58,15,192,1
358	movdqa	%xmm2,8(%esp)
359L_vpaes_schedule_low_round:
360	movdqa	%xmm7,%xmm1
361	pslldq	$4,%xmm7
362	pxor	%xmm1,%xmm7
363	movdqa	%xmm7,%xmm1
364	pslldq	$8,%xmm7
365	pxor	%xmm1,%xmm7
366	pxor	336(%ebp),%xmm7
367	movdqa	-16(%ebp),%xmm4
368	movdqa	-48(%ebp),%xmm5
369	movdqa	%xmm4,%xmm1
370	pandn	%xmm0,%xmm1
371	psrld	$4,%xmm1
372	pand	%xmm4,%xmm0
373	movdqa	-32(%ebp),%xmm2
374.byte	102,15,56,0,208
375	pxor	%xmm1,%xmm0
376	movdqa	%xmm5,%xmm3
377.byte	102,15,56,0,217
378	pxor	%xmm2,%xmm3
379	movdqa	%xmm5,%xmm4
380.byte	102,15,56,0,224
381	pxor	%xmm2,%xmm4
382	movdqa	%xmm5,%xmm2
383.byte	102,15,56,0,211
384	pxor	%xmm0,%xmm2
385	movdqa	%xmm5,%xmm3
386.byte	102,15,56,0,220
387	pxor	%xmm1,%xmm3
388	movdqa	32(%ebp),%xmm4
389.byte	102,15,56,0,226
390	movdqa	48(%ebp),%xmm0
391.byte	102,15,56,0,195
392	pxor	%xmm4,%xmm0
393	pxor	%xmm7,%xmm0
394	movdqa	%xmm0,%xmm7
395	ret
396.private_extern	__vpaes_schedule_transform
397.align	4
398__vpaes_schedule_transform:
399	movdqa	-16(%ebp),%xmm2
400	movdqa	%xmm2,%xmm1
401	pandn	%xmm0,%xmm1
402	psrld	$4,%xmm1
403	pand	%xmm2,%xmm0
404	movdqa	(%ebx),%xmm2
405.byte	102,15,56,0,208
406	movdqa	16(%ebx),%xmm0
407.byte	102,15,56,0,193
408	pxor	%xmm2,%xmm0
409	ret
410.private_extern	__vpaes_schedule_mangle
411.align	4
412__vpaes_schedule_mangle:
413	movdqa	%xmm0,%xmm4
414	movdqa	128(%ebp),%xmm5
415	testl	%edi,%edi
416	jnz	L014schedule_mangle_dec
417	addl	$16,%edx
418	pxor	336(%ebp),%xmm4
419.byte	102,15,56,0,229
420	movdqa	%xmm4,%xmm3
421.byte	102,15,56,0,229
422	pxor	%xmm4,%xmm3
423.byte	102,15,56,0,229
424	pxor	%xmm4,%xmm3
425	jmp	L015schedule_mangle_both
426.align	4,0x90
427L014schedule_mangle_dec:
428	movdqa	-16(%ebp),%xmm2
429	leal	416(%ebp),%esi
430	movdqa	%xmm2,%xmm1
431	pandn	%xmm4,%xmm1
432	psrld	$4,%xmm1
433	pand	%xmm2,%xmm4
434	movdqa	(%esi),%xmm2
435.byte	102,15,56,0,212
436	movdqa	16(%esi),%xmm3
437.byte	102,15,56,0,217
438	pxor	%xmm2,%xmm3
439.byte	102,15,56,0,221
440	movdqa	32(%esi),%xmm2
441.byte	102,15,56,0,212
442	pxor	%xmm3,%xmm2
443	movdqa	48(%esi),%xmm3
444.byte	102,15,56,0,217
445	pxor	%xmm2,%xmm3
446.byte	102,15,56,0,221
447	movdqa	64(%esi),%xmm2
448.byte	102,15,56,0,212
449	pxor	%xmm3,%xmm2
450	movdqa	80(%esi),%xmm3
451.byte	102,15,56,0,217
452	pxor	%xmm2,%xmm3
453.byte	102,15,56,0,221
454	movdqa	96(%esi),%xmm2
455.byte	102,15,56,0,212
456	pxor	%xmm3,%xmm2
457	movdqa	112(%esi),%xmm3
458.byte	102,15,56,0,217
459	pxor	%xmm2,%xmm3
460	addl	$-16,%edx
461L015schedule_mangle_both:
462	movdqa	256(%ebp,%ecx,1),%xmm1
463.byte	102,15,56,0,217
464	addl	$-16,%ecx
465	andl	$48,%ecx
466	movdqu	%xmm3,(%edx)
467	ret
468.globl	_vpaes_set_encrypt_key
469.private_extern	_vpaes_set_encrypt_key
470.align	4
471_vpaes_set_encrypt_key:
472L_vpaes_set_encrypt_key_begin:
473	pushl	%ebp
474	pushl	%ebx
475	pushl	%esi
476	pushl	%edi
477#ifdef BORINGSSL_DISPATCH_TEST
478	pushl	%ebx
479	pushl	%edx
480	call	L016pic
481L016pic:
482	popl	%ebx
483	leal	_BORINGSSL_function_hit+5-L016pic(%ebx),%ebx
484	movl	$1,%edx
485	movb	%dl,(%ebx)
486	popl	%edx
487	popl	%ebx
488#endif
489	movl	20(%esp),%esi
490	leal	-56(%esp),%ebx
491	movl	24(%esp),%eax
492	andl	$-16,%ebx
493	movl	28(%esp),%edx
494	xchgl	%esp,%ebx
495	movl	%ebx,48(%esp)
496	movl	%eax,%ebx
497	shrl	$5,%ebx
498	addl	$5,%ebx
499	movl	%ebx,240(%edx)
500	movl	$48,%ecx
501	movl	$0,%edi
502	leal	L_vpaes_consts+0x30-L017pic_point,%ebp
503	call	__vpaes_schedule_core
504L017pic_point:
505	movl	48(%esp),%esp
506	xorl	%eax,%eax
507	popl	%edi
508	popl	%esi
509	popl	%ebx
510	popl	%ebp
511	ret
512.globl	_vpaes_set_decrypt_key
513.private_extern	_vpaes_set_decrypt_key
514.align	4
515_vpaes_set_decrypt_key:
516L_vpaes_set_decrypt_key_begin:
517	pushl	%ebp
518	pushl	%ebx
519	pushl	%esi
520	pushl	%edi
521	movl	20(%esp),%esi
522	leal	-56(%esp),%ebx
523	movl	24(%esp),%eax
524	andl	$-16,%ebx
525	movl	28(%esp),%edx
526	xchgl	%esp,%ebx
527	movl	%ebx,48(%esp)
528	movl	%eax,%ebx
529	shrl	$5,%ebx
530	addl	$5,%ebx
531	movl	%ebx,240(%edx)
532	shll	$4,%ebx
533	leal	16(%edx,%ebx,1),%edx
534	movl	$1,%edi
535	movl	%eax,%ecx
536	shrl	$1,%ecx
537	andl	$32,%ecx
538	xorl	$32,%ecx
539	leal	L_vpaes_consts+0x30-L018pic_point,%ebp
540	call	__vpaes_schedule_core
541L018pic_point:
542	movl	48(%esp),%esp
543	xorl	%eax,%eax
544	popl	%edi
545	popl	%esi
546	popl	%ebx
547	popl	%ebp
548	ret
549.globl	_vpaes_encrypt
550.private_extern	_vpaes_encrypt
551.align	4
552_vpaes_encrypt:
553L_vpaes_encrypt_begin:
554	pushl	%ebp
555	pushl	%ebx
556	pushl	%esi
557	pushl	%edi
558#ifdef BORINGSSL_DISPATCH_TEST
559	pushl	%ebx
560	pushl	%edx
561	call	L019pic
562L019pic:
563	popl	%ebx
564	leal	_BORINGSSL_function_hit+4-L019pic(%ebx),%ebx
565	movl	$1,%edx
566	movb	%dl,(%ebx)
567	popl	%edx
568	popl	%ebx
569#endif
570	leal	L_vpaes_consts+0x30-L020pic_point,%ebp
571	call	__vpaes_preheat
572L020pic_point:
573	movl	20(%esp),%esi
574	leal	-56(%esp),%ebx
575	movl	24(%esp),%edi
576	andl	$-16,%ebx
577	movl	28(%esp),%edx
578	xchgl	%esp,%ebx
579	movl	%ebx,48(%esp)
580	movdqu	(%esi),%xmm0
581	call	__vpaes_encrypt_core
582	movdqu	%xmm0,(%edi)
583	movl	48(%esp),%esp
584	popl	%edi
585	popl	%esi
586	popl	%ebx
587	popl	%ebp
588	ret
589.globl	_vpaes_decrypt
590.private_extern	_vpaes_decrypt
591.align	4
592_vpaes_decrypt:
593L_vpaes_decrypt_begin:
594	pushl	%ebp
595	pushl	%ebx
596	pushl	%esi
597	pushl	%edi
598	leal	L_vpaes_consts+0x30-L021pic_point,%ebp
599	call	__vpaes_preheat
600L021pic_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_decrypt_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.globl	_vpaes_cbc_encrypt
618.private_extern	_vpaes_cbc_encrypt
619.align	4
620_vpaes_cbc_encrypt:
621L_vpaes_cbc_encrypt_begin:
622	pushl	%ebp
623	pushl	%ebx
624	pushl	%esi
625	pushl	%edi
626	movl	20(%esp),%esi
627	movl	24(%esp),%edi
628	movl	28(%esp),%eax
629	movl	32(%esp),%edx
630	subl	$16,%eax
631	jc	L022cbc_abort
632	leal	-56(%esp),%ebx
633	movl	36(%esp),%ebp
634	andl	$-16,%ebx
635	movl	40(%esp),%ecx
636	xchgl	%esp,%ebx
637	movdqu	(%ebp),%xmm1
638	subl	%esi,%edi
639	movl	%ebx,48(%esp)
640	movl	%edi,(%esp)
641	movl	%edx,4(%esp)
642	movl	%ebp,8(%esp)
643	movl	%eax,%edi
644	leal	L_vpaes_consts+0x30-L023pic_point,%ebp
645	call	__vpaes_preheat
646L023pic_point:
647	cmpl	$0,%ecx
648	je	L024cbc_dec_loop
649	jmp	L025cbc_enc_loop
650.align	4,0x90
651L025cbc_enc_loop:
652	movdqu	(%esi),%xmm0
653	pxor	%xmm1,%xmm0
654	call	__vpaes_encrypt_core
655	movl	(%esp),%ebx
656	movl	4(%esp),%edx
657	movdqa	%xmm0,%xmm1
658	movdqu	%xmm0,(%ebx,%esi,1)
659	leal	16(%esi),%esi
660	subl	$16,%edi
661	jnc	L025cbc_enc_loop
662	jmp	L026cbc_done
663.align	4,0x90
664L024cbc_dec_loop:
665	movdqu	(%esi),%xmm0
666	movdqa	%xmm1,16(%esp)
667	movdqa	%xmm0,32(%esp)
668	call	__vpaes_decrypt_core
669	movl	(%esp),%ebx
670	movl	4(%esp),%edx
671	pxor	16(%esp),%xmm0
672	movdqa	32(%esp),%xmm1
673	movdqu	%xmm0,(%ebx,%esi,1)
674	leal	16(%esi),%esi
675	subl	$16,%edi
676	jnc	L024cbc_dec_loop
677L026cbc_done:
678	movl	8(%esp),%ebx
679	movl	48(%esp),%esp
680	movdqu	%xmm1,(%ebx)
681L022cbc_abort:
682	popl	%edi
683	popl	%esi
684	popl	%ebx
685	popl	%ebp
686	ret
687#endif  // !defined(OPENSSL_NO_ASM) && defined(__i386__) && defined(__APPLE__)
688#if defined(__ELF__)
689// See https://www.airs.com/blog/archives/518.
690.section .note.GNU-stack,"",%progbits
691#endif
692