| Index: src/arm/lithium-codegen-arm.cc
|
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
|
| index 8f28651e326da89bb99e9cb17393c374eb099bd8..d7d3c5eab40481aa1c153053e8b873f914948eb6 100644
|
| --- a/src/arm/lithium-codegen-arm.cc
|
| +++ b/src/arm/lithium-codegen-arm.cc
|
| @@ -1744,7 +1744,14 @@ void LCodeGen::DoShiftI(LShiftI* instr) {
|
| break;
|
| case Token::SHL:
|
| if (shift_count != 0) {
|
| - __ mov(result, Operand(left, LSL, shift_count));
|
| + if (instr->hydrogen_value()->representation().IsSmi() &&
|
| + instr->can_deopt()) {
|
| + __ mov(result, Operand(left, LSL, shift_count - 1));
|
| + __ SmiTag(result, result, SetCC);
|
| + DeoptimizeIf(vs, instr->environment());
|
| + } else {
|
| + __ mov(result, Operand(left, LSL, shift_count));
|
| + }
|
| } else {
|
| __ Move(result, left);
|
| }
|
|
|