Index: src/mips/macro-assembler-mips.cc |
diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc |
index 1c22a89e156bec424701803d27d26e0d8baeeae1..0538cd4077d10f473009d2102d57b05b2ccf94a8 100644 |
--- a/src/mips/macro-assembler-mips.cc |
+++ b/src/mips/macro-assembler-mips.cc |
@@ -5706,6 +5706,28 @@ void CodePatcher::ChangeBranchCondition(Condition cond) { |
} |
+void MacroAssembler::FlooringDiv(Register result, |
+ Register dividend, |
+ int32_t divisor) { |
+ ASSERT(!dividend.is(result)); |
+ ASSERT(!dividend.is(at)); |
+ ASSERT(!result.is(at)); |
+ MultiplierAndShift ms(divisor); |
+ li(at, Operand(ms.multiplier())); |
+ Mult(dividend, Operand(at)); |
+ mfhi(result); |
+ if (divisor > 0 && ms.multiplier() < 0) { |
+ Addu(result, result, Operand(dividend)); |
+ } |
+ if (divisor < 0 && ms.multiplier() > 0) { |
+ Subu(result, result, Operand(dividend)); |
+ } |
+ if (ms.shift() > 0) { |
+ sra(result, result, ms.shift()); |
+ } |
+} |
+ |
+ |
} } // namespace v8::internal |
#endif // V8_TARGET_ARCH_MIPS |