| Index: src/arm/lithium-codegen-arm.cc
|
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
|
| index 45ebfae2c4d53278cfd0d2e12a491ded77d475c6..8d87465abaa2712399ec38bd5557223054c0a912 100644
|
| --- a/src/arm/lithium-codegen-arm.cc
|
| +++ b/src/arm/lithium-codegen-arm.cc
|
| @@ -821,7 +821,7 @@ void LCodeGen::DeoptimizeIf(Condition cc, LEnvironment* environment) {
|
| 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;
|
| @@ -832,18 +832,23 @@ void LCodeGen::DeoptimizeIf(Condition cc, LEnvironment* environment) {
|
| }
|
|
|
| ASSERT(FLAG_deopt_every_n_times < 2); // Other values not supported on ARM.
|
| -
|
| if (FLAG_deopt_every_n_times == 1 && info_->opt_count() == id) {
|
| __ Jump(entry, RelocInfo::RUNTIME_ENTRY);
|
| return;
|
| }
|
|
|
| - if (FLAG_trap_on_deopt) __ stop("trap_on_deopt", cc);
|
| + if (FLAG_trap_on_deopt) {
|
| + __ stop("trap_on_deopt", cc);
|
| + }
|
|
|
| - bool needs_lazy_deopt = info()->IsStub();
|
| ASSERT(info()->IsStub() || frame_is_built_);
|
| - if (cc == al && !needs_lazy_deopt) {
|
| - __ Jump(entry, RelocInfo::RUNTIME_ENTRY);
|
| + bool needs_lazy_deopt = info()->IsStub();
|
| + if (cc == al && frame_is_built_) {
|
| + if (needs_lazy_deopt) {
|
| + __ Call(entry, RelocInfo::RUNTIME_ENTRY);
|
| + } else {
|
| + __ Jump(entry, RelocInfo::RUNTIME_ENTRY);
|
| + }
|
| } else {
|
| // We often have several deopts to the same entry, reuse the last
|
| // jump entry if this is the case.
|
|
|