155714Skris.ident	"sparcv8.s, Version 1.4"
255714Skris.ident	"SPARC v8 ISA artwork by Andy Polyakov <appro@fy.chalmers.se>"
355714Skris
455714Skris/*
555714Skris * ====================================================================
655714Skris * Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
755714Skris * project.
855714Skris *
955714Skris * Rights for redistribution and usage in source and binary forms are
1055714Skris * granted according to the OpenSSL license. Warranty of any kind is
1155714Skris * disclaimed.
1255714Skris * ====================================================================
1355714Skris */
1455714Skris
1555714Skris/*
1655714Skris * This is my modest contributon to OpenSSL project (see
1755714Skris * http://www.openssl.org/ for more information about it) and is
1855714Skris * a drop-in SuperSPARC ISA replacement for crypto/bn/bn_asm.c
1955714Skris * module. For updates see http://fy.chalmers.se/~appro/hpe/.
2055714Skris *
2155714Skris * See bn_asm.sparc.v8plus.S for more details.
2255714Skris */
2355714Skris
2455714Skris/*
2555714Skris * Revision history.
2655714Skris *
2755714Skris * 1.1	- new loop unrolling model(*);
2855714Skris * 1.2	- made gas friendly;
2955714Skris * 1.3	- fixed problem with /usr/ccs/lib/cpp;
3055714Skris * 1.4	- some retunes;
3155714Skris *
3255714Skris * (*)	see bn_asm.sparc.v8plus.S for details
3355714Skris */
3455714Skris
3555714Skris.section	".text",#alloc,#execinstr
3655714Skris.file		"bn_asm.sparc.v8.S"
3755714Skris
3855714Skris.align	32
3955714Skris
4055714Skris.global bn_mul_add_words
4155714Skris/*
4255714Skris * BN_ULONG bn_mul_add_words(rp,ap,num,w)
4355714Skris * BN_ULONG *rp,*ap;
4455714Skris * int num;
4555714Skris * BN_ULONG w;
4655714Skris */
4755714Skrisbn_mul_add_words:
4855714Skris	cmp	%o2,0
4955714Skris	bg,a	.L_bn_mul_add_words_proceed
5055714Skris	ld	[%o1],%g2
5155714Skris	retl
5255714Skris	clr	%o0
5355714Skris
5455714Skris.L_bn_mul_add_words_proceed:
5555714Skris	andcc	%o2,-4,%g0
5655714Skris	bz	.L_bn_mul_add_words_tail
5755714Skris	clr	%o5
5855714Skris
5955714Skris.L_bn_mul_add_words_loop:
6055714Skris	ld	[%o0],%o4
6155714Skris	ld	[%o1+4],%g3
6255714Skris	umul	%o3,%g2,%g2
6355714Skris	rd	%y,%g1
6455714Skris	addcc	%o4,%o5,%o4
6555714Skris	addx	%g1,0,%g1
6655714Skris	addcc	%o4,%g2,%o4
6755714Skris	st	%o4,[%o0]
6855714Skris	addx	%g1,0,%o5
6955714Skris
7055714Skris	ld	[%o0+4],%o4
7155714Skris	ld	[%o1+8],%g2
7255714Skris	umul	%o3,%g3,%g3
7355714Skris	dec	4,%o2
7455714Skris	rd	%y,%g1
7555714Skris	addcc	%o4,%o5,%o4
7655714Skris	addx	%g1,0,%g1
7755714Skris	addcc	%o4,%g3,%o4
7855714Skris	st	%o4,[%o0+4]
7955714Skris	addx	%g1,0,%o5
8055714Skris
8155714Skris	ld	[%o0+8],%o4
8255714Skris	ld	[%o1+12],%g3
8355714Skris	umul	%o3,%g2,%g2
8455714Skris	inc	16,%o1
8555714Skris	rd	%y,%g1
8655714Skris	addcc	%o4,%o5,%o4
8755714Skris	addx	%g1,0,%g1
8855714Skris	addcc	%o4,%g2,%o4
8955714Skris	st	%o4,[%o0+8]
9055714Skris	addx	%g1,0,%o5
9155714Skris
9255714Skris	ld	[%o0+12],%o4
9355714Skris	umul	%o3,%g3,%g3
9455714Skris	inc	16,%o0
9555714Skris	rd	%y,%g1
9655714Skris	addcc	%o4,%o5,%o4
9755714Skris	addx	%g1,0,%g1
9855714Skris	addcc	%o4,%g3,%o4
9955714Skris	st	%o4,[%o0-4]
10055714Skris	addx	%g1,0,%o5
10155714Skris	andcc	%o2,-4,%g0
10255714Skris	bnz,a	.L_bn_mul_add_words_loop
10355714Skris	ld	[%o1],%g2
10455714Skris
10555714Skris	tst	%o2
10655714Skris	bnz,a	.L_bn_mul_add_words_tail
10755714Skris	ld	[%o1],%g2
10855714Skris.L_bn_mul_add_words_return:
10955714Skris	retl
11055714Skris	mov	%o5,%o0
11155714Skris	nop
11255714Skris
11355714Skris.L_bn_mul_add_words_tail:
11455714Skris	ld	[%o0],%o4
11555714Skris	umul	%o3,%g2,%g2
11655714Skris	addcc	%o4,%o5,%o4
11755714Skris	rd	%y,%g1
11855714Skris	addx	%g1,0,%g1
11955714Skris	addcc	%o4,%g2,%o4
12055714Skris	addx	%g1,0,%o5
12155714Skris	deccc	%o2
12255714Skris	bz	.L_bn_mul_add_words_return
12355714Skris	st	%o4,[%o0]
12455714Skris
12555714Skris	ld	[%o1+4],%g2
12655714Skris	ld	[%o0+4],%o4
12755714Skris	umul	%o3,%g2,%g2
12855714Skris	rd	%y,%g1
12955714Skris	addcc	%o4,%o5,%o4
13055714Skris	addx	%g1,0,%g1
13155714Skris	addcc	%o4,%g2,%o4
13255714Skris	addx	%g1,0,%o5
13355714Skris	deccc	%o2
13455714Skris	bz	.L_bn_mul_add_words_return
13555714Skris	st	%o4,[%o0+4]
13655714Skris
13755714Skris	ld	[%o1+8],%g2
13855714Skris	ld	[%o0+8],%o4
13955714Skris	umul	%o3,%g2,%g2
14055714Skris	rd	%y,%g1
14155714Skris	addcc	%o4,%o5,%o4
14255714Skris	addx	%g1,0,%g1
14355714Skris	addcc	%o4,%g2,%o4
14455714Skris	st	%o4,[%o0+8]
14555714Skris	retl
14655714Skris	addx	%g1,0,%o0
14755714Skris
14855714Skris.type	bn_mul_add_words,#function
14955714Skris.size	bn_mul_add_words,(.-bn_mul_add_words)
15055714Skris
15155714Skris.align	32
15255714Skris
15355714Skris.global bn_mul_words
15455714Skris/*
15555714Skris * BN_ULONG bn_mul_words(rp,ap,num,w)
15655714Skris * BN_ULONG *rp,*ap;
15755714Skris * int num;
15855714Skris * BN_ULONG w;
15955714Skris */
16055714Skrisbn_mul_words:
16155714Skris	cmp	%o2,0
16255714Skris	bg,a	.L_bn_mul_words_proceeed
16355714Skris	ld	[%o1],%g2
16455714Skris	retl
16555714Skris	clr	%o0
16655714Skris
16755714Skris.L_bn_mul_words_proceeed:
16855714Skris	andcc	%o2,-4,%g0
16955714Skris	bz	.L_bn_mul_words_tail
17055714Skris	clr	%o5
17155714Skris
17255714Skris.L_bn_mul_words_loop:
17355714Skris	ld	[%o1+4],%g3
17455714Skris	umul	%o3,%g2,%g2
17555714Skris	addcc	%g2,%o5,%g2
17655714Skris	rd	%y,%g1
17755714Skris	addx	%g1,0,%o5
17855714Skris	st	%g2,[%o0]
17955714Skris
18055714Skris	ld	[%o1+8],%g2
18155714Skris	umul	%o3,%g3,%g3
18255714Skris	addcc	%g3,%o5,%g3
18355714Skris	rd	%y,%g1
18455714Skris	dec	4,%o2
18555714Skris	addx	%g1,0,%o5
18655714Skris	st	%g3,[%o0+4]
18755714Skris
18855714Skris	ld	[%o1+12],%g3
18955714Skris	umul	%o3,%g2,%g2
19055714Skris	addcc	%g2,%o5,%g2
19155714Skris	rd	%y,%g1
19255714Skris	inc	16,%o1
19355714Skris	st	%g2,[%o0+8]
19455714Skris	addx	%g1,0,%o5
19555714Skris
19655714Skris	umul	%o3,%g3,%g3
19755714Skris	addcc	%g3,%o5,%g3
19855714Skris	rd	%y,%g1
19955714Skris	inc	16,%o0
20055714Skris	addx	%g1,0,%o5
20155714Skris	st	%g3,[%o0-4]
20255714Skris	andcc	%o2,-4,%g0
20355714Skris	nop
20455714Skris	bnz,a	.L_bn_mul_words_loop
20555714Skris	ld	[%o1],%g2
20655714Skris
20755714Skris	tst	%o2
20855714Skris	bnz,a	.L_bn_mul_words_tail
20955714Skris	ld	[%o1],%g2
21055714Skris.L_bn_mul_words_return:
21155714Skris	retl
21255714Skris	mov	%o5,%o0
21355714Skris	nop
21455714Skris
21555714Skris.L_bn_mul_words_tail:
21655714Skris	umul	%o3,%g2,%g2
21755714Skris	addcc	%g2,%o5,%g2
21855714Skris	rd	%y,%g1
21955714Skris	addx	%g1,0,%o5
22055714Skris	deccc	%o2
22155714Skris	bz	.L_bn_mul_words_return
22255714Skris	st	%g2,[%o0]
22355714Skris	nop
22455714Skris
22555714Skris	ld	[%o1+4],%g2
22655714Skris	umul	%o3,%g2,%g2
22755714Skris	addcc	%g2,%o5,%g2
22855714Skris	rd	%y,%g1
22955714Skris	addx	%g1,0,%o5
23055714Skris	deccc	%o2
23155714Skris	bz	.L_bn_mul_words_return
23255714Skris	st	%g2,[%o0+4]
23355714Skris
23455714Skris	ld	[%o1+8],%g2
23555714Skris	umul	%o3,%g2,%g2
23655714Skris	addcc	%g2,%o5,%g2
23755714Skris	rd	%y,%g1
23855714Skris	st	%g2,[%o0+8]
23955714Skris	retl
24055714Skris	addx	%g1,0,%o0
24155714Skris
24255714Skris.type	bn_mul_words,#function
24355714Skris.size	bn_mul_words,(.-bn_mul_words)
24455714Skris
24555714Skris.align  32
24655714Skris.global	bn_sqr_words
24755714Skris/*
24855714Skris * void bn_sqr_words(r,a,n)
24955714Skris * BN_ULONG *r,*a;
25055714Skris * int n;
25155714Skris */
25255714Skrisbn_sqr_words:
25355714Skris	cmp	%o2,0
25455714Skris	bg,a	.L_bn_sqr_words_proceeed
25555714Skris	ld	[%o1],%g2
25655714Skris	retl
25755714Skris	clr	%o0
25855714Skris
25955714Skris.L_bn_sqr_words_proceeed:
26055714Skris	andcc	%o2,-4,%g0
26155714Skris	bz	.L_bn_sqr_words_tail
26255714Skris	clr	%o5
26355714Skris
26455714Skris.L_bn_sqr_words_loop:
26555714Skris	ld	[%o1+4],%g3
26655714Skris	umul	%g2,%g2,%o4
26755714Skris	st	%o4,[%o0]
26855714Skris	rd	%y,%o5
26955714Skris	st	%o5,[%o0+4]
27055714Skris
27155714Skris	ld	[%o1+8],%g2
27255714Skris	umul	%g3,%g3,%o4
27355714Skris	dec	4,%o2
27455714Skris	st	%o4,[%o0+8]
27555714Skris	rd	%y,%o5
27655714Skris	st	%o5,[%o0+12]
27755714Skris	nop
27855714Skris
27955714Skris	ld	[%o1+12],%g3
28055714Skris	umul	%g2,%g2,%o4
28155714Skris	st	%o4,[%o0+16]
28255714Skris	rd	%y,%o5
28355714Skris	inc	16,%o1
28455714Skris	st	%o5,[%o0+20]
28555714Skris
28655714Skris	umul	%g3,%g3,%o4
28755714Skris	inc	32,%o0
28855714Skris	st	%o4,[%o0-8]
28955714Skris	rd	%y,%o5
29055714Skris	st	%o5,[%o0-4]
29155714Skris	andcc	%o2,-4,%g2
29255714Skris	bnz,a	.L_bn_sqr_words_loop
29355714Skris	ld	[%o1],%g2
29455714Skris
29555714Skris	tst	%o2
29655714Skris	nop
29755714Skris	bnz,a	.L_bn_sqr_words_tail
29855714Skris	ld	[%o1],%g2
29955714Skris.L_bn_sqr_words_return:
30055714Skris	retl
30155714Skris	clr	%o0
30255714Skris
30355714Skris.L_bn_sqr_words_tail:
30455714Skris	umul	%g2,%g2,%o4
30555714Skris	st	%o4,[%o0]
30655714Skris	deccc	%o2
30755714Skris	rd	%y,%o5
30855714Skris	bz	.L_bn_sqr_words_return
30955714Skris	st	%o5,[%o0+4]
31055714Skris
31155714Skris	ld	[%o1+4],%g2
31255714Skris	umul	%g2,%g2,%o4
31355714Skris	st	%o4,[%o0+8]
31455714Skris	deccc	%o2
31555714Skris	rd	%y,%o5
31655714Skris	nop
31755714Skris	bz	.L_bn_sqr_words_return
31855714Skris	st	%o5,[%o0+12]
31955714Skris
32055714Skris	ld	[%o1+8],%g2
32155714Skris	umul	%g2,%g2,%o4
32255714Skris	st	%o4,[%o0+16]
32355714Skris	rd	%y,%o5
32455714Skris	st	%o5,[%o0+20]
32555714Skris	retl
32655714Skris	clr	%o0
32755714Skris
32855714Skris.type	bn_sqr_words,#function
32955714Skris.size	bn_sqr_words,(.-bn_sqr_words)
33055714Skris
33155714Skris.align	32
33255714Skris
33355714Skris.global bn_div_words
33455714Skris/*
33555714Skris * BN_ULONG bn_div_words(h,l,d)
33655714Skris * BN_ULONG h,l,d;
33755714Skris */
33855714Skrisbn_div_words:
33955714Skris	wr	%o0,%y
34055714Skris	udiv	%o1,%o2,%o0
34155714Skris	retl
34255714Skris	nop
34355714Skris
34455714Skris.type	bn_div_words,#function
34555714Skris.size	bn_div_words,(.-bn_div_words)
34655714Skris
34755714Skris.align	32
34855714Skris
34955714Skris.global bn_add_words
35055714Skris/*
35155714Skris * BN_ULONG bn_add_words(rp,ap,bp,n)
35255714Skris * BN_ULONG *rp,*ap,*bp;
35355714Skris * int n;
35455714Skris */
35555714Skrisbn_add_words:
35655714Skris	cmp	%o3,0
35755714Skris	bg,a	.L_bn_add_words_proceed
35855714Skris	ld	[%o1],%o4
35955714Skris	retl
36055714Skris	clr	%o0
36155714Skris
36255714Skris.L_bn_add_words_proceed:
36355714Skris	andcc	%o3,-4,%g0
36455714Skris	bz	.L_bn_add_words_tail
36555714Skris	clr	%g1
36655714Skris	ba	.L_bn_add_words_warn_loop
36755714Skris	addcc	%g0,0,%g0	! clear carry flag
36855714Skris
36955714Skris.L_bn_add_words_loop:
37055714Skris	ld	[%o1],%o4
37155714Skris.L_bn_add_words_warn_loop:
37255714Skris	ld	[%o2],%o5
37355714Skris	ld	[%o1+4],%g3
37455714Skris	ld	[%o2+4],%g4
37555714Skris	dec	4,%o3
37655714Skris	addxcc	%o5,%o4,%o5
37755714Skris	st	%o5,[%o0]
37855714Skris
37955714Skris	ld	[%o1+8],%o4
38055714Skris	ld	[%o2+8],%o5
38155714Skris	inc	16,%o1
38255714Skris	addxcc	%g3,%g4,%g3
38355714Skris	st	%g3,[%o0+4]
38455714Skris
38555714Skris	ld	[%o1-4],%g3
38655714Skris	ld	[%o2+12],%g4
38755714Skris	inc	16,%o2
38855714Skris	addxcc	%o5,%o4,%o5
38955714Skris	st	%o5,[%o0+8]
39055714Skris
39155714Skris	inc	16,%o0
39255714Skris	addxcc	%g3,%g4,%g3
39355714Skris	st	%g3,[%o0-4]
39455714Skris	addx	%g0,0,%g1
39555714Skris	andcc	%o3,-4,%g0
39655714Skris	bnz,a	.L_bn_add_words_loop
39755714Skris	addcc	%g1,-1,%g0
39855714Skris
39955714Skris	tst	%o3
40055714Skris	bnz,a	.L_bn_add_words_tail
40155714Skris	ld	[%o1],%o4
40255714Skris.L_bn_add_words_return:
40355714Skris	retl
40455714Skris	mov	%g1,%o0
40555714Skris
40655714Skris.L_bn_add_words_tail:
40755714Skris	addcc	%g1,-1,%g0
40855714Skris	ld	[%o2],%o5
40955714Skris	addxcc	%o5,%o4,%o5
41055714Skris	addx	%g0,0,%g1
41155714Skris	deccc	%o3
41255714Skris	bz	.L_bn_add_words_return
41355714Skris	st	%o5,[%o0]
41455714Skris
41555714Skris	ld	[%o1+4],%o4
41655714Skris	addcc	%g1,-1,%g0
41755714Skris	ld	[%o2+4],%o5
41855714Skris	addxcc	%o5,%o4,%o5
41955714Skris	addx	%g0,0,%g1
42055714Skris	deccc	%o3
42155714Skris	bz	.L_bn_add_words_return
42255714Skris	st	%o5,[%o0+4]
42355714Skris
42455714Skris	ld	[%o1+8],%o4
42555714Skris	addcc	%g1,-1,%g0
42655714Skris	ld	[%o2+8],%o5
42755714Skris	addxcc	%o5,%o4,%o5
42855714Skris	st	%o5,[%o0+8]
42955714Skris	retl
43055714Skris	addx	%g0,0,%o0
43155714Skris
43255714Skris.type	bn_add_words,#function
43355714Skris.size	bn_add_words,(.-bn_add_words)
43455714Skris
43555714Skris.align	32
43655714Skris
43755714Skris.global bn_sub_words
43855714Skris/*
43955714Skris * BN_ULONG bn_sub_words(rp,ap,bp,n)
44055714Skris * BN_ULONG *rp,*ap,*bp;
44155714Skris * int n;
44255714Skris */
44355714Skrisbn_sub_words:
44455714Skris	cmp	%o3,0
44555714Skris	bg,a	.L_bn_sub_words_proceed
44655714Skris	ld	[%o1],%o4
44755714Skris	retl
44855714Skris	clr	%o0
44955714Skris
45055714Skris.L_bn_sub_words_proceed:
45155714Skris	andcc	%o3,-4,%g0
45255714Skris	bz	.L_bn_sub_words_tail
45355714Skris	clr	%g1
45455714Skris	ba	.L_bn_sub_words_warm_loop
45555714Skris	addcc	%g0,0,%g0	! clear carry flag
45655714Skris
45755714Skris.L_bn_sub_words_loop:
45855714Skris	ld	[%o1],%o4
45955714Skris.L_bn_sub_words_warm_loop:
46055714Skris	ld	[%o2],%o5
46155714Skris	ld	[%o1+4],%g3
46255714Skris	ld	[%o2+4],%g4
46355714Skris	dec	4,%o3
46455714Skris	subxcc	%o4,%o5,%o5
46555714Skris	st	%o5,[%o0]
46655714Skris
46755714Skris	ld	[%o1+8],%o4
46855714Skris	ld	[%o2+8],%o5
46955714Skris	inc	16,%o1
47055714Skris	subxcc	%g3,%g4,%g4
47155714Skris	st	%g4,[%o0+4]
47255714Skris
47355714Skris	ld	[%o1-4],%g3
47455714Skris	ld	[%o2+12],%g4
47555714Skris	inc	16,%o2
47655714Skris	subxcc	%o4,%o5,%o5
47755714Skris	st	%o5,[%o0+8]
47855714Skris
47955714Skris	inc	16,%o0
48055714Skris	subxcc	%g3,%g4,%g4
48155714Skris	st	%g4,[%o0-4]
48255714Skris	addx	%g0,0,%g1
48355714Skris	andcc	%o3,-4,%g0
48455714Skris	bnz,a	.L_bn_sub_words_loop
48555714Skris	addcc	%g1,-1,%g0
48655714Skris
48755714Skris	tst	%o3
48855714Skris	nop
48955714Skris	bnz,a	.L_bn_sub_words_tail
49055714Skris	ld	[%o1],%o4
49155714Skris.L_bn_sub_words_return:
49255714Skris	retl
49355714Skris	mov	%g1,%o0
49455714Skris
49555714Skris.L_bn_sub_words_tail:
49655714Skris	addcc	%g1,-1,%g0
49755714Skris	ld	[%o2],%o5
49855714Skris	subxcc	%o4,%o5,%o5
49955714Skris	addx	%g0,0,%g1
50055714Skris	deccc	%o3
50155714Skris	bz	.L_bn_sub_words_return
50255714Skris	st	%o5,[%o0]
50355714Skris	nop
50455714Skris
50555714Skris	ld	[%o1+4],%o4
50655714Skris	addcc	%g1,-1,%g0
50755714Skris	ld	[%o2+4],%o5
50855714Skris	subxcc	%o4,%o5,%o5
50955714Skris	addx	%g0,0,%g1
51055714Skris	deccc	%o3
51155714Skris	bz	.L_bn_sub_words_return
51255714Skris	st	%o5,[%o0+4]
51355714Skris
51455714Skris	ld	[%o1+8],%o4
51555714Skris	addcc	%g1,-1,%g0
51655714Skris	ld	[%o2+8],%o5
51755714Skris	subxcc	%o4,%o5,%o5
51855714Skris	st	%o5,[%o0+8]
51955714Skris	retl
52055714Skris	addx	%g0,0,%o0
52155714Skris
52255714Skris.type	bn_sub_words,#function
52355714Skris.size	bn_sub_words,(.-bn_sub_words)
52455714Skris
52555714Skris#define FRAME_SIZE	-96
52655714Skris
52755714Skris/*
52855714Skris * Here is register usage map for *all* routines below.
52955714Skris */
53055714Skris#define t_1	%o0
53155714Skris#define	t_2	%o1
53255714Skris#define c_1	%o2
53355714Skris#define c_2	%o3
53455714Skris#define c_3	%o4
53555714Skris
53655714Skris#define ap(I)	[%i1+4*I]
53755714Skris#define bp(I)	[%i2+4*I]
53855714Skris#define rp(I)	[%i0+4*I]
53955714Skris
54055714Skris#define	a_0	%l0
54155714Skris#define	a_1	%l1
54255714Skris#define	a_2	%l2
54355714Skris#define	a_3	%l3
54455714Skris#define	a_4	%l4
54555714Skris#define	a_5	%l5
54655714Skris#define	a_6	%l6
54755714Skris#define	a_7	%l7
54855714Skris
54955714Skris#define	b_0	%i3
55055714Skris#define	b_1	%i4
55155714Skris#define	b_2	%i5
55255714Skris#define	b_3	%o5
55355714Skris#define	b_4	%g1
55455714Skris#define	b_5	%g2
55555714Skris#define	b_6	%g3
55655714Skris#define	b_7	%g4
55755714Skris
55855714Skris.align	32
55955714Skris.global bn_mul_comba8
56055714Skris/*
56155714Skris * void bn_mul_comba8(r,a,b)
56255714Skris * BN_ULONG *r,*a,*b;
56355714Skris */
56455714Skrisbn_mul_comba8:
56555714Skris	save	%sp,FRAME_SIZE,%sp
56655714Skris	ld	ap(0),a_0
56755714Skris	ld	bp(0),b_0
56855714Skris	umul	a_0,b_0,c_1	!=!mul_add_c(a[0],b[0],c1,c2,c3);
56955714Skris	ld	bp(1),b_1
57055714Skris	rd	%y,c_2
57155714Skris	st	c_1,rp(0)	!r[0]=c1;
57255714Skris
57355714Skris	umul	a_0,b_1,t_1	!=!mul_add_c(a[0],b[1],c2,c3,c1);
57455714Skris	ld	ap(1),a_1
57555714Skris	addcc	c_2,t_1,c_2
57655714Skris	rd	%y,t_2
57755714Skris	addxcc	%g0,t_2,c_3	!=
57855714Skris	addx	%g0,%g0,c_1
57955714Skris	ld	ap(2),a_2
58055714Skris	umul	a_1,b_0,t_1	!mul_add_c(a[1],b[0],c2,c3,c1);
58155714Skris	addcc	c_2,t_1,c_2	!=
58255714Skris	rd	%y,t_2
58355714Skris	addxcc	c_3,t_2,c_3
58455714Skris	st	c_2,rp(1)	!r[1]=c2;
58555714Skris	addx	c_1,%g0,c_1	!=
58655714Skris
58755714Skris	umul	a_2,b_0,t_1	!mul_add_c(a[2],b[0],c3,c1,c2);
58855714Skris	addcc	c_3,t_1,c_3
58955714Skris	rd	%y,t_2
59055714Skris	addxcc	c_1,t_2,c_1	!=
59155714Skris	addx	%g0,%g0,c_2
59255714Skris	ld	bp(2),b_2
59355714Skris	umul	a_1,b_1,t_1	!mul_add_c(a[1],b[1],c3,c1,c2);
59455714Skris	addcc	c_3,t_1,c_3	!=
59555714Skris	rd	%y,t_2
59655714Skris	addxcc	c_1,t_2,c_1
59755714Skris	ld	bp(3),b_3
59855714Skris	addx	c_2,%g0,c_2	!=
59955714Skris	umul	a_0,b_2,t_1	!mul_add_c(a[0],b[2],c3,c1,c2);
60055714Skris	addcc	c_3,t_1,c_3
60155714Skris	rd	%y,t_2
60255714Skris	addxcc	c_1,t_2,c_1	!=
60355714Skris	addx	c_2,%g0,c_2
60455714Skris	st	c_3,rp(2)	!r[2]=c3;
60555714Skris
60655714Skris	umul	a_0,b_3,t_1	!mul_add_c(a[0],b[3],c1,c2,c3);
60755714Skris	addcc	c_1,t_1,c_1	!=
60855714Skris	rd	%y,t_2
60955714Skris	addxcc	c_2,t_2,c_2
61055714Skris	addx	%g0,%g0,c_3
61155714Skris	umul	a_1,b_2,t_1	!=!mul_add_c(a[1],b[2],c1,c2,c3);
61255714Skris	addcc	c_1,t_1,c_1
61355714Skris	rd	%y,t_2
61455714Skris	addxcc	c_2,t_2,c_2
61555714Skris	addx	c_3,%g0,c_3	!=
61655714Skris	ld	ap(3),a_3
61755714Skris	umul	a_2,b_1,t_1	!mul_add_c(a[2],b[1],c1,c2,c3);
61855714Skris	addcc	c_1,t_1,c_1
61955714Skris	rd	%y,t_2		!=
62055714Skris	addxcc	c_2,t_2,c_2
62155714Skris	addx	c_3,%g0,c_3
62255714Skris	ld	ap(4),a_4
62355714Skris	umul	a_3,b_0,t_1	!mul_add_c(a[3],b[0],c1,c2,c3);!=
62455714Skris	addcc	c_1,t_1,c_1
62555714Skris	rd	%y,t_2
62655714Skris	addxcc	c_2,t_2,c_2
62755714Skris	addx	c_3,%g0,c_3	!=
62855714Skris	st	c_1,rp(3)	!r[3]=c1;
62955714Skris
63055714Skris	umul	a_4,b_0,t_1	!mul_add_c(a[4],b[0],c2,c3,c1);
63155714Skris	addcc	c_2,t_1,c_2
63255714Skris	rd	%y,t_2		!=
63355714Skris	addxcc	c_3,t_2,c_3
63455714Skris	addx	%g0,%g0,c_1
63555714Skris	umul	a_3,b_1,t_1	!mul_add_c(a[3],b[1],c2,c3,c1);
63655714Skris	addcc	c_2,t_1,c_2	!=
63755714Skris	rd	%y,t_2
63855714Skris	addxcc	c_3,t_2,c_3
63955714Skris	addx	c_1,%g0,c_1
64055714Skris	umul	a_2,b_2,t_1	!=!mul_add_c(a[2],b[2],c2,c3,c1);
64155714Skris	addcc	c_2,t_1,c_2
64255714Skris	rd	%y,t_2
64355714Skris	addxcc	c_3,t_2,c_3
64455714Skris	addx	c_1,%g0,c_1	!=
64555714Skris	ld	bp(4),b_4
64655714Skris	umul	a_1,b_3,t_1	!mul_add_c(a[1],b[3],c2,c3,c1);
64755714Skris	addcc	c_2,t_1,c_2
64855714Skris	rd	%y,t_2		!=
64955714Skris	addxcc	c_3,t_2,c_3
65055714Skris	addx	c_1,%g0,c_1
65155714Skris	ld	bp(5),b_5
65255714Skris	umul	a_0,b_4,t_1	!=!mul_add_c(a[0],b[4],c2,c3,c1);
65355714Skris	addcc	c_2,t_1,c_2
65455714Skris	rd	%y,t_2
65555714Skris	addxcc	c_3,t_2,c_3
65655714Skris	addx	c_1,%g0,c_1	!=
65755714Skris	st	c_2,rp(4)	!r[4]=c2;
65855714Skris
65955714Skris	umul	a_0,b_5,t_1	!mul_add_c(a[0],b[5],c3,c1,c2);
66055714Skris	addcc	c_3,t_1,c_3
66155714Skris	rd	%y,t_2		!=
66255714Skris	addxcc	c_1,t_2,c_1
66355714Skris	addx	%g0,%g0,c_2
66455714Skris	umul	a_1,b_4,t_1	!mul_add_c(a[1],b[4],c3,c1,c2);
66555714Skris	addcc	c_3,t_1,c_3	!=
66655714Skris	rd	%y,t_2
66755714Skris	addxcc	c_1,t_2,c_1
66855714Skris	addx	c_2,%g0,c_2
66955714Skris	umul	a_2,b_3,t_1	!=!mul_add_c(a[2],b[3],c3,c1,c2);
67055714Skris	addcc	c_3,t_1,c_3
67155714Skris	rd	%y,t_2
67255714Skris	addxcc	c_1,t_2,c_1
67355714Skris	addx	c_2,%g0,c_2	!=
67455714Skris	umul	a_3,b_2,t_1	!mul_add_c(a[3],b[2],c3,c1,c2);
67555714Skris	addcc	c_3,t_1,c_3
67655714Skris	rd	%y,t_2
67755714Skris	addxcc	c_1,t_2,c_1	!=
67855714Skris	addx	c_2,%g0,c_2
67955714Skris	ld	ap(5),a_5
68055714Skris	umul	a_4,b_1,t_1	!mul_add_c(a[4],b[1],c3,c1,c2);
68155714Skris	addcc	c_3,t_1,c_3	!=
68255714Skris	rd	%y,t_2
68355714Skris	addxcc	c_1,t_2,c_1
68455714Skris	ld	ap(6),a_6
68555714Skris	addx	c_2,%g0,c_2	!=
68655714Skris	umul	a_5,b_0,t_1	!mul_add_c(a[5],b[0],c3,c1,c2);
68755714Skris	addcc	c_3,t_1,c_3
68855714Skris	rd	%y,t_2
68955714Skris	addxcc	c_1,t_2,c_1	!=
69055714Skris	addx	c_2,%g0,c_2
69155714Skris	st	c_3,rp(5)	!r[5]=c3;
69255714Skris
69355714Skris	umul	a_6,b_0,t_1	!mul_add_c(a[6],b[0],c1,c2,c3);
69455714Skris	addcc	c_1,t_1,c_1	!=
69555714Skris	rd	%y,t_2
69655714Skris	addxcc	c_2,t_2,c_2
69755714Skris	addx	%g0,%g0,c_3
69855714Skris	umul	a_5,b_1,t_1	!=!mul_add_c(a[5],b[1],c1,c2,c3);
69955714Skris	addcc	c_1,t_1,c_1
70055714Skris	rd	%y,t_2
70155714Skris	addxcc	c_2,t_2,c_2
70255714Skris	addx	c_3,%g0,c_3	!=
70355714Skris	umul	a_4,b_2,t_1	!mul_add_c(a[4],b[2],c1,c2,c3);
70455714Skris	addcc	c_1,t_1,c_1
70555714Skris	rd	%y,t_2
70655714Skris	addxcc	c_2,t_2,c_2	!=
70755714Skris	addx	c_3,%g0,c_3
70855714Skris	umul	a_3,b_3,t_1	!mul_add_c(a[3],b[3],c1,c2,c3);
70955714Skris	addcc	c_1,t_1,c_1
71055714Skris	rd	%y,t_2		!=
71155714Skris	addxcc	c_2,t_2,c_2
71255714Skris	addx	c_3,%g0,c_3
71355714Skris	umul	a_2,b_4,t_1	!mul_add_c(a[2],b[4],c1,c2,c3);
71455714Skris	addcc	c_1,t_1,c_1	!=
71555714Skris	rd	%y,t_2
71655714Skris	addxcc	c_2,t_2,c_2
71755714Skris	ld	bp(6),b_6
71855714Skris	addx	c_3,%g0,c_3	!=
71955714Skris	umul	a_1,b_5,t_1	!mul_add_c(a[1],b[5],c1,c2,c3);
72055714Skris	addcc	c_1,t_1,c_1
72155714Skris	rd	%y,t_2
72255714Skris	addxcc	c_2,t_2,c_2	!=
72355714Skris	addx	c_3,%g0,c_3
72455714Skris	ld	bp(7),b_7
72555714Skris	umul	a_0,b_6,t_1	!mul_add_c(a[0],b[6],c1,c2,c3);
72655714Skris	addcc	c_1,t_1,c_1	!=
72755714Skris	rd	%y,t_2
72855714Skris	addxcc	c_2,t_2,c_2
72955714Skris	st	c_1,rp(6)	!r[6]=c1;
73055714Skris	addx	c_3,%g0,c_3	!=
73155714Skris
73255714Skris	umul	a_0,b_7,t_1	!mul_add_c(a[0],b[7],c2,c3,c1);
73355714Skris	addcc	c_2,t_1,c_2
73455714Skris	rd	%y,t_2
73555714Skris	addxcc	c_3,t_2,c_3	!=
73655714Skris	addx	%g0,%g0,c_1
73755714Skris	umul	a_1,b_6,t_1	!mul_add_c(a[1],b[6],c2,c3,c1);
73855714Skris	addcc	c_2,t_1,c_2
73955714Skris	rd	%y,t_2		!=
74055714Skris	addxcc	c_3,t_2,c_3
74155714Skris	addx	c_1,%g0,c_1
74255714Skris	umul	a_2,b_5,t_1	!mul_add_c(a[2],b[5],c2,c3,c1);
74355714Skris	addcc	c_2,t_1,c_2	!=
74455714Skris	rd	%y,t_2
74555714Skris	addxcc	c_3,t_2,c_3
74655714Skris	addx	c_1,%g0,c_1
74755714Skris	umul	a_3,b_4,t_1	!=!mul_add_c(a[3],b[4],c2,c3,c1);
74855714Skris	addcc	c_2,t_1,c_2
74955714Skris	rd	%y,t_2
75055714Skris	addxcc	c_3,t_2,c_3
75155714Skris	addx	c_1,%g0,c_1	!=
75255714Skris	umul	a_4,b_3,t_1	!mul_add_c(a[4],b[3],c2,c3,c1);
75355714Skris	addcc	c_2,t_1,c_2
75455714Skris	rd	%y,t_2
75555714Skris	addxcc	c_3,t_2,c_3	!=
75655714Skris	addx	c_1,%g0,c_1
75755714Skris	umul	a_5,b_2,t_1	!mul_add_c(a[5],b[2],c2,c3,c1);
75855714Skris	addcc	c_2,t_1,c_2
75955714Skris	rd	%y,t_2		!=
76055714Skris	addxcc	c_3,t_2,c_3
76155714Skris	addx	c_1,%g0,c_1
76255714Skris	ld	ap(7),a_7
76355714Skris	umul	a_6,b_1,t_1	!=!mul_add_c(a[6],b[1],c2,c3,c1);
76455714Skris	addcc	c_2,t_1,c_2
76555714Skris	rd	%y,t_2
76655714Skris	addxcc	c_3,t_2,c_3
76755714Skris	addx	c_1,%g0,c_1	!=
76855714Skris	umul	a_7,b_0,t_1	!mul_add_c(a[7],b[0],c2,c3,c1);
76955714Skris	addcc	c_2,t_1,c_2
77055714Skris	rd	%y,t_2
77155714Skris	addxcc	c_3,t_2,c_3	!=
77255714Skris	addx	c_1,%g0,c_1
77355714Skris	st	c_2,rp(7)	!r[7]=c2;
77455714Skris
77555714Skris	umul	a_7,b_1,t_1	!mul_add_c(a[7],b[1],c3,c1,c2);
77655714Skris	addcc	c_3,t_1,c_3	!=
77755714Skris	rd	%y,t_2
77855714Skris	addxcc	c_1,t_2,c_1
77955714Skris	addx	%g0,%g0,c_2
78055714Skris	umul	a_6,b_2,t_1	!=!mul_add_c(a[6],b[2],c3,c1,c2);
78155714Skris	addcc	c_3,t_1,c_3
78255714Skris	rd	%y,t_2
78355714Skris	addxcc	c_1,t_2,c_1
78455714Skris	addx	c_2,%g0,c_2	!=
78555714Skris	umul	a_5,b_3,t_1	!mul_add_c(a[5],b[3],c3,c1,c2);
78655714Skris	addcc	c_3,t_1,c_3
78755714Skris	rd	%y,t_2
78855714Skris	addxcc	c_1,t_2,c_1	!=
78955714Skris	addx	c_2,%g0,c_2
79055714Skris	umul	a_4,b_4,t_1	!mul_add_c(a[4],b[4],c3,c1,c2);
79155714Skris	addcc	c_3,t_1,c_3
79255714Skris	rd	%y,t_2		!=
79355714Skris	addxcc	c_1,t_2,c_1
79455714Skris	addx	c_2,%g0,c_2
79555714Skris	umul	a_3,b_5,t_1	!mul_add_c(a[3],b[5],c3,c1,c2);
79655714Skris	addcc	c_3,t_1,c_3	!=
79755714Skris	rd	%y,t_2
79855714Skris	addxcc	c_1,t_2,c_1
79955714Skris	addx	c_2,%g0,c_2
80055714Skris	umul	a_2,b_6,t_1	!=!mul_add_c(a[2],b[6],c3,c1,c2);
80155714Skris	addcc	c_3,t_1,c_3
80255714Skris	rd	%y,t_2
80355714Skris	addxcc	c_1,t_2,c_1
80455714Skris	addx	c_2,%g0,c_2	!=
80555714Skris	umul	a_1,b_7,t_1	!mul_add_c(a[1],b[7],c3,c1,c2);
80655714Skris	addcc	c_3,t_1,c_3
80755714Skris	rd	%y,t_2
80855714Skris	addxcc	c_1,t_2,c_1	!
80955714Skris	addx	c_2,%g0,c_2
81055714Skris	st	c_3,rp(8)	!r[8]=c3;
81155714Skris
81255714Skris	umul	a_2,b_7,t_1	!mul_add_c(a[2],b[7],c1,c2,c3);
81355714Skris	addcc	c_1,t_1,c_1	!=
81455714Skris	rd	%y,t_2
81555714Skris	addxcc	c_2,t_2,c_2
81655714Skris	addx	%g0,%g0,c_3
81755714Skris	umul	a_3,b_6,t_1	!=!mul_add_c(a[3],b[6],c1,c2,c3);
81855714Skris	addcc	c_1,t_1,c_1
81955714Skris	rd	%y,t_2
82055714Skris	addxcc	c_2,t_2,c_2
82155714Skris	addx	c_3,%g0,c_3	!=
82255714Skris	umul	a_4,b_5,t_1	!mul_add_c(a[4],b[5],c1,c2,c3);
82355714Skris	addcc	c_1,t_1,c_1
82455714Skris	rd	%y,t_2
82555714Skris	addxcc	c_2,t_2,c_2	!=
82655714Skris	addx	c_3,%g0,c_3
82755714Skris	umul	a_5,b_4,t_1	!mul_add_c(a[5],b[4],c1,c2,c3);
82855714Skris	addcc	c_1,t_1,c_1
82955714Skris	rd	%y,t_2		!=
83055714Skris	addxcc	c_2,t_2,c_2
83155714Skris	addx	c_3,%g0,c_3
83255714Skris	umul	a_6,b_3,t_1	!mul_add_c(a[6],b[3],c1,c2,c3);
83355714Skris	addcc	c_1,t_1,c_1	!=
83455714Skris	rd	%y,t_2
83555714Skris	addxcc	c_2,t_2,c_2
83655714Skris	addx	c_3,%g0,c_3
83755714Skris	umul	a_7,b_2,t_1	!=!mul_add_c(a[7],b[2],c1,c2,c3);
83855714Skris	addcc	c_1,t_1,c_1
83955714Skris	rd	%y,t_2
84055714Skris	addxcc	c_2,t_2,c_2
84155714Skris	addx	c_3,%g0,c_3	!=
84255714Skris	st	c_1,rp(9)	!r[9]=c1;
84355714Skris
84455714Skris	umul	a_7,b_3,t_1	!mul_add_c(a[7],b[3],c2,c3,c1);
84555714Skris	addcc	c_2,t_1,c_2
84655714Skris	rd	%y,t_2		!=
84755714Skris	addxcc	c_3,t_2,c_3
84855714Skris	addx	%g0,%g0,c_1
84955714Skris	umul	a_6,b_4,t_1	!mul_add_c(a[6],b[4],c2,c3,c1);
85055714Skris	addcc	c_2,t_1,c_2	!=
85155714Skris	rd	%y,t_2
85255714Skris	addxcc	c_3,t_2,c_3
85355714Skris	addx	c_1,%g0,c_1
85455714Skris	umul	a_5,b_5,t_1	!=!mul_add_c(a[5],b[5],c2,c3,c1);
85555714Skris	addcc	c_2,t_1,c_2
85655714Skris	rd	%y,t_2
85755714Skris	addxcc	c_3,t_2,c_3
85855714Skris	addx	c_1,%g0,c_1	!=
85955714Skris	umul	a_4,b_6,t_1	!mul_add_c(a[4],b[6],c2,c3,c1);
86055714Skris	addcc	c_2,t_1,c_2
86155714Skris	rd	%y,t_2
86255714Skris	addxcc	c_3,t_2,c_3	!=
86355714Skris	addx	c_1,%g0,c_1
86455714Skris	umul	a_3,b_7,t_1	!mul_add_c(a[3],b[7],c2,c3,c1);
86555714Skris	addcc	c_2,t_1,c_2
86655714Skris	rd	%y,t_2		!=
86755714Skris	addxcc	c_3,t_2,c_3
86855714Skris	addx	c_1,%g0,c_1
86955714Skris	st	c_2,rp(10)	!r[10]=c2;
87055714Skris
87155714Skris	umul	a_4,b_7,t_1	!=!mul_add_c(a[4],b[7],c3,c1,c2);
87255714Skris	addcc	c_3,t_1,c_3
87355714Skris	rd	%y,t_2
87455714Skris	addxcc	c_1,t_2,c_1
87555714Skris	addx	%g0,%g0,c_2	!=
87655714Skris	umul	a_5,b_6,t_1	!mul_add_c(a[5],b[6],c3,c1,c2);
87755714Skris	addcc	c_3,t_1,c_3
87855714Skris	rd	%y,t_2
87955714Skris	addxcc	c_1,t_2,c_1	!=
88055714Skris	addx	c_2,%g0,c_2
88155714Skris	umul	a_6,b_5,t_1	!mul_add_c(a[6],b[5],c3,c1,c2);
88255714Skris	addcc	c_3,t_1,c_3
88355714Skris	rd	%y,t_2		!=
88455714Skris	addxcc	c_1,t_2,c_1
88555714Skris	addx	c_2,%g0,c_2
88655714Skris	umul	a_7,b_4,t_1	!mul_add_c(a[7],b[4],c3,c1,c2);
88755714Skris	addcc	c_3,t_1,c_3	!=
88855714Skris	rd	%y,t_2
88955714Skris	addxcc	c_1,t_2,c_1
89055714Skris	st	c_3,rp(11)	!r[11]=c3;
89155714Skris	addx	c_2,%g0,c_2	!=
89255714Skris
89355714Skris	umul	a_7,b_5,t_1	!mul_add_c(a[7],b[5],c1,c2,c3);
89455714Skris	addcc	c_1,t_1,c_1
89555714Skris	rd	%y,t_2
89655714Skris	addxcc	c_2,t_2,c_2	!=
89755714Skris	addx	%g0,%g0,c_3
89855714Skris	umul	a_6,b_6,t_1	!mul_add_c(a[6],b[6],c1,c2,c3);
89955714Skris	addcc	c_1,t_1,c_1
90055714Skris	rd	%y,t_2		!=
90155714Skris	addxcc	c_2,t_2,c_2
90255714Skris	addx	c_3,%g0,c_3
90355714Skris	umul	a_5,b_7,t_1	!mul_add_c(a[5],b[7],c1,c2,c3);
90455714Skris	addcc	c_1,t_1,c_1	!=
90555714Skris	rd	%y,t_2
90655714Skris	addxcc	c_2,t_2,c_2
90755714Skris	st	c_1,rp(12)	!r[12]=c1;
90855714Skris	addx	c_3,%g0,c_3	!=
90955714Skris
91055714Skris	umul	a_6,b_7,t_1	!mul_add_c(a[6],b[7],c2,c3,c1);
91155714Skris	addcc	c_2,t_1,c_2
91255714Skris	rd	%y,t_2
91355714Skris	addxcc	c_3,t_2,c_3	!=
91455714Skris	addx	%g0,%g0,c_1
91555714Skris	umul	a_7,b_6,t_1	!mul_add_c(a[7],b[6],c2,c3,c1);
91655714Skris	addcc	c_2,t_1,c_2
91755714Skris	rd	%y,t_2		!=
91855714Skris	addxcc	c_3,t_2,c_3
91955714Skris	addx	c_1,%g0,c_1
92055714Skris	st	c_2,rp(13)	!r[13]=c2;
92155714Skris
92255714Skris	umul	a_7,b_7,t_1	!=!mul_add_c(a[7],b[7],c3,c1,c2);
92355714Skris	addcc	c_3,t_1,c_3
92455714Skris	rd	%y,t_2
92555714Skris	addxcc	c_1,t_2,c_1
92655714Skris	nop			!=
92755714Skris	st	c_3,rp(14)	!r[14]=c3;
92855714Skris	st	c_1,rp(15)	!r[15]=c1;
92955714Skris
93055714Skris	ret
93155714Skris	restore	%g0,%g0,%o0
93255714Skris
93355714Skris.type	bn_mul_comba8,#function
93455714Skris.size	bn_mul_comba8,(.-bn_mul_comba8)
93555714Skris
93655714Skris.align	32
93755714Skris
93855714Skris.global bn_mul_comba4
93955714Skris/*
94055714Skris * void bn_mul_comba4(r,a,b)
94155714Skris * BN_ULONG *r,*a,*b;
94255714Skris */
94355714Skrisbn_mul_comba4:
94455714Skris	save	%sp,FRAME_SIZE,%sp
94555714Skris	ld	ap(0),a_0
94655714Skris	ld	bp(0),b_0
94755714Skris	umul	a_0,b_0,c_1	!=!mul_add_c(a[0],b[0],c1,c2,c3);
94855714Skris	ld	bp(1),b_1
94955714Skris	rd	%y,c_2
95055714Skris	st	c_1,rp(0)	!r[0]=c1;
95155714Skris
95255714Skris	umul	a_0,b_1,t_1	!=!mul_add_c(a[0],b[1],c2,c3,c1);
95355714Skris	ld	ap(1),a_1
95455714Skris	addcc	c_2,t_1,c_2
95555714Skris	rd	%y,t_2		!=
95655714Skris	addxcc	%g0,t_2,c_3
95755714Skris	addx	%g0,%g0,c_1
95855714Skris	ld	ap(2),a_2
95955714Skris	umul	a_1,b_0,t_1	!=!mul_add_c(a[1],b[0],c2,c3,c1);
96055714Skris	addcc	c_2,t_1,c_2
96155714Skris	rd	%y,t_2
96255714Skris	addxcc	c_3,t_2,c_3
96355714Skris	addx	c_1,%g0,c_1	!=
96455714Skris	st	c_2,rp(1)	!r[1]=c2;
96555714Skris
96655714Skris	umul	a_2,b_0,t_1	!mul_add_c(a[2],b[0],c3,c1,c2);
96755714Skris	addcc	c_3,t_1,c_3
96855714Skris	rd	%y,t_2		!=
96955714Skris	addxcc	c_1,t_2,c_1
97055714Skris	addx	%g0,%g0,c_2
97155714Skris	ld	bp(2),b_2
97255714Skris	umul	a_1,b_1,t_1	!=!mul_add_c(a[1],b[1],c3,c1,c2);
97355714Skris	addcc	c_3,t_1,c_3
97455714Skris	rd	%y,t_2
97555714Skris	addxcc	c_1,t_2,c_1
97655714Skris	addx	c_2,%g0,c_2	!=
97755714Skris	ld	bp(3),b_3
97855714Skris	umul	a_0,b_2,t_1	!mul_add_c(a[0],b[2],c3,c1,c2);
97955714Skris	addcc	c_3,t_1,c_3
98055714Skris	rd	%y,t_2		!=
98155714Skris	addxcc	c_1,t_2,c_1
98255714Skris	addx	c_2,%g0,c_2
98355714Skris	st	c_3,rp(2)	!r[2]=c3;
98455714Skris
98555714Skris	umul	a_0,b_3,t_1	!=!mul_add_c(a[0],b[3],c1,c2,c3);
98655714Skris	addcc	c_1,t_1,c_1
98755714Skris	rd	%y,t_2
98855714Skris	addxcc	c_2,t_2,c_2
98955714Skris	addx	%g0,%g0,c_3	!=
99055714Skris	umul	a_1,b_2,t_1	!mul_add_c(a[1],b[2],c1,c2,c3);
99155714Skris	addcc	c_1,t_1,c_1
99255714Skris	rd	%y,t_2
99355714Skris	addxcc	c_2,t_2,c_2	!=
99455714Skris	addx	c_3,%g0,c_3
99555714Skris	ld	ap(3),a_3
99655714Skris	umul	a_2,b_1,t_1	!mul_add_c(a[2],b[1],c1,c2,c3);
99755714Skris	addcc	c_1,t_1,c_1	!=
99855714Skris	rd	%y,t_2
99955714Skris	addxcc	c_2,t_2,c_2
100055714Skris	addx	c_3,%g0,c_3
100155714Skris	umul	a_3,b_0,t_1	!=!mul_add_c(a[3],b[0],c1,c2,c3);
100255714Skris	addcc	c_1,t_1,c_1
100355714Skris	rd	%y,t_2
100455714Skris	addxcc	c_2,t_2,c_2
100555714Skris	addx	c_3,%g0,c_3	!=
100655714Skris	st	c_1,rp(3)	!r[3]=c1;
100755714Skris
100855714Skris	umul	a_3,b_1,t_1	!mul_add_c(a[3],b[1],c2,c3,c1);
100955714Skris	addcc	c_2,t_1,c_2
101055714Skris	rd	%y,t_2		!=
101155714Skris	addxcc	c_3,t_2,c_3
101255714Skris	addx	%g0,%g0,c_1
101355714Skris	umul	a_2,b_2,t_1	!mul_add_c(a[2],b[2],c2,c3,c1);
101455714Skris	addcc	c_2,t_1,c_2	!=
101555714Skris	rd	%y,t_2
101655714Skris	addxcc	c_3,t_2,c_3
101755714Skris	addx	c_1,%g0,c_1
101855714Skris	umul	a_1,b_3,t_1	!=!mul_add_c(a[1],b[3],c2,c3,c1);
101955714Skris	addcc	c_2,t_1,c_2
102055714Skris	rd	%y,t_2
102155714Skris	addxcc	c_3,t_2,c_3
102255714Skris	addx	c_1,%g0,c_1	!=
102355714Skris	st	c_2,rp(4)	!r[4]=c2;
102455714Skris
102555714Skris	umul	a_2,b_3,t_1	!mul_add_c(a[2],b[3],c3,c1,c2);
102655714Skris	addcc	c_3,t_1,c_3
102755714Skris	rd	%y,t_2		!=
102855714Skris	addxcc	c_1,t_2,c_1
102955714Skris	addx	%g0,%g0,c_2
103055714Skris	umul	a_3,b_2,t_1	!mul_add_c(a[3],b[2],c3,c1,c2);
103155714Skris	addcc	c_3,t_1,c_3	!=
103255714Skris	rd	%y,t_2
103355714Skris	addxcc	c_1,t_2,c_1
103455714Skris	st	c_3,rp(5)	!r[5]=c3;
103555714Skris	addx	c_2,%g0,c_2	!=
103655714Skris
103755714Skris	umul	a_3,b_3,t_1	!mul_add_c(a[3],b[3],c1,c2,c3);
103855714Skris	addcc	c_1,t_1,c_1
103955714Skris	rd	%y,t_2
104055714Skris	addxcc	c_2,t_2,c_2	!=
104155714Skris	st	c_1,rp(6)	!r[6]=c1;
104255714Skris	st	c_2,rp(7)	!r[7]=c2;
104355714Skris
104455714Skris	ret
104555714Skris	restore	%g0,%g0,%o0
104655714Skris
104755714Skris.type	bn_mul_comba4,#function
104855714Skris.size	bn_mul_comba4,(.-bn_mul_comba4)
104955714Skris
105055714Skris.align	32
105155714Skris
105255714Skris.global bn_sqr_comba8
105355714Skrisbn_sqr_comba8:
105455714Skris	save	%sp,FRAME_SIZE,%sp
105555714Skris	ld	ap(0),a_0
105655714Skris	ld	ap(1),a_1
105755714Skris	umul	a_0,a_0,c_1	!=!sqr_add_c(a,0,c1,c2,c3);
105855714Skris	rd	%y,c_2
105955714Skris	st	c_1,rp(0)	!r[0]=c1;
106055714Skris
106155714Skris	ld	ap(2),a_2
106255714Skris	umul	a_0,a_1,t_1	!=!sqr_add_c2(a,1,0,c2,c3,c1);
106355714Skris	addcc	c_2,t_1,c_2
106455714Skris	rd	%y,t_2
106555714Skris	addxcc	%g0,t_2,c_3
106655714Skris	addx	%g0,%g0,c_1	!=
106755714Skris	addcc	c_2,t_1,c_2
106855714Skris	addxcc	c_3,t_2,c_3
106955714Skris	st	c_2,rp(1)	!r[1]=c2;
107055714Skris	addx	c_1,%g0,c_1	!=
107155714Skris
107255714Skris	umul	a_2,a_0,t_1	!sqr_add_c2(a,2,0,c3,c1,c2);
107355714Skris	addcc	c_3,t_1,c_3
107455714Skris	rd	%y,t_2
107555714Skris	addxcc	c_1,t_2,c_1	!=
107655714Skris	addx	%g0,%g0,c_2
107755714Skris	addcc	c_3,t_1,c_3
107855714Skris	addxcc	c_1,t_2,c_1
107955714Skris	addx	c_2,%g0,c_2	!=
108055714Skris	ld	ap(3),a_3
108155714Skris	umul	a_1,a_1,t_1	!sqr_add_c(a,1,c3,c1,c2);
108255714Skris	addcc	c_3,t_1,c_3
108355714Skris	rd	%y,t_2		!=
108455714Skris	addxcc	c_1,t_2,c_1
108555714Skris	addx	c_2,%g0,c_2
108655714Skris	st	c_3,rp(2)	!r[2]=c3;
108755714Skris
108855714Skris	umul	a_0,a_3,t_1	!=!sqr_add_c2(a,3,0,c1,c2,c3);
108955714Skris	addcc	c_1,t_1,c_1
109055714Skris	rd	%y,t_2
109155714Skris	addxcc	c_2,t_2,c_2
109255714Skris	addx	%g0,%g0,c_3	!=
109355714Skris	addcc	c_1,t_1,c_1
109455714Skris	addxcc	c_2,t_2,c_2
109555714Skris	ld	ap(4),a_4
109655714Skris	addx	c_3,%g0,c_3	!=
109755714Skris	umul	a_1,a_2,t_1	!sqr_add_c2(a,2,1,c1,c2,c3);
109855714Skris	addcc	c_1,t_1,c_1
109955714Skris	rd	%y,t_2
110055714Skris	addxcc	c_2,t_2,c_2	!=
110155714Skris	addx	c_3,%g0,c_3
110255714Skris	addcc	c_1,t_1,c_1
110355714Skris	addxcc	c_2,t_2,c_2
110455714Skris	addx	c_3,%g0,c_3	!=
110555714Skris	st	c_1,rp(3)	!r[3]=c1;
110655714Skris
110755714Skris	umul	a_4,a_0,t_1	!sqr_add_c2(a,4,0,c2,c3,c1);
110855714Skris	addcc	c_2,t_1,c_2
110955714Skris	rd	%y,t_2		!=
111055714Skris	addxcc	c_3,t_2,c_3
111155714Skris	addx	%g0,%g0,c_1
111255714Skris	addcc	c_2,t_1,c_2
111355714Skris	addxcc	c_3,t_2,c_3	!=
111455714Skris	addx	c_1,%g0,c_1
111555714Skris	umul	a_3,a_1,t_1	!sqr_add_c2(a,3,1,c2,c3,c1);
111655714Skris	addcc	c_2,t_1,c_2
111755714Skris	rd	%y,t_2		!=
111855714Skris	addxcc	c_3,t_2,c_3
111955714Skris	addx	c_1,%g0,c_1
112055714Skris	addcc	c_2,t_1,c_2
112155714Skris	addxcc	c_3,t_2,c_3	!=
112255714Skris	addx	c_1,%g0,c_1
112355714Skris	ld	ap(5),a_5
112455714Skris	umul	a_2,a_2,t_1	!sqr_add_c(a,2,c2,c3,c1);
112555714Skris	addcc	c_2,t_1,c_2	!=
112655714Skris	rd	%y,t_2
112755714Skris	addxcc	c_3,t_2,c_3
112855714Skris	st	c_2,rp(4)	!r[4]=c2;
112955714Skris	addx	c_1,%g0,c_1	!=
113055714Skris
113155714Skris	umul	a_0,a_5,t_1	!sqr_add_c2(a,5,0,c3,c1,c2);
113255714Skris	addcc	c_3,t_1,c_3
113355714Skris	rd	%y,t_2
113455714Skris	addxcc	c_1,t_2,c_1	!=
113555714Skris	addx	%g0,%g0,c_2
113655714Skris	addcc	c_3,t_1,c_3
113755714Skris	addxcc	c_1,t_2,c_1
113855714Skris	addx	c_2,%g0,c_2	!=
113955714Skris	umul	a_1,a_4,t_1	!sqr_add_c2(a,4,1,c3,c1,c2);
114055714Skris	addcc	c_3,t_1,c_3
114155714Skris	rd	%y,t_2
114255714Skris	addxcc	c_1,t_2,c_1	!=
114355714Skris	addx	c_2,%g0,c_2
114455714Skris	addcc	c_3,t_1,c_3
114555714Skris	addxcc	c_1,t_2,c_1
114655714Skris	addx	c_2,%g0,c_2	!=
114755714Skris	ld	ap(6),a_6
114855714Skris	umul	a_2,a_3,t_1	!sqr_add_c2(a,3,2,c3,c1,c2);
114955714Skris	addcc	c_3,t_1,c_3
115055714Skris	rd	%y,t_2		!=
115155714Skris	addxcc	c_1,t_2,c_1
115255714Skris	addx	c_2,%g0,c_2
115355714Skris	addcc	c_3,t_1,c_3
115455714Skris	addxcc	c_1,t_2,c_1	!=
115555714Skris	addx	c_2,%g0,c_2
115655714Skris	st	c_3,rp(5)	!r[5]=c3;
115755714Skris
115855714Skris	umul	a_6,a_0,t_1	!sqr_add_c2(a,6,0,c1,c2,c3);
115955714Skris	addcc	c_1,t_1,c_1	!=
116055714Skris	rd	%y,t_2
116155714Skris	addxcc	c_2,t_2,c_2
116255714Skris	addx	%g0,%g0,c_3
116355714Skris	addcc	c_1,t_1,c_1	!=
116455714Skris	addxcc	c_2,t_2,c_2
116555714Skris	addx	c_3,%g0,c_3
116655714Skris	umul	a_5,a_1,t_1	!sqr_add_c2(a,5,1,c1,c2,c3);
116755714Skris	addcc	c_1,t_1,c_1	!=
116855714Skris	rd	%y,t_2
116955714Skris	addxcc	c_2,t_2,c_2
117055714Skris	addx	c_3,%g0,c_3
117155714Skris	addcc	c_1,t_1,c_1	!=
117255714Skris	addxcc	c_2,t_2,c_2
117355714Skris	addx	c_3,%g0,c_3
117455714Skris	umul	a_4,a_2,t_1	!sqr_add_c2(a,4,2,c1,c2,c3);
117555714Skris	addcc	c_1,t_1,c_1	!=
117655714Skris	rd	%y,t_2
117755714Skris	addxcc	c_2,t_2,c_2
117855714Skris	addx	c_3,%g0,c_3
117955714Skris	addcc	c_1,t_1,c_1	!=
118055714Skris	addxcc	c_2,t_2,c_2
118155714Skris	addx	c_3,%g0,c_3
118255714Skris	ld	ap(7),a_7
118355714Skris	umul	a_3,a_3,t_1	!=!sqr_add_c(a,3,c1,c2,c3);
118455714Skris	addcc	c_1,t_1,c_1
118555714Skris	rd	%y,t_2
118655714Skris	addxcc	c_2,t_2,c_2
118755714Skris	addx	c_3,%g0,c_3	!=
118855714Skris	st	c_1,rp(6)	!r[6]=c1;
118955714Skris
119055714Skris	umul	a_0,a_7,t_1	!sqr_add_c2(a,7,0,c2,c3,c1);
119155714Skris	addcc	c_2,t_1,c_2
119255714Skris	rd	%y,t_2		!=
119355714Skris	addxcc	c_3,t_2,c_3
119455714Skris	addx	%g0,%g0,c_1
119555714Skris	addcc	c_2,t_1,c_2
119655714Skris	addxcc	c_3,t_2,c_3	!=
119755714Skris	addx	c_1,%g0,c_1
119855714Skris	umul	a_1,a_6,t_1	!sqr_add_c2(a,6,1,c2,c3,c1);
119955714Skris	addcc	c_2,t_1,c_2
120055714Skris	rd	%y,t_2		!=
120155714Skris	addxcc	c_3,t_2,c_3
120255714Skris	addx	c_1,%g0,c_1
120355714Skris	addcc	c_2,t_1,c_2
120455714Skris	addxcc	c_3,t_2,c_3	!=
120555714Skris	addx	c_1,%g0,c_1
120655714Skris	umul	a_2,a_5,t_1	!sqr_add_c2(a,5,2,c2,c3,c1);
120755714Skris	addcc	c_2,t_1,c_2
120855714Skris	rd	%y,t_2		!=
120955714Skris	addxcc	c_3,t_2,c_3
121055714Skris	addx	c_1,%g0,c_1
121155714Skris	addcc	c_2,t_1,c_2
121255714Skris	addxcc	c_3,t_2,c_3	!=
121355714Skris	addx	c_1,%g0,c_1
121455714Skris	umul	a_3,a_4,t_1	!sqr_add_c2(a,4,3,c2,c3,c1);
121555714Skris	addcc	c_2,t_1,c_2
121655714Skris	rd	%y,t_2		!=
121755714Skris	addxcc	c_3,t_2,c_3
121855714Skris	addx	c_1,%g0,c_1
121955714Skris	addcc	c_2,t_1,c_2
122055714Skris	addxcc	c_3,t_2,c_3	!=
122155714Skris	addx	c_1,%g0,c_1
122255714Skris	st	c_2,rp(7)	!r[7]=c2;
122355714Skris
122455714Skris	umul	a_7,a_1,t_1	!sqr_add_c2(a,7,1,c3,c1,c2);
122555714Skris	addcc	c_3,t_1,c_3	!=
122655714Skris	rd	%y,t_2
122755714Skris	addxcc	c_1,t_2,c_1
122855714Skris	addx	%g0,%g0,c_2
122955714Skris	addcc	c_3,t_1,c_3	!=
123055714Skris	addxcc	c_1,t_2,c_1
123155714Skris	addx	c_2,%g0,c_2
123255714Skris	umul	a_6,a_2,t_1	!sqr_add_c2(a,6,2,c3,c1,c2);
123355714Skris	addcc	c_3,t_1,c_3	!=
123455714Skris	rd	%y,t_2
123555714Skris	addxcc	c_1,t_2,c_1
123655714Skris	addx	c_2,%g0,c_2
123755714Skris	addcc	c_3,t_1,c_3	!=
123855714Skris	addxcc	c_1,t_2,c_1
123955714Skris	addx	c_2,%g0,c_2
124055714Skris	umul	a_5,a_3,t_1	!sqr_add_c2(a,5,3,c3,c1,c2);
124155714Skris	addcc	c_3,t_1,c_3	!=
124255714Skris	rd	%y,t_2
124355714Skris	addxcc	c_1,t_2,c_1
124455714Skris	addx	c_2,%g0,c_2
124555714Skris	addcc	c_3,t_1,c_3	!=
124655714Skris	addxcc	c_1,t_2,c_1
124755714Skris	addx	c_2,%g0,c_2
124855714Skris	umul	a_4,a_4,t_1	!sqr_add_c(a,4,c3,c1,c2);
124955714Skris	addcc	c_3,t_1,c_3	!=
125055714Skris	rd	%y,t_2
125155714Skris	addxcc	c_1,t_2,c_1
125255714Skris	st	c_3,rp(8)	!r[8]=c3;
125355714Skris	addx	c_2,%g0,c_2	!=
125455714Skris
125555714Skris	umul	a_2,a_7,t_1	!sqr_add_c2(a,7,2,c1,c2,c3);
125655714Skris	addcc	c_1,t_1,c_1
125755714Skris	rd	%y,t_2
125855714Skris	addxcc	c_2,t_2,c_2	!=
125955714Skris	addx	%g0,%g0,c_3
126055714Skris	addcc	c_1,t_1,c_1
126155714Skris	addxcc	c_2,t_2,c_2
126255714Skris	addx	c_3,%g0,c_3	!=
126355714Skris	umul	a_3,a_6,t_1	!sqr_add_c2(a,6,3,c1,c2,c3);
126455714Skris	addcc	c_1,t_1,c_1
126555714Skris	rd	%y,t_2
126655714Skris	addxcc	c_2,t_2,c_2	!=
126755714Skris	addx	c_3,%g0,c_3
126855714Skris	addcc	c_1,t_1,c_1
126955714Skris	addxcc	c_2,t_2,c_2
127055714Skris	addx	c_3,%g0,c_3	!=
127155714Skris	umul	a_4,a_5,t_1	!sqr_add_c2(a,5,4,c1,c2,c3);
127255714Skris	addcc	c_1,t_1,c_1
127355714Skris	rd	%y,t_2
127455714Skris	addxcc	c_2,t_2,c_2	!=
127555714Skris	addx	c_3,%g0,c_3
127655714Skris	addcc	c_1,t_1,c_1
127755714Skris	addxcc	c_2,t_2,c_2
127855714Skris	addx	c_3,%g0,c_3	!=
127955714Skris	st	c_1,rp(9)	!r[9]=c1;
128055714Skris
128155714Skris	umul	a_7,a_3,t_1	!sqr_add_c2(a,7,3,c2,c3,c1);
128255714Skris	addcc	c_2,t_1,c_2
128355714Skris	rd	%y,t_2		!=
128455714Skris	addxcc	c_3,t_2,c_3
128555714Skris	addx	%g0,%g0,c_1
128655714Skris	addcc	c_2,t_1,c_2
128755714Skris	addxcc	c_3,t_2,c_3	!=
128855714Skris	addx	c_1,%g0,c_1
128955714Skris	umul	a_6,a_4,t_1	!sqr_add_c2(a,6,4,c2,c3,c1);
129055714Skris	addcc	c_2,t_1,c_2
129155714Skris	rd	%y,t_2		!=
129255714Skris	addxcc	c_3,t_2,c_3
129355714Skris	addx	c_1,%g0,c_1
129455714Skris	addcc	c_2,t_1,c_2
129555714Skris	addxcc	c_3,t_2,c_3	!=
129655714Skris	addx	c_1,%g0,c_1
129755714Skris	umul	a_5,a_5,t_1	!sqr_add_c(a,5,c2,c3,c1);
129855714Skris	addcc	c_2,t_1,c_2
129955714Skris	rd	%y,t_2		!=
130055714Skris	addxcc	c_3,t_2,c_3
130155714Skris	addx	c_1,%g0,c_1
130255714Skris	st	c_2,rp(10)	!r[10]=c2;
130355714Skris
130455714Skris	umul	a_4,a_7,t_1	!=!sqr_add_c2(a,7,4,c3,c1,c2);
130555714Skris	addcc	c_3,t_1,c_3
130655714Skris	rd	%y,t_2
130755714Skris	addxcc	c_1,t_2,c_1
130855714Skris	addx	%g0,%g0,c_2	!=
130955714Skris	addcc	c_3,t_1,c_3
131055714Skris	addxcc	c_1,t_2,c_1
131155714Skris	addx	c_2,%g0,c_2
131255714Skris	umul	a_5,a_6,t_1	!=!sqr_add_c2(a,6,5,c3,c1,c2);
131355714Skris	addcc	c_3,t_1,c_3
131455714Skris	rd	%y,t_2
131555714Skris	addxcc	c_1,t_2,c_1
131655714Skris	addx	c_2,%g0,c_2	!=
131755714Skris	addcc	c_3,t_1,c_3
131855714Skris	addxcc	c_1,t_2,c_1
131955714Skris	st	c_3,rp(11)	!r[11]=c3;
132055714Skris	addx	c_2,%g0,c_2	!=
132155714Skris
132255714Skris	umul	a_7,a_5,t_1	!sqr_add_c2(a,7,5,c1,c2,c3);
132355714Skris	addcc	c_1,t_1,c_1
132455714Skris	rd	%y,t_2
132555714Skris	addxcc	c_2,t_2,c_2	!=
132655714Skris	addx	%g0,%g0,c_3
132755714Skris	addcc	c_1,t_1,c_1
132855714Skris	addxcc	c_2,t_2,c_2
132955714Skris	addx	c_3,%g0,c_3	!=
133055714Skris	umul	a_6,a_6,t_1	!sqr_add_c(a,6,c1,c2,c3);
133155714Skris	addcc	c_1,t_1,c_1
133255714Skris	rd	%y,t_2
133355714Skris	addxcc	c_2,t_2,c_2	!=
133455714Skris	addx	c_3,%g0,c_3
133555714Skris	st	c_1,rp(12)	!r[12]=c1;
133655714Skris
133755714Skris	umul	a_6,a_7,t_1	!sqr_add_c2(a,7,6,c2,c3,c1);
133855714Skris	addcc	c_2,t_1,c_2	!=
133955714Skris	rd	%y,t_2
134055714Skris	addxcc	c_3,t_2,c_3
134155714Skris	addx	%g0,%g0,c_1
134255714Skris	addcc	c_2,t_1,c_2	!=
134355714Skris	addxcc	c_3,t_2,c_3
134455714Skris	st	c_2,rp(13)	!r[13]=c2;
134555714Skris	addx	c_1,%g0,c_1	!=
134655714Skris
134755714Skris	umul	a_7,a_7,t_1	!sqr_add_c(a,7,c3,c1,c2);
134855714Skris	addcc	c_3,t_1,c_3
134955714Skris	rd	%y,t_2
135055714Skris	addxcc	c_1,t_2,c_1	!=
135155714Skris	st	c_3,rp(14)	!r[14]=c3;
135255714Skris	st	c_1,rp(15)	!r[15]=c1;
135355714Skris
135455714Skris	ret
135555714Skris	restore	%g0,%g0,%o0
135655714Skris
135755714Skris.type	bn_sqr_comba8,#function
135855714Skris.size	bn_sqr_comba8,(.-bn_sqr_comba8)
135955714Skris
136055714Skris.align	32
136155714Skris
136255714Skris.global bn_sqr_comba4
136355714Skris/*
136455714Skris * void bn_sqr_comba4(r,a)
136555714Skris * BN_ULONG *r,*a;
136655714Skris */
136755714Skrisbn_sqr_comba4:
136855714Skris	save	%sp,FRAME_SIZE,%sp
136955714Skris	ld	ap(0),a_0
137055714Skris	umul	a_0,a_0,c_1	!sqr_add_c(a,0,c1,c2,c3);
137155714Skris	ld	ap(1),a_1	!=
137255714Skris	rd	%y,c_2
137355714Skris	st	c_1,rp(0)	!r[0]=c1;
137455714Skris
137555714Skris	ld	ap(2),a_2
137655714Skris	umul	a_0,a_1,t_1	!=!sqr_add_c2(a,1,0,c2,c3,c1);
137755714Skris	addcc	c_2,t_1,c_2
137855714Skris	rd	%y,t_2
137955714Skris	addxcc	%g0,t_2,c_3
138055714Skris	addx	%g0,%g0,c_1	!=
138155714Skris	addcc	c_2,t_1,c_2
138255714Skris	addxcc	c_3,t_2,c_3
138355714Skris	addx	c_1,%g0,c_1	!=
138455714Skris	st	c_2,rp(1)	!r[1]=c2;
138555714Skris
138655714Skris	umul	a_2,a_0,t_1	!sqr_add_c2(a,2,0,c3,c1,c2);
138755714Skris	addcc	c_3,t_1,c_3
138855714Skris	rd	%y,t_2		!=
138955714Skris	addxcc	c_1,t_2,c_1
139055714Skris	addx	%g0,%g0,c_2
139155714Skris	addcc	c_3,t_1,c_3
139255714Skris	addxcc	c_1,t_2,c_1	!=
139355714Skris	addx	c_2,%g0,c_2
139455714Skris	ld	ap(3),a_3
139555714Skris	umul	a_1,a_1,t_1	!sqr_add_c(a,1,c3,c1,c2);
139655714Skris	addcc	c_3,t_1,c_3	!=
139755714Skris	rd	%y,t_2
139855714Skris	addxcc	c_1,t_2,c_1
139955714Skris	st	c_3,rp(2)	!r[2]=c3;
140055714Skris	addx	c_2,%g0,c_2	!=
140155714Skris
140255714Skris	umul	a_0,a_3,t_1	!sqr_add_c2(a,3,0,c1,c2,c3);
140355714Skris	addcc	c_1,t_1,c_1
140455714Skris	rd	%y,t_2
140555714Skris	addxcc	c_2,t_2,c_2	!=
140655714Skris	addx	%g0,%g0,c_3
140755714Skris	addcc	c_1,t_1,c_1
140855714Skris	addxcc	c_2,t_2,c_2
140955714Skris	addx	c_3,%g0,c_3	!=
141055714Skris	umul	a_1,a_2,t_1	!sqr_add_c2(a,2,1,c1,c2,c3);
141155714Skris	addcc	c_1,t_1,c_1
141255714Skris	rd	%y,t_2
141355714Skris	addxcc	c_2,t_2,c_2	!=
141455714Skris	addx	c_3,%g0,c_3
141555714Skris	addcc	c_1,t_1,c_1
141655714Skris	addxcc	c_2,t_2,c_2
141755714Skris	addx	c_3,%g0,c_3	!=
141855714Skris	st	c_1,rp(3)	!r[3]=c1;
141955714Skris
142055714Skris	umul	a_3,a_1,t_1	!sqr_add_c2(a,3,1,c2,c3,c1);
142155714Skris	addcc	c_2,t_1,c_2
142255714Skris	rd	%y,t_2		!=
142355714Skris	addxcc	c_3,t_2,c_3
142455714Skris	addx	%g0,%g0,c_1
142555714Skris	addcc	c_2,t_1,c_2
142655714Skris	addxcc	c_3,t_2,c_3	!=
142755714Skris	addx	c_1,%g0,c_1
142855714Skris	umul	a_2,a_2,t_1	!sqr_add_c(a,2,c2,c3,c1);
142955714Skris	addcc	c_2,t_1,c_2
143055714Skris	rd	%y,t_2		!=
143155714Skris	addxcc	c_3,t_2,c_3
143255714Skris	addx	c_1,%g0,c_1
143355714Skris	st	c_2,rp(4)	!r[4]=c2;
143455714Skris
143555714Skris	umul	a_2,a_3,t_1	!=!sqr_add_c2(a,3,2,c3,c1,c2);
143655714Skris	addcc	c_3,t_1,c_3
143755714Skris	rd	%y,t_2
143855714Skris	addxcc	c_1,t_2,c_1
143955714Skris	addx	%g0,%g0,c_2	!=
144055714Skris	addcc	c_3,t_1,c_3
144155714Skris	addxcc	c_1,t_2,c_1
144255714Skris	st	c_3,rp(5)	!r[5]=c3;
144355714Skris	addx	c_2,%g0,c_2	!=
144455714Skris
144555714Skris	umul	a_3,a_3,t_1	!sqr_add_c(a,3,c1,c2,c3);
144655714Skris	addcc	c_1,t_1,c_1
144755714Skris	rd	%y,t_2
144855714Skris	addxcc	c_2,t_2,c_2	!=
144955714Skris	st	c_1,rp(6)	!r[6]=c1;
145055714Skris	st	c_2,rp(7)	!r[7]=c2;
145155714Skris
145255714Skris	ret
145355714Skris	restore	%g0,%g0,%o0
145455714Skris
145555714Skris.type	bn_sqr_comba4,#function
145655714Skris.size	bn_sqr_comba4,(.-bn_sqr_comba4)
145755714Skris
145855714Skris.align	32
1459