Index: src/mips/lithium-codegen-mips.cc |
diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc |
index 2d8939f8dae3ec3b2c9f57e3361ee18dbd4299e5..34c3155c65a99e61f4b93fc1b6c9b06ac8ab6b1a 100644 |
--- a/src/mips/lithium-codegen-mips.cc |
+++ b/src/mips/lithium-codegen-mips.cc |
@@ -738,13 +738,23 @@ void LCodeGen::DeoptimizeIf(Condition condition, |
return; |
} |
- ASSERT(FLAG_deopt_every_n_times < 2); // Other values not supported on MIPS. |
- if (FLAG_deopt_every_n_times == 1 && |
- !info()->IsStub() && |
- info()->opt_count() == id) { |
- ASSERT(frame_is_built_); |
+ if (FLAG_deopt_every_n_times != 0 && !info()->IsStub()) { |
+ Register scratch = scratch0(); |
+ ExternalReference count = ExternalReference::stress_deopt_count(isolate()); |
+ Label no_deopt; |
+ __ Push(a1, scratch); |
+ __ li(scratch, Operand(count)); |
+ __ lw(a1, MemOperand(scratch)); |
+ __ Subu(a1, a1, Operand(1)); |
+ __ Branch(&no_deopt, ne, a1, Operand(zero_reg)); |
+ __ li(a1, Operand(FLAG_deopt_every_n_times)); |
+ __ sw(a1, MemOperand(scratch)); |
+ __ Pop(a1, scratch); |
+ |
__ Call(entry, RelocInfo::RUNTIME_ENTRY); |
- return; |
+ __ bind(&no_deopt); |
+ __ sw(a1, MemOperand(scratch)); |
+ __ Pop(a1, scratch); |
} |
if (info()->ShouldTrapOnDeopt()) { |