summaryrefslogtreecommitdiff
path: root/arch/arm64/disassembler/regs.c
diff options
context:
space:
mode:
authorMark Rowe <mark@vector35.com>2025-09-18 11:46:39 -0700
committerMark Rowe <mark@vector35.com>2025-09-25 08:41:48 -0700
commit6e1306923c60b3d6c1cefb1fcc240f1a064d6f20 (patch)
tree57fb65f74fecfa95dd394ecc5b664512d8f87609 /arch/arm64/disassembler/regs.c
parent0deeb4a61749737b98f7946ec88b693068180e28 (diff)
[AArch64] Update disassembler based on 2025-06 ARM ISA data
Alongside this I also added support for decoding: * LDR / STR (table) * PMULLB / PMULLT * ABS / CNT / CTZ * SMIN / SMAX / UMIN / UMAX * RPRFM * PSEL Note that while these instructions will now be disassembled, they are not yet lifted to LLIL. Additionally, I fixed a number of errors in the decoding of some less commonly occurring instructions.
Diffstat (limited to 'arch/arm64/disassembler/regs.c')
-rw-r--r--arch/arm64/disassembler/regs.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/arm64/disassembler/regs.c b/arch/arm64/disassembler/regs.c
index 82608027..5d84226d 100644
--- a/arch/arm64/disassembler/regs.c
+++ b/arch/arm64/disassembler/regs.c
@@ -4,7 +4,7 @@
// registers (and related) to string
//-----------------------------------------------------------------------------
-static const char* RegisterString[] = {"NONE", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8",
+static const char* const RegisterString[] = {"NONE", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8",
"w9", "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "w19", "w20", "w21", "w22",
"w23", "w24", "w25", "w26", "w27", "w28", "w29", "w30", "wzr", "wsp", "x0", "x1", "x2", "x3",
"x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17",
@@ -164,7 +164,7 @@ static const char* RegisterString[] = {"NONE", "w0", "w1", "w2", "w3", "w4", "w5
"pldl1keep", "pldl1strm", "pldl2keep", "pldl2strm", "pldl3keep", "pldl3strm", "#0x6", "#0x7",
"plil1keep", "plil1strm", "plil2keep", "plil2strm", "plil3keep", "plil3strm", "#0xe", "#0xf",
"pstl1keep", "pstl1strm", "pstl2keep", "pstl2strm", "pstl3keep", "pstl3strm", "#0x16", "#0x17",
- "#0x18", "#0x19", "#0x1a", "#0x1b", "#0x1c", "#0x1d", "#0x1e", "#0x1f", "END"};
+ "#0x18", "#0x19", "#0x1a", "#0x1b", "#0x1c", "#0x1d", "#0x1e", "#0x1f", "zt0", "END"};
const char* get_register_name(enum Register r)
{
@@ -195,5 +195,8 @@ size_t get_register_size(enum Register r)
return 4;
else if (r >= REG_V0_D0 && r <= REG_V31_D1)
return 8;
+ else if (r == REG_ZT0)
+ return 64;
+
return 0;
}