diff options
author | iximeow <me@iximeow.net> | 2020-12-06 15:17:52 -0800 |
---|---|---|
committer | iximeow <me@iximeow.net> | 2020-12-06 15:17:52 -0800 |
commit | 1572e928b41b5c0765d7f47b346110da14e58b9e (patch) | |
tree | 697d0217c29abdd505b5693e6c1c648c3587816d /src/armv7.rs | |
parent | 5e590eba9a1baf8a544f75ec87a58daa4da33726 (diff) |
add ldc/sdc instructions and a slew of 32b thumb2 tests
Diffstat (limited to 'src/armv7.rs')
-rw-r--r-- | src/armv7.rs | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/armv7.rs b/src/armv7.rs index 4cfbc77..d98cfb0 100644 --- a/src/armv7.rs +++ b/src/armv7.rs @@ -175,6 +175,32 @@ impl <T: fmt::Write, Color: fmt::Display, Y: YaxColors<Color>> ShowContextual<u3 _ => { unreachable!(); } } }, + Opcode::STCL(coproc) => { + write!(out, "stcl p{}", coproc)?; + let ops = self.operands.iter(); + for op in ops { + if let Operand::Nothing = op { + break; + } + write!(out, ", ")?; + op.colorize(colors, out)?; + } + + Ok(()) + } + Opcode::STC(coproc) => { + write!(out, "stc p{}", coproc)?; + let ops = self.operands.iter(); + for op in ops { + if let Operand::Nothing = op { + break; + } + write!(out, ", ")?; + op.colorize(colors, out)?; + } + + Ok(()) + } Opcode::STC2L(coproc) => { write!(out, "stc2l p{}", coproc)?; let ops = self.operands.iter(); @@ -201,6 +227,32 @@ impl <T: fmt::Write, Color: fmt::Display, Y: YaxColors<Color>> ShowContextual<u3 Ok(()) } + Opcode::LDC(coproc) => { + write!(out, "ldc p{}", coproc)?; + let ops = self.operands.iter(); + for op in ops { + if let Operand::Nothing = op { + break; + } + write!(out, ", ")?; + op.colorize(colors, out)?; + } + + Ok(()) + } + Opcode::LDCL(coproc) => { + write!(out, "ldcl p{}", coproc)?; + let ops = self.operands.iter(); + for op in ops { + if let Operand::Nothing = op { + break; + } + write!(out, ", ")?; + op.colorize(colors, out)?; + } + + Ok(()) + } Opcode::LDC2(coproc) => { write!(out, "ldc2 p{}", coproc)?; let ops = self.operands.iter(); @@ -535,14 +587,20 @@ impl <T: fmt::Write, Color: fmt::Display, Y: YaxColors<Color>> Colorize<T, Color Opcode::HVC | Opcode::SVC | Opcode::SMC | + Opcode::LDC(_) | + Opcode::LDCL(_) | Opcode::LDC2(_) | Opcode::LDC2L(_) | + Opcode::STC(_) | + Opcode::STCL(_) | Opcode::STC2(_) | Opcode::STC2L(_) | Opcode::MCRR2(_, _) | Opcode::MCR2(_, _, _) | Opcode::MRRC2(_, _) | Opcode::MRC2(_, _, _) | + Opcode::MCRR(_, _) | + Opcode::MRRC(_, _) | Opcode::CDP2(_, _, _) => { write!(out, "{}", colors.platform_op(self)) }, } } @@ -557,14 +615,20 @@ impl Display for Opcode { Opcode::LDRSBT => { write!(f, "ldrsbt") }, Opcode::STRD => { write!(f, "strd") }, Opcode::LDRD => { write!(f, "ldrd") }, + Opcode::LDC(_) => { write!(f, "ldc") }, + Opcode::LDCL(_) => { write!(f, "ldcl") }, Opcode::LDC2(_) => { write!(f, "ldc2") }, Opcode::LDC2L(_) => { write!(f, "ldc2l") }, + Opcode::STC(_) => { write!(f, "stc") }, + Opcode::STCL(_) => { write!(f, "stcl") }, Opcode::STC2(_) => { write!(f, "stc2") }, Opcode::STC2L(_) => { write!(f, "stc2l") }, Opcode::MCRR2(_, _) => { write!(f, "mcrr2") }, Opcode::MCR2(_, _, _) => { write!(f, "mcr2") }, Opcode::MRRC2(_, _) => { write!(f, "mrrc2") }, Opcode::MRC2(_, _, _) => { write!(f, "mrc2") }, + Opcode::MCRR(_, _) => { write!(f, "mcrr") }, + Opcode::MRRC(_, _) => { write!(f, "mrrc") }, Opcode::CDP2(_, _, _) => { write!(f, "cdp2") }, Opcode::SRS(p, u) => { write!(f, "srs{}{}", if *u { "i" } else { "d" }, if *p { "b" } else { "a" }) }, Opcode::RFE(p, u) => { write!(f, "rfe{}{}", if *u { "i" } else { "d" }, if *p { "b" } else { "a" }) }, @@ -842,13 +906,19 @@ pub enum Opcode { LDRSBT, STRD, LDRD, + LDC(u8), + LDCL(u8), LDC2(u8), LDC2L(u8), + STC(u8), + STCL(u8), STC2(u8), STC2L(u8), MCRR2(u8, u8), MCR2(u8, u8, u8), MRRC2(u8, u8), + MCRR(u8, u8), + MRRC(u8, u8), MRC2(u8, u8, u8), CDP2(u8, u8, u8), SRS(bool, bool), |