| Index: src/compiler/code-generator.cc
|
| diff --git a/src/compiler/code-generator.cc b/src/compiler/code-generator.cc
|
| index f3886593b14b5fadd4ccc27be037f88222ce42f1..968abd2e7c6ef05b8bd0fe2876d90bc764b27d49 100644
|
| --- a/src/compiler/code-generator.cc
|
| +++ b/src/compiler/code-generator.cc
|
| @@ -417,8 +417,18 @@ void CodeGenerator::AssembleSourcePosition(Instruction* instr) {
|
| }
|
| }
|
|
|
| +bool CodeGenerator::GetSlotAboveSPAfterGap(Instruction* instr, int* slot) {
|
| + if (instr->IsTailCall()) {
|
| + InstructionOperandConverter g(this, instr);
|
| + *slot = g.InputInt32(instr->InputCount() - 1);
|
| + return true;
|
| + } else {
|
| + return false;
|
| + }
|
| +}
|
|
|
| void CodeGenerator::AssembleGaps(Instruction* instr) {
|
| + AssemblePreGaps(instr);
|
| for (int i = Instruction::FIRST_GAP_POSITION;
|
| i <= Instruction::LAST_GAP_POSITION; i++) {
|
| Instruction::GapPosition inner_pos =
|
| @@ -426,6 +436,7 @@ void CodeGenerator::AssembleGaps(Instruction* instr) {
|
| ParallelMove* move = instr->GetParallelMove(inner_pos);
|
| if (move != nullptr) resolver()->Resolve(move);
|
| }
|
| + AssemblePostGaps(instr);
|
| }
|
|
|
|
|
| @@ -799,18 +810,6 @@ DeoptimizationExit* CodeGenerator::AddDeoptimizationExit(
|
| return exit;
|
| }
|
|
|
| -int CodeGenerator::TailCallFrameStackSlotDelta(int stack_param_delta) {
|
| - // Leave the PC on the stack on platforms that have that as part of their ABI
|
| - int pc_slots = V8_TARGET_ARCH_STORES_RETURN_ADDRESS_ON_STACK ? 1 : 0;
|
| - int sp_slot_delta = frame_access_state()->has_frame()
|
| - ? (frame()->GetTotalFrameSlotCount() - pc_slots)
|
| - : 0;
|
| - // Discard only slots that won't be used by new parameters.
|
| - sp_slot_delta += stack_param_delta;
|
| - return sp_slot_delta;
|
| -}
|
| -
|
| -
|
| OutOfLineCode::OutOfLineCode(CodeGenerator* gen)
|
| : frame_(gen->frame()), masm_(gen->masm()), next_(gen->ools_) {
|
| gen->ools_ = this;
|
|
|