Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index e07118317c464ba1041fc36814dfcfda6b56fb16..ca11fa542e1ee4ed1744838f88330675525fb134 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -1464,6 +1464,9 @@ void LCodeGen::DoShiftI(LShiftI* instr) { |
// Mask the right_op operand. |
__ and_(scratch, ToRegister(right_op), Operand(0x1F)); |
switch (instr->op()) { |
+ case Token::ROR: |
+ __ mov(result, Operand(left, ROR, scratch)); |
+ break; |
case Token::SAR: |
__ mov(result, Operand(left, ASR, scratch)); |
break; |
@@ -1487,6 +1490,13 @@ void LCodeGen::DoShiftI(LShiftI* instr) { |
int value = ToInteger32(LConstantOperand::cast(right_op)); |
uint8_t shift_count = static_cast<uint8_t>(value & 0x1F); |
switch (instr->op()) { |
+ case Token::ROR: |
+ if (shift_count != 0) { |
+ __ mov(result, Operand(left, ROR, shift_count)); |
+ } else { |
+ __ Move(result, left); |
+ } |
+ break; |
case Token::SAR: |
if (shift_count != 0) { |
__ mov(result, Operand(left, ASR, shift_count)); |