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.

Reply via email to