Index: src/mips/full-codegen-mips.cc |
diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc |
index 639f57fd63da76d08dde2e871654326cda0c12b8..31eaad46826c5ea986c012bfd425da651f064f23 100644 |
--- a/src/mips/full-codegen-mips.cc |
+++ b/src/mips/full-codegen-mips.cc |
@@ -2369,12 +2369,9 @@ void FullCodeGenerator::EmitInlineSmiBinaryOp(BinaryOperation* expr, |
break; |
case Token::MUL: { |
__ SmiUntag(scratch1, right); |
- __ Mult(left, scratch1); |
- __ mflo(scratch1); |
- __ mfhi(scratch2); |
- __ sra(scratch1, scratch1, 31); |
+ __ Mul(scratch2, v0, left, scratch1); |
+ __ sra(scratch1, v0, 31); |
__ Branch(&stub_call, ne, scratch1, Operand(scratch2)); |
- __ mflo(v0); |
__ Branch(&done, ne, v0, Operand(zero_reg)); |
__ Addu(scratch2, right, left); |
__ Branch(&stub_call, lt, scratch2, Operand(zero_reg)); |
@@ -3943,12 +3940,10 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) { |
// smi but the other values are, so the result is a smi. |
__ lw(scratch1, FieldMemOperand(separator, SeqOneByteString::kLengthOffset)); |
__ Subu(string_length, string_length, Operand(scratch1)); |
- __ Mult(array_length, scratch1); |
+ __ Mul(scratch3, scratch2, array_length, scratch1); |
// Check for smi overflow. No overflow if higher 33 bits of 64-bit result are |
// zero. |
- __ mfhi(scratch2); |
- __ Branch(&bailout, ne, scratch2, Operand(zero_reg)); |
- __ mflo(scratch2); |
+ __ Branch(&bailout, ne, scratch3, Operand(zero_reg)); |
__ And(scratch3, scratch2, Operand(0x80000000)); |
__ Branch(&bailout, ne, scratch3, Operand(zero_reg)); |
__ AdduAndCheckForOverflow(string_length, string_length, scratch2, scratch3); |