Index: src/arm/simulator-arm.cc |
diff --git a/src/arm/simulator-arm.cc b/src/arm/simulator-arm.cc |
index a057de58ccf843da9f38ae581673063b71ed3af4..2089f8af220410597414f55ddfdbcfe4f1e522b8 100644 |
--- a/src/arm/simulator-arm.cc |
+++ b/src/arm/simulator-arm.cc |
@@ -1498,7 +1498,14 @@ int32_t Simulator::GetShiftRm(Instruction* instr, bool* carry_out) { |
} |
case ROR: { |
- UNIMPLEMENTED(); |
+ if (shift_amount == 0) { |
+ *carry_out = c_flag_; |
+ } else { |
+ int32_t left = result >> shift_amount; |
+ int32_t right = result << (32 - shift_amount); |
+ result = right | left; |
+ *carry_out = (result >> (shift_amount - 1)) & 1; |
+ } |
break; |
} |