xref: /aosp_15_r20/external/boringssl/src/gen/bcm/x86-mont-win.asm (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%ifdef BORINGSSL_PREFIX
5*8fb009dcSAndroid Build Coastguard Worker%include "boringssl_prefix_symbols_nasm.inc"
6*8fb009dcSAndroid Build Coastguard Worker%endif
7*8fb009dcSAndroid Build Coastguard Worker%ifidn __OUTPUT_FORMAT__, win32
8*8fb009dcSAndroid Build Coastguard Worker%ifidn __OUTPUT_FORMAT__,obj
9*8fb009dcSAndroid Build Coastguard Workersection	code	use32 class=code align=64
10*8fb009dcSAndroid Build Coastguard Worker%elifidn __OUTPUT_FORMAT__,win32
11*8fb009dcSAndroid Build Coastguard Worker$@feat.00 equ 1
12*8fb009dcSAndroid Build Coastguard Workersection	.text	code align=64
13*8fb009dcSAndroid Build Coastguard Worker%else
14*8fb009dcSAndroid Build Coastguard Workersection	.text	code
15*8fb009dcSAndroid Build Coastguard Worker%endif
16*8fb009dcSAndroid Build Coastguard Workerglobal	_bn_mul_mont
17*8fb009dcSAndroid Build Coastguard Workeralign	16
18*8fb009dcSAndroid Build Coastguard Worker_bn_mul_mont:
19*8fb009dcSAndroid Build Coastguard WorkerL$_bn_mul_mont_begin:
20*8fb009dcSAndroid Build Coastguard Worker	push	ebp
21*8fb009dcSAndroid Build Coastguard Worker	push	ebx
22*8fb009dcSAndroid Build Coastguard Worker	push	esi
23*8fb009dcSAndroid Build Coastguard Worker	push	edi
24*8fb009dcSAndroid Build Coastguard Worker	xor	eax,eax
25*8fb009dcSAndroid Build Coastguard Worker	mov	edi,DWORD [40+esp]
26*8fb009dcSAndroid Build Coastguard Worker	cmp	edi,4
27*8fb009dcSAndroid Build Coastguard Worker	jl	NEAR L$000just_leave
28*8fb009dcSAndroid Build Coastguard Worker	lea	esi,[20+esp]
29*8fb009dcSAndroid Build Coastguard Worker	lea	edx,[24+esp]
30*8fb009dcSAndroid Build Coastguard Worker	add	edi,2
31*8fb009dcSAndroid Build Coastguard Worker	neg	edi
32*8fb009dcSAndroid Build Coastguard Worker	lea	ebp,[edi*4+esp-32]
33*8fb009dcSAndroid Build Coastguard Worker	neg	edi
34*8fb009dcSAndroid Build Coastguard Worker	mov	eax,ebp
35*8fb009dcSAndroid Build Coastguard Worker	sub	eax,edx
36*8fb009dcSAndroid Build Coastguard Worker	and	eax,2047
37*8fb009dcSAndroid Build Coastguard Worker	sub	ebp,eax
38*8fb009dcSAndroid Build Coastguard Worker	xor	edx,ebp
39*8fb009dcSAndroid Build Coastguard Worker	and	edx,2048
40*8fb009dcSAndroid Build Coastguard Worker	xor	edx,2048
41*8fb009dcSAndroid Build Coastguard Worker	sub	ebp,edx
42*8fb009dcSAndroid Build Coastguard Worker	and	ebp,-64
43*8fb009dcSAndroid Build Coastguard Worker	mov	eax,esp
44*8fb009dcSAndroid Build Coastguard Worker	sub	eax,ebp
45*8fb009dcSAndroid Build Coastguard Worker	and	eax,-4096
46*8fb009dcSAndroid Build Coastguard Worker	mov	edx,esp
47*8fb009dcSAndroid Build Coastguard Worker	lea	esp,[eax*1+ebp]
48*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esp]
49*8fb009dcSAndroid Build Coastguard Worker	cmp	esp,ebp
50*8fb009dcSAndroid Build Coastguard Worker	ja	NEAR L$001page_walk
51*8fb009dcSAndroid Build Coastguard Worker	jmp	NEAR L$002page_walk_done
52*8fb009dcSAndroid Build Coastguard Workeralign	16
53*8fb009dcSAndroid Build Coastguard WorkerL$001page_walk:
54*8fb009dcSAndroid Build Coastguard Worker	lea	esp,[esp-4096]
55*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esp]
56*8fb009dcSAndroid Build Coastguard Worker	cmp	esp,ebp
57*8fb009dcSAndroid Build Coastguard Worker	ja	NEAR L$001page_walk
58*8fb009dcSAndroid Build Coastguard WorkerL$002page_walk_done:
59*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
60*8fb009dcSAndroid Build Coastguard Worker	mov	ebx,DWORD [4+esi]
61*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [8+esi]
62*8fb009dcSAndroid Build Coastguard Worker	mov	ebp,DWORD [12+esi]
63*8fb009dcSAndroid Build Coastguard Worker	mov	esi,DWORD [16+esi]
64*8fb009dcSAndroid Build Coastguard Worker	mov	esi,DWORD [esi]
65*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [4+esp],eax
66*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [8+esp],ebx
67*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [12+esp],ecx
68*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [16+esp],ebp
69*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [20+esp],esi
70*8fb009dcSAndroid Build Coastguard Worker	lea	ebx,[edi-3]
71*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [24+esp],edx
72*8fb009dcSAndroid Build Coastguard Worker	mov	eax,-1
73*8fb009dcSAndroid Build Coastguard Worker	movd	mm7,eax
74*8fb009dcSAndroid Build Coastguard Worker	mov	esi,DWORD [8+esp]
75*8fb009dcSAndroid Build Coastguard Worker	mov	edi,DWORD [12+esp]
76*8fb009dcSAndroid Build Coastguard Worker	mov	ebp,DWORD [16+esp]
77*8fb009dcSAndroid Build Coastguard Worker	xor	edx,edx
78*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
79*8fb009dcSAndroid Build Coastguard Worker	movd	mm4,DWORD [edi]
80*8fb009dcSAndroid Build Coastguard Worker	movd	mm5,DWORD [esi]
81*8fb009dcSAndroid Build Coastguard Worker	movd	mm3,DWORD [ebp]
82*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm5,mm4
83*8fb009dcSAndroid Build Coastguard Worker	movq	mm2,mm5
84*8fb009dcSAndroid Build Coastguard Worker	movq	mm0,mm5
85*8fb009dcSAndroid Build Coastguard Worker	pand	mm0,mm7
86*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm5,[20+esp]
87*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm3,mm5
88*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm0
89*8fb009dcSAndroid Build Coastguard Worker	movd	mm1,DWORD [4+ebp]
90*8fb009dcSAndroid Build Coastguard Worker	movd	mm0,DWORD [4+esi]
91*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm2,32
92*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm3,32
93*8fb009dcSAndroid Build Coastguard Worker	inc	ecx
94*8fb009dcSAndroid Build Coastguard Workeralign	16
95*8fb009dcSAndroid Build Coastguard WorkerL$0031st:
96*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm0,mm4
97*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm1,mm5
98*8fb009dcSAndroid Build Coastguard Worker	paddq	mm2,mm0
99*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm1
100*8fb009dcSAndroid Build Coastguard Worker	movq	mm0,mm2
101*8fb009dcSAndroid Build Coastguard Worker	pand	mm0,mm7
102*8fb009dcSAndroid Build Coastguard Worker	movd	mm1,DWORD [4+ecx*4+ebp]
103*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm0
104*8fb009dcSAndroid Build Coastguard Worker	movd	mm0,DWORD [4+ecx*4+esi]
105*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm2,32
106*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [28+ecx*4+esp],mm3
107*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm3,32
108*8fb009dcSAndroid Build Coastguard Worker	lea	ecx,[1+ecx]
109*8fb009dcSAndroid Build Coastguard Worker	cmp	ecx,ebx
110*8fb009dcSAndroid Build Coastguard Worker	jl	NEAR L$0031st
111*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm0,mm4
112*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm1,mm5
113*8fb009dcSAndroid Build Coastguard Worker	paddq	mm2,mm0
114*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm1
115*8fb009dcSAndroid Build Coastguard Worker	movq	mm0,mm2
116*8fb009dcSAndroid Build Coastguard Worker	pand	mm0,mm7
117*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm0
118*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [28+ecx*4+esp],mm3
119*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm2,32
120*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm3,32
121*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm2
122*8fb009dcSAndroid Build Coastguard Worker	movq	[32+ebx*4+esp],mm3
123*8fb009dcSAndroid Build Coastguard Worker	inc	edx
124*8fb009dcSAndroid Build Coastguard WorkerL$004outer:
125*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
126*8fb009dcSAndroid Build Coastguard Worker	movd	mm4,DWORD [edx*4+edi]
127*8fb009dcSAndroid Build Coastguard Worker	movd	mm5,DWORD [esi]
128*8fb009dcSAndroid Build Coastguard Worker	movd	mm6,DWORD [32+esp]
129*8fb009dcSAndroid Build Coastguard Worker	movd	mm3,DWORD [ebp]
130*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm5,mm4
131*8fb009dcSAndroid Build Coastguard Worker	paddq	mm5,mm6
132*8fb009dcSAndroid Build Coastguard Worker	movq	mm0,mm5
133*8fb009dcSAndroid Build Coastguard Worker	movq	mm2,mm5
134*8fb009dcSAndroid Build Coastguard Worker	pand	mm0,mm7
135*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm5,[20+esp]
136*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm3,mm5
137*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm0
138*8fb009dcSAndroid Build Coastguard Worker	movd	mm6,DWORD [36+esp]
139*8fb009dcSAndroid Build Coastguard Worker	movd	mm1,DWORD [4+ebp]
140*8fb009dcSAndroid Build Coastguard Worker	movd	mm0,DWORD [4+esi]
141*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm2,32
142*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm3,32
143*8fb009dcSAndroid Build Coastguard Worker	paddq	mm2,mm6
144*8fb009dcSAndroid Build Coastguard Worker	inc	ecx
145*8fb009dcSAndroid Build Coastguard Worker	dec	ebx
146*8fb009dcSAndroid Build Coastguard WorkerL$005inner:
147*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm0,mm4
148*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm1,mm5
149*8fb009dcSAndroid Build Coastguard Worker	paddq	mm2,mm0
150*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm1
151*8fb009dcSAndroid Build Coastguard Worker	movq	mm0,mm2
152*8fb009dcSAndroid Build Coastguard Worker	movd	mm6,DWORD [36+ecx*4+esp]
153*8fb009dcSAndroid Build Coastguard Worker	pand	mm0,mm7
154*8fb009dcSAndroid Build Coastguard Worker	movd	mm1,DWORD [4+ecx*4+ebp]
155*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm0
156*8fb009dcSAndroid Build Coastguard Worker	movd	mm0,DWORD [4+ecx*4+esi]
157*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm2,32
158*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [28+ecx*4+esp],mm3
159*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm3,32
160*8fb009dcSAndroid Build Coastguard Worker	paddq	mm2,mm6
161*8fb009dcSAndroid Build Coastguard Worker	dec	ebx
162*8fb009dcSAndroid Build Coastguard Worker	lea	ecx,[1+ecx]
163*8fb009dcSAndroid Build Coastguard Worker	jnz	NEAR L$005inner
164*8fb009dcSAndroid Build Coastguard Worker	mov	ebx,ecx
165*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm0,mm4
166*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm1,mm5
167*8fb009dcSAndroid Build Coastguard Worker	paddq	mm2,mm0
168*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm1
169*8fb009dcSAndroid Build Coastguard Worker	movq	mm0,mm2
170*8fb009dcSAndroid Build Coastguard Worker	pand	mm0,mm7
171*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm0
172*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [28+ecx*4+esp],mm3
173*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm2,32
174*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm3,32
175*8fb009dcSAndroid Build Coastguard Worker	movd	mm6,DWORD [36+ebx*4+esp]
176*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm2
177*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm6
178*8fb009dcSAndroid Build Coastguard Worker	movq	[32+ebx*4+esp],mm3
179*8fb009dcSAndroid Build Coastguard Worker	lea	edx,[1+edx]
180*8fb009dcSAndroid Build Coastguard Worker	cmp	edx,ebx
181*8fb009dcSAndroid Build Coastguard Worker	jle	NEAR L$004outer
182*8fb009dcSAndroid Build Coastguard Worker	emms
183*8fb009dcSAndroid Build Coastguard Worker	jmp	NEAR L$006common_tail
184*8fb009dcSAndroid Build Coastguard Workeralign	16
185*8fb009dcSAndroid Build Coastguard WorkerL$006common_tail:
186*8fb009dcSAndroid Build Coastguard Worker	mov	ebp,DWORD [16+esp]
187*8fb009dcSAndroid Build Coastguard Worker	mov	edi,DWORD [4+esp]
188*8fb009dcSAndroid Build Coastguard Worker	lea	esi,[32+esp]
189*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
190*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,ebx
191*8fb009dcSAndroid Build Coastguard Worker	xor	edx,edx
192*8fb009dcSAndroid Build Coastguard Workeralign	16
193*8fb009dcSAndroid Build Coastguard WorkerL$007sub:
194*8fb009dcSAndroid Build Coastguard Worker	sbb	eax,DWORD [edx*4+ebp]
195*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [edx*4+edi],eax
196*8fb009dcSAndroid Build Coastguard Worker	dec	ecx
197*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+edx*4+esi]
198*8fb009dcSAndroid Build Coastguard Worker	lea	edx,[1+edx]
199*8fb009dcSAndroid Build Coastguard Worker	jge	NEAR L$007sub
200*8fb009dcSAndroid Build Coastguard Worker	sbb	eax,0
201*8fb009dcSAndroid Build Coastguard Worker	mov	edx,-1
202*8fb009dcSAndroid Build Coastguard Worker	xor	edx,eax
203*8fb009dcSAndroid Build Coastguard Worker	jmp	NEAR L$008copy
204*8fb009dcSAndroid Build Coastguard Workeralign	16
205*8fb009dcSAndroid Build Coastguard WorkerL$008copy:
206*8fb009dcSAndroid Build Coastguard Worker	mov	esi,DWORD [32+ebx*4+esp]
207*8fb009dcSAndroid Build Coastguard Worker	mov	ebp,DWORD [ebx*4+edi]
208*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [32+ebx*4+esp],ecx
209*8fb009dcSAndroid Build Coastguard Worker	and	esi,eax
210*8fb009dcSAndroid Build Coastguard Worker	and	ebp,edx
211*8fb009dcSAndroid Build Coastguard Worker	or	ebp,esi
212*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [ebx*4+edi],ebp
213*8fb009dcSAndroid Build Coastguard Worker	dec	ebx
214*8fb009dcSAndroid Build Coastguard Worker	jge	NEAR L$008copy
215*8fb009dcSAndroid Build Coastguard Worker	mov	esp,DWORD [24+esp]
216*8fb009dcSAndroid Build Coastguard Worker	mov	eax,1
217*8fb009dcSAndroid Build Coastguard WorkerL$000just_leave:
218*8fb009dcSAndroid Build Coastguard Worker	pop	edi
219*8fb009dcSAndroid Build Coastguard Worker	pop	esi
220*8fb009dcSAndroid Build Coastguard Worker	pop	ebx
221*8fb009dcSAndroid Build Coastguard Worker	pop	ebp
222*8fb009dcSAndroid Build Coastguard Worker	ret
223*8fb009dcSAndroid Build Coastguard Workerdb	77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
224*8fb009dcSAndroid Build Coastguard Workerdb	112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
225*8fb009dcSAndroid Build Coastguard Workerdb	54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
226*8fb009dcSAndroid Build Coastguard Workerdb	32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
227*8fb009dcSAndroid Build Coastguard Workerdb	111,114,103,62,0
228*8fb009dcSAndroid Build Coastguard Worker%else
229*8fb009dcSAndroid Build Coastguard Worker; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
230*8fb009dcSAndroid Build Coastguard Workerret
231*8fb009dcSAndroid Build Coastguard Worker%endif
232