1e1051a39Sopenharmony_ci.ident	"sparcv8.s, Version 1.4"
2e1051a39Sopenharmony_ci.ident	"SPARC v8 ISA artwork by Andy Polyakov <appro@openssl.org>"
3e1051a39Sopenharmony_ci
4e1051a39Sopenharmony_ci/*
5e1051a39Sopenharmony_ci * ====================================================================
6e1051a39Sopenharmony_ci * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
7e1051a39Sopenharmony_ci *
8e1051a39Sopenharmony_ci * Licensed under the Apache License 2.0 (the "License").  You may not use
9e1051a39Sopenharmony_ci * this file except in compliance with the License.  You can obtain a copy
10e1051a39Sopenharmony_ci * in the file LICENSE in the source distribution or at
11e1051a39Sopenharmony_ci * https://www.openssl.org/source/license.html
12e1051a39Sopenharmony_ci * ====================================================================
13e1051a39Sopenharmony_ci */
14e1051a39Sopenharmony_ci
15e1051a39Sopenharmony_ci/*
16e1051a39Sopenharmony_ci * This is my modest contribution to OpenSSL project (see
17e1051a39Sopenharmony_ci * http://www.openssl.org/ for more information about it) and is
18e1051a39Sopenharmony_ci * a drop-in SuperSPARC ISA replacement for crypto/bn/bn_asm.c
19e1051a39Sopenharmony_ci * module. For updates see http://fy.chalmers.se/~appro/hpe/.
20e1051a39Sopenharmony_ci *
21e1051a39Sopenharmony_ci * See bn_asm.sparc.v8plus.S for more details.
22e1051a39Sopenharmony_ci */
23e1051a39Sopenharmony_ci
24e1051a39Sopenharmony_ci/*
25e1051a39Sopenharmony_ci * Revision history.
26e1051a39Sopenharmony_ci *
27e1051a39Sopenharmony_ci * 1.1	- new loop unrolling model(*);
28e1051a39Sopenharmony_ci * 1.2	- made gas friendly;
29e1051a39Sopenharmony_ci * 1.3	- fixed problem with /usr/ccs/lib/cpp;
30e1051a39Sopenharmony_ci * 1.4	- some retunes;
31e1051a39Sopenharmony_ci *
32e1051a39Sopenharmony_ci * (*)	see bn_asm.sparc.v8plus.S for details
33e1051a39Sopenharmony_ci */
34e1051a39Sopenharmony_ci
35e1051a39Sopenharmony_ci.section	".text",#alloc,#execinstr
36e1051a39Sopenharmony_ci.file		"bn_asm.sparc.v8.S"
37e1051a39Sopenharmony_ci
38e1051a39Sopenharmony_ci.align	32
39e1051a39Sopenharmony_ci
40e1051a39Sopenharmony_ci.global bn_mul_add_words
41e1051a39Sopenharmony_ci/*
42e1051a39Sopenharmony_ci * BN_ULONG bn_mul_add_words(rp,ap,num,w)
43e1051a39Sopenharmony_ci * BN_ULONG *rp,*ap;
44e1051a39Sopenharmony_ci * int num;
45e1051a39Sopenharmony_ci * BN_ULONG w;
46e1051a39Sopenharmony_ci */
47e1051a39Sopenharmony_cibn_mul_add_words:
48e1051a39Sopenharmony_ci	cmp	%o2,0
49e1051a39Sopenharmony_ci	bg,a	.L_bn_mul_add_words_proceed
50e1051a39Sopenharmony_ci	ld	[%o1],%g2
51e1051a39Sopenharmony_ci	retl
52e1051a39Sopenharmony_ci	clr	%o0
53e1051a39Sopenharmony_ci
54e1051a39Sopenharmony_ci.L_bn_mul_add_words_proceed:
55e1051a39Sopenharmony_ci	andcc	%o2,-4,%g0
56e1051a39Sopenharmony_ci	bz	.L_bn_mul_add_words_tail
57e1051a39Sopenharmony_ci	clr	%o5
58e1051a39Sopenharmony_ci
59e1051a39Sopenharmony_ci.L_bn_mul_add_words_loop:
60e1051a39Sopenharmony_ci	ld	[%o0],%o4
61e1051a39Sopenharmony_ci	ld	[%o1+4],%g3
62e1051a39Sopenharmony_ci	umul	%o3,%g2,%g2
63e1051a39Sopenharmony_ci	rd	%y,%g1
64e1051a39Sopenharmony_ci	addcc	%o4,%o5,%o4
65e1051a39Sopenharmony_ci	addx	%g1,0,%g1
66e1051a39Sopenharmony_ci	addcc	%o4,%g2,%o4
67e1051a39Sopenharmony_ci	st	%o4,[%o0]
68e1051a39Sopenharmony_ci	addx	%g1,0,%o5
69e1051a39Sopenharmony_ci
70e1051a39Sopenharmony_ci	ld	[%o0+4],%o4
71e1051a39Sopenharmony_ci	ld	[%o1+8],%g2
72e1051a39Sopenharmony_ci	umul	%o3,%g3,%g3
73e1051a39Sopenharmony_ci	dec	4,%o2
74e1051a39Sopenharmony_ci	rd	%y,%g1
75e1051a39Sopenharmony_ci	addcc	%o4,%o5,%o4
76e1051a39Sopenharmony_ci	addx	%g1,0,%g1
77e1051a39Sopenharmony_ci	addcc	%o4,%g3,%o4
78e1051a39Sopenharmony_ci	st	%o4,[%o0+4]
79e1051a39Sopenharmony_ci	addx	%g1,0,%o5
80e1051a39Sopenharmony_ci
81e1051a39Sopenharmony_ci	ld	[%o0+8],%o4
82e1051a39Sopenharmony_ci	ld	[%o1+12],%g3
83e1051a39Sopenharmony_ci	umul	%o3,%g2,%g2
84e1051a39Sopenharmony_ci	inc	16,%o1
85e1051a39Sopenharmony_ci	rd	%y,%g1
86e1051a39Sopenharmony_ci	addcc	%o4,%o5,%o4
87e1051a39Sopenharmony_ci	addx	%g1,0,%g1
88e1051a39Sopenharmony_ci	addcc	%o4,%g2,%o4
89e1051a39Sopenharmony_ci	st	%o4,[%o0+8]
90e1051a39Sopenharmony_ci	addx	%g1,0,%o5
91e1051a39Sopenharmony_ci
92e1051a39Sopenharmony_ci	ld	[%o0+12],%o4
93e1051a39Sopenharmony_ci	umul	%o3,%g3,%g3
94e1051a39Sopenharmony_ci	inc	16,%o0
95e1051a39Sopenharmony_ci	rd	%y,%g1
96e1051a39Sopenharmony_ci	addcc	%o4,%o5,%o4
97e1051a39Sopenharmony_ci	addx	%g1,0,%g1
98e1051a39Sopenharmony_ci	addcc	%o4,%g3,%o4
99e1051a39Sopenharmony_ci	st	%o4,[%o0-4]
100e1051a39Sopenharmony_ci	addx	%g1,0,%o5
101e1051a39Sopenharmony_ci	andcc	%o2,-4,%g0
102e1051a39Sopenharmony_ci	bnz,a	.L_bn_mul_add_words_loop
103e1051a39Sopenharmony_ci	ld	[%o1],%g2
104e1051a39Sopenharmony_ci
105e1051a39Sopenharmony_ci	tst	%o2
106e1051a39Sopenharmony_ci	bnz,a	.L_bn_mul_add_words_tail
107e1051a39Sopenharmony_ci	ld	[%o1],%g2
108e1051a39Sopenharmony_ci.L_bn_mul_add_words_return:
109e1051a39Sopenharmony_ci	retl
110e1051a39Sopenharmony_ci	mov	%o5,%o0
111e1051a39Sopenharmony_ci	nop
112e1051a39Sopenharmony_ci
113e1051a39Sopenharmony_ci.L_bn_mul_add_words_tail:
114e1051a39Sopenharmony_ci	ld	[%o0],%o4
115e1051a39Sopenharmony_ci	umul	%o3,%g2,%g2
116e1051a39Sopenharmony_ci	addcc	%o4,%o5,%o4
117e1051a39Sopenharmony_ci	rd	%y,%g1
118e1051a39Sopenharmony_ci	addx	%g1,0,%g1
119e1051a39Sopenharmony_ci	addcc	%o4,%g2,%o4
120e1051a39Sopenharmony_ci	addx	%g1,0,%o5
121e1051a39Sopenharmony_ci	deccc	%o2
122e1051a39Sopenharmony_ci	bz	.L_bn_mul_add_words_return
123e1051a39Sopenharmony_ci	st	%o4,[%o0]
124e1051a39Sopenharmony_ci
125e1051a39Sopenharmony_ci	ld	[%o1+4],%g2
126e1051a39Sopenharmony_ci	ld	[%o0+4],%o4
127e1051a39Sopenharmony_ci	umul	%o3,%g2,%g2
128e1051a39Sopenharmony_ci	rd	%y,%g1
129e1051a39Sopenharmony_ci	addcc	%o4,%o5,%o4
130e1051a39Sopenharmony_ci	addx	%g1,0,%g1
131e1051a39Sopenharmony_ci	addcc	%o4,%g2,%o4
132e1051a39Sopenharmony_ci	addx	%g1,0,%o5
133e1051a39Sopenharmony_ci	deccc	%o2
134e1051a39Sopenharmony_ci	bz	.L_bn_mul_add_words_return
135e1051a39Sopenharmony_ci	st	%o4,[%o0+4]
136e1051a39Sopenharmony_ci
137e1051a39Sopenharmony_ci	ld	[%o1+8],%g2
138e1051a39Sopenharmony_ci	ld	[%o0+8],%o4
139e1051a39Sopenharmony_ci	umul	%o3,%g2,%g2
140e1051a39Sopenharmony_ci	rd	%y,%g1
141e1051a39Sopenharmony_ci	addcc	%o4,%o5,%o4
142e1051a39Sopenharmony_ci	addx	%g1,0,%g1
143e1051a39Sopenharmony_ci	addcc	%o4,%g2,%o4
144e1051a39Sopenharmony_ci	st	%o4,[%o0+8]
145e1051a39Sopenharmony_ci	retl
146e1051a39Sopenharmony_ci	addx	%g1,0,%o0
147e1051a39Sopenharmony_ci
148e1051a39Sopenharmony_ci.type	bn_mul_add_words,#function
149e1051a39Sopenharmony_ci.size	bn_mul_add_words,(.-bn_mul_add_words)
150e1051a39Sopenharmony_ci
151e1051a39Sopenharmony_ci.align	32
152e1051a39Sopenharmony_ci
153e1051a39Sopenharmony_ci.global bn_mul_words
154e1051a39Sopenharmony_ci/*
155e1051a39Sopenharmony_ci * BN_ULONG bn_mul_words(rp,ap,num,w)
156e1051a39Sopenharmony_ci * BN_ULONG *rp,*ap;
157e1051a39Sopenharmony_ci * int num;
158e1051a39Sopenharmony_ci * BN_ULONG w;
159e1051a39Sopenharmony_ci */
160e1051a39Sopenharmony_cibn_mul_words:
161e1051a39Sopenharmony_ci	cmp	%o2,0
162e1051a39Sopenharmony_ci	bg,a	.L_bn_mul_words_proceed
163e1051a39Sopenharmony_ci	ld	[%o1],%g2
164e1051a39Sopenharmony_ci	retl
165e1051a39Sopenharmony_ci	clr	%o0
166e1051a39Sopenharmony_ci
167e1051a39Sopenharmony_ci.L_bn_mul_words_proceed:
168e1051a39Sopenharmony_ci	andcc	%o2,-4,%g0
169e1051a39Sopenharmony_ci	bz	.L_bn_mul_words_tail
170e1051a39Sopenharmony_ci	clr	%o5
171e1051a39Sopenharmony_ci
172e1051a39Sopenharmony_ci.L_bn_mul_words_loop:
173e1051a39Sopenharmony_ci	ld	[%o1+4],%g3
174e1051a39Sopenharmony_ci	umul	%o3,%g2,%g2
175e1051a39Sopenharmony_ci	addcc	%g2,%o5,%g2
176e1051a39Sopenharmony_ci	rd	%y,%g1
177e1051a39Sopenharmony_ci	addx	%g1,0,%o5
178e1051a39Sopenharmony_ci	st	%g2,[%o0]
179e1051a39Sopenharmony_ci
180e1051a39Sopenharmony_ci	ld	[%o1+8],%g2
181e1051a39Sopenharmony_ci	umul	%o3,%g3,%g3
182e1051a39Sopenharmony_ci	addcc	%g3,%o5,%g3
183e1051a39Sopenharmony_ci	rd	%y,%g1
184e1051a39Sopenharmony_ci	dec	4,%o2
185e1051a39Sopenharmony_ci	addx	%g1,0,%o5
186e1051a39Sopenharmony_ci	st	%g3,[%o0+4]
187e1051a39Sopenharmony_ci
188e1051a39Sopenharmony_ci	ld	[%o1+12],%g3
189e1051a39Sopenharmony_ci	umul	%o3,%g2,%g2
190e1051a39Sopenharmony_ci	addcc	%g2,%o5,%g2
191e1051a39Sopenharmony_ci	rd	%y,%g1
192e1051a39Sopenharmony_ci	inc	16,%o1
193e1051a39Sopenharmony_ci	st	%g2,[%o0+8]
194e1051a39Sopenharmony_ci	addx	%g1,0,%o5
195e1051a39Sopenharmony_ci
196e1051a39Sopenharmony_ci	umul	%o3,%g3,%g3
197e1051a39Sopenharmony_ci	addcc	%g3,%o5,%g3
198e1051a39Sopenharmony_ci	rd	%y,%g1
199e1051a39Sopenharmony_ci	inc	16,%o0
200e1051a39Sopenharmony_ci	addx	%g1,0,%o5
201e1051a39Sopenharmony_ci	st	%g3,[%o0-4]
202e1051a39Sopenharmony_ci	andcc	%o2,-4,%g0
203e1051a39Sopenharmony_ci	nop
204e1051a39Sopenharmony_ci	bnz,a	.L_bn_mul_words_loop
205e1051a39Sopenharmony_ci	ld	[%o1],%g2
206e1051a39Sopenharmony_ci
207e1051a39Sopenharmony_ci	tst	%o2
208e1051a39Sopenharmony_ci	bnz,a	.L_bn_mul_words_tail
209e1051a39Sopenharmony_ci	ld	[%o1],%g2
210e1051a39Sopenharmony_ci.L_bn_mul_words_return:
211e1051a39Sopenharmony_ci	retl
212e1051a39Sopenharmony_ci	mov	%o5,%o0
213e1051a39Sopenharmony_ci	nop
214e1051a39Sopenharmony_ci
215e1051a39Sopenharmony_ci.L_bn_mul_words_tail:
216e1051a39Sopenharmony_ci	umul	%o3,%g2,%g2
217e1051a39Sopenharmony_ci	addcc	%g2,%o5,%g2
218e1051a39Sopenharmony_ci	rd	%y,%g1
219e1051a39Sopenharmony_ci	addx	%g1,0,%o5
220e1051a39Sopenharmony_ci	deccc	%o2
221e1051a39Sopenharmony_ci	bz	.L_bn_mul_words_return
222e1051a39Sopenharmony_ci	st	%g2,[%o0]
223e1051a39Sopenharmony_ci	nop
224e1051a39Sopenharmony_ci
225e1051a39Sopenharmony_ci	ld	[%o1+4],%g2
226e1051a39Sopenharmony_ci	umul	%o3,%g2,%g2
227e1051a39Sopenharmony_ci	addcc	%g2,%o5,%g2
228e1051a39Sopenharmony_ci	rd	%y,%g1
229e1051a39Sopenharmony_ci	addx	%g1,0,%o5
230e1051a39Sopenharmony_ci	deccc	%o2
231e1051a39Sopenharmony_ci	bz	.L_bn_mul_words_return
232e1051a39Sopenharmony_ci	st	%g2,[%o0+4]
233e1051a39Sopenharmony_ci
234e1051a39Sopenharmony_ci	ld	[%o1+8],%g2
235e1051a39Sopenharmony_ci	umul	%o3,%g2,%g2
236e1051a39Sopenharmony_ci	addcc	%g2,%o5,%g2
237e1051a39Sopenharmony_ci	rd	%y,%g1
238e1051a39Sopenharmony_ci	st	%g2,[%o0+8]
239e1051a39Sopenharmony_ci	retl
240e1051a39Sopenharmony_ci	addx	%g1,0,%o0
241e1051a39Sopenharmony_ci
242e1051a39Sopenharmony_ci.type	bn_mul_words,#function
243e1051a39Sopenharmony_ci.size	bn_mul_words,(.-bn_mul_words)
244e1051a39Sopenharmony_ci
245e1051a39Sopenharmony_ci.align  32
246e1051a39Sopenharmony_ci.global	bn_sqr_words
247e1051a39Sopenharmony_ci/*
248e1051a39Sopenharmony_ci * void bn_sqr_words(r,a,n)
249e1051a39Sopenharmony_ci * BN_ULONG *r,*a;
250e1051a39Sopenharmony_ci * int n;
251e1051a39Sopenharmony_ci */
252e1051a39Sopenharmony_cibn_sqr_words:
253e1051a39Sopenharmony_ci	cmp	%o2,0
254e1051a39Sopenharmony_ci	bg,a	.L_bn_sqr_words_proceed
255e1051a39Sopenharmony_ci	ld	[%o1],%g2
256e1051a39Sopenharmony_ci	retl
257e1051a39Sopenharmony_ci	clr	%o0
258e1051a39Sopenharmony_ci
259e1051a39Sopenharmony_ci.L_bn_sqr_words_proceed:
260e1051a39Sopenharmony_ci	andcc	%o2,-4,%g0
261e1051a39Sopenharmony_ci	bz	.L_bn_sqr_words_tail
262e1051a39Sopenharmony_ci	clr	%o5
263e1051a39Sopenharmony_ci
264e1051a39Sopenharmony_ci.L_bn_sqr_words_loop:
265e1051a39Sopenharmony_ci	ld	[%o1+4],%g3
266e1051a39Sopenharmony_ci	umul	%g2,%g2,%o4
267e1051a39Sopenharmony_ci	st	%o4,[%o0]
268e1051a39Sopenharmony_ci	rd	%y,%o5
269e1051a39Sopenharmony_ci	st	%o5,[%o0+4]
270e1051a39Sopenharmony_ci
271e1051a39Sopenharmony_ci	ld	[%o1+8],%g2
272e1051a39Sopenharmony_ci	umul	%g3,%g3,%o4
273e1051a39Sopenharmony_ci	dec	4,%o2
274e1051a39Sopenharmony_ci	st	%o4,[%o0+8]
275e1051a39Sopenharmony_ci	rd	%y,%o5
276e1051a39Sopenharmony_ci	st	%o5,[%o0+12]
277e1051a39Sopenharmony_ci	nop
278e1051a39Sopenharmony_ci
279e1051a39Sopenharmony_ci	ld	[%o1+12],%g3
280e1051a39Sopenharmony_ci	umul	%g2,%g2,%o4
281e1051a39Sopenharmony_ci	st	%o4,[%o0+16]
282e1051a39Sopenharmony_ci	rd	%y,%o5
283e1051a39Sopenharmony_ci	inc	16,%o1
284e1051a39Sopenharmony_ci	st	%o5,[%o0+20]
285e1051a39Sopenharmony_ci
286e1051a39Sopenharmony_ci	umul	%g3,%g3,%o4
287e1051a39Sopenharmony_ci	inc	32,%o0
288e1051a39Sopenharmony_ci	st	%o4,[%o0-8]
289e1051a39Sopenharmony_ci	rd	%y,%o5
290e1051a39Sopenharmony_ci	st	%o5,[%o0-4]
291e1051a39Sopenharmony_ci	andcc	%o2,-4,%g2
292e1051a39Sopenharmony_ci	bnz,a	.L_bn_sqr_words_loop
293e1051a39Sopenharmony_ci	ld	[%o1],%g2
294e1051a39Sopenharmony_ci
295e1051a39Sopenharmony_ci	tst	%o2
296e1051a39Sopenharmony_ci	nop
297e1051a39Sopenharmony_ci	bnz,a	.L_bn_sqr_words_tail
298e1051a39Sopenharmony_ci	ld	[%o1],%g2
299e1051a39Sopenharmony_ci.L_bn_sqr_words_return:
300e1051a39Sopenharmony_ci	retl
301e1051a39Sopenharmony_ci	clr	%o0
302e1051a39Sopenharmony_ci
303e1051a39Sopenharmony_ci.L_bn_sqr_words_tail:
304e1051a39Sopenharmony_ci	umul	%g2,%g2,%o4
305e1051a39Sopenharmony_ci	st	%o4,[%o0]
306e1051a39Sopenharmony_ci	deccc	%o2
307e1051a39Sopenharmony_ci	rd	%y,%o5
308e1051a39Sopenharmony_ci	bz	.L_bn_sqr_words_return
309e1051a39Sopenharmony_ci	st	%o5,[%o0+4]
310e1051a39Sopenharmony_ci
311e1051a39Sopenharmony_ci	ld	[%o1+4],%g2
312e1051a39Sopenharmony_ci	umul	%g2,%g2,%o4
313e1051a39Sopenharmony_ci	st	%o4,[%o0+8]
314e1051a39Sopenharmony_ci	deccc	%o2
315e1051a39Sopenharmony_ci	rd	%y,%o5
316e1051a39Sopenharmony_ci	nop
317e1051a39Sopenharmony_ci	bz	.L_bn_sqr_words_return
318e1051a39Sopenharmony_ci	st	%o5,[%o0+12]
319e1051a39Sopenharmony_ci
320e1051a39Sopenharmony_ci	ld	[%o1+8],%g2
321e1051a39Sopenharmony_ci	umul	%g2,%g2,%o4
322e1051a39Sopenharmony_ci	st	%o4,[%o0+16]
323e1051a39Sopenharmony_ci	rd	%y,%o5
324e1051a39Sopenharmony_ci	st	%o5,[%o0+20]
325e1051a39Sopenharmony_ci	retl
326e1051a39Sopenharmony_ci	clr	%o0
327e1051a39Sopenharmony_ci
328e1051a39Sopenharmony_ci.type	bn_sqr_words,#function
329e1051a39Sopenharmony_ci.size	bn_sqr_words,(.-bn_sqr_words)
330e1051a39Sopenharmony_ci
331e1051a39Sopenharmony_ci.align	32
332e1051a39Sopenharmony_ci
333e1051a39Sopenharmony_ci.global bn_div_words
334e1051a39Sopenharmony_ci/*
335e1051a39Sopenharmony_ci * BN_ULONG bn_div_words(h,l,d)
336e1051a39Sopenharmony_ci * BN_ULONG h,l,d;
337e1051a39Sopenharmony_ci */
338e1051a39Sopenharmony_cibn_div_words:
339e1051a39Sopenharmony_ci	wr	%o0,%y
340e1051a39Sopenharmony_ci	udiv	%o1,%o2,%o0
341e1051a39Sopenharmony_ci	retl
342e1051a39Sopenharmony_ci	nop
343e1051a39Sopenharmony_ci
344e1051a39Sopenharmony_ci.type	bn_div_words,#function
345e1051a39Sopenharmony_ci.size	bn_div_words,(.-bn_div_words)
346e1051a39Sopenharmony_ci
347e1051a39Sopenharmony_ci.align	32
348e1051a39Sopenharmony_ci
349e1051a39Sopenharmony_ci.global bn_add_words
350e1051a39Sopenharmony_ci/*
351e1051a39Sopenharmony_ci * BN_ULONG bn_add_words(rp,ap,bp,n)
352e1051a39Sopenharmony_ci * BN_ULONG *rp,*ap,*bp;
353e1051a39Sopenharmony_ci * int n;
354e1051a39Sopenharmony_ci */
355e1051a39Sopenharmony_cibn_add_words:
356e1051a39Sopenharmony_ci	cmp	%o3,0
357e1051a39Sopenharmony_ci	bg,a	.L_bn_add_words_proceed
358e1051a39Sopenharmony_ci	ld	[%o1],%o4
359e1051a39Sopenharmony_ci	retl
360e1051a39Sopenharmony_ci	clr	%o0
361e1051a39Sopenharmony_ci
362e1051a39Sopenharmony_ci.L_bn_add_words_proceed:
363e1051a39Sopenharmony_ci	andcc	%o3,-4,%g0
364e1051a39Sopenharmony_ci	bz	.L_bn_add_words_tail
365e1051a39Sopenharmony_ci	clr	%g1
366e1051a39Sopenharmony_ci	ba	.L_bn_add_words_warn_loop
367e1051a39Sopenharmony_ci	addcc	%g0,0,%g0	! clear carry flag
368e1051a39Sopenharmony_ci
369e1051a39Sopenharmony_ci.L_bn_add_words_loop:
370e1051a39Sopenharmony_ci	ld	[%o1],%o4
371e1051a39Sopenharmony_ci.L_bn_add_words_warn_loop:
372e1051a39Sopenharmony_ci	ld	[%o2],%o5
373e1051a39Sopenharmony_ci	ld	[%o1+4],%g3
374e1051a39Sopenharmony_ci	ld	[%o2+4],%g4
375e1051a39Sopenharmony_ci	dec	4,%o3
376e1051a39Sopenharmony_ci	addxcc	%o5,%o4,%o5
377e1051a39Sopenharmony_ci	st	%o5,[%o0]
378e1051a39Sopenharmony_ci
379e1051a39Sopenharmony_ci	ld	[%o1+8],%o4
380e1051a39Sopenharmony_ci	ld	[%o2+8],%o5
381e1051a39Sopenharmony_ci	inc	16,%o1
382e1051a39Sopenharmony_ci	addxcc	%g3,%g4,%g3
383e1051a39Sopenharmony_ci	st	%g3,[%o0+4]
384e1051a39Sopenharmony_ci
385e1051a39Sopenharmony_ci	ld	[%o1-4],%g3
386e1051a39Sopenharmony_ci	ld	[%o2+12],%g4
387e1051a39Sopenharmony_ci	inc	16,%o2
388e1051a39Sopenharmony_ci	addxcc	%o5,%o4,%o5
389e1051a39Sopenharmony_ci	st	%o5,[%o0+8]
390e1051a39Sopenharmony_ci
391e1051a39Sopenharmony_ci	inc	16,%o0
392e1051a39Sopenharmony_ci	addxcc	%g3,%g4,%g3
393e1051a39Sopenharmony_ci	st	%g3,[%o0-4]
394e1051a39Sopenharmony_ci	addx	%g0,0,%g1
395e1051a39Sopenharmony_ci	andcc	%o3,-4,%g0
396e1051a39Sopenharmony_ci	bnz,a	.L_bn_add_words_loop
397e1051a39Sopenharmony_ci	addcc	%g1,-1,%g0
398e1051a39Sopenharmony_ci
399e1051a39Sopenharmony_ci	tst	%o3
400e1051a39Sopenharmony_ci	bnz,a	.L_bn_add_words_tail
401e1051a39Sopenharmony_ci	ld	[%o1],%o4
402e1051a39Sopenharmony_ci.L_bn_add_words_return:
403e1051a39Sopenharmony_ci	retl
404e1051a39Sopenharmony_ci	mov	%g1,%o0
405e1051a39Sopenharmony_ci
406e1051a39Sopenharmony_ci.L_bn_add_words_tail:
407e1051a39Sopenharmony_ci	addcc	%g1,-1,%g0
408e1051a39Sopenharmony_ci	ld	[%o2],%o5
409e1051a39Sopenharmony_ci	addxcc	%o5,%o4,%o5
410e1051a39Sopenharmony_ci	addx	%g0,0,%g1
411e1051a39Sopenharmony_ci	deccc	%o3
412e1051a39Sopenharmony_ci	bz	.L_bn_add_words_return
413e1051a39Sopenharmony_ci	st	%o5,[%o0]
414e1051a39Sopenharmony_ci
415e1051a39Sopenharmony_ci	ld	[%o1+4],%o4
416e1051a39Sopenharmony_ci	addcc	%g1,-1,%g0
417e1051a39Sopenharmony_ci	ld	[%o2+4],%o5
418e1051a39Sopenharmony_ci	addxcc	%o5,%o4,%o5
419e1051a39Sopenharmony_ci	addx	%g0,0,%g1
420e1051a39Sopenharmony_ci	deccc	%o3
421e1051a39Sopenharmony_ci	bz	.L_bn_add_words_return
422e1051a39Sopenharmony_ci	st	%o5,[%o0+4]
423e1051a39Sopenharmony_ci
424e1051a39Sopenharmony_ci	ld	[%o1+8],%o4
425e1051a39Sopenharmony_ci	addcc	%g1,-1,%g0
426e1051a39Sopenharmony_ci	ld	[%o2+8],%o5
427e1051a39Sopenharmony_ci	addxcc	%o5,%o4,%o5
428e1051a39Sopenharmony_ci	st	%o5,[%o0+8]
429e1051a39Sopenharmony_ci	retl
430e1051a39Sopenharmony_ci	addx	%g0,0,%o0
431e1051a39Sopenharmony_ci
432e1051a39Sopenharmony_ci.type	bn_add_words,#function
433e1051a39Sopenharmony_ci.size	bn_add_words,(.-bn_add_words)
434e1051a39Sopenharmony_ci
435e1051a39Sopenharmony_ci.align	32
436e1051a39Sopenharmony_ci
437e1051a39Sopenharmony_ci.global bn_sub_words
438e1051a39Sopenharmony_ci/*
439e1051a39Sopenharmony_ci * BN_ULONG bn_sub_words(rp,ap,bp,n)
440e1051a39Sopenharmony_ci * BN_ULONG *rp,*ap,*bp;
441e1051a39Sopenharmony_ci * int n;
442e1051a39Sopenharmony_ci */
443e1051a39Sopenharmony_cibn_sub_words:
444e1051a39Sopenharmony_ci	cmp	%o3,0
445e1051a39Sopenharmony_ci	bg,a	.L_bn_sub_words_proceed
446e1051a39Sopenharmony_ci	ld	[%o1],%o4
447e1051a39Sopenharmony_ci	retl
448e1051a39Sopenharmony_ci	clr	%o0
449e1051a39Sopenharmony_ci
450e1051a39Sopenharmony_ci.L_bn_sub_words_proceed:
451e1051a39Sopenharmony_ci	andcc	%o3,-4,%g0
452e1051a39Sopenharmony_ci	bz	.L_bn_sub_words_tail
453e1051a39Sopenharmony_ci	clr	%g1
454e1051a39Sopenharmony_ci	ba	.L_bn_sub_words_warm_loop
455e1051a39Sopenharmony_ci	addcc	%g0,0,%g0	! clear carry flag
456e1051a39Sopenharmony_ci
457e1051a39Sopenharmony_ci.L_bn_sub_words_loop:
458e1051a39Sopenharmony_ci	ld	[%o1],%o4
459e1051a39Sopenharmony_ci.L_bn_sub_words_warm_loop:
460e1051a39Sopenharmony_ci	ld	[%o2],%o5
461e1051a39Sopenharmony_ci	ld	[%o1+4],%g3
462e1051a39Sopenharmony_ci	ld	[%o2+4],%g4
463e1051a39Sopenharmony_ci	dec	4,%o3
464e1051a39Sopenharmony_ci	subxcc	%o4,%o5,%o5
465e1051a39Sopenharmony_ci	st	%o5,[%o0]
466e1051a39Sopenharmony_ci
467e1051a39Sopenharmony_ci	ld	[%o1+8],%o4
468e1051a39Sopenharmony_ci	ld	[%o2+8],%o5
469e1051a39Sopenharmony_ci	inc	16,%o1
470e1051a39Sopenharmony_ci	subxcc	%g3,%g4,%g4
471e1051a39Sopenharmony_ci	st	%g4,[%o0+4]
472e1051a39Sopenharmony_ci
473e1051a39Sopenharmony_ci	ld	[%o1-4],%g3
474e1051a39Sopenharmony_ci	ld	[%o2+12],%g4
475e1051a39Sopenharmony_ci	inc	16,%o2
476e1051a39Sopenharmony_ci	subxcc	%o4,%o5,%o5
477e1051a39Sopenharmony_ci	st	%o5,[%o0+8]
478e1051a39Sopenharmony_ci
479e1051a39Sopenharmony_ci	inc	16,%o0
480e1051a39Sopenharmony_ci	subxcc	%g3,%g4,%g4
481e1051a39Sopenharmony_ci	st	%g4,[%o0-4]
482e1051a39Sopenharmony_ci	addx	%g0,0,%g1
483e1051a39Sopenharmony_ci	andcc	%o3,-4,%g0
484e1051a39Sopenharmony_ci	bnz,a	.L_bn_sub_words_loop
485e1051a39Sopenharmony_ci	addcc	%g1,-1,%g0
486e1051a39Sopenharmony_ci
487e1051a39Sopenharmony_ci	tst	%o3
488e1051a39Sopenharmony_ci	nop
489e1051a39Sopenharmony_ci	bnz,a	.L_bn_sub_words_tail
490e1051a39Sopenharmony_ci	ld	[%o1],%o4
491e1051a39Sopenharmony_ci.L_bn_sub_words_return:
492e1051a39Sopenharmony_ci	retl
493e1051a39Sopenharmony_ci	mov	%g1,%o0
494e1051a39Sopenharmony_ci
495e1051a39Sopenharmony_ci.L_bn_sub_words_tail:
496e1051a39Sopenharmony_ci	addcc	%g1,-1,%g0
497e1051a39Sopenharmony_ci	ld	[%o2],%o5
498e1051a39Sopenharmony_ci	subxcc	%o4,%o5,%o5
499e1051a39Sopenharmony_ci	addx	%g0,0,%g1
500e1051a39Sopenharmony_ci	deccc	%o3
501e1051a39Sopenharmony_ci	bz	.L_bn_sub_words_return
502e1051a39Sopenharmony_ci	st	%o5,[%o0]
503e1051a39Sopenharmony_ci	nop
504e1051a39Sopenharmony_ci
505e1051a39Sopenharmony_ci	ld	[%o1+4],%o4
506e1051a39Sopenharmony_ci	addcc	%g1,-1,%g0
507e1051a39Sopenharmony_ci	ld	[%o2+4],%o5
508e1051a39Sopenharmony_ci	subxcc	%o4,%o5,%o5
509e1051a39Sopenharmony_ci	addx	%g0,0,%g1
510e1051a39Sopenharmony_ci	deccc	%o3
511e1051a39Sopenharmony_ci	bz	.L_bn_sub_words_return
512e1051a39Sopenharmony_ci	st	%o5,[%o0+4]
513e1051a39Sopenharmony_ci
514e1051a39Sopenharmony_ci	ld	[%o1+8],%o4
515e1051a39Sopenharmony_ci	addcc	%g1,-1,%g0
516e1051a39Sopenharmony_ci	ld	[%o2+8],%o5
517e1051a39Sopenharmony_ci	subxcc	%o4,%o5,%o5
518e1051a39Sopenharmony_ci	st	%o5,[%o0+8]
519e1051a39Sopenharmony_ci	retl
520e1051a39Sopenharmony_ci	addx	%g0,0,%o0
521e1051a39Sopenharmony_ci
522e1051a39Sopenharmony_ci.type	bn_sub_words,#function
523e1051a39Sopenharmony_ci.size	bn_sub_words,(.-bn_sub_words)
524e1051a39Sopenharmony_ci
525e1051a39Sopenharmony_ci#define FRAME_SIZE	-96
526e1051a39Sopenharmony_ci
527e1051a39Sopenharmony_ci/*
528e1051a39Sopenharmony_ci * Here is register usage map for *all* routines below.
529e1051a39Sopenharmony_ci */
530e1051a39Sopenharmony_ci#define t_1	%o0
531e1051a39Sopenharmony_ci#define	t_2	%o1
532e1051a39Sopenharmony_ci#define c_1	%o2
533e1051a39Sopenharmony_ci#define c_2	%o3
534e1051a39Sopenharmony_ci#define c_3	%o4
535e1051a39Sopenharmony_ci
536e1051a39Sopenharmony_ci#define ap(I)	[%i1+4*I]
537e1051a39Sopenharmony_ci#define bp(I)	[%i2+4*I]
538e1051a39Sopenharmony_ci#define rp(I)	[%i0+4*I]
539e1051a39Sopenharmony_ci
540e1051a39Sopenharmony_ci#define	a_0	%l0
541e1051a39Sopenharmony_ci#define	a_1	%l1
542e1051a39Sopenharmony_ci#define	a_2	%l2
543e1051a39Sopenharmony_ci#define	a_3	%l3
544e1051a39Sopenharmony_ci#define	a_4	%l4
545e1051a39Sopenharmony_ci#define	a_5	%l5
546e1051a39Sopenharmony_ci#define	a_6	%l6
547e1051a39Sopenharmony_ci#define	a_7	%l7
548e1051a39Sopenharmony_ci
549e1051a39Sopenharmony_ci#define	b_0	%i3
550e1051a39Sopenharmony_ci#define	b_1	%i4
551e1051a39Sopenharmony_ci#define	b_2	%i5
552e1051a39Sopenharmony_ci#define	b_3	%o5
553e1051a39Sopenharmony_ci#define	b_4	%g1
554e1051a39Sopenharmony_ci#define	b_5	%g2
555e1051a39Sopenharmony_ci#define	b_6	%g3
556e1051a39Sopenharmony_ci#define	b_7	%g4
557e1051a39Sopenharmony_ci
558e1051a39Sopenharmony_ci.align	32
559e1051a39Sopenharmony_ci.global bn_mul_comba8
560e1051a39Sopenharmony_ci/*
561e1051a39Sopenharmony_ci * void bn_mul_comba8(r,a,b)
562e1051a39Sopenharmony_ci * BN_ULONG *r,*a,*b;
563e1051a39Sopenharmony_ci */
564e1051a39Sopenharmony_cibn_mul_comba8:
565e1051a39Sopenharmony_ci	save	%sp,FRAME_SIZE,%sp
566e1051a39Sopenharmony_ci	ld	ap(0),a_0
567e1051a39Sopenharmony_ci	ld	bp(0),b_0
568e1051a39Sopenharmony_ci	umul	a_0,b_0,c_1	!=!mul_add_c(a[0],b[0],c1,c2,c3);
569e1051a39Sopenharmony_ci	ld	bp(1),b_1
570e1051a39Sopenharmony_ci	rd	%y,c_2
571e1051a39Sopenharmony_ci	st	c_1,rp(0)	!r[0]=c1;
572e1051a39Sopenharmony_ci
573e1051a39Sopenharmony_ci	umul	a_0,b_1,t_1	!=!mul_add_c(a[0],b[1],c2,c3,c1);
574e1051a39Sopenharmony_ci	ld	ap(1),a_1
575e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
576e1051a39Sopenharmony_ci	rd	%y,t_2
577e1051a39Sopenharmony_ci	addxcc	%g0,t_2,c_3	!=
578e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1
579e1051a39Sopenharmony_ci	ld	ap(2),a_2
580e1051a39Sopenharmony_ci	umul	a_1,b_0,t_1	!mul_add_c(a[1],b[0],c2,c3,c1);
581e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2	!=
582e1051a39Sopenharmony_ci	rd	%y,t_2
583e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
584e1051a39Sopenharmony_ci	st	c_2,rp(1)	!r[1]=c2;
585e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1	!=
586e1051a39Sopenharmony_ci
587e1051a39Sopenharmony_ci	umul	a_2,b_0,t_1	!mul_add_c(a[2],b[0],c3,c1,c2);
588e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
589e1051a39Sopenharmony_ci	rd	%y,t_2
590e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1	!=
591e1051a39Sopenharmony_ci	addx	%g0,%g0,c_2
592e1051a39Sopenharmony_ci	ld	bp(2),b_2
593e1051a39Sopenharmony_ci	umul	a_1,b_1,t_1	!mul_add_c(a[1],b[1],c3,c1,c2);
594e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
595e1051a39Sopenharmony_ci	rd	%y,t_2
596e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
597e1051a39Sopenharmony_ci	ld	bp(3),b_3
598e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
599e1051a39Sopenharmony_ci	umul	a_0,b_2,t_1	!mul_add_c(a[0],b[2],c3,c1,c2);
600e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
601e1051a39Sopenharmony_ci	rd	%y,t_2
602e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1	!=
603e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
604e1051a39Sopenharmony_ci	st	c_3,rp(2)	!r[2]=c3;
605e1051a39Sopenharmony_ci
606e1051a39Sopenharmony_ci	umul	a_0,b_3,t_1	!mul_add_c(a[0],b[3],c1,c2,c3);
607e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
608e1051a39Sopenharmony_ci	rd	%y,t_2
609e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
610e1051a39Sopenharmony_ci	addx	%g0,%g0,c_3
611e1051a39Sopenharmony_ci	umul	a_1,b_2,t_1	!=!mul_add_c(a[1],b[2],c1,c2,c3);
612e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
613e1051a39Sopenharmony_ci	rd	%y,t_2
614e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
615e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
616e1051a39Sopenharmony_ci	ld	ap(3),a_3
617e1051a39Sopenharmony_ci	umul	a_2,b_1,t_1	!mul_add_c(a[2],b[1],c1,c2,c3);
618e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
619e1051a39Sopenharmony_ci	rd	%y,t_2		!=
620e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
621e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
622e1051a39Sopenharmony_ci	ld	ap(4),a_4
623e1051a39Sopenharmony_ci	umul	a_3,b_0,t_1	!mul_add_c(a[3],b[0],c1,c2,c3);!=
624e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
625e1051a39Sopenharmony_ci	rd	%y,t_2
626e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
627e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
628e1051a39Sopenharmony_ci	st	c_1,rp(3)	!r[3]=c1;
629e1051a39Sopenharmony_ci
630e1051a39Sopenharmony_ci	umul	a_4,b_0,t_1	!mul_add_c(a[4],b[0],c2,c3,c1);
631e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
632e1051a39Sopenharmony_ci	rd	%y,t_2		!=
633e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
634e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1
635e1051a39Sopenharmony_ci	umul	a_3,b_1,t_1	!mul_add_c(a[3],b[1],c2,c3,c1);
636e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2	!=
637e1051a39Sopenharmony_ci	rd	%y,t_2
638e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
639e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
640e1051a39Sopenharmony_ci	umul	a_2,b_2,t_1	!=!mul_add_c(a[2],b[2],c2,c3,c1);
641e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
642e1051a39Sopenharmony_ci	rd	%y,t_2
643e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
644e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1	!=
645e1051a39Sopenharmony_ci	ld	bp(4),b_4
646e1051a39Sopenharmony_ci	umul	a_1,b_3,t_1	!mul_add_c(a[1],b[3],c2,c3,c1);
647e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
648e1051a39Sopenharmony_ci	rd	%y,t_2		!=
649e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
650e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
651e1051a39Sopenharmony_ci	ld	bp(5),b_5
652e1051a39Sopenharmony_ci	umul	a_0,b_4,t_1	!=!mul_add_c(a[0],b[4],c2,c3,c1);
653e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
654e1051a39Sopenharmony_ci	rd	%y,t_2
655e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
656e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1	!=
657e1051a39Sopenharmony_ci	st	c_2,rp(4)	!r[4]=c2;
658e1051a39Sopenharmony_ci
659e1051a39Sopenharmony_ci	umul	a_0,b_5,t_1	!mul_add_c(a[0],b[5],c3,c1,c2);
660e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
661e1051a39Sopenharmony_ci	rd	%y,t_2		!=
662e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
663e1051a39Sopenharmony_ci	addx	%g0,%g0,c_2
664e1051a39Sopenharmony_ci	umul	a_1,b_4,t_1	!mul_add_c(a[1],b[4],c3,c1,c2);
665e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
666e1051a39Sopenharmony_ci	rd	%y,t_2
667e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
668e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
669e1051a39Sopenharmony_ci	umul	a_2,b_3,t_1	!=!mul_add_c(a[2],b[3],c3,c1,c2);
670e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
671e1051a39Sopenharmony_ci	rd	%y,t_2
672e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
673e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
674e1051a39Sopenharmony_ci	umul	a_3,b_2,t_1	!mul_add_c(a[3],b[2],c3,c1,c2);
675e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
676e1051a39Sopenharmony_ci	rd	%y,t_2
677e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1	!=
678e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
679e1051a39Sopenharmony_ci	ld	ap(5),a_5
680e1051a39Sopenharmony_ci	umul	a_4,b_1,t_1	!mul_add_c(a[4],b[1],c3,c1,c2);
681e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
682e1051a39Sopenharmony_ci	rd	%y,t_2
683e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
684e1051a39Sopenharmony_ci	ld	ap(6),a_6
685e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
686e1051a39Sopenharmony_ci	umul	a_5,b_0,t_1	!mul_add_c(a[5],b[0],c3,c1,c2);
687e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
688e1051a39Sopenharmony_ci	rd	%y,t_2
689e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1	!=
690e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
691e1051a39Sopenharmony_ci	st	c_3,rp(5)	!r[5]=c3;
692e1051a39Sopenharmony_ci
693e1051a39Sopenharmony_ci	umul	a_6,b_0,t_1	!mul_add_c(a[6],b[0],c1,c2,c3);
694e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
695e1051a39Sopenharmony_ci	rd	%y,t_2
696e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
697e1051a39Sopenharmony_ci	addx	%g0,%g0,c_3
698e1051a39Sopenharmony_ci	umul	a_5,b_1,t_1	!=!mul_add_c(a[5],b[1],c1,c2,c3);
699e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
700e1051a39Sopenharmony_ci	rd	%y,t_2
701e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
702e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
703e1051a39Sopenharmony_ci	umul	a_4,b_2,t_1	!mul_add_c(a[4],b[2],c1,c2,c3);
704e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
705e1051a39Sopenharmony_ci	rd	%y,t_2
706e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
707e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
708e1051a39Sopenharmony_ci	umul	a_3,b_3,t_1	!mul_add_c(a[3],b[3],c1,c2,c3);
709e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
710e1051a39Sopenharmony_ci	rd	%y,t_2		!=
711e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
712e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
713e1051a39Sopenharmony_ci	umul	a_2,b_4,t_1	!mul_add_c(a[2],b[4],c1,c2,c3);
714e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
715e1051a39Sopenharmony_ci	rd	%y,t_2
716e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
717e1051a39Sopenharmony_ci	ld	bp(6),b_6
718e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
719e1051a39Sopenharmony_ci	umul	a_1,b_5,t_1	!mul_add_c(a[1],b[5],c1,c2,c3);
720e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
721e1051a39Sopenharmony_ci	rd	%y,t_2
722e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
723e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
724e1051a39Sopenharmony_ci	ld	bp(7),b_7
725e1051a39Sopenharmony_ci	umul	a_0,b_6,t_1	!mul_add_c(a[0],b[6],c1,c2,c3);
726e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
727e1051a39Sopenharmony_ci	rd	%y,t_2
728e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
729e1051a39Sopenharmony_ci	st	c_1,rp(6)	!r[6]=c1;
730e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
731e1051a39Sopenharmony_ci
732e1051a39Sopenharmony_ci	umul	a_0,b_7,t_1	!mul_add_c(a[0],b[7],c2,c3,c1);
733e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
734e1051a39Sopenharmony_ci	rd	%y,t_2
735e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
736e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1
737e1051a39Sopenharmony_ci	umul	a_1,b_6,t_1	!mul_add_c(a[1],b[6],c2,c3,c1);
738e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
739e1051a39Sopenharmony_ci	rd	%y,t_2		!=
740e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
741e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
742e1051a39Sopenharmony_ci	umul	a_2,b_5,t_1	!mul_add_c(a[2],b[5],c2,c3,c1);
743e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2	!=
744e1051a39Sopenharmony_ci	rd	%y,t_2
745e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
746e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
747e1051a39Sopenharmony_ci	umul	a_3,b_4,t_1	!=!mul_add_c(a[3],b[4],c2,c3,c1);
748e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
749e1051a39Sopenharmony_ci	rd	%y,t_2
750e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
751e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1	!=
752e1051a39Sopenharmony_ci	umul	a_4,b_3,t_1	!mul_add_c(a[4],b[3],c2,c3,c1);
753e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
754e1051a39Sopenharmony_ci	rd	%y,t_2
755e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
756e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
757e1051a39Sopenharmony_ci	umul	a_5,b_2,t_1	!mul_add_c(a[5],b[2],c2,c3,c1);
758e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
759e1051a39Sopenharmony_ci	rd	%y,t_2		!=
760e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
761e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
762e1051a39Sopenharmony_ci	ld	ap(7),a_7
763e1051a39Sopenharmony_ci	umul	a_6,b_1,t_1	!=!mul_add_c(a[6],b[1],c2,c3,c1);
764e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
765e1051a39Sopenharmony_ci	rd	%y,t_2
766e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
767e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1	!=
768e1051a39Sopenharmony_ci	umul	a_7,b_0,t_1	!mul_add_c(a[7],b[0],c2,c3,c1);
769e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
770e1051a39Sopenharmony_ci	rd	%y,t_2
771e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
772e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
773e1051a39Sopenharmony_ci	st	c_2,rp(7)	!r[7]=c2;
774e1051a39Sopenharmony_ci
775e1051a39Sopenharmony_ci	umul	a_7,b_1,t_1	!mul_add_c(a[7],b[1],c3,c1,c2);
776e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
777e1051a39Sopenharmony_ci	rd	%y,t_2
778e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
779e1051a39Sopenharmony_ci	addx	%g0,%g0,c_2
780e1051a39Sopenharmony_ci	umul	a_6,b_2,t_1	!=!mul_add_c(a[6],b[2],c3,c1,c2);
781e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
782e1051a39Sopenharmony_ci	rd	%y,t_2
783e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
784e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
785e1051a39Sopenharmony_ci	umul	a_5,b_3,t_1	!mul_add_c(a[5],b[3],c3,c1,c2);
786e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
787e1051a39Sopenharmony_ci	rd	%y,t_2
788e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1	!=
789e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
790e1051a39Sopenharmony_ci	umul	a_4,b_4,t_1	!mul_add_c(a[4],b[4],c3,c1,c2);
791e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
792e1051a39Sopenharmony_ci	rd	%y,t_2		!=
793e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
794e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
795e1051a39Sopenharmony_ci	umul	a_3,b_5,t_1	!mul_add_c(a[3],b[5],c3,c1,c2);
796e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
797e1051a39Sopenharmony_ci	rd	%y,t_2
798e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
799e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
800e1051a39Sopenharmony_ci	umul	a_2,b_6,t_1	!=!mul_add_c(a[2],b[6],c3,c1,c2);
801e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
802e1051a39Sopenharmony_ci	rd	%y,t_2
803e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
804e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
805e1051a39Sopenharmony_ci	umul	a_1,b_7,t_1	!mul_add_c(a[1],b[7],c3,c1,c2);
806e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
807e1051a39Sopenharmony_ci	rd	%y,t_2
808e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1	!
809e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
810e1051a39Sopenharmony_ci	st	c_3,rp(8)	!r[8]=c3;
811e1051a39Sopenharmony_ci
812e1051a39Sopenharmony_ci	umul	a_2,b_7,t_1	!mul_add_c(a[2],b[7],c1,c2,c3);
813e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
814e1051a39Sopenharmony_ci	rd	%y,t_2
815e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
816e1051a39Sopenharmony_ci	addx	%g0,%g0,c_3
817e1051a39Sopenharmony_ci	umul	a_3,b_6,t_1	!=!mul_add_c(a[3],b[6],c1,c2,c3);
818e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
819e1051a39Sopenharmony_ci	rd	%y,t_2
820e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
821e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
822e1051a39Sopenharmony_ci	umul	a_4,b_5,t_1	!mul_add_c(a[4],b[5],c1,c2,c3);
823e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
824e1051a39Sopenharmony_ci	rd	%y,t_2
825e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
826e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
827e1051a39Sopenharmony_ci	umul	a_5,b_4,t_1	!mul_add_c(a[5],b[4],c1,c2,c3);
828e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
829e1051a39Sopenharmony_ci	rd	%y,t_2		!=
830e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
831e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
832e1051a39Sopenharmony_ci	umul	a_6,b_3,t_1	!mul_add_c(a[6],b[3],c1,c2,c3);
833e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
834e1051a39Sopenharmony_ci	rd	%y,t_2
835e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
836e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
837e1051a39Sopenharmony_ci	umul	a_7,b_2,t_1	!=!mul_add_c(a[7],b[2],c1,c2,c3);
838e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
839e1051a39Sopenharmony_ci	rd	%y,t_2
840e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
841e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
842e1051a39Sopenharmony_ci	st	c_1,rp(9)	!r[9]=c1;
843e1051a39Sopenharmony_ci
844e1051a39Sopenharmony_ci	umul	a_7,b_3,t_1	!mul_add_c(a[7],b[3],c2,c3,c1);
845e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
846e1051a39Sopenharmony_ci	rd	%y,t_2		!=
847e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
848e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1
849e1051a39Sopenharmony_ci	umul	a_6,b_4,t_1	!mul_add_c(a[6],b[4],c2,c3,c1);
850e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2	!=
851e1051a39Sopenharmony_ci	rd	%y,t_2
852e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
853e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
854e1051a39Sopenharmony_ci	umul	a_5,b_5,t_1	!=!mul_add_c(a[5],b[5],c2,c3,c1);
855e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
856e1051a39Sopenharmony_ci	rd	%y,t_2
857e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
858e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1	!=
859e1051a39Sopenharmony_ci	umul	a_4,b_6,t_1	!mul_add_c(a[4],b[6],c2,c3,c1);
860e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
861e1051a39Sopenharmony_ci	rd	%y,t_2
862e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
863e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
864e1051a39Sopenharmony_ci	umul	a_3,b_7,t_1	!mul_add_c(a[3],b[7],c2,c3,c1);
865e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
866e1051a39Sopenharmony_ci	rd	%y,t_2		!=
867e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
868e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
869e1051a39Sopenharmony_ci	st	c_2,rp(10)	!r[10]=c2;
870e1051a39Sopenharmony_ci
871e1051a39Sopenharmony_ci	umul	a_4,b_7,t_1	!=!mul_add_c(a[4],b[7],c3,c1,c2);
872e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
873e1051a39Sopenharmony_ci	rd	%y,t_2
874e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
875e1051a39Sopenharmony_ci	addx	%g0,%g0,c_2	!=
876e1051a39Sopenharmony_ci	umul	a_5,b_6,t_1	!mul_add_c(a[5],b[6],c3,c1,c2);
877e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
878e1051a39Sopenharmony_ci	rd	%y,t_2
879e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1	!=
880e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
881e1051a39Sopenharmony_ci	umul	a_6,b_5,t_1	!mul_add_c(a[6],b[5],c3,c1,c2);
882e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
883e1051a39Sopenharmony_ci	rd	%y,t_2		!=
884e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
885e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
886e1051a39Sopenharmony_ci	umul	a_7,b_4,t_1	!mul_add_c(a[7],b[4],c3,c1,c2);
887e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
888e1051a39Sopenharmony_ci	rd	%y,t_2
889e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
890e1051a39Sopenharmony_ci	st	c_3,rp(11)	!r[11]=c3;
891e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
892e1051a39Sopenharmony_ci
893e1051a39Sopenharmony_ci	umul	a_7,b_5,t_1	!mul_add_c(a[7],b[5],c1,c2,c3);
894e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
895e1051a39Sopenharmony_ci	rd	%y,t_2
896e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
897e1051a39Sopenharmony_ci	addx	%g0,%g0,c_3
898e1051a39Sopenharmony_ci	umul	a_6,b_6,t_1	!mul_add_c(a[6],b[6],c1,c2,c3);
899e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
900e1051a39Sopenharmony_ci	rd	%y,t_2		!=
901e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
902e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
903e1051a39Sopenharmony_ci	umul	a_5,b_7,t_1	!mul_add_c(a[5],b[7],c1,c2,c3);
904e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
905e1051a39Sopenharmony_ci	rd	%y,t_2
906e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
907e1051a39Sopenharmony_ci	st	c_1,rp(12)	!r[12]=c1;
908e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
909e1051a39Sopenharmony_ci
910e1051a39Sopenharmony_ci	umul	a_6,b_7,t_1	!mul_add_c(a[6],b[7],c2,c3,c1);
911e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
912e1051a39Sopenharmony_ci	rd	%y,t_2
913e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
914e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1
915e1051a39Sopenharmony_ci	umul	a_7,b_6,t_1	!mul_add_c(a[7],b[6],c2,c3,c1);
916e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
917e1051a39Sopenharmony_ci	rd	%y,t_2		!=
918e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
919e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
920e1051a39Sopenharmony_ci	st	c_2,rp(13)	!r[13]=c2;
921e1051a39Sopenharmony_ci
922e1051a39Sopenharmony_ci	umul	a_7,b_7,t_1	!=!mul_add_c(a[7],b[7],c3,c1,c2);
923e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
924e1051a39Sopenharmony_ci	rd	%y,t_2
925e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
926e1051a39Sopenharmony_ci	nop			!=
927e1051a39Sopenharmony_ci	st	c_3,rp(14)	!r[14]=c3;
928e1051a39Sopenharmony_ci	st	c_1,rp(15)	!r[15]=c1;
929e1051a39Sopenharmony_ci
930e1051a39Sopenharmony_ci	ret
931e1051a39Sopenharmony_ci	restore	%g0,%g0,%o0
932e1051a39Sopenharmony_ci
933e1051a39Sopenharmony_ci.type	bn_mul_comba8,#function
934e1051a39Sopenharmony_ci.size	bn_mul_comba8,(.-bn_mul_comba8)
935e1051a39Sopenharmony_ci
936e1051a39Sopenharmony_ci.align	32
937e1051a39Sopenharmony_ci
938e1051a39Sopenharmony_ci.global bn_mul_comba4
939e1051a39Sopenharmony_ci/*
940e1051a39Sopenharmony_ci * void bn_mul_comba4(r,a,b)
941e1051a39Sopenharmony_ci * BN_ULONG *r,*a,*b;
942e1051a39Sopenharmony_ci */
943e1051a39Sopenharmony_cibn_mul_comba4:
944e1051a39Sopenharmony_ci	save	%sp,FRAME_SIZE,%sp
945e1051a39Sopenharmony_ci	ld	ap(0),a_0
946e1051a39Sopenharmony_ci	ld	bp(0),b_0
947e1051a39Sopenharmony_ci	umul	a_0,b_0,c_1	!=!mul_add_c(a[0],b[0],c1,c2,c3);
948e1051a39Sopenharmony_ci	ld	bp(1),b_1
949e1051a39Sopenharmony_ci	rd	%y,c_2
950e1051a39Sopenharmony_ci	st	c_1,rp(0)	!r[0]=c1;
951e1051a39Sopenharmony_ci
952e1051a39Sopenharmony_ci	umul	a_0,b_1,t_1	!=!mul_add_c(a[0],b[1],c2,c3,c1);
953e1051a39Sopenharmony_ci	ld	ap(1),a_1
954e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
955e1051a39Sopenharmony_ci	rd	%y,t_2		!=
956e1051a39Sopenharmony_ci	addxcc	%g0,t_2,c_3
957e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1
958e1051a39Sopenharmony_ci	ld	ap(2),a_2
959e1051a39Sopenharmony_ci	umul	a_1,b_0,t_1	!=!mul_add_c(a[1],b[0],c2,c3,c1);
960e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
961e1051a39Sopenharmony_ci	rd	%y,t_2
962e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
963e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1	!=
964e1051a39Sopenharmony_ci	st	c_2,rp(1)	!r[1]=c2;
965e1051a39Sopenharmony_ci
966e1051a39Sopenharmony_ci	umul	a_2,b_0,t_1	!mul_add_c(a[2],b[0],c3,c1,c2);
967e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
968e1051a39Sopenharmony_ci	rd	%y,t_2		!=
969e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
970e1051a39Sopenharmony_ci	addx	%g0,%g0,c_2
971e1051a39Sopenharmony_ci	ld	bp(2),b_2
972e1051a39Sopenharmony_ci	umul	a_1,b_1,t_1	!=!mul_add_c(a[1],b[1],c3,c1,c2);
973e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
974e1051a39Sopenharmony_ci	rd	%y,t_2
975e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
976e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
977e1051a39Sopenharmony_ci	ld	bp(3),b_3
978e1051a39Sopenharmony_ci	umul	a_0,b_2,t_1	!mul_add_c(a[0],b[2],c3,c1,c2);
979e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
980e1051a39Sopenharmony_ci	rd	%y,t_2		!=
981e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
982e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
983e1051a39Sopenharmony_ci	st	c_3,rp(2)	!r[2]=c3;
984e1051a39Sopenharmony_ci
985e1051a39Sopenharmony_ci	umul	a_0,b_3,t_1	!=!mul_add_c(a[0],b[3],c1,c2,c3);
986e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
987e1051a39Sopenharmony_ci	rd	%y,t_2
988e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
989e1051a39Sopenharmony_ci	addx	%g0,%g0,c_3	!=
990e1051a39Sopenharmony_ci	umul	a_1,b_2,t_1	!mul_add_c(a[1],b[2],c1,c2,c3);
991e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
992e1051a39Sopenharmony_ci	rd	%y,t_2
993e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
994e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
995e1051a39Sopenharmony_ci	ld	ap(3),a_3
996e1051a39Sopenharmony_ci	umul	a_2,b_1,t_1	!mul_add_c(a[2],b[1],c1,c2,c3);
997e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
998e1051a39Sopenharmony_ci	rd	%y,t_2
999e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1000e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
1001e1051a39Sopenharmony_ci	umul	a_3,b_0,t_1	!=!mul_add_c(a[3],b[0],c1,c2,c3);
1002e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1003e1051a39Sopenharmony_ci	rd	%y,t_2
1004e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1005e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
1006e1051a39Sopenharmony_ci	st	c_1,rp(3)	!r[3]=c1;
1007e1051a39Sopenharmony_ci
1008e1051a39Sopenharmony_ci	umul	a_3,b_1,t_1	!mul_add_c(a[3],b[1],c2,c3,c1);
1009e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1010e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1011e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1012e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1
1013e1051a39Sopenharmony_ci	umul	a_2,b_2,t_1	!mul_add_c(a[2],b[2],c2,c3,c1);
1014e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2	!=
1015e1051a39Sopenharmony_ci	rd	%y,t_2
1016e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1017e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1018e1051a39Sopenharmony_ci	umul	a_1,b_3,t_1	!=!mul_add_c(a[1],b[3],c2,c3,c1);
1019e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1020e1051a39Sopenharmony_ci	rd	%y,t_2
1021e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1022e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1	!=
1023e1051a39Sopenharmony_ci	st	c_2,rp(4)	!r[4]=c2;
1024e1051a39Sopenharmony_ci
1025e1051a39Sopenharmony_ci	umul	a_2,b_3,t_1	!mul_add_c(a[2],b[3],c3,c1,c2);
1026e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1027e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1028e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1029e1051a39Sopenharmony_ci	addx	%g0,%g0,c_2
1030e1051a39Sopenharmony_ci	umul	a_3,b_2,t_1	!mul_add_c(a[3],b[2],c3,c1,c2);
1031e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
1032e1051a39Sopenharmony_ci	rd	%y,t_2
1033e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1034e1051a39Sopenharmony_ci	st	c_3,rp(5)	!r[5]=c3;
1035e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
1036e1051a39Sopenharmony_ci
1037e1051a39Sopenharmony_ci	umul	a_3,b_3,t_1	!mul_add_c(a[3],b[3],c1,c2,c3);
1038e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1039e1051a39Sopenharmony_ci	rd	%y,t_2
1040e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
1041e1051a39Sopenharmony_ci	st	c_1,rp(6)	!r[6]=c1;
1042e1051a39Sopenharmony_ci	st	c_2,rp(7)	!r[7]=c2;
1043e1051a39Sopenharmony_ci
1044e1051a39Sopenharmony_ci	ret
1045e1051a39Sopenharmony_ci	restore	%g0,%g0,%o0
1046e1051a39Sopenharmony_ci
1047e1051a39Sopenharmony_ci.type	bn_mul_comba4,#function
1048e1051a39Sopenharmony_ci.size	bn_mul_comba4,(.-bn_mul_comba4)
1049e1051a39Sopenharmony_ci
1050e1051a39Sopenharmony_ci.align	32
1051e1051a39Sopenharmony_ci
1052e1051a39Sopenharmony_ci.global bn_sqr_comba8
1053e1051a39Sopenharmony_cibn_sqr_comba8:
1054e1051a39Sopenharmony_ci	save	%sp,FRAME_SIZE,%sp
1055e1051a39Sopenharmony_ci	ld	ap(0),a_0
1056e1051a39Sopenharmony_ci	ld	ap(1),a_1
1057e1051a39Sopenharmony_ci	umul	a_0,a_0,c_1	!=!sqr_add_c(a,0,c1,c2,c3);
1058e1051a39Sopenharmony_ci	rd	%y,c_2
1059e1051a39Sopenharmony_ci	st	c_1,rp(0)	!r[0]=c1;
1060e1051a39Sopenharmony_ci
1061e1051a39Sopenharmony_ci	ld	ap(2),a_2
1062e1051a39Sopenharmony_ci	umul	a_0,a_1,t_1	!=!sqr_add_c2(a,1,0,c2,c3,c1);
1063e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1064e1051a39Sopenharmony_ci	rd	%y,t_2
1065e1051a39Sopenharmony_ci	addxcc	%g0,t_2,c_3
1066e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1	!=
1067e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1068e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1069e1051a39Sopenharmony_ci	st	c_2,rp(1)	!r[1]=c2;
1070e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1	!=
1071e1051a39Sopenharmony_ci
1072e1051a39Sopenharmony_ci	umul	a_2,a_0,t_1	!sqr_add_c2(a,2,0,c3,c1,c2);
1073e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1074e1051a39Sopenharmony_ci	rd	%y,t_2
1075e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1	!=
1076e1051a39Sopenharmony_ci	addx	%g0,%g0,c_2
1077e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1078e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1079e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
1080e1051a39Sopenharmony_ci	ld	ap(3),a_3
1081e1051a39Sopenharmony_ci	umul	a_1,a_1,t_1	!sqr_add_c(a,1,c3,c1,c2);
1082e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1083e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1084e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1085e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
1086e1051a39Sopenharmony_ci	st	c_3,rp(2)	!r[2]=c3;
1087e1051a39Sopenharmony_ci
1088e1051a39Sopenharmony_ci	umul	a_0,a_3,t_1	!=!sqr_add_c2(a,3,0,c1,c2,c3);
1089e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1090e1051a39Sopenharmony_ci	rd	%y,t_2
1091e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1092e1051a39Sopenharmony_ci	addx	%g0,%g0,c_3	!=
1093e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1094e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1095e1051a39Sopenharmony_ci	ld	ap(4),a_4
1096e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
1097e1051a39Sopenharmony_ci	umul	a_1,a_2,t_1	!sqr_add_c2(a,2,1,c1,c2,c3);
1098e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1099e1051a39Sopenharmony_ci	rd	%y,t_2
1100e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
1101e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
1102e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1103e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1104e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
1105e1051a39Sopenharmony_ci	st	c_1,rp(3)	!r[3]=c1;
1106e1051a39Sopenharmony_ci
1107e1051a39Sopenharmony_ci	umul	a_4,a_0,t_1	!sqr_add_c2(a,4,0,c2,c3,c1);
1108e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1109e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1110e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1111e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1
1112e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1113e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
1114e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1115e1051a39Sopenharmony_ci	umul	a_3,a_1,t_1	!sqr_add_c2(a,3,1,c2,c3,c1);
1116e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1117e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1118e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1119e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1120e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1121e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
1122e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1123e1051a39Sopenharmony_ci	ld	ap(5),a_5
1124e1051a39Sopenharmony_ci	umul	a_2,a_2,t_1	!sqr_add_c(a,2,c2,c3,c1);
1125e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2	!=
1126e1051a39Sopenharmony_ci	rd	%y,t_2
1127e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1128e1051a39Sopenharmony_ci	st	c_2,rp(4)	!r[4]=c2;
1129e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1	!=
1130e1051a39Sopenharmony_ci
1131e1051a39Sopenharmony_ci	umul	a_0,a_5,t_1	!sqr_add_c2(a,5,0,c3,c1,c2);
1132e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1133e1051a39Sopenharmony_ci	rd	%y,t_2
1134e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1	!=
1135e1051a39Sopenharmony_ci	addx	%g0,%g0,c_2
1136e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1137e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1138e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
1139e1051a39Sopenharmony_ci	umul	a_1,a_4,t_1	!sqr_add_c2(a,4,1,c3,c1,c2);
1140e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1141e1051a39Sopenharmony_ci	rd	%y,t_2
1142e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1	!=
1143e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
1144e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1145e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1146e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
1147e1051a39Sopenharmony_ci	ld	ap(6),a_6
1148e1051a39Sopenharmony_ci	umul	a_2,a_3,t_1	!sqr_add_c2(a,3,2,c3,c1,c2);
1149e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1150e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1151e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1152e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
1153e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1154e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1	!=
1155e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
1156e1051a39Sopenharmony_ci	st	c_3,rp(5)	!r[5]=c3;
1157e1051a39Sopenharmony_ci
1158e1051a39Sopenharmony_ci	umul	a_6,a_0,t_1	!sqr_add_c2(a,6,0,c1,c2,c3);
1159e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
1160e1051a39Sopenharmony_ci	rd	%y,t_2
1161e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1162e1051a39Sopenharmony_ci	addx	%g0,%g0,c_3
1163e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
1164e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1165e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
1166e1051a39Sopenharmony_ci	umul	a_5,a_1,t_1	!sqr_add_c2(a,5,1,c1,c2,c3);
1167e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
1168e1051a39Sopenharmony_ci	rd	%y,t_2
1169e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1170e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
1171e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
1172e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1173e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
1174e1051a39Sopenharmony_ci	umul	a_4,a_2,t_1	!sqr_add_c2(a,4,2,c1,c2,c3);
1175e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
1176e1051a39Sopenharmony_ci	rd	%y,t_2
1177e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1178e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
1179e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1	!=
1180e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1181e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
1182e1051a39Sopenharmony_ci	ld	ap(7),a_7
1183e1051a39Sopenharmony_ci	umul	a_3,a_3,t_1	!=!sqr_add_c(a,3,c1,c2,c3);
1184e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1185e1051a39Sopenharmony_ci	rd	%y,t_2
1186e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1187e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
1188e1051a39Sopenharmony_ci	st	c_1,rp(6)	!r[6]=c1;
1189e1051a39Sopenharmony_ci
1190e1051a39Sopenharmony_ci	umul	a_0,a_7,t_1	!sqr_add_c2(a,7,0,c2,c3,c1);
1191e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1192e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1193e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1194e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1
1195e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1196e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
1197e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1198e1051a39Sopenharmony_ci	umul	a_1,a_6,t_1	!sqr_add_c2(a,6,1,c2,c3,c1);
1199e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1200e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1201e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1202e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1203e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1204e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
1205e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1206e1051a39Sopenharmony_ci	umul	a_2,a_5,t_1	!sqr_add_c2(a,5,2,c2,c3,c1);
1207e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1208e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1209e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1210e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1211e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1212e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
1213e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1214e1051a39Sopenharmony_ci	umul	a_3,a_4,t_1	!sqr_add_c2(a,4,3,c2,c3,c1);
1215e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1216e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1217e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1218e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1219e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1220e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
1221e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1222e1051a39Sopenharmony_ci	st	c_2,rp(7)	!r[7]=c2;
1223e1051a39Sopenharmony_ci
1224e1051a39Sopenharmony_ci	umul	a_7,a_1,t_1	!sqr_add_c2(a,7,1,c3,c1,c2);
1225e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
1226e1051a39Sopenharmony_ci	rd	%y,t_2
1227e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1228e1051a39Sopenharmony_ci	addx	%g0,%g0,c_2
1229e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
1230e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1231e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
1232e1051a39Sopenharmony_ci	umul	a_6,a_2,t_1	!sqr_add_c2(a,6,2,c3,c1,c2);
1233e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
1234e1051a39Sopenharmony_ci	rd	%y,t_2
1235e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1236e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
1237e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
1238e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1239e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
1240e1051a39Sopenharmony_ci	umul	a_5,a_3,t_1	!sqr_add_c2(a,5,3,c3,c1,c2);
1241e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
1242e1051a39Sopenharmony_ci	rd	%y,t_2
1243e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1244e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
1245e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
1246e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1247e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
1248e1051a39Sopenharmony_ci	umul	a_4,a_4,t_1	!sqr_add_c(a,4,c3,c1,c2);
1249e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
1250e1051a39Sopenharmony_ci	rd	%y,t_2
1251e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1252e1051a39Sopenharmony_ci	st	c_3,rp(8)	!r[8]=c3;
1253e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
1254e1051a39Sopenharmony_ci
1255e1051a39Sopenharmony_ci	umul	a_2,a_7,t_1	!sqr_add_c2(a,7,2,c1,c2,c3);
1256e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1257e1051a39Sopenharmony_ci	rd	%y,t_2
1258e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
1259e1051a39Sopenharmony_ci	addx	%g0,%g0,c_3
1260e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1261e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1262e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
1263e1051a39Sopenharmony_ci	umul	a_3,a_6,t_1	!sqr_add_c2(a,6,3,c1,c2,c3);
1264e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1265e1051a39Sopenharmony_ci	rd	%y,t_2
1266e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
1267e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
1268e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1269e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1270e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
1271e1051a39Sopenharmony_ci	umul	a_4,a_5,t_1	!sqr_add_c2(a,5,4,c1,c2,c3);
1272e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1273e1051a39Sopenharmony_ci	rd	%y,t_2
1274e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
1275e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
1276e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1277e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1278e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
1279e1051a39Sopenharmony_ci	st	c_1,rp(9)	!r[9]=c1;
1280e1051a39Sopenharmony_ci
1281e1051a39Sopenharmony_ci	umul	a_7,a_3,t_1	!sqr_add_c2(a,7,3,c2,c3,c1);
1282e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1283e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1284e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1285e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1
1286e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1287e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
1288e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1289e1051a39Sopenharmony_ci	umul	a_6,a_4,t_1	!sqr_add_c2(a,6,4,c2,c3,c1);
1290e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1291e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1292e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1293e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1294e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1295e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
1296e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1297e1051a39Sopenharmony_ci	umul	a_5,a_5,t_1	!sqr_add_c(a,5,c2,c3,c1);
1298e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1299e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1300e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1301e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1302e1051a39Sopenharmony_ci	st	c_2,rp(10)	!r[10]=c2;
1303e1051a39Sopenharmony_ci
1304e1051a39Sopenharmony_ci	umul	a_4,a_7,t_1	!=!sqr_add_c2(a,7,4,c3,c1,c2);
1305e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1306e1051a39Sopenharmony_ci	rd	%y,t_2
1307e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1308e1051a39Sopenharmony_ci	addx	%g0,%g0,c_2	!=
1309e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1310e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1311e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
1312e1051a39Sopenharmony_ci	umul	a_5,a_6,t_1	!=!sqr_add_c2(a,6,5,c3,c1,c2);
1313e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1314e1051a39Sopenharmony_ci	rd	%y,t_2
1315e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1316e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
1317e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1318e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1319e1051a39Sopenharmony_ci	st	c_3,rp(11)	!r[11]=c3;
1320e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
1321e1051a39Sopenharmony_ci
1322e1051a39Sopenharmony_ci	umul	a_7,a_5,t_1	!sqr_add_c2(a,7,5,c1,c2,c3);
1323e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1324e1051a39Sopenharmony_ci	rd	%y,t_2
1325e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
1326e1051a39Sopenharmony_ci	addx	%g0,%g0,c_3
1327e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1328e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1329e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
1330e1051a39Sopenharmony_ci	umul	a_6,a_6,t_1	!sqr_add_c(a,6,c1,c2,c3);
1331e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1332e1051a39Sopenharmony_ci	rd	%y,t_2
1333e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
1334e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
1335e1051a39Sopenharmony_ci	st	c_1,rp(12)	!r[12]=c1;
1336e1051a39Sopenharmony_ci
1337e1051a39Sopenharmony_ci	umul	a_6,a_7,t_1	!sqr_add_c2(a,7,6,c2,c3,c1);
1338e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2	!=
1339e1051a39Sopenharmony_ci	rd	%y,t_2
1340e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1341e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1
1342e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2	!=
1343e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1344e1051a39Sopenharmony_ci	st	c_2,rp(13)	!r[13]=c2;
1345e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1	!=
1346e1051a39Sopenharmony_ci
1347e1051a39Sopenharmony_ci	umul	a_7,a_7,t_1	!sqr_add_c(a,7,c3,c1,c2);
1348e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1349e1051a39Sopenharmony_ci	rd	%y,t_2
1350e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1	!=
1351e1051a39Sopenharmony_ci	st	c_3,rp(14)	!r[14]=c3;
1352e1051a39Sopenharmony_ci	st	c_1,rp(15)	!r[15]=c1;
1353e1051a39Sopenharmony_ci
1354e1051a39Sopenharmony_ci	ret
1355e1051a39Sopenharmony_ci	restore	%g0,%g0,%o0
1356e1051a39Sopenharmony_ci
1357e1051a39Sopenharmony_ci.type	bn_sqr_comba8,#function
1358e1051a39Sopenharmony_ci.size	bn_sqr_comba8,(.-bn_sqr_comba8)
1359e1051a39Sopenharmony_ci
1360e1051a39Sopenharmony_ci.align	32
1361e1051a39Sopenharmony_ci
1362e1051a39Sopenharmony_ci.global bn_sqr_comba4
1363e1051a39Sopenharmony_ci/*
1364e1051a39Sopenharmony_ci * void bn_sqr_comba4(r,a)
1365e1051a39Sopenharmony_ci * BN_ULONG *r,*a;
1366e1051a39Sopenharmony_ci */
1367e1051a39Sopenharmony_cibn_sqr_comba4:
1368e1051a39Sopenharmony_ci	save	%sp,FRAME_SIZE,%sp
1369e1051a39Sopenharmony_ci	ld	ap(0),a_0
1370e1051a39Sopenharmony_ci	umul	a_0,a_0,c_1	!sqr_add_c(a,0,c1,c2,c3);
1371e1051a39Sopenharmony_ci	ld	ap(1),a_1	!=
1372e1051a39Sopenharmony_ci	rd	%y,c_2
1373e1051a39Sopenharmony_ci	st	c_1,rp(0)	!r[0]=c1;
1374e1051a39Sopenharmony_ci
1375e1051a39Sopenharmony_ci	ld	ap(2),a_2
1376e1051a39Sopenharmony_ci	umul	a_0,a_1,t_1	!=!sqr_add_c2(a,1,0,c2,c3,c1);
1377e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1378e1051a39Sopenharmony_ci	rd	%y,t_2
1379e1051a39Sopenharmony_ci	addxcc	%g0,t_2,c_3
1380e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1	!=
1381e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1382e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1383e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1	!=
1384e1051a39Sopenharmony_ci	st	c_2,rp(1)	!r[1]=c2;
1385e1051a39Sopenharmony_ci
1386e1051a39Sopenharmony_ci	umul	a_2,a_0,t_1	!sqr_add_c2(a,2,0,c3,c1,c2);
1387e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1388e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1389e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1390e1051a39Sopenharmony_ci	addx	%g0,%g0,c_2
1391e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1392e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1	!=
1393e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2
1394e1051a39Sopenharmony_ci	ld	ap(3),a_3
1395e1051a39Sopenharmony_ci	umul	a_1,a_1,t_1	!sqr_add_c(a,1,c3,c1,c2);
1396e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3	!=
1397e1051a39Sopenharmony_ci	rd	%y,t_2
1398e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1399e1051a39Sopenharmony_ci	st	c_3,rp(2)	!r[2]=c3;
1400e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
1401e1051a39Sopenharmony_ci
1402e1051a39Sopenharmony_ci	umul	a_0,a_3,t_1	!sqr_add_c2(a,3,0,c1,c2,c3);
1403e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1404e1051a39Sopenharmony_ci	rd	%y,t_2
1405e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
1406e1051a39Sopenharmony_ci	addx	%g0,%g0,c_3
1407e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1408e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1409e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
1410e1051a39Sopenharmony_ci	umul	a_1,a_2,t_1	!sqr_add_c2(a,2,1,c1,c2,c3);
1411e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1412e1051a39Sopenharmony_ci	rd	%y,t_2
1413e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
1414e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3
1415e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1416e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2
1417e1051a39Sopenharmony_ci	addx	c_3,%g0,c_3	!=
1418e1051a39Sopenharmony_ci	st	c_1,rp(3)	!r[3]=c1;
1419e1051a39Sopenharmony_ci
1420e1051a39Sopenharmony_ci	umul	a_3,a_1,t_1	!sqr_add_c2(a,3,1,c2,c3,c1);
1421e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1422e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1423e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1424e1051a39Sopenharmony_ci	addx	%g0,%g0,c_1
1425e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1426e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3	!=
1427e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1428e1051a39Sopenharmony_ci	umul	a_2,a_2,t_1	!sqr_add_c(a,2,c2,c3,c1);
1429e1051a39Sopenharmony_ci	addcc	c_2,t_1,c_2
1430e1051a39Sopenharmony_ci	rd	%y,t_2		!=
1431e1051a39Sopenharmony_ci	addxcc	c_3,t_2,c_3
1432e1051a39Sopenharmony_ci	addx	c_1,%g0,c_1
1433e1051a39Sopenharmony_ci	st	c_2,rp(4)	!r[4]=c2;
1434e1051a39Sopenharmony_ci
1435e1051a39Sopenharmony_ci	umul	a_2,a_3,t_1	!=!sqr_add_c2(a,3,2,c3,c1,c2);
1436e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1437e1051a39Sopenharmony_ci	rd	%y,t_2
1438e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1439e1051a39Sopenharmony_ci	addx	%g0,%g0,c_2	!=
1440e1051a39Sopenharmony_ci	addcc	c_3,t_1,c_3
1441e1051a39Sopenharmony_ci	addxcc	c_1,t_2,c_1
1442e1051a39Sopenharmony_ci	st	c_3,rp(5)	!r[5]=c3;
1443e1051a39Sopenharmony_ci	addx	c_2,%g0,c_2	!=
1444e1051a39Sopenharmony_ci
1445e1051a39Sopenharmony_ci	umul	a_3,a_3,t_1	!sqr_add_c(a,3,c1,c2,c3);
1446e1051a39Sopenharmony_ci	addcc	c_1,t_1,c_1
1447e1051a39Sopenharmony_ci	rd	%y,t_2
1448e1051a39Sopenharmony_ci	addxcc	c_2,t_2,c_2	!=
1449e1051a39Sopenharmony_ci	st	c_1,rp(6)	!r[6]=c1;
1450e1051a39Sopenharmony_ci	st	c_2,rp(7)	!r[7]=c2;
1451e1051a39Sopenharmony_ci
1452e1051a39Sopenharmony_ci	ret
1453e1051a39Sopenharmony_ci	restore	%g0,%g0,%o0
1454e1051a39Sopenharmony_ci
1455e1051a39Sopenharmony_ci.type	bn_sqr_comba4,#function
1456e1051a39Sopenharmony_ci.size	bn_sqr_comba4,(.-bn_sqr_comba4)
1457e1051a39Sopenharmony_ci
1458e1051a39Sopenharmony_ci.align	32
1459