aboutsummaryrefslogtreecommitdiff
path: root/src/armv7
diff options
context:
space:
mode:
Diffstat (limited to 'src/armv7')
-rw-r--r--src/armv7/display.rs33
1 files changed, 18 insertions, 15 deletions
diff --git a/src/armv7/display.rs b/src/armv7/display.rs
index 5ceedd6..29d3ed6 100644
--- a/src/armv7/display.rs
+++ b/src/armv7/display.rs
@@ -97,22 +97,25 @@ impl<T: DisplaySink> DisplayingOperandVisitor<'_, T> {
match shift.into_shift() {
RegShiftStyle::RegImm(imm_shift) => {
self.f.write_reg(imm_shift.shiftee().number())?;
- if imm_shift.imm() != 0 || imm_shift.stype() != ShiftStyle::LSL {
+ let stype = imm_shift.stype();
+ if imm_shift.imm() != 0 || stype != ShiftStyle::LSL {
self.f.write_fixed_size(", ")?;
- self.emit_shift_type(imm_shift.stype())?;
- self.f.write_char(' ')?;
- let sh = imm_shift.imm();
- if sh >= 30 {
- self.f.write_char('3')?;
- self.f.write_char((sh - 30 + 0x30) as char)?;
- } else if sh >= 20 {
- self.f.write_char('2')?;
- self.f.write_char((sh - 20 + 0x30) as char)?;
- } else if sh >= 10 {
- self.f.write_char('1')?;
- self.f.write_char((sh - 10 + 0x30) as char)?;
- } else {
- self.f.write_char((sh + 0x30) as char)?;
+ self.emit_shift_type(stype)?;
+ if stype != ShiftStyle::RRX {
+ self.f.write_char(' ')?;
+ let sh = imm_shift.imm();
+ if sh >= 30 {
+ self.f.write_char('3')?;
+ self.f.write_char((sh - 30 + 0x30) as char)?;
+ } else if sh >= 20 {
+ self.f.write_char('2')?;
+ self.f.write_char((sh - 20 + 0x30) as char)?;
+ } else if sh >= 10 {
+ self.f.write_char('1')?;
+ self.f.write_char((sh - 10 + 0x30) as char)?;
+ } else {
+ self.f.write_char((sh + 0x30) as char)?;
+ }
}
}
}