From bc4ffbe7a8ffe1bfbf2e0785c561a339bfa25321 Mon Sep 17 00:00:00 2001 From: iximeow Date: Sun, 2 Aug 2026 19:23:45 +0000 Subject: Test Target, fix bogus MRS destinations --- src/armv7/thumb.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/armv7/thumb.rs') diff --git a/src/armv7/thumb.rs b/src/armv7/thumb.rs index 16d671a..72a2ea6 100644 --- a/src/armv7/thumb.rs +++ b/src/armv7/thumb.rs @@ -147,6 +147,33 @@ pub fn decode_into::Address, ::Word>>(d match op1op2 { 0b0000 => { // `STREX` (`A8-691`) + // v8.something + + // TODO: isa version flags + if rt == 15 /* && decoder.armv8 */ { + if imm8 & 0b0011_1111 != 0 { + if decoder.should_is_must { + return Err(DecodeError::Nonconforming); + } + } + let at = imm8 >> 6; + inst.opcode = Opcode::TT { + alternate: (at >> 1) != 0, + unprivileged: (at & 1) != 0, + }; + if rd == 13 || rd == 15 || rn == 15 { + decoder.unpredictable()?; + } + inst.operands = [ + Operand::Reg(Reg::from_u8(rd)), + Operand::Reg(Reg::from_u8(rn)), + Operand::Nothing, + Operand::Nothing, + ]; + + return Ok(()); + } + // v6T2 if rd == 13 || rd == 15 || rt == 13 || rt == 15 || rn == 15 { decoder.unpredictable()?; -- cgit v1.1