xref: /aosp_15_r20/external/boringssl/src/gen/bcm/x86-mont-apple.S (revision 8fb009dc861624b67b6cdb62ea21f0f22d0c584b)
1*8fb009dcSAndroid Build Coastguard Worker// This file is generated from a similarly-named Perl script in the BoringSSL
2*8fb009dcSAndroid Build Coastguard Worker// source tree. Do not edit by hand.
3*8fb009dcSAndroid Build Coastguard Worker
4*8fb009dcSAndroid Build Coastguard Worker#include <openssl/asm_base.h>
5*8fb009dcSAndroid Build Coastguard Worker
6*8fb009dcSAndroid Build Coastguard Worker#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86) && defined(__APPLE__)
7*8fb009dcSAndroid Build Coastguard Worker.text
8*8fb009dcSAndroid Build Coastguard Worker.globl	_bn_mul_mont
9*8fb009dcSAndroid Build Coastguard Worker.private_extern	_bn_mul_mont
10*8fb009dcSAndroid Build Coastguard Worker.align	4
11*8fb009dcSAndroid Build Coastguard Worker_bn_mul_mont:
12*8fb009dcSAndroid Build Coastguard WorkerL_bn_mul_mont_begin:
13*8fb009dcSAndroid Build Coastguard Worker	pushl	%ebp
14*8fb009dcSAndroid Build Coastguard Worker	pushl	%ebx
15*8fb009dcSAndroid Build Coastguard Worker	pushl	%esi
16*8fb009dcSAndroid Build Coastguard Worker	pushl	%edi
17*8fb009dcSAndroid Build Coastguard Worker	xorl	%eax,%eax
18*8fb009dcSAndroid Build Coastguard Worker	movl	40(%esp),%edi
19*8fb009dcSAndroid Build Coastguard Worker	cmpl	$4,%edi
20*8fb009dcSAndroid Build Coastguard Worker	jl	L000just_leave
21*8fb009dcSAndroid Build Coastguard Worker	leal	20(%esp),%esi
22*8fb009dcSAndroid Build Coastguard Worker	leal	24(%esp),%edx
23*8fb009dcSAndroid Build Coastguard Worker	addl	$2,%edi
24*8fb009dcSAndroid Build Coastguard Worker	negl	%edi
25*8fb009dcSAndroid Build Coastguard Worker	leal	-32(%esp,%edi,4),%ebp
26*8fb009dcSAndroid Build Coastguard Worker	negl	%edi
27*8fb009dcSAndroid Build Coastguard Worker	movl	%ebp,%eax
28*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%eax
29*8fb009dcSAndroid Build Coastguard Worker	andl	$2047,%eax
30*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ebp
31*8fb009dcSAndroid Build Coastguard Worker	xorl	%ebp,%edx
32*8fb009dcSAndroid Build Coastguard Worker	andl	$2048,%edx
33*8fb009dcSAndroid Build Coastguard Worker	xorl	$2048,%edx
34*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ebp
35*8fb009dcSAndroid Build Coastguard Worker	andl	$-64,%ebp
36*8fb009dcSAndroid Build Coastguard Worker	movl	%esp,%eax
37*8fb009dcSAndroid Build Coastguard Worker	subl	%ebp,%eax
38*8fb009dcSAndroid Build Coastguard Worker	andl	$-4096,%eax
39*8fb009dcSAndroid Build Coastguard Worker	movl	%esp,%edx
40*8fb009dcSAndroid Build Coastguard Worker	leal	(%ebp,%eax,1),%esp
41*8fb009dcSAndroid Build Coastguard Worker	movl	(%esp),%eax
42*8fb009dcSAndroid Build Coastguard Worker	cmpl	%ebp,%esp
43*8fb009dcSAndroid Build Coastguard Worker	ja	L001page_walk
44*8fb009dcSAndroid Build Coastguard Worker	jmp	L002page_walk_done
45*8fb009dcSAndroid Build Coastguard Worker.align	4,0x90
46*8fb009dcSAndroid Build Coastguard WorkerL001page_walk:
47*8fb009dcSAndroid Build Coastguard Worker	leal	-4096(%esp),%esp
48*8fb009dcSAndroid Build Coastguard Worker	movl	(%esp),%eax
49*8fb009dcSAndroid Build Coastguard Worker	cmpl	%ebp,%esp
50*8fb009dcSAndroid Build Coastguard Worker	ja	L001page_walk
51*8fb009dcSAndroid Build Coastguard WorkerL002page_walk_done:
52*8fb009dcSAndroid Build Coastguard Worker	movl	(%esi),%eax
53*8fb009dcSAndroid Build Coastguard Worker	movl	4(%esi),%ebx
54*8fb009dcSAndroid Build Coastguard Worker	movl	8(%esi),%ecx
55*8fb009dcSAndroid Build Coastguard Worker	movl	12(%esi),%ebp
56*8fb009dcSAndroid Build Coastguard Worker	movl	16(%esi),%esi
57*8fb009dcSAndroid Build Coastguard Worker	movl	(%esi),%esi
58*8fb009dcSAndroid Build Coastguard Worker	movl	%eax,4(%esp)
59*8fb009dcSAndroid Build Coastguard Worker	movl	%ebx,8(%esp)
60*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,12(%esp)
61*8fb009dcSAndroid Build Coastguard Worker	movl	%ebp,16(%esp)
62*8fb009dcSAndroid Build Coastguard Worker	movl	%esi,20(%esp)
63*8fb009dcSAndroid Build Coastguard Worker	leal	-3(%edi),%ebx
64*8fb009dcSAndroid Build Coastguard Worker	movl	%edx,24(%esp)
65*8fb009dcSAndroid Build Coastguard Worker	movl	$-1,%eax
66*8fb009dcSAndroid Build Coastguard Worker	movd	%eax,%mm7
67*8fb009dcSAndroid Build Coastguard Worker	movl	8(%esp),%esi
68*8fb009dcSAndroid Build Coastguard Worker	movl	12(%esp),%edi
69*8fb009dcSAndroid Build Coastguard Worker	movl	16(%esp),%ebp
70*8fb009dcSAndroid Build Coastguard Worker	xorl	%edx,%edx
71*8fb009dcSAndroid Build Coastguard Worker	xorl	%ecx,%ecx
72*8fb009dcSAndroid Build Coastguard Worker	movd	(%edi),%mm4
73*8fb009dcSAndroid Build Coastguard Worker	movd	(%esi),%mm5
74*8fb009dcSAndroid Build Coastguard Worker	movd	(%ebp),%mm3
75*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm4,%mm5
76*8fb009dcSAndroid Build Coastguard Worker	movq	%mm5,%mm2
77*8fb009dcSAndroid Build Coastguard Worker	movq	%mm5,%mm0
78*8fb009dcSAndroid Build Coastguard Worker	pand	%mm7,%mm0
79*8fb009dcSAndroid Build Coastguard Worker	pmuludq	20(%esp),%mm5
80*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm5,%mm3
81*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm0,%mm3
82*8fb009dcSAndroid Build Coastguard Worker	movd	4(%ebp),%mm1
83*8fb009dcSAndroid Build Coastguard Worker	movd	4(%esi),%mm0
84*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm2
85*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm3
86*8fb009dcSAndroid Build Coastguard Worker	incl	%ecx
87*8fb009dcSAndroid Build Coastguard Worker.align	4,0x90
88*8fb009dcSAndroid Build Coastguard WorkerL0031st:
89*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm4,%mm0
90*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm5,%mm1
91*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm0,%mm2
92*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm1,%mm3
93*8fb009dcSAndroid Build Coastguard Worker	movq	%mm2,%mm0
94*8fb009dcSAndroid Build Coastguard Worker	pand	%mm7,%mm0
95*8fb009dcSAndroid Build Coastguard Worker	movd	4(%ebp,%ecx,4),%mm1
96*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm0,%mm3
97*8fb009dcSAndroid Build Coastguard Worker	movd	4(%esi,%ecx,4),%mm0
98*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm2
99*8fb009dcSAndroid Build Coastguard Worker	movd	%mm3,28(%esp,%ecx,4)
100*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm3
101*8fb009dcSAndroid Build Coastguard Worker	leal	1(%ecx),%ecx
102*8fb009dcSAndroid Build Coastguard Worker	cmpl	%ebx,%ecx
103*8fb009dcSAndroid Build Coastguard Worker	jl	L0031st
104*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm4,%mm0
105*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm5,%mm1
106*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm0,%mm2
107*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm1,%mm3
108*8fb009dcSAndroid Build Coastguard Worker	movq	%mm2,%mm0
109*8fb009dcSAndroid Build Coastguard Worker	pand	%mm7,%mm0
110*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm0,%mm3
111*8fb009dcSAndroid Build Coastguard Worker	movd	%mm3,28(%esp,%ecx,4)
112*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm2
113*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm3
114*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm2,%mm3
115*8fb009dcSAndroid Build Coastguard Worker	movq	%mm3,32(%esp,%ebx,4)
116*8fb009dcSAndroid Build Coastguard Worker	incl	%edx
117*8fb009dcSAndroid Build Coastguard WorkerL004outer:
118*8fb009dcSAndroid Build Coastguard Worker	xorl	%ecx,%ecx
119*8fb009dcSAndroid Build Coastguard Worker	movd	(%edi,%edx,4),%mm4
120*8fb009dcSAndroid Build Coastguard Worker	movd	(%esi),%mm5
121*8fb009dcSAndroid Build Coastguard Worker	movd	32(%esp),%mm6
122*8fb009dcSAndroid Build Coastguard Worker	movd	(%ebp),%mm3
123*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm4,%mm5
124*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm6,%mm5
125*8fb009dcSAndroid Build Coastguard Worker	movq	%mm5,%mm0
126*8fb009dcSAndroid Build Coastguard Worker	movq	%mm5,%mm2
127*8fb009dcSAndroid Build Coastguard Worker	pand	%mm7,%mm0
128*8fb009dcSAndroid Build Coastguard Worker	pmuludq	20(%esp),%mm5
129*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm5,%mm3
130*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm0,%mm3
131*8fb009dcSAndroid Build Coastguard Worker	movd	36(%esp),%mm6
132*8fb009dcSAndroid Build Coastguard Worker	movd	4(%ebp),%mm1
133*8fb009dcSAndroid Build Coastguard Worker	movd	4(%esi),%mm0
134*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm2
135*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm3
136*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm6,%mm2
137*8fb009dcSAndroid Build Coastguard Worker	incl	%ecx
138*8fb009dcSAndroid Build Coastguard Worker	decl	%ebx
139*8fb009dcSAndroid Build Coastguard WorkerL005inner:
140*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm4,%mm0
141*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm5,%mm1
142*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm0,%mm2
143*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm1,%mm3
144*8fb009dcSAndroid Build Coastguard Worker	movq	%mm2,%mm0
145*8fb009dcSAndroid Build Coastguard Worker	movd	36(%esp,%ecx,4),%mm6
146*8fb009dcSAndroid Build Coastguard Worker	pand	%mm7,%mm0
147*8fb009dcSAndroid Build Coastguard Worker	movd	4(%ebp,%ecx,4),%mm1
148*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm0,%mm3
149*8fb009dcSAndroid Build Coastguard Worker	movd	4(%esi,%ecx,4),%mm0
150*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm2
151*8fb009dcSAndroid Build Coastguard Worker	movd	%mm3,28(%esp,%ecx,4)
152*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm3
153*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm6,%mm2
154*8fb009dcSAndroid Build Coastguard Worker	decl	%ebx
155*8fb009dcSAndroid Build Coastguard Worker	leal	1(%ecx),%ecx
156*8fb009dcSAndroid Build Coastguard Worker	jnz	L005inner
157*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,%ebx
158*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm4,%mm0
159*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm5,%mm1
160*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm0,%mm2
161*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm1,%mm3
162*8fb009dcSAndroid Build Coastguard Worker	movq	%mm2,%mm0
163*8fb009dcSAndroid Build Coastguard Worker	pand	%mm7,%mm0
164*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm0,%mm3
165*8fb009dcSAndroid Build Coastguard Worker	movd	%mm3,28(%esp,%ecx,4)
166*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm2
167*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm3
168*8fb009dcSAndroid Build Coastguard Worker	movd	36(%esp,%ebx,4),%mm6
169*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm2,%mm3
170*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm6,%mm3
171*8fb009dcSAndroid Build Coastguard Worker	movq	%mm3,32(%esp,%ebx,4)
172*8fb009dcSAndroid Build Coastguard Worker	leal	1(%edx),%edx
173*8fb009dcSAndroid Build Coastguard Worker	cmpl	%ebx,%edx
174*8fb009dcSAndroid Build Coastguard Worker	jle	L004outer
175*8fb009dcSAndroid Build Coastguard Worker	emms
176*8fb009dcSAndroid Build Coastguard Worker	jmp	L006common_tail
177*8fb009dcSAndroid Build Coastguard Worker.align	4,0x90
178*8fb009dcSAndroid Build Coastguard WorkerL006common_tail:
179*8fb009dcSAndroid Build Coastguard Worker	movl	16(%esp),%ebp
180*8fb009dcSAndroid Build Coastguard Worker	movl	4(%esp),%edi
181*8fb009dcSAndroid Build Coastguard Worker	leal	32(%esp),%esi
182*8fb009dcSAndroid Build Coastguard Worker	movl	(%esi),%eax
183*8fb009dcSAndroid Build Coastguard Worker	movl	%ebx,%ecx
184*8fb009dcSAndroid Build Coastguard Worker	xorl	%edx,%edx
185*8fb009dcSAndroid Build Coastguard Worker.align	4,0x90
186*8fb009dcSAndroid Build Coastguard WorkerL007sub:
187*8fb009dcSAndroid Build Coastguard Worker	sbbl	(%ebp,%edx,4),%eax
188*8fb009dcSAndroid Build Coastguard Worker	movl	%eax,(%edi,%edx,4)
189*8fb009dcSAndroid Build Coastguard Worker	decl	%ecx
190*8fb009dcSAndroid Build Coastguard Worker	movl	4(%esi,%edx,4),%eax
191*8fb009dcSAndroid Build Coastguard Worker	leal	1(%edx),%edx
192*8fb009dcSAndroid Build Coastguard Worker	jge	L007sub
193*8fb009dcSAndroid Build Coastguard Worker	sbbl	$0,%eax
194*8fb009dcSAndroid Build Coastguard Worker	movl	$-1,%edx
195*8fb009dcSAndroid Build Coastguard Worker	xorl	%eax,%edx
196*8fb009dcSAndroid Build Coastguard Worker	jmp	L008copy
197*8fb009dcSAndroid Build Coastguard Worker.align	4,0x90
198*8fb009dcSAndroid Build Coastguard WorkerL008copy:
199*8fb009dcSAndroid Build Coastguard Worker	movl	32(%esp,%ebx,4),%esi
200*8fb009dcSAndroid Build Coastguard Worker	movl	(%edi,%ebx,4),%ebp
201*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,32(%esp,%ebx,4)
202*8fb009dcSAndroid Build Coastguard Worker	andl	%eax,%esi
203*8fb009dcSAndroid Build Coastguard Worker	andl	%edx,%ebp
204*8fb009dcSAndroid Build Coastguard Worker	orl	%esi,%ebp
205*8fb009dcSAndroid Build Coastguard Worker	movl	%ebp,(%edi,%ebx,4)
206*8fb009dcSAndroid Build Coastguard Worker	decl	%ebx
207*8fb009dcSAndroid Build Coastguard Worker	jge	L008copy
208*8fb009dcSAndroid Build Coastguard Worker	movl	24(%esp),%esp
209*8fb009dcSAndroid Build Coastguard Worker	movl	$1,%eax
210*8fb009dcSAndroid Build Coastguard WorkerL000just_leave:
211*8fb009dcSAndroid Build Coastguard Worker	popl	%edi
212*8fb009dcSAndroid Build Coastguard Worker	popl	%esi
213*8fb009dcSAndroid Build Coastguard Worker	popl	%ebx
214*8fb009dcSAndroid Build Coastguard Worker	popl	%ebp
215*8fb009dcSAndroid Build Coastguard Worker	ret
216*8fb009dcSAndroid Build Coastguard Worker.byte	77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
217*8fb009dcSAndroid Build Coastguard Worker.byte	112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
218*8fb009dcSAndroid Build Coastguard Worker.byte	54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
219*8fb009dcSAndroid Build Coastguard Worker.byte	32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
220*8fb009dcSAndroid Build Coastguard Worker.byte	111,114,103,62,0
221*8fb009dcSAndroid Build Coastguard Worker#endif  // !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86) && defined(__APPLE__)
222