Index: src/mips/lithium-codegen-mips.cc |
diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc |
index 86669f48f9c6ee1ba1303aaad65763df60090608..734ed0f879623244ae093a0c23f4459e320ae22c 100644 |
--- a/src/mips/lithium-codegen-mips.cc |
+++ b/src/mips/lithium-codegen-mips.cc |
@@ -772,7 +772,7 @@ void LCodeGen::DeoptimizeIf(Condition cc, |
RegisterEnvironmentForDeoptimization(environment, Safepoint::kNoLazyDeopt); |
ASSERT(environment->HasBeenRegistered()); |
int id = environment->deoptimization_index(); |
- |
+ ASSERT(info()->IsOptimizing() || info()->IsStub()); |
Deoptimizer::BailoutType bailout_type = info()->IsStub() |
? Deoptimizer::LAZY |
: Deoptimizer::EAGER; |
@@ -783,7 +783,6 @@ void LCodeGen::DeoptimizeIf(Condition cc, |
} |
ASSERT(FLAG_deopt_every_n_times < 2); // Other values not supported on MIPS. |
- |
if (FLAG_deopt_every_n_times == 1 && info_->opt_count() == id) { |
__ Jump(entry, RelocInfo::RUNTIME_ENTRY); |
return; |
@@ -798,10 +797,14 @@ void LCodeGen::DeoptimizeIf(Condition cc, |
__ bind(&skip); |
} |
- bool needs_lazy_deopt = info()->IsStub(); |
ASSERT(info()->IsStub() || frame_is_built_); |
- if (cc == al && !needs_lazy_deopt) { |
- __ Jump(entry, RelocInfo::RUNTIME_ENTRY, cc, src1, src2); |
+ bool needs_lazy_deopt = info()->IsStub(); |
+ if (cc == al && frame_is_built_) { |
+ if (needs_lazy_deopt) { |
+ __ Call(entry, RelocInfo::RUNTIME_ENTRY, cc, src1, src2); |
+ } else { |
+ __ Jump(entry, RelocInfo::RUNTIME_ENTRY, cc, src1, src2); |
+ } |
} else { |
// We often have several deopts to the same entry, reuse the last |
// jump entry if this is the case. |