diff options
Diffstat (limited to 'sysdeps/mips/mul_1.S')
-rw-r--r-- | sysdeps/mips/mul_1.S | 31 |
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) |