xref: /aosp_15_r20/external/boringssl/src/gen/bcm/bn-586-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_add_words
17*8fb009dcSAndroid Build Coastguard Workeralign	16
18*8fb009dcSAndroid Build Coastguard Worker_bn_mul_add_words:
19*8fb009dcSAndroid Build Coastguard WorkerL$_bn_mul_add_words_begin:
20*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esp]
21*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+esp]
22*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [12+esp]
23*8fb009dcSAndroid Build Coastguard Worker	movd	mm0,DWORD [16+esp]
24*8fb009dcSAndroid Build Coastguard Worker	pxor	mm1,mm1
25*8fb009dcSAndroid Build Coastguard Worker	jmp	NEAR L$000maw_sse2_entry
26*8fb009dcSAndroid Build Coastguard Workeralign	16
27*8fb009dcSAndroid Build Coastguard WorkerL$001maw_sse2_unrolled:
28*8fb009dcSAndroid Build Coastguard Worker	movd	mm3,DWORD [eax]
29*8fb009dcSAndroid Build Coastguard Worker	paddq	mm1,mm3
30*8fb009dcSAndroid Build Coastguard Worker	movd	mm2,DWORD [edx]
31*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm2,mm0
32*8fb009dcSAndroid Build Coastguard Worker	movd	mm4,DWORD [4+edx]
33*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm4,mm0
34*8fb009dcSAndroid Build Coastguard Worker	movd	mm6,DWORD [8+edx]
35*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm6,mm0
36*8fb009dcSAndroid Build Coastguard Worker	movd	mm7,DWORD [12+edx]
37*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm7,mm0
38*8fb009dcSAndroid Build Coastguard Worker	paddq	mm1,mm2
39*8fb009dcSAndroid Build Coastguard Worker	movd	mm3,DWORD [4+eax]
40*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm4
41*8fb009dcSAndroid Build Coastguard Worker	movd	mm5,DWORD [8+eax]
42*8fb009dcSAndroid Build Coastguard Worker	paddq	mm5,mm6
43*8fb009dcSAndroid Build Coastguard Worker	movd	mm4,DWORD [12+eax]
44*8fb009dcSAndroid Build Coastguard Worker	paddq	mm7,mm4
45*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [eax],mm1
46*8fb009dcSAndroid Build Coastguard Worker	movd	mm2,DWORD [16+edx]
47*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm2,mm0
48*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm1,32
49*8fb009dcSAndroid Build Coastguard Worker	movd	mm4,DWORD [20+edx]
50*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm4,mm0
51*8fb009dcSAndroid Build Coastguard Worker	paddq	mm1,mm3
52*8fb009dcSAndroid Build Coastguard Worker	movd	mm6,DWORD [24+edx]
53*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm6,mm0
54*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [4+eax],mm1
55*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm1,32
56*8fb009dcSAndroid Build Coastguard Worker	movd	mm3,DWORD [28+edx]
57*8fb009dcSAndroid Build Coastguard Worker	add	edx,32
58*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm3,mm0
59*8fb009dcSAndroid Build Coastguard Worker	paddq	mm1,mm5
60*8fb009dcSAndroid Build Coastguard Worker	movd	mm5,DWORD [16+eax]
61*8fb009dcSAndroid Build Coastguard Worker	paddq	mm2,mm5
62*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [8+eax],mm1
63*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm1,32
64*8fb009dcSAndroid Build Coastguard Worker	paddq	mm1,mm7
65*8fb009dcSAndroid Build Coastguard Worker	movd	mm5,DWORD [20+eax]
66*8fb009dcSAndroid Build Coastguard Worker	paddq	mm4,mm5
67*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [12+eax],mm1
68*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm1,32
69*8fb009dcSAndroid Build Coastguard Worker	paddq	mm1,mm2
70*8fb009dcSAndroid Build Coastguard Worker	movd	mm5,DWORD [24+eax]
71*8fb009dcSAndroid Build Coastguard Worker	paddq	mm6,mm5
72*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [16+eax],mm1
73*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm1,32
74*8fb009dcSAndroid Build Coastguard Worker	paddq	mm1,mm4
75*8fb009dcSAndroid Build Coastguard Worker	movd	mm5,DWORD [28+eax]
76*8fb009dcSAndroid Build Coastguard Worker	paddq	mm3,mm5
77*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [20+eax],mm1
78*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm1,32
79*8fb009dcSAndroid Build Coastguard Worker	paddq	mm1,mm6
80*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [24+eax],mm1
81*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm1,32
82*8fb009dcSAndroid Build Coastguard Worker	paddq	mm1,mm3
83*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [28+eax],mm1
84*8fb009dcSAndroid Build Coastguard Worker	lea	eax,[32+eax]
85*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm1,32
86*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,8
87*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$002maw_sse2_exit
88*8fb009dcSAndroid Build Coastguard WorkerL$000maw_sse2_entry:
89*8fb009dcSAndroid Build Coastguard Worker	test	ecx,4294967288
90*8fb009dcSAndroid Build Coastguard Worker	jnz	NEAR L$001maw_sse2_unrolled
91*8fb009dcSAndroid Build Coastguard Workeralign	4
92*8fb009dcSAndroid Build Coastguard WorkerL$003maw_sse2_loop:
93*8fb009dcSAndroid Build Coastguard Worker	movd	mm2,DWORD [edx]
94*8fb009dcSAndroid Build Coastguard Worker	movd	mm3,DWORD [eax]
95*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm2,mm0
96*8fb009dcSAndroid Build Coastguard Worker	lea	edx,[4+edx]
97*8fb009dcSAndroid Build Coastguard Worker	paddq	mm1,mm3
98*8fb009dcSAndroid Build Coastguard Worker	paddq	mm1,mm2
99*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [eax],mm1
100*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,1
101*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm1,32
102*8fb009dcSAndroid Build Coastguard Worker	lea	eax,[4+eax]
103*8fb009dcSAndroid Build Coastguard Worker	jnz	NEAR L$003maw_sse2_loop
104*8fb009dcSAndroid Build Coastguard WorkerL$002maw_sse2_exit:
105*8fb009dcSAndroid Build Coastguard Worker	movd	eax,mm1
106*8fb009dcSAndroid Build Coastguard Worker	emms
107*8fb009dcSAndroid Build Coastguard Worker	ret
108*8fb009dcSAndroid Build Coastguard Worker	pop	edi
109*8fb009dcSAndroid Build Coastguard Worker	pop	esi
110*8fb009dcSAndroid Build Coastguard Worker	pop	ebx
111*8fb009dcSAndroid Build Coastguard Worker	pop	ebp
112*8fb009dcSAndroid Build Coastguard Worker	ret
113*8fb009dcSAndroid Build Coastguard Workerglobal	_bn_mul_words
114*8fb009dcSAndroid Build Coastguard Workeralign	16
115*8fb009dcSAndroid Build Coastguard Worker_bn_mul_words:
116*8fb009dcSAndroid Build Coastguard WorkerL$_bn_mul_words_begin:
117*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esp]
118*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+esp]
119*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [12+esp]
120*8fb009dcSAndroid Build Coastguard Worker	movd	mm0,DWORD [16+esp]
121*8fb009dcSAndroid Build Coastguard Worker	pxor	mm1,mm1
122*8fb009dcSAndroid Build Coastguard Workeralign	16
123*8fb009dcSAndroid Build Coastguard WorkerL$004mw_sse2_loop:
124*8fb009dcSAndroid Build Coastguard Worker	movd	mm2,DWORD [edx]
125*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm2,mm0
126*8fb009dcSAndroid Build Coastguard Worker	lea	edx,[4+edx]
127*8fb009dcSAndroid Build Coastguard Worker	paddq	mm1,mm2
128*8fb009dcSAndroid Build Coastguard Worker	movd	DWORD [eax],mm1
129*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,1
130*8fb009dcSAndroid Build Coastguard Worker	psrlq	mm1,32
131*8fb009dcSAndroid Build Coastguard Worker	lea	eax,[4+eax]
132*8fb009dcSAndroid Build Coastguard Worker	jnz	NEAR L$004mw_sse2_loop
133*8fb009dcSAndroid Build Coastguard Worker	movd	eax,mm1
134*8fb009dcSAndroid Build Coastguard Worker	emms
135*8fb009dcSAndroid Build Coastguard Worker	ret
136*8fb009dcSAndroid Build Coastguard Worker	pop	edi
137*8fb009dcSAndroid Build Coastguard Worker	pop	esi
138*8fb009dcSAndroid Build Coastguard Worker	pop	ebx
139*8fb009dcSAndroid Build Coastguard Worker	pop	ebp
140*8fb009dcSAndroid Build Coastguard Worker	ret
141*8fb009dcSAndroid Build Coastguard Workerglobal	_bn_sqr_words
142*8fb009dcSAndroid Build Coastguard Workeralign	16
143*8fb009dcSAndroid Build Coastguard Worker_bn_sqr_words:
144*8fb009dcSAndroid Build Coastguard WorkerL$_bn_sqr_words_begin:
145*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esp]
146*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+esp]
147*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [12+esp]
148*8fb009dcSAndroid Build Coastguard Workeralign	16
149*8fb009dcSAndroid Build Coastguard WorkerL$005sqr_sse2_loop:
150*8fb009dcSAndroid Build Coastguard Worker	movd	mm0,DWORD [edx]
151*8fb009dcSAndroid Build Coastguard Worker	pmuludq	mm0,mm0
152*8fb009dcSAndroid Build Coastguard Worker	lea	edx,[4+edx]
153*8fb009dcSAndroid Build Coastguard Worker	movq	[eax],mm0
154*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,1
155*8fb009dcSAndroid Build Coastguard Worker	lea	eax,[8+eax]
156*8fb009dcSAndroid Build Coastguard Worker	jnz	NEAR L$005sqr_sse2_loop
157*8fb009dcSAndroid Build Coastguard Worker	emms
158*8fb009dcSAndroid Build Coastguard Worker	ret
159*8fb009dcSAndroid Build Coastguard Worker	pop	edi
160*8fb009dcSAndroid Build Coastguard Worker	pop	esi
161*8fb009dcSAndroid Build Coastguard Worker	pop	ebx
162*8fb009dcSAndroid Build Coastguard Worker	pop	ebp
163*8fb009dcSAndroid Build Coastguard Worker	ret
164*8fb009dcSAndroid Build Coastguard Workerglobal	_bn_div_words
165*8fb009dcSAndroid Build Coastguard Workeralign	16
166*8fb009dcSAndroid Build Coastguard Worker_bn_div_words:
167*8fb009dcSAndroid Build Coastguard WorkerL$_bn_div_words_begin:
168*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+esp]
169*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esp]
170*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [12+esp]
171*8fb009dcSAndroid Build Coastguard Worker	div	ecx
172*8fb009dcSAndroid Build Coastguard Worker	ret
173*8fb009dcSAndroid Build Coastguard Workerglobal	_bn_add_words
174*8fb009dcSAndroid Build Coastguard Workeralign	16
175*8fb009dcSAndroid Build Coastguard Worker_bn_add_words:
176*8fb009dcSAndroid Build Coastguard WorkerL$_bn_add_words_begin:
177*8fb009dcSAndroid Build Coastguard Worker	push	ebp
178*8fb009dcSAndroid Build Coastguard Worker	push	ebx
179*8fb009dcSAndroid Build Coastguard Worker	push	esi
180*8fb009dcSAndroid Build Coastguard Worker	push	edi
181*8fb009dcSAndroid Build Coastguard Worker	;
182*8fb009dcSAndroid Build Coastguard Worker	mov	ebx,DWORD [20+esp]
183*8fb009dcSAndroid Build Coastguard Worker	mov	esi,DWORD [24+esp]
184*8fb009dcSAndroid Build Coastguard Worker	mov	edi,DWORD [28+esp]
185*8fb009dcSAndroid Build Coastguard Worker	mov	ebp,DWORD [32+esp]
186*8fb009dcSAndroid Build Coastguard Worker	xor	eax,eax
187*8fb009dcSAndroid Build Coastguard Worker	and	ebp,4294967288
188*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$006aw_finish
189*8fb009dcSAndroid Build Coastguard WorkerL$007aw_loop:
190*8fb009dcSAndroid Build Coastguard Worker	; Round 0
191*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [esi]
192*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
193*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
194*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
195*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
196*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
197*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
198*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [ebx],ecx
199*8fb009dcSAndroid Build Coastguard Worker	; Round 1
200*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [4+esi]
201*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
202*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
203*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
204*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
205*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
206*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
207*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [4+ebx],ecx
208*8fb009dcSAndroid Build Coastguard Worker	; Round 2
209*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [8+esi]
210*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
211*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
212*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
213*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
214*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
215*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
216*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [8+ebx],ecx
217*8fb009dcSAndroid Build Coastguard Worker	; Round 3
218*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [12+esi]
219*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
220*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
221*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
222*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
223*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
224*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
225*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [12+ebx],ecx
226*8fb009dcSAndroid Build Coastguard Worker	; Round 4
227*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [16+esi]
228*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+edi]
229*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
230*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
231*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
232*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
233*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
234*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [16+ebx],ecx
235*8fb009dcSAndroid Build Coastguard Worker	; Round 5
236*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [20+esi]
237*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+edi]
238*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
239*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
240*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
241*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
242*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
243*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [20+ebx],ecx
244*8fb009dcSAndroid Build Coastguard Worker	; Round 6
245*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [24+esi]
246*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [24+edi]
247*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
248*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
249*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
250*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
251*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
252*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [24+ebx],ecx
253*8fb009dcSAndroid Build Coastguard Worker	; Round 7
254*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [28+esi]
255*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [28+edi]
256*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
257*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
258*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
259*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
260*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
261*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [28+ebx],ecx
262*8fb009dcSAndroid Build Coastguard Worker	;
263*8fb009dcSAndroid Build Coastguard Worker	add	esi,32
264*8fb009dcSAndroid Build Coastguard Worker	add	edi,32
265*8fb009dcSAndroid Build Coastguard Worker	add	ebx,32
266*8fb009dcSAndroid Build Coastguard Worker	sub	ebp,8
267*8fb009dcSAndroid Build Coastguard Worker	jnz	NEAR L$007aw_loop
268*8fb009dcSAndroid Build Coastguard WorkerL$006aw_finish:
269*8fb009dcSAndroid Build Coastguard Worker	mov	ebp,DWORD [32+esp]
270*8fb009dcSAndroid Build Coastguard Worker	and	ebp,7
271*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$008aw_end
272*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 0
273*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [esi]
274*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
275*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
276*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
277*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
278*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
279*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
280*8fb009dcSAndroid Build Coastguard Worker	dec	ebp
281*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [ebx],ecx
282*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$008aw_end
283*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 1
284*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [4+esi]
285*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
286*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
287*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
288*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
289*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
290*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
291*8fb009dcSAndroid Build Coastguard Worker	dec	ebp
292*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [4+ebx],ecx
293*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$008aw_end
294*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 2
295*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [8+esi]
296*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
297*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
298*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
299*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
300*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
301*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
302*8fb009dcSAndroid Build Coastguard Worker	dec	ebp
303*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [8+ebx],ecx
304*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$008aw_end
305*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 3
306*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [12+esi]
307*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
308*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
309*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
310*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
311*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
312*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
313*8fb009dcSAndroid Build Coastguard Worker	dec	ebp
314*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [12+ebx],ecx
315*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$008aw_end
316*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 4
317*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [16+esi]
318*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+edi]
319*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
320*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
321*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
322*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
323*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
324*8fb009dcSAndroid Build Coastguard Worker	dec	ebp
325*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [16+ebx],ecx
326*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$008aw_end
327*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 5
328*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [20+esi]
329*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+edi]
330*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
331*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
332*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
333*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
334*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
335*8fb009dcSAndroid Build Coastguard Worker	dec	ebp
336*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [20+ebx],ecx
337*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$008aw_end
338*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 6
339*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [24+esi]
340*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [24+edi]
341*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
342*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
343*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
344*8fb009dcSAndroid Build Coastguard Worker	add	ecx,edx
345*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
346*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [24+ebx],ecx
347*8fb009dcSAndroid Build Coastguard WorkerL$008aw_end:
348*8fb009dcSAndroid Build Coastguard Worker	pop	edi
349*8fb009dcSAndroid Build Coastguard Worker	pop	esi
350*8fb009dcSAndroid Build Coastguard Worker	pop	ebx
351*8fb009dcSAndroid Build Coastguard Worker	pop	ebp
352*8fb009dcSAndroid Build Coastguard Worker	ret
353*8fb009dcSAndroid Build Coastguard Workerglobal	_bn_sub_words
354*8fb009dcSAndroid Build Coastguard Workeralign	16
355*8fb009dcSAndroid Build Coastguard Worker_bn_sub_words:
356*8fb009dcSAndroid Build Coastguard WorkerL$_bn_sub_words_begin:
357*8fb009dcSAndroid Build Coastguard Worker	push	ebp
358*8fb009dcSAndroid Build Coastguard Worker	push	ebx
359*8fb009dcSAndroid Build Coastguard Worker	push	esi
360*8fb009dcSAndroid Build Coastguard Worker	push	edi
361*8fb009dcSAndroid Build Coastguard Worker	;
362*8fb009dcSAndroid Build Coastguard Worker	mov	ebx,DWORD [20+esp]
363*8fb009dcSAndroid Build Coastguard Worker	mov	esi,DWORD [24+esp]
364*8fb009dcSAndroid Build Coastguard Worker	mov	edi,DWORD [28+esp]
365*8fb009dcSAndroid Build Coastguard Worker	mov	ebp,DWORD [32+esp]
366*8fb009dcSAndroid Build Coastguard Worker	xor	eax,eax
367*8fb009dcSAndroid Build Coastguard Worker	and	ebp,4294967288
368*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$009aw_finish
369*8fb009dcSAndroid Build Coastguard WorkerL$010aw_loop:
370*8fb009dcSAndroid Build Coastguard Worker	; Round 0
371*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [esi]
372*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
373*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
374*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
375*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
376*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
377*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
378*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [ebx],ecx
379*8fb009dcSAndroid Build Coastguard Worker	; Round 1
380*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [4+esi]
381*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
382*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
383*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
384*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
385*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
386*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
387*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [4+ebx],ecx
388*8fb009dcSAndroid Build Coastguard Worker	; Round 2
389*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [8+esi]
390*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
391*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
392*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
393*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
394*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
395*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
396*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [8+ebx],ecx
397*8fb009dcSAndroid Build Coastguard Worker	; Round 3
398*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [12+esi]
399*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
400*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
401*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
402*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
403*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
404*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
405*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [12+ebx],ecx
406*8fb009dcSAndroid Build Coastguard Worker	; Round 4
407*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [16+esi]
408*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+edi]
409*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
410*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
411*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
412*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
413*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
414*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [16+ebx],ecx
415*8fb009dcSAndroid Build Coastguard Worker	; Round 5
416*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [20+esi]
417*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+edi]
418*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
419*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
420*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
421*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
422*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
423*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [20+ebx],ecx
424*8fb009dcSAndroid Build Coastguard Worker	; Round 6
425*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [24+esi]
426*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [24+edi]
427*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
428*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
429*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
430*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
431*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
432*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [24+ebx],ecx
433*8fb009dcSAndroid Build Coastguard Worker	; Round 7
434*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [28+esi]
435*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [28+edi]
436*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
437*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
438*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
439*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
440*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
441*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [28+ebx],ecx
442*8fb009dcSAndroid Build Coastguard Worker	;
443*8fb009dcSAndroid Build Coastguard Worker	add	esi,32
444*8fb009dcSAndroid Build Coastguard Worker	add	edi,32
445*8fb009dcSAndroid Build Coastguard Worker	add	ebx,32
446*8fb009dcSAndroid Build Coastguard Worker	sub	ebp,8
447*8fb009dcSAndroid Build Coastguard Worker	jnz	NEAR L$010aw_loop
448*8fb009dcSAndroid Build Coastguard WorkerL$009aw_finish:
449*8fb009dcSAndroid Build Coastguard Worker	mov	ebp,DWORD [32+esp]
450*8fb009dcSAndroid Build Coastguard Worker	and	ebp,7
451*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$011aw_end
452*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 0
453*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [esi]
454*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
455*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
456*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
457*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
458*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
459*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
460*8fb009dcSAndroid Build Coastguard Worker	dec	ebp
461*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [ebx],ecx
462*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$011aw_end
463*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 1
464*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [4+esi]
465*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
466*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
467*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
468*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
469*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
470*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
471*8fb009dcSAndroid Build Coastguard Worker	dec	ebp
472*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [4+ebx],ecx
473*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$011aw_end
474*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 2
475*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [8+esi]
476*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
477*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
478*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
479*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
480*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
481*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
482*8fb009dcSAndroid Build Coastguard Worker	dec	ebp
483*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [8+ebx],ecx
484*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$011aw_end
485*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 3
486*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [12+esi]
487*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
488*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
489*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
490*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
491*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
492*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
493*8fb009dcSAndroid Build Coastguard Worker	dec	ebp
494*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [12+ebx],ecx
495*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$011aw_end
496*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 4
497*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [16+esi]
498*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+edi]
499*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
500*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
501*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
502*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
503*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
504*8fb009dcSAndroid Build Coastguard Worker	dec	ebp
505*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [16+ebx],ecx
506*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$011aw_end
507*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 5
508*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [20+esi]
509*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+edi]
510*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
511*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
512*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
513*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
514*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
515*8fb009dcSAndroid Build Coastguard Worker	dec	ebp
516*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [20+ebx],ecx
517*8fb009dcSAndroid Build Coastguard Worker	jz	NEAR L$011aw_end
518*8fb009dcSAndroid Build Coastguard Worker	; Tail Round 6
519*8fb009dcSAndroid Build Coastguard Worker	mov	ecx,DWORD [24+esi]
520*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [24+edi]
521*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,eax
522*8fb009dcSAndroid Build Coastguard Worker	mov	eax,0
523*8fb009dcSAndroid Build Coastguard Worker	adc	eax,eax
524*8fb009dcSAndroid Build Coastguard Worker	sub	ecx,edx
525*8fb009dcSAndroid Build Coastguard Worker	adc	eax,0
526*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [24+ebx],ecx
527*8fb009dcSAndroid Build Coastguard WorkerL$011aw_end:
528*8fb009dcSAndroid Build Coastguard Worker	pop	edi
529*8fb009dcSAndroid Build Coastguard Worker	pop	esi
530*8fb009dcSAndroid Build Coastguard Worker	pop	ebx
531*8fb009dcSAndroid Build Coastguard Worker	pop	ebp
532*8fb009dcSAndroid Build Coastguard Worker	ret
533*8fb009dcSAndroid Build Coastguard Worker%else
534*8fb009dcSAndroid Build Coastguard Worker; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
535*8fb009dcSAndroid Build Coastguard Workerret
536*8fb009dcSAndroid Build Coastguard Worker%endif
537