summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/s390/instruction-selector-s390.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/s390/instruction-selector-s390.cc')
-rw-r--r--deps/v8/src/compiler/s390/instruction-selector-s390.cc26
1 files changed, 21 insertions, 5 deletions
diff --git a/deps/v8/src/compiler/s390/instruction-selector-s390.cc b/deps/v8/src/compiler/s390/instruction-selector-s390.cc
index 228ec3c0d5..f4e8ea13d2 100644
--- a/deps/v8/src/compiler/s390/instruction-selector-s390.cc
+++ b/deps/v8/src/compiler/s390/instruction-selector-s390.cc
@@ -702,6 +702,15 @@ void VisitBinOp(InstructionSelector* selector, Node* node,
} // namespace
+void InstructionSelector::VisitStackSlot(Node* node) {
+ StackSlotRepresentation rep = StackSlotRepresentationOf(node->op());
+ int slot = frame_->AllocateSpillSlot(rep.size());
+ OperandGenerator g(this);
+
+ Emit(kArchStackSlot, g.DefineAsRegister(node),
+ sequence()->AddImmediate(Constant(slot)), 0, nullptr);
+}
+
void InstructionSelector::VisitLoad(Node* node) {
S390OperandGenerator g(this);
ArchOpcode opcode = SelectLoadOpcode(node);
@@ -2050,11 +2059,18 @@ void VisitWordCompareZero(InstructionSelector* selector, Node* user,
return VisitWord32BinOp(selector, node, kS390_Sub32,
SubOperandMode, cont);
case IrOpcode::kInt32MulWithOverflow:
- cont->OverwriteAndNegateIfEqual(kNotEqual);
- return VisitWord32BinOp(
- selector, node, kS390_Mul32WithOverflow,
- OperandMode::kInt32Imm | OperandMode::kAllowDistinctOps,
- cont);
+ if (CpuFeatures::IsSupported(MISC_INSTR_EXT2)) {
+ cont->OverwriteAndNegateIfEqual(kOverflow);
+ return VisitWord32BinOp(
+ selector, node, kS390_Mul32,
+ OperandMode::kAllowRRR | OperandMode::kAllowRM, cont);
+ } else {
+ cont->OverwriteAndNegateIfEqual(kNotEqual);
+ return VisitWord32BinOp(
+ selector, node, kS390_Mul32WithOverflow,
+ OperandMode::kInt32Imm | OperandMode::kAllowDistinctOps,
+ cont);
+ }
case IrOpcode::kInt32AbsWithOverflow:
cont->OverwriteAndNegateIfEqual(kOverflow);
return VisitWord32UnaryOp(selector, node, kS390_Abs32,