Reviewers: danno, Sven Panne, Paul Lind, kisg, palfia, dusmil,
Description:
MIPS: Tweaked FlooringDiv back to TruncatingDiv again.
Port r20048 (8953785)
Original commit message:
This is a first step towards getting the flooring division by a
constant working again (which will be a separate CL).
BUG=
Please review this at https://codereview.chromium.org/203443009/
SVN Base: https://github.com/v8/v8.git@gbl
Affected files (+12, -15 lines):
M src/mips/lithium-codegen-mips.cc
M src/mips/macro-assembler-mips.h
M src/mips/macro-assembler-mips.cc
Index: src/mips/lithium-codegen-mips.cc
diff --git a/src/mips/lithium-codegen-mips.cc
b/src/mips/lithium-codegen-mips.cc
index
7311db6a127da5d04fed5dac8aef783b55e89a1a..827503e8760cbf84ce12350283600d2ebe04a605
100644
--- a/src/mips/lithium-codegen-mips.cc
+++ b/src/mips/lithium-codegen-mips.cc
@@ -1111,9 +1111,7 @@ void LCodeGen::DoModByConstI(LModByConstI* instr) {
return;
}
- __ FlooringDiv(result, dividend, Abs(divisor));
- __ srl(at, dividend, 31);
- __ Addu(result, result, at);
+ __ TruncatingDiv(result, dividend, Abs(divisor));
__ Mul(result, result, Operand(Abs(divisor)));
__ Subu(result, dividend, Operand(result));
@@ -1230,9 +1228,7 @@ void LCodeGen::DoDivByConstI(LDivByConstI* instr) {
DeoptimizeIf(eq, instr->environment(), dividend, Operand(zero_reg));
}
- __ FlooringDiv(result, dividend, Abs(divisor));
- __ srl(at, dividend, 31);
- __ Addu(result, result, Operand(at));
+ __ TruncatingDiv(result, dividend, Abs(divisor));
if (divisor < 0) __ Subu(result, zero_reg, result);
if (!hdiv->CheckFlag(HInstruction::kAllUsesTruncatingToInt32)) {
@@ -1371,7 +1367,8 @@ void
LCodeGen::DoFlooringDivByConstI(LFlooringDivByConstI* instr) {
DeoptimizeIf(eq, instr->environment(), dividend, Operand(zero_reg));
}
- __ FlooringDiv(result, dividend, divisor);
+ // TODO(svenpanne) Add correction terms.
+ __ TruncatingDiv(result, dividend, divisor);
}
Index: src/mips/macro-assembler-mips.cc
diff --git a/src/mips/macro-assembler-mips.cc
b/src/mips/macro-assembler-mips.cc
index
279eba314911ad49f92c63ffde651354496896a1..06c7a1c7b479490341ac9d15e15b3776ffac02fb
100644
--- a/src/mips/macro-assembler-mips.cc
+++ b/src/mips/macro-assembler-mips.cc
@@ -5723,9 +5723,9 @@ void CodePatcher::ChangeBranchCondition(Condition
cond) {
}
-void MacroAssembler::FlooringDiv(Register result,
- Register dividend,
- int32_t divisor) {
+void MacroAssembler::TruncatingDiv(Register result,
+ Register dividend,
+ int32_t divisor) {
ASSERT(!dividend.is(result));
ASSERT(!dividend.is(at));
ASSERT(!result.is(at));
@@ -5739,9 +5739,9 @@ void MacroAssembler::FlooringDiv(Register result,
if (divisor < 0 && ms.multiplier() > 0) {
Subu(result, result, Operand(dividend));
}
- if (ms.shift() > 0) {
- sra(result, result, ms.shift());
- }
+ if (ms.shift() > 0) sra(result, result, ms.shift());
+ srl(at, dividend, 31);
+ Addu(result, result, Operand(at));
}
Index: src/mips/macro-assembler-mips.h
diff --git a/src/mips/macro-assembler-mips.h
b/src/mips/macro-assembler-mips.h
index
f484a288c94e4f8c4f3becbbee662810b53f4a31..db9f1a2c76d9dba76e35d82d1d07c3826c515e8e
100644
--- a/src/mips/macro-assembler-mips.h
+++ b/src/mips/macro-assembler-mips.h
@@ -1304,9 +1304,9 @@ const Operand& rt = Operand(zero_reg),
BranchDelaySlot bd = PROTECT
return code_object_;
}
- // Emit code for a flooring division by a constant. The dividend
register is
+ // Emit code for a truncating division by a constant. The dividend
register is
// unchanged and at gets clobbered. Dividend and result must be
different.
- void FlooringDiv(Register result, Register dividend, int32_t divisor);
+ void TruncatingDiv(Register result, Register dividend, int32_t divisor);
//
-------------------------------------------------------------------------
// StatsCounter support.
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.