Revision: 20082
Author: [email protected]
Date: Wed Mar 19 15:27:38 2014 UTC
Log: 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=
[email protected]
Review URL: https://codereview.chromium.org/203443009
Patch from Balazs Kilvady <[email protected]>.
http://code.google.com/p/v8/source/detail?r=20082
Modified:
/branches/bleeding_edge/src/mips/lithium-codegen-mips.cc
/branches/bleeding_edge/src/mips/macro-assembler-mips.cc
/branches/bleeding_edge/src/mips/macro-assembler-mips.h
=======================================
--- /branches/bleeding_edge/src/mips/lithium-codegen-mips.cc Tue Mar 18
13:29:29 2014 UTC
+++ /branches/bleeding_edge/src/mips/lithium-codegen-mips.cc Wed Mar 19
15:27:38 2014 UTC
@@ -1111,9 +1111,7 @@
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 @@
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 @@
DeoptimizeIf(eq, instr->environment(), dividend, Operand(zero_reg));
}
- __ FlooringDiv(result, dividend, divisor);
+ // TODO(svenpanne) Add correction terms.
+ __ TruncatingDiv(result, dividend, divisor);
}
=======================================
--- /branches/bleeding_edge/src/mips/macro-assembler-mips.cc Mon Mar 17
18:27:44 2014 UTC
+++ /branches/bleeding_edge/src/mips/macro-assembler-mips.cc Wed Mar 19
15:27:38 2014 UTC
@@ -5723,9 +5723,9 @@
}
-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 @@
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));
}
=======================================
--- /branches/bleeding_edge/src/mips/macro-assembler-mips.h Mon Mar 17
18:27:44 2014 UTC
+++ /branches/bleeding_edge/src/mips/macro-assembler-mips.h Wed Mar 19
15:27:38 2014 UTC
@@ -1304,9 +1304,9 @@
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.