xref: /netbsd-src/crypto/external/bsd/openssl/lib/libcrypto/arch/mips/mips.S (revision 1b3d6f93806f8821fe459e13ad13e605b37c6d43)
152629741Schristos#if !(defined (__mips_isa_rev) && (__mips_isa_rev >= 6))
276c4f342Schristos.set     mips2
352629741Schristos#endif
4e0ea3921Schristos#include "mips_arch.h"
5e0ea3921Schristos
6e0ea3921Schristos#if defined(_MIPS_ARCH_MIPS64R6)
7e0ea3921Schristos# define ddivu(rs,rt)
8e0ea3921Schristos# define mfqt(rd,rs,rt)	ddivu	rd,rs,rt
9e0ea3921Schristos# define mfrm(rd,rs,rt)	dmodu	rd,rs,rt
10e0ea3921Schristos#elif defined(_MIPS_ARCH_MIPS32R6)
11e0ea3921Schristos# define divu(rs,rt)
12e0ea3921Schristos# define mfqt(rd,rs,rt)	divu	rd,rs,rt
13e0ea3921Schristos# define mfrm(rd,rs,rt)	modu	rd,rs,rt
14e0ea3921Schristos#else
15e0ea3921Schristos# define divu(rs,rt)	divu	$0,rs,rt
16e0ea3921Schristos# define mfqt(rd,rs,rt)	mflo	rd
17e0ea3921Schristos# define mfrm(rd,rs,rt)	mfhi	rd
18e0ea3921Schristos#endif
19e0ea3921Schristos
2076c4f342Schristos.rdata
2176c4f342Schristos.asciiz	"mips3.s, Version 1.2"
2276c4f342Schristos.asciiz	"MIPS II/III/IV ISA artwork by Andy Polyakov <appro@fy.chalmers.se>"
2376c4f342Schristos
2476c4f342Schristos.text
2576c4f342Schristos.set	noat
2676c4f342Schristos
2776c4f342Schristos.align	5
2876c4f342Schristos.globl	bn_mul_add_words
2976c4f342Schristos.ent	bn_mul_add_words
3076c4f342Schristosbn_mul_add_words:
3176c4f342Schristos	.set	noreorder
3276c4f342Schristos	bgtz	$6,bn_mul_add_words_internal
3376c4f342Schristos	move	$2,$0
3476c4f342Schristos	jr	$31
3576c4f342Schristos	move	$4,$2
3676c4f342Schristos.end	bn_mul_add_words
3776c4f342Schristos
3876c4f342Schristos.align	5
3976c4f342Schristos.ent	bn_mul_add_words_internal
4076c4f342Schristosbn_mul_add_words_internal:
4176c4f342Schristos	.set	reorder
4276c4f342Schristos	li	$3,-4
4376c4f342Schristos	and	$8,$6,$3
4476c4f342Schristos	beqz	$8,.L_bn_mul_add_words_tail
4576c4f342Schristos
4676c4f342Schristos.L_bn_mul_add_words_loop:
4776c4f342Schristos	lw	$12,0($5)
48e0ea3921Schristos	multu	($12,$7)
4976c4f342Schristos	lw	$13,0($4)
5076c4f342Schristos	lw	$14,4($5)
5176c4f342Schristos	lw	$15,4($4)
5276c4f342Schristos	lw	$8,2*4($5)
5376c4f342Schristos	lw	$9,2*4($4)
5476c4f342Schristos	addu	$13,$2
5576c4f342Schristos	sltu	$2,$13,$2	# All manuals say it "compares 32-bit
5676c4f342Schristos				# values", but it seems to work fine
5776c4f342Schristos				# even on 64-bit registers.
58e0ea3921Schristos	mflo	($1,$12,$7)
59e0ea3921Schristos	mfhi	($12,$12,$7)
6076c4f342Schristos	addu	$13,$1
6176c4f342Schristos	addu	$2,$12
62e0ea3921Schristos	 multu	($14,$7)
6376c4f342Schristos	sltu	$1,$13,$1
6476c4f342Schristos	sw	$13,0($4)
6576c4f342Schristos	addu	$2,$1
6676c4f342Schristos
6776c4f342Schristos	lw	$10,3*4($5)
6876c4f342Schristos	lw	$11,3*4($4)
6976c4f342Schristos	addu	$15,$2
7076c4f342Schristos	sltu	$2,$15,$2
71e0ea3921Schristos	mflo	($1,$14,$7)
72e0ea3921Schristos	mfhi	($14,$14,$7)
7376c4f342Schristos	addu	$15,$1
7476c4f342Schristos	addu	$2,$14
75e0ea3921Schristos	 multu	($8,$7)
7676c4f342Schristos	sltu	$1,$15,$1
7776c4f342Schristos	sw	$15,4($4)
7876c4f342Schristos	addu	$2,$1
7976c4f342Schristos
8076c4f342Schristos	subu	$6,4
8176c4f342Schristos	addu $4,4*4
8276c4f342Schristos	addu $5,4*4
8376c4f342Schristos	addu	$9,$2
8476c4f342Schristos	sltu	$2,$9,$2
85e0ea3921Schristos	mflo	($1,$8,$7)
86e0ea3921Schristos	mfhi	($8,$8,$7)
8776c4f342Schristos	addu	$9,$1
8876c4f342Schristos	addu	$2,$8
89e0ea3921Schristos	 multu	($10,$7)
9076c4f342Schristos	sltu	$1,$9,$1
9176c4f342Schristos	sw	$9,-2*4($4)
9276c4f342Schristos	addu	$2,$1
9376c4f342Schristos
9476c4f342Schristos
9576c4f342Schristos	and	$8,$6,$3
9676c4f342Schristos	addu	$11,$2
9776c4f342Schristos	sltu	$2,$11,$2
98e0ea3921Schristos	mflo	($1,$10,$7)
99e0ea3921Schristos	mfhi	($10,$10,$7)
10076c4f342Schristos	addu	$11,$1
10176c4f342Schristos	addu	$2,$10
10276c4f342Schristos	sltu	$1,$11,$1
10376c4f342Schristos	sw	$11,-4($4)
10476c4f342Schristos	.set	noreorder
10576c4f342Schristos	bgtz	$8,.L_bn_mul_add_words_loop
10676c4f342Schristos	addu	$2,$1
10776c4f342Schristos
10876c4f342Schristos	beqz	$6,.L_bn_mul_add_words_return
10976c4f342Schristos	nop
11076c4f342Schristos
11176c4f342Schristos.L_bn_mul_add_words_tail:
11276c4f342Schristos	.set	reorder
11376c4f342Schristos	lw	$12,0($5)
114e0ea3921Schristos	multu	($12,$7)
11576c4f342Schristos	lw	$13,0($4)
11676c4f342Schristos	subu	$6,1
11776c4f342Schristos	addu	$13,$2
11876c4f342Schristos	sltu	$2,$13,$2
119e0ea3921Schristos	mflo	($1,$12,$7)
120e0ea3921Schristos	mfhi	($12,$12,$7)
12176c4f342Schristos	addu	$13,$1
12276c4f342Schristos	addu	$2,$12
12376c4f342Schristos	sltu	$1,$13,$1
12476c4f342Schristos	sw	$13,0($4)
12576c4f342Schristos	addu	$2,$1
12676c4f342Schristos	beqz	$6,.L_bn_mul_add_words_return
12776c4f342Schristos
12876c4f342Schristos	lw	$12,4($5)
129e0ea3921Schristos	multu	($12,$7)
13076c4f342Schristos	lw	$13,4($4)
13176c4f342Schristos	subu	$6,1
13276c4f342Schristos	addu	$13,$2
13376c4f342Schristos	sltu	$2,$13,$2
134e0ea3921Schristos	mflo	($1,$12,$7)
135e0ea3921Schristos	mfhi	($12,$12,$7)
13676c4f342Schristos	addu	$13,$1
13776c4f342Schristos	addu	$2,$12
13876c4f342Schristos	sltu	$1,$13,$1
13976c4f342Schristos	sw	$13,4($4)
14076c4f342Schristos	addu	$2,$1
14176c4f342Schristos	beqz	$6,.L_bn_mul_add_words_return
14276c4f342Schristos
14376c4f342Schristos	lw	$12,2*4($5)
144e0ea3921Schristos	multu	($12,$7)
14576c4f342Schristos	lw	$13,2*4($4)
14676c4f342Schristos	addu	$13,$2
14776c4f342Schristos	sltu	$2,$13,$2
148e0ea3921Schristos	mflo	($1,$12,$7)
149e0ea3921Schristos	mfhi	($12,$12,$7)
15076c4f342Schristos	addu	$13,$1
15176c4f342Schristos	addu	$2,$12
15276c4f342Schristos	sltu	$1,$13,$1
15376c4f342Schristos	sw	$13,2*4($4)
15476c4f342Schristos	addu	$2,$1
15576c4f342Schristos
15676c4f342Schristos.L_bn_mul_add_words_return:
15776c4f342Schristos	.set	noreorder
15876c4f342Schristos	jr	$31
15976c4f342Schristos	move	$4,$2
16076c4f342Schristos.end	bn_mul_add_words_internal
16176c4f342Schristos
16276c4f342Schristos.align	5
16376c4f342Schristos.globl	bn_mul_words
16476c4f342Schristos.ent	bn_mul_words
16576c4f342Schristosbn_mul_words:
16676c4f342Schristos	.set	noreorder
16776c4f342Schristos	bgtz	$6,bn_mul_words_internal
16876c4f342Schristos	move	$2,$0
16976c4f342Schristos	jr	$31
17076c4f342Schristos	move	$4,$2
17176c4f342Schristos.end	bn_mul_words
17276c4f342Schristos
17376c4f342Schristos.align	5
17476c4f342Schristos.ent	bn_mul_words_internal
17576c4f342Schristosbn_mul_words_internal:
17676c4f342Schristos	.set	reorder
17776c4f342Schristos	li	$3,-4
17876c4f342Schristos	and	$8,$6,$3
17976c4f342Schristos	beqz	$8,.L_bn_mul_words_tail
18076c4f342Schristos
18176c4f342Schristos.L_bn_mul_words_loop:
18276c4f342Schristos	lw	$12,0($5)
183e0ea3921Schristos	multu	($12,$7)
18476c4f342Schristos	lw	$14,4($5)
18576c4f342Schristos	lw	$8,2*4($5)
18676c4f342Schristos	lw	$10,3*4($5)
187e0ea3921Schristos	mflo	($1,$12,$7)
188e0ea3921Schristos	mfhi	($12,$12,$7)
18976c4f342Schristos	addu	$2,$1
19076c4f342Schristos	sltu	$13,$2,$1
191e0ea3921Schristos	 multu	($14,$7)
19276c4f342Schristos	sw	$2,0($4)
19376c4f342Schristos	addu	$2,$13,$12
19476c4f342Schristos
19576c4f342Schristos	subu	$6,4
19676c4f342Schristos	addu $4,4*4
19776c4f342Schristos	addu $5,4*4
198e0ea3921Schristos	mflo	($1,$14,$7)
199e0ea3921Schristos	mfhi	($14,$14,$7)
20076c4f342Schristos	addu	$2,$1
20176c4f342Schristos	sltu	$15,$2,$1
202e0ea3921Schristos	 multu	($8,$7)
20376c4f342Schristos	sw	$2,-3*4($4)
20476c4f342Schristos	addu	$2,$15,$14
20576c4f342Schristos
206e0ea3921Schristos	mflo	($1,$8,$7)
207e0ea3921Schristos	mfhi	($8,$8,$7)
20876c4f342Schristos	addu	$2,$1
20976c4f342Schristos	sltu	$9,$2,$1
210e0ea3921Schristos	 multu	($10,$7)
21176c4f342Schristos	sw	$2,-2*4($4)
21276c4f342Schristos	addu	$2,$9,$8
21376c4f342Schristos
21476c4f342Schristos	and	$8,$6,$3
215e0ea3921Schristos	mflo	($1,$10,$7)
216e0ea3921Schristos	mfhi	($10,$10,$7)
21776c4f342Schristos	addu	$2,$1
21876c4f342Schristos	sltu	$11,$2,$1
21976c4f342Schristos	sw	$2,-4($4)
22076c4f342Schristos	.set	noreorder
22176c4f342Schristos	bgtz	$8,.L_bn_mul_words_loop
22276c4f342Schristos	addu	$2,$11,$10
22376c4f342Schristos
22476c4f342Schristos	beqz	$6,.L_bn_mul_words_return
22576c4f342Schristos	nop
22676c4f342Schristos
22776c4f342Schristos.L_bn_mul_words_tail:
22876c4f342Schristos	.set	reorder
22976c4f342Schristos	lw	$12,0($5)
230e0ea3921Schristos	multu	($12,$7)
23176c4f342Schristos	subu	$6,1
232e0ea3921Schristos	mflo	($1,$12,$7)
233e0ea3921Schristos	mfhi	($12,$12,$7)
23476c4f342Schristos	addu	$2,$1
23576c4f342Schristos	sltu	$13,$2,$1
23676c4f342Schristos	sw	$2,0($4)
23776c4f342Schristos	addu	$2,$13,$12
23876c4f342Schristos	beqz	$6,.L_bn_mul_words_return
23976c4f342Schristos
24076c4f342Schristos	lw	$12,4($5)
241e0ea3921Schristos	multu	($12,$7)
24276c4f342Schristos	subu	$6,1
243e0ea3921Schristos	mflo	($1,$12,$7)
244e0ea3921Schristos	mfhi	($12,$12,$7)
24576c4f342Schristos	addu	$2,$1
24676c4f342Schristos	sltu	$13,$2,$1
24776c4f342Schristos	sw	$2,4($4)
24876c4f342Schristos	addu	$2,$13,$12
24976c4f342Schristos	beqz	$6,.L_bn_mul_words_return
25076c4f342Schristos
25176c4f342Schristos	lw	$12,2*4($5)
252e0ea3921Schristos	multu	($12,$7)
253e0ea3921Schristos	mflo	($1,$12,$7)
254e0ea3921Schristos	mfhi	($12,$12,$7)
25576c4f342Schristos	addu	$2,$1
25676c4f342Schristos	sltu	$13,$2,$1
25776c4f342Schristos	sw	$2,2*4($4)
25876c4f342Schristos	addu	$2,$13,$12
25976c4f342Schristos
26076c4f342Schristos.L_bn_mul_words_return:
26176c4f342Schristos	.set	noreorder
26276c4f342Schristos	jr	$31
26376c4f342Schristos	move	$4,$2
26476c4f342Schristos.end	bn_mul_words_internal
26576c4f342Schristos
26676c4f342Schristos.align	5
26776c4f342Schristos.globl	bn_sqr_words
26876c4f342Schristos.ent	bn_sqr_words
26976c4f342Schristosbn_sqr_words:
27076c4f342Schristos	.set	noreorder
27176c4f342Schristos	bgtz	$6,bn_sqr_words_internal
27276c4f342Schristos	move	$2,$0
27376c4f342Schristos	jr	$31
27476c4f342Schristos	move	$4,$2
27576c4f342Schristos.end	bn_sqr_words
27676c4f342Schristos
27776c4f342Schristos.align	5
27876c4f342Schristos.ent	bn_sqr_words_internal
27976c4f342Schristosbn_sqr_words_internal:
28076c4f342Schristos	.set	reorder
28176c4f342Schristos	li	$3,-4
28276c4f342Schristos	and	$8,$6,$3
28376c4f342Schristos	beqz	$8,.L_bn_sqr_words_tail
28476c4f342Schristos
28576c4f342Schristos.L_bn_sqr_words_loop:
28676c4f342Schristos	lw	$12,0($5)
287e0ea3921Schristos	multu	($12,$12)
28876c4f342Schristos	lw	$14,4($5)
28976c4f342Schristos	lw	$8,2*4($5)
29076c4f342Schristos	lw	$10,3*4($5)
291e0ea3921Schristos	mflo	($13,$12,$12)
292e0ea3921Schristos	mfhi	($12,$12,$12)
29376c4f342Schristos	sw	$13,0($4)
29476c4f342Schristos	sw	$12,4($4)
29576c4f342Schristos
296e0ea3921Schristos	multu	($14,$14)
29776c4f342Schristos	subu	$6,4
29876c4f342Schristos	addu $4,8*4
29976c4f342Schristos	addu $5,4*4
300e0ea3921Schristos	mflo	($15,$14,$14)
301e0ea3921Schristos	mfhi	($14,$14,$14)
30276c4f342Schristos	sw	$15,-6*4($4)
30376c4f342Schristos	sw	$14,-5*4($4)
30476c4f342Schristos
305e0ea3921Schristos	multu	($8,$8)
306e0ea3921Schristos	mflo	($9,$8,$8)
307e0ea3921Schristos	mfhi	($8,$8,$8)
30876c4f342Schristos	sw	$9,-4*4($4)
30976c4f342Schristos	sw	$8,-3*4($4)
31076c4f342Schristos
31176c4f342Schristos
312e0ea3921Schristos	multu	($10,$10)
31376c4f342Schristos	and	$8,$6,$3
314e0ea3921Schristos	mflo	($11,$10,$10)
315e0ea3921Schristos	mfhi	($10,$10,$10)
31676c4f342Schristos	sw	$11,-2*4($4)
31776c4f342Schristos
31876c4f342Schristos	.set	noreorder
319e0ea3921Schristos	bgtz	$8,.L_bn_sqr_words_loop
3202247b70aSchristos	sw	$10,-4($4)
32176c4f342Schristos
32276c4f342Schristos	beqz	$6,.L_bn_sqr_words_return
32376c4f342Schristos	nop
32476c4f342Schristos
32576c4f342Schristos.L_bn_sqr_words_tail:
32676c4f342Schristos	.set	reorder
32776c4f342Schristos	lw	$12,0($5)
328e0ea3921Schristos	multu	($12,$12)
32976c4f342Schristos	subu	$6,1
330e0ea3921Schristos	mflo	($13,$12,$12)
331e0ea3921Schristos	mfhi	($12,$12,$12)
33276c4f342Schristos	sw	$13,0($4)
33376c4f342Schristos	sw	$12,4($4)
33476c4f342Schristos	beqz	$6,.L_bn_sqr_words_return
33576c4f342Schristos
33676c4f342Schristos	lw	$12,4($5)
337e0ea3921Schristos	multu	($12,$12)
33876c4f342Schristos	subu	$6,1
339e0ea3921Schristos	mflo	($13,$12,$12)
340e0ea3921Schristos	mfhi	($12,$12,$12)
34176c4f342Schristos	sw	$13,2*4($4)
34276c4f342Schristos	sw	$12,3*4($4)
34376c4f342Schristos	beqz	$6,.L_bn_sqr_words_return
34476c4f342Schristos
34576c4f342Schristos	lw	$12,2*4($5)
346e0ea3921Schristos	multu	($12,$12)
347e0ea3921Schristos	mflo	($13,$12,$12)
348e0ea3921Schristos	mfhi	($12,$12,$12)
34976c4f342Schristos	sw	$13,4*4($4)
35076c4f342Schristos	sw	$12,5*4($4)
35176c4f342Schristos
35276c4f342Schristos.L_bn_sqr_words_return:
35376c4f342Schristos	.set	noreorder
35476c4f342Schristos	jr	$31
35576c4f342Schristos	move	$4,$2
35676c4f342Schristos
35776c4f342Schristos.end	bn_sqr_words_internal
35876c4f342Schristos
35976c4f342Schristos.align	5
36076c4f342Schristos.globl	bn_add_words
36176c4f342Schristos.ent	bn_add_words
36276c4f342Schristosbn_add_words:
36376c4f342Schristos	.set	noreorder
36476c4f342Schristos	bgtz	$7,bn_add_words_internal
36576c4f342Schristos	move	$2,$0
36676c4f342Schristos	jr	$31
36776c4f342Schristos	move	$4,$2
36876c4f342Schristos.end	bn_add_words
36976c4f342Schristos
37076c4f342Schristos.align	5
37176c4f342Schristos.ent	bn_add_words_internal
37276c4f342Schristosbn_add_words_internal:
37376c4f342Schristos	.set	reorder
37476c4f342Schristos	li	$3,-4
37576c4f342Schristos	and	$1,$7,$3
37676c4f342Schristos	beqz	$1,.L_bn_add_words_tail
37776c4f342Schristos
37876c4f342Schristos.L_bn_add_words_loop:
37976c4f342Schristos	lw	$12,0($5)
38076c4f342Schristos	lw	$8,0($6)
38176c4f342Schristos	subu	$7,4
38276c4f342Schristos	lw	$13,4($5)
38376c4f342Schristos	and	$1,$7,$3
38476c4f342Schristos	lw	$14,2*4($5)
38576c4f342Schristos	addu $6,4*4
38676c4f342Schristos	lw	$15,3*4($5)
38776c4f342Schristos	addu $4,4*4
38876c4f342Schristos	lw	$9,-3*4($6)
38976c4f342Schristos	addu $5,4*4
39076c4f342Schristos	lw	$10,-2*4($6)
39176c4f342Schristos	lw	$11,-4($6)
39276c4f342Schristos	addu	$8,$12
39376c4f342Schristos	sltu	$24,$8,$12
39476c4f342Schristos	addu	$12,$8,$2
39576c4f342Schristos	sltu	$2,$12,$8
39676c4f342Schristos	sw	$12,-4*4($4)
39776c4f342Schristos	addu	$2,$24
39876c4f342Schristos
39976c4f342Schristos	addu	$9,$13
40076c4f342Schristos	sltu	$25,$9,$13
40176c4f342Schristos	addu	$13,$9,$2
40276c4f342Schristos	sltu	$2,$13,$9
40376c4f342Schristos	sw	$13,-3*4($4)
40476c4f342Schristos	addu	$2,$25
40576c4f342Schristos
40676c4f342Schristos	addu	$10,$14
40776c4f342Schristos	sltu	$24,$10,$14
40876c4f342Schristos	addu	$14,$10,$2
40976c4f342Schristos	sltu	$2,$14,$10
41076c4f342Schristos	sw	$14,-2*4($4)
41176c4f342Schristos	addu	$2,$24
41276c4f342Schristos
41376c4f342Schristos	addu	$11,$15
41476c4f342Schristos	sltu	$25,$11,$15
41576c4f342Schristos	addu	$15,$11,$2
41676c4f342Schristos	sltu	$2,$15,$11
41776c4f342Schristos	sw	$15,-4($4)
41876c4f342Schristos
41976c4f342Schristos	.set	noreorder
42076c4f342Schristos	bgtz	$1,.L_bn_add_words_loop
42176c4f342Schristos	addu	$2,$25
42276c4f342Schristos
42376c4f342Schristos	beqz	$7,.L_bn_add_words_return
42476c4f342Schristos	nop
42576c4f342Schristos
42676c4f342Schristos.L_bn_add_words_tail:
42776c4f342Schristos	.set	reorder
42876c4f342Schristos	lw	$12,0($5)
42976c4f342Schristos	lw	$8,0($6)
43076c4f342Schristos	addu	$8,$12
43176c4f342Schristos	subu	$7,1
43276c4f342Schristos	sltu	$24,$8,$12
43376c4f342Schristos	addu	$12,$8,$2
43476c4f342Schristos	sltu	$2,$12,$8
43576c4f342Schristos	sw	$12,0($4)
43676c4f342Schristos	addu	$2,$24
43776c4f342Schristos	beqz	$7,.L_bn_add_words_return
43876c4f342Schristos
43976c4f342Schristos	lw	$13,4($5)
44076c4f342Schristos	lw	$9,4($6)
44176c4f342Schristos	addu	$9,$13
44276c4f342Schristos	subu	$7,1
44376c4f342Schristos	sltu	$25,$9,$13
44476c4f342Schristos	addu	$13,$9,$2
44576c4f342Schristos	sltu	$2,$13,$9
44676c4f342Schristos	sw	$13,4($4)
44776c4f342Schristos	addu	$2,$25
44876c4f342Schristos	beqz	$7,.L_bn_add_words_return
44976c4f342Schristos
45076c4f342Schristos	lw	$14,2*4($5)
45176c4f342Schristos	lw	$10,2*4($6)
45276c4f342Schristos	addu	$10,$14
45376c4f342Schristos	sltu	$24,$10,$14
45476c4f342Schristos	addu	$14,$10,$2
45576c4f342Schristos	sltu	$2,$14,$10
45676c4f342Schristos	sw	$14,2*4($4)
45776c4f342Schristos	addu	$2,$24
45876c4f342Schristos
45976c4f342Schristos.L_bn_add_words_return:
46076c4f342Schristos	.set	noreorder
46176c4f342Schristos	jr	$31
46276c4f342Schristos	move	$4,$2
46376c4f342Schristos
46476c4f342Schristos.end	bn_add_words_internal
46576c4f342Schristos
46676c4f342Schristos.align	5
46776c4f342Schristos.globl	bn_sub_words
46876c4f342Schristos.ent	bn_sub_words
46976c4f342Schristosbn_sub_words:
47076c4f342Schristos	.set	noreorder
47176c4f342Schristos	bgtz	$7,bn_sub_words_internal
47276c4f342Schristos	move	$2,$0
47376c4f342Schristos	jr	$31
47476c4f342Schristos	move	$4,$0
47576c4f342Schristos.end	bn_sub_words
47676c4f342Schristos
47776c4f342Schristos.align	5
47876c4f342Schristos.ent	bn_sub_words_internal
47976c4f342Schristosbn_sub_words_internal:
48076c4f342Schristos	.set	reorder
48176c4f342Schristos	li	$3,-4
48276c4f342Schristos	and	$1,$7,$3
48376c4f342Schristos	beqz	$1,.L_bn_sub_words_tail
48476c4f342Schristos
48576c4f342Schristos.L_bn_sub_words_loop:
48676c4f342Schristos	lw	$12,0($5)
48776c4f342Schristos	lw	$8,0($6)
48876c4f342Schristos	subu	$7,4
48976c4f342Schristos	lw	$13,4($5)
49076c4f342Schristos	and	$1,$7,$3
49176c4f342Schristos	lw	$14,2*4($5)
49276c4f342Schristos	addu $6,4*4
49376c4f342Schristos	lw	$15,3*4($5)
49476c4f342Schristos	addu $4,4*4
49576c4f342Schristos	lw	$9,-3*4($6)
49676c4f342Schristos	addu $5,4*4
49776c4f342Schristos	lw	$10,-2*4($6)
49876c4f342Schristos	lw	$11,-4($6)
49976c4f342Schristos	sltu	$24,$12,$8
50076c4f342Schristos	subu	$8,$12,$8
50176c4f342Schristos	subu	$12,$8,$2
50276c4f342Schristos	sgtu	$2,$12,$8
50376c4f342Schristos	sw	$12,-4*4($4)
50476c4f342Schristos	addu	$2,$24
50576c4f342Schristos
50676c4f342Schristos	sltu	$25,$13,$9
50776c4f342Schristos	subu	$9,$13,$9
50876c4f342Schristos	subu	$13,$9,$2
50976c4f342Schristos	sgtu	$2,$13,$9
51076c4f342Schristos	sw	$13,-3*4($4)
51176c4f342Schristos	addu	$2,$25
51276c4f342Schristos
51376c4f342Schristos
51476c4f342Schristos	sltu	$24,$14,$10
51576c4f342Schristos	subu	$10,$14,$10
51676c4f342Schristos	subu	$14,$10,$2
51776c4f342Schristos	sgtu	$2,$14,$10
51876c4f342Schristos	sw	$14,-2*4($4)
51976c4f342Schristos	addu	$2,$24
52076c4f342Schristos
52176c4f342Schristos	sltu	$25,$15,$11
52276c4f342Schristos	subu	$11,$15,$11
52376c4f342Schristos	subu	$15,$11,$2
52476c4f342Schristos	sgtu	$2,$15,$11
52576c4f342Schristos	sw	$15,-4($4)
52676c4f342Schristos
52776c4f342Schristos	.set	noreorder
52876c4f342Schristos	bgtz	$1,.L_bn_sub_words_loop
52976c4f342Schristos	addu	$2,$25
53076c4f342Schristos
53176c4f342Schristos	beqz	$7,.L_bn_sub_words_return
53276c4f342Schristos	nop
53376c4f342Schristos
53476c4f342Schristos.L_bn_sub_words_tail:
53576c4f342Schristos	.set	reorder
53676c4f342Schristos	lw	$12,0($5)
53776c4f342Schristos	lw	$8,0($6)
53876c4f342Schristos	subu	$7,1
53976c4f342Schristos	sltu	$24,$12,$8
54076c4f342Schristos	subu	$8,$12,$8
54176c4f342Schristos	subu	$12,$8,$2
54276c4f342Schristos	sgtu	$2,$12,$8
54376c4f342Schristos	sw	$12,0($4)
54476c4f342Schristos	addu	$2,$24
54576c4f342Schristos	beqz	$7,.L_bn_sub_words_return
54676c4f342Schristos
54776c4f342Schristos	lw	$13,4($5)
54876c4f342Schristos	subu	$7,1
54976c4f342Schristos	lw	$9,4($6)
55076c4f342Schristos	sltu	$25,$13,$9
55176c4f342Schristos	subu	$9,$13,$9
55276c4f342Schristos	subu	$13,$9,$2
55376c4f342Schristos	sgtu	$2,$13,$9
55476c4f342Schristos	sw	$13,4($4)
55576c4f342Schristos	addu	$2,$25
55676c4f342Schristos	beqz	$7,.L_bn_sub_words_return
55776c4f342Schristos
55876c4f342Schristos	lw	$14,2*4($5)
55976c4f342Schristos	lw	$10,2*4($6)
56076c4f342Schristos	sltu	$24,$14,$10
56176c4f342Schristos	subu	$10,$14,$10
56276c4f342Schristos	subu	$14,$10,$2
56376c4f342Schristos	sgtu	$2,$14,$10
56476c4f342Schristos	sw	$14,2*4($4)
56576c4f342Schristos	addu	$2,$24
56676c4f342Schristos
56776c4f342Schristos.L_bn_sub_words_return:
56876c4f342Schristos	.set	noreorder
56976c4f342Schristos	jr	$31
57076c4f342Schristos	move	$4,$2
57176c4f342Schristos.end	bn_sub_words_internal
57276c4f342Schristos
57352629741Schristos#if 0
57452629741Schristos/*
57552629741Schristos * The bn_div_3_words entry point is re-used for constant-time interface.
57652629741Schristos * Implementation is retained as historical reference.
57752629741Schristos */
57876c4f342Schristos.align 5
57976c4f342Schristos.globl	bn_div_3_words
58076c4f342Schristos.ent	bn_div_3_words
58176c4f342Schristosbn_div_3_words:
58276c4f342Schristos	.set	noreorder
58376c4f342Schristos	move	$7,$4		# we know that bn_div_words does not
58476c4f342Schristos				# touch $7, $10, $11 and preserves $6
58576c4f342Schristos				# so that we can save two arguments
58676c4f342Schristos				# and return address in registers
58776c4f342Schristos				# instead of stack:-)
58876c4f342Schristos
58976c4f342Schristos	lw	$4,($7)
59076c4f342Schristos	move	$10,$5
591e0ea3921Schristos	bne	$4,$6,bn_div_3_words_internal
5922247b70aSchristos	lw	$5,-4($7)
59376c4f342Schristos	li	$2,-1
59476c4f342Schristos	jr	$31
59576c4f342Schristos	move	$4,$2
59676c4f342Schristos.end	bn_div_3_words
59776c4f342Schristos
59876c4f342Schristos.align	5
59976c4f342Schristos.ent	bn_div_3_words_internal
60076c4f342Schristosbn_div_3_words_internal:
60176c4f342Schristos	.set	reorder
60276c4f342Schristos	move	$11,$31
60376c4f342Schristos	bal	bn_div_words_internal
60476c4f342Schristos	move	$31,$11
605e0ea3921Schristos	multu	($10,$2)
60676c4f342Schristos	lw	$14,-2*4($7)
60776c4f342Schristos	move	$8,$0
608e0ea3921Schristos	mfhi	($13,$10,$2)
609e0ea3921Schristos	mflo	($12,$10,$2)
61076c4f342Schristos	sltu	$24,$13,$5
61176c4f342Schristos.L_bn_div_3_words_inner_loop:
61276c4f342Schristos	bnez	$24,.L_bn_div_3_words_inner_loop_done
61376c4f342Schristos	sgeu	$1,$14,$12
61476c4f342Schristos	seq	$25,$13,$5
61576c4f342Schristos	and	$1,$25
61676c4f342Schristos	sltu	$15,$12,$10
61776c4f342Schristos	addu	$5,$6
61876c4f342Schristos	subu	$13,$15
61976c4f342Schristos	subu	$12,$10
62076c4f342Schristos	sltu	$24,$13,$5
62176c4f342Schristos	sltu	$8,$5,$6
62276c4f342Schristos	or	$24,$8
62376c4f342Schristos	.set	noreorder
62476c4f342Schristos	beqz	$1,.L_bn_div_3_words_inner_loop
62576c4f342Schristos	subu	$2,1
62676c4f342Schristos	addu	$2,1
62776c4f342Schristos	.set	reorder
62876c4f342Schristos.L_bn_div_3_words_inner_loop_done:
62976c4f342Schristos	.set	noreorder
63076c4f342Schristos	jr	$31
63176c4f342Schristos	move	$4,$2
63276c4f342Schristos.end	bn_div_3_words_internal
63352629741Schristos#endif
63476c4f342Schristos
63576c4f342Schristos.align	5
63676c4f342Schristos.globl	bn_div_words
63776c4f342Schristos.ent	bn_div_words
63876c4f342Schristosbn_div_words:
63976c4f342Schristos	.set	noreorder
64076c4f342Schristos	bnez	$6,bn_div_words_internal
64176c4f342Schristos	li	$2,-1		# I would rather signal div-by-zero
64276c4f342Schristos				# which can be done with 'break 7'
64376c4f342Schristos	jr	$31
64476c4f342Schristos	move	$4,$2
64576c4f342Schristos.end	bn_div_words
64676c4f342Schristos
64776c4f342Schristos.align	5
64876c4f342Schristos.ent	bn_div_words_internal
64976c4f342Schristosbn_div_words_internal:
65076c4f342Schristos	move	$3,$0
65176c4f342Schristos	bltz	$6,.L_bn_div_words_body
65276c4f342Schristos	move	$25,$3
65376c4f342Schristos	sll	$6,1
65476c4f342Schristos	bgtz	$6,.-4
65576c4f342Schristos	addu	$25,1
65676c4f342Schristos
65776c4f342Schristos	.set	reorder
65876c4f342Schristos	negu	$13,$25
65976c4f342Schristos	li	$14,-1
66076c4f342Schristos	sll	$14,$13
66176c4f342Schristos	and	$14,$4
66276c4f342Schristos	srl	$1,$5,$13
66376c4f342Schristos	.set	noreorder
66476c4f342Schristos	beqz	$14,.+12
66576c4f342Schristos	nop
66676c4f342Schristos	break	6		# signal overflow
66776c4f342Schristos	.set	reorder
66876c4f342Schristos	sll	$4,$25
66976c4f342Schristos	sll	$5,$25
67076c4f342Schristos	or	$4,$1
67176c4f342Schristos.L_bn_div_words_body:
67276c4f342Schristos	srl	$3,$6,4*4	# bits
67376c4f342Schristos	sgeu	$1,$4,$6
67476c4f342Schristos	.set	noreorder
67576c4f342Schristos	beqz	$1,.+12
67676c4f342Schristos	nop
67776c4f342Schristos	subu	$4,$6
67876c4f342Schristos	.set	reorder
67976c4f342Schristos
68076c4f342Schristos	li	$8,-1
68176c4f342Schristos	srl	$9,$4,4*4	# bits
68276c4f342Schristos	srl	$8,4*4	# q=0xffffffff
68376c4f342Schristos	beq	$3,$9,.L_bn_div_words_skip_div1
684e0ea3921Schristos	divu	($4,$3)
685e0ea3921Schristos	mfqt	($8,$4,$3)
68676c4f342Schristos.L_bn_div_words_skip_div1:
687e0ea3921Schristos	multu	($6,$8)
68876c4f342Schristos	sll	$15,$4,4*4	# bits
68976c4f342Schristos	srl	$1,$5,4*4	# bits
69076c4f342Schristos	or	$15,$1
691e0ea3921Schristos	mflo	($12,$6,$8)
692e0ea3921Schristos	mfhi	($13,$6,$8)
69376c4f342Schristos.L_bn_div_words_inner_loop1:
69476c4f342Schristos	sltu	$14,$15,$12
69576c4f342Schristos	seq	$24,$9,$13
69676c4f342Schristos	sltu	$1,$9,$13
69776c4f342Schristos	and	$14,$24
69876c4f342Schristos	sltu	$2,$12,$6
69976c4f342Schristos	or	$1,$14
70076c4f342Schristos	.set	noreorder
70176c4f342Schristos	beqz	$1,.L_bn_div_words_inner_loop1_done
70276c4f342Schristos	subu	$13,$2
70376c4f342Schristos	subu	$12,$6
70476c4f342Schristos	b	.L_bn_div_words_inner_loop1
70576c4f342Schristos	subu	$8,1
70676c4f342Schristos	.set	reorder
70776c4f342Schristos.L_bn_div_words_inner_loop1_done:
70876c4f342Schristos
70976c4f342Schristos	sll	$5,4*4	# bits
71076c4f342Schristos	subu	$4,$15,$12
71176c4f342Schristos	sll	$2,$8,4*4	# bits
71276c4f342Schristos
71376c4f342Schristos	li	$8,-1
71476c4f342Schristos	srl	$9,$4,4*4	# bits
71576c4f342Schristos	srl	$8,4*4	# q=0xffffffff
71676c4f342Schristos	beq	$3,$9,.L_bn_div_words_skip_div2
717e0ea3921Schristos	divu	($4,$3)
718e0ea3921Schristos	mfqt	($8,$4,$3)
71976c4f342Schristos.L_bn_div_words_skip_div2:
720e0ea3921Schristos	multu	($6,$8)
72176c4f342Schristos	sll	$15,$4,4*4	# bits
72276c4f342Schristos	srl	$1,$5,4*4	# bits
72376c4f342Schristos	or	$15,$1
724e0ea3921Schristos	mflo	($12,$6,$8)
725e0ea3921Schristos	mfhi	($13,$6,$8)
72676c4f342Schristos.L_bn_div_words_inner_loop2:
72776c4f342Schristos	sltu	$14,$15,$12
72876c4f342Schristos	seq	$24,$9,$13
72976c4f342Schristos	sltu	$1,$9,$13
73076c4f342Schristos	and	$14,$24
73176c4f342Schristos	sltu	$3,$12,$6
73276c4f342Schristos	or	$1,$14
73376c4f342Schristos	.set	noreorder
73476c4f342Schristos	beqz	$1,.L_bn_div_words_inner_loop2_done
73576c4f342Schristos	subu	$13,$3
73676c4f342Schristos	subu	$12,$6
73776c4f342Schristos	b	.L_bn_div_words_inner_loop2
73876c4f342Schristos	subu	$8,1
73976c4f342Schristos	.set	reorder
74076c4f342Schristos.L_bn_div_words_inner_loop2_done:
74176c4f342Schristos
74276c4f342Schristos	subu	$4,$15,$12
74376c4f342Schristos	or	$2,$8
74476c4f342Schristos	srl	$3,$4,$25	# $3 contains remainder if anybody wants it
74576c4f342Schristos	srl	$6,$25		# restore $6
74676c4f342Schristos
74776c4f342Schristos	.set	noreorder
74876c4f342Schristos	move	$5,$3
74976c4f342Schristos	jr	$31
75076c4f342Schristos	move	$4,$2
75176c4f342Schristos.end	bn_div_words_internal
75276c4f342Schristos
75376c4f342Schristos.align	5
75476c4f342Schristos.globl	bn_mul_comba8
75576c4f342Schristos.ent	bn_mul_comba8
75676c4f342Schristosbn_mul_comba8:
75776c4f342Schristos	.set	noreorder
75876c4f342Schristos	.frame	$29,6*4,$31
75976c4f342Schristos	.mask	0x003f0000,-4
76076c4f342Schristos	subu $29,6*4
76176c4f342Schristos	sw	$21,5*4($29)
76276c4f342Schristos	sw	$20,4*4($29)
76376c4f342Schristos	sw	$19,3*4($29)
76476c4f342Schristos	sw	$18,2*4($29)
76576c4f342Schristos	sw	$17,1*4($29)
76676c4f342Schristos	sw	$16,0*4($29)
76776c4f342Schristos
76876c4f342Schristos	.set	reorder
76976c4f342Schristos	lw	$12,0($5)	# If compiled with -mips3 option on
77076c4f342Schristos				# R5000 box assembler barks on this
77176c4f342Schristos				# 1ine with "should not have mult/div
77276c4f342Schristos				# as last instruction in bb (R10K
77376c4f342Schristos				# bug)" warning. If anybody out there
77476c4f342Schristos				# has a clue about how to circumvent
77576c4f342Schristos				# this do send me a note.
77676c4f342Schristos				#		<appro@fy.chalmers.se>
77776c4f342Schristos
77876c4f342Schristos	lw	$8,0($6)
77976c4f342Schristos	lw	$13,4($5)
78076c4f342Schristos	lw	$14,2*4($5)
781e0ea3921Schristos	multu	($12,$8)		# mul_add_c(a[0],b[0],c1,c2,c3);
78276c4f342Schristos	lw	$15,3*4($5)
78376c4f342Schristos	lw	$9,4($6)
78476c4f342Schristos	lw	$10,2*4($6)
78576c4f342Schristos	lw	$11,3*4($6)
786e0ea3921Schristos	mflo	($2,$12,$8)
787e0ea3921Schristos	mfhi	($3,$12,$8)
78876c4f342Schristos
78976c4f342Schristos	lw	$16,4*4($5)
79076c4f342Schristos	lw	$18,5*4($5)
791e0ea3921Schristos	multu	($12,$9)		# mul_add_c(a[0],b[1],c2,c3,c1);
79276c4f342Schristos	lw	$20,6*4($5)
79376c4f342Schristos	lw	$5,7*4($5)
79476c4f342Schristos	lw	$17,4*4($6)
79576c4f342Schristos	lw	$19,5*4($6)
796e0ea3921Schristos	mflo	($24,$12,$9)
797e0ea3921Schristos	mfhi	($25,$12,$9)
79876c4f342Schristos	addu	$3,$24
79976c4f342Schristos	sltu	$1,$3,$24
800e0ea3921Schristos	multu	($13,$8)		# mul_add_c(a[1],b[0],c2,c3,c1);
80176c4f342Schristos	addu	$7,$25,$1
80276c4f342Schristos	lw	$21,6*4($6)
80376c4f342Schristos	lw	$6,7*4($6)
80476c4f342Schristos	sw	$2,0($4)	# r[0]=c1;
805e0ea3921Schristos	mflo	($24,$13,$8)
806e0ea3921Schristos	mfhi	($25,$13,$8)
80776c4f342Schristos	addu	$3,$24
80876c4f342Schristos	sltu	$1,$3,$24
809e0ea3921Schristos	 multu	($14,$8)		# mul_add_c(a[2],b[0],c3,c1,c2);
81076c4f342Schristos	addu	$25,$1
81176c4f342Schristos	addu	$7,$25
81276c4f342Schristos	sltu	$2,$7,$25
81376c4f342Schristos	sw	$3,4($4)	# r[1]=c2;
81476c4f342Schristos
815e0ea3921Schristos	mflo	($24,$14,$8)
816e0ea3921Schristos	mfhi	($25,$14,$8)
81776c4f342Schristos	addu	$7,$24
81876c4f342Schristos	sltu	$1,$7,$24
819e0ea3921Schristos	multu	($13,$9)		# mul_add_c(a[1],b[1],c3,c1,c2);
82076c4f342Schristos	addu	$25,$1
82176c4f342Schristos	addu	$2,$25
822e0ea3921Schristos	mflo	($24,$13,$9)
823e0ea3921Schristos	mfhi	($25,$13,$9)
82476c4f342Schristos	addu	$7,$24
82576c4f342Schristos	sltu	$1,$7,$24
826e0ea3921Schristos	multu	($12,$10)		# mul_add_c(a[0],b[2],c3,c1,c2);
82776c4f342Schristos	addu	$25,$1
82876c4f342Schristos	addu	$2,$25
82976c4f342Schristos	sltu	$3,$2,$25
830e0ea3921Schristos	mflo	($24,$12,$10)
831e0ea3921Schristos	mfhi	($25,$12,$10)
83276c4f342Schristos	addu	$7,$24
83376c4f342Schristos	sltu	$1,$7,$24
834e0ea3921Schristos	 multu	($12,$11)		# mul_add_c(a[0],b[3],c1,c2,c3);
83576c4f342Schristos	addu	$25,$1
83676c4f342Schristos	addu	$2,$25
83776c4f342Schristos	sltu	$1,$2,$25
83876c4f342Schristos	addu	$3,$1
83976c4f342Schristos	sw	$7,2*4($4)	# r[2]=c3;
84076c4f342Schristos
841e0ea3921Schristos	mflo	($24,$12,$11)
842e0ea3921Schristos	mfhi	($25,$12,$11)
84376c4f342Schristos	addu	$2,$24
84476c4f342Schristos	sltu	$1,$2,$24
845e0ea3921Schristos	multu	($13,$10)		# mul_add_c(a[1],b[2],c1,c2,c3);
84676c4f342Schristos	addu	$25,$1
84776c4f342Schristos	addu	$3,$25
84876c4f342Schristos	sltu	$7,$3,$25
849e0ea3921Schristos	mflo	($24,$13,$10)
850e0ea3921Schristos	mfhi	($25,$13,$10)
85176c4f342Schristos	addu	$2,$24
85276c4f342Schristos	sltu	$1,$2,$24
853e0ea3921Schristos	multu	($14,$9)		# mul_add_c(a[2],b[1],c1,c2,c3);
85476c4f342Schristos	addu	$25,$1
85576c4f342Schristos	addu	$3,$25
85676c4f342Schristos	sltu	$1,$3,$25
85776c4f342Schristos	addu	$7,$1
858e0ea3921Schristos	mflo	($24,$14,$9)
859e0ea3921Schristos	mfhi	($25,$14,$9)
86076c4f342Schristos	addu	$2,$24
86176c4f342Schristos	sltu	$1,$2,$24
862e0ea3921Schristos	multu	($15,$8)		# mul_add_c(a[3],b[0],c1,c2,c3);
86376c4f342Schristos	addu	$25,$1
86476c4f342Schristos	addu	$3,$25
86576c4f342Schristos	sltu	$1,$3,$25
86676c4f342Schristos	addu	$7,$1
867e0ea3921Schristos	mflo	($24,$15,$8)
868e0ea3921Schristos	mfhi	($25,$15,$8)
86976c4f342Schristos	addu	$2,$24
87076c4f342Schristos	sltu	$1,$2,$24
871e0ea3921Schristos	 multu	($16,$8)		# mul_add_c(a[4],b[0],c2,c3,c1);
87276c4f342Schristos	addu	$25,$1
87376c4f342Schristos	addu	$3,$25
87476c4f342Schristos	sltu	$1,$3,$25
87576c4f342Schristos	addu	$7,$1
87676c4f342Schristos	sw	$2,3*4($4)	# r[3]=c1;
87776c4f342Schristos
878e0ea3921Schristos	mflo	($24,$16,$8)
879e0ea3921Schristos	mfhi	($25,$16,$8)
88076c4f342Schristos	addu	$3,$24
88176c4f342Schristos	sltu	$1,$3,$24
882e0ea3921Schristos	multu	($15,$9)		# mul_add_c(a[3],b[1],c2,c3,c1);
88376c4f342Schristos	addu	$25,$1
88476c4f342Schristos	addu	$7,$25
88576c4f342Schristos	sltu	$2,$7,$25
886e0ea3921Schristos	mflo	($24,$15,$9)
887e0ea3921Schristos	mfhi	($25,$15,$9)
88876c4f342Schristos	addu	$3,$24
88976c4f342Schristos	sltu	$1,$3,$24
890e0ea3921Schristos	multu	($14,$10)		# mul_add_c(a[2],b[2],c2,c3,c1);
89176c4f342Schristos	addu	$25,$1
89276c4f342Schristos	addu	$7,$25
89376c4f342Schristos	sltu	$1,$7,$25
89476c4f342Schristos	addu	$2,$1
895e0ea3921Schristos	mflo	($24,$14,$10)
896e0ea3921Schristos	mfhi	($25,$14,$10)
89776c4f342Schristos	addu	$3,$24
89876c4f342Schristos	sltu	$1,$3,$24
899e0ea3921Schristos	multu	($13,$11)		# mul_add_c(a[1],b[3],c2,c3,c1);
90076c4f342Schristos	addu	$25,$1
90176c4f342Schristos	addu	$7,$25
90276c4f342Schristos	sltu	$1,$7,$25
90376c4f342Schristos	addu	$2,$1
904e0ea3921Schristos	mflo	($24,$13,$11)
905e0ea3921Schristos	mfhi	($25,$13,$11)
90676c4f342Schristos	addu	$3,$24
90776c4f342Schristos	sltu	$1,$3,$24
908e0ea3921Schristos	multu	($12,$17)		# mul_add_c(a[0],b[4],c2,c3,c1);
90976c4f342Schristos	addu	$25,$1
91076c4f342Schristos	addu	$7,$25
91176c4f342Schristos	sltu	$1,$7,$25
91276c4f342Schristos	addu	$2,$1
913e0ea3921Schristos	mflo	($24,$12,$17)
914e0ea3921Schristos	mfhi	($25,$12,$17)
91576c4f342Schristos	addu	$3,$24
91676c4f342Schristos	sltu	$1,$3,$24
917e0ea3921Schristos	 multu	($12,$19)		# mul_add_c(a[0],b[5],c3,c1,c2);
91876c4f342Schristos	addu	$25,$1
91976c4f342Schristos	addu	$7,$25
92076c4f342Schristos	sltu	$1,$7,$25
92176c4f342Schristos	addu	$2,$1
92276c4f342Schristos	sw	$3,4*4($4)	# r[4]=c2;
92376c4f342Schristos
924e0ea3921Schristos	mflo	($24,$12,$19)
925e0ea3921Schristos	mfhi	($25,$12,$19)
92676c4f342Schristos	addu	$7,$24
92776c4f342Schristos	sltu	$1,$7,$24
928e0ea3921Schristos	multu	($13,$17)		# mul_add_c(a[1],b[4],c3,c1,c2);
92976c4f342Schristos	addu	$25,$1
93076c4f342Schristos	addu	$2,$25
93176c4f342Schristos	sltu	$3,$2,$25
932e0ea3921Schristos	mflo	($24,$13,$17)
933e0ea3921Schristos	mfhi	($25,$13,$17)
93476c4f342Schristos	addu	$7,$24
93576c4f342Schristos	sltu	$1,$7,$24
936e0ea3921Schristos	multu	($14,$11)		# mul_add_c(a[2],b[3],c3,c1,c2);
93776c4f342Schristos	addu	$25,$1
93876c4f342Schristos	addu	$2,$25
93976c4f342Schristos	sltu	$1,$2,$25
94076c4f342Schristos	addu	$3,$1
941e0ea3921Schristos	mflo	($24,$14,$11)
942e0ea3921Schristos	mfhi	($25,$14,$11)
94376c4f342Schristos	addu	$7,$24
94476c4f342Schristos	sltu	$1,$7,$24
945e0ea3921Schristos	multu	($15,$10)		# mul_add_c(a[3],b[2],c3,c1,c2);
94676c4f342Schristos	addu	$25,$1
94776c4f342Schristos	addu	$2,$25
94876c4f342Schristos	sltu	$1,$2,$25
94976c4f342Schristos	addu	$3,$1
950e0ea3921Schristos	mflo	($24,$15,$10)
951e0ea3921Schristos	mfhi	($25,$15,$10)
95276c4f342Schristos	addu	$7,$24
95376c4f342Schristos	sltu	$1,$7,$24
954e0ea3921Schristos	multu	($16,$9)		# mul_add_c(a[4],b[1],c3,c1,c2);
95576c4f342Schristos	addu	$25,$1
95676c4f342Schristos	addu	$2,$25
95776c4f342Schristos	sltu	$1,$2,$25
95876c4f342Schristos	addu	$3,$1
959e0ea3921Schristos	mflo	($24,$16,$9)
960e0ea3921Schristos	mfhi	($25,$16,$9)
96176c4f342Schristos	addu	$7,$24
96276c4f342Schristos	sltu	$1,$7,$24
963e0ea3921Schristos	multu	($18,$8)		# mul_add_c(a[5],b[0],c3,c1,c2);
96476c4f342Schristos	addu	$25,$1
96576c4f342Schristos	addu	$2,$25
96676c4f342Schristos	sltu	$1,$2,$25
96776c4f342Schristos	addu	$3,$1
968e0ea3921Schristos	mflo	($24,$18,$8)
969e0ea3921Schristos	mfhi	($25,$18,$8)
97076c4f342Schristos	addu	$7,$24
97176c4f342Schristos	sltu	$1,$7,$24
972e0ea3921Schristos	 multu	($20,$8)		# mul_add_c(a[6],b[0],c1,c2,c3);
97376c4f342Schristos	addu	$25,$1
97476c4f342Schristos	addu	$2,$25
97576c4f342Schristos	sltu	$1,$2,$25
97676c4f342Schristos	addu	$3,$1
97776c4f342Schristos	sw	$7,5*4($4)	# r[5]=c3;
97876c4f342Schristos
979e0ea3921Schristos	mflo	($24,$20,$8)
980e0ea3921Schristos	mfhi	($25,$20,$8)
98176c4f342Schristos	addu	$2,$24
98276c4f342Schristos	sltu	$1,$2,$24
983e0ea3921Schristos	multu	($18,$9)		# mul_add_c(a[5],b[1],c1,c2,c3);
98476c4f342Schristos	addu	$25,$1
98576c4f342Schristos	addu	$3,$25
98676c4f342Schristos	sltu	$7,$3,$25
987e0ea3921Schristos	mflo	($24,$18,$9)
988e0ea3921Schristos	mfhi	($25,$18,$9)
98976c4f342Schristos	addu	$2,$24
99076c4f342Schristos	sltu	$1,$2,$24
991e0ea3921Schristos	multu	($16,$10)		# mul_add_c(a[4],b[2],c1,c2,c3);
99276c4f342Schristos	addu	$25,$1
99376c4f342Schristos	addu	$3,$25
99476c4f342Schristos	sltu	$1,$3,$25
99576c4f342Schristos	addu	$7,$1
996e0ea3921Schristos	mflo	($24,$16,$10)
997e0ea3921Schristos	mfhi	($25,$16,$10)
99876c4f342Schristos	addu	$2,$24
99976c4f342Schristos	sltu	$1,$2,$24
1000e0ea3921Schristos	multu	($15,$11)		# mul_add_c(a[3],b[3],c1,c2,c3);
100176c4f342Schristos	addu	$25,$1
100276c4f342Schristos	addu	$3,$25
100376c4f342Schristos	sltu	$1,$3,$25
100476c4f342Schristos	addu	$7,$1
1005e0ea3921Schristos	mflo	($24,$15,$11)
1006e0ea3921Schristos	mfhi	($25,$15,$11)
100776c4f342Schristos	addu	$2,$24
100876c4f342Schristos	sltu	$1,$2,$24
1009e0ea3921Schristos	multu	($14,$17)		# mul_add_c(a[2],b[4],c1,c2,c3);
101076c4f342Schristos	addu	$25,$1
101176c4f342Schristos	addu	$3,$25
101276c4f342Schristos	sltu	$1,$3,$25
101376c4f342Schristos	addu	$7,$1
1014e0ea3921Schristos	mflo	($24,$14,$17)
1015e0ea3921Schristos	mfhi	($25,$14,$17)
101676c4f342Schristos	addu	$2,$24
101776c4f342Schristos	sltu	$1,$2,$24
1018e0ea3921Schristos	multu	($13,$19)		# mul_add_c(a[1],b[5],c1,c2,c3);
101976c4f342Schristos	addu	$25,$1
102076c4f342Schristos	addu	$3,$25
102176c4f342Schristos	sltu	$1,$3,$25
102276c4f342Schristos	addu	$7,$1
1023e0ea3921Schristos	mflo	($24,$13,$19)
1024e0ea3921Schristos	mfhi	($25,$13,$19)
102576c4f342Schristos	addu	$2,$24
102676c4f342Schristos	sltu	$1,$2,$24
1027e0ea3921Schristos	multu	($12,$21)		# mul_add_c(a[0],b[6],c1,c2,c3);
102876c4f342Schristos	addu	$25,$1
102976c4f342Schristos	addu	$3,$25
103076c4f342Schristos	sltu	$1,$3,$25
103176c4f342Schristos	addu	$7,$1
1032e0ea3921Schristos	mflo	($24,$12,$21)
1033e0ea3921Schristos	mfhi	($25,$12,$21)
103476c4f342Schristos	addu	$2,$24
103576c4f342Schristos	sltu	$1,$2,$24
1036e0ea3921Schristos	 multu	($12,$6)		# mul_add_c(a[0],b[7],c2,c3,c1);
103776c4f342Schristos	addu	$25,$1
103876c4f342Schristos	addu	$3,$25
103976c4f342Schristos	sltu	$1,$3,$25
104076c4f342Schristos	addu	$7,$1
104176c4f342Schristos	sw	$2,6*4($4)	# r[6]=c1;
104276c4f342Schristos
1043e0ea3921Schristos	mflo	($24,$12,$6)
1044e0ea3921Schristos	mfhi	($25,$12,$6)
104576c4f342Schristos	addu	$3,$24
104676c4f342Schristos	sltu	$1,$3,$24
1047e0ea3921Schristos	multu	($13,$21)		# mul_add_c(a[1],b[6],c2,c3,c1);
104876c4f342Schristos	addu	$25,$1
104976c4f342Schristos	addu	$7,$25
105076c4f342Schristos	sltu	$2,$7,$25
1051e0ea3921Schristos	mflo	($24,$13,$21)
1052e0ea3921Schristos	mfhi	($25,$13,$21)
105376c4f342Schristos	addu	$3,$24
105476c4f342Schristos	sltu	$1,$3,$24
1055e0ea3921Schristos	multu	($14,$19)		# mul_add_c(a[2],b[5],c2,c3,c1);
105676c4f342Schristos	addu	$25,$1
105776c4f342Schristos	addu	$7,$25
105876c4f342Schristos	sltu	$1,$7,$25
105976c4f342Schristos	addu	$2,$1
1060e0ea3921Schristos	mflo	($24,$14,$19)
1061e0ea3921Schristos	mfhi	($25,$14,$19)
106276c4f342Schristos	addu	$3,$24
106376c4f342Schristos	sltu	$1,$3,$24
1064e0ea3921Schristos	multu	($15,$17)		# mul_add_c(a[3],b[4],c2,c3,c1);
106576c4f342Schristos	addu	$25,$1
106676c4f342Schristos	addu	$7,$25
106776c4f342Schristos	sltu	$1,$7,$25
106876c4f342Schristos	addu	$2,$1
1069e0ea3921Schristos	mflo	($24,$15,$17)
1070e0ea3921Schristos	mfhi	($25,$15,$17)
107176c4f342Schristos	addu	$3,$24
107276c4f342Schristos	sltu	$1,$3,$24
1073e0ea3921Schristos	multu	($16,$11)		# mul_add_c(a[4],b[3],c2,c3,c1);
107476c4f342Schristos	addu	$25,$1
107576c4f342Schristos	addu	$7,$25
107676c4f342Schristos	sltu	$1,$7,$25
107776c4f342Schristos	addu	$2,$1
1078e0ea3921Schristos	mflo	($24,$16,$11)
1079e0ea3921Schristos	mfhi	($25,$16,$11)
108076c4f342Schristos	addu	$3,$24
108176c4f342Schristos	sltu	$1,$3,$24
1082e0ea3921Schristos	multu	($18,$10)		# mul_add_c(a[5],b[2],c2,c3,c1);
108376c4f342Schristos	addu	$25,$1
108476c4f342Schristos	addu	$7,$25
108576c4f342Schristos	sltu	$1,$7,$25
108676c4f342Schristos	addu	$2,$1
1087e0ea3921Schristos	mflo	($24,$18,$10)
1088e0ea3921Schristos	mfhi	($25,$18,$10)
108976c4f342Schristos	addu	$3,$24
109076c4f342Schristos	sltu	$1,$3,$24
1091e0ea3921Schristos	multu	($20,$9)		# mul_add_c(a[6],b[1],c2,c3,c1);
109276c4f342Schristos	addu	$25,$1
109376c4f342Schristos	addu	$7,$25
109476c4f342Schristos	sltu	$1,$7,$25
109576c4f342Schristos	addu	$2,$1
1096e0ea3921Schristos	mflo	($24,$20,$9)
1097e0ea3921Schristos	mfhi	($25,$20,$9)
109876c4f342Schristos	addu	$3,$24
109976c4f342Schristos	sltu	$1,$3,$24
1100e0ea3921Schristos	multu	($5,$8)		# mul_add_c(a[7],b[0],c2,c3,c1);
110176c4f342Schristos	addu	$25,$1
110276c4f342Schristos	addu	$7,$25
110376c4f342Schristos	sltu	$1,$7,$25
110476c4f342Schristos	addu	$2,$1
1105e0ea3921Schristos	mflo	($24,$5,$8)
1106e0ea3921Schristos	mfhi	($25,$5,$8)
110776c4f342Schristos	addu	$3,$24
110876c4f342Schristos	sltu	$1,$3,$24
1109e0ea3921Schristos	 multu	($5,$9)		# mul_add_c(a[7],b[1],c3,c1,c2);
111076c4f342Schristos	addu	$25,$1
111176c4f342Schristos	addu	$7,$25
111276c4f342Schristos	sltu	$1,$7,$25
111376c4f342Schristos	addu	$2,$1
111476c4f342Schristos	sw	$3,7*4($4)	# r[7]=c2;
111576c4f342Schristos
1116e0ea3921Schristos	mflo	($24,$5,$9)
1117e0ea3921Schristos	mfhi	($25,$5,$9)
111876c4f342Schristos	addu	$7,$24
111976c4f342Schristos	sltu	$1,$7,$24
1120e0ea3921Schristos	multu	($20,$10)		# mul_add_c(a[6],b[2],c3,c1,c2);
112176c4f342Schristos	addu	$25,$1
112276c4f342Schristos	addu	$2,$25
112376c4f342Schristos	sltu	$3,$2,$25
1124e0ea3921Schristos	mflo	($24,$20,$10)
1125e0ea3921Schristos	mfhi	($25,$20,$10)
112676c4f342Schristos	addu	$7,$24
112776c4f342Schristos	sltu	$1,$7,$24
1128e0ea3921Schristos	multu	($18,$11)		# mul_add_c(a[5],b[3],c3,c1,c2);
112976c4f342Schristos	addu	$25,$1
113076c4f342Schristos	addu	$2,$25
113176c4f342Schristos	sltu	$1,$2,$25
113276c4f342Schristos	addu	$3,$1
1133e0ea3921Schristos	mflo	($24,$18,$11)
1134e0ea3921Schristos	mfhi	($25,$18,$11)
113576c4f342Schristos	addu	$7,$24
113676c4f342Schristos	sltu	$1,$7,$24
1137e0ea3921Schristos	multu	($16,$17)		# mul_add_c(a[4],b[4],c3,c1,c2);
113876c4f342Schristos	addu	$25,$1
113976c4f342Schristos	addu	$2,$25
114076c4f342Schristos	sltu	$1,$2,$25
114176c4f342Schristos	addu	$3,$1
1142e0ea3921Schristos	mflo	($24,$16,$17)
1143e0ea3921Schristos	mfhi	($25,$16,$17)
114476c4f342Schristos	addu	$7,$24
114576c4f342Schristos	sltu	$1,$7,$24
1146e0ea3921Schristos	multu	($15,$19)		# mul_add_c(a[3],b[5],c3,c1,c2);
114776c4f342Schristos	addu	$25,$1
114876c4f342Schristos	addu	$2,$25
114976c4f342Schristos	sltu	$1,$2,$25
115076c4f342Schristos	addu	$3,$1
1151e0ea3921Schristos	mflo	($24,$15,$19)
1152e0ea3921Schristos	mfhi	($25,$15,$19)
115376c4f342Schristos	addu	$7,$24
115476c4f342Schristos	sltu	$1,$7,$24
1155e0ea3921Schristos	multu	($14,$21)		# mul_add_c(a[2],b[6],c3,c1,c2);
115676c4f342Schristos	addu	$25,$1
115776c4f342Schristos	addu	$2,$25
115876c4f342Schristos	sltu	$1,$2,$25
115976c4f342Schristos	addu	$3,$1
1160e0ea3921Schristos	mflo	($24,$14,$21)
1161e0ea3921Schristos	mfhi	($25,$14,$21)
116276c4f342Schristos	addu	$7,$24
116376c4f342Schristos	sltu	$1,$7,$24
1164e0ea3921Schristos	multu	($13,$6)		# mul_add_c(a[1],b[7],c3,c1,c2);
116576c4f342Schristos	addu	$25,$1
116676c4f342Schristos	addu	$2,$25
116776c4f342Schristos	sltu	$1,$2,$25
116876c4f342Schristos	addu	$3,$1
1169e0ea3921Schristos	mflo	($24,$13,$6)
1170e0ea3921Schristos	mfhi	($25,$13,$6)
117176c4f342Schristos	addu	$7,$24
117276c4f342Schristos	sltu	$1,$7,$24
1173e0ea3921Schristos	 multu	($14,$6)		# mul_add_c(a[2],b[7],c1,c2,c3);
117476c4f342Schristos	addu	$25,$1
117576c4f342Schristos	addu	$2,$25
117676c4f342Schristos	sltu	$1,$2,$25
117776c4f342Schristos	addu	$3,$1
117876c4f342Schristos	sw	$7,8*4($4)	# r[8]=c3;
117976c4f342Schristos
1180e0ea3921Schristos	mflo	($24,$14,$6)
1181e0ea3921Schristos	mfhi	($25,$14,$6)
118276c4f342Schristos	addu	$2,$24
118376c4f342Schristos	sltu	$1,$2,$24
1184e0ea3921Schristos	multu	($15,$21)		# mul_add_c(a[3],b[6],c1,c2,c3);
118576c4f342Schristos	addu	$25,$1
118676c4f342Schristos	addu	$3,$25
118776c4f342Schristos	sltu	$7,$3,$25
1188e0ea3921Schristos	mflo	($24,$15,$21)
1189e0ea3921Schristos	mfhi	($25,$15,$21)
119076c4f342Schristos	addu	$2,$24
119176c4f342Schristos	sltu	$1,$2,$24
1192e0ea3921Schristos	multu	($16,$19)		# mul_add_c(a[4],b[5],c1,c2,c3);
119376c4f342Schristos	addu	$25,$1
119476c4f342Schristos	addu	$3,$25
119576c4f342Schristos	sltu	$1,$3,$25
119676c4f342Schristos	addu	$7,$1
1197e0ea3921Schristos	mflo	($24,$16,$19)
1198e0ea3921Schristos	mfhi	($25,$16,$19)
119976c4f342Schristos	addu	$2,$24
120076c4f342Schristos	sltu	$1,$2,$24
1201e0ea3921Schristos	multu	($18,$17)		# mul_add_c(a[5],b[4],c1,c2,c3);
120276c4f342Schristos	addu	$25,$1
120376c4f342Schristos	addu	$3,$25
120476c4f342Schristos	sltu	$1,$3,$25
120576c4f342Schristos	addu	$7,$1
1206e0ea3921Schristos	mflo	($24,$18,$17)
1207e0ea3921Schristos	mfhi	($25,$18,$17)
120876c4f342Schristos	addu	$2,$24
120976c4f342Schristos	sltu	$1,$2,$24
1210e0ea3921Schristos	multu	($20,$11)		# mul_add_c(a[6],b[3],c1,c2,c3);
121176c4f342Schristos	addu	$25,$1
121276c4f342Schristos	addu	$3,$25
121376c4f342Schristos	sltu	$1,$3,$25
121476c4f342Schristos	addu	$7,$1
1215e0ea3921Schristos	mflo	($24,$20,$11)
1216e0ea3921Schristos	mfhi	($25,$20,$11)
121776c4f342Schristos	addu	$2,$24
121876c4f342Schristos	sltu	$1,$2,$24
1219e0ea3921Schristos	multu	($5,$10)		# mul_add_c(a[7],b[2],c1,c2,c3);
122076c4f342Schristos	addu	$25,$1
122176c4f342Schristos	addu	$3,$25
122276c4f342Schristos	sltu	$1,$3,$25
122376c4f342Schristos	addu	$7,$1
1224e0ea3921Schristos	mflo	($24,$5,$10)
1225e0ea3921Schristos	mfhi	($25,$5,$10)
122676c4f342Schristos	addu	$2,$24
122776c4f342Schristos	sltu	$1,$2,$24
1228e0ea3921Schristos	 multu	($5,$11)		# mul_add_c(a[7],b[3],c2,c3,c1);
122976c4f342Schristos	addu	$25,$1
123076c4f342Schristos	addu	$3,$25
123176c4f342Schristos	sltu	$1,$3,$25
123276c4f342Schristos	addu	$7,$1
123376c4f342Schristos	sw	$2,9*4($4)	# r[9]=c1;
123476c4f342Schristos
1235e0ea3921Schristos	mflo	($24,$5,$11)
1236e0ea3921Schristos	mfhi	($25,$5,$11)
123776c4f342Schristos	addu	$3,$24
123876c4f342Schristos	sltu	$1,$3,$24
1239e0ea3921Schristos	multu	($20,$17)		# mul_add_c(a[6],b[4],c2,c3,c1);
124076c4f342Schristos	addu	$25,$1
124176c4f342Schristos	addu	$7,$25
124276c4f342Schristos	sltu	$2,$7,$25
1243e0ea3921Schristos	mflo	($24,$20,$17)
1244e0ea3921Schristos	mfhi	($25,$20,$17)
124576c4f342Schristos	addu	$3,$24
124676c4f342Schristos	sltu	$1,$3,$24
1247e0ea3921Schristos	multu	($18,$19)		# mul_add_c(a[5],b[5],c2,c3,c1);
124876c4f342Schristos	addu	$25,$1
124976c4f342Schristos	addu	$7,$25
125076c4f342Schristos	sltu	$1,$7,$25
125176c4f342Schristos	addu	$2,$1
1252e0ea3921Schristos	mflo	($24,$18,$19)
1253e0ea3921Schristos	mfhi	($25,$18,$19)
125476c4f342Schristos	addu	$3,$24
125576c4f342Schristos	sltu	$1,$3,$24
1256e0ea3921Schristos	multu	($16,$21)		# mul_add_c(a[4],b[6],c2,c3,c1);
125776c4f342Schristos	addu	$25,$1
125876c4f342Schristos	addu	$7,$25
125976c4f342Schristos	sltu	$1,$7,$25
126076c4f342Schristos	addu	$2,$1
1261e0ea3921Schristos	mflo	($24,$16,$21)
1262e0ea3921Schristos	mfhi	($25,$16,$21)
126376c4f342Schristos	addu	$3,$24
126476c4f342Schristos	sltu	$1,$3,$24
1265e0ea3921Schristos	multu	($15,$6)		# mul_add_c(a[3],b[7],c2,c3,c1);
126676c4f342Schristos	addu	$25,$1
126776c4f342Schristos	addu	$7,$25
126876c4f342Schristos	sltu	$1,$7,$25
126976c4f342Schristos	addu	$2,$1
1270e0ea3921Schristos	mflo	($24,$15,$6)
1271e0ea3921Schristos	mfhi	($25,$15,$6)
127276c4f342Schristos	addu	$3,$24
127376c4f342Schristos	sltu	$1,$3,$24
1274e0ea3921Schristos	multu	($16,$6)		# mul_add_c(a[4],b[7],c3,c1,c2);
127576c4f342Schristos	addu	$25,$1
127676c4f342Schristos	addu	$7,$25
127776c4f342Schristos	sltu	$1,$7,$25
127876c4f342Schristos	addu	$2,$1
127976c4f342Schristos	sw	$3,10*4($4)	# r[10]=c2;
128076c4f342Schristos
1281e0ea3921Schristos	mflo	($24,$16,$6)
1282e0ea3921Schristos	mfhi	($25,$16,$6)
128376c4f342Schristos	addu	$7,$24
128476c4f342Schristos	sltu	$1,$7,$24
1285e0ea3921Schristos	multu	($18,$21)		# mul_add_c(a[5],b[6],c3,c1,c2);
128676c4f342Schristos	addu	$25,$1
128776c4f342Schristos	addu	$2,$25
128876c4f342Schristos	sltu	$3,$2,$25
1289e0ea3921Schristos	mflo	($24,$18,$21)
1290e0ea3921Schristos	mfhi	($25,$18,$21)
129176c4f342Schristos	addu	$7,$24
129276c4f342Schristos	sltu	$1,$7,$24
1293e0ea3921Schristos	multu	($20,$19)		# mul_add_c(a[6],b[5],c3,c1,c2);
129476c4f342Schristos	addu	$25,$1
129576c4f342Schristos	addu	$2,$25
129676c4f342Schristos	sltu	$1,$2,$25
129776c4f342Schristos	addu	$3,$1
1298e0ea3921Schristos	mflo	($24,$20,$19)
1299e0ea3921Schristos	mfhi	($25,$20,$19)
130076c4f342Schristos	addu	$7,$24
130176c4f342Schristos	sltu	$1,$7,$24
1302e0ea3921Schristos	multu	($5,$17)		# mul_add_c(a[7],b[4],c3,c1,c2);
130376c4f342Schristos	addu	$25,$1
130476c4f342Schristos	addu	$2,$25
130576c4f342Schristos	sltu	$1,$2,$25
130676c4f342Schristos	addu	$3,$1
1307e0ea3921Schristos	mflo	($24,$5,$17)
1308e0ea3921Schristos	mfhi	($25,$5,$17)
130976c4f342Schristos	addu	$7,$24
131076c4f342Schristos	sltu	$1,$7,$24
1311e0ea3921Schristos	 multu	($5,$19)		# mul_add_c(a[7],b[5],c1,c2,c3);
131276c4f342Schristos	addu	$25,$1
131376c4f342Schristos	addu	$2,$25
131476c4f342Schristos	sltu	$1,$2,$25
131576c4f342Schristos	addu	$3,$1
131676c4f342Schristos	sw	$7,11*4($4)	# r[11]=c3;
131776c4f342Schristos
1318e0ea3921Schristos	mflo	($24,$5,$19)
1319e0ea3921Schristos	mfhi	($25,$5,$19)
132076c4f342Schristos	addu	$2,$24
132176c4f342Schristos	sltu	$1,$2,$24
1322e0ea3921Schristos	multu	($20,$21)		# mul_add_c(a[6],b[6],c1,c2,c3);
132376c4f342Schristos	addu	$25,$1
132476c4f342Schristos	addu	$3,$25
132576c4f342Schristos	sltu	$7,$3,$25
1326e0ea3921Schristos	mflo	($24,$20,$21)
1327e0ea3921Schristos	mfhi	($25,$20,$21)
132876c4f342Schristos	addu	$2,$24
132976c4f342Schristos	sltu	$1,$2,$24
1330e0ea3921Schristos	multu	($18,$6)		# mul_add_c(a[5],b[7],c1,c2,c3);
133176c4f342Schristos	addu	$25,$1
133276c4f342Schristos	addu	$3,$25
133376c4f342Schristos	sltu	$1,$3,$25
133476c4f342Schristos	addu	$7,$1
1335e0ea3921Schristos	mflo	($24,$18,$6)
1336e0ea3921Schristos	mfhi	($25,$18,$6)
133776c4f342Schristos	addu	$2,$24
133876c4f342Schristos	sltu	$1,$2,$24
1339e0ea3921Schristos	 multu	($20,$6)		# mul_add_c(a[6],b[7],c2,c3,c1);
134076c4f342Schristos	addu	$25,$1
134176c4f342Schristos	addu	$3,$25
134276c4f342Schristos	sltu	$1,$3,$25
134376c4f342Schristos	addu	$7,$1
134476c4f342Schristos	sw	$2,12*4($4)	# r[12]=c1;
134576c4f342Schristos
1346e0ea3921Schristos	mflo	($24,$20,$6)
1347e0ea3921Schristos	mfhi	($25,$20,$6)
134876c4f342Schristos	addu	$3,$24
134976c4f342Schristos	sltu	$1,$3,$24
1350e0ea3921Schristos	multu	($5,$21)		# mul_add_c(a[7],b[6],c2,c3,c1);
135176c4f342Schristos	addu	$25,$1
135276c4f342Schristos	addu	$7,$25
135376c4f342Schristos	sltu	$2,$7,$25
1354e0ea3921Schristos	mflo	($24,$5,$21)
1355e0ea3921Schristos	mfhi	($25,$5,$21)
135676c4f342Schristos	addu	$3,$24
135776c4f342Schristos	sltu	$1,$3,$24
1358e0ea3921Schristos	multu	($5,$6)		# mul_add_c(a[7],b[7],c3,c1,c2);
135976c4f342Schristos	addu	$25,$1
136076c4f342Schristos	addu	$7,$25
136176c4f342Schristos	sltu	$1,$7,$25
136276c4f342Schristos	addu	$2,$1
136376c4f342Schristos	sw	$3,13*4($4)	# r[13]=c2;
136476c4f342Schristos
1365e0ea3921Schristos	mflo	($24,$5,$6)
1366e0ea3921Schristos	mfhi	($25,$5,$6)
136776c4f342Schristos	addu	$7,$24
136876c4f342Schristos	sltu	$1,$7,$24
136976c4f342Schristos	addu	$25,$1
137076c4f342Schristos	addu	$2,$25
137176c4f342Schristos	sw	$7,14*4($4)	# r[14]=c3;
137276c4f342Schristos	sw	$2,15*4($4)	# r[15]=c1;
137376c4f342Schristos
137476c4f342Schristos	.set	noreorder
137576c4f342Schristos	lw	$21,5*4($29)
137676c4f342Schristos	lw	$20,4*4($29)
137776c4f342Schristos	lw	$19,3*4($29)
137876c4f342Schristos	lw	$18,2*4($29)
137976c4f342Schristos	lw	$17,1*4($29)
138076c4f342Schristos	lw	$16,0*4($29)
138176c4f342Schristos	jr	$31
138276c4f342Schristos	addu $29,6*4
138376c4f342Schristos.end	bn_mul_comba8
138476c4f342Schristos
138576c4f342Schristos.align	5
138676c4f342Schristos.globl	bn_mul_comba4
138776c4f342Schristos.ent	bn_mul_comba4
138876c4f342Schristosbn_mul_comba4:
138976c4f342Schristos	.set	reorder
139076c4f342Schristos	lw	$12,0($5)
139176c4f342Schristos	lw	$8,0($6)
139276c4f342Schristos	lw	$13,4($5)
139376c4f342Schristos	lw	$14,2*4($5)
1394e0ea3921Schristos	multu	($12,$8)		# mul_add_c(a[0],b[0],c1,c2,c3);
139576c4f342Schristos	lw	$15,3*4($5)
139676c4f342Schristos	lw	$9,4($6)
139776c4f342Schristos	lw	$10,2*4($6)
139876c4f342Schristos	lw	$11,3*4($6)
1399e0ea3921Schristos	mflo	($2,$12,$8)
1400e0ea3921Schristos	mfhi	($3,$12,$8)
140176c4f342Schristos	sw	$2,0($4)
140276c4f342Schristos
1403e0ea3921Schristos	multu	($12,$9)		# mul_add_c(a[0],b[1],c2,c3,c1);
1404e0ea3921Schristos	mflo	($24,$12,$9)
1405e0ea3921Schristos	mfhi	($25,$12,$9)
140676c4f342Schristos	addu	$3,$24
140776c4f342Schristos	sltu	$1,$3,$24
1408e0ea3921Schristos	multu	($13,$8)		# mul_add_c(a[1],b[0],c2,c3,c1);
140976c4f342Schristos	addu	$7,$25,$1
1410e0ea3921Schristos	mflo	($24,$13,$8)
1411e0ea3921Schristos	mfhi	($25,$13,$8)
141276c4f342Schristos	addu	$3,$24
141376c4f342Schristos	sltu	$1,$3,$24
1414e0ea3921Schristos	 multu	($14,$8)		# mul_add_c(a[2],b[0],c3,c1,c2);
141576c4f342Schristos	addu	$25,$1
141676c4f342Schristos	addu	$7,$25
141776c4f342Schristos	sltu	$2,$7,$25
141876c4f342Schristos	sw	$3,4($4)
141976c4f342Schristos
1420e0ea3921Schristos	mflo	($24,$14,$8)
1421e0ea3921Schristos	mfhi	($25,$14,$8)
142276c4f342Schristos	addu	$7,$24
142376c4f342Schristos	sltu	$1,$7,$24
1424e0ea3921Schristos	multu	($13,$9)		# mul_add_c(a[1],b[1],c3,c1,c2);
142576c4f342Schristos	addu	$25,$1
142676c4f342Schristos	addu	$2,$25
1427e0ea3921Schristos	mflo	($24,$13,$9)
1428e0ea3921Schristos	mfhi	($25,$13,$9)
142976c4f342Schristos	addu	$7,$24
143076c4f342Schristos	sltu	$1,$7,$24
1431e0ea3921Schristos	multu	($12,$10)		# mul_add_c(a[0],b[2],c3,c1,c2);
143276c4f342Schristos	addu	$25,$1
143376c4f342Schristos	addu	$2,$25
143476c4f342Schristos	sltu	$3,$2,$25
1435e0ea3921Schristos	mflo	($24,$12,$10)
1436e0ea3921Schristos	mfhi	($25,$12,$10)
143776c4f342Schristos	addu	$7,$24
143876c4f342Schristos	sltu	$1,$7,$24
1439e0ea3921Schristos	 multu	($12,$11)		# mul_add_c(a[0],b[3],c1,c2,c3);
144076c4f342Schristos	addu	$25,$1
144176c4f342Schristos	addu	$2,$25
144276c4f342Schristos	sltu	$1,$2,$25
144376c4f342Schristos	addu	$3,$1
144476c4f342Schristos	sw	$7,2*4($4)
144576c4f342Schristos
1446e0ea3921Schristos	mflo	($24,$12,$11)
1447e0ea3921Schristos	mfhi	($25,$12,$11)
144876c4f342Schristos	addu	$2,$24
144976c4f342Schristos	sltu	$1,$2,$24
1450e0ea3921Schristos	multu	($13,$10)		# mul_add_c(a[1],b[2],c1,c2,c3);
145176c4f342Schristos	addu	$25,$1
145276c4f342Schristos	addu	$3,$25
145376c4f342Schristos	sltu	$7,$3,$25
1454e0ea3921Schristos	mflo	($24,$13,$10)
1455e0ea3921Schristos	mfhi	($25,$13,$10)
145676c4f342Schristos	addu	$2,$24
145776c4f342Schristos	sltu	$1,$2,$24
1458e0ea3921Schristos	multu	($14,$9)		# mul_add_c(a[2],b[1],c1,c2,c3);
145976c4f342Schristos	addu	$25,$1
146076c4f342Schristos	addu	$3,$25
146176c4f342Schristos	sltu	$1,$3,$25
146276c4f342Schristos	addu	$7,$1
1463e0ea3921Schristos	mflo	($24,$14,$9)
1464e0ea3921Schristos	mfhi	($25,$14,$9)
146576c4f342Schristos	addu	$2,$24
146676c4f342Schristos	sltu	$1,$2,$24
1467e0ea3921Schristos	multu	($15,$8)		# mul_add_c(a[3],b[0],c1,c2,c3);
146876c4f342Schristos	addu	$25,$1
146976c4f342Schristos	addu	$3,$25
147076c4f342Schristos	sltu	$1,$3,$25
147176c4f342Schristos	addu	$7,$1
1472e0ea3921Schristos	mflo	($24,$15,$8)
1473e0ea3921Schristos	mfhi	($25,$15,$8)
147476c4f342Schristos	addu	$2,$24
147576c4f342Schristos	sltu	$1,$2,$24
1476e0ea3921Schristos	 multu	($15,$9)		# mul_add_c(a[3],b[1],c2,c3,c1);
147776c4f342Schristos	addu	$25,$1
147876c4f342Schristos	addu	$3,$25
147976c4f342Schristos	sltu	$1,$3,$25
148076c4f342Schristos	addu	$7,$1
148176c4f342Schristos	sw	$2,3*4($4)
148276c4f342Schristos
1483e0ea3921Schristos	mflo	($24,$15,$9)
1484e0ea3921Schristos	mfhi	($25,$15,$9)
148576c4f342Schristos	addu	$3,$24
148676c4f342Schristos	sltu	$1,$3,$24
1487e0ea3921Schristos	multu	($14,$10)		# mul_add_c(a[2],b[2],c2,c3,c1);
148876c4f342Schristos	addu	$25,$1
148976c4f342Schristos	addu	$7,$25
149076c4f342Schristos	sltu	$2,$7,$25
1491e0ea3921Schristos	mflo	($24,$14,$10)
1492e0ea3921Schristos	mfhi	($25,$14,$10)
149376c4f342Schristos	addu	$3,$24
149476c4f342Schristos	sltu	$1,$3,$24
1495e0ea3921Schristos	multu	($13,$11)		# mul_add_c(a[1],b[3],c2,c3,c1);
149676c4f342Schristos	addu	$25,$1
149776c4f342Schristos	addu	$7,$25
149876c4f342Schristos	sltu	$1,$7,$25
149976c4f342Schristos	addu	$2,$1
1500e0ea3921Schristos	mflo	($24,$13,$11)
1501e0ea3921Schristos	mfhi	($25,$13,$11)
150276c4f342Schristos	addu	$3,$24
150376c4f342Schristos	sltu	$1,$3,$24
1504e0ea3921Schristos	 multu	($14,$11)		# mul_add_c(a[2],b[3],c3,c1,c2);
150576c4f342Schristos	addu	$25,$1
150676c4f342Schristos	addu	$7,$25
150776c4f342Schristos	sltu	$1,$7,$25
150876c4f342Schristos	addu	$2,$1
150976c4f342Schristos	sw	$3,4*4($4)
151076c4f342Schristos
1511e0ea3921Schristos	mflo	($24,$14,$11)
1512e0ea3921Schristos	mfhi	($25,$14,$11)
151376c4f342Schristos	addu	$7,$24
151476c4f342Schristos	sltu	$1,$7,$24
1515e0ea3921Schristos	multu	($15,$10)		# mul_add_c(a[3],b[2],c3,c1,c2);
151676c4f342Schristos	addu	$25,$1
151776c4f342Schristos	addu	$2,$25
151876c4f342Schristos	sltu	$3,$2,$25
1519e0ea3921Schristos	mflo	($24,$15,$10)
1520e0ea3921Schristos	mfhi	($25,$15,$10)
152176c4f342Schristos	addu	$7,$24
152276c4f342Schristos	sltu	$1,$7,$24
1523e0ea3921Schristos	 multu	($15,$11)		# mul_add_c(a[3],b[3],c1,c2,c3);
152476c4f342Schristos	addu	$25,$1
152576c4f342Schristos	addu	$2,$25
152676c4f342Schristos	sltu	$1,$2,$25
152776c4f342Schristos	addu	$3,$1
152876c4f342Schristos	sw	$7,5*4($4)
152976c4f342Schristos
1530e0ea3921Schristos	mflo	($24,$15,$11)
1531e0ea3921Schristos	mfhi	($25,$15,$11)
153276c4f342Schristos	addu	$2,$24
153376c4f342Schristos	sltu	$1,$2,$24
153476c4f342Schristos	addu	$25,$1
153576c4f342Schristos	addu	$3,$25
153676c4f342Schristos	sw	$2,6*4($4)
153776c4f342Schristos	sw	$3,7*4($4)
153876c4f342Schristos
153976c4f342Schristos	.set	noreorder
154076c4f342Schristos	jr	$31
154176c4f342Schristos	nop
154276c4f342Schristos.end	bn_mul_comba4
154376c4f342Schristos
154476c4f342Schristos.align	5
154576c4f342Schristos.globl	bn_sqr_comba8
154676c4f342Schristos.ent	bn_sqr_comba8
154776c4f342Schristosbn_sqr_comba8:
154876c4f342Schristos	.set	reorder
154976c4f342Schristos	lw	$12,0($5)
155076c4f342Schristos	lw	$13,4($5)
155176c4f342Schristos	lw	$14,2*4($5)
155276c4f342Schristos	lw	$15,3*4($5)
155376c4f342Schristos
1554e0ea3921Schristos	multu	($12,$12)		# mul_add_c(a[0],b[0],c1,c2,c3);
155576c4f342Schristos	lw	$8,4*4($5)
155676c4f342Schristos	lw	$9,5*4($5)
155776c4f342Schristos	lw	$10,6*4($5)
155876c4f342Schristos	lw	$11,7*4($5)
1559e0ea3921Schristos	mflo	($2,$12,$12)
1560e0ea3921Schristos	mfhi	($3,$12,$12)
156176c4f342Schristos	sw	$2,0($4)
156276c4f342Schristos
1563e0ea3921Schristos	multu	($12,$13)		# mul_add_c2(a[0],b[1],c2,c3,c1);
1564e0ea3921Schristos	mflo	($24,$12,$13)
1565e0ea3921Schristos	mfhi	($25,$12,$13)
156676c4f342Schristos	slt	$2,$25,$0
156776c4f342Schristos	sll	$25,1
1568e0ea3921Schristos	 multu	($14,$12)		# mul_add_c2(a[2],b[0],c3,c1,c2);
156976c4f342Schristos	slt	$6,$24,$0
157076c4f342Schristos	addu	$25,$6
157176c4f342Schristos	sll	$24,1
157276c4f342Schristos	addu	$3,$24
157376c4f342Schristos	sltu	$1,$3,$24
157476c4f342Schristos	addu	$7,$25,$1
157576c4f342Schristos	sw	$3,4($4)
1576*1b3d6f93Schristos	sltu	$1,$7,$25
1577*1b3d6f93Schristos	addu	$2,$1
1578e0ea3921Schristos	mflo	($24,$14,$12)
1579e0ea3921Schristos	mfhi	($25,$14,$12)
158076c4f342Schristos	addu	$7,$24
158176c4f342Schristos	sltu	$1,$7,$24
1582e0ea3921Schristos	 multu	($13,$13)		# forward multiplication
158376c4f342Schristos	addu	$7,$24
158476c4f342Schristos	addu	$1,$25
158576c4f342Schristos	sltu	$24,$7,$24
158676c4f342Schristos	addu	$2,$1
158776c4f342Schristos	addu	$25,$24
158876c4f342Schristos	sltu	$3,$2,$1
158976c4f342Schristos	addu	$2,$25
159076c4f342Schristos	sltu	$25,$2,$25
159176c4f342Schristos	addu	$3,$25
1592e0ea3921Schristos	mflo	($24,$13,$13)
1593e0ea3921Schristos	mfhi	($25,$13,$13)
159476c4f342Schristos	addu	$7,$24
159576c4f342Schristos	sltu	$1,$7,$24
1596e0ea3921Schristos	 multu	($12,$15)		# mul_add_c2(a[0],b[3],c1,c2,c3);
159776c4f342Schristos	addu	$25,$1
159876c4f342Schristos	addu	$2,$25
159976c4f342Schristos	sltu	$1,$2,$25
160076c4f342Schristos	addu	$3,$1
160176c4f342Schristos	sw	$7,2*4($4)
1602e0ea3921Schristos	mflo	($24,$12,$15)
1603e0ea3921Schristos	mfhi	($25,$12,$15)
160476c4f342Schristos	addu	$2,$24
160576c4f342Schristos	sltu	$1,$2,$24
1606e0ea3921Schristos	 multu	($13,$14)		# forward multiplication
160776c4f342Schristos	addu	$2,$24
160876c4f342Schristos	addu	$1,$25
160976c4f342Schristos	sltu	$24,$2,$24
161076c4f342Schristos	addu	$3,$1
161176c4f342Schristos	addu	$25,$24
161276c4f342Schristos	sltu	$7,$3,$1
161376c4f342Schristos	addu	$3,$25
161476c4f342Schristos	sltu	$25,$3,$25
161576c4f342Schristos	addu	$7,$25
1616e0ea3921Schristos	mflo	($24,$13,$14)
1617e0ea3921Schristos	mfhi	($25,$13,$14)
161876c4f342Schristos	addu	$2,$24
161976c4f342Schristos	sltu	$1,$2,$24
1620e0ea3921Schristos	 multu	($8,$12)		# forward multiplication
162176c4f342Schristos	addu	$2,$24
162276c4f342Schristos	addu	$1,$25
162376c4f342Schristos	sltu	$24,$2,$24
162476c4f342Schristos	addu	$3,$1
162576c4f342Schristos	addu	$25,$24
162676c4f342Schristos	sltu	$1,$3,$1
162776c4f342Schristos	addu	$3,$25
162876c4f342Schristos	addu	$7,$1
162976c4f342Schristos	sltu	$25,$3,$25
163076c4f342Schristos	addu	$7,$25
1631e0ea3921Schristos	mflo	($24,$8,$12)
1632e0ea3921Schristos	mfhi	($25,$8,$12)
163376c4f342Schristos	sw	$2,3*4($4)
163476c4f342Schristos	addu	$3,$24
163576c4f342Schristos	sltu	$1,$3,$24
1636e0ea3921Schristos	 multu	($15,$13)		# forward multiplication
163776c4f342Schristos	addu	$3,$24
163876c4f342Schristos	addu	$1,$25
163976c4f342Schristos	sltu	$24,$3,$24
164076c4f342Schristos	addu	$7,$1
164176c4f342Schristos	addu	$25,$24
164276c4f342Schristos	sltu	$2,$7,$1
164376c4f342Schristos	addu	$7,$25
164476c4f342Schristos	sltu	$25,$7,$25
164576c4f342Schristos	addu	$2,$25
1646e0ea3921Schristos	mflo	($24,$15,$13)
1647e0ea3921Schristos	mfhi	($25,$15,$13)
164876c4f342Schristos	addu	$3,$24
164976c4f342Schristos	sltu	$1,$3,$24
1650e0ea3921Schristos	 multu	($14,$14)		# forward multiplication
165176c4f342Schristos	addu	$3,$24
165276c4f342Schristos	addu	$1,$25
165376c4f342Schristos	sltu	$24,$3,$24
165476c4f342Schristos	addu	$7,$1
165576c4f342Schristos	addu	$25,$24
165676c4f342Schristos	sltu	$1,$7,$1
165776c4f342Schristos	addu	$7,$25
165876c4f342Schristos	addu	$2,$1
165976c4f342Schristos	sltu	$25,$7,$25
166076c4f342Schristos	addu	$2,$25
1661e0ea3921Schristos	mflo	($24,$14,$14)
1662e0ea3921Schristos	mfhi	($25,$14,$14)
166376c4f342Schristos	addu	$3,$24
166476c4f342Schristos	sltu	$1,$3,$24
1665e0ea3921Schristos	 multu	($12,$9)		# mul_add_c2(a[0],b[5],c3,c1,c2);
166676c4f342Schristos	addu	$25,$1
166776c4f342Schristos	addu	$7,$25
166876c4f342Schristos	sltu	$1,$7,$25
166976c4f342Schristos	addu	$2,$1
167076c4f342Schristos	sw	$3,4*4($4)
1671e0ea3921Schristos	mflo	($24,$12,$9)
1672e0ea3921Schristos	mfhi	($25,$12,$9)
167376c4f342Schristos	addu	$7,$24
167476c4f342Schristos	sltu	$1,$7,$24
1675e0ea3921Schristos	 multu	($13,$8)		# forward multiplication
167676c4f342Schristos	addu	$7,$24
167776c4f342Schristos	addu	$1,$25
167876c4f342Schristos	sltu	$24,$7,$24
167976c4f342Schristos	addu	$2,$1
168076c4f342Schristos	addu	$25,$24
168176c4f342Schristos	sltu	$3,$2,$1
168276c4f342Schristos	addu	$2,$25
168376c4f342Schristos	sltu	$25,$2,$25
168476c4f342Schristos	addu	$3,$25
1685e0ea3921Schristos	mflo	($24,$13,$8)
1686e0ea3921Schristos	mfhi	($25,$13,$8)
168776c4f342Schristos	addu	$7,$24
168876c4f342Schristos	sltu	$1,$7,$24
1689e0ea3921Schristos	 multu	($14,$15)		# forward multiplication
169076c4f342Schristos	addu	$7,$24
169176c4f342Schristos	addu	$1,$25
169276c4f342Schristos	sltu	$24,$7,$24
169376c4f342Schristos	addu	$2,$1
169476c4f342Schristos	addu	$25,$24
169576c4f342Schristos	sltu	$1,$2,$1
169676c4f342Schristos	addu	$2,$25
169776c4f342Schristos	addu	$3,$1
169876c4f342Schristos	sltu	$25,$2,$25
169976c4f342Schristos	addu	$3,$25
1700e0ea3921Schristos	mflo	($24,$14,$15)
1701e0ea3921Schristos	mfhi	($25,$14,$15)
170276c4f342Schristos	addu	$7,$24
170376c4f342Schristos	sltu	$1,$7,$24
1704e0ea3921Schristos	 multu	($10,$12)		# forward multiplication
170576c4f342Schristos	addu	$7,$24
170676c4f342Schristos	addu	$1,$25
170776c4f342Schristos	sltu	$24,$7,$24
170876c4f342Schristos	addu	$2,$1
170976c4f342Schristos	addu	$25,$24
171076c4f342Schristos	sltu	$1,$2,$1
171176c4f342Schristos	addu	$2,$25
171276c4f342Schristos	addu	$3,$1
171376c4f342Schristos	sltu	$25,$2,$25
171476c4f342Schristos	addu	$3,$25
1715e0ea3921Schristos	mflo	($24,$10,$12)
1716e0ea3921Schristos	mfhi	($25,$10,$12)
171776c4f342Schristos	sw	$7,5*4($4)
171876c4f342Schristos	addu	$2,$24
171976c4f342Schristos	sltu	$1,$2,$24
1720e0ea3921Schristos	 multu	($9,$13)		# forward multiplication
172176c4f342Schristos	addu	$2,$24
172276c4f342Schristos	addu	$1,$25
172376c4f342Schristos	sltu	$24,$2,$24
172476c4f342Schristos	addu	$3,$1
172576c4f342Schristos	addu	$25,$24
172676c4f342Schristos	sltu	$7,$3,$1
172776c4f342Schristos	addu	$3,$25
172876c4f342Schristos	sltu	$25,$3,$25
172976c4f342Schristos	addu	$7,$25
1730e0ea3921Schristos	mflo	($24,$9,$13)
1731e0ea3921Schristos	mfhi	($25,$9,$13)
173276c4f342Schristos	addu	$2,$24
173376c4f342Schristos	sltu	$1,$2,$24
1734e0ea3921Schristos	 multu	($8,$14)		# forward multiplication
173576c4f342Schristos	addu	$2,$24
173676c4f342Schristos	addu	$1,$25
173776c4f342Schristos	sltu	$24,$2,$24
173876c4f342Schristos	addu	$3,$1
173976c4f342Schristos	addu	$25,$24
174076c4f342Schristos	sltu	$1,$3,$1
174176c4f342Schristos	addu	$3,$25
174276c4f342Schristos	addu	$7,$1
174376c4f342Schristos	sltu	$25,$3,$25
174476c4f342Schristos	addu	$7,$25
1745e0ea3921Schristos	mflo	($24,$8,$14)
1746e0ea3921Schristos	mfhi	($25,$8,$14)
174776c4f342Schristos	addu	$2,$24
174876c4f342Schristos	sltu	$1,$2,$24
1749e0ea3921Schristos	 multu	($15,$15)		# forward multiplication
175076c4f342Schristos	addu	$2,$24
175176c4f342Schristos	addu	$1,$25
175276c4f342Schristos	sltu	$24,$2,$24
175376c4f342Schristos	addu	$3,$1
175476c4f342Schristos	addu	$25,$24
175576c4f342Schristos	sltu	$1,$3,$1
175676c4f342Schristos	addu	$3,$25
175776c4f342Schristos	addu	$7,$1
175876c4f342Schristos	sltu	$25,$3,$25
175976c4f342Schristos	addu	$7,$25
1760e0ea3921Schristos	mflo	($24,$15,$15)
1761e0ea3921Schristos	mfhi	($25,$15,$15)
176276c4f342Schristos	addu	$2,$24
176376c4f342Schristos	sltu	$1,$2,$24
1764e0ea3921Schristos	 multu	($12,$11)		# mul_add_c2(a[0],b[7],c2,c3,c1);
176576c4f342Schristos	addu	$25,$1
176676c4f342Schristos	addu	$3,$25
176776c4f342Schristos	sltu	$1,$3,$25
176876c4f342Schristos	addu	$7,$1
176976c4f342Schristos	sw	$2,6*4($4)
1770e0ea3921Schristos	mflo	($24,$12,$11)
1771e0ea3921Schristos	mfhi	($25,$12,$11)
177276c4f342Schristos	addu	$3,$24
177376c4f342Schristos	sltu	$1,$3,$24
1774e0ea3921Schristos	 multu	($13,$10)		# forward multiplication
177576c4f342Schristos	addu	$3,$24
177676c4f342Schristos	addu	$1,$25
177776c4f342Schristos	sltu	$24,$3,$24
177876c4f342Schristos	addu	$7,$1
177976c4f342Schristos	addu	$25,$24
178076c4f342Schristos	sltu	$2,$7,$1
178176c4f342Schristos	addu	$7,$25
178276c4f342Schristos	sltu	$25,$7,$25
178376c4f342Schristos	addu	$2,$25
1784e0ea3921Schristos	mflo	($24,$13,$10)
1785e0ea3921Schristos	mfhi	($25,$13,$10)
178676c4f342Schristos	addu	$3,$24
178776c4f342Schristos	sltu	$1,$3,$24
1788e0ea3921Schristos	 multu	($14,$9)		# forward multiplication
178976c4f342Schristos	addu	$3,$24
179076c4f342Schristos	addu	$1,$25
179176c4f342Schristos	sltu	$24,$3,$24
179276c4f342Schristos	addu	$7,$1
179376c4f342Schristos	addu	$25,$24
179476c4f342Schristos	sltu	$1,$7,$1
179576c4f342Schristos	addu	$7,$25
179676c4f342Schristos	addu	$2,$1
179776c4f342Schristos	sltu	$25,$7,$25
179876c4f342Schristos	addu	$2,$25
1799e0ea3921Schristos	mflo	($24,$14,$9)
1800e0ea3921Schristos	mfhi	($25,$14,$9)
180176c4f342Schristos	addu	$3,$24
180276c4f342Schristos	sltu	$1,$3,$24
1803e0ea3921Schristos	 multu	($15,$8)		# forward multiplication
180476c4f342Schristos	addu	$3,$24
180576c4f342Schristos	addu	$1,$25
180676c4f342Schristos	sltu	$24,$3,$24
180776c4f342Schristos	addu	$7,$1
180876c4f342Schristos	addu	$25,$24
180976c4f342Schristos	sltu	$1,$7,$1
181076c4f342Schristos	addu	$7,$25
181176c4f342Schristos	addu	$2,$1
181276c4f342Schristos	sltu	$25,$7,$25
181376c4f342Schristos	addu	$2,$25
1814e0ea3921Schristos	mflo	($24,$15,$8)
1815e0ea3921Schristos	mfhi	($25,$15,$8)
181676c4f342Schristos	addu	$3,$24
181776c4f342Schristos	sltu	$1,$3,$24
1818e0ea3921Schristos	 multu	($11,$13)		# forward multiplication
181976c4f342Schristos	addu	$3,$24
182076c4f342Schristos	addu	$1,$25
182176c4f342Schristos	sltu	$24,$3,$24
182276c4f342Schristos	addu	$7,$1
182376c4f342Schristos	addu	$25,$24
182476c4f342Schristos	sltu	$1,$7,$1
182576c4f342Schristos	addu	$7,$25
182676c4f342Schristos	addu	$2,$1
182776c4f342Schristos	sltu	$25,$7,$25
182876c4f342Schristos	addu	$2,$25
1829e0ea3921Schristos	mflo	($24,$11,$13)
1830e0ea3921Schristos	mfhi	($25,$11,$13)
183176c4f342Schristos	sw	$3,7*4($4)
183276c4f342Schristos	addu	$7,$24
183376c4f342Schristos	sltu	$1,$7,$24
1834e0ea3921Schristos	 multu	($10,$14)		# forward multiplication
183576c4f342Schristos	addu	$7,$24
183676c4f342Schristos	addu	$1,$25
183776c4f342Schristos	sltu	$24,$7,$24
183876c4f342Schristos	addu	$2,$1
183976c4f342Schristos	addu	$25,$24
184076c4f342Schristos	sltu	$3,$2,$1
184176c4f342Schristos	addu	$2,$25
184276c4f342Schristos	sltu	$25,$2,$25
184376c4f342Schristos	addu	$3,$25
1844e0ea3921Schristos	mflo	($24,$10,$14)
1845e0ea3921Schristos	mfhi	($25,$10,$14)
184676c4f342Schristos	addu	$7,$24
184776c4f342Schristos	sltu	$1,$7,$24
1848e0ea3921Schristos	 multu	($9,$15)		# forward multiplication
184976c4f342Schristos	addu	$7,$24
185076c4f342Schristos	addu	$1,$25
185176c4f342Schristos	sltu	$24,$7,$24
185276c4f342Schristos	addu	$2,$1
185376c4f342Schristos	addu	$25,$24
185476c4f342Schristos	sltu	$1,$2,$1
185576c4f342Schristos	addu	$2,$25
185676c4f342Schristos	addu	$3,$1
185776c4f342Schristos	sltu	$25,$2,$25
185876c4f342Schristos	addu	$3,$25
1859e0ea3921Schristos	mflo	($24,$9,$15)
1860e0ea3921Schristos	mfhi	($25,$9,$15)
186176c4f342Schristos	addu	$7,$24
186276c4f342Schristos	sltu	$1,$7,$24
1863e0ea3921Schristos	 multu	($8,$8)		# forward multiplication
186476c4f342Schristos	addu	$7,$24
186576c4f342Schristos	addu	$1,$25
186676c4f342Schristos	sltu	$24,$7,$24
186776c4f342Schristos	addu	$2,$1
186876c4f342Schristos	addu	$25,$24
186976c4f342Schristos	sltu	$1,$2,$1
187076c4f342Schristos	addu	$2,$25
187176c4f342Schristos	addu	$3,$1
187276c4f342Schristos	sltu	$25,$2,$25
187376c4f342Schristos	addu	$3,$25
1874e0ea3921Schristos	mflo	($24,$8,$8)
1875e0ea3921Schristos	mfhi	($25,$8,$8)
187676c4f342Schristos	addu	$7,$24
187776c4f342Schristos	sltu	$1,$7,$24
1878e0ea3921Schristos	 multu	($14,$11)		# mul_add_c2(a[2],b[7],c1,c2,c3);
187976c4f342Schristos	addu	$25,$1
188076c4f342Schristos	addu	$2,$25
188176c4f342Schristos	sltu	$1,$2,$25
188276c4f342Schristos	addu	$3,$1
188376c4f342Schristos	sw	$7,8*4($4)
1884e0ea3921Schristos	mflo	($24,$14,$11)
1885e0ea3921Schristos	mfhi	($25,$14,$11)
188676c4f342Schristos	addu	$2,$24
188776c4f342Schristos	sltu	$1,$2,$24
1888e0ea3921Schristos	 multu	($15,$10)		# forward multiplication
188976c4f342Schristos	addu	$2,$24
189076c4f342Schristos	addu	$1,$25
189176c4f342Schristos	sltu	$24,$2,$24
189276c4f342Schristos	addu	$3,$1
189376c4f342Schristos	addu	$25,$24
189476c4f342Schristos	sltu	$7,$3,$1
189576c4f342Schristos	addu	$3,$25
189676c4f342Schristos	sltu	$25,$3,$25
189776c4f342Schristos	addu	$7,$25
1898e0ea3921Schristos	mflo	($24,$15,$10)
1899e0ea3921Schristos	mfhi	($25,$15,$10)
190076c4f342Schristos	addu	$2,$24
190176c4f342Schristos	sltu	$1,$2,$24
1902e0ea3921Schristos	 multu	($8,$9)		# forward multiplication
190376c4f342Schristos	addu	$2,$24
190476c4f342Schristos	addu	$1,$25
190576c4f342Schristos	sltu	$24,$2,$24
190676c4f342Schristos	addu	$3,$1
190776c4f342Schristos	addu	$25,$24
190876c4f342Schristos	sltu	$1,$3,$1
190976c4f342Schristos	addu	$3,$25
191076c4f342Schristos	addu	$7,$1
191176c4f342Schristos	sltu	$25,$3,$25
191276c4f342Schristos	addu	$7,$25
1913e0ea3921Schristos	mflo	($24,$8,$9)
1914e0ea3921Schristos	mfhi	($25,$8,$9)
191576c4f342Schristos	addu	$2,$24
191676c4f342Schristos	sltu	$1,$2,$24
1917e0ea3921Schristos	 multu	($11,$15)		# forward multiplication
191876c4f342Schristos	addu	$2,$24
191976c4f342Schristos	addu	$1,$25
192076c4f342Schristos	sltu	$24,$2,$24
192176c4f342Schristos	addu	$3,$1
192276c4f342Schristos	addu	$25,$24
192376c4f342Schristos	sltu	$1,$3,$1
192476c4f342Schristos	addu	$3,$25
192576c4f342Schristos	addu	$7,$1
192676c4f342Schristos	sltu	$25,$3,$25
192776c4f342Schristos	addu	$7,$25
1928e0ea3921Schristos	mflo	($24,$11,$15)
1929e0ea3921Schristos	mfhi	($25,$11,$15)
193076c4f342Schristos	sw	$2,9*4($4)
193176c4f342Schristos	addu	$3,$24
193276c4f342Schristos	sltu	$1,$3,$24
1933e0ea3921Schristos	 multu	($10,$8)		# forward multiplication
193476c4f342Schristos	addu	$3,$24
193576c4f342Schristos	addu	$1,$25
193676c4f342Schristos	sltu	$24,$3,$24
193776c4f342Schristos	addu	$7,$1
193876c4f342Schristos	addu	$25,$24
193976c4f342Schristos	sltu	$2,$7,$1
194076c4f342Schristos	addu	$7,$25
194176c4f342Schristos	sltu	$25,$7,$25
194276c4f342Schristos	addu	$2,$25
1943e0ea3921Schristos	mflo	($24,$10,$8)
1944e0ea3921Schristos	mfhi	($25,$10,$8)
194576c4f342Schristos	addu	$3,$24
194676c4f342Schristos	sltu	$1,$3,$24
1947e0ea3921Schristos	 multu	($9,$9)		# forward multiplication
194876c4f342Schristos	addu	$3,$24
194976c4f342Schristos	addu	$1,$25
195076c4f342Schristos	sltu	$24,$3,$24
195176c4f342Schristos	addu	$7,$1
195276c4f342Schristos	addu	$25,$24
195376c4f342Schristos	sltu	$1,$7,$1
195476c4f342Schristos	addu	$7,$25
195576c4f342Schristos	addu	$2,$1
195676c4f342Schristos	sltu	$25,$7,$25
195776c4f342Schristos	addu	$2,$25
1958e0ea3921Schristos	mflo	($24,$9,$9)
1959e0ea3921Schristos	mfhi	($25,$9,$9)
196076c4f342Schristos	addu	$3,$24
196176c4f342Schristos	sltu	$1,$3,$24
1962e0ea3921Schristos	 multu	($8,$11)		# mul_add_c2(a[4],b[7],c3,c1,c2);
196376c4f342Schristos	addu	$25,$1
196476c4f342Schristos	addu	$7,$25
196576c4f342Schristos	sltu	$1,$7,$25
196676c4f342Schristos	addu	$2,$1
196776c4f342Schristos	sw	$3,10*4($4)
1968e0ea3921Schristos	mflo	($24,$8,$11)
1969e0ea3921Schristos	mfhi	($25,$8,$11)
197076c4f342Schristos	addu	$7,$24
197176c4f342Schristos	sltu	$1,$7,$24
1972e0ea3921Schristos	 multu	($9,$10)		# forward multiplication
197376c4f342Schristos	addu	$7,$24
197476c4f342Schristos	addu	$1,$25
197576c4f342Schristos	sltu	$24,$7,$24
197676c4f342Schristos	addu	$2,$1
197776c4f342Schristos	addu	$25,$24
197876c4f342Schristos	sltu	$3,$2,$1
197976c4f342Schristos	addu	$2,$25
198076c4f342Schristos	sltu	$25,$2,$25
198176c4f342Schristos	addu	$3,$25
1982e0ea3921Schristos	mflo	($24,$9,$10)
1983e0ea3921Schristos	mfhi	($25,$9,$10)
198476c4f342Schristos	addu	$7,$24
198576c4f342Schristos	sltu	$1,$7,$24
1986e0ea3921Schristos	 multu	($11,$9)		# forward multiplication
198776c4f342Schristos	addu	$7,$24
198876c4f342Schristos	addu	$1,$25
198976c4f342Schristos	sltu	$24,$7,$24
199076c4f342Schristos	addu	$2,$1
199176c4f342Schristos	addu	$25,$24
199276c4f342Schristos	sltu	$1,$2,$1
199376c4f342Schristos	addu	$2,$25
199476c4f342Schristos	addu	$3,$1
199576c4f342Schristos	sltu	$25,$2,$25
199676c4f342Schristos	addu	$3,$25
1997e0ea3921Schristos	mflo	($24,$11,$9)
1998e0ea3921Schristos	mfhi	($25,$11,$9)
199976c4f342Schristos	sw	$7,11*4($4)
200076c4f342Schristos	addu	$2,$24
200176c4f342Schristos	sltu	$1,$2,$24
2002e0ea3921Schristos	 multu	($10,$10)		# forward multiplication
200376c4f342Schristos	addu	$2,$24
200476c4f342Schristos	addu	$1,$25
200576c4f342Schristos	sltu	$24,$2,$24
200676c4f342Schristos	addu	$3,$1
200776c4f342Schristos	addu	$25,$24
200876c4f342Schristos	sltu	$7,$3,$1
200976c4f342Schristos	addu	$3,$25
201076c4f342Schristos	sltu	$25,$3,$25
201176c4f342Schristos	addu	$7,$25
2012e0ea3921Schristos	mflo	($24,$10,$10)
2013e0ea3921Schristos	mfhi	($25,$10,$10)
201476c4f342Schristos	addu	$2,$24
201576c4f342Schristos	sltu	$1,$2,$24
2016e0ea3921Schristos	 multu	($10,$11)		# mul_add_c2(a[6],b[7],c2,c3,c1);
201776c4f342Schristos	addu	$25,$1
201876c4f342Schristos	addu	$3,$25
201976c4f342Schristos	sltu	$1,$3,$25
202076c4f342Schristos	addu	$7,$1
202176c4f342Schristos	sw	$2,12*4($4)
2022e0ea3921Schristos	mflo	($24,$10,$11)
2023e0ea3921Schristos	mfhi	($25,$10,$11)
202476c4f342Schristos	addu	$3,$24
202576c4f342Schristos	sltu	$1,$3,$24
2026e0ea3921Schristos	 multu	($11,$11)		# forward multiplication
202776c4f342Schristos	addu	$3,$24
202876c4f342Schristos	addu	$1,$25
202976c4f342Schristos	sltu	$24,$3,$24
203076c4f342Schristos	addu	$7,$1
203176c4f342Schristos	addu	$25,$24
203276c4f342Schristos	sltu	$2,$7,$1
203376c4f342Schristos	addu	$7,$25
203476c4f342Schristos	sltu	$25,$7,$25
203576c4f342Schristos	addu	$2,$25
2036e0ea3921Schristos	mflo	($24,$11,$11)
2037e0ea3921Schristos	mfhi	($25,$11,$11)
203876c4f342Schristos	sw	$3,13*4($4)
203976c4f342Schristos
204076c4f342Schristos	addu	$7,$24
204176c4f342Schristos	sltu	$1,$7,$24
204276c4f342Schristos	addu	$25,$1
204376c4f342Schristos	addu	$2,$25
204476c4f342Schristos	sw	$7,14*4($4)
204576c4f342Schristos	sw	$2,15*4($4)
204676c4f342Schristos
204776c4f342Schristos	.set	noreorder
204876c4f342Schristos	jr	$31
204976c4f342Schristos	nop
205076c4f342Schristos.end	bn_sqr_comba8
205176c4f342Schristos
205276c4f342Schristos.align	5
205376c4f342Schristos.globl	bn_sqr_comba4
205476c4f342Schristos.ent	bn_sqr_comba4
205576c4f342Schristosbn_sqr_comba4:
205676c4f342Schristos	.set	reorder
205776c4f342Schristos	lw	$12,0($5)
205876c4f342Schristos	lw	$13,4($5)
2059e0ea3921Schristos	multu	($12,$12)		# mul_add_c(a[0],b[0],c1,c2,c3);
206076c4f342Schristos	lw	$14,2*4($5)
206176c4f342Schristos	lw	$15,3*4($5)
2062e0ea3921Schristos	mflo	($2,$12,$12)
2063e0ea3921Schristos	mfhi	($3,$12,$12)
206476c4f342Schristos	sw	$2,0($4)
206576c4f342Schristos
2066e0ea3921Schristos	multu	($12,$13)		# mul_add_c2(a[0],b[1],c2,c3,c1);
2067e0ea3921Schristos	mflo	($24,$12,$13)
2068e0ea3921Schristos	mfhi	($25,$12,$13)
206976c4f342Schristos	slt	$2,$25,$0
207076c4f342Schristos	sll	$25,1
2071e0ea3921Schristos	 multu	($14,$12)		# mul_add_c2(a[2],b[0],c3,c1,c2);
207276c4f342Schristos	slt	$6,$24,$0
207376c4f342Schristos	addu	$25,$6
207476c4f342Schristos	sll	$24,1
207576c4f342Schristos	addu	$3,$24
207676c4f342Schristos	sltu	$1,$3,$24
207776c4f342Schristos	addu	$7,$25,$1
207876c4f342Schristos	sw	$3,4($4)
2079*1b3d6f93Schristos	sltu	$1,$7,$25
2080*1b3d6f93Schristos	addu	$2,$1
2081e0ea3921Schristos	mflo	($24,$14,$12)
2082e0ea3921Schristos	mfhi	($25,$14,$12)
208376c4f342Schristos	addu	$7,$24
208476c4f342Schristos	sltu	$1,$7,$24
2085e0ea3921Schristos	 multu	($13,$13)		# forward multiplication
208676c4f342Schristos	addu	$7,$24
208776c4f342Schristos	addu	$1,$25
208876c4f342Schristos	sltu	$24,$7,$24
208976c4f342Schristos	addu	$2,$1
209076c4f342Schristos	addu	$25,$24
209176c4f342Schristos	sltu	$3,$2,$1
209276c4f342Schristos	addu	$2,$25
209376c4f342Schristos	sltu	$25,$2,$25
209476c4f342Schristos	addu	$3,$25
2095e0ea3921Schristos	mflo	($24,$13,$13)
2096e0ea3921Schristos	mfhi	($25,$13,$13)
209776c4f342Schristos	addu	$7,$24
209876c4f342Schristos	sltu	$1,$7,$24
2099e0ea3921Schristos	 multu	($12,$15)		# mul_add_c2(a[0],b[3],c1,c2,c3);
210076c4f342Schristos	addu	$25,$1
210176c4f342Schristos	addu	$2,$25
210276c4f342Schristos	sltu	$1,$2,$25
210376c4f342Schristos	addu	$3,$1
210476c4f342Schristos	sw	$7,2*4($4)
2105e0ea3921Schristos	mflo	($24,$12,$15)
2106e0ea3921Schristos	mfhi	($25,$12,$15)
210776c4f342Schristos	addu	$2,$24
210876c4f342Schristos	sltu	$1,$2,$24
2109e0ea3921Schristos	 multu	($13,$14)		# forward multiplication
211076c4f342Schristos	addu	$2,$24
211176c4f342Schristos	addu	$1,$25
211276c4f342Schristos	sltu	$24,$2,$24
211376c4f342Schristos	addu	$3,$1
211476c4f342Schristos	addu	$25,$24
211576c4f342Schristos	sltu	$7,$3,$1
211676c4f342Schristos	addu	$3,$25
211776c4f342Schristos	sltu	$25,$3,$25
211876c4f342Schristos	addu	$7,$25
2119e0ea3921Schristos	mflo	($24,$13,$14)
2120e0ea3921Schristos	mfhi	($25,$13,$14)
212176c4f342Schristos	addu	$2,$24
212276c4f342Schristos	sltu	$1,$2,$24
2123e0ea3921Schristos	 multu	($15,$13)		# forward multiplication
212476c4f342Schristos	addu	$2,$24
212576c4f342Schristos	addu	$1,$25
212676c4f342Schristos	sltu	$24,$2,$24
212776c4f342Schristos	addu	$3,$1
212876c4f342Schristos	addu	$25,$24
212976c4f342Schristos	sltu	$1,$3,$1
213076c4f342Schristos	addu	$3,$25
213176c4f342Schristos	addu	$7,$1
213276c4f342Schristos	sltu	$25,$3,$25
213376c4f342Schristos	addu	$7,$25
2134e0ea3921Schristos	mflo	($24,$15,$13)
2135e0ea3921Schristos	mfhi	($25,$15,$13)
213676c4f342Schristos	sw	$2,3*4($4)
213776c4f342Schristos	addu	$3,$24
213876c4f342Schristos	sltu	$1,$3,$24
2139e0ea3921Schristos	 multu	($14,$14)		# forward multiplication
214076c4f342Schristos	addu	$3,$24
214176c4f342Schristos	addu	$1,$25
214276c4f342Schristos	sltu	$24,$3,$24
214376c4f342Schristos	addu	$7,$1
214476c4f342Schristos	addu	$25,$24
214576c4f342Schristos	sltu	$2,$7,$1
214676c4f342Schristos	addu	$7,$25
214776c4f342Schristos	sltu	$25,$7,$25
214876c4f342Schristos	addu	$2,$25
2149e0ea3921Schristos	mflo	($24,$14,$14)
2150e0ea3921Schristos	mfhi	($25,$14,$14)
215176c4f342Schristos	addu	$3,$24
215276c4f342Schristos	sltu	$1,$3,$24
2153e0ea3921Schristos	 multu	($14,$15)		# mul_add_c2(a[2],b[3],c3,c1,c2);
215476c4f342Schristos	addu	$25,$1
215576c4f342Schristos	addu	$7,$25
215676c4f342Schristos	sltu	$1,$7,$25
215776c4f342Schristos	addu	$2,$1
215876c4f342Schristos	sw	$3,4*4($4)
2159e0ea3921Schristos	mflo	($24,$14,$15)
2160e0ea3921Schristos	mfhi	($25,$14,$15)
216176c4f342Schristos	addu	$7,$24
216276c4f342Schristos	sltu	$1,$7,$24
2163e0ea3921Schristos	 multu	($15,$15)		# forward multiplication
216476c4f342Schristos	addu	$7,$24
216576c4f342Schristos	addu	$1,$25
216676c4f342Schristos	sltu	$24,$7,$24
216776c4f342Schristos	addu	$2,$1
216876c4f342Schristos	addu	$25,$24
216976c4f342Schristos	sltu	$3,$2,$1
217076c4f342Schristos	addu	$2,$25
217176c4f342Schristos	sltu	$25,$2,$25
217276c4f342Schristos	addu	$3,$25
2173e0ea3921Schristos	mflo	($24,$15,$15)
2174e0ea3921Schristos	mfhi	($25,$15,$15)
217576c4f342Schristos	sw	$7,5*4($4)
217676c4f342Schristos
217776c4f342Schristos	addu	$2,$24
217876c4f342Schristos	sltu	$1,$2,$24
217976c4f342Schristos	addu	$25,$1
218076c4f342Schristos	addu	$3,$25
218176c4f342Schristos	sw	$2,6*4($4)
218276c4f342Schristos	sw	$3,7*4($4)
218376c4f342Schristos
218476c4f342Schristos	.set	noreorder
218576c4f342Schristos	jr	$31
218676c4f342Schristos	nop
218776c4f342Schristos.end	bn_sqr_comba4
2188