Index: src/mips/lithium-codegen-mips.cc |
diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc |
index 9a9688bde5ce97c7f3236f61b25a7906c7a7c84f..b989777c72fb6c6528817a4b838d356c0ba0ff4c 100644 |
--- a/src/mips/lithium-codegen-mips.cc |
+++ b/src/mips/lithium-codegen-mips.cc |
@@ -4162,42 +4162,25 @@ void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) { |
} |
-void LCodeGen::ApplyCheckIf(Condition condition, |
- LBoundsCheck* check, |
- Register src1, |
- const Operand& src2) { |
- if (FLAG_debug_code && check->hydrogen()->skip_check()) { |
+void LCodeGen::DoBoundsCheck(LBoundsCheck* instr) { |
+ Condition cc = instr->hydrogen()->allow_equality() ? hi : hs; |
+ Operand operand(0); |
+ Register reg; |
+ if (instr->index()->IsConstantOperand()) { |
+ operand = ToOperand(instr->index()); |
+ reg = ToRegister(instr->length()); |
+ cc = ReverseCondition(cc); |
+ } else { |
+ reg = ToRegister(instr->index()); |
+ operand = ToOperand(instr->length()); |
+ } |
+ if (FLAG_debug_code && instr->hydrogen()->skip_check()) { |
Label done; |
- __ Branch(&done, NegateCondition(condition), src1, src2); |
+ __ Branch(&done, NegateCondition(cc), reg, operand); |
__ stop("eliminated bounds check failed"); |
__ bind(&done); |
} else { |
- DeoptimizeIf(condition, check->environment(), src1, src2); |
- } |
-} |
- |
- |
-void LCodeGen::DoBoundsCheck(LBoundsCheck* instr) { |
- if (instr->hydrogen()->skip_check()) return; |
- |
- Condition condition = instr->hydrogen()->allow_equality() ? hi : hs; |
- if (instr->index()->IsConstantOperand()) { |
- int constant_index = |
- ToInteger32(LConstantOperand::cast(instr->index())); |
- if (instr->hydrogen()->length()->representation().IsSmi()) { |
- __ li(at, Operand(Smi::FromInt(constant_index))); |
- } else { |
- __ li(at, Operand(constant_index)); |
- } |
- ApplyCheckIf(condition, |
- instr, |
- at, |
- Operand(ToRegister(instr->length()))); |
- } else { |
- ApplyCheckIf(condition, |
- instr, |
- ToRegister(instr->index()), |
- Operand(ToRegister(instr->length()))); |
+ DeoptimizeIf(cc, instr->environment(), reg, operand); |
} |
} |