summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/backend/ppc/instruction-selector-ppc.cc
diff options
context:
space:
mode:
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.cc40
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(); }