PPC: [turbofan] Turn Math.clz32 into an inlinable builtin.
authormichael_dawson <michael_dawson@ca.ibm.com>
Tue, 24 Mar 2015 09:31:32 +0000 (02:31 -0700)
committerCommit bot <commit-bot@chromium.org>
Tue, 24 Mar 2015 09:31:45 +0000 (09:31 +0000)
Port 3aa206b86560da94f895625186295bf07a0301d8

Original commit message:
R=dcarney@chromium.org, yangguo@chromium.org
BUG=v8:3952
LOG=n

R=mbrandy@us.ibm.com, svenpanne@chromium.org, danno@chromium.org, jkummerow@chromium.org

Review URL: https://codereview.chromium.org/1028313003

Cr-Commit-Position: refs/heads/master@{#27391}

src/compiler/ppc/code-generator-ppc.cc
src/compiler/ppc/instruction-codes-ppc.h
src/compiler/ppc/instruction-selector-ppc.cc

index 92562f0..b843ad6 100644 (file)
@@ -839,6 +839,10 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) {
     case kPPC_NegFloat64:
       ASSEMBLE_FLOAT_UNOP_RC(fneg);
       break;
+    case kPPC_Cntlz32:
+      __ cntlzw_(i.OutputRegister(), i.InputRegister(0));
+      DCHECK_EQ(LeaveRC, i.OutputRCBit());
+      break;
     case kPPC_Cmp32:
       ASSEMBLE_COMPARE(cmpw, cmplw);
       break;
index 1eeaeec..bb0a771 100644 (file)
@@ -69,6 +69,7 @@ namespace compiler {
   V(PPC_RoundFloat64)              \
   V(PPC_MaxFloat64)                \
   V(PPC_MinFloat64)                \
+  V(PPC_Cntlz32)                   \
   V(PPC_Cmp32)                     \
   V(PPC_Cmp64)                     \
   V(PPC_CmpFloat64)                \
index 1c0e466..8d8fbda 100644 (file)
@@ -737,6 +737,12 @@ void InstructionSelector::VisitWord64Ror(Node* node) {
 #endif
 
 
+void InstructionSelector::VisitWord32Clz(Node* node) {
+  PPCOperandGenerator g(this);
+  Emit(kPPC_Cntlz32, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0)));
+}
+
+
 void InstructionSelector::VisitInt32Add(Node* node) {
   VisitBinop<Int32BinopMatcher>(this, node, kPPC_Add32, kInt16Imm);
 }