Chromium Code Reviews| Index: src/compiler/ia32/instruction-selector-ia32.cc |
| diff --git a/src/compiler/ia32/instruction-selector-ia32.cc b/src/compiler/ia32/instruction-selector-ia32.cc |
| index beec701903ec4598f26fb3d093b7898b2ea27804..2ca56a480e9579b4e023f41d88329d541caaf503 100644 |
| --- a/src/compiler/ia32/instruction-selector-ia32.cc |
| +++ b/src/compiler/ia32/instruction-selector-ia32.cc |
| @@ -718,7 +718,7 @@ void InstructionSelector::VisitFloat64RoundTiesAway(Node* node) { |
| } |
| -void InstructionSelector::VisitCall(Node* node) { |
| +void InstructionSelector::VisitCall(Node* node, BasicBlock* handler) { |
| IA32OperandGenerator g(this); |
| const CallDescriptor* descriptor = OpParameter<const CallDescriptor*>(node); |
| @@ -745,6 +745,13 @@ void InstructionSelector::VisitCall(Node* node) { |
| Emit(kIA32Push, g.NoOutput(), value); |
| } |
| + // Pass label of exception handler block. |
| + CallDescriptor::Flags flags; |
|
Benedikt Meurer
2015/02/19 18:31:19
how about initializing flags to descriptor->flags(
Michael Starzinger
2015/02/20 10:04:54
Done.
|
| + 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()) { |
| @@ -759,7 +766,7 @@ void InstructionSelector::VisitCall(Node* node) { |
| UNREACHABLE(); |
| return; |
| } |
| - opcode |= MiscField::encode(descriptor->flags()); |
| + opcode |= MiscField::encode(descriptor->flags() | flags); |
| // Emit the call instruction. |
| InstructionOperand* first_output = |