aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/mips/mul_1.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mips/mul_1.S')
-rw-r--r--sysdeps/mips/mul_1.S31
1 files changed, 31 insertions, 0 deletions
diff --git a/sysdeps/mips/mul_1.S b/sysdeps/mips/mul_1.S
index c2db68a9d4..c3368f3c56 100644
--- a/sysdeps/mips/mul_1.S
+++ b/sysdeps/mips/mul_1.S
@@ -42,7 +42,12 @@ ENTRY (__mpn_mul_1)
/* warm up phase 1 */
addiu $5,$5,4
+#if __mips_isa_rev < 6
multu $8,$7
+#else
+ mulu $11,$8,$7
+ muhu $12,$8,$7
+#endif
addiu $6,$6,-1
beq $6,$0,L(LC0)
@@ -52,11 +57,22 @@ ENTRY (__mpn_mul_1)
beq $6,$0,L(LC1)
lw $8,0($5) /* load new s1 limb as early as possible */
+
+#if __mips_isa_rev < 6
L(Loop): mflo $10
mfhi $9
+#else
+L(Loop): move $10,$11
+ move $9,$12
+#endif
addiu $5,$5,4
addu $10,$10,$2 /* add old carry limb to low product limb */
+#if __mips_isa_rev < 6
multu $8,$7
+#else
+ mulu $11,$8,$7
+ muhu $12,$8,$7
+#endif
lw $8,0($5) /* load new s1 limb as early as possible */
addiu $6,$6,-1 /* decrement loop counter */
sltu $2,$10,$2 /* carry from previous addition -> $2 */
@@ -66,18 +82,33 @@ L(Loop): mflo $10
addu $2,$9,$2 /* add high product limb and carry from addition */
/* cool down phase 1 */
+#if __mips_isa_rev < 6
L(LC1): mflo $10
mfhi $9
+#else
+L(LC1): move $10,$11
+ move $9,$12
+#endif
addu $10,$10,$2
sltu $2,$10,$2
+#if __mips_isa_rev < 6
multu $8,$7
+#else
+ mulu $11,$8,$7
+ muhu $12,$8,$7
+#endif
sw $10,0($4)
addiu $4,$4,4
addu $2,$9,$2 /* add high product limb and carry from addition */
/* cool down phase 0 */
+#if __mips_isa_rev < 6
L(LC0): mflo $10
mfhi $9
+#else
+L(LC0): move $10,$11
+ move $9,$12
+#endif
addu $10,$10,$2
sltu $2,$10,$2
sw $10,0($4)