diff options
| author | rva3 <rva333@protonmail.com> | 2026-02-20 03:25:33 +0200 |
|---|---|---|
| committer | iximeow <me@iximeow.net> | 2026-02-22 03:05:53 +0000 |
| commit | 256c8128d82a5c5d99c1a114f3fb488b28d6b925 (patch) | |
| tree | b98662b05e920a59bcf419b43bec59b596726b6a /src/armv7/display.rs | |
| parent | 5f91a83b861a0c67dde9a887db7e08dafd0a5b65 (diff) | |
properly display coprocessor higher than 9
Diffstat (limited to 'src/armv7/display.rs')
| -rw-r--r-- | src/armv7/display.rs | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/armv7/display.rs b/src/armv7/display.rs index 3ee0daa..f81e2cc 100644 --- a/src/armv7/display.rs +++ b/src/armv7/display.rs @@ -368,6 +368,19 @@ impl<T: DisplaySink> crate::armv7::OperandVisitor for DisplayingOperandVisitor<' } } +fn write_coproc<T: DisplaySink>(coproc: u8, out: &mut T) -> fmt::Result { + // coproc is a 4-bit field + debug_assert!(coproc < 16); + + out.write_char('p')?; + if coproc < 10 { + out.write_char((coproc + 0x30) as char) + } else { + out.write_char('1')?; + out.write_char((coproc - 10 + 0x30) as char) + } +} + #[allow(non_snake_case)] pub(crate) fn visit_inst<T: DisplaySink>(instr: &Instruction, out: &mut T) -> fmt::Result { // handle a few instruction aliasing cases first... @@ -491,10 +504,9 @@ pub(crate) fn visit_inst<T: DisplaySink>(instr: &Instruction, out: &mut T) -> fm out.write_lt_8(instr.opcode.name())?; } out.span_end_opcode(); - out.write_fixed_size(" p")?; - // coproc is a 3-bit field - out.write_char((coproc + 0x30) as char)?; + out.write_char(' ')?; + write_coproc(coproc, out)?; out.write_fixed_size(", ")?; // opc1 is a 3-bit field out.write_char((opc + 0x30) as char)?; @@ -521,10 +533,9 @@ pub(crate) fn visit_inst<T: DisplaySink>(instr: &Instruction, out: &mut T) -> fm out.write_lt_8(instr.opcode.name())?; } out.span_end_opcode(); - out.write_fixed_size(" p")?; - // coproc is a 3-bit field - out.write_char((coproc + 0x30) as char)?; + out.write_char(' ')?; + write_coproc(coproc, out)?; out.write_fixed_size(", ")?; // opc1 is a 3-bit field out.write_char((opc1 + 0x30) as char)?; |
