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