Index: src/mips/deoptimizer-mips.cc |
diff --git a/src/mips/deoptimizer-mips.cc b/src/mips/deoptimizer-mips.cc |
index 611fbaaf96511f9c2666f7f287ea4ed718d221e5..51c2e4677866aad648c8d69ceffe42574983a75c 100644 |
--- a/src/mips/deoptimizer-mips.cc |
+++ b/src/mips/deoptimizer-mips.cc |
@@ -119,7 +119,7 @@ void Deoptimizer::PatchStackCheckCodeAt(Code* unoptimized_code, |
const int kInstrSize = Assembler::kInstrSize; |
// This structure comes from FullCodeGenerator::EmitStackCheck. |
// The call of the stack guard check has the following form: |
- // sltu at, sp, t0 |
+ // sltu at, sp, t0 / slt at, a3, zero_reg (in case of count based interrupts) |
// beq at, zero_reg, ok |
// lui t9, <stack guard address> upper |
// ori t9, <stack guard address> lower |
@@ -167,7 +167,11 @@ void Deoptimizer::RevertStackCheckCodeAt(Code* unoptimized_code, |
// Restore the sltu instruction so beq can be taken again. |
CodePatcher patcher(pc_after - 6 * kInstrSize, 1); |
- patcher.masm()->sltu(at, sp, t0); |
+ if (FLAG_count_based_interrupts) { |
+ patcher.masm()->slt(at, a3, zero_reg); |
+ } else { |
+ patcher.masm()->sltu(at, sp, t0); |
+ } |
// Replace the on-stack replacement address in the load-immediate (lui/ori |
// pair) with the entry address of the normal stack-check code. |