diff options
Diffstat (limited to 'deps/v8/src/compiler/backend/ppc/instruction-selector-ppc.cc')
-rw-r--r-- | deps/v8/src/compiler/backend/ppc/instruction-selector-ppc.cc | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/deps/v8/src/compiler/backend/ppc/instruction-selector-ppc.cc b/deps/v8/src/compiler/backend/ppc/instruction-selector-ppc.cc index bfc77b9412..ef8490a726 100644 --- a/deps/v8/src/compiler/backend/ppc/instruction-selector-ppc.cc +++ b/deps/v8/src/compiler/backend/ppc/instruction-selector-ppc.cc @@ -65,17 +65,6 @@ class PPCOperandGenerator final : public OperandGenerator { } return false; } - - // Use the stack pointer if the node is LoadStackPointer, otherwise assign a - // register. - InstructionOperand UseRegisterOrStackPointer(Node* node) { - if (node->opcode() == IrOpcode::kLoadStackPointer) { - return LocationOperand(LocationOperand::EXPLICIT, - LocationOperand::REGISTER, - MachineRepresentation::kWord32, sp.code()); - } - return UseRegister(node); - } }; namespace { @@ -267,7 +256,8 @@ void InstructionSelector::VisitStore(Node* node) { rep = store_rep.representation(); } - if (write_barrier_kind != kNoWriteBarrier) { + if (write_barrier_kind != kNoWriteBarrier && + V8_LIKELY(!FLAG_disable_write_barriers)) { DCHECK(CanBeTaggedPointer(rep)); AddressingMode addressing_mode; InstructionOperand inputs[3]; @@ -558,6 +548,15 @@ void InstructionSelector::VisitWord32Xor(Node* node) { } } +void InstructionSelector::VisitStackPointerGreaterThan( + Node* node, FlagsContinuation* cont) { + Node* const value = node->InputAt(0); + InstructionCode opcode = kArchStackPointerGreaterThan; + + PPCOperandGenerator g(this); + EmitWithContinuation(opcode, g.UseRegister(value), cont); +} + #if V8_TARGET_ARCH_PPC64 void InstructionSelector::VisitWord64Xor(Node* node) { PPCOperandGenerator g(this); @@ -1456,15 +1455,15 @@ void VisitWordCompare(InstructionSelector* selector, Node* node, // Match immediates on left or right side of comparison. if (g.CanBeImmediate(right, immediate_mode)) { - VisitCompare(selector, opcode, g.UseRegisterOrStackPointer(left), - g.UseImmediate(right), cont); + VisitCompare(selector, opcode, g.UseRegister(left), g.UseImmediate(right), + cont); } else if (g.CanBeImmediate(left, immediate_mode)) { if (!commutative) cont->Commute(); - VisitCompare(selector, opcode, g.UseRegisterOrStackPointer(right), - g.UseImmediate(left), cont); + VisitCompare(selector, opcode, g.UseRegister(right), g.UseImmediate(left), + cont); } else { - VisitCompare(selector, opcode, g.UseRegisterOrStackPointer(left), - g.UseRegisterOrStackPointer(right), cont); + VisitCompare(selector, opcode, g.UseRegister(left), g.UseRegister(right), + cont); } } @@ -1639,6 +1638,9 @@ void InstructionSelector::VisitWordCompareZero(Node* user, Node* value, // case IrOpcode::kWord64Shr: // case IrOpcode::kWord64Ror: #endif + case IrOpcode::kStackPointerGreaterThan: + cont->OverwriteAndNegateIfEqual(kStackPointerGreaterThanCondition); + return VisitStackPointerGreaterThan(value, cont); default: break; } @@ -2281,6 +2283,8 @@ void InstructionSelector::VisitF32x4Sub(Node* node) { UNIMPLEMENTED(); } void InstructionSelector::VisitF32x4Mul(Node* node) { UNIMPLEMENTED(); } +void InstructionSelector::VisitF32x4Div(Node* node) { UNIMPLEMENTED(); } + void InstructionSelector::VisitF32x4Min(Node* node) { UNIMPLEMENTED(); } void InstructionSelector::VisitF32x4Max(Node* node) { UNIMPLEMENTED(); } |