aboutsummaryrefslogtreecommitdiff
path: root/src/armv7
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2026-09-11 15:57:22 +0000
committeriximeow <me@iximeow.net>2026-09-11 16:18:53 +0000
commita00a54539d9124d8b376ee9cbeab355d99c9d163 (patch)
tree85ee14db687c5590c2bbea8eed1589f4088f969c /src/armv7
parent7e70f851a481d36669e64edcd61ce7df9d578468 (diff)
fix {s,u}xt{h,b}[16] using an immediate to describe their rotates
Diffstat (limited to 'src/armv7')
-rw-r--r--src/armv7/display.rs10
-rw-r--r--src/armv7/thumb.rs4
2 files changed, 12 insertions, 2 deletions
diff --git a/src/armv7/display.rs b/src/armv7/display.rs
index 1398ce6..2d2a77c 100644
--- a/src/armv7/display.rs
+++ b/src/armv7/display.rs
@@ -357,6 +357,13 @@ impl<T: DisplaySink> crate::armv7::OperandVisitor for DisplayingOperandVisitor<'
Ok(())
}
+ fn visit_rotate(&mut self, amt: u8) -> Result<Self::Ok, Self::Error> {
+ self.emit_shift_type(ShiftStyle::ROR)?;
+ self.f.write_char(' ')?;
+ self.f.write_prefixed_u16(amt as u16)?;
+ Ok(())
+ }
+
fn visit_apsr(&mut self) -> Result<Self::Ok, Self::Error> {
self.f.span_start_register();
self.f.write_fixed_size("apsr")?;
@@ -1437,6 +1444,9 @@ impl super::Operand {
Operand::StatusRegMask(mask) => {
visitor.visit_status_reg_mask(mask)
}
+ Operand::Ror(amt) => {
+ visitor.visit_rotate(amt)
+ }
Operand::APSR => {
visitor.visit_apsr()
},
diff --git a/src/armv7/thumb.rs b/src/armv7/thumb.rs
index 4340e95..1d9d96a 100644
--- a/src/armv7/thumb.rs
+++ b/src/armv7/thumb.rs
@@ -2860,7 +2860,7 @@ pub fn decode_into<T: Reader<<ARMv7 as Arch>::Address, <ARMv7 as Arch>::Word>>(d
Operand::Reg(Reg::from_u8(rd)),
Operand::Reg(Reg::from_u8(rm)),
if rotate != 0 {
- Operand::Imm32(rotate as u32)
+ Operand::Ror(rotate as u8)
} else {
Operand::Nothing
},
@@ -2886,7 +2886,7 @@ pub fn decode_into<T: Reader<<ARMv7 as Arch>::Address, <ARMv7 as Arch>::Word>>(d
Operand::Reg(Reg::from_u8(rn)),
Operand::Reg(Reg::from_u8(rm)),
if rotate != 0 {
- Operand::Imm32(rotate as u32)
+ Operand::Ror(rotate as u8)
} else {
Operand::Nothing
},