| Index: src/ppc/lithium-codegen-ppc.cc
|
| diff --git a/src/ppc/lithium-codegen-ppc.cc b/src/ppc/lithium-codegen-ppc.cc
|
| index 706ab20520a06355ef307f8b6a0996137d52b3fb..4646ce644373330f6fb41092eec2a47affcb6ccf 100644
|
| --- a/src/ppc/lithium-codegen-ppc.cc
|
| +++ b/src/ppc/lithium-codegen-ppc.cc
|
| @@ -2941,22 +2941,25 @@ void LCodeGen::DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
|
| LoadContextFromDeferred(instr->context());
|
|
|
| __ Move(InstanceofStub::right(), instr->function());
|
| - // Include instructions below in delta: mov + call = mov + (mov + 2)
|
| - static const int kAdditionalDelta = 2 * Assembler::kMovInstructions + 2;
|
| - int delta = masm_->InstructionsGeneratedSince(map_check) + kAdditionalDelta;
|
| {
|
| Assembler::BlockTrampolinePoolScope block_trampoline_pool(masm_);
|
| - if (Assembler::kMovInstructions != 1 &&
|
| - is_int16(delta * Instruction::kInstrSize)) {
|
| - // The following mov will be an li rather than a multi-instruction form
|
| - delta -= Assembler::kMovInstructions - 1;
|
| - }
|
| + Handle<Code> code = stub.GetCode();
|
| + // Include instructions below in delta: bitwise_mov32 + call
|
| + int delta = (masm_->InstructionsGeneratedSince(map_check) + 2) *
|
| + Instruction::kInstrSize +
|
| + masm_->CallSize(code);
|
| // r8 is used to communicate the offset to the location of the map check.
|
| - __ mov(r8, Operand(delta * Instruction::kInstrSize));
|
| + if (is_int16(delta)) {
|
| + delta -= Instruction::kInstrSize;
|
| + __ li(r8, Operand(delta));
|
| + } else {
|
| + __ bitwise_mov32(r8, delta);
|
| + }
|
| + CallCodeGeneric(code, RelocInfo::CODE_TARGET, instr,
|
| + RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS);
|
| + DCHECK(delta / Instruction::kInstrSize ==
|
| + masm_->InstructionsGeneratedSince(map_check));
|
| }
|
| - CallCodeGeneric(stub.GetCode(), RelocInfo::CODE_TARGET, instr,
|
| - RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS);
|
| - DCHECK(delta == masm_->InstructionsGeneratedSince(map_check));
|
| LEnvironment* env = instr->GetDeferredLazyDeoptimizationEnvironment();
|
| safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index());
|
| // Put the result value (r3) into the result register slot and
|
|
|