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