xref: /aosp_15_r20/external/boringssl/src/gen/bcm/co-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_comba8
17*8fb009dcSAndroid Build Coastguard Workeralign	16
18*8fb009dcSAndroid Build Coastguard Worker_bn_mul_comba8:
19*8fb009dcSAndroid Build Coastguard WorkerL$_bn_mul_comba8_begin:
20*8fb009dcSAndroid Build Coastguard Worker	push	esi
21*8fb009dcSAndroid Build Coastguard Worker	mov	esi,DWORD [12+esp]
22*8fb009dcSAndroid Build Coastguard Worker	push	edi
23*8fb009dcSAndroid Build Coastguard Worker	mov	edi,DWORD [20+esp]
24*8fb009dcSAndroid Build Coastguard Worker	push	ebp
25*8fb009dcSAndroid Build Coastguard Worker	push	ebx
26*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
27*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
28*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
29*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
30*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 0
31*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
32*8fb009dcSAndroid Build Coastguard Worker	; mul a[0]*b[0]
33*8fb009dcSAndroid Build Coastguard Worker	mul	edx
34*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
35*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
36*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
37*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
38*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
39*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [eax],ebx
40*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
41*8fb009dcSAndroid Build Coastguard Worker	; saved r[0]
42*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 1
43*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
44*8fb009dcSAndroid Build Coastguard Worker	; mul a[1]*b[0]
45*8fb009dcSAndroid Build Coastguard Worker	mul	edx
46*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
47*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
48*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
49*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
50*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
51*8fb009dcSAndroid Build Coastguard Worker	; mul a[0]*b[1]
52*8fb009dcSAndroid Build Coastguard Worker	mul	edx
53*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
54*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
55*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
56*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
57*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
58*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [4+eax],ecx
59*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
60*8fb009dcSAndroid Build Coastguard Worker	; saved r[1]
61*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 2
62*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
63*8fb009dcSAndroid Build Coastguard Worker	; mul a[2]*b[0]
64*8fb009dcSAndroid Build Coastguard Worker	mul	edx
65*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
66*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
67*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
68*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
69*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
70*8fb009dcSAndroid Build Coastguard Worker	; mul a[1]*b[1]
71*8fb009dcSAndroid Build Coastguard Worker	mul	edx
72*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
73*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
74*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
75*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
76*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
77*8fb009dcSAndroid Build Coastguard Worker	; mul a[0]*b[2]
78*8fb009dcSAndroid Build Coastguard Worker	mul	edx
79*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
80*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
81*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
82*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
83*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
84*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [8+eax],ebp
85*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
86*8fb009dcSAndroid Build Coastguard Worker	; saved r[2]
87*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 3
88*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
89*8fb009dcSAndroid Build Coastguard Worker	; mul a[3]*b[0]
90*8fb009dcSAndroid Build Coastguard Worker	mul	edx
91*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
92*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
93*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
94*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
95*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
96*8fb009dcSAndroid Build Coastguard Worker	; mul a[2]*b[1]
97*8fb009dcSAndroid Build Coastguard Worker	mul	edx
98*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
99*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
100*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
101*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
102*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
103*8fb009dcSAndroid Build Coastguard Worker	; mul a[1]*b[2]
104*8fb009dcSAndroid Build Coastguard Worker	mul	edx
105*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
106*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
107*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
108*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
109*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
110*8fb009dcSAndroid Build Coastguard Worker	; mul a[0]*b[3]
111*8fb009dcSAndroid Build Coastguard Worker	mul	edx
112*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
113*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
114*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
115*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
116*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
117*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [12+eax],ebx
118*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [16+esi]
119*8fb009dcSAndroid Build Coastguard Worker	; saved r[3]
120*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 4
121*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
122*8fb009dcSAndroid Build Coastguard Worker	; mul a[4]*b[0]
123*8fb009dcSAndroid Build Coastguard Worker	mul	edx
124*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
125*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
126*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
127*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
128*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
129*8fb009dcSAndroid Build Coastguard Worker	; mul a[3]*b[1]
130*8fb009dcSAndroid Build Coastguard Worker	mul	edx
131*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
132*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
133*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
134*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
135*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
136*8fb009dcSAndroid Build Coastguard Worker	; mul a[2]*b[2]
137*8fb009dcSAndroid Build Coastguard Worker	mul	edx
138*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
139*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
140*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
141*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
142*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
143*8fb009dcSAndroid Build Coastguard Worker	; mul a[1]*b[3]
144*8fb009dcSAndroid Build Coastguard Worker	mul	edx
145*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
146*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
147*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
148*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+edi]
149*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
150*8fb009dcSAndroid Build Coastguard Worker	; mul a[0]*b[4]
151*8fb009dcSAndroid Build Coastguard Worker	mul	edx
152*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
153*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
154*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
155*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
156*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
157*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [16+eax],ecx
158*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
159*8fb009dcSAndroid Build Coastguard Worker	; saved r[4]
160*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 5
161*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
162*8fb009dcSAndroid Build Coastguard Worker	; mul a[5]*b[0]
163*8fb009dcSAndroid Build Coastguard Worker	mul	edx
164*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
165*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [16+esi]
166*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
167*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
168*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
169*8fb009dcSAndroid Build Coastguard Worker	; mul a[4]*b[1]
170*8fb009dcSAndroid Build Coastguard Worker	mul	edx
171*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
172*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
173*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
174*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
175*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
176*8fb009dcSAndroid Build Coastguard Worker	; mul a[3]*b[2]
177*8fb009dcSAndroid Build Coastguard Worker	mul	edx
178*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
179*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
180*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
181*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
182*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
183*8fb009dcSAndroid Build Coastguard Worker	; mul a[2]*b[3]
184*8fb009dcSAndroid Build Coastguard Worker	mul	edx
185*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
186*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
187*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
188*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+edi]
189*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
190*8fb009dcSAndroid Build Coastguard Worker	; mul a[1]*b[4]
191*8fb009dcSAndroid Build Coastguard Worker	mul	edx
192*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
193*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
194*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
195*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+edi]
196*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
197*8fb009dcSAndroid Build Coastguard Worker	; mul a[0]*b[5]
198*8fb009dcSAndroid Build Coastguard Worker	mul	edx
199*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
200*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
201*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
202*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
203*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
204*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [20+eax],ebp
205*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
206*8fb009dcSAndroid Build Coastguard Worker	; saved r[5]
207*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 6
208*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
209*8fb009dcSAndroid Build Coastguard Worker	; mul a[6]*b[0]
210*8fb009dcSAndroid Build Coastguard Worker	mul	edx
211*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
212*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
213*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
214*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
215*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
216*8fb009dcSAndroid Build Coastguard Worker	; mul a[5]*b[1]
217*8fb009dcSAndroid Build Coastguard Worker	mul	edx
218*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
219*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [16+esi]
220*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
221*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
222*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
223*8fb009dcSAndroid Build Coastguard Worker	; mul a[4]*b[2]
224*8fb009dcSAndroid Build Coastguard Worker	mul	edx
225*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
226*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
227*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
228*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
229*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
230*8fb009dcSAndroid Build Coastguard Worker	; mul a[3]*b[3]
231*8fb009dcSAndroid Build Coastguard Worker	mul	edx
232*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
233*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
234*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
235*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+edi]
236*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
237*8fb009dcSAndroid Build Coastguard Worker	; mul a[2]*b[4]
238*8fb009dcSAndroid Build Coastguard Worker	mul	edx
239*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
240*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
241*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
242*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+edi]
243*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
244*8fb009dcSAndroid Build Coastguard Worker	; mul a[1]*b[5]
245*8fb009dcSAndroid Build Coastguard Worker	mul	edx
246*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
247*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
248*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
249*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [24+edi]
250*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
251*8fb009dcSAndroid Build Coastguard Worker	; mul a[0]*b[6]
252*8fb009dcSAndroid Build Coastguard Worker	mul	edx
253*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
254*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
255*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
256*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
257*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
258*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [24+eax],ebx
259*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
260*8fb009dcSAndroid Build Coastguard Worker	; saved r[6]
261*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 7
262*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
263*8fb009dcSAndroid Build Coastguard Worker	; mul a[7]*b[0]
264*8fb009dcSAndroid Build Coastguard Worker	mul	edx
265*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
266*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
267*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
268*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
269*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
270*8fb009dcSAndroid Build Coastguard Worker	; mul a[6]*b[1]
271*8fb009dcSAndroid Build Coastguard Worker	mul	edx
272*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
273*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
274*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
275*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
276*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
277*8fb009dcSAndroid Build Coastguard Worker	; mul a[5]*b[2]
278*8fb009dcSAndroid Build Coastguard Worker	mul	edx
279*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
280*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [16+esi]
281*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
282*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
283*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
284*8fb009dcSAndroid Build Coastguard Worker	; mul a[4]*b[3]
285*8fb009dcSAndroid Build Coastguard Worker	mul	edx
286*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
287*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
288*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
289*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+edi]
290*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
291*8fb009dcSAndroid Build Coastguard Worker	; mul a[3]*b[4]
292*8fb009dcSAndroid Build Coastguard Worker	mul	edx
293*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
294*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
295*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
296*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+edi]
297*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
298*8fb009dcSAndroid Build Coastguard Worker	; mul a[2]*b[5]
299*8fb009dcSAndroid Build Coastguard Worker	mul	edx
300*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
301*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
302*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
303*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [24+edi]
304*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
305*8fb009dcSAndroid Build Coastguard Worker	; mul a[1]*b[6]
306*8fb009dcSAndroid Build Coastguard Worker	mul	edx
307*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
308*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
309*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
310*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [28+edi]
311*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
312*8fb009dcSAndroid Build Coastguard Worker	; mul a[0]*b[7]
313*8fb009dcSAndroid Build Coastguard Worker	mul	edx
314*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
315*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
316*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
317*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
318*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
319*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [28+eax],ecx
320*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
321*8fb009dcSAndroid Build Coastguard Worker	; saved r[7]
322*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 8
323*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
324*8fb009dcSAndroid Build Coastguard Worker	; mul a[7]*b[1]
325*8fb009dcSAndroid Build Coastguard Worker	mul	edx
326*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
327*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
328*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
329*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
330*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
331*8fb009dcSAndroid Build Coastguard Worker	; mul a[6]*b[2]
332*8fb009dcSAndroid Build Coastguard Worker	mul	edx
333*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
334*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
335*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
336*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
337*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
338*8fb009dcSAndroid Build Coastguard Worker	; mul a[5]*b[3]
339*8fb009dcSAndroid Build Coastguard Worker	mul	edx
340*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
341*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [16+esi]
342*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
343*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+edi]
344*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
345*8fb009dcSAndroid Build Coastguard Worker	; mul a[4]*b[4]
346*8fb009dcSAndroid Build Coastguard Worker	mul	edx
347*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
348*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
349*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
350*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+edi]
351*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
352*8fb009dcSAndroid Build Coastguard Worker	; mul a[3]*b[5]
353*8fb009dcSAndroid Build Coastguard Worker	mul	edx
354*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
355*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
356*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
357*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [24+edi]
358*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
359*8fb009dcSAndroid Build Coastguard Worker	; mul a[2]*b[6]
360*8fb009dcSAndroid Build Coastguard Worker	mul	edx
361*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
362*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
363*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
364*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [28+edi]
365*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
366*8fb009dcSAndroid Build Coastguard Worker	; mul a[1]*b[7]
367*8fb009dcSAndroid Build Coastguard Worker	mul	edx
368*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
369*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
370*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
371*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
372*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
373*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [32+eax],ebp
374*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
375*8fb009dcSAndroid Build Coastguard Worker	; saved r[8]
376*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 9
377*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
378*8fb009dcSAndroid Build Coastguard Worker	; mul a[7]*b[2]
379*8fb009dcSAndroid Build Coastguard Worker	mul	edx
380*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
381*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
382*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
383*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
384*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
385*8fb009dcSAndroid Build Coastguard Worker	; mul a[6]*b[3]
386*8fb009dcSAndroid Build Coastguard Worker	mul	edx
387*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
388*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
389*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
390*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+edi]
391*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
392*8fb009dcSAndroid Build Coastguard Worker	; mul a[5]*b[4]
393*8fb009dcSAndroid Build Coastguard Worker	mul	edx
394*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
395*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [16+esi]
396*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
397*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+edi]
398*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
399*8fb009dcSAndroid Build Coastguard Worker	; mul a[4]*b[5]
400*8fb009dcSAndroid Build Coastguard Worker	mul	edx
401*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
402*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
403*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
404*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [24+edi]
405*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
406*8fb009dcSAndroid Build Coastguard Worker	; mul a[3]*b[6]
407*8fb009dcSAndroid Build Coastguard Worker	mul	edx
408*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
409*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
410*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
411*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [28+edi]
412*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
413*8fb009dcSAndroid Build Coastguard Worker	; mul a[2]*b[7]
414*8fb009dcSAndroid Build Coastguard Worker	mul	edx
415*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
416*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
417*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
418*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
419*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
420*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [36+eax],ebx
421*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
422*8fb009dcSAndroid Build Coastguard Worker	; saved r[9]
423*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 10
424*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
425*8fb009dcSAndroid Build Coastguard Worker	; mul a[7]*b[3]
426*8fb009dcSAndroid Build Coastguard Worker	mul	edx
427*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
428*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
429*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
430*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+edi]
431*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
432*8fb009dcSAndroid Build Coastguard Worker	; mul a[6]*b[4]
433*8fb009dcSAndroid Build Coastguard Worker	mul	edx
434*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
435*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
436*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
437*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+edi]
438*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
439*8fb009dcSAndroid Build Coastguard Worker	; mul a[5]*b[5]
440*8fb009dcSAndroid Build Coastguard Worker	mul	edx
441*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
442*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [16+esi]
443*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
444*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [24+edi]
445*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
446*8fb009dcSAndroid Build Coastguard Worker	; mul a[4]*b[6]
447*8fb009dcSAndroid Build Coastguard Worker	mul	edx
448*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
449*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
450*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
451*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [28+edi]
452*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
453*8fb009dcSAndroid Build Coastguard Worker	; mul a[3]*b[7]
454*8fb009dcSAndroid Build Coastguard Worker	mul	edx
455*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
456*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
457*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
458*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+edi]
459*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
460*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [40+eax],ecx
461*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
462*8fb009dcSAndroid Build Coastguard Worker	; saved r[10]
463*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 11
464*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
465*8fb009dcSAndroid Build Coastguard Worker	; mul a[7]*b[4]
466*8fb009dcSAndroid Build Coastguard Worker	mul	edx
467*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
468*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
469*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
470*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+edi]
471*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
472*8fb009dcSAndroid Build Coastguard Worker	; mul a[6]*b[5]
473*8fb009dcSAndroid Build Coastguard Worker	mul	edx
474*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
475*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
476*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
477*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [24+edi]
478*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
479*8fb009dcSAndroid Build Coastguard Worker	; mul a[5]*b[6]
480*8fb009dcSAndroid Build Coastguard Worker	mul	edx
481*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
482*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [16+esi]
483*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
484*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [28+edi]
485*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
486*8fb009dcSAndroid Build Coastguard Worker	; mul a[4]*b[7]
487*8fb009dcSAndroid Build Coastguard Worker	mul	edx
488*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
489*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
490*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
491*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+edi]
492*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
493*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [44+eax],ebp
494*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
495*8fb009dcSAndroid Build Coastguard Worker	; saved r[11]
496*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 12
497*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
498*8fb009dcSAndroid Build Coastguard Worker	; mul a[7]*b[5]
499*8fb009dcSAndroid Build Coastguard Worker	mul	edx
500*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
501*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
502*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
503*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [24+edi]
504*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
505*8fb009dcSAndroid Build Coastguard Worker	; mul a[6]*b[6]
506*8fb009dcSAndroid Build Coastguard Worker	mul	edx
507*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
508*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
509*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
510*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [28+edi]
511*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
512*8fb009dcSAndroid Build Coastguard Worker	; mul a[5]*b[7]
513*8fb009dcSAndroid Build Coastguard Worker	mul	edx
514*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
515*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
516*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
517*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [24+edi]
518*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
519*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [48+eax],ebx
520*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
521*8fb009dcSAndroid Build Coastguard Worker	; saved r[12]
522*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 13
523*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
524*8fb009dcSAndroid Build Coastguard Worker	; mul a[7]*b[6]
525*8fb009dcSAndroid Build Coastguard Worker	mul	edx
526*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
527*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
528*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
529*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [28+edi]
530*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
531*8fb009dcSAndroid Build Coastguard Worker	; mul a[6]*b[7]
532*8fb009dcSAndroid Build Coastguard Worker	mul	edx
533*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
534*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
535*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
536*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [28+edi]
537*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
538*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [52+eax],ecx
539*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
540*8fb009dcSAndroid Build Coastguard Worker	; saved r[13]
541*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 14
542*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
543*8fb009dcSAndroid Build Coastguard Worker	; mul a[7]*b[7]
544*8fb009dcSAndroid Build Coastguard Worker	mul	edx
545*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
546*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
547*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
548*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
549*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [56+eax],ebp
550*8fb009dcSAndroid Build Coastguard Worker	; saved r[14]
551*8fb009dcSAndroid Build Coastguard Worker	; save r[15]
552*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [60+eax],ebx
553*8fb009dcSAndroid Build Coastguard Worker	pop	ebx
554*8fb009dcSAndroid Build Coastguard Worker	pop	ebp
555*8fb009dcSAndroid Build Coastguard Worker	pop	edi
556*8fb009dcSAndroid Build Coastguard Worker	pop	esi
557*8fb009dcSAndroid Build Coastguard Worker	ret
558*8fb009dcSAndroid Build Coastguard Workerglobal	_bn_mul_comba4
559*8fb009dcSAndroid Build Coastguard Workeralign	16
560*8fb009dcSAndroid Build Coastguard Worker_bn_mul_comba4:
561*8fb009dcSAndroid Build Coastguard WorkerL$_bn_mul_comba4_begin:
562*8fb009dcSAndroid Build Coastguard Worker	push	esi
563*8fb009dcSAndroid Build Coastguard Worker	mov	esi,DWORD [12+esp]
564*8fb009dcSAndroid Build Coastguard Worker	push	edi
565*8fb009dcSAndroid Build Coastguard Worker	mov	edi,DWORD [20+esp]
566*8fb009dcSAndroid Build Coastguard Worker	push	ebp
567*8fb009dcSAndroid Build Coastguard Worker	push	ebx
568*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
569*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
570*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
571*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
572*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 0
573*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
574*8fb009dcSAndroid Build Coastguard Worker	; mul a[0]*b[0]
575*8fb009dcSAndroid Build Coastguard Worker	mul	edx
576*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
577*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
578*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
579*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
580*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
581*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [eax],ebx
582*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
583*8fb009dcSAndroid Build Coastguard Worker	; saved r[0]
584*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 1
585*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
586*8fb009dcSAndroid Build Coastguard Worker	; mul a[1]*b[0]
587*8fb009dcSAndroid Build Coastguard Worker	mul	edx
588*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
589*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
590*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
591*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
592*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
593*8fb009dcSAndroid Build Coastguard Worker	; mul a[0]*b[1]
594*8fb009dcSAndroid Build Coastguard Worker	mul	edx
595*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
596*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
597*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
598*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
599*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
600*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [4+eax],ecx
601*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
602*8fb009dcSAndroid Build Coastguard Worker	; saved r[1]
603*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 2
604*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
605*8fb009dcSAndroid Build Coastguard Worker	; mul a[2]*b[0]
606*8fb009dcSAndroid Build Coastguard Worker	mul	edx
607*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
608*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
609*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
610*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
611*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
612*8fb009dcSAndroid Build Coastguard Worker	; mul a[1]*b[1]
613*8fb009dcSAndroid Build Coastguard Worker	mul	edx
614*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
615*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
616*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
617*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
618*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
619*8fb009dcSAndroid Build Coastguard Worker	; mul a[0]*b[2]
620*8fb009dcSAndroid Build Coastguard Worker	mul	edx
621*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
622*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
623*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
624*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [edi]
625*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
626*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [8+eax],ebp
627*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
628*8fb009dcSAndroid Build Coastguard Worker	; saved r[2]
629*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 3
630*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
631*8fb009dcSAndroid Build Coastguard Worker	; mul a[3]*b[0]
632*8fb009dcSAndroid Build Coastguard Worker	mul	edx
633*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
634*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
635*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
636*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
637*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
638*8fb009dcSAndroid Build Coastguard Worker	; mul a[2]*b[1]
639*8fb009dcSAndroid Build Coastguard Worker	mul	edx
640*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
641*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
642*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
643*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
644*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
645*8fb009dcSAndroid Build Coastguard Worker	; mul a[1]*b[2]
646*8fb009dcSAndroid Build Coastguard Worker	mul	edx
647*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
648*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
649*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
650*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
651*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
652*8fb009dcSAndroid Build Coastguard Worker	; mul a[0]*b[3]
653*8fb009dcSAndroid Build Coastguard Worker	mul	edx
654*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
655*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
656*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
657*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+edi]
658*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
659*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [12+eax],ebx
660*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
661*8fb009dcSAndroid Build Coastguard Worker	; saved r[3]
662*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 4
663*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
664*8fb009dcSAndroid Build Coastguard Worker	; mul a[3]*b[1]
665*8fb009dcSAndroid Build Coastguard Worker	mul	edx
666*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
667*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
668*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
669*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
670*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
671*8fb009dcSAndroid Build Coastguard Worker	; mul a[2]*b[2]
672*8fb009dcSAndroid Build Coastguard Worker	mul	edx
673*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
674*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
675*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
676*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
677*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
678*8fb009dcSAndroid Build Coastguard Worker	; mul a[1]*b[3]
679*8fb009dcSAndroid Build Coastguard Worker	mul	edx
680*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
681*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
682*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
683*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+edi]
684*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
685*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [16+eax],ecx
686*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
687*8fb009dcSAndroid Build Coastguard Worker	; saved r[4]
688*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 5
689*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
690*8fb009dcSAndroid Build Coastguard Worker	; mul a[3]*b[2]
691*8fb009dcSAndroid Build Coastguard Worker	mul	edx
692*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
693*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
694*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
695*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
696*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
697*8fb009dcSAndroid Build Coastguard Worker	; mul a[2]*b[3]
698*8fb009dcSAndroid Build Coastguard Worker	mul	edx
699*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
700*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
701*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
702*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+edi]
703*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
704*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [20+eax],ebp
705*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
706*8fb009dcSAndroid Build Coastguard Worker	; saved r[5]
707*8fb009dcSAndroid Build Coastguard Worker	; ################## Calculate word 6
708*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
709*8fb009dcSAndroid Build Coastguard Worker	; mul a[3]*b[3]
710*8fb009dcSAndroid Build Coastguard Worker	mul	edx
711*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
712*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esp]
713*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
714*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
715*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [24+eax],ebx
716*8fb009dcSAndroid Build Coastguard Worker	; saved r[6]
717*8fb009dcSAndroid Build Coastguard Worker	; save r[7]
718*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [28+eax],ecx
719*8fb009dcSAndroid Build Coastguard Worker	pop	ebx
720*8fb009dcSAndroid Build Coastguard Worker	pop	ebp
721*8fb009dcSAndroid Build Coastguard Worker	pop	edi
722*8fb009dcSAndroid Build Coastguard Worker	pop	esi
723*8fb009dcSAndroid Build Coastguard Worker	ret
724*8fb009dcSAndroid Build Coastguard Workerglobal	_bn_sqr_comba8
725*8fb009dcSAndroid Build Coastguard Workeralign	16
726*8fb009dcSAndroid Build Coastguard Worker_bn_sqr_comba8:
727*8fb009dcSAndroid Build Coastguard WorkerL$_bn_sqr_comba8_begin:
728*8fb009dcSAndroid Build Coastguard Worker	push	esi
729*8fb009dcSAndroid Build Coastguard Worker	push	edi
730*8fb009dcSAndroid Build Coastguard Worker	push	ebp
731*8fb009dcSAndroid Build Coastguard Worker	push	ebx
732*8fb009dcSAndroid Build Coastguard Worker	mov	edi,DWORD [20+esp]
733*8fb009dcSAndroid Build Coastguard Worker	mov	esi,DWORD [24+esp]
734*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
735*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
736*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
737*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 0
738*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
739*8fb009dcSAndroid Build Coastguard Worker	; sqr a[0]*a[0]
740*8fb009dcSAndroid Build Coastguard Worker	mul	eax
741*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
742*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
743*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [esi]
744*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
745*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [edi],ebx
746*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
747*8fb009dcSAndroid Build Coastguard Worker	; saved r[0]
748*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 1
749*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
750*8fb009dcSAndroid Build Coastguard Worker	; sqr a[1]*a[0]
751*8fb009dcSAndroid Build Coastguard Worker	mul	edx
752*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
753*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
754*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
755*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
756*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
757*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
758*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
759*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [4+edi],ecx
760*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [esi]
761*8fb009dcSAndroid Build Coastguard Worker	; saved r[1]
762*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 2
763*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
764*8fb009dcSAndroid Build Coastguard Worker	; sqr a[2]*a[0]
765*8fb009dcSAndroid Build Coastguard Worker	mul	edx
766*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
767*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
768*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
769*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
770*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
771*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
772*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
773*8fb009dcSAndroid Build Coastguard Worker	; sqr a[1]*a[1]
774*8fb009dcSAndroid Build Coastguard Worker	mul	eax
775*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
776*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
777*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [esi]
778*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
779*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [8+edi],ebp
780*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
781*8fb009dcSAndroid Build Coastguard Worker	; saved r[2]
782*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 3
783*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
784*8fb009dcSAndroid Build Coastguard Worker	; sqr a[3]*a[0]
785*8fb009dcSAndroid Build Coastguard Worker	mul	edx
786*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
787*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
788*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
789*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
790*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
791*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
792*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
793*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+esi]
794*8fb009dcSAndroid Build Coastguard Worker	; sqr a[2]*a[1]
795*8fb009dcSAndroid Build Coastguard Worker	mul	edx
796*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
797*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
798*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
799*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
800*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
801*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [16+esi]
802*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
803*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [12+edi],ebx
804*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [esi]
805*8fb009dcSAndroid Build Coastguard Worker	; saved r[3]
806*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 4
807*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
808*8fb009dcSAndroid Build Coastguard Worker	; sqr a[4]*a[0]
809*8fb009dcSAndroid Build Coastguard Worker	mul	edx
810*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
811*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
812*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
813*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
814*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
815*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
816*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
817*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+esi]
818*8fb009dcSAndroid Build Coastguard Worker	; sqr a[3]*a[1]
819*8fb009dcSAndroid Build Coastguard Worker	mul	edx
820*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
821*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
822*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
823*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
824*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
825*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
826*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
827*8fb009dcSAndroid Build Coastguard Worker	; sqr a[2]*a[2]
828*8fb009dcSAndroid Build Coastguard Worker	mul	eax
829*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
830*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
831*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [esi]
832*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
833*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [16+edi],ecx
834*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
835*8fb009dcSAndroid Build Coastguard Worker	; saved r[4]
836*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 5
837*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
838*8fb009dcSAndroid Build Coastguard Worker	; sqr a[5]*a[0]
839*8fb009dcSAndroid Build Coastguard Worker	mul	edx
840*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
841*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
842*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
843*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
844*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
845*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [16+esi]
846*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
847*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+esi]
848*8fb009dcSAndroid Build Coastguard Worker	; sqr a[4]*a[1]
849*8fb009dcSAndroid Build Coastguard Worker	mul	edx
850*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
851*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
852*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
853*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
854*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
855*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
856*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
857*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+esi]
858*8fb009dcSAndroid Build Coastguard Worker	; sqr a[3]*a[2]
859*8fb009dcSAndroid Build Coastguard Worker	mul	edx
860*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
861*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
862*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
863*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
864*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
865*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
866*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
867*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [20+edi],ebp
868*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [esi]
869*8fb009dcSAndroid Build Coastguard Worker	; saved r[5]
870*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 6
871*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
872*8fb009dcSAndroid Build Coastguard Worker	; sqr a[6]*a[0]
873*8fb009dcSAndroid Build Coastguard Worker	mul	edx
874*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
875*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
876*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
877*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
878*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
879*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
880*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
881*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+esi]
882*8fb009dcSAndroid Build Coastguard Worker	; sqr a[5]*a[1]
883*8fb009dcSAndroid Build Coastguard Worker	mul	edx
884*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
885*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
886*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
887*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
888*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
889*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [16+esi]
890*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
891*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+esi]
892*8fb009dcSAndroid Build Coastguard Worker	; sqr a[4]*a[2]
893*8fb009dcSAndroid Build Coastguard Worker	mul	edx
894*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
895*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
896*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
897*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
898*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
899*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
900*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
901*8fb009dcSAndroid Build Coastguard Worker	; sqr a[3]*a[3]
902*8fb009dcSAndroid Build Coastguard Worker	mul	eax
903*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
904*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
905*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [esi]
906*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
907*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [24+edi],ebx
908*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
909*8fb009dcSAndroid Build Coastguard Worker	; saved r[6]
910*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 7
911*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
912*8fb009dcSAndroid Build Coastguard Worker	; sqr a[7]*a[0]
913*8fb009dcSAndroid Build Coastguard Worker	mul	edx
914*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
915*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
916*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
917*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
918*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
919*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
920*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
921*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+esi]
922*8fb009dcSAndroid Build Coastguard Worker	; sqr a[6]*a[1]
923*8fb009dcSAndroid Build Coastguard Worker	mul	edx
924*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
925*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
926*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
927*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
928*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
929*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
930*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
931*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+esi]
932*8fb009dcSAndroid Build Coastguard Worker	; sqr a[5]*a[2]
933*8fb009dcSAndroid Build Coastguard Worker	mul	edx
934*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
935*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
936*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
937*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
938*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
939*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [16+esi]
940*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
941*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+esi]
942*8fb009dcSAndroid Build Coastguard Worker	; sqr a[4]*a[3]
943*8fb009dcSAndroid Build Coastguard Worker	mul	edx
944*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
945*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
946*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
947*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
948*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
949*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
950*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
951*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [28+edi],ecx
952*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+esi]
953*8fb009dcSAndroid Build Coastguard Worker	; saved r[7]
954*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 8
955*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
956*8fb009dcSAndroid Build Coastguard Worker	; sqr a[7]*a[1]
957*8fb009dcSAndroid Build Coastguard Worker	mul	edx
958*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
959*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
960*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
961*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
962*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
963*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
964*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
965*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+esi]
966*8fb009dcSAndroid Build Coastguard Worker	; sqr a[6]*a[2]
967*8fb009dcSAndroid Build Coastguard Worker	mul	edx
968*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
969*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
970*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
971*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
972*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
973*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
974*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
975*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+esi]
976*8fb009dcSAndroid Build Coastguard Worker	; sqr a[5]*a[3]
977*8fb009dcSAndroid Build Coastguard Worker	mul	edx
978*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
979*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
980*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
981*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
982*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
983*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [16+esi]
984*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
985*8fb009dcSAndroid Build Coastguard Worker	; sqr a[4]*a[4]
986*8fb009dcSAndroid Build Coastguard Worker	mul	eax
987*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
988*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
989*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+esi]
990*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
991*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [32+edi],ebp
992*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
993*8fb009dcSAndroid Build Coastguard Worker	; saved r[8]
994*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 9
995*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
996*8fb009dcSAndroid Build Coastguard Worker	; sqr a[7]*a[2]
997*8fb009dcSAndroid Build Coastguard Worker	mul	edx
998*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
999*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1000*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1001*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
1002*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
1003*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
1004*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1005*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+esi]
1006*8fb009dcSAndroid Build Coastguard Worker	; sqr a[6]*a[3]
1007*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1008*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1009*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1010*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1011*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
1012*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
1013*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
1014*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1015*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+esi]
1016*8fb009dcSAndroid Build Coastguard Worker	; sqr a[5]*a[4]
1017*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1018*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1019*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1020*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1021*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
1022*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
1023*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
1024*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1025*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [36+edi],ebx
1026*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [12+esi]
1027*8fb009dcSAndroid Build Coastguard Worker	; saved r[9]
1028*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 10
1029*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
1030*8fb009dcSAndroid Build Coastguard Worker	; sqr a[7]*a[3]
1031*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1032*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1033*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1034*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
1035*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
1036*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
1037*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
1038*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
1039*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+esi]
1040*8fb009dcSAndroid Build Coastguard Worker	; sqr a[6]*a[4]
1041*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1042*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1043*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1044*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
1045*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
1046*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
1047*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [20+esi]
1048*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
1049*8fb009dcSAndroid Build Coastguard Worker	; sqr a[5]*a[5]
1050*8fb009dcSAndroid Build Coastguard Worker	mul	eax
1051*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
1052*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
1053*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [16+esi]
1054*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
1055*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [40+edi],ecx
1056*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
1057*8fb009dcSAndroid Build Coastguard Worker	; saved r[10]
1058*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 11
1059*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
1060*8fb009dcSAndroid Build Coastguard Worker	; sqr a[7]*a[4]
1061*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1062*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1063*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1064*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
1065*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
1066*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
1067*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
1068*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
1069*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+esi]
1070*8fb009dcSAndroid Build Coastguard Worker	; sqr a[6]*a[5]
1071*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1072*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1073*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1074*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
1075*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
1076*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
1077*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
1078*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
1079*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [44+edi],ebp
1080*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [20+esi]
1081*8fb009dcSAndroid Build Coastguard Worker	; saved r[11]
1082*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 12
1083*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
1084*8fb009dcSAndroid Build Coastguard Worker	; sqr a[7]*a[5]
1085*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1086*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1087*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1088*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1089*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
1090*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
1091*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [24+esi]
1092*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1093*8fb009dcSAndroid Build Coastguard Worker	; sqr a[6]*a[6]
1094*8fb009dcSAndroid Build Coastguard Worker	mul	eax
1095*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
1096*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
1097*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [24+esi]
1098*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1099*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [48+edi],ebx
1100*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
1101*8fb009dcSAndroid Build Coastguard Worker	; saved r[12]
1102*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 13
1103*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
1104*8fb009dcSAndroid Build Coastguard Worker	; sqr a[7]*a[6]
1105*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1106*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1107*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1108*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
1109*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
1110*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
1111*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [28+esi]
1112*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
1113*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [52+edi],ecx
1114*8fb009dcSAndroid Build Coastguard Worker	; saved r[13]
1115*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 14
1116*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
1117*8fb009dcSAndroid Build Coastguard Worker	; sqr a[7]*a[7]
1118*8fb009dcSAndroid Build Coastguard Worker	mul	eax
1119*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
1120*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
1121*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
1122*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [56+edi],ebp
1123*8fb009dcSAndroid Build Coastguard Worker	; saved r[14]
1124*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [60+edi],ebx
1125*8fb009dcSAndroid Build Coastguard Worker	pop	ebx
1126*8fb009dcSAndroid Build Coastguard Worker	pop	ebp
1127*8fb009dcSAndroid Build Coastguard Worker	pop	edi
1128*8fb009dcSAndroid Build Coastguard Worker	pop	esi
1129*8fb009dcSAndroid Build Coastguard Worker	ret
1130*8fb009dcSAndroid Build Coastguard Workerglobal	_bn_sqr_comba4
1131*8fb009dcSAndroid Build Coastguard Workeralign	16
1132*8fb009dcSAndroid Build Coastguard Worker_bn_sqr_comba4:
1133*8fb009dcSAndroid Build Coastguard WorkerL$_bn_sqr_comba4_begin:
1134*8fb009dcSAndroid Build Coastguard Worker	push	esi
1135*8fb009dcSAndroid Build Coastguard Worker	push	edi
1136*8fb009dcSAndroid Build Coastguard Worker	push	ebp
1137*8fb009dcSAndroid Build Coastguard Worker	push	ebx
1138*8fb009dcSAndroid Build Coastguard Worker	mov	edi,DWORD [20+esp]
1139*8fb009dcSAndroid Build Coastguard Worker	mov	esi,DWORD [24+esp]
1140*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
1141*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
1142*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [esi]
1143*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 0
1144*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
1145*8fb009dcSAndroid Build Coastguard Worker	; sqr a[0]*a[0]
1146*8fb009dcSAndroid Build Coastguard Worker	mul	eax
1147*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
1148*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
1149*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [esi]
1150*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1151*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [edi],ebx
1152*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
1153*8fb009dcSAndroid Build Coastguard Worker	; saved r[0]
1154*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 1
1155*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
1156*8fb009dcSAndroid Build Coastguard Worker	; sqr a[1]*a[0]
1157*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1158*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1159*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1160*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
1161*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
1162*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
1163*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
1164*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
1165*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [4+edi],ecx
1166*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [esi]
1167*8fb009dcSAndroid Build Coastguard Worker	; saved r[1]
1168*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 2
1169*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
1170*8fb009dcSAndroid Build Coastguard Worker	; sqr a[2]*a[0]
1171*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1172*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1173*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1174*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
1175*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
1176*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
1177*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [4+esi]
1178*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
1179*8fb009dcSAndroid Build Coastguard Worker	; sqr a[1]*a[1]
1180*8fb009dcSAndroid Build Coastguard Worker	mul	eax
1181*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
1182*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
1183*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [esi]
1184*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
1185*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [8+edi],ebp
1186*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
1187*8fb009dcSAndroid Build Coastguard Worker	; saved r[2]
1188*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 3
1189*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
1190*8fb009dcSAndroid Build Coastguard Worker	; sqr a[3]*a[0]
1191*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1192*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1193*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1194*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1195*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
1196*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
1197*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
1198*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1199*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+esi]
1200*8fb009dcSAndroid Build Coastguard Worker	; sqr a[2]*a[1]
1201*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1202*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1203*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1204*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1205*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
1206*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
1207*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
1208*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1209*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [12+edi],ebx
1210*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [4+esi]
1211*8fb009dcSAndroid Build Coastguard Worker	; saved r[3]
1212*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 4
1213*8fb009dcSAndroid Build Coastguard Worker	xor	ebx,ebx
1214*8fb009dcSAndroid Build Coastguard Worker	; sqr a[3]*a[1]
1215*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1216*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1217*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1218*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
1219*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
1220*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
1221*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [8+esi]
1222*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
1223*8fb009dcSAndroid Build Coastguard Worker	; sqr a[2]*a[2]
1224*8fb009dcSAndroid Build Coastguard Worker	mul	eax
1225*8fb009dcSAndroid Build Coastguard Worker	add	ecx,eax
1226*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,edx
1227*8fb009dcSAndroid Build Coastguard Worker	mov	edx,DWORD [8+esi]
1228*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,0
1229*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [16+edi],ecx
1230*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
1231*8fb009dcSAndroid Build Coastguard Worker	; saved r[4]
1232*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 5
1233*8fb009dcSAndroid Build Coastguard Worker	xor	ecx,ecx
1234*8fb009dcSAndroid Build Coastguard Worker	; sqr a[3]*a[2]
1235*8fb009dcSAndroid Build Coastguard Worker	mul	edx
1236*8fb009dcSAndroid Build Coastguard Worker	add	eax,eax
1237*8fb009dcSAndroid Build Coastguard Worker	adc	edx,edx
1238*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
1239*8fb009dcSAndroid Build Coastguard Worker	add	ebp,eax
1240*8fb009dcSAndroid Build Coastguard Worker	adc	ebx,edx
1241*8fb009dcSAndroid Build Coastguard Worker	mov	eax,DWORD [12+esi]
1242*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,0
1243*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [20+edi],ebp
1244*8fb009dcSAndroid Build Coastguard Worker	; saved r[5]
1245*8fb009dcSAndroid Build Coastguard Worker	; ############### Calculate word 6
1246*8fb009dcSAndroid Build Coastguard Worker	xor	ebp,ebp
1247*8fb009dcSAndroid Build Coastguard Worker	; sqr a[3]*a[3]
1248*8fb009dcSAndroid Build Coastguard Worker	mul	eax
1249*8fb009dcSAndroid Build Coastguard Worker	add	ebx,eax
1250*8fb009dcSAndroid Build Coastguard Worker	adc	ecx,edx
1251*8fb009dcSAndroid Build Coastguard Worker	adc	ebp,0
1252*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [24+edi],ebx
1253*8fb009dcSAndroid Build Coastguard Worker	; saved r[6]
1254*8fb009dcSAndroid Build Coastguard Worker	mov	DWORD [28+edi],ecx
1255*8fb009dcSAndroid Build Coastguard Worker	pop	ebx
1256*8fb009dcSAndroid Build Coastguard Worker	pop	ebp
1257*8fb009dcSAndroid Build Coastguard Worker	pop	edi
1258*8fb009dcSAndroid Build Coastguard Worker	pop	esi
1259*8fb009dcSAndroid Build Coastguard Worker	ret
1260*8fb009dcSAndroid Build Coastguard Worker%else
1261*8fb009dcSAndroid Build Coastguard Worker; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
1262*8fb009dcSAndroid Build Coastguard Workerret
1263*8fb009dcSAndroid Build Coastguard Worker%endif
1264