Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index ae9aae392cacb9d2091742543582c924b1f9e4df..b8478bcf11586ed73179255141c0d134b3ba7a57 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -720,7 +720,6 @@ void LCodeGen::CallCodeGeneric(Handle<Code> code, |
LInstruction* instr, |
SafepointMode safepoint_mode, |
TargetAddressStorageMode storage_mode) { |
- EnsureSpaceForLazyDeopt(Deoptimizer::patch_size()); |
ASSERT(instr != NULL); |
// Block literal pool emission to ensure nop indicating no inlined smi code |
// is in the correct position. |
@@ -5579,26 +5578,27 @@ void LCodeGen::EmitIsConstructCall(Register temp1, Register temp2) { |
void LCodeGen::EnsureSpaceForLazyDeopt(int space_needed) { |
- if (info()->IsStub()) return; |
- // Ensure that we have enough space after the previous lazy-bailout |
- // instruction for patching the code here. |
- int current_pc = masm()->pc_offset(); |
- if (current_pc < last_lazy_deopt_pc_ + space_needed) { |
- // Block literal pool emission for duration of padding. |
- Assembler::BlockConstPoolScope block_const_pool(masm()); |
- int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; |
- ASSERT_EQ(0, padding_size % Assembler::kInstrSize); |
- while (padding_size > 0) { |
- __ nop(); |
- padding_size -= Assembler::kInstrSize; |
+ if (!info()->IsStub()) { |
+ // Ensure that we have enough space after the previous lazy-bailout |
+ // instruction for patching the code here. |
+ int current_pc = masm()->pc_offset(); |
+ if (current_pc < last_lazy_deopt_pc_ + space_needed) { |
+ // Block literal pool emission for duration of padding. |
+ Assembler::BlockConstPoolScope block_const_pool(masm()); |
+ int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; |
+ ASSERT_EQ(0, padding_size % Assembler::kInstrSize); |
+ while (padding_size > 0) { |
+ __ nop(); |
+ padding_size -= Assembler::kInstrSize; |
+ } |
} |
} |
+ last_lazy_deopt_pc_ = masm()->pc_offset(); |
} |
void LCodeGen::DoLazyBailout(LLazyBailout* instr) { |
EnsureSpaceForLazyDeopt(Deoptimizer::patch_size()); |
- last_lazy_deopt_pc_ = masm()->pc_offset(); |
ASSERT(instr->HasEnvironment()); |
LEnvironment* env = instr->environment(); |
RegisterEnvironmentForDeoptimization(env, Safepoint::kLazyDeopt); |
@@ -5673,7 +5673,6 @@ void LCodeGen::DoStackCheck(LStackCheck* instr) { |
RelocInfo::CODE_TARGET, |
instr); |
EnsureSpaceForLazyDeopt(Deoptimizer::patch_size()); |
- last_lazy_deopt_pc_ = masm()->pc_offset(); |
__ bind(&done); |
RegisterEnvironmentForDeoptimization(env, Safepoint::kLazyDeopt); |
safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index()); |
@@ -5686,7 +5685,6 @@ void LCodeGen::DoStackCheck(LStackCheck* instr) { |
__ cmp(sp, Operand(ip)); |
__ b(lo, deferred_stack_check->entry()); |
EnsureSpaceForLazyDeopt(Deoptimizer::patch_size()); |
- last_lazy_deopt_pc_ = masm()->pc_offset(); |
__ bind(instr->done_label()); |
deferred_stack_check->SetExit(instr->done_label()); |
RegisterEnvironmentForDeoptimization(env, Safepoint::kLazyDeopt); |