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