From 0a874bce72cff033004599c4a2dc061ea0782c7f Mon Sep 17 00:00:00 2001 From: iximeow Date: Mon, 3 Aug 2026 00:53:34 +0000 Subject: armv8 thumb-mode hints --- src/armv7.rs | 6 ++++++ src/armv7/display.rs | 11 +++++++++++ src/armv7/thumb.rs | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) (limited to 'src') diff --git a/src/armv7.rs b/src/armv7.rs index 01c1827..6edb6c9 100644 --- a/src/armv7.rs +++ b/src/armv7.rs @@ -290,6 +290,12 @@ pub enum Opcode { /// ARMv8 `Test Target` TT { alternate: bool, unprivileged: bool }, + + PACBTI, + BTI, + ESB, + PAC, + AUT, } static DATA_PROCESSING_OPCODES: [Opcode; 16] = [ diff --git a/src/armv7/display.rs b/src/armv7/display.rs index 91affeb..36be517 100644 --- a/src/armv7/display.rs +++ b/src/armv7/display.rs @@ -976,6 +976,11 @@ impl Colorize for ConditionedOpcode { Opcode::YIELD | Opcode::WFE | Opcode::WFI | + Opcode::PACBTI | + Opcode::BTI | + Opcode::ESB | + Opcode::PAC | + Opcode::AUT | Opcode::SEV | Opcode::ERET | Opcode::RFE(_, _) | @@ -1268,6 +1273,12 @@ impl Opcode { Opcode::TT { alternate: true, unprivileged: false } => "tta", Opcode::TT { alternate: false, unprivileged: true } => "ttt", Opcode::TT { alternate: true, unprivileged: true } => "ttat", + + Opcode::PACBTI => { "pacbti" }, + Opcode::BTI => { "bti" }, + Opcode::ESB => { "esb" }, + Opcode::PAC => { "pac" }, + Opcode::AUT => { "aut" }, } } } diff --git a/src/armv7/thumb.rs b/src/armv7/thumb.rs index cba18a4..d4bef7a 100644 --- a/src/armv7/thumb.rs +++ b/src/armv7/thumb.rs @@ -1797,6 +1797,39 @@ pub fn decode_into::Address, ::Word>>(d Operand::Nothing, ]; } + 0b00001101 => { + // `PACBTI T1` + // v8 + inst.opcode = Opcode::PACBTI; + inst.operands = [ + Operand::Nothing, + Operand::Nothing, + Operand::Nothing, + Operand::Nothing, + ]; + } + 0b00001111 => { + // `BTI T1` + // v8 + inst.opcode = Opcode::BTI; + inst.operands = [ + Operand::Nothing, + Operand::Nothing, + Operand::Nothing, + Operand::Nothing, + ]; + } + 0b00010000 => { + // `ESB T1` + // v8 + inst.opcode = Opcode::ESB; + inst.operands = [ + Operand::Nothing, + Operand::Nothing, + Operand::Nothing, + Operand::Nothing, + ]; + } 0b00010100 => { // `CSDB` (`A8-376`) // v6T2 @@ -1808,6 +1841,28 @@ pub fn decode_into::Address, ::Word>>(d Operand::Nothing, ]; } + 0b00011101 => { + // `PAC T1` + // v8 + inst.opcode = Opcode::PAC; + inst.operands = [ + Operand::Nothing, + Operand::Nothing, + Operand::Nothing, + Operand::Nothing, + ]; + } + 0b00101101 => { + // `AUT T1` + // v8 + inst.opcode = Opcode::AUT; + inst.operands = [ + Operand::Nothing, + Operand::Nothing, + Operand::Nothing, + Operand::Nothing, + ]; + } hint => { // from DDI0406 C.d (v7): // > Encodings with op1 set to 0b000 and a value of -- cgit v1.1