/* Generated code; do not edit!
generated by tables/gen.js from imaon2 'f0e220720bbfb8f8e00e76af56806a28fc8739a2'
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 */
/* GPR64_Rn_2_BLR: BLR, RET */
/* ccode_cond_am_brcond_target_B_1_Bcc: Bcc */
/* am_brcond_target_B_4_CBNZW: CBNZW, CBNZX, CBZW, CBZX */
/* am_ldrlit_label_unk_Rt_6_LDRDl: LDRDl, LDRQl, LDRSWl, LDRSl, LDRWl, LDRXl */
/* am_tbrcond_target_B_4_TBNZW: TBNZW, TBNZX, TBZW, TBZX */
switch ((op >> 29) & 0x7) {
case 0: {
switch ((op >> 26) & 0x3) {
case 0: {
if ((op & 0x9f000000) == 0x10000000) {
insn_adrlabel_label_unk_Xd_1_ADR:;
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 & 0xfc000000) == 0x14000000) {
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 */
} else {
return P(unidentified)(ctx);
}
}
case 2:
case 3: {
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: {
switch ((op >> 25) & 0x3) {
case 0: {
if ((op & 0x9f000000) == 0x10000000) {
goto insn_adrlabel_label_unk_Xd_1_ADR; /* 0x10000000 | 0x60ffffff */
} else {
return P(unidentified)(ctx);
}
}
case 1:
return P(unidentified)(ctx);
case 2: {
if ((op & 0x7e000000) == 0x34000000) {
insn_am_brcond_target_B_4_CBNZW:;
struct bitslice target = {.nruns = 1, .runs = (struct bitslice_run[]) {{5,0,19}}};
return P(am_brcond_target_B_4_CBNZW)(ctx, target); /* 0x34000000 | 0x81ffffff */
} else {
return P(unidentified)(ctx);
}
}
case 3: {
if ((op & 0x7e000000) == 0x36000000) {
insn_am_tbrcond_target_B_4_TBNZW:;
struct bitslice target = {.nruns = 1, .runs = (struct bitslice_run[]) {{5,0,14}}};
return P(am_tbrcond_target_B_4_TBNZW)(ctx, target); /* 0x36000000 | 0x81ffffff */
} else {
return P(unidentified)(ctx);
}
}
}
}
case 2: {
switch ((op >> 26) & 0x3) {
case 0: {
if ((op & 0x9f000000) == 0x10000000) {
goto insn_adrlabel_label_unk_Xd_1_ADR; /* 0x10000000 | 0x60ffffff */
} else {
return P(unidentified)(ctx);
}
}
case 1: {
if ((op & 0xff000010) == 0x54000000) {
struct bitslice cond = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}};
struct bitslice target = {.nruns = 1, .runs = (struct bitslice_run[]) {{5,0,19}}};
return P(ccode_cond_am_brcond_target_B_1_Bcc)(ctx, cond, target); /* 0x54000000 | 0x00ffffef */
} else {
return P(unidentified)(ctx);
}
}
case 2:
case 3: {
if ((op & 0xbb000000) == 0x18000000) {
goto insn_am_ldrlit_label_unk_Rt_6_LDRDl; /* 0x18000000 | 0x44ffffff */
} else {
return P(unidentified)(ctx);
}
}
}
}
case 3: {
if ((op & 0x9f000000) == 0x10000000) {
goto insn_adrlabel_label_unk_Xd_1_ADR; /* 0x10000000 | 0x60ffffff */
} else {
return P(unidentified)(ctx);
}
}
case 4: {
switch ((op >> 26) & 0x3) {
case 0: {
if ((op & 0x9f000000) == 0x90000000) {
insn_adrplabel_label_unk_Xd_1_ADRP:;
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 1: {
if ((op & 0xfc000000) == 0x94000000) {
struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,26}}};
return P(am_bl_target_addr_1_BL)(ctx, addr); /* 0x94000000 | 0x03ffffff */
} else {
return P(unidentified)(ctx);
}
}
case 2:
case 3: {
if ((op & 0xfb000000) == 0x98000000) {
goto insn_am_ldrlit_label_unk_Rt_6_LDRDl; /* 0x98000000 | 0x04ffffff */
} else {
return P(unidentified)(ctx);
}
}
}
}
case 5: {
switch ((op >> 25) & 0x3) {
case 0: {
if ((op & 0x9f000000) == 0x90000000) {
goto insn_adrplabel_label_unk_Xd_1_ADRP; /* 0x90000000 | 0x60ffffff */
} else {
return P(unidentified)(ctx);
}
}
case 1:
return P(unidentified)(ctx);
case 2: {
if ((op & 0x7e000000) == 0x34000000) {
goto insn_am_brcond_target_B_4_CBNZW; /* 0x34000000 | 0x81ffffff */
} else {
return P(unidentified)(ctx);
}
}
case 3: {
if ((op & 0x7e000000) == 0x36000000) {
goto insn_am_tbrcond_target_B_4_TBNZW; /* 0x36000000 | 0x81ffffff */
} else {
return P(unidentified)(ctx);
}
}
}
}
case 6: {
switch ((op >> 22) & 0xf) {
case 0:
case 1:
case 2:
case 3: {
if ((op & 0x9f000000) == 0x90000000) {
goto insn_adrplabel_label_unk_Xd_1_ADRP; /* 0x90000000 | 0x60ffffff */
} else {
return P(unidentified)(ctx);
}
}
case 4:
case 5:
case 6:
case 7:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
return P(unidentified)(ctx);
case 8: {
if ((op & 0xfffffc1f) == 0xd63f0000) {
insn_GPR64_Rn_2_BLR:;
struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{5,0,5}}};
return P(GPR64_Rn_2_BLR)(ctx, Rn); /* 0xd63f0000 | 0x000003e0 */
} else {
return P(unidentified)(ctx);
}
}
case 9: {
if ((op & 0xfffffc1f) == 0xd65f0000) {
goto insn_GPR64_Rn_2_BLR; /* 0xd65f0000 | 0x000003e0 */
} else {
return P(unidentified)(ctx);
}
}
}
}
case 7: {
if ((op & 0x9f000000) == 0x90000000) {
goto insn_adrplabel_label_unk_Xd_1_ADRP; /* 0x90000000 | 0x60ffffff */
} else {
return P(unidentified)(ctx);
}
}
}
/*
static INLINE tdis_ret P(GPR64_Rn_2_BLR)(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_4_CBNZW)(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) {}
static INLINE tdis_ret P(ccode_cond_am_brcond_target_B_1_Bcc)(struct bitslice ctx, struct bitslice cond, struct bitslice target) {}
*/