diff options
Diffstat (limited to 'generated/generic-dis-arm64.inc.h')
-rw-r--r-- | generated/generic-dis-arm64.inc.h | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/generated/generic-dis-arm64.inc.h b/generated/generic-dis-arm64.inc.h new file mode 100644 index 0000000..9a2fb05 --- /dev/null +++ b/generated/generic-dis-arm64.inc.h @@ -0,0 +1,152 @@ +/* Generated code; do not edit! + generated by tables/gen.js from imaon2 '2b8112204067abe3d0643e23c2486656841ecafe' + https://github.com/comex/imaon2 + arguments: '--gen-hook-disassembler --dis-pattern=P(XXX) out/out-AArch64.json' + (fair warning: at present the main (Rust) code in that repository is barely + started, embarrassingly so; no need to look at it ;p) + In case it's copyrightable in any way, consider the generated code in the + public domain. +*/ + +/* adrlabel_label_unk_Xd_1_ADR: ADR */ +/* adrplabel_label_unk_Xd_1_ADRP: ADRP */ +/* am_b_target_addr_B_1_B: B */ +/* am_bl_target_addr_1_BL: BL */ +/* am_brcond_target_B_5_Bcc: Bcc, CBNZW, CBNZX, CBZW, CBZX */ +/* am_ldrlit_label_unk_Rt_6_LDRDl: LDRDl, LDRQl, LDRSWl, LDRSl, LDRWl, LDRXl */ +/* GPR64_Rn_1_RET: RET */ +/* am_tbrcond_target_B_4_TBNZW: TBNZW, TBNZX, TBZW, TBZX */ + switch ((op >> 26) & 0x1f) { + case 0: + case 1: + case 2: + case 3: + case 8: + case 9: + case 10: + case 11: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 24: + case 25: + case 26: + case 27: + case 29: + case 30: + case 31: + return P(unidentified)(ctx); + case 4: + case 12: + case 20: + case 28: { + switch ((op >> 31) & 0x1) { + case 0: { + if ((op & 0x9f000000) == 0x10000000) { + struct bitslice Xd = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,5}}}; + struct bitslice label = {.nruns = 2, .runs = (struct bitslice_run[]) {{5,2,19}, {29,0,2}}}; + return P(adrlabel_label_unk_Xd_1_ADR)(ctx, Xd, label); /* 0x10000000 | 0x60ffffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0x9f000000) == 0x90000000) { + struct bitslice Xd = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,5}}}; + struct bitslice label = {.nruns = 2, .runs = (struct bitslice_run[]) {{5,2,19}, {29,0,2}}}; + return P(adrplabel_label_unk_Xd_1_ADRP)(ctx, Xd, label); /* 0x90000000 | 0x60ffffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 5: { + switch ((op >> 31) & 0x1) { + case 0: { + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,26}}}; + return P(am_b_target_addr_B_1_B)(ctx, addr); /* 0x14000000 | 0x03ffffff */ + } + case 1: { + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,26}}}; + return P(am_bl_target_addr_1_BL)(ctx, addr); /* 0x94000000 | 0x03ffffff */ + } + } + } + case 6: + case 7: { + switch ((op >> 31) & 0x1) { + case 0: { + if ((op & 0xbb000000) == 0x18000000) { + insn_am_ldrlit_label_unk_Rt_6_LDRDl:; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,5}}}; + struct bitslice label = {.nruns = 1, .runs = (struct bitslice_run[]) {{5,0,19}}}; + return P(am_ldrlit_label_unk_Rt_6_LDRDl)(ctx, Rt, label); /* 0x18000000 | 0x44ffffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfb000000) == 0x98000000) { + goto insn_am_ldrlit_label_unk_Rt_6_LDRDl; /* 0x98000000 | 0x04ffffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 13: { + switch ((op >> 25) & 0x1) { + case 0: { + insn_am_brcond_target_B_5_Bcc:; + struct bitslice target = {.nruns = 1, .runs = (struct bitslice_run[]) {{5,0,19}}}; + return P(am_brcond_target_B_5_Bcc)(ctx, target); /* 0x34000000 | 0x81ffffff */ + } + case 1: { + struct bitslice target = {.nruns = 1, .runs = (struct bitslice_run[]) {{5,0,14}}}; + return P(am_tbrcond_target_B_4_TBNZW)(ctx, target); /* 0x36000000 | 0x81ffffff */ + } + } + } + case 21: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xff000010) == 0x54000000) { + goto insn_am_brcond_target_B_5_Bcc; /* 0x54000000 | 0x00ffffef */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfffffc1f) == 0xd65f0000) { + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{5,0,5}}}; + return P(GPR64_Rn_1_RET)(ctx, Rn); /* 0xd65f0000 | 0x000003e0 */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 22: + case 23: { + if ((op & 0xbb000000) == 0x18000000) { + goto insn_am_ldrlit_label_unk_Rt_6_LDRDl; /* 0x18000000 | 0x44ffffff */ + } else { + return P(unidentified)(ctx); + } + } + } +/* +static INLINE tdis_ret P(GPR64_Rn_1_RET)(struct bitslice ctx, struct bitslice Rn) {} +static INLINE tdis_ret P(adrlabel_label_unk_Xd_1_ADR)(struct bitslice ctx, struct bitslice Xd, struct bitslice label) {} +static INLINE tdis_ret P(adrplabel_label_unk_Xd_1_ADRP)(struct bitslice ctx, struct bitslice Xd, struct bitslice label) {} +static INLINE tdis_ret P(am_b_target_addr_B_1_B)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(am_bl_target_addr_1_BL)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(am_brcond_target_B_5_Bcc)(struct bitslice ctx, struct bitslice target) {} +static INLINE tdis_ret P(am_ldrlit_label_unk_Rt_6_LDRDl)(struct bitslice ctx, struct bitslice Rt, struct bitslice label) {} +static INLINE tdis_ret P(am_tbrcond_target_B_4_TBNZW)(struct bitslice ctx, struct bitslice target) {} +*/ + |