| Index: src/compiler/mips64/instruction-selector-mips64.cc
 | 
| diff --git a/src/compiler/mips64/instruction-selector-mips64.cc b/src/compiler/mips64/instruction-selector-mips64.cc
 | 
| index 5b32e10ee04f94cb8ce2409ead221d0da2f9119a..96a67eb87f4c151c9dfc57f4ba5e846147df7d6b 100644
 | 
| --- a/src/compiler/mips64/instruction-selector-mips64.cc
 | 
| +++ b/src/compiler/mips64/instruction-selector-mips64.cc
 | 
| @@ -648,7 +648,8 @@ void InstructionSelector::VisitFloat64RoundTiesAway(Node* node) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void InstructionSelector::VisitCall(Node* node, BasicBlock* handler) {
 | 
| +void InstructionSelector::VisitCall(Node* node, BasicBlock* handler,
 | 
| +                                    CallMode call_mode) {
 | 
|    Mips64OperandGenerator g(this);
 | 
|    const CallDescriptor* descriptor = OpParameter<const CallDescriptor*>(node);
 | 
|  
 | 
| @@ -683,14 +684,15 @@ void InstructionSelector::VisitCall(Node* node, BasicBlock* handler) {
 | 
|    }
 | 
|  
 | 
|    // Select the appropriate opcode based on the call type.
 | 
| +  bool is_tail_call = call_mode == TAIL_CALL;
 | 
|    InstructionCode opcode;
 | 
|    switch (descriptor->kind()) {
 | 
|      case CallDescriptor::kCallCodeObject: {
 | 
| -      opcode = kArchCallCodeObject;
 | 
| +      opcode = is_tail_call ? kArchTailCallCodeObject : kArchCallCodeObject;
 | 
|        break;
 | 
|      }
 | 
|      case CallDescriptor::kCallJSFunction:
 | 
| -      opcode = kArchCallJSFunction;
 | 
| +      opcode = is_tail_call ? kArchTailCallJSFunction : kArchCallJSFunction;
 | 
|        break;
 | 
|      default:
 | 
|        UNREACHABLE();
 | 
| @@ -699,10 +701,12 @@ void InstructionSelector::VisitCall(Node* node, BasicBlock* handler) {
 | 
|    opcode |= MiscField::encode(flags);
 | 
|  
 | 
|    // Emit the call instruction.
 | 
| +  size_t size = is_tail_call ? 0 : buffer.outputs.size();
 | 
| +  InstructionOperand* first_output =
 | 
| +      size > 0 ? &buffer.outputs.front() : nullptr;
 | 
|    Instruction* call_instr =
 | 
| -      Emit(opcode, buffer.outputs.size(), &buffer.outputs.front(),
 | 
| -           buffer.instruction_args.size(), &buffer.instruction_args.front());
 | 
| -
 | 
| +      Emit(opcode, size, first_output, buffer.instruction_args.size(),
 | 
| +           &buffer.instruction_args.front());
 | 
|    call_instr->MarkAsCall();
 | 
|  }
 | 
|  
 | 
| 
 |