/* Generated code; do not edit!
generated by tables/gen.js from imaon2 'f0e220720bbfb8f8e00e76af56806a28fc8739a2'
https://github.com/comex/imaon2
arguments: '--gen-hook-disassembler -n _thumb --dis-pattern=P(XXX) out/out-ARM.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.
*/
/* it_pred_cc_it_mask_mask_1_t2IT: t2IT */
/* GPR_Rm_unk_Rdn_1_tADDhirr: tADDhirr */
/* unk_Rdn_1_tADDrSP: tADDrSP */
/* GPR_Rm_1_tADDspr: tADDspr */
/* t_adrlabel_addr_unk_Rd_1_tADR: tADR */
/* t_brtarget_target_B_1_tB: tB */
/* GPR_func_1_tBLXr: tBLXr */
/* GPR_Rm_B_1_tBX: tBX */
/* t_bcctarget_target_pred_p_B_1_tBcc: tBcc */
/* t_cbtarget_target_B_2_tCBNZ: tCBNZ, tCBZ */
/* tGPR_Rn_reglist_regs_1_tLDMIA: tLDMIA */
/* t_addrmode_pc_addr_unk_Rt_1_tLDRpci: tLDRpci */
/* GPR_Rm_unk_Rd_1_tMOVr: tMOVr */
/* reglist_regs_1_tPOP: tPOP */
/* reglist_regs_S_1_tPUSH: tPUSH */
/* tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD: tSTMIA_UPD */
switch ((op >> 9) & 0x1f) {
case 0:
case 1: {
if ((op & 0xfffff800) == 0xc000) {
insn_tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD:;
struct bitslice regs = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,8}}};
struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,3}}};
return P(tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD)(ctx, regs, Rn); /* 0x0000c000 | 0x000007ff */
} else {
return P(unidentified)(ctx);
}
}
case 2: {
switch ((op >> 15) & 0x1) {
case 0: {
switch ((op >> 3) & 0xf) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 14:
case 15: {
if ((op & 0xffffff87) == 0x4485) {
struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{3,0,4}}};
return P(GPR_Rm_1_tADDspr)(ctx, Rm); /* 0x00004485 | 0x00000078 */
} else {
if ((op & 0xffffff00) == 0x4400) {
struct bitslice Rdn = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,3}, {7,3,1}}};
struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{3,0,4}}};
return P(GPR_Rm_unk_Rdn_1_tADDhirr)(ctx, Rdn, Rm); /* 0x00004400 | 0x000000ff */
} else {
return P(unidentified)(ctx);
}
}
}
case 13: {
if ((op & 0xffffff78) == 0x4468) {
struct bitslice Rdn = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,3}, {7,3,1}}};
return P(unk_Rdn_1_tADDrSP)(ctx, Rdn); /* 0x00004468 | 0x00000087 */
} else {
return P(unidentified)(ctx);
}
}
}
}
case 1: {
if ((op & 0xfffff800) == 0xc000) {
goto insn_tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD; /* 0x0000c000 | 0x000007ff */
} else {
return P(unidentified)(ctx);
}
}
}
}
case 3: {
switch ((op >> 7) & 0x3) {
case 0:
case 1: {
switch ((op >> 15) & 0x1) {
case 0: {
if ((op & 0xffffff00) == 0x4600) {
struct bitslice Rd = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,3}, {7,3,1}}};
struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{3,0,4}}};
return P(GPR_Rm_unk_Rd_1_tMOVr)(ctx, Rd, Rm); /* 0x00004600 | 0x000000ff */
} else {
return P(unidentified)(ctx);
}
}
case 1: {
if ((op & 0xfffff800) == 0xc000) {
goto insn_tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD; /* 0x0000c000 | 0x000007ff */
} else {
return P(unidentified)(ctx);
}
}
}
}
case 2: {
switch ((op >> 15) & 0x1) {
case 0: {
if ((op & 0xffffff87) == 0x4700) {
struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{3,0,4}}};
return P(GPR_Rm_B_1_tBX)(ctx, Rm); /* 0x00004700 | 0x00000078 */
} else {
return P(unidentified)(ctx);
}
}
case 1: {
if ((op & 0xfffff800) == 0xc000) {
goto insn_tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD; /* 0x0000c000 | 0x000007ff */
} else {
return P(unidentified)(ctx);
}
}
}
}
case 3: {
switch ((op >> 15) & 0x1) {
case 0: {
if ((op & 0xffffff87) == 0x4780) {
struct bitslice func = {.nruns = 1, .runs = (struct bitslice_run[]) {{3,0,4}}};
return P(GPR_func_1_tBLXr)(ctx, func); /* 0x00004780 | 0x00000078 */
} else {
return P(unidentified)(ctx);
}
}
case 1: {
if ((op & 0xfffff800) == 0xc000) {
goto insn_tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD; /* 0x0000c000 | 0x000007ff */
} else {
return P(unidentified)(ctx);
}
}
}
}
}
}
case 4:
case 5:
case 6:
case 7: {
switch ((op >> 15) & 0x1) {
case 0: {
if ((op & 0xfffff800) == 0x4800) {
struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,8}}};
struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,3}}};
return P(t_addrmode_pc_addr_unk_Rt_1_tLDRpci)(ctx, addr, Rt); /* 0x00004800 | 0x000007ff */
} else {
return P(unidentified)(ctx);
}
}
case 1: {
if ((op & 0xfffff800) == 0xc800) {
struct bitslice regs = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,8}}};
struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,3}}};
return P(tGPR_Rn_reglist_regs_1_tLDMIA)(ctx, regs, Rn); /* 0x0000c800 | 0x000007ff */
} else {
return P(unidentified)(ctx);
}
}
}
}
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15: {
if ((op & 0xfffff000) == 0xd000) {
struct bitslice target = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,8}}};
struct bitslice p = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,4}}};
return P(t_bcctarget_target_pred_p_B_1_tBcc)(ctx, target, p); /* 0x0000d000 | 0x00000fff */
} else {
return P(unidentified)(ctx);
}
}
case 16:
case 17:
case 18:
case 19: {
switch ((op >> 14) & 0x1) {
case 0: {
if ((op & 0xfffff800) == 0xa000) {
struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,8}}};
struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,3}}};
return P(t_adrlabel_addr_unk_Rd_1_tADR)(ctx, addr, Rd); /* 0x0000a000 | 0x000007ff */
} else {
return P(unidentified)(ctx);
}
}
case 1: {
if ((op & 0xfffff800) == 0xe000) {
struct bitslice target = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,11}}};
return P(t_brtarget_target_B_1_tB)(ctx, target); /* 0x0000e000 | 0x000007ff */
} else {
return P(unidentified)(ctx);
}
}
}
}
case 20:
case 21:
case 22:
case 23:
case 27:
return P(unidentified)(ctx);
case 24:
case 25:
case 28:
case 29: {
if ((op & 0xfffff500) == 0xb100) {
struct bitslice target = {.nruns = 2, .runs = (struct bitslice_run[]) {{3,0,5}, {9,5,1}}};
return P(t_cbtarget_target_B_2_tCBNZ)(ctx, target); /* 0x0000b100 | 0x00000aff */
} else {
return P(unidentified)(ctx);
}
}
case 26: {
if ((op & 0xfffffe00) == 0xb400) {
struct bitslice regs = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {8,14,1}}};
return P(reglist_regs_S_1_tPUSH)(ctx, regs); /* 0x0000b400 | 0x000001ff */
} else {
return P(unidentified)(ctx);
}
}
case 30: {
if ((op & 0xfffffe00) == 0xbc00) {
struct bitslice regs = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {8,15,1}}};
return P(reglist_regs_1_tPOP)(ctx, regs); /* 0x0000bc00 | 0x000001ff */
} else {
return P(unidentified)(ctx);
}
}
case 31: {
if ((op & 0xffffff00) == 0xbf00) {
struct bitslice mask = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}};
struct bitslice cc = {.nruns = 1, .runs = (struct bitslice_run[]) {{4,0,4}}};
return P(it_pred_cc_it_mask_mask_1_t2IT)(ctx, mask, cc); /* 0x0000bf00 | 0x000000ff */
} else {
return P(unidentified)(ctx);
}
}
}
/*
static INLINE tdis_ret P(GPR_Rm_1_tADDspr)(struct bitslice ctx, struct bitslice Rm) {}
static INLINE tdis_ret P(GPR_Rm_B_1_tBX)(struct bitslice ctx, struct bitslice Rm) {}
static INLINE tdis_ret P(GPR_Rm_unk_Rd_1_tMOVr)(struct bitslice ctx, struct bitslice Rd, struct bitslice Rm) {}
static INLINE tdis_ret P(GPR_Rm_unk_Rdn_1_tADDhirr)(struct bitslice ctx, struct bitslice Rdn, struct bitslice Rm) {}
static INLINE tdis_ret P(GPR_func_1_tBLXr)(struct bitslice ctx, struct bitslice func) {}
static INLINE tdis_ret P(it_pred_cc_it_mask_mask_1_t2IT)(struct bitslice ctx, struct bitslice mask, struct bitslice cc) {}
static INLINE tdis_ret P(reglist_regs_1_tPOP)(struct bitslice ctx, struct bitslice regs) {}
static INLINE tdis_ret P(reglist_regs_S_1_tPUSH)(struct bitslice ctx, struct bitslice regs) {}
static INLINE tdis_ret P(tGPR_Rn_reglist_regs_1_tLDMIA)(struct bitslice ctx, struct bitslice regs, struct bitslice Rn) {}
static INLINE tdis_ret P(tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD)(struct bitslice ctx, struct bitslice regs, struct bitslice Rn) {}
static INLINE tdis_ret P(t_addrmode_pc_addr_unk_Rt_1_tLDRpci)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {}
static INLINE tdis_ret P(t_adrlabel_addr_unk_Rd_1_tADR)(struct bitslice ctx, struct bitslice addr, struct bitslice Rd) {}
static INLINE tdis_ret P(t_bcctarget_target_pred_p_B_1_tBcc)(struct bitslice ctx, struct bitslice target, struct bitslice p) {}
static INLINE tdis_ret P(t_brtarget_target_B_1_tB)(struct bitslice ctx, struct bitslice target) {}
static INLINE tdis_ret P(t_cbtarget_target_B_2_tCBNZ)(struct bitslice ctx, struct bitslice target) {}
static INLINE tdis_ret P(unk_Rdn_1_tADDrSP)(struct bitslice ctx, struct bitslice Rdn) {}
*/