xref: /netbsd-src/crypto/external/bsd/openssl.old/lib/libcrypto/arch/mips/mips.S (revision 4724848cf0da353df257f730694b7882798e5daf)
1*4724848cSchristos#if !(defined (__mips_isa_rev) && (__mips_isa_rev >= 6))
2*4724848cSchristos.set     mips2
3*4724848cSchristos#endif
4*4724848cSchristos#include "mips_arch.h"
5*4724848cSchristos
6*4724848cSchristos#if defined(_MIPS_ARCH_MIPS64R6)
7*4724848cSchristos# define ddivu(rs,rt)
8*4724848cSchristos# define mfqt(rd,rs,rt)	ddivu	rd,rs,rt
9*4724848cSchristos# define mfrm(rd,rs,rt)	dmodu	rd,rs,rt
10*4724848cSchristos#elif defined(_MIPS_ARCH_MIPS32R6)
11*4724848cSchristos# define divu(rs,rt)
12*4724848cSchristos# define mfqt(rd,rs,rt)	divu	rd,rs,rt
13*4724848cSchristos# define mfrm(rd,rs,rt)	modu	rd,rs,rt
14*4724848cSchristos#else
15*4724848cSchristos# define divu(rs,rt)	divu	$0,rs,rt
16*4724848cSchristos# define mfqt(rd,rs,rt)	mflo	rd
17*4724848cSchristos# define mfrm(rd,rs,rt)	mfhi	rd
18*4724848cSchristos#endif
19*4724848cSchristos
20*4724848cSchristos.rdata
21*4724848cSchristos.asciiz	"mips3.s, Version 1.2"
22*4724848cSchristos.asciiz	"MIPS II/III/IV ISA artwork by Andy Polyakov <appro@fy.chalmers.se>"
23*4724848cSchristos
24*4724848cSchristos.text
25*4724848cSchristos.set	noat
26*4724848cSchristos
27*4724848cSchristos.align	5
28*4724848cSchristos.globl	bn_mul_add_words
29*4724848cSchristos.ent	bn_mul_add_words
30*4724848cSchristosbn_mul_add_words:
31*4724848cSchristos	.set	noreorder
32*4724848cSchristos	bgtz	$6,bn_mul_add_words_internal
33*4724848cSchristos	move	$2,$0
34*4724848cSchristos	jr	$31
35*4724848cSchristos	move	$4,$2
36*4724848cSchristos.end	bn_mul_add_words
37*4724848cSchristos
38*4724848cSchristos.align	5
39*4724848cSchristos.ent	bn_mul_add_words_internal
40*4724848cSchristosbn_mul_add_words_internal:
41*4724848cSchristos	.set	reorder
42*4724848cSchristos	li	$3,-4
43*4724848cSchristos	and	$8,$6,$3
44*4724848cSchristos	beqz	$8,.L_bn_mul_add_words_tail
45*4724848cSchristos
46*4724848cSchristos.L_bn_mul_add_words_loop:
47*4724848cSchristos	lw	$12,0($5)
48*4724848cSchristos	multu	($12,$7)
49*4724848cSchristos	lw	$13,0($4)
50*4724848cSchristos	lw	$14,4($5)
51*4724848cSchristos	lw	$15,4($4)
52*4724848cSchristos	lw	$8,2*4($5)
53*4724848cSchristos	lw	$9,2*4($4)
54*4724848cSchristos	addu	$13,$2
55*4724848cSchristos	sltu	$2,$13,$2	# All manuals say it "compares 32-bit
56*4724848cSchristos				# values", but it seems to work fine
57*4724848cSchristos				# even on 64-bit registers.
58*4724848cSchristos	mflo	($1,$12,$7)
59*4724848cSchristos	mfhi	($12,$12,$7)
60*4724848cSchristos	addu	$13,$1
61*4724848cSchristos	addu	$2,$12
62*4724848cSchristos	 multu	($14,$7)
63*4724848cSchristos	sltu	$1,$13,$1
64*4724848cSchristos	sw	$13,0($4)
65*4724848cSchristos	addu	$2,$1
66*4724848cSchristos
67*4724848cSchristos	lw	$10,3*4($5)
68*4724848cSchristos	lw	$11,3*4($4)
69*4724848cSchristos	addu	$15,$2
70*4724848cSchristos	sltu	$2,$15,$2
71*4724848cSchristos	mflo	($1,$14,$7)
72*4724848cSchristos	mfhi	($14,$14,$7)
73*4724848cSchristos	addu	$15,$1
74*4724848cSchristos	addu	$2,$14
75*4724848cSchristos	 multu	($8,$7)
76*4724848cSchristos	sltu	$1,$15,$1
77*4724848cSchristos	sw	$15,4($4)
78*4724848cSchristos	addu	$2,$1
79*4724848cSchristos
80*4724848cSchristos	subu	$6,4
81*4724848cSchristos	addu $4,4*4
82*4724848cSchristos	addu $5,4*4
83*4724848cSchristos	addu	$9,$2
84*4724848cSchristos	sltu	$2,$9,$2
85*4724848cSchristos	mflo	($1,$8,$7)
86*4724848cSchristos	mfhi	($8,$8,$7)
87*4724848cSchristos	addu	$9,$1
88*4724848cSchristos	addu	$2,$8
89*4724848cSchristos	 multu	($10,$7)
90*4724848cSchristos	sltu	$1,$9,$1
91*4724848cSchristos	sw	$9,-2*4($4)
92*4724848cSchristos	addu	$2,$1
93*4724848cSchristos
94*4724848cSchristos
95*4724848cSchristos	and	$8,$6,$3
96*4724848cSchristos	addu	$11,$2
97*4724848cSchristos	sltu	$2,$11,$2
98*4724848cSchristos	mflo	($1,$10,$7)
99*4724848cSchristos	mfhi	($10,$10,$7)
100*4724848cSchristos	addu	$11,$1
101*4724848cSchristos	addu	$2,$10
102*4724848cSchristos	sltu	$1,$11,$1
103*4724848cSchristos	sw	$11,-4($4)
104*4724848cSchristos	.set	noreorder
105*4724848cSchristos	bgtz	$8,.L_bn_mul_add_words_loop
106*4724848cSchristos	addu	$2,$1
107*4724848cSchristos
108*4724848cSchristos	beqz	$6,.L_bn_mul_add_words_return
109*4724848cSchristos	nop
110*4724848cSchristos
111*4724848cSchristos.L_bn_mul_add_words_tail:
112*4724848cSchristos	.set	reorder
113*4724848cSchristos	lw	$12,0($5)
114*4724848cSchristos	multu	($12,$7)
115*4724848cSchristos	lw	$13,0($4)
116*4724848cSchristos	subu	$6,1
117*4724848cSchristos	addu	$13,$2
118*4724848cSchristos	sltu	$2,$13,$2
119*4724848cSchristos	mflo	($1,$12,$7)
120*4724848cSchristos	mfhi	($12,$12,$7)
121*4724848cSchristos	addu	$13,$1
122*4724848cSchristos	addu	$2,$12
123*4724848cSchristos	sltu	$1,$13,$1
124*4724848cSchristos	sw	$13,0($4)
125*4724848cSchristos	addu	$2,$1
126*4724848cSchristos	beqz	$6,.L_bn_mul_add_words_return
127*4724848cSchristos
128*4724848cSchristos	lw	$12,4($5)
129*4724848cSchristos	multu	($12,$7)
130*4724848cSchristos	lw	$13,4($4)
131*4724848cSchristos	subu	$6,1
132*4724848cSchristos	addu	$13,$2
133*4724848cSchristos	sltu	$2,$13,$2
134*4724848cSchristos	mflo	($1,$12,$7)
135*4724848cSchristos	mfhi	($12,$12,$7)
136*4724848cSchristos	addu	$13,$1
137*4724848cSchristos	addu	$2,$12
138*4724848cSchristos	sltu	$1,$13,$1
139*4724848cSchristos	sw	$13,4($4)
140*4724848cSchristos	addu	$2,$1
141*4724848cSchristos	beqz	$6,.L_bn_mul_add_words_return
142*4724848cSchristos
143*4724848cSchristos	lw	$12,2*4($5)
144*4724848cSchristos	multu	($12,$7)
145*4724848cSchristos	lw	$13,2*4($4)
146*4724848cSchristos	addu	$13,$2
147*4724848cSchristos	sltu	$2,$13,$2
148*4724848cSchristos	mflo	($1,$12,$7)
149*4724848cSchristos	mfhi	($12,$12,$7)
150*4724848cSchristos	addu	$13,$1
151*4724848cSchristos	addu	$2,$12
152*4724848cSchristos	sltu	$1,$13,$1
153*4724848cSchristos	sw	$13,2*4($4)
154*4724848cSchristos	addu	$2,$1
155*4724848cSchristos
156*4724848cSchristos.L_bn_mul_add_words_return:
157*4724848cSchristos	.set	noreorder
158*4724848cSchristos	jr	$31
159*4724848cSchristos	move	$4,$2
160*4724848cSchristos.end	bn_mul_add_words_internal
161*4724848cSchristos
162*4724848cSchristos.align	5
163*4724848cSchristos.globl	bn_mul_words
164*4724848cSchristos.ent	bn_mul_words
165*4724848cSchristosbn_mul_words:
166*4724848cSchristos	.set	noreorder
167*4724848cSchristos	bgtz	$6,bn_mul_words_internal
168*4724848cSchristos	move	$2,$0
169*4724848cSchristos	jr	$31
170*4724848cSchristos	move	$4,$2
171*4724848cSchristos.end	bn_mul_words
172*4724848cSchristos
173*4724848cSchristos.align	5
174*4724848cSchristos.ent	bn_mul_words_internal
175*4724848cSchristosbn_mul_words_internal:
176*4724848cSchristos	.set	reorder
177*4724848cSchristos	li	$3,-4
178*4724848cSchristos	and	$8,$6,$3
179*4724848cSchristos	beqz	$8,.L_bn_mul_words_tail
180*4724848cSchristos
181*4724848cSchristos.L_bn_mul_words_loop:
182*4724848cSchristos	lw	$12,0($5)
183*4724848cSchristos	multu	($12,$7)
184*4724848cSchristos	lw	$14,4($5)
185*4724848cSchristos	lw	$8,2*4($5)
186*4724848cSchristos	lw	$10,3*4($5)
187*4724848cSchristos	mflo	($1,$12,$7)
188*4724848cSchristos	mfhi	($12,$12,$7)
189*4724848cSchristos	addu	$2,$1
190*4724848cSchristos	sltu	$13,$2,$1
191*4724848cSchristos	 multu	($14,$7)
192*4724848cSchristos	sw	$2,0($4)
193*4724848cSchristos	addu	$2,$13,$12
194*4724848cSchristos
195*4724848cSchristos	subu	$6,4
196*4724848cSchristos	addu $4,4*4
197*4724848cSchristos	addu $5,4*4
198*4724848cSchristos	mflo	($1,$14,$7)
199*4724848cSchristos	mfhi	($14,$14,$7)
200*4724848cSchristos	addu	$2,$1
201*4724848cSchristos	sltu	$15,$2,$1
202*4724848cSchristos	 multu	($8,$7)
203*4724848cSchristos	sw	$2,-3*4($4)
204*4724848cSchristos	addu	$2,$15,$14
205*4724848cSchristos
206*4724848cSchristos	mflo	($1,$8,$7)
207*4724848cSchristos	mfhi	($8,$8,$7)
208*4724848cSchristos	addu	$2,$1
209*4724848cSchristos	sltu	$9,$2,$1
210*4724848cSchristos	 multu	($10,$7)
211*4724848cSchristos	sw	$2,-2*4($4)
212*4724848cSchristos	addu	$2,$9,$8
213*4724848cSchristos
214*4724848cSchristos	and	$8,$6,$3
215*4724848cSchristos	mflo	($1,$10,$7)
216*4724848cSchristos	mfhi	($10,$10,$7)
217*4724848cSchristos	addu	$2,$1
218*4724848cSchristos	sltu	$11,$2,$1
219*4724848cSchristos	sw	$2,-4($4)
220*4724848cSchristos	.set	noreorder
221*4724848cSchristos	bgtz	$8,.L_bn_mul_words_loop
222*4724848cSchristos	addu	$2,$11,$10
223*4724848cSchristos
224*4724848cSchristos	beqz	$6,.L_bn_mul_words_return
225*4724848cSchristos	nop
226*4724848cSchristos
227*4724848cSchristos.L_bn_mul_words_tail:
228*4724848cSchristos	.set	reorder
229*4724848cSchristos	lw	$12,0($5)
230*4724848cSchristos	multu	($12,$7)
231*4724848cSchristos	subu	$6,1
232*4724848cSchristos	mflo	($1,$12,$7)
233*4724848cSchristos	mfhi	($12,$12,$7)
234*4724848cSchristos	addu	$2,$1
235*4724848cSchristos	sltu	$13,$2,$1
236*4724848cSchristos	sw	$2,0($4)
237*4724848cSchristos	addu	$2,$13,$12
238*4724848cSchristos	beqz	$6,.L_bn_mul_words_return
239*4724848cSchristos
240*4724848cSchristos	lw	$12,4($5)
241*4724848cSchristos	multu	($12,$7)
242*4724848cSchristos	subu	$6,1
243*4724848cSchristos	mflo	($1,$12,$7)
244*4724848cSchristos	mfhi	($12,$12,$7)
245*4724848cSchristos	addu	$2,$1
246*4724848cSchristos	sltu	$13,$2,$1
247*4724848cSchristos	sw	$2,4($4)
248*4724848cSchristos	addu	$2,$13,$12
249*4724848cSchristos	beqz	$6,.L_bn_mul_words_return
250*4724848cSchristos
251*4724848cSchristos	lw	$12,2*4($5)
252*4724848cSchristos	multu	($12,$7)
253*4724848cSchristos	mflo	($1,$12,$7)
254*4724848cSchristos	mfhi	($12,$12,$7)
255*4724848cSchristos	addu	$2,$1
256*4724848cSchristos	sltu	$13,$2,$1
257*4724848cSchristos	sw	$2,2*4($4)
258*4724848cSchristos	addu	$2,$13,$12
259*4724848cSchristos
260*4724848cSchristos.L_bn_mul_words_return:
261*4724848cSchristos	.set	noreorder
262*4724848cSchristos	jr	$31
263*4724848cSchristos	move	$4,$2
264*4724848cSchristos.end	bn_mul_words_internal
265*4724848cSchristos
266*4724848cSchristos.align	5
267*4724848cSchristos.globl	bn_sqr_words
268*4724848cSchristos.ent	bn_sqr_words
269*4724848cSchristosbn_sqr_words:
270*4724848cSchristos	.set	noreorder
271*4724848cSchristos	bgtz	$6,bn_sqr_words_internal
272*4724848cSchristos	move	$2,$0
273*4724848cSchristos	jr	$31
274*4724848cSchristos	move	$4,$2
275*4724848cSchristos.end	bn_sqr_words
276*4724848cSchristos
277*4724848cSchristos.align	5
278*4724848cSchristos.ent	bn_sqr_words_internal
279*4724848cSchristosbn_sqr_words_internal:
280*4724848cSchristos	.set	reorder
281*4724848cSchristos	li	$3,-4
282*4724848cSchristos	and	$8,$6,$3
283*4724848cSchristos	beqz	$8,.L_bn_sqr_words_tail
284*4724848cSchristos
285*4724848cSchristos.L_bn_sqr_words_loop:
286*4724848cSchristos	lw	$12,0($5)
287*4724848cSchristos	multu	($12,$12)
288*4724848cSchristos	lw	$14,4($5)
289*4724848cSchristos	lw	$8,2*4($5)
290*4724848cSchristos	lw	$10,3*4($5)
291*4724848cSchristos	mflo	($13,$12,$12)
292*4724848cSchristos	mfhi	($12,$12,$12)
293*4724848cSchristos	sw	$13,0($4)
294*4724848cSchristos	sw	$12,4($4)
295*4724848cSchristos
296*4724848cSchristos	multu	($14,$14)
297*4724848cSchristos	subu	$6,4
298*4724848cSchristos	addu $4,8*4
299*4724848cSchristos	addu $5,4*4
300*4724848cSchristos	mflo	($15,$14,$14)
301*4724848cSchristos	mfhi	($14,$14,$14)
302*4724848cSchristos	sw	$15,-6*4($4)
303*4724848cSchristos	sw	$14,-5*4($4)
304*4724848cSchristos
305*4724848cSchristos	multu	($8,$8)
306*4724848cSchristos	mflo	($9,$8,$8)
307*4724848cSchristos	mfhi	($8,$8,$8)
308*4724848cSchristos	sw	$9,-4*4($4)
309*4724848cSchristos	sw	$8,-3*4($4)
310*4724848cSchristos
311*4724848cSchristos
312*4724848cSchristos	multu	($10,$10)
313*4724848cSchristos	and	$8,$6,$3
314*4724848cSchristos	mflo	($11,$10,$10)
315*4724848cSchristos	mfhi	($10,$10,$10)
316*4724848cSchristos	sw	$11,-2*4($4)
317*4724848cSchristos
318*4724848cSchristos	.set	noreorder
319*4724848cSchristos	bgtz	$8,.L_bn_sqr_words_loop
320*4724848cSchristos	sw	$10,-4($4)
321*4724848cSchristos
322*4724848cSchristos	beqz	$6,.L_bn_sqr_words_return
323*4724848cSchristos	nop
324*4724848cSchristos
325*4724848cSchristos.L_bn_sqr_words_tail:
326*4724848cSchristos	.set	reorder
327*4724848cSchristos	lw	$12,0($5)
328*4724848cSchristos	multu	($12,$12)
329*4724848cSchristos	subu	$6,1
330*4724848cSchristos	mflo	($13,$12,$12)
331*4724848cSchristos	mfhi	($12,$12,$12)
332*4724848cSchristos	sw	$13,0($4)
333*4724848cSchristos	sw	$12,4($4)
334*4724848cSchristos	beqz	$6,.L_bn_sqr_words_return
335*4724848cSchristos
336*4724848cSchristos	lw	$12,4($5)
337*4724848cSchristos	multu	($12,$12)
338*4724848cSchristos	subu	$6,1
339*4724848cSchristos	mflo	($13,$12,$12)
340*4724848cSchristos	mfhi	($12,$12,$12)
341*4724848cSchristos	sw	$13,2*4($4)
342*4724848cSchristos	sw	$12,3*4($4)
343*4724848cSchristos	beqz	$6,.L_bn_sqr_words_return
344*4724848cSchristos
345*4724848cSchristos	lw	$12,2*4($5)
346*4724848cSchristos	multu	($12,$12)
347*4724848cSchristos	mflo	($13,$12,$12)
348*4724848cSchristos	mfhi	($12,$12,$12)
349*4724848cSchristos	sw	$13,4*4($4)
350*4724848cSchristos	sw	$12,5*4($4)
351*4724848cSchristos
352*4724848cSchristos.L_bn_sqr_words_return:
353*4724848cSchristos	.set	noreorder
354*4724848cSchristos	jr	$31
355*4724848cSchristos	move	$4,$2
356*4724848cSchristos
357*4724848cSchristos.end	bn_sqr_words_internal
358*4724848cSchristos
359*4724848cSchristos.align	5
360*4724848cSchristos.globl	bn_add_words
361*4724848cSchristos.ent	bn_add_words
362*4724848cSchristosbn_add_words:
363*4724848cSchristos	.set	noreorder
364*4724848cSchristos	bgtz	$7,bn_add_words_internal
365*4724848cSchristos	move	$2,$0
366*4724848cSchristos	jr	$31
367*4724848cSchristos	move	$4,$2
368*4724848cSchristos.end	bn_add_words
369*4724848cSchristos
370*4724848cSchristos.align	5
371*4724848cSchristos.ent	bn_add_words_internal
372*4724848cSchristosbn_add_words_internal:
373*4724848cSchristos	.set	reorder
374*4724848cSchristos	li	$3,-4
375*4724848cSchristos	and	$1,$7,$3
376*4724848cSchristos	beqz	$1,.L_bn_add_words_tail
377*4724848cSchristos
378*4724848cSchristos.L_bn_add_words_loop:
379*4724848cSchristos	lw	$12,0($5)
380*4724848cSchristos	lw	$8,0($6)
381*4724848cSchristos	subu	$7,4
382*4724848cSchristos	lw	$13,4($5)
383*4724848cSchristos	and	$1,$7,$3
384*4724848cSchristos	lw	$14,2*4($5)
385*4724848cSchristos	addu $6,4*4
386*4724848cSchristos	lw	$15,3*4($5)
387*4724848cSchristos	addu $4,4*4
388*4724848cSchristos	lw	$9,-3*4($6)
389*4724848cSchristos	addu $5,4*4
390*4724848cSchristos	lw	$10,-2*4($6)
391*4724848cSchristos	lw	$11,-4($6)
392*4724848cSchristos	addu	$8,$12
393*4724848cSchristos	sltu	$24,$8,$12
394*4724848cSchristos	addu	$12,$8,$2
395*4724848cSchristos	sltu	$2,$12,$8
396*4724848cSchristos	sw	$12,-4*4($4)
397*4724848cSchristos	addu	$2,$24
398*4724848cSchristos
399*4724848cSchristos	addu	$9,$13
400*4724848cSchristos	sltu	$25,$9,$13
401*4724848cSchristos	addu	$13,$9,$2
402*4724848cSchristos	sltu	$2,$13,$9
403*4724848cSchristos	sw	$13,-3*4($4)
404*4724848cSchristos	addu	$2,$25
405*4724848cSchristos
406*4724848cSchristos	addu	$10,$14
407*4724848cSchristos	sltu	$24,$10,$14
408*4724848cSchristos	addu	$14,$10,$2
409*4724848cSchristos	sltu	$2,$14,$10
410*4724848cSchristos	sw	$14,-2*4($4)
411*4724848cSchristos	addu	$2,$24
412*4724848cSchristos
413*4724848cSchristos	addu	$11,$15
414*4724848cSchristos	sltu	$25,$11,$15
415*4724848cSchristos	addu	$15,$11,$2
416*4724848cSchristos	sltu	$2,$15,$11
417*4724848cSchristos	sw	$15,-4($4)
418*4724848cSchristos
419*4724848cSchristos	.set	noreorder
420*4724848cSchristos	bgtz	$1,.L_bn_add_words_loop
421*4724848cSchristos	addu	$2,$25
422*4724848cSchristos
423*4724848cSchristos	beqz	$7,.L_bn_add_words_return
424*4724848cSchristos	nop
425*4724848cSchristos
426*4724848cSchristos.L_bn_add_words_tail:
427*4724848cSchristos	.set	reorder
428*4724848cSchristos	lw	$12,0($5)
429*4724848cSchristos	lw	$8,0($6)
430*4724848cSchristos	addu	$8,$12
431*4724848cSchristos	subu	$7,1
432*4724848cSchristos	sltu	$24,$8,$12
433*4724848cSchristos	addu	$12,$8,$2
434*4724848cSchristos	sltu	$2,$12,$8
435*4724848cSchristos	sw	$12,0($4)
436*4724848cSchristos	addu	$2,$24
437*4724848cSchristos	beqz	$7,.L_bn_add_words_return
438*4724848cSchristos
439*4724848cSchristos	lw	$13,4($5)
440*4724848cSchristos	lw	$9,4($6)
441*4724848cSchristos	addu	$9,$13
442*4724848cSchristos	subu	$7,1
443*4724848cSchristos	sltu	$25,$9,$13
444*4724848cSchristos	addu	$13,$9,$2
445*4724848cSchristos	sltu	$2,$13,$9
446*4724848cSchristos	sw	$13,4($4)
447*4724848cSchristos	addu	$2,$25
448*4724848cSchristos	beqz	$7,.L_bn_add_words_return
449*4724848cSchristos
450*4724848cSchristos	lw	$14,2*4($5)
451*4724848cSchristos	lw	$10,2*4($6)
452*4724848cSchristos	addu	$10,$14
453*4724848cSchristos	sltu	$24,$10,$14
454*4724848cSchristos	addu	$14,$10,$2
455*4724848cSchristos	sltu	$2,$14,$10
456*4724848cSchristos	sw	$14,2*4($4)
457*4724848cSchristos	addu	$2,$24
458*4724848cSchristos
459*4724848cSchristos.L_bn_add_words_return:
460*4724848cSchristos	.set	noreorder
461*4724848cSchristos	jr	$31
462*4724848cSchristos	move	$4,$2
463*4724848cSchristos
464*4724848cSchristos.end	bn_add_words_internal
465*4724848cSchristos
466*4724848cSchristos.align	5
467*4724848cSchristos.globl	bn_sub_words
468*4724848cSchristos.ent	bn_sub_words
469*4724848cSchristosbn_sub_words:
470*4724848cSchristos	.set	noreorder
471*4724848cSchristos	bgtz	$7,bn_sub_words_internal
472*4724848cSchristos	move	$2,$0
473*4724848cSchristos	jr	$31
474*4724848cSchristos	move	$4,$0
475*4724848cSchristos.end	bn_sub_words
476*4724848cSchristos
477*4724848cSchristos.align	5
478*4724848cSchristos.ent	bn_sub_words_internal
479*4724848cSchristosbn_sub_words_internal:
480*4724848cSchristos	.set	reorder
481*4724848cSchristos	li	$3,-4
482*4724848cSchristos	and	$1,$7,$3
483*4724848cSchristos	beqz	$1,.L_bn_sub_words_tail
484*4724848cSchristos
485*4724848cSchristos.L_bn_sub_words_loop:
486*4724848cSchristos	lw	$12,0($5)
487*4724848cSchristos	lw	$8,0($6)
488*4724848cSchristos	subu	$7,4
489*4724848cSchristos	lw	$13,4($5)
490*4724848cSchristos	and	$1,$7,$3
491*4724848cSchristos	lw	$14,2*4($5)
492*4724848cSchristos	addu $6,4*4
493*4724848cSchristos	lw	$15,3*4($5)
494*4724848cSchristos	addu $4,4*4
495*4724848cSchristos	lw	$9,-3*4($6)
496*4724848cSchristos	addu $5,4*4
497*4724848cSchristos	lw	$10,-2*4($6)
498*4724848cSchristos	lw	$11,-4($6)
499*4724848cSchristos	sltu	$24,$12,$8
500*4724848cSchristos	subu	$8,$12,$8
501*4724848cSchristos	subu	$12,$8,$2
502*4724848cSchristos	sgtu	$2,$12,$8
503*4724848cSchristos	sw	$12,-4*4($4)
504*4724848cSchristos	addu	$2,$24
505*4724848cSchristos
506*4724848cSchristos	sltu	$25,$13,$9
507*4724848cSchristos	subu	$9,$13,$9
508*4724848cSchristos	subu	$13,$9,$2
509*4724848cSchristos	sgtu	$2,$13,$9
510*4724848cSchristos	sw	$13,-3*4($4)
511*4724848cSchristos	addu	$2,$25
512*4724848cSchristos
513*4724848cSchristos
514*4724848cSchristos	sltu	$24,$14,$10
515*4724848cSchristos	subu	$10,$14,$10
516*4724848cSchristos	subu	$14,$10,$2
517*4724848cSchristos	sgtu	$2,$14,$10
518*4724848cSchristos	sw	$14,-2*4($4)
519*4724848cSchristos	addu	$2,$24
520*4724848cSchristos
521*4724848cSchristos	sltu	$25,$15,$11
522*4724848cSchristos	subu	$11,$15,$11
523*4724848cSchristos	subu	$15,$11,$2
524*4724848cSchristos	sgtu	$2,$15,$11
525*4724848cSchristos	sw	$15,-4($4)
526*4724848cSchristos
527*4724848cSchristos	.set	noreorder
528*4724848cSchristos	bgtz	$1,.L_bn_sub_words_loop
529*4724848cSchristos	addu	$2,$25
530*4724848cSchristos
531*4724848cSchristos	beqz	$7,.L_bn_sub_words_return
532*4724848cSchristos	nop
533*4724848cSchristos
534*4724848cSchristos.L_bn_sub_words_tail:
535*4724848cSchristos	.set	reorder
536*4724848cSchristos	lw	$12,0($5)
537*4724848cSchristos	lw	$8,0($6)
538*4724848cSchristos	subu	$7,1
539*4724848cSchristos	sltu	$24,$12,$8
540*4724848cSchristos	subu	$8,$12,$8
541*4724848cSchristos	subu	$12,$8,$2
542*4724848cSchristos	sgtu	$2,$12,$8
543*4724848cSchristos	sw	$12,0($4)
544*4724848cSchristos	addu	$2,$24
545*4724848cSchristos	beqz	$7,.L_bn_sub_words_return
546*4724848cSchristos
547*4724848cSchristos	lw	$13,4($5)
548*4724848cSchristos	subu	$7,1
549*4724848cSchristos	lw	$9,4($6)
550*4724848cSchristos	sltu	$25,$13,$9
551*4724848cSchristos	subu	$9,$13,$9
552*4724848cSchristos	subu	$13,$9,$2
553*4724848cSchristos	sgtu	$2,$13,$9
554*4724848cSchristos	sw	$13,4($4)
555*4724848cSchristos	addu	$2,$25
556*4724848cSchristos	beqz	$7,.L_bn_sub_words_return
557*4724848cSchristos
558*4724848cSchristos	lw	$14,2*4($5)
559*4724848cSchristos	lw	$10,2*4($6)
560*4724848cSchristos	sltu	$24,$14,$10
561*4724848cSchristos	subu	$10,$14,$10
562*4724848cSchristos	subu	$14,$10,$2
563*4724848cSchristos	sgtu	$2,$14,$10
564*4724848cSchristos	sw	$14,2*4($4)
565*4724848cSchristos	addu	$2,$24
566*4724848cSchristos
567*4724848cSchristos.L_bn_sub_words_return:
568*4724848cSchristos	.set	noreorder
569*4724848cSchristos	jr	$31
570*4724848cSchristos	move	$4,$2
571*4724848cSchristos.end	bn_sub_words_internal
572*4724848cSchristos
573*4724848cSchristos#if 0
574*4724848cSchristos/*
575*4724848cSchristos * The bn_div_3_words entry point is re-used for constant-time interface.
576*4724848cSchristos * Implementation is retained as historical reference.
577*4724848cSchristos */
578*4724848cSchristos.align 5
579*4724848cSchristos.globl	bn_div_3_words
580*4724848cSchristos.ent	bn_div_3_words
581*4724848cSchristosbn_div_3_words:
582*4724848cSchristos	.set	noreorder
583*4724848cSchristos	move	$7,$4		# we know that bn_div_words does not
584*4724848cSchristos				# touch $7, $10, $11 and preserves $6
585*4724848cSchristos				# so that we can save two arguments
586*4724848cSchristos				# and return address in registers
587*4724848cSchristos				# instead of stack:-)
588*4724848cSchristos
589*4724848cSchristos	lw	$4,($7)
590*4724848cSchristos	move	$10,$5
591*4724848cSchristos	bne	$4,$6,bn_div_3_words_internal
592*4724848cSchristos	lw	$5,-4($7)
593*4724848cSchristos	li	$2,-1
594*4724848cSchristos	jr	$31
595*4724848cSchristos	move	$4,$2
596*4724848cSchristos.end	bn_div_3_words
597*4724848cSchristos
598*4724848cSchristos.align	5
599*4724848cSchristos.ent	bn_div_3_words_internal
600*4724848cSchristosbn_div_3_words_internal:
601*4724848cSchristos	.set	reorder
602*4724848cSchristos	move	$11,$31
603*4724848cSchristos	bal	bn_div_words_internal
604*4724848cSchristos	move	$31,$11
605*4724848cSchristos	multu	($10,$2)
606*4724848cSchristos	lw	$14,-2*4($7)
607*4724848cSchristos	move	$8,$0
608*4724848cSchristos	mfhi	($13,$10,$2)
609*4724848cSchristos	mflo	($12,$10,$2)
610*4724848cSchristos	sltu	$24,$13,$5
611*4724848cSchristos.L_bn_div_3_words_inner_loop:
612*4724848cSchristos	bnez	$24,.L_bn_div_3_words_inner_loop_done
613*4724848cSchristos	sgeu	$1,$14,$12
614*4724848cSchristos	seq	$25,$13,$5
615*4724848cSchristos	and	$1,$25
616*4724848cSchristos	sltu	$15,$12,$10
617*4724848cSchristos	addu	$5,$6
618*4724848cSchristos	subu	$13,$15
619*4724848cSchristos	subu	$12,$10
620*4724848cSchristos	sltu	$24,$13,$5
621*4724848cSchristos	sltu	$8,$5,$6
622*4724848cSchristos	or	$24,$8
623*4724848cSchristos	.set	noreorder
624*4724848cSchristos	beqz	$1,.L_bn_div_3_words_inner_loop
625*4724848cSchristos	subu	$2,1
626*4724848cSchristos	addu	$2,1
627*4724848cSchristos	.set	reorder
628*4724848cSchristos.L_bn_div_3_words_inner_loop_done:
629*4724848cSchristos	.set	noreorder
630*4724848cSchristos	jr	$31
631*4724848cSchristos	move	$4,$2
632*4724848cSchristos.end	bn_div_3_words_internal
633*4724848cSchristos#endif
634*4724848cSchristos
635*4724848cSchristos.align	5
636*4724848cSchristos.globl	bn_div_words
637*4724848cSchristos.ent	bn_div_words
638*4724848cSchristosbn_div_words:
639*4724848cSchristos	.set	noreorder
640*4724848cSchristos	bnez	$6,bn_div_words_internal
641*4724848cSchristos	li	$2,-1		# I would rather signal div-by-zero
642*4724848cSchristos				# which can be done with 'break 7'
643*4724848cSchristos	jr	$31
644*4724848cSchristos	move	$4,$2
645*4724848cSchristos.end	bn_div_words
646*4724848cSchristos
647*4724848cSchristos.align	5
648*4724848cSchristos.ent	bn_div_words_internal
649*4724848cSchristosbn_div_words_internal:
650*4724848cSchristos	move	$3,$0
651*4724848cSchristos	bltz	$6,.L_bn_div_words_body
652*4724848cSchristos	move	$25,$3
653*4724848cSchristos	sll	$6,1
654*4724848cSchristos	bgtz	$6,.-4
655*4724848cSchristos	addu	$25,1
656*4724848cSchristos
657*4724848cSchristos	.set	reorder
658*4724848cSchristos	negu	$13,$25
659*4724848cSchristos	li	$14,-1
660*4724848cSchristos	sll	$14,$13
661*4724848cSchristos	and	$14,$4
662*4724848cSchristos	srl	$1,$5,$13
663*4724848cSchristos	.set	noreorder
664*4724848cSchristos	beqz	$14,.+12
665*4724848cSchristos	nop
666*4724848cSchristos	break	6		# signal overflow
667*4724848cSchristos	.set	reorder
668*4724848cSchristos	sll	$4,$25
669*4724848cSchristos	sll	$5,$25
670*4724848cSchristos	or	$4,$1
671*4724848cSchristos.L_bn_div_words_body:
672*4724848cSchristos	srl	$3,$6,4*4	# bits
673*4724848cSchristos	sgeu	$1,$4,$6
674*4724848cSchristos	.set	noreorder
675*4724848cSchristos	beqz	$1,.+12
676*4724848cSchristos	nop
677*4724848cSchristos	subu	$4,$6
678*4724848cSchristos	.set	reorder
679*4724848cSchristos
680*4724848cSchristos	li	$8,-1
681*4724848cSchristos	srl	$9,$4,4*4	# bits
682*4724848cSchristos	srl	$8,4*4	# q=0xffffffff
683*4724848cSchristos	beq	$3,$9,.L_bn_div_words_skip_div1
684*4724848cSchristos	divu	($4,$3)
685*4724848cSchristos	mfqt	($8,$4,$3)
686*4724848cSchristos.L_bn_div_words_skip_div1:
687*4724848cSchristos	multu	($6,$8)
688*4724848cSchristos	sll	$15,$4,4*4	# bits
689*4724848cSchristos	srl	$1,$5,4*4	# bits
690*4724848cSchristos	or	$15,$1
691*4724848cSchristos	mflo	($12,$6,$8)
692*4724848cSchristos	mfhi	($13,$6,$8)
693*4724848cSchristos.L_bn_div_words_inner_loop1:
694*4724848cSchristos	sltu	$14,$15,$12
695*4724848cSchristos	seq	$24,$9,$13
696*4724848cSchristos	sltu	$1,$9,$13
697*4724848cSchristos	and	$14,$24
698*4724848cSchristos	sltu	$2,$12,$6
699*4724848cSchristos	or	$1,$14
700*4724848cSchristos	.set	noreorder
701*4724848cSchristos	beqz	$1,.L_bn_div_words_inner_loop1_done
702*4724848cSchristos	subu	$13,$2
703*4724848cSchristos	subu	$12,$6
704*4724848cSchristos	b	.L_bn_div_words_inner_loop1
705*4724848cSchristos	subu	$8,1
706*4724848cSchristos	.set	reorder
707*4724848cSchristos.L_bn_div_words_inner_loop1_done:
708*4724848cSchristos
709*4724848cSchristos	sll	$5,4*4	# bits
710*4724848cSchristos	subu	$4,$15,$12
711*4724848cSchristos	sll	$2,$8,4*4	# bits
712*4724848cSchristos
713*4724848cSchristos	li	$8,-1
714*4724848cSchristos	srl	$9,$4,4*4	# bits
715*4724848cSchristos	srl	$8,4*4	# q=0xffffffff
716*4724848cSchristos	beq	$3,$9,.L_bn_div_words_skip_div2
717*4724848cSchristos	divu	($4,$3)
718*4724848cSchristos	mfqt	($8,$4,$3)
719*4724848cSchristos.L_bn_div_words_skip_div2:
720*4724848cSchristos	multu	($6,$8)
721*4724848cSchristos	sll	$15,$4,4*4	# bits
722*4724848cSchristos	srl	$1,$5,4*4	# bits
723*4724848cSchristos	or	$15,$1
724*4724848cSchristos	mflo	($12,$6,$8)
725*4724848cSchristos	mfhi	($13,$6,$8)
726*4724848cSchristos.L_bn_div_words_inner_loop2:
727*4724848cSchristos	sltu	$14,$15,$12
728*4724848cSchristos	seq	$24,$9,$13
729*4724848cSchristos	sltu	$1,$9,$13
730*4724848cSchristos	and	$14,$24
731*4724848cSchristos	sltu	$3,$12,$6
732*4724848cSchristos	or	$1,$14
733*4724848cSchristos	.set	noreorder
734*4724848cSchristos	beqz	$1,.L_bn_div_words_inner_loop2_done
735*4724848cSchristos	subu	$13,$3
736*4724848cSchristos	subu	$12,$6
737*4724848cSchristos	b	.L_bn_div_words_inner_loop2
738*4724848cSchristos	subu	$8,1
739*4724848cSchristos	.set	reorder
740*4724848cSchristos.L_bn_div_words_inner_loop2_done:
741*4724848cSchristos
742*4724848cSchristos	subu	$4,$15,$12
743*4724848cSchristos	or	$2,$8
744*4724848cSchristos	srl	$3,$4,$25	# $3 contains remainder if anybody wants it
745*4724848cSchristos	srl	$6,$25		# restore $6
746*4724848cSchristos
747*4724848cSchristos	.set	noreorder
748*4724848cSchristos	move	$5,$3
749*4724848cSchristos	jr	$31
750*4724848cSchristos	move	$4,$2
751*4724848cSchristos.end	bn_div_words_internal
752*4724848cSchristos
753*4724848cSchristos.align	5
754*4724848cSchristos.globl	bn_mul_comba8
755*4724848cSchristos.ent	bn_mul_comba8
756*4724848cSchristosbn_mul_comba8:
757*4724848cSchristos	.set	noreorder
758*4724848cSchristos	.frame	$29,6*4,$31
759*4724848cSchristos	.mask	0x003f0000,-4
760*4724848cSchristos	subu $29,6*4
761*4724848cSchristos	sw	$21,5*4($29)
762*4724848cSchristos	sw	$20,4*4($29)
763*4724848cSchristos	sw	$19,3*4($29)
764*4724848cSchristos	sw	$18,2*4($29)
765*4724848cSchristos	sw	$17,1*4($29)
766*4724848cSchristos	sw	$16,0*4($29)
767*4724848cSchristos
768*4724848cSchristos	.set	reorder
769*4724848cSchristos	lw	$12,0($5)	# If compiled with -mips3 option on
770*4724848cSchristos				# R5000 box assembler barks on this
771*4724848cSchristos				# 1ine with "should not have mult/div
772*4724848cSchristos				# as last instruction in bb (R10K
773*4724848cSchristos				# bug)" warning. If anybody out there
774*4724848cSchristos				# has a clue about how to circumvent
775*4724848cSchristos				# this do send me a note.
776*4724848cSchristos				#		<appro@fy.chalmers.se>
777*4724848cSchristos
778*4724848cSchristos	lw	$8,0($6)
779*4724848cSchristos	lw	$13,4($5)
780*4724848cSchristos	lw	$14,2*4($5)
781*4724848cSchristos	multu	($12,$8)		# mul_add_c(a[0],b[0],c1,c2,c3);
782*4724848cSchristos	lw	$15,3*4($5)
783*4724848cSchristos	lw	$9,4($6)
784*4724848cSchristos	lw	$10,2*4($6)
785*4724848cSchristos	lw	$11,3*4($6)
786*4724848cSchristos	mflo	($2,$12,$8)
787*4724848cSchristos	mfhi	($3,$12,$8)
788*4724848cSchristos
789*4724848cSchristos	lw	$16,4*4($5)
790*4724848cSchristos	lw	$18,5*4($5)
791*4724848cSchristos	multu	($12,$9)		# mul_add_c(a[0],b[1],c2,c3,c1);
792*4724848cSchristos	lw	$20,6*4($5)
793*4724848cSchristos	lw	$5,7*4($5)
794*4724848cSchristos	lw	$17,4*4($6)
795*4724848cSchristos	lw	$19,5*4($6)
796*4724848cSchristos	mflo	($24,$12,$9)
797*4724848cSchristos	mfhi	($25,$12,$9)
798*4724848cSchristos	addu	$3,$24
799*4724848cSchristos	sltu	$1,$3,$24
800*4724848cSchristos	multu	($13,$8)		# mul_add_c(a[1],b[0],c2,c3,c1);
801*4724848cSchristos	addu	$7,$25,$1
802*4724848cSchristos	lw	$21,6*4($6)
803*4724848cSchristos	lw	$6,7*4($6)
804*4724848cSchristos	sw	$2,0($4)	# r[0]=c1;
805*4724848cSchristos	mflo	($24,$13,$8)
806*4724848cSchristos	mfhi	($25,$13,$8)
807*4724848cSchristos	addu	$3,$24
808*4724848cSchristos	sltu	$1,$3,$24
809*4724848cSchristos	 multu	($14,$8)		# mul_add_c(a[2],b[0],c3,c1,c2);
810*4724848cSchristos	addu	$25,$1
811*4724848cSchristos	addu	$7,$25
812*4724848cSchristos	sltu	$2,$7,$25
813*4724848cSchristos	sw	$3,4($4)	# r[1]=c2;
814*4724848cSchristos
815*4724848cSchristos	mflo	($24,$14,$8)
816*4724848cSchristos	mfhi	($25,$14,$8)
817*4724848cSchristos	addu	$7,$24
818*4724848cSchristos	sltu	$1,$7,$24
819*4724848cSchristos	multu	($13,$9)		# mul_add_c(a[1],b[1],c3,c1,c2);
820*4724848cSchristos	addu	$25,$1
821*4724848cSchristos	addu	$2,$25
822*4724848cSchristos	mflo	($24,$13,$9)
823*4724848cSchristos	mfhi	($25,$13,$9)
824*4724848cSchristos	addu	$7,$24
825*4724848cSchristos	sltu	$1,$7,$24
826*4724848cSchristos	multu	($12,$10)		# mul_add_c(a[0],b[2],c3,c1,c2);
827*4724848cSchristos	addu	$25,$1
828*4724848cSchristos	addu	$2,$25
829*4724848cSchristos	sltu	$3,$2,$25
830*4724848cSchristos	mflo	($24,$12,$10)
831*4724848cSchristos	mfhi	($25,$12,$10)
832*4724848cSchristos	addu	$7,$24
833*4724848cSchristos	sltu	$1,$7,$24
834*4724848cSchristos	 multu	($12,$11)		# mul_add_c(a[0],b[3],c1,c2,c3);
835*4724848cSchristos	addu	$25,$1
836*4724848cSchristos	addu	$2,$25
837*4724848cSchristos	sltu	$1,$2,$25
838*4724848cSchristos	addu	$3,$1
839*4724848cSchristos	sw	$7,2*4($4)	# r[2]=c3;
840*4724848cSchristos
841*4724848cSchristos	mflo	($24,$12,$11)
842*4724848cSchristos	mfhi	($25,$12,$11)
843*4724848cSchristos	addu	$2,$24
844*4724848cSchristos	sltu	$1,$2,$24
845*4724848cSchristos	multu	($13,$10)		# mul_add_c(a[1],b[2],c1,c2,c3);
846*4724848cSchristos	addu	$25,$1
847*4724848cSchristos	addu	$3,$25
848*4724848cSchristos	sltu	$7,$3,$25
849*4724848cSchristos	mflo	($24,$13,$10)
850*4724848cSchristos	mfhi	($25,$13,$10)
851*4724848cSchristos	addu	$2,$24
852*4724848cSchristos	sltu	$1,$2,$24
853*4724848cSchristos	multu	($14,$9)		# mul_add_c(a[2],b[1],c1,c2,c3);
854*4724848cSchristos	addu	$25,$1
855*4724848cSchristos	addu	$3,$25
856*4724848cSchristos	sltu	$1,$3,$25
857*4724848cSchristos	addu	$7,$1
858*4724848cSchristos	mflo	($24,$14,$9)
859*4724848cSchristos	mfhi	($25,$14,$9)
860*4724848cSchristos	addu	$2,$24
861*4724848cSchristos	sltu	$1,$2,$24
862*4724848cSchristos	multu	($15,$8)		# mul_add_c(a[3],b[0],c1,c2,c3);
863*4724848cSchristos	addu	$25,$1
864*4724848cSchristos	addu	$3,$25
865*4724848cSchristos	sltu	$1,$3,$25
866*4724848cSchristos	addu	$7,$1
867*4724848cSchristos	mflo	($24,$15,$8)
868*4724848cSchristos	mfhi	($25,$15,$8)
869*4724848cSchristos	addu	$2,$24
870*4724848cSchristos	sltu	$1,$2,$24
871*4724848cSchristos	 multu	($16,$8)		# mul_add_c(a[4],b[0],c2,c3,c1);
872*4724848cSchristos	addu	$25,$1
873*4724848cSchristos	addu	$3,$25
874*4724848cSchristos	sltu	$1,$3,$25
875*4724848cSchristos	addu	$7,$1
876*4724848cSchristos	sw	$2,3*4($4)	# r[3]=c1;
877*4724848cSchristos
878*4724848cSchristos	mflo	($24,$16,$8)
879*4724848cSchristos	mfhi	($25,$16,$8)
880*4724848cSchristos	addu	$3,$24
881*4724848cSchristos	sltu	$1,$3,$24
882*4724848cSchristos	multu	($15,$9)		# mul_add_c(a[3],b[1],c2,c3,c1);
883*4724848cSchristos	addu	$25,$1
884*4724848cSchristos	addu	$7,$25
885*4724848cSchristos	sltu	$2,$7,$25
886*4724848cSchristos	mflo	($24,$15,$9)
887*4724848cSchristos	mfhi	($25,$15,$9)
888*4724848cSchristos	addu	$3,$24
889*4724848cSchristos	sltu	$1,$3,$24
890*4724848cSchristos	multu	($14,$10)		# mul_add_c(a[2],b[2],c2,c3,c1);
891*4724848cSchristos	addu	$25,$1
892*4724848cSchristos	addu	$7,$25
893*4724848cSchristos	sltu	$1,$7,$25
894*4724848cSchristos	addu	$2,$1
895*4724848cSchristos	mflo	($24,$14,$10)
896*4724848cSchristos	mfhi	($25,$14,$10)
897*4724848cSchristos	addu	$3,$24
898*4724848cSchristos	sltu	$1,$3,$24
899*4724848cSchristos	multu	($13,$11)		# mul_add_c(a[1],b[3],c2,c3,c1);
900*4724848cSchristos	addu	$25,$1
901*4724848cSchristos	addu	$7,$25
902*4724848cSchristos	sltu	$1,$7,$25
903*4724848cSchristos	addu	$2,$1
904*4724848cSchristos	mflo	($24,$13,$11)
905*4724848cSchristos	mfhi	($25,$13,$11)
906*4724848cSchristos	addu	$3,$24
907*4724848cSchristos	sltu	$1,$3,$24
908*4724848cSchristos	multu	($12,$17)		# mul_add_c(a[0],b[4],c2,c3,c1);
909*4724848cSchristos	addu	$25,$1
910*4724848cSchristos	addu	$7,$25
911*4724848cSchristos	sltu	$1,$7,$25
912*4724848cSchristos	addu	$2,$1
913*4724848cSchristos	mflo	($24,$12,$17)
914*4724848cSchristos	mfhi	($25,$12,$17)
915*4724848cSchristos	addu	$3,$24
916*4724848cSchristos	sltu	$1,$3,$24
917*4724848cSchristos	 multu	($12,$19)		# mul_add_c(a[0],b[5],c3,c1,c2);
918*4724848cSchristos	addu	$25,$1
919*4724848cSchristos	addu	$7,$25
920*4724848cSchristos	sltu	$1,$7,$25
921*4724848cSchristos	addu	$2,$1
922*4724848cSchristos	sw	$3,4*4($4)	# r[4]=c2;
923*4724848cSchristos
924*4724848cSchristos	mflo	($24,$12,$19)
925*4724848cSchristos	mfhi	($25,$12,$19)
926*4724848cSchristos	addu	$7,$24
927*4724848cSchristos	sltu	$1,$7,$24
928*4724848cSchristos	multu	($13,$17)		# mul_add_c(a[1],b[4],c3,c1,c2);
929*4724848cSchristos	addu	$25,$1
930*4724848cSchristos	addu	$2,$25
931*4724848cSchristos	sltu	$3,$2,$25
932*4724848cSchristos	mflo	($24,$13,$17)
933*4724848cSchristos	mfhi	($25,$13,$17)
934*4724848cSchristos	addu	$7,$24
935*4724848cSchristos	sltu	$1,$7,$24
936*4724848cSchristos	multu	($14,$11)		# mul_add_c(a[2],b[3],c3,c1,c2);
937*4724848cSchristos	addu	$25,$1
938*4724848cSchristos	addu	$2,$25
939*4724848cSchristos	sltu	$1,$2,$25
940*4724848cSchristos	addu	$3,$1
941*4724848cSchristos	mflo	($24,$14,$11)
942*4724848cSchristos	mfhi	($25,$14,$11)
943*4724848cSchristos	addu	$7,$24
944*4724848cSchristos	sltu	$1,$7,$24
945*4724848cSchristos	multu	($15,$10)		# mul_add_c(a[3],b[2],c3,c1,c2);
946*4724848cSchristos	addu	$25,$1
947*4724848cSchristos	addu	$2,$25
948*4724848cSchristos	sltu	$1,$2,$25
949*4724848cSchristos	addu	$3,$1
950*4724848cSchristos	mflo	($24,$15,$10)
951*4724848cSchristos	mfhi	($25,$15,$10)
952*4724848cSchristos	addu	$7,$24
953*4724848cSchristos	sltu	$1,$7,$24
954*4724848cSchristos	multu	($16,$9)		# mul_add_c(a[4],b[1],c3,c1,c2);
955*4724848cSchristos	addu	$25,$1
956*4724848cSchristos	addu	$2,$25
957*4724848cSchristos	sltu	$1,$2,$25
958*4724848cSchristos	addu	$3,$1
959*4724848cSchristos	mflo	($24,$16,$9)
960*4724848cSchristos	mfhi	($25,$16,$9)
961*4724848cSchristos	addu	$7,$24
962*4724848cSchristos	sltu	$1,$7,$24
963*4724848cSchristos	multu	($18,$8)		# mul_add_c(a[5],b[0],c3,c1,c2);
964*4724848cSchristos	addu	$25,$1
965*4724848cSchristos	addu	$2,$25
966*4724848cSchristos	sltu	$1,$2,$25
967*4724848cSchristos	addu	$3,$1
968*4724848cSchristos	mflo	($24,$18,$8)
969*4724848cSchristos	mfhi	($25,$18,$8)
970*4724848cSchristos	addu	$7,$24
971*4724848cSchristos	sltu	$1,$7,$24
972*4724848cSchristos	 multu	($20,$8)		# mul_add_c(a[6],b[0],c1,c2,c3);
973*4724848cSchristos	addu	$25,$1
974*4724848cSchristos	addu	$2,$25
975*4724848cSchristos	sltu	$1,$2,$25
976*4724848cSchristos	addu	$3,$1
977*4724848cSchristos	sw	$7,5*4($4)	# r[5]=c3;
978*4724848cSchristos
979*4724848cSchristos	mflo	($24,$20,$8)
980*4724848cSchristos	mfhi	($25,$20,$8)
981*4724848cSchristos	addu	$2,$24
982*4724848cSchristos	sltu	$1,$2,$24
983*4724848cSchristos	multu	($18,$9)		# mul_add_c(a[5],b[1],c1,c2,c3);
984*4724848cSchristos	addu	$25,$1
985*4724848cSchristos	addu	$3,$25
986*4724848cSchristos	sltu	$7,$3,$25
987*4724848cSchristos	mflo	($24,$18,$9)
988*4724848cSchristos	mfhi	($25,$18,$9)
989*4724848cSchristos	addu	$2,$24
990*4724848cSchristos	sltu	$1,$2,$24
991*4724848cSchristos	multu	($16,$10)		# mul_add_c(a[4],b[2],c1,c2,c3);
992*4724848cSchristos	addu	$25,$1
993*4724848cSchristos	addu	$3,$25
994*4724848cSchristos	sltu	$1,$3,$25
995*4724848cSchristos	addu	$7,$1
996*4724848cSchristos	mflo	($24,$16,$10)
997*4724848cSchristos	mfhi	($25,$16,$10)
998*4724848cSchristos	addu	$2,$24
999*4724848cSchristos	sltu	$1,$2,$24
1000*4724848cSchristos	multu	($15,$11)		# mul_add_c(a[3],b[3],c1,c2,c3);
1001*4724848cSchristos	addu	$25,$1
1002*4724848cSchristos	addu	$3,$25
1003*4724848cSchristos	sltu	$1,$3,$25
1004*4724848cSchristos	addu	$7,$1
1005*4724848cSchristos	mflo	($24,$15,$11)
1006*4724848cSchristos	mfhi	($25,$15,$11)
1007*4724848cSchristos	addu	$2,$24
1008*4724848cSchristos	sltu	$1,$2,$24
1009*4724848cSchristos	multu	($14,$17)		# mul_add_c(a[2],b[4],c1,c2,c3);
1010*4724848cSchristos	addu	$25,$1
1011*4724848cSchristos	addu	$3,$25
1012*4724848cSchristos	sltu	$1,$3,$25
1013*4724848cSchristos	addu	$7,$1
1014*4724848cSchristos	mflo	($24,$14,$17)
1015*4724848cSchristos	mfhi	($25,$14,$17)
1016*4724848cSchristos	addu	$2,$24
1017*4724848cSchristos	sltu	$1,$2,$24
1018*4724848cSchristos	multu	($13,$19)		# mul_add_c(a[1],b[5],c1,c2,c3);
1019*4724848cSchristos	addu	$25,$1
1020*4724848cSchristos	addu	$3,$25
1021*4724848cSchristos	sltu	$1,$3,$25
1022*4724848cSchristos	addu	$7,$1
1023*4724848cSchristos	mflo	($24,$13,$19)
1024*4724848cSchristos	mfhi	($25,$13,$19)
1025*4724848cSchristos	addu	$2,$24
1026*4724848cSchristos	sltu	$1,$2,$24
1027*4724848cSchristos	multu	($12,$21)		# mul_add_c(a[0],b[6],c1,c2,c3);
1028*4724848cSchristos	addu	$25,$1
1029*4724848cSchristos	addu	$3,$25
1030*4724848cSchristos	sltu	$1,$3,$25
1031*4724848cSchristos	addu	$7,$1
1032*4724848cSchristos	mflo	($24,$12,$21)
1033*4724848cSchristos	mfhi	($25,$12,$21)
1034*4724848cSchristos	addu	$2,$24
1035*4724848cSchristos	sltu	$1,$2,$24
1036*4724848cSchristos	 multu	($12,$6)		# mul_add_c(a[0],b[7],c2,c3,c1);
1037*4724848cSchristos	addu	$25,$1
1038*4724848cSchristos	addu	$3,$25
1039*4724848cSchristos	sltu	$1,$3,$25
1040*4724848cSchristos	addu	$7,$1
1041*4724848cSchristos	sw	$2,6*4($4)	# r[6]=c1;
1042*4724848cSchristos
1043*4724848cSchristos	mflo	($24,$12,$6)
1044*4724848cSchristos	mfhi	($25,$12,$6)
1045*4724848cSchristos	addu	$3,$24
1046*4724848cSchristos	sltu	$1,$3,$24
1047*4724848cSchristos	multu	($13,$21)		# mul_add_c(a[1],b[6],c2,c3,c1);
1048*4724848cSchristos	addu	$25,$1
1049*4724848cSchristos	addu	$7,$25
1050*4724848cSchristos	sltu	$2,$7,$25
1051*4724848cSchristos	mflo	($24,$13,$21)
1052*4724848cSchristos	mfhi	($25,$13,$21)
1053*4724848cSchristos	addu	$3,$24
1054*4724848cSchristos	sltu	$1,$3,$24
1055*4724848cSchristos	multu	($14,$19)		# mul_add_c(a[2],b[5],c2,c3,c1);
1056*4724848cSchristos	addu	$25,$1
1057*4724848cSchristos	addu	$7,$25
1058*4724848cSchristos	sltu	$1,$7,$25
1059*4724848cSchristos	addu	$2,$1
1060*4724848cSchristos	mflo	($24,$14,$19)
1061*4724848cSchristos	mfhi	($25,$14,$19)
1062*4724848cSchristos	addu	$3,$24
1063*4724848cSchristos	sltu	$1,$3,$24
1064*4724848cSchristos	multu	($15,$17)		# mul_add_c(a[3],b[4],c2,c3,c1);
1065*4724848cSchristos	addu	$25,$1
1066*4724848cSchristos	addu	$7,$25
1067*4724848cSchristos	sltu	$1,$7,$25
1068*4724848cSchristos	addu	$2,$1
1069*4724848cSchristos	mflo	($24,$15,$17)
1070*4724848cSchristos	mfhi	($25,$15,$17)
1071*4724848cSchristos	addu	$3,$24
1072*4724848cSchristos	sltu	$1,$3,$24
1073*4724848cSchristos	multu	($16,$11)		# mul_add_c(a[4],b[3],c2,c3,c1);
1074*4724848cSchristos	addu	$25,$1
1075*4724848cSchristos	addu	$7,$25
1076*4724848cSchristos	sltu	$1,$7,$25
1077*4724848cSchristos	addu	$2,$1
1078*4724848cSchristos	mflo	($24,$16,$11)
1079*4724848cSchristos	mfhi	($25,$16,$11)
1080*4724848cSchristos	addu	$3,$24
1081*4724848cSchristos	sltu	$1,$3,$24
1082*4724848cSchristos	multu	($18,$10)		# mul_add_c(a[5],b[2],c2,c3,c1);
1083*4724848cSchristos	addu	$25,$1
1084*4724848cSchristos	addu	$7,$25
1085*4724848cSchristos	sltu	$1,$7,$25
1086*4724848cSchristos	addu	$2,$1
1087*4724848cSchristos	mflo	($24,$18,$10)
1088*4724848cSchristos	mfhi	($25,$18,$10)
1089*4724848cSchristos	addu	$3,$24
1090*4724848cSchristos	sltu	$1,$3,$24
1091*4724848cSchristos	multu	($20,$9)		# mul_add_c(a[6],b[1],c2,c3,c1);
1092*4724848cSchristos	addu	$25,$1
1093*4724848cSchristos	addu	$7,$25
1094*4724848cSchristos	sltu	$1,$7,$25
1095*4724848cSchristos	addu	$2,$1
1096*4724848cSchristos	mflo	($24,$20,$9)
1097*4724848cSchristos	mfhi	($25,$20,$9)
1098*4724848cSchristos	addu	$3,$24
1099*4724848cSchristos	sltu	$1,$3,$24
1100*4724848cSchristos	multu	($5,$8)		# mul_add_c(a[7],b[0],c2,c3,c1);
1101*4724848cSchristos	addu	$25,$1
1102*4724848cSchristos	addu	$7,$25
1103*4724848cSchristos	sltu	$1,$7,$25
1104*4724848cSchristos	addu	$2,$1
1105*4724848cSchristos	mflo	($24,$5,$8)
1106*4724848cSchristos	mfhi	($25,$5,$8)
1107*4724848cSchristos	addu	$3,$24
1108*4724848cSchristos	sltu	$1,$3,$24
1109*4724848cSchristos	 multu	($5,$9)		# mul_add_c(a[7],b[1],c3,c1,c2);
1110*4724848cSchristos	addu	$25,$1
1111*4724848cSchristos	addu	$7,$25
1112*4724848cSchristos	sltu	$1,$7,$25
1113*4724848cSchristos	addu	$2,$1
1114*4724848cSchristos	sw	$3,7*4($4)	# r[7]=c2;
1115*4724848cSchristos
1116*4724848cSchristos	mflo	($24,$5,$9)
1117*4724848cSchristos	mfhi	($25,$5,$9)
1118*4724848cSchristos	addu	$7,$24
1119*4724848cSchristos	sltu	$1,$7,$24
1120*4724848cSchristos	multu	($20,$10)		# mul_add_c(a[6],b[2],c3,c1,c2);
1121*4724848cSchristos	addu	$25,$1
1122*4724848cSchristos	addu	$2,$25
1123*4724848cSchristos	sltu	$3,$2,$25
1124*4724848cSchristos	mflo	($24,$20,$10)
1125*4724848cSchristos	mfhi	($25,$20,$10)
1126*4724848cSchristos	addu	$7,$24
1127*4724848cSchristos	sltu	$1,$7,$24
1128*4724848cSchristos	multu	($18,$11)		# mul_add_c(a[5],b[3],c3,c1,c2);
1129*4724848cSchristos	addu	$25,$1
1130*4724848cSchristos	addu	$2,$25
1131*4724848cSchristos	sltu	$1,$2,$25
1132*4724848cSchristos	addu	$3,$1
1133*4724848cSchristos	mflo	($24,$18,$11)
1134*4724848cSchristos	mfhi	($25,$18,$11)
1135*4724848cSchristos	addu	$7,$24
1136*4724848cSchristos	sltu	$1,$7,$24
1137*4724848cSchristos	multu	($16,$17)		# mul_add_c(a[4],b[4],c3,c1,c2);
1138*4724848cSchristos	addu	$25,$1
1139*4724848cSchristos	addu	$2,$25
1140*4724848cSchristos	sltu	$1,$2,$25
1141*4724848cSchristos	addu	$3,$1
1142*4724848cSchristos	mflo	($24,$16,$17)
1143*4724848cSchristos	mfhi	($25,$16,$17)
1144*4724848cSchristos	addu	$7,$24
1145*4724848cSchristos	sltu	$1,$7,$24
1146*4724848cSchristos	multu	($15,$19)		# mul_add_c(a[3],b[5],c3,c1,c2);
1147*4724848cSchristos	addu	$25,$1
1148*4724848cSchristos	addu	$2,$25
1149*4724848cSchristos	sltu	$1,$2,$25
1150*4724848cSchristos	addu	$3,$1
1151*4724848cSchristos	mflo	($24,$15,$19)
1152*4724848cSchristos	mfhi	($25,$15,$19)
1153*4724848cSchristos	addu	$7,$24
1154*4724848cSchristos	sltu	$1,$7,$24
1155*4724848cSchristos	multu	($14,$21)		# mul_add_c(a[2],b[6],c3,c1,c2);
1156*4724848cSchristos	addu	$25,$1
1157*4724848cSchristos	addu	$2,$25
1158*4724848cSchristos	sltu	$1,$2,$25
1159*4724848cSchristos	addu	$3,$1
1160*4724848cSchristos	mflo	($24,$14,$21)
1161*4724848cSchristos	mfhi	($25,$14,$21)
1162*4724848cSchristos	addu	$7,$24
1163*4724848cSchristos	sltu	$1,$7,$24
1164*4724848cSchristos	multu	($13,$6)		# mul_add_c(a[1],b[7],c3,c1,c2);
1165*4724848cSchristos	addu	$25,$1
1166*4724848cSchristos	addu	$2,$25
1167*4724848cSchristos	sltu	$1,$2,$25
1168*4724848cSchristos	addu	$3,$1
1169*4724848cSchristos	mflo	($24,$13,$6)
1170*4724848cSchristos	mfhi	($25,$13,$6)
1171*4724848cSchristos	addu	$7,$24
1172*4724848cSchristos	sltu	$1,$7,$24
1173*4724848cSchristos	 multu	($14,$6)		# mul_add_c(a[2],b[7],c1,c2,c3);
1174*4724848cSchristos	addu	$25,$1
1175*4724848cSchristos	addu	$2,$25
1176*4724848cSchristos	sltu	$1,$2,$25
1177*4724848cSchristos	addu	$3,$1
1178*4724848cSchristos	sw	$7,8*4($4)	# r[8]=c3;
1179*4724848cSchristos
1180*4724848cSchristos	mflo	($24,$14,$6)
1181*4724848cSchristos	mfhi	($25,$14,$6)
1182*4724848cSchristos	addu	$2,$24
1183*4724848cSchristos	sltu	$1,$2,$24
1184*4724848cSchristos	multu	($15,$21)		# mul_add_c(a[3],b[6],c1,c2,c3);
1185*4724848cSchristos	addu	$25,$1
1186*4724848cSchristos	addu	$3,$25
1187*4724848cSchristos	sltu	$7,$3,$25
1188*4724848cSchristos	mflo	($24,$15,$21)
1189*4724848cSchristos	mfhi	($25,$15,$21)
1190*4724848cSchristos	addu	$2,$24
1191*4724848cSchristos	sltu	$1,$2,$24
1192*4724848cSchristos	multu	($16,$19)		# mul_add_c(a[4],b[5],c1,c2,c3);
1193*4724848cSchristos	addu	$25,$1
1194*4724848cSchristos	addu	$3,$25
1195*4724848cSchristos	sltu	$1,$3,$25
1196*4724848cSchristos	addu	$7,$1
1197*4724848cSchristos	mflo	($24,$16,$19)
1198*4724848cSchristos	mfhi	($25,$16,$19)
1199*4724848cSchristos	addu	$2,$24
1200*4724848cSchristos	sltu	$1,$2,$24
1201*4724848cSchristos	multu	($18,$17)		# mul_add_c(a[5],b[4],c1,c2,c3);
1202*4724848cSchristos	addu	$25,$1
1203*4724848cSchristos	addu	$3,$25
1204*4724848cSchristos	sltu	$1,$3,$25
1205*4724848cSchristos	addu	$7,$1
1206*4724848cSchristos	mflo	($24,$18,$17)
1207*4724848cSchristos	mfhi	($25,$18,$17)
1208*4724848cSchristos	addu	$2,$24
1209*4724848cSchristos	sltu	$1,$2,$24
1210*4724848cSchristos	multu	($20,$11)		# mul_add_c(a[6],b[3],c1,c2,c3);
1211*4724848cSchristos	addu	$25,$1
1212*4724848cSchristos	addu	$3,$25
1213*4724848cSchristos	sltu	$1,$3,$25
1214*4724848cSchristos	addu	$7,$1
1215*4724848cSchristos	mflo	($24,$20,$11)
1216*4724848cSchristos	mfhi	($25,$20,$11)
1217*4724848cSchristos	addu	$2,$24
1218*4724848cSchristos	sltu	$1,$2,$24
1219*4724848cSchristos	multu	($5,$10)		# mul_add_c(a[7],b[2],c1,c2,c3);
1220*4724848cSchristos	addu	$25,$1
1221*4724848cSchristos	addu	$3,$25
1222*4724848cSchristos	sltu	$1,$3,$25
1223*4724848cSchristos	addu	$7,$1
1224*4724848cSchristos	mflo	($24,$5,$10)
1225*4724848cSchristos	mfhi	($25,$5,$10)
1226*4724848cSchristos	addu	$2,$24
1227*4724848cSchristos	sltu	$1,$2,$24
1228*4724848cSchristos	 multu	($5,$11)		# mul_add_c(a[7],b[3],c2,c3,c1);
1229*4724848cSchristos	addu	$25,$1
1230*4724848cSchristos	addu	$3,$25
1231*4724848cSchristos	sltu	$1,$3,$25
1232*4724848cSchristos	addu	$7,$1
1233*4724848cSchristos	sw	$2,9*4($4)	# r[9]=c1;
1234*4724848cSchristos
1235*4724848cSchristos	mflo	($24,$5,$11)
1236*4724848cSchristos	mfhi	($25,$5,$11)
1237*4724848cSchristos	addu	$3,$24
1238*4724848cSchristos	sltu	$1,$3,$24
1239*4724848cSchristos	multu	($20,$17)		# mul_add_c(a[6],b[4],c2,c3,c1);
1240*4724848cSchristos	addu	$25,$1
1241*4724848cSchristos	addu	$7,$25
1242*4724848cSchristos	sltu	$2,$7,$25
1243*4724848cSchristos	mflo	($24,$20,$17)
1244*4724848cSchristos	mfhi	($25,$20,$17)
1245*4724848cSchristos	addu	$3,$24
1246*4724848cSchristos	sltu	$1,$3,$24
1247*4724848cSchristos	multu	($18,$19)		# mul_add_c(a[5],b[5],c2,c3,c1);
1248*4724848cSchristos	addu	$25,$1
1249*4724848cSchristos	addu	$7,$25
1250*4724848cSchristos	sltu	$1,$7,$25
1251*4724848cSchristos	addu	$2,$1
1252*4724848cSchristos	mflo	($24,$18,$19)
1253*4724848cSchristos	mfhi	($25,$18,$19)
1254*4724848cSchristos	addu	$3,$24
1255*4724848cSchristos	sltu	$1,$3,$24
1256*4724848cSchristos	multu	($16,$21)		# mul_add_c(a[4],b[6],c2,c3,c1);
1257*4724848cSchristos	addu	$25,$1
1258*4724848cSchristos	addu	$7,$25
1259*4724848cSchristos	sltu	$1,$7,$25
1260*4724848cSchristos	addu	$2,$1
1261*4724848cSchristos	mflo	($24,$16,$21)
1262*4724848cSchristos	mfhi	($25,$16,$21)
1263*4724848cSchristos	addu	$3,$24
1264*4724848cSchristos	sltu	$1,$3,$24
1265*4724848cSchristos	multu	($15,$6)		# mul_add_c(a[3],b[7],c2,c3,c1);
1266*4724848cSchristos	addu	$25,$1
1267*4724848cSchristos	addu	$7,$25
1268*4724848cSchristos	sltu	$1,$7,$25
1269*4724848cSchristos	addu	$2,$1
1270*4724848cSchristos	mflo	($24,$15,$6)
1271*4724848cSchristos	mfhi	($25,$15,$6)
1272*4724848cSchristos	addu	$3,$24
1273*4724848cSchristos	sltu	$1,$3,$24
1274*4724848cSchristos	multu	($16,$6)		# mul_add_c(a[4],b[7],c3,c1,c2);
1275*4724848cSchristos	addu	$25,$1
1276*4724848cSchristos	addu	$7,$25
1277*4724848cSchristos	sltu	$1,$7,$25
1278*4724848cSchristos	addu	$2,$1
1279*4724848cSchristos	sw	$3,10*4($4)	# r[10]=c2;
1280*4724848cSchristos
1281*4724848cSchristos	mflo	($24,$16,$6)
1282*4724848cSchristos	mfhi	($25,$16,$6)
1283*4724848cSchristos	addu	$7,$24
1284*4724848cSchristos	sltu	$1,$7,$24
1285*4724848cSchristos	multu	($18,$21)		# mul_add_c(a[5],b[6],c3,c1,c2);
1286*4724848cSchristos	addu	$25,$1
1287*4724848cSchristos	addu	$2,$25
1288*4724848cSchristos	sltu	$3,$2,$25
1289*4724848cSchristos	mflo	($24,$18,$21)
1290*4724848cSchristos	mfhi	($25,$18,$21)
1291*4724848cSchristos	addu	$7,$24
1292*4724848cSchristos	sltu	$1,$7,$24
1293*4724848cSchristos	multu	($20,$19)		# mul_add_c(a[6],b[5],c3,c1,c2);
1294*4724848cSchristos	addu	$25,$1
1295*4724848cSchristos	addu	$2,$25
1296*4724848cSchristos	sltu	$1,$2,$25
1297*4724848cSchristos	addu	$3,$1
1298*4724848cSchristos	mflo	($24,$20,$19)
1299*4724848cSchristos	mfhi	($25,$20,$19)
1300*4724848cSchristos	addu	$7,$24
1301*4724848cSchristos	sltu	$1,$7,$24
1302*4724848cSchristos	multu	($5,$17)		# mul_add_c(a[7],b[4],c3,c1,c2);
1303*4724848cSchristos	addu	$25,$1
1304*4724848cSchristos	addu	$2,$25
1305*4724848cSchristos	sltu	$1,$2,$25
1306*4724848cSchristos	addu	$3,$1
1307*4724848cSchristos	mflo	($24,$5,$17)
1308*4724848cSchristos	mfhi	($25,$5,$17)
1309*4724848cSchristos	addu	$7,$24
1310*4724848cSchristos	sltu	$1,$7,$24
1311*4724848cSchristos	 multu	($5,$19)		# mul_add_c(a[7],b[5],c1,c2,c3);
1312*4724848cSchristos	addu	$25,$1
1313*4724848cSchristos	addu	$2,$25
1314*4724848cSchristos	sltu	$1,$2,$25
1315*4724848cSchristos	addu	$3,$1
1316*4724848cSchristos	sw	$7,11*4($4)	# r[11]=c3;
1317*4724848cSchristos
1318*4724848cSchristos	mflo	($24,$5,$19)
1319*4724848cSchristos	mfhi	($25,$5,$19)
1320*4724848cSchristos	addu	$2,$24
1321*4724848cSchristos	sltu	$1,$2,$24
1322*4724848cSchristos	multu	($20,$21)		# mul_add_c(a[6],b[6],c1,c2,c3);
1323*4724848cSchristos	addu	$25,$1
1324*4724848cSchristos	addu	$3,$25
1325*4724848cSchristos	sltu	$7,$3,$25
1326*4724848cSchristos	mflo	($24,$20,$21)
1327*4724848cSchristos	mfhi	($25,$20,$21)
1328*4724848cSchristos	addu	$2,$24
1329*4724848cSchristos	sltu	$1,$2,$24
1330*4724848cSchristos	multu	($18,$6)		# mul_add_c(a[5],b[7],c1,c2,c3);
1331*4724848cSchristos	addu	$25,$1
1332*4724848cSchristos	addu	$3,$25
1333*4724848cSchristos	sltu	$1,$3,$25
1334*4724848cSchristos	addu	$7,$1
1335*4724848cSchristos	mflo	($24,$18,$6)
1336*4724848cSchristos	mfhi	($25,$18,$6)
1337*4724848cSchristos	addu	$2,$24
1338*4724848cSchristos	sltu	$1,$2,$24
1339*4724848cSchristos	 multu	($20,$6)		# mul_add_c(a[6],b[7],c2,c3,c1);
1340*4724848cSchristos	addu	$25,$1
1341*4724848cSchristos	addu	$3,$25
1342*4724848cSchristos	sltu	$1,$3,$25
1343*4724848cSchristos	addu	$7,$1
1344*4724848cSchristos	sw	$2,12*4($4)	# r[12]=c1;
1345*4724848cSchristos
1346*4724848cSchristos	mflo	($24,$20,$6)
1347*4724848cSchristos	mfhi	($25,$20,$6)
1348*4724848cSchristos	addu	$3,$24
1349*4724848cSchristos	sltu	$1,$3,$24
1350*4724848cSchristos	multu	($5,$21)		# mul_add_c(a[7],b[6],c2,c3,c1);
1351*4724848cSchristos	addu	$25,$1
1352*4724848cSchristos	addu	$7,$25
1353*4724848cSchristos	sltu	$2,$7,$25
1354*4724848cSchristos	mflo	($24,$5,$21)
1355*4724848cSchristos	mfhi	($25,$5,$21)
1356*4724848cSchristos	addu	$3,$24
1357*4724848cSchristos	sltu	$1,$3,$24
1358*4724848cSchristos	multu	($5,$6)		# mul_add_c(a[7],b[7],c3,c1,c2);
1359*4724848cSchristos	addu	$25,$1
1360*4724848cSchristos	addu	$7,$25
1361*4724848cSchristos	sltu	$1,$7,$25
1362*4724848cSchristos	addu	$2,$1
1363*4724848cSchristos	sw	$3,13*4($4)	# r[13]=c2;
1364*4724848cSchristos
1365*4724848cSchristos	mflo	($24,$5,$6)
1366*4724848cSchristos	mfhi	($25,$5,$6)
1367*4724848cSchristos	addu	$7,$24
1368*4724848cSchristos	sltu	$1,$7,$24
1369*4724848cSchristos	addu	$25,$1
1370*4724848cSchristos	addu	$2,$25
1371*4724848cSchristos	sw	$7,14*4($4)	# r[14]=c3;
1372*4724848cSchristos	sw	$2,15*4($4)	# r[15]=c1;
1373*4724848cSchristos
1374*4724848cSchristos	.set	noreorder
1375*4724848cSchristos	lw	$21,5*4($29)
1376*4724848cSchristos	lw	$20,4*4($29)
1377*4724848cSchristos	lw	$19,3*4($29)
1378*4724848cSchristos	lw	$18,2*4($29)
1379*4724848cSchristos	lw	$17,1*4($29)
1380*4724848cSchristos	lw	$16,0*4($29)
1381*4724848cSchristos	jr	$31
1382*4724848cSchristos	addu $29,6*4
1383*4724848cSchristos.end	bn_mul_comba8
1384*4724848cSchristos
1385*4724848cSchristos.align	5
1386*4724848cSchristos.globl	bn_mul_comba4
1387*4724848cSchristos.ent	bn_mul_comba4
1388*4724848cSchristosbn_mul_comba4:
1389*4724848cSchristos	.set	reorder
1390*4724848cSchristos	lw	$12,0($5)
1391*4724848cSchristos	lw	$8,0($6)
1392*4724848cSchristos	lw	$13,4($5)
1393*4724848cSchristos	lw	$14,2*4($5)
1394*4724848cSchristos	multu	($12,$8)		# mul_add_c(a[0],b[0],c1,c2,c3);
1395*4724848cSchristos	lw	$15,3*4($5)
1396*4724848cSchristos	lw	$9,4($6)
1397*4724848cSchristos	lw	$10,2*4($6)
1398*4724848cSchristos	lw	$11,3*4($6)
1399*4724848cSchristos	mflo	($2,$12,$8)
1400*4724848cSchristos	mfhi	($3,$12,$8)
1401*4724848cSchristos	sw	$2,0($4)
1402*4724848cSchristos
1403*4724848cSchristos	multu	($12,$9)		# mul_add_c(a[0],b[1],c2,c3,c1);
1404*4724848cSchristos	mflo	($24,$12,$9)
1405*4724848cSchristos	mfhi	($25,$12,$9)
1406*4724848cSchristos	addu	$3,$24
1407*4724848cSchristos	sltu	$1,$3,$24
1408*4724848cSchristos	multu	($13,$8)		# mul_add_c(a[1],b[0],c2,c3,c1);
1409*4724848cSchristos	addu	$7,$25,$1
1410*4724848cSchristos	mflo	($24,$13,$8)
1411*4724848cSchristos	mfhi	($25,$13,$8)
1412*4724848cSchristos	addu	$3,$24
1413*4724848cSchristos	sltu	$1,$3,$24
1414*4724848cSchristos	 multu	($14,$8)		# mul_add_c(a[2],b[0],c3,c1,c2);
1415*4724848cSchristos	addu	$25,$1
1416*4724848cSchristos	addu	$7,$25
1417*4724848cSchristos	sltu	$2,$7,$25
1418*4724848cSchristos	sw	$3,4($4)
1419*4724848cSchristos
1420*4724848cSchristos	mflo	($24,$14,$8)
1421*4724848cSchristos	mfhi	($25,$14,$8)
1422*4724848cSchristos	addu	$7,$24
1423*4724848cSchristos	sltu	$1,$7,$24
1424*4724848cSchristos	multu	($13,$9)		# mul_add_c(a[1],b[1],c3,c1,c2);
1425*4724848cSchristos	addu	$25,$1
1426*4724848cSchristos	addu	$2,$25
1427*4724848cSchristos	mflo	($24,$13,$9)
1428*4724848cSchristos	mfhi	($25,$13,$9)
1429*4724848cSchristos	addu	$7,$24
1430*4724848cSchristos	sltu	$1,$7,$24
1431*4724848cSchristos	multu	($12,$10)		# mul_add_c(a[0],b[2],c3,c1,c2);
1432*4724848cSchristos	addu	$25,$1
1433*4724848cSchristos	addu	$2,$25
1434*4724848cSchristos	sltu	$3,$2,$25
1435*4724848cSchristos	mflo	($24,$12,$10)
1436*4724848cSchristos	mfhi	($25,$12,$10)
1437*4724848cSchristos	addu	$7,$24
1438*4724848cSchristos	sltu	$1,$7,$24
1439*4724848cSchristos	 multu	($12,$11)		# mul_add_c(a[0],b[3],c1,c2,c3);
1440*4724848cSchristos	addu	$25,$1
1441*4724848cSchristos	addu	$2,$25
1442*4724848cSchristos	sltu	$1,$2,$25
1443*4724848cSchristos	addu	$3,$1
1444*4724848cSchristos	sw	$7,2*4($4)
1445*4724848cSchristos
1446*4724848cSchristos	mflo	($24,$12,$11)
1447*4724848cSchristos	mfhi	($25,$12,$11)
1448*4724848cSchristos	addu	$2,$24
1449*4724848cSchristos	sltu	$1,$2,$24
1450*4724848cSchristos	multu	($13,$10)		# mul_add_c(a[1],b[2],c1,c2,c3);
1451*4724848cSchristos	addu	$25,$1
1452*4724848cSchristos	addu	$3,$25
1453*4724848cSchristos	sltu	$7,$3,$25
1454*4724848cSchristos	mflo	($24,$13,$10)
1455*4724848cSchristos	mfhi	($25,$13,$10)
1456*4724848cSchristos	addu	$2,$24
1457*4724848cSchristos	sltu	$1,$2,$24
1458*4724848cSchristos	multu	($14,$9)		# mul_add_c(a[2],b[1],c1,c2,c3);
1459*4724848cSchristos	addu	$25,$1
1460*4724848cSchristos	addu	$3,$25
1461*4724848cSchristos	sltu	$1,$3,$25
1462*4724848cSchristos	addu	$7,$1
1463*4724848cSchristos	mflo	($24,$14,$9)
1464*4724848cSchristos	mfhi	($25,$14,$9)
1465*4724848cSchristos	addu	$2,$24
1466*4724848cSchristos	sltu	$1,$2,$24
1467*4724848cSchristos	multu	($15,$8)		# mul_add_c(a[3],b[0],c1,c2,c3);
1468*4724848cSchristos	addu	$25,$1
1469*4724848cSchristos	addu	$3,$25
1470*4724848cSchristos	sltu	$1,$3,$25
1471*4724848cSchristos	addu	$7,$1
1472*4724848cSchristos	mflo	($24,$15,$8)
1473*4724848cSchristos	mfhi	($25,$15,$8)
1474*4724848cSchristos	addu	$2,$24
1475*4724848cSchristos	sltu	$1,$2,$24
1476*4724848cSchristos	 multu	($15,$9)		# mul_add_c(a[3],b[1],c2,c3,c1);
1477*4724848cSchristos	addu	$25,$1
1478*4724848cSchristos	addu	$3,$25
1479*4724848cSchristos	sltu	$1,$3,$25
1480*4724848cSchristos	addu	$7,$1
1481*4724848cSchristos	sw	$2,3*4($4)
1482*4724848cSchristos
1483*4724848cSchristos	mflo	($24,$15,$9)
1484*4724848cSchristos	mfhi	($25,$15,$9)
1485*4724848cSchristos	addu	$3,$24
1486*4724848cSchristos	sltu	$1,$3,$24
1487*4724848cSchristos	multu	($14,$10)		# mul_add_c(a[2],b[2],c2,c3,c1);
1488*4724848cSchristos	addu	$25,$1
1489*4724848cSchristos	addu	$7,$25
1490*4724848cSchristos	sltu	$2,$7,$25
1491*4724848cSchristos	mflo	($24,$14,$10)
1492*4724848cSchristos	mfhi	($25,$14,$10)
1493*4724848cSchristos	addu	$3,$24
1494*4724848cSchristos	sltu	$1,$3,$24
1495*4724848cSchristos	multu	($13,$11)		# mul_add_c(a[1],b[3],c2,c3,c1);
1496*4724848cSchristos	addu	$25,$1
1497*4724848cSchristos	addu	$7,$25
1498*4724848cSchristos	sltu	$1,$7,$25
1499*4724848cSchristos	addu	$2,$1
1500*4724848cSchristos	mflo	($24,$13,$11)
1501*4724848cSchristos	mfhi	($25,$13,$11)
1502*4724848cSchristos	addu	$3,$24
1503*4724848cSchristos	sltu	$1,$3,$24
1504*4724848cSchristos	 multu	($14,$11)		# mul_add_c(a[2],b[3],c3,c1,c2);
1505*4724848cSchristos	addu	$25,$1
1506*4724848cSchristos	addu	$7,$25
1507*4724848cSchristos	sltu	$1,$7,$25
1508*4724848cSchristos	addu	$2,$1
1509*4724848cSchristos	sw	$3,4*4($4)
1510*4724848cSchristos
1511*4724848cSchristos	mflo	($24,$14,$11)
1512*4724848cSchristos	mfhi	($25,$14,$11)
1513*4724848cSchristos	addu	$7,$24
1514*4724848cSchristos	sltu	$1,$7,$24
1515*4724848cSchristos	multu	($15,$10)		# mul_add_c(a[3],b[2],c3,c1,c2);
1516*4724848cSchristos	addu	$25,$1
1517*4724848cSchristos	addu	$2,$25
1518*4724848cSchristos	sltu	$3,$2,$25
1519*4724848cSchristos	mflo	($24,$15,$10)
1520*4724848cSchristos	mfhi	($25,$15,$10)
1521*4724848cSchristos	addu	$7,$24
1522*4724848cSchristos	sltu	$1,$7,$24
1523*4724848cSchristos	 multu	($15,$11)		# mul_add_c(a[3],b[3],c1,c2,c3);
1524*4724848cSchristos	addu	$25,$1
1525*4724848cSchristos	addu	$2,$25
1526*4724848cSchristos	sltu	$1,$2,$25
1527*4724848cSchristos	addu	$3,$1
1528*4724848cSchristos	sw	$7,5*4($4)
1529*4724848cSchristos
1530*4724848cSchristos	mflo	($24,$15,$11)
1531*4724848cSchristos	mfhi	($25,$15,$11)
1532*4724848cSchristos	addu	$2,$24
1533*4724848cSchristos	sltu	$1,$2,$24
1534*4724848cSchristos	addu	$25,$1
1535*4724848cSchristos	addu	$3,$25
1536*4724848cSchristos	sw	$2,6*4($4)
1537*4724848cSchristos	sw	$3,7*4($4)
1538*4724848cSchristos
1539*4724848cSchristos	.set	noreorder
1540*4724848cSchristos	jr	$31
1541*4724848cSchristos	nop
1542*4724848cSchristos.end	bn_mul_comba4
1543*4724848cSchristos
1544*4724848cSchristos.align	5
1545*4724848cSchristos.globl	bn_sqr_comba8
1546*4724848cSchristos.ent	bn_sqr_comba8
1547*4724848cSchristosbn_sqr_comba8:
1548*4724848cSchristos	.set	reorder
1549*4724848cSchristos	lw	$12,0($5)
1550*4724848cSchristos	lw	$13,4($5)
1551*4724848cSchristos	lw	$14,2*4($5)
1552*4724848cSchristos	lw	$15,3*4($5)
1553*4724848cSchristos
1554*4724848cSchristos	multu	($12,$12)		# mul_add_c(a[0],b[0],c1,c2,c3);
1555*4724848cSchristos	lw	$8,4*4($5)
1556*4724848cSchristos	lw	$9,5*4($5)
1557*4724848cSchristos	lw	$10,6*4($5)
1558*4724848cSchristos	lw	$11,7*4($5)
1559*4724848cSchristos	mflo	($2,$12,$12)
1560*4724848cSchristos	mfhi	($3,$12,$12)
1561*4724848cSchristos	sw	$2,0($4)
1562*4724848cSchristos
1563*4724848cSchristos	multu	($12,$13)		# mul_add_c2(a[0],b[1],c2,c3,c1);
1564*4724848cSchristos	mflo	($24,$12,$13)
1565*4724848cSchristos	mfhi	($25,$12,$13)
1566*4724848cSchristos	slt	$2,$25,$0
1567*4724848cSchristos	sll	$25,1
1568*4724848cSchristos	 multu	($14,$12)		# mul_add_c2(a[2],b[0],c3,c1,c2);
1569*4724848cSchristos	slt	$6,$24,$0
1570*4724848cSchristos	addu	$25,$6
1571*4724848cSchristos	sll	$24,1
1572*4724848cSchristos	addu	$3,$24
1573*4724848cSchristos	sltu	$1,$3,$24
1574*4724848cSchristos	addu	$7,$25,$1
1575*4724848cSchristos	sw	$3,4($4)
1576*4724848cSchristos	mflo	($24,$14,$12)
1577*4724848cSchristos	mfhi	($25,$14,$12)
1578*4724848cSchristos	addu	$7,$24
1579*4724848cSchristos	sltu	$1,$7,$24
1580*4724848cSchristos	 multu	($13,$13)		# forward multiplication
1581*4724848cSchristos	addu	$7,$24
1582*4724848cSchristos	addu	$1,$25
1583*4724848cSchristos	sltu	$24,$7,$24
1584*4724848cSchristos	addu	$2,$1
1585*4724848cSchristos	addu	$25,$24
1586*4724848cSchristos	sltu	$3,$2,$1
1587*4724848cSchristos	addu	$2,$25
1588*4724848cSchristos	sltu	$25,$2,$25
1589*4724848cSchristos	addu	$3,$25
1590*4724848cSchristos	mflo	($24,$13,$13)
1591*4724848cSchristos	mfhi	($25,$13,$13)
1592*4724848cSchristos	addu	$7,$24
1593*4724848cSchristos	sltu	$1,$7,$24
1594*4724848cSchristos	 multu	($12,$15)		# mul_add_c2(a[0],b[3],c1,c2,c3);
1595*4724848cSchristos	addu	$25,$1
1596*4724848cSchristos	addu	$2,$25
1597*4724848cSchristos	sltu	$1,$2,$25
1598*4724848cSchristos	addu	$3,$1
1599*4724848cSchristos	sw	$7,2*4($4)
1600*4724848cSchristos	mflo	($24,$12,$15)
1601*4724848cSchristos	mfhi	($25,$12,$15)
1602*4724848cSchristos	addu	$2,$24
1603*4724848cSchristos	sltu	$1,$2,$24
1604*4724848cSchristos	 multu	($13,$14)		# forward multiplication
1605*4724848cSchristos	addu	$2,$24
1606*4724848cSchristos	addu	$1,$25
1607*4724848cSchristos	sltu	$24,$2,$24
1608*4724848cSchristos	addu	$3,$1
1609*4724848cSchristos	addu	$25,$24
1610*4724848cSchristos	sltu	$7,$3,$1
1611*4724848cSchristos	addu	$3,$25
1612*4724848cSchristos	sltu	$25,$3,$25
1613*4724848cSchristos	addu	$7,$25
1614*4724848cSchristos	mflo	($24,$13,$14)
1615*4724848cSchristos	mfhi	($25,$13,$14)
1616*4724848cSchristos	addu	$2,$24
1617*4724848cSchristos	sltu	$1,$2,$24
1618*4724848cSchristos	 multu	($8,$12)		# forward multiplication
1619*4724848cSchristos	addu	$2,$24
1620*4724848cSchristos	addu	$1,$25
1621*4724848cSchristos	sltu	$24,$2,$24
1622*4724848cSchristos	addu	$3,$1
1623*4724848cSchristos	addu	$25,$24
1624*4724848cSchristos	sltu	$1,$3,$1
1625*4724848cSchristos	addu	$3,$25
1626*4724848cSchristos	addu	$7,$1
1627*4724848cSchristos	sltu	$25,$3,$25
1628*4724848cSchristos	addu	$7,$25
1629*4724848cSchristos	mflo	($24,$8,$12)
1630*4724848cSchristos	mfhi	($25,$8,$12)
1631*4724848cSchristos	sw	$2,3*4($4)
1632*4724848cSchristos	addu	$3,$24
1633*4724848cSchristos	sltu	$1,$3,$24
1634*4724848cSchristos	 multu	($15,$13)		# forward multiplication
1635*4724848cSchristos	addu	$3,$24
1636*4724848cSchristos	addu	$1,$25
1637*4724848cSchristos	sltu	$24,$3,$24
1638*4724848cSchristos	addu	$7,$1
1639*4724848cSchristos	addu	$25,$24
1640*4724848cSchristos	sltu	$2,$7,$1
1641*4724848cSchristos	addu	$7,$25
1642*4724848cSchristos	sltu	$25,$7,$25
1643*4724848cSchristos	addu	$2,$25
1644*4724848cSchristos	mflo	($24,$15,$13)
1645*4724848cSchristos	mfhi	($25,$15,$13)
1646*4724848cSchristos	addu	$3,$24
1647*4724848cSchristos	sltu	$1,$3,$24
1648*4724848cSchristos	 multu	($14,$14)		# forward multiplication
1649*4724848cSchristos	addu	$3,$24
1650*4724848cSchristos	addu	$1,$25
1651*4724848cSchristos	sltu	$24,$3,$24
1652*4724848cSchristos	addu	$7,$1
1653*4724848cSchristos	addu	$25,$24
1654*4724848cSchristos	sltu	$1,$7,$1
1655*4724848cSchristos	addu	$7,$25
1656*4724848cSchristos	addu	$2,$1
1657*4724848cSchristos	sltu	$25,$7,$25
1658*4724848cSchristos	addu	$2,$25
1659*4724848cSchristos	mflo	($24,$14,$14)
1660*4724848cSchristos	mfhi	($25,$14,$14)
1661*4724848cSchristos	addu	$3,$24
1662*4724848cSchristos	sltu	$1,$3,$24
1663*4724848cSchristos	 multu	($12,$9)		# mul_add_c2(a[0],b[5],c3,c1,c2);
1664*4724848cSchristos	addu	$25,$1
1665*4724848cSchristos	addu	$7,$25
1666*4724848cSchristos	sltu	$1,$7,$25
1667*4724848cSchristos	addu	$2,$1
1668*4724848cSchristos	sw	$3,4*4($4)
1669*4724848cSchristos	mflo	($24,$12,$9)
1670*4724848cSchristos	mfhi	($25,$12,$9)
1671*4724848cSchristos	addu	$7,$24
1672*4724848cSchristos	sltu	$1,$7,$24
1673*4724848cSchristos	 multu	($13,$8)		# forward multiplication
1674*4724848cSchristos	addu	$7,$24
1675*4724848cSchristos	addu	$1,$25
1676*4724848cSchristos	sltu	$24,$7,$24
1677*4724848cSchristos	addu	$2,$1
1678*4724848cSchristos	addu	$25,$24
1679*4724848cSchristos	sltu	$3,$2,$1
1680*4724848cSchristos	addu	$2,$25
1681*4724848cSchristos	sltu	$25,$2,$25
1682*4724848cSchristos	addu	$3,$25
1683*4724848cSchristos	mflo	($24,$13,$8)
1684*4724848cSchristos	mfhi	($25,$13,$8)
1685*4724848cSchristos	addu	$7,$24
1686*4724848cSchristos	sltu	$1,$7,$24
1687*4724848cSchristos	 multu	($14,$15)		# forward multiplication
1688*4724848cSchristos	addu	$7,$24
1689*4724848cSchristos	addu	$1,$25
1690*4724848cSchristos	sltu	$24,$7,$24
1691*4724848cSchristos	addu	$2,$1
1692*4724848cSchristos	addu	$25,$24
1693*4724848cSchristos	sltu	$1,$2,$1
1694*4724848cSchristos	addu	$2,$25
1695*4724848cSchristos	addu	$3,$1
1696*4724848cSchristos	sltu	$25,$2,$25
1697*4724848cSchristos	addu	$3,$25
1698*4724848cSchristos	mflo	($24,$14,$15)
1699*4724848cSchristos	mfhi	($25,$14,$15)
1700*4724848cSchristos	addu	$7,$24
1701*4724848cSchristos	sltu	$1,$7,$24
1702*4724848cSchristos	 multu	($10,$12)		# forward multiplication
1703*4724848cSchristos	addu	$7,$24
1704*4724848cSchristos	addu	$1,$25
1705*4724848cSchristos	sltu	$24,$7,$24
1706*4724848cSchristos	addu	$2,$1
1707*4724848cSchristos	addu	$25,$24
1708*4724848cSchristos	sltu	$1,$2,$1
1709*4724848cSchristos	addu	$2,$25
1710*4724848cSchristos	addu	$3,$1
1711*4724848cSchristos	sltu	$25,$2,$25
1712*4724848cSchristos	addu	$3,$25
1713*4724848cSchristos	mflo	($24,$10,$12)
1714*4724848cSchristos	mfhi	($25,$10,$12)
1715*4724848cSchristos	sw	$7,5*4($4)
1716*4724848cSchristos	addu	$2,$24
1717*4724848cSchristos	sltu	$1,$2,$24
1718*4724848cSchristos	 multu	($9,$13)		# forward multiplication
1719*4724848cSchristos	addu	$2,$24
1720*4724848cSchristos	addu	$1,$25
1721*4724848cSchristos	sltu	$24,$2,$24
1722*4724848cSchristos	addu	$3,$1
1723*4724848cSchristos	addu	$25,$24
1724*4724848cSchristos	sltu	$7,$3,$1
1725*4724848cSchristos	addu	$3,$25
1726*4724848cSchristos	sltu	$25,$3,$25
1727*4724848cSchristos	addu	$7,$25
1728*4724848cSchristos	mflo	($24,$9,$13)
1729*4724848cSchristos	mfhi	($25,$9,$13)
1730*4724848cSchristos	addu	$2,$24
1731*4724848cSchristos	sltu	$1,$2,$24
1732*4724848cSchristos	 multu	($8,$14)		# forward multiplication
1733*4724848cSchristos	addu	$2,$24
1734*4724848cSchristos	addu	$1,$25
1735*4724848cSchristos	sltu	$24,$2,$24
1736*4724848cSchristos	addu	$3,$1
1737*4724848cSchristos	addu	$25,$24
1738*4724848cSchristos	sltu	$1,$3,$1
1739*4724848cSchristos	addu	$3,$25
1740*4724848cSchristos	addu	$7,$1
1741*4724848cSchristos	sltu	$25,$3,$25
1742*4724848cSchristos	addu	$7,$25
1743*4724848cSchristos	mflo	($24,$8,$14)
1744*4724848cSchristos	mfhi	($25,$8,$14)
1745*4724848cSchristos	addu	$2,$24
1746*4724848cSchristos	sltu	$1,$2,$24
1747*4724848cSchristos	 multu	($15,$15)		# forward multiplication
1748*4724848cSchristos	addu	$2,$24
1749*4724848cSchristos	addu	$1,$25
1750*4724848cSchristos	sltu	$24,$2,$24
1751*4724848cSchristos	addu	$3,$1
1752*4724848cSchristos	addu	$25,$24
1753*4724848cSchristos	sltu	$1,$3,$1
1754*4724848cSchristos	addu	$3,$25
1755*4724848cSchristos	addu	$7,$1
1756*4724848cSchristos	sltu	$25,$3,$25
1757*4724848cSchristos	addu	$7,$25
1758*4724848cSchristos	mflo	($24,$15,$15)
1759*4724848cSchristos	mfhi	($25,$15,$15)
1760*4724848cSchristos	addu	$2,$24
1761*4724848cSchristos	sltu	$1,$2,$24
1762*4724848cSchristos	 multu	($12,$11)		# mul_add_c2(a[0],b[7],c2,c3,c1);
1763*4724848cSchristos	addu	$25,$1
1764*4724848cSchristos	addu	$3,$25
1765*4724848cSchristos	sltu	$1,$3,$25
1766*4724848cSchristos	addu	$7,$1
1767*4724848cSchristos	sw	$2,6*4($4)
1768*4724848cSchristos	mflo	($24,$12,$11)
1769*4724848cSchristos	mfhi	($25,$12,$11)
1770*4724848cSchristos	addu	$3,$24
1771*4724848cSchristos	sltu	$1,$3,$24
1772*4724848cSchristos	 multu	($13,$10)		# forward multiplication
1773*4724848cSchristos	addu	$3,$24
1774*4724848cSchristos	addu	$1,$25
1775*4724848cSchristos	sltu	$24,$3,$24
1776*4724848cSchristos	addu	$7,$1
1777*4724848cSchristos	addu	$25,$24
1778*4724848cSchristos	sltu	$2,$7,$1
1779*4724848cSchristos	addu	$7,$25
1780*4724848cSchristos	sltu	$25,$7,$25
1781*4724848cSchristos	addu	$2,$25
1782*4724848cSchristos	mflo	($24,$13,$10)
1783*4724848cSchristos	mfhi	($25,$13,$10)
1784*4724848cSchristos	addu	$3,$24
1785*4724848cSchristos	sltu	$1,$3,$24
1786*4724848cSchristos	 multu	($14,$9)		# forward multiplication
1787*4724848cSchristos	addu	$3,$24
1788*4724848cSchristos	addu	$1,$25
1789*4724848cSchristos	sltu	$24,$3,$24
1790*4724848cSchristos	addu	$7,$1
1791*4724848cSchristos	addu	$25,$24
1792*4724848cSchristos	sltu	$1,$7,$1
1793*4724848cSchristos	addu	$7,$25
1794*4724848cSchristos	addu	$2,$1
1795*4724848cSchristos	sltu	$25,$7,$25
1796*4724848cSchristos	addu	$2,$25
1797*4724848cSchristos	mflo	($24,$14,$9)
1798*4724848cSchristos	mfhi	($25,$14,$9)
1799*4724848cSchristos	addu	$3,$24
1800*4724848cSchristos	sltu	$1,$3,$24
1801*4724848cSchristos	 multu	($15,$8)		# forward multiplication
1802*4724848cSchristos	addu	$3,$24
1803*4724848cSchristos	addu	$1,$25
1804*4724848cSchristos	sltu	$24,$3,$24
1805*4724848cSchristos	addu	$7,$1
1806*4724848cSchristos	addu	$25,$24
1807*4724848cSchristos	sltu	$1,$7,$1
1808*4724848cSchristos	addu	$7,$25
1809*4724848cSchristos	addu	$2,$1
1810*4724848cSchristos	sltu	$25,$7,$25
1811*4724848cSchristos	addu	$2,$25
1812*4724848cSchristos	mflo	($24,$15,$8)
1813*4724848cSchristos	mfhi	($25,$15,$8)
1814*4724848cSchristos	addu	$3,$24
1815*4724848cSchristos	sltu	$1,$3,$24
1816*4724848cSchristos	 multu	($11,$13)		# forward multiplication
1817*4724848cSchristos	addu	$3,$24
1818*4724848cSchristos	addu	$1,$25
1819*4724848cSchristos	sltu	$24,$3,$24
1820*4724848cSchristos	addu	$7,$1
1821*4724848cSchristos	addu	$25,$24
1822*4724848cSchristos	sltu	$1,$7,$1
1823*4724848cSchristos	addu	$7,$25
1824*4724848cSchristos	addu	$2,$1
1825*4724848cSchristos	sltu	$25,$7,$25
1826*4724848cSchristos	addu	$2,$25
1827*4724848cSchristos	mflo	($24,$11,$13)
1828*4724848cSchristos	mfhi	($25,$11,$13)
1829*4724848cSchristos	sw	$3,7*4($4)
1830*4724848cSchristos	addu	$7,$24
1831*4724848cSchristos	sltu	$1,$7,$24
1832*4724848cSchristos	 multu	($10,$14)		# forward multiplication
1833*4724848cSchristos	addu	$7,$24
1834*4724848cSchristos	addu	$1,$25
1835*4724848cSchristos	sltu	$24,$7,$24
1836*4724848cSchristos	addu	$2,$1
1837*4724848cSchristos	addu	$25,$24
1838*4724848cSchristos	sltu	$3,$2,$1
1839*4724848cSchristos	addu	$2,$25
1840*4724848cSchristos	sltu	$25,$2,$25
1841*4724848cSchristos	addu	$3,$25
1842*4724848cSchristos	mflo	($24,$10,$14)
1843*4724848cSchristos	mfhi	($25,$10,$14)
1844*4724848cSchristos	addu	$7,$24
1845*4724848cSchristos	sltu	$1,$7,$24
1846*4724848cSchristos	 multu	($9,$15)		# forward multiplication
1847*4724848cSchristos	addu	$7,$24
1848*4724848cSchristos	addu	$1,$25
1849*4724848cSchristos	sltu	$24,$7,$24
1850*4724848cSchristos	addu	$2,$1
1851*4724848cSchristos	addu	$25,$24
1852*4724848cSchristos	sltu	$1,$2,$1
1853*4724848cSchristos	addu	$2,$25
1854*4724848cSchristos	addu	$3,$1
1855*4724848cSchristos	sltu	$25,$2,$25
1856*4724848cSchristos	addu	$3,$25
1857*4724848cSchristos	mflo	($24,$9,$15)
1858*4724848cSchristos	mfhi	($25,$9,$15)
1859*4724848cSchristos	addu	$7,$24
1860*4724848cSchristos	sltu	$1,$7,$24
1861*4724848cSchristos	 multu	($8,$8)		# forward multiplication
1862*4724848cSchristos	addu	$7,$24
1863*4724848cSchristos	addu	$1,$25
1864*4724848cSchristos	sltu	$24,$7,$24
1865*4724848cSchristos	addu	$2,$1
1866*4724848cSchristos	addu	$25,$24
1867*4724848cSchristos	sltu	$1,$2,$1
1868*4724848cSchristos	addu	$2,$25
1869*4724848cSchristos	addu	$3,$1
1870*4724848cSchristos	sltu	$25,$2,$25
1871*4724848cSchristos	addu	$3,$25
1872*4724848cSchristos	mflo	($24,$8,$8)
1873*4724848cSchristos	mfhi	($25,$8,$8)
1874*4724848cSchristos	addu	$7,$24
1875*4724848cSchristos	sltu	$1,$7,$24
1876*4724848cSchristos	 multu	($14,$11)		# mul_add_c2(a[2],b[7],c1,c2,c3);
1877*4724848cSchristos	addu	$25,$1
1878*4724848cSchristos	addu	$2,$25
1879*4724848cSchristos	sltu	$1,$2,$25
1880*4724848cSchristos	addu	$3,$1
1881*4724848cSchristos	sw	$7,8*4($4)
1882*4724848cSchristos	mflo	($24,$14,$11)
1883*4724848cSchristos	mfhi	($25,$14,$11)
1884*4724848cSchristos	addu	$2,$24
1885*4724848cSchristos	sltu	$1,$2,$24
1886*4724848cSchristos	 multu	($15,$10)		# forward multiplication
1887*4724848cSchristos	addu	$2,$24
1888*4724848cSchristos	addu	$1,$25
1889*4724848cSchristos	sltu	$24,$2,$24
1890*4724848cSchristos	addu	$3,$1
1891*4724848cSchristos	addu	$25,$24
1892*4724848cSchristos	sltu	$7,$3,$1
1893*4724848cSchristos	addu	$3,$25
1894*4724848cSchristos	sltu	$25,$3,$25
1895*4724848cSchristos	addu	$7,$25
1896*4724848cSchristos	mflo	($24,$15,$10)
1897*4724848cSchristos	mfhi	($25,$15,$10)
1898*4724848cSchristos	addu	$2,$24
1899*4724848cSchristos	sltu	$1,$2,$24
1900*4724848cSchristos	 multu	($8,$9)		# forward multiplication
1901*4724848cSchristos	addu	$2,$24
1902*4724848cSchristos	addu	$1,$25
1903*4724848cSchristos	sltu	$24,$2,$24
1904*4724848cSchristos	addu	$3,$1
1905*4724848cSchristos	addu	$25,$24
1906*4724848cSchristos	sltu	$1,$3,$1
1907*4724848cSchristos	addu	$3,$25
1908*4724848cSchristos	addu	$7,$1
1909*4724848cSchristos	sltu	$25,$3,$25
1910*4724848cSchristos	addu	$7,$25
1911*4724848cSchristos	mflo	($24,$8,$9)
1912*4724848cSchristos	mfhi	($25,$8,$9)
1913*4724848cSchristos	addu	$2,$24
1914*4724848cSchristos	sltu	$1,$2,$24
1915*4724848cSchristos	 multu	($11,$15)		# forward multiplication
1916*4724848cSchristos	addu	$2,$24
1917*4724848cSchristos	addu	$1,$25
1918*4724848cSchristos	sltu	$24,$2,$24
1919*4724848cSchristos	addu	$3,$1
1920*4724848cSchristos	addu	$25,$24
1921*4724848cSchristos	sltu	$1,$3,$1
1922*4724848cSchristos	addu	$3,$25
1923*4724848cSchristos	addu	$7,$1
1924*4724848cSchristos	sltu	$25,$3,$25
1925*4724848cSchristos	addu	$7,$25
1926*4724848cSchristos	mflo	($24,$11,$15)
1927*4724848cSchristos	mfhi	($25,$11,$15)
1928*4724848cSchristos	sw	$2,9*4($4)
1929*4724848cSchristos	addu	$3,$24
1930*4724848cSchristos	sltu	$1,$3,$24
1931*4724848cSchristos	 multu	($10,$8)		# forward multiplication
1932*4724848cSchristos	addu	$3,$24
1933*4724848cSchristos	addu	$1,$25
1934*4724848cSchristos	sltu	$24,$3,$24
1935*4724848cSchristos	addu	$7,$1
1936*4724848cSchristos	addu	$25,$24
1937*4724848cSchristos	sltu	$2,$7,$1
1938*4724848cSchristos	addu	$7,$25
1939*4724848cSchristos	sltu	$25,$7,$25
1940*4724848cSchristos	addu	$2,$25
1941*4724848cSchristos	mflo	($24,$10,$8)
1942*4724848cSchristos	mfhi	($25,$10,$8)
1943*4724848cSchristos	addu	$3,$24
1944*4724848cSchristos	sltu	$1,$3,$24
1945*4724848cSchristos	 multu	($9,$9)		# forward multiplication
1946*4724848cSchristos	addu	$3,$24
1947*4724848cSchristos	addu	$1,$25
1948*4724848cSchristos	sltu	$24,$3,$24
1949*4724848cSchristos	addu	$7,$1
1950*4724848cSchristos	addu	$25,$24
1951*4724848cSchristos	sltu	$1,$7,$1
1952*4724848cSchristos	addu	$7,$25
1953*4724848cSchristos	addu	$2,$1
1954*4724848cSchristos	sltu	$25,$7,$25
1955*4724848cSchristos	addu	$2,$25
1956*4724848cSchristos	mflo	($24,$9,$9)
1957*4724848cSchristos	mfhi	($25,$9,$9)
1958*4724848cSchristos	addu	$3,$24
1959*4724848cSchristos	sltu	$1,$3,$24
1960*4724848cSchristos	 multu	($8,$11)		# mul_add_c2(a[4],b[7],c3,c1,c2);
1961*4724848cSchristos	addu	$25,$1
1962*4724848cSchristos	addu	$7,$25
1963*4724848cSchristos	sltu	$1,$7,$25
1964*4724848cSchristos	addu	$2,$1
1965*4724848cSchristos	sw	$3,10*4($4)
1966*4724848cSchristos	mflo	($24,$8,$11)
1967*4724848cSchristos	mfhi	($25,$8,$11)
1968*4724848cSchristos	addu	$7,$24
1969*4724848cSchristos	sltu	$1,$7,$24
1970*4724848cSchristos	 multu	($9,$10)		# forward multiplication
1971*4724848cSchristos	addu	$7,$24
1972*4724848cSchristos	addu	$1,$25
1973*4724848cSchristos	sltu	$24,$7,$24
1974*4724848cSchristos	addu	$2,$1
1975*4724848cSchristos	addu	$25,$24
1976*4724848cSchristos	sltu	$3,$2,$1
1977*4724848cSchristos	addu	$2,$25
1978*4724848cSchristos	sltu	$25,$2,$25
1979*4724848cSchristos	addu	$3,$25
1980*4724848cSchristos	mflo	($24,$9,$10)
1981*4724848cSchristos	mfhi	($25,$9,$10)
1982*4724848cSchristos	addu	$7,$24
1983*4724848cSchristos	sltu	$1,$7,$24
1984*4724848cSchristos	 multu	($11,$9)		# forward multiplication
1985*4724848cSchristos	addu	$7,$24
1986*4724848cSchristos	addu	$1,$25
1987*4724848cSchristos	sltu	$24,$7,$24
1988*4724848cSchristos	addu	$2,$1
1989*4724848cSchristos	addu	$25,$24
1990*4724848cSchristos	sltu	$1,$2,$1
1991*4724848cSchristos	addu	$2,$25
1992*4724848cSchristos	addu	$3,$1
1993*4724848cSchristos	sltu	$25,$2,$25
1994*4724848cSchristos	addu	$3,$25
1995*4724848cSchristos	mflo	($24,$11,$9)
1996*4724848cSchristos	mfhi	($25,$11,$9)
1997*4724848cSchristos	sw	$7,11*4($4)
1998*4724848cSchristos	addu	$2,$24
1999*4724848cSchristos	sltu	$1,$2,$24
2000*4724848cSchristos	 multu	($10,$10)		# forward multiplication
2001*4724848cSchristos	addu	$2,$24
2002*4724848cSchristos	addu	$1,$25
2003*4724848cSchristos	sltu	$24,$2,$24
2004*4724848cSchristos	addu	$3,$1
2005*4724848cSchristos	addu	$25,$24
2006*4724848cSchristos	sltu	$7,$3,$1
2007*4724848cSchristos	addu	$3,$25
2008*4724848cSchristos	sltu	$25,$3,$25
2009*4724848cSchristos	addu	$7,$25
2010*4724848cSchristos	mflo	($24,$10,$10)
2011*4724848cSchristos	mfhi	($25,$10,$10)
2012*4724848cSchristos	addu	$2,$24
2013*4724848cSchristos	sltu	$1,$2,$24
2014*4724848cSchristos	 multu	($10,$11)		# mul_add_c2(a[6],b[7],c2,c3,c1);
2015*4724848cSchristos	addu	$25,$1
2016*4724848cSchristos	addu	$3,$25
2017*4724848cSchristos	sltu	$1,$3,$25
2018*4724848cSchristos	addu	$7,$1
2019*4724848cSchristos	sw	$2,12*4($4)
2020*4724848cSchristos	mflo	($24,$10,$11)
2021*4724848cSchristos	mfhi	($25,$10,$11)
2022*4724848cSchristos	addu	$3,$24
2023*4724848cSchristos	sltu	$1,$3,$24
2024*4724848cSchristos	 multu	($11,$11)		# forward multiplication
2025*4724848cSchristos	addu	$3,$24
2026*4724848cSchristos	addu	$1,$25
2027*4724848cSchristos	sltu	$24,$3,$24
2028*4724848cSchristos	addu	$7,$1
2029*4724848cSchristos	addu	$25,$24
2030*4724848cSchristos	sltu	$2,$7,$1
2031*4724848cSchristos	addu	$7,$25
2032*4724848cSchristos	sltu	$25,$7,$25
2033*4724848cSchristos	addu	$2,$25
2034*4724848cSchristos	mflo	($24,$11,$11)
2035*4724848cSchristos	mfhi	($25,$11,$11)
2036*4724848cSchristos	sw	$3,13*4($4)
2037*4724848cSchristos
2038*4724848cSchristos	addu	$7,$24
2039*4724848cSchristos	sltu	$1,$7,$24
2040*4724848cSchristos	addu	$25,$1
2041*4724848cSchristos	addu	$2,$25
2042*4724848cSchristos	sw	$7,14*4($4)
2043*4724848cSchristos	sw	$2,15*4($4)
2044*4724848cSchristos
2045*4724848cSchristos	.set	noreorder
2046*4724848cSchristos	jr	$31
2047*4724848cSchristos	nop
2048*4724848cSchristos.end	bn_sqr_comba8
2049*4724848cSchristos
2050*4724848cSchristos.align	5
2051*4724848cSchristos.globl	bn_sqr_comba4
2052*4724848cSchristos.ent	bn_sqr_comba4
2053*4724848cSchristosbn_sqr_comba4:
2054*4724848cSchristos	.set	reorder
2055*4724848cSchristos	lw	$12,0($5)
2056*4724848cSchristos	lw	$13,4($5)
2057*4724848cSchristos	multu	($12,$12)		# mul_add_c(a[0],b[0],c1,c2,c3);
2058*4724848cSchristos	lw	$14,2*4($5)
2059*4724848cSchristos	lw	$15,3*4($5)
2060*4724848cSchristos	mflo	($2,$12,$12)
2061*4724848cSchristos	mfhi	($3,$12,$12)
2062*4724848cSchristos	sw	$2,0($4)
2063*4724848cSchristos
2064*4724848cSchristos	multu	($12,$13)		# mul_add_c2(a[0],b[1],c2,c3,c1);
2065*4724848cSchristos	mflo	($24,$12,$13)
2066*4724848cSchristos	mfhi	($25,$12,$13)
2067*4724848cSchristos	slt	$2,$25,$0
2068*4724848cSchristos	sll	$25,1
2069*4724848cSchristos	 multu	($14,$12)		# mul_add_c2(a[2],b[0],c3,c1,c2);
2070*4724848cSchristos	slt	$6,$24,$0
2071*4724848cSchristos	addu	$25,$6
2072*4724848cSchristos	sll	$24,1
2073*4724848cSchristos	addu	$3,$24
2074*4724848cSchristos	sltu	$1,$3,$24
2075*4724848cSchristos	addu	$7,$25,$1
2076*4724848cSchristos	sw	$3,4($4)
2077*4724848cSchristos	mflo	($24,$14,$12)
2078*4724848cSchristos	mfhi	($25,$14,$12)
2079*4724848cSchristos	addu	$7,$24
2080*4724848cSchristos	sltu	$1,$7,$24
2081*4724848cSchristos	 multu	($13,$13)		# forward multiplication
2082*4724848cSchristos	addu	$7,$24
2083*4724848cSchristos	addu	$1,$25
2084*4724848cSchristos	sltu	$24,$7,$24
2085*4724848cSchristos	addu	$2,$1
2086*4724848cSchristos	addu	$25,$24
2087*4724848cSchristos	sltu	$3,$2,$1
2088*4724848cSchristos	addu	$2,$25
2089*4724848cSchristos	sltu	$25,$2,$25
2090*4724848cSchristos	addu	$3,$25
2091*4724848cSchristos	mflo	($24,$13,$13)
2092*4724848cSchristos	mfhi	($25,$13,$13)
2093*4724848cSchristos	addu	$7,$24
2094*4724848cSchristos	sltu	$1,$7,$24
2095*4724848cSchristos	 multu	($12,$15)		# mul_add_c2(a[0],b[3],c1,c2,c3);
2096*4724848cSchristos	addu	$25,$1
2097*4724848cSchristos	addu	$2,$25
2098*4724848cSchristos	sltu	$1,$2,$25
2099*4724848cSchristos	addu	$3,$1
2100*4724848cSchristos	sw	$7,2*4($4)
2101*4724848cSchristos	mflo	($24,$12,$15)
2102*4724848cSchristos	mfhi	($25,$12,$15)
2103*4724848cSchristos	addu	$2,$24
2104*4724848cSchristos	sltu	$1,$2,$24
2105*4724848cSchristos	 multu	($13,$14)		# forward multiplication
2106*4724848cSchristos	addu	$2,$24
2107*4724848cSchristos	addu	$1,$25
2108*4724848cSchristos	sltu	$24,$2,$24
2109*4724848cSchristos	addu	$3,$1
2110*4724848cSchristos	addu	$25,$24
2111*4724848cSchristos	sltu	$7,$3,$1
2112*4724848cSchristos	addu	$3,$25
2113*4724848cSchristos	sltu	$25,$3,$25
2114*4724848cSchristos	addu	$7,$25
2115*4724848cSchristos	mflo	($24,$13,$14)
2116*4724848cSchristos	mfhi	($25,$13,$14)
2117*4724848cSchristos	addu	$2,$24
2118*4724848cSchristos	sltu	$1,$2,$24
2119*4724848cSchristos	 multu	($15,$13)		# forward multiplication
2120*4724848cSchristos	addu	$2,$24
2121*4724848cSchristos	addu	$1,$25
2122*4724848cSchristos	sltu	$24,$2,$24
2123*4724848cSchristos	addu	$3,$1
2124*4724848cSchristos	addu	$25,$24
2125*4724848cSchristos	sltu	$1,$3,$1
2126*4724848cSchristos	addu	$3,$25
2127*4724848cSchristos	addu	$7,$1
2128*4724848cSchristos	sltu	$25,$3,$25
2129*4724848cSchristos	addu	$7,$25
2130*4724848cSchristos	mflo	($24,$15,$13)
2131*4724848cSchristos	mfhi	($25,$15,$13)
2132*4724848cSchristos	sw	$2,3*4($4)
2133*4724848cSchristos	addu	$3,$24
2134*4724848cSchristos	sltu	$1,$3,$24
2135*4724848cSchristos	 multu	($14,$14)		# forward multiplication
2136*4724848cSchristos	addu	$3,$24
2137*4724848cSchristos	addu	$1,$25
2138*4724848cSchristos	sltu	$24,$3,$24
2139*4724848cSchristos	addu	$7,$1
2140*4724848cSchristos	addu	$25,$24
2141*4724848cSchristos	sltu	$2,$7,$1
2142*4724848cSchristos	addu	$7,$25
2143*4724848cSchristos	sltu	$25,$7,$25
2144*4724848cSchristos	addu	$2,$25
2145*4724848cSchristos	mflo	($24,$14,$14)
2146*4724848cSchristos	mfhi	($25,$14,$14)
2147*4724848cSchristos	addu	$3,$24
2148*4724848cSchristos	sltu	$1,$3,$24
2149*4724848cSchristos	 multu	($14,$15)		# mul_add_c2(a[2],b[3],c3,c1,c2);
2150*4724848cSchristos	addu	$25,$1
2151*4724848cSchristos	addu	$7,$25
2152*4724848cSchristos	sltu	$1,$7,$25
2153*4724848cSchristos	addu	$2,$1
2154*4724848cSchristos	sw	$3,4*4($4)
2155*4724848cSchristos	mflo	($24,$14,$15)
2156*4724848cSchristos	mfhi	($25,$14,$15)
2157*4724848cSchristos	addu	$7,$24
2158*4724848cSchristos	sltu	$1,$7,$24
2159*4724848cSchristos	 multu	($15,$15)		# forward multiplication
2160*4724848cSchristos	addu	$7,$24
2161*4724848cSchristos	addu	$1,$25
2162*4724848cSchristos	sltu	$24,$7,$24
2163*4724848cSchristos	addu	$2,$1
2164*4724848cSchristos	addu	$25,$24
2165*4724848cSchristos	sltu	$3,$2,$1
2166*4724848cSchristos	addu	$2,$25
2167*4724848cSchristos	sltu	$25,$2,$25
2168*4724848cSchristos	addu	$3,$25
2169*4724848cSchristos	mflo	($24,$15,$15)
2170*4724848cSchristos	mfhi	($25,$15,$15)
2171*4724848cSchristos	sw	$7,5*4($4)
2172*4724848cSchristos
2173*4724848cSchristos	addu	$2,$24
2174*4724848cSchristos	sltu	$1,$2,$24
2175*4724848cSchristos	addu	$25,$1
2176*4724848cSchristos	addu	$3,$25
2177*4724848cSchristos	sw	$2,6*4($4)
2178*4724848cSchristos	sw	$3,7*4($4)
2179*4724848cSchristos
2180*4724848cSchristos	.set	noreorder
2181*4724848cSchristos	jr	$31
2182*4724848cSchristos	nop
2183*4724848cSchristos.end	bn_sqr_comba4
2184