| Index: src/arm/lithium-codegen-arm.cc
|
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
|
| index 0a28d343bac887ccdeb673f9b8ea4180e05da031..204a15586c6fb71d886d8326c3a9a2b2661397c5 100644
|
| --- a/src/arm/lithium-codegen-arm.cc
|
| +++ b/src/arm/lithium-codegen-arm.cc
|
| @@ -1619,6 +1619,27 @@ void LCodeGen::DoSubI(LSubI* instr) {
|
| }
|
|
|
|
|
| +void LCodeGen::DoRSubI(LRSubI* instr) {
|
| + LOperand* left = instr->left();
|
| + LOperand* right = instr->right();
|
| + LOperand* result = instr->result();
|
| + bool can_overflow = instr->hydrogen()->CheckFlag(HValue::kCanOverflow);
|
| + SBit set_cond = can_overflow ? SetCC : LeaveCC;
|
| +
|
| + if (right->IsStackSlot() || right->IsArgument()) {
|
| + Register right_reg = EmitLoadRegister(right, ip);
|
| + __ rsb(ToRegister(result), ToRegister(left), Operand(right_reg), set_cond);
|
| + } else {
|
| + ASSERT(right->IsRegister() || right->IsConstantOperand());
|
| + __ rsb(ToRegister(result), ToRegister(left), ToOperand(right), set_cond);
|
| + }
|
| +
|
| + if (can_overflow) {
|
| + DeoptimizeIf(vs, instr->environment());
|
| + }
|
| +}
|
| +
|
| +
|
| void LCodeGen::DoConstantI(LConstantI* instr) {
|
| ASSERT(instr->result()->IsRegister());
|
| __ mov(ToRegister(instr->result()), Operand(instr->value()));
|
|
|