Revision: 25081
Author:   [email protected]
Date:     Mon Nov  3 16:40:54 2014 UTC
Log:      MIPS: [turbofan] Also optimize unsigned division by constant.

Port r25061 (7fe697f)

TEST=cctest,mjsunit,unittests
BUG=
[email protected]

Review URL: https://codereview.chromium.org/701543002
https://code.google.com/p/v8/source/detail?r=25081

Modified:
 /branches/bleeding_edge/src/compiler/mips/code-generator-mips.cc
 /branches/bleeding_edge/src/compiler/mips/instruction-codes-mips.h
 /branches/bleeding_edge/src/compiler/mips/instruction-selector-mips.cc
 /branches/bleeding_edge/src/mips/macro-assembler-mips.cc
 /branches/bleeding_edge/src/mips/macro-assembler-mips.h

=======================================
--- /branches/bleeding_edge/src/compiler/mips/code-generator-mips.cc Mon Oct 27 12:39:20 2014 UTC +++ /branches/bleeding_edge/src/compiler/mips/code-generator-mips.cc Mon Nov 3 16:40:54 2014 UTC
@@ -188,6 +188,9 @@
     case kMipsMulHigh:
       __ Mulh(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1));
       break;
+    case kMipsMulHighU:
+      __ Mulhu(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1));
+      break;
     case kMipsDiv:
       __ Div(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1));
       break;
=======================================
--- /branches/bleeding_edge/src/compiler/mips/instruction-codes-mips.h Tue Oct 14 17:26:14 2014 UTC +++ /branches/bleeding_edge/src/compiler/mips/instruction-codes-mips.h Mon Nov 3 16:40:54 2014 UTC
@@ -18,6 +18,7 @@
   V(MipsSubOvf)                    \
   V(MipsMul)                       \
   V(MipsMulHigh)                   \
+  V(MipsMulHighU)                  \
   V(MipsDiv)                       \
   V(MipsDivU)                      \
   V(MipsMod)                       \
=======================================
--- /branches/bleeding_edge/src/compiler/mips/instruction-selector-mips.cc Thu Oct 30 14:15:20 2014 UTC +++ /branches/bleeding_edge/src/compiler/mips/instruction-selector-mips.cc Mon Nov 3 16:40:54 2014 UTC
@@ -305,6 +305,13 @@
Emit(kMipsMulHigh, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0)),
        g.UseRegister(node->InputAt(1)));
 }
+
+
+void InstructionSelector::VisitUint32MulHigh(Node* node) {
+  MipsOperandGenerator g(this);
+ Emit(kMipsMulHighU, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0)),
+       g.UseRegister(node->InputAt(1)));
+}


 void InstructionSelector::VisitInt32Div(Node* node) {
=======================================
--- /branches/bleeding_edge/src/mips/macro-assembler-mips.cc Mon Oct 13 14:41:33 2014 UTC +++ /branches/bleeding_edge/src/mips/macro-assembler-mips.cc Mon Nov 3 16:40:54 2014 UTC
@@ -738,6 +738,28 @@
     mult(rs, at);
   }
 }
+
+
+void MacroAssembler::Mulhu(Register rd, Register rs, const Operand& rt) {
+  if (rt.is_reg()) {
+    if (!IsMipsArchVariant(kMips32r6)) {
+      multu(rs, rt.rm());
+      mfhi(rd);
+    } else {
+      muhu(rd, rs, rt.rm());
+    }
+  } else {
+    // li handles the relocation.
+    DCHECK(!rs.is(at));
+    li(at, rt);
+    if (!IsMipsArchVariant(kMips32r6)) {
+      multu(rs, at);
+      mfhi(rd);
+    } else {
+      muhu(rd, rs, at);
+    }
+  }
+}


 void MacroAssembler::Multu(Register rs, const Operand& rt) {
=======================================
--- /branches/bleeding_edge/src/mips/macro-assembler-mips.h Mon Oct 13 14:41:33 2014 UTC +++ /branches/bleeding_edge/src/mips/macro-assembler-mips.h Mon Nov 3 16:40:54 2014 UTC
@@ -593,6 +593,7 @@
   DEFINE_INSTRUCTION(Modu);
   DEFINE_INSTRUCTION(Mulh);
   DEFINE_INSTRUCTION2(Mult);
+  DEFINE_INSTRUCTION(Mulhu);
   DEFINE_INSTRUCTION2(Multu);
   DEFINE_INSTRUCTION2(Div);
   DEFINE_INSTRUCTION2(Divu);

--
--
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