Index: src/compiler/ppc/instruction-selector-ppc.cc |
diff --git a/src/compiler/ppc/instruction-selector-ppc.cc b/src/compiler/ppc/instruction-selector-ppc.cc |
index 3c700cbc8dfe4e4e21aede18684ef848774e01c3..bed80ed2ce4e87dfd3e289aa53d5a6ea00f67fa3 100644 |
--- a/src/compiler/ppc/instruction-selector-ppc.cc |
+++ b/src/compiler/ppc/instruction-selector-ppc.cc |
@@ -1378,7 +1378,7 @@ void InstructionSelector::VisitFloat64LessThanOrEqual(Node* node) { |
} |
-void InstructionSelector::VisitCall(Node* node) { |
+void InstructionSelector::VisitCall(Node* node, BasicBlock* handler) { |
PPCOperandGenerator g(this); |
const CallDescriptor* descriptor = OpParameter<CallDescriptor*>(node); |
@@ -1403,6 +1403,13 @@ void InstructionSelector::VisitCall(Node* node) { |
Emit(kPPC_Push, g.NoOutput(), g.UseRegister(*i)); |
} |
+ // Pass label of exception handler block. |
+ CallDescriptor::Flags flags = descriptor->flags(); |
+ if (handler != nullptr) { |
+ flags |= CallDescriptor::kHasExceptionHandler; |
+ buffer.instruction_args.push_back(g.Label(handler)); |
+ } |
+ |
// Select the appropriate opcode based on the call type. |
InstructionCode opcode; |
switch (descriptor->kind()) { |
@@ -1417,7 +1424,7 @@ void InstructionSelector::VisitCall(Node* node) { |
UNREACHABLE(); |
return; |
} |
- opcode |= MiscField::encode(descriptor->flags()); |
+ opcode |= MiscField::encode(flags); |
// Emit the call instruction. |
InstructionOperand* first_output = |