aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2026-08-03 00:53:34 +0000
committeriximeow <me@iximeow.net>2026-08-03 00:53:34 +0000
commit0a874bce72cff033004599c4a2dc061ea0782c7f (patch)
tree94d8c0bc3db5ebb49d9987a79e209821cd44e7ec /src
parent5f48fb91742f9e9977b499959861a8a40d4ec03c (diff)
armv8 thumb-mode hints
Diffstat (limited to 'src')
-rw-r--r--src/armv7.rs6
-rw-r--r--src/armv7/display.rs11
-rw-r--r--src/armv7/thumb.rs55
3 files changed, 72 insertions, 0 deletions
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 <T: fmt::Write, Y: YaxColors> Colorize<T, Y> 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<T: Reader<<ARMv7 as Arch>::Address, <ARMv7 as Arch>::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<T: Reader<<ARMv7 as Arch>::Address, <ARMv7 as Arch>::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