Files
kaizen/include/capstone/hppa.h
SimoneN64 352a52804d Squashed 'external/capstone/' content from commit 5430745e962
git-subtree-dir: external/capstone
git-subtree-split: 5430745e9623786f65c0d773a417f389ebb43395
2024-09-23 19:06:48 +02:00

544 lines
9.3 KiB
C

#ifndef CAPSTONE_HPPA_H
#define CAPSTONE_HPPA_H
#ifdef __cplusplus
extern "C" {
#endif
#include "cs_operand.h"
#include "platform.h"
#define NUM_HPPA_OPS 5
#define HPPA_STR_MODIFIER_LEN 8
#define HPPA_MAX_MODIFIERS_LEN 5
/// Operand type for instruction's operands
typedef enum hppa_op_type {
HPPA_OP_INVALID = 0,
HPPA_OP_REG,
HPPA_OP_IMM,
HPPA_OP_IDX_REG,
HPPA_OP_DISP,
HPPA_OP_MEM,
HPPA_OP_TARGET,
} hppa_op_type;
//> HPPA registers
typedef enum hppa_reg {
HPPA_REG_INVALID = 0,
///> General registers
HPPA_REG_GR0,
HPPA_REG_GR1,
HPPA_REG_GR2,
HPPA_REG_GR3,
HPPA_REG_GR4,
HPPA_REG_GR5,
HPPA_REG_GR6,
HPPA_REG_GR7,
HPPA_REG_GR8,
HPPA_REG_GR9,
HPPA_REG_GR10,
HPPA_REG_GR11,
HPPA_REG_GR12,
HPPA_REG_GR13,
HPPA_REG_GR14,
HPPA_REG_GR15,
HPPA_REG_GR16,
HPPA_REG_GR17,
HPPA_REG_GR18,
HPPA_REG_GR19,
HPPA_REG_GR20,
HPPA_REG_GR21,
HPPA_REG_GR22,
HPPA_REG_GR23,
HPPA_REG_GR24,
HPPA_REG_GR25,
HPPA_REG_GR26,
HPPA_REG_GR27,
HPPA_REG_GR28,
HPPA_REG_GR29,
HPPA_REG_GR30,
HPPA_REG_GR31,
///> Floating-point registers
HPPA_REG_FPR0,
HPPA_REG_FPR1,
HPPA_REG_FPR2,
HPPA_REG_FPR3,
HPPA_REG_FPR4,
HPPA_REG_FPR5,
HPPA_REG_FPR6,
HPPA_REG_FPR7,
HPPA_REG_FPR8,
HPPA_REG_FPR9,
HPPA_REG_FPR10,
HPPA_REG_FPR11,
HPPA_REG_FPR12,
HPPA_REG_FPR13,
HPPA_REG_FPR14,
HPPA_REG_FPR15,
HPPA_REG_FPR16,
HPPA_REG_FPR17,
HPPA_REG_FPR18,
HPPA_REG_FPR19,
HPPA_REG_FPR20,
HPPA_REG_FPR21,
HPPA_REG_FPR22,
HPPA_REG_FPR23,
HPPA_REG_FPR24,
HPPA_REG_FPR25,
HPPA_REG_FPR26,
HPPA_REG_FPR27,
HPPA_REG_FPR28,
HPPA_REG_FPR29,
HPPA_REG_FPR30,
HPPA_REG_FPR31,
///> Space registers
HPPA_REG_SR0,
HPPA_REG_SR1,
HPPA_REG_SR2,
HPPA_REG_SR3,
HPPA_REG_SR4,
HPPA_REG_SR5,
HPPA_REG_SR6,
HPPA_REG_SR7,
///> Control registers
HPPA_REG_CR0,
HPPA_REG_CR1,
HPPA_REG_CR2,
HPPA_REG_CR3,
HPPA_REG_CR4,
HPPA_REG_CR5,
HPPA_REG_CR6,
HPPA_REG_CR7,
HPPA_REG_CR8,
HPPA_REG_CR9,
HPPA_REG_CR10,
HPPA_REG_CR11,
HPPA_REG_CR12,
HPPA_REG_CR13,
HPPA_REG_CR14,
HPPA_REG_CR15,
HPPA_REG_CR16,
HPPA_REG_CR17,
HPPA_REG_CR18,
HPPA_REG_CR19,
HPPA_REG_CR20,
HPPA_REG_CR21,
HPPA_REG_CR22,
HPPA_REG_CR23,
HPPA_REG_CR24,
HPPA_REG_CR25,
HPPA_REG_CR26,
HPPA_REG_CR27,
HPPA_REG_CR28,
HPPA_REG_CR29,
HPPA_REG_CR30,
HPPA_REG_CR31,
///> Special floating point exception registers
HPPA_REG_FPE0,
HPPA_REG_FPE1,
HPPA_REG_FPE2,
HPPA_REG_FPE3,
HPPA_REG_FPE4,
HPPA_REG_FPE5,
HPPA_REG_FPE6,
HPPA_REG_FPE7,
HPPA_REG_FPE8,
HPPA_REG_FPE9,
HPPA_REG_FPE10,
HPPA_REG_FPE11,
HPPA_REG_FPE12,
HPPA_REG_FPE13,
HPPA_REG_FPE14,
HPPA_REG_FPE15,
HPPA_REG_FPE16,
HPPA_REG_FPE17,
HPPA_REG_FPE18,
HPPA_REG_FPE19,
HPPA_REG_FPE20,
HPPA_REG_FPE21,
HPPA_REG_FPE22,
HPPA_REG_FPE23,
HPPA_REG_FPE24,
HPPA_REG_FPE25,
HPPA_REG_FPE26,
HPPA_REG_FPE27,
HPPA_REG_FPE28,
HPPA_REG_FPE29,
HPPA_REG_FPE30,
HPPA_REG_FPE31,
///> Single-precision floating point registers
HPPA_REG_SP_FPR0,
HPPA_REG_SP_FPR1,
HPPA_REG_SP_FPR2,
HPPA_REG_SP_FPR3,
HPPA_REG_SP_FPR4,
HPPA_REG_SP_FPR5,
HPPA_REG_SP_FPR6,
HPPA_REG_SP_FPR7,
HPPA_REG_SP_FPR8,
HPPA_REG_SP_FPR9,
HPPA_REG_SP_FPR10,
HPPA_REG_SP_FPR11,
HPPA_REG_SP_FPR12,
HPPA_REG_SP_FPR13,
HPPA_REG_SP_FPR14,
HPPA_REG_SP_FPR15,
HPPA_REG_SP_FPR16,
HPPA_REG_SP_FPR17,
HPPA_REG_SP_FPR18,
HPPA_REG_SP_FPR19,
HPPA_REG_SP_FPR20,
HPPA_REG_SP_FPR21,
HPPA_REG_SP_FPR22,
HPPA_REG_SP_FPR23,
HPPA_REG_SP_FPR24,
HPPA_REG_SP_FPR25,
HPPA_REG_SP_FPR26,
HPPA_REG_SP_FPR27,
HPPA_REG_SP_FPR28,
HPPA_REG_SP_FPR29,
HPPA_REG_SP_FPR30,
HPPA_REG_SP_FPR31,
HPPA_REG_ENDING,
} hppa_reg;
/// HPPA instruction
typedef enum hppa_insn {
HPPA_INS_INVALID = 0,
HPPA_INS_ADD,
HPPA_INS_ADDI,
HPPA_INS_ADDIO,
HPPA_INS_ADDIT,
HPPA_INS_ADDITO,
HPPA_INS_ADDB,
HPPA_INS_ADDBT,
HPPA_INS_ADDBF,
HPPA_INS_ADDIB,
HPPA_INS_ADDIBT,
HPPA_INS_ADDIBF,
HPPA_INS_ADDIL,
HPPA_INS_ADDC,
HPPA_INS_ADDCO,
HPPA_INS_ADDL,
HPPA_INS_ADDO,
HPPA_INS_AND,
HPPA_INS_ANDCM,
HPPA_INS_B,
HPPA_INS_BB,
HPPA_INS_BE,
HPPA_INS_BL,
HPPA_INS_BLE,
HPPA_INS_BLR,
HPPA_INS_BREAK,
HPPA_INS_BV,
HPPA_INS_BVB,
HPPA_INS_BVE,
HPPA_INS_CALL,
HPPA_INS_CLDD,
HPPA_INS_CLDDS,
HPPA_INS_CLDDX,
HPPA_INS_CLDW,
HPPA_INS_CLDWS,
HPPA_INS_CLDWX,
HPPA_INS_CLRBTS,
HPPA_INS_CMPB,
HPPA_INS_CMPCLR,
HPPA_INS_CMPIB,
HPPA_INS_CMPICLR,
HPPA_INS_COMB,
HPPA_INS_COMBT,
HPPA_INS_COMBF,
HPPA_INS_COMCLR,
HPPA_INS_COMIB,
HPPA_INS_COMIBT,
HPPA_INS_COMIBF,
HPPA_INS_COMICLR,
HPPA_INS_COPR,
HPPA_INS_COPY,
HPPA_INS_CSTD,
HPPA_INS_CSTDS,
HPPA_INS_CSTDX,
HPPA_INS_CSTW,
HPPA_INS_CSTWS,
HPPA_INS_CSTWX,
HPPA_INS_DCOR,
HPPA_INS_DEP,
HPPA_INS_DEPI,
HPPA_INS_DEPD,
HPPA_INS_DEPDI,
HPPA_INS_DEPW,
HPPA_INS_DEPWI,
HPPA_INS_DIAG,
HPPA_INS_DS,
HPPA_INS_EXTRD,
HPPA_INS_EXTRS,
HPPA_INS_EXTRU,
HPPA_INS_EXTRW,
HPPA_INS_FABS,
HPPA_INS_FADD,
HPPA_INS_FCMP,
HPPA_INS_FCNV,
HPPA_INS_FCNVFF,
HPPA_INS_FCNVFX,
HPPA_INS_FCNVFXT,
HPPA_INS_FCNVXF,
HPPA_INS_FCPY,
HPPA_INS_FDC,
HPPA_INS_FDCE,
HPPA_INS_FDIV,
HPPA_INS_FIC,
HPPA_INS_FICE,
HPPA_INS_FID,
HPPA_INS_FLDD,
HPPA_INS_FLDDS,
HPPA_INS_FLDDX,
HPPA_INS_FLDW,
HPPA_INS_FLDWS,
HPPA_INS_FLDWX,
HPPA_INS_FMPY,
HPPA_INS_FMPYADD,
HPPA_INS_FMPYFADD,
HPPA_INS_FMPYNFADD,
HPPA_INS_FMPYSUB,
HPPA_INS_FNEG,
HPPA_INS_FNEGABS,
HPPA_INS_FREM,
HPPA_INS_FRND,
HPPA_INS_FSQRT,
HPPA_INS_FSTD,
HPPA_INS_FSTDS,
HPPA_INS_FSTDX,
HPPA_INS_FSTW,
HPPA_INS_FSTWS,
HPPA_INS_FSTWX,
HPPA_INS_FSTQS,
HPPA_INS_FSTQX,
HPPA_INS_FSUB,
HPPA_INS_FTEST,
HPPA_INS_GATE,
HPPA_INS_GFR,
HPPA_INS_GFW,
HPPA_INS_GRSHDW,
HPPA_INS_HADD,
HPPA_INS_HAVG,
HPPA_INS_HSHL,
HPPA_INS_HSHLADD,
HPPA_INS_HSHR,
HPPA_INS_HSHRADD,
HPPA_INS_HSUB,
HPPA_INS_IDTLBA,
HPPA_INS_IDTLBP,
HPPA_INS_IDTLBT,
HPPA_INS_IDCOR,
HPPA_INS_IITLBA,
HPPA_INS_IITLBP,
HPPA_INS_IITLBT,
HPPA_INS_LCI,
HPPA_INS_LDB,
HPPA_INS_LDBS,
HPPA_INS_LDBX,
HPPA_INS_LDCD,
HPPA_INS_LDCW,
HPPA_INS_LDCWS,
HPPA_INS_LDCWX,
HPPA_INS_LDD,
HPPA_INS_LDDA,
HPPA_INS_LDH,
HPPA_INS_LDHS,
HPPA_INS_LDHX,
HPPA_INS_LDI,
HPPA_INS_LDIL,
HPPA_INS_LDO,
HPPA_INS_LDSID,
HPPA_INS_LDW,
HPPA_INS_LDWA,
HPPA_INS_LDWAS,
HPPA_INS_LDWAX,
HPPA_INS_LDWM,
HPPA_INS_LDWS,
HPPA_INS_LDWX,
HPPA_INS_LPA,
HPPA_INS_MFCPU,
HPPA_INS_MFCTL,
HPPA_INS_MFIA,
HPPA_INS_MFSP,
HPPA_INS_MIXH,
HPPA_INS_MIXW,
HPPA_INS_MOVB,
HPPA_INS_MOVIB,
HPPA_INS_MTCPU,
HPPA_INS_MTCTL,
HPPA_INS_MTSAR,
HPPA_INS_MTSARCM,
HPPA_INS_MTSM,
HPPA_INS_MTSP,
HPPA_INS_NOP,
HPPA_INS_OR,
HPPA_INS_PDC,
HPPA_INS_PDTLB,
HPPA_INS_PDTLBE,
HPPA_INS_PERMH,
HPPA_INS_PITLB,
HPPA_INS_PITLBE,
HPPA_INS_PMDIS,
HPPA_INS_PMENB,
HPPA_INS_POPBTS,
HPPA_INS_PROBE,
HPPA_INS_PROBEI,
HPPA_INS_PROBER,
HPPA_INS_PROBERI,
HPPA_INS_PROBEW,
HPPA_INS_PROBEWI,
HPPA_INS_PUSHBTS,
HPPA_INS_PUSHNOM,
HPPA_INS_RET,
HPPA_INS_RFI,
HPPA_INS_RFIR,
HPPA_INS_RSM,
HPPA_INS_SHDWGR,
HPPA_INS_SHLADD,
HPPA_INS_SH1ADD,
HPPA_INS_SH1ADDL,
HPPA_INS_SH1ADDO,
HPPA_INS_SH2ADD,
HPPA_INS_SH2ADDL,
HPPA_INS_SH2ADDO,
HPPA_INS_SH3ADD,
HPPA_INS_SH3ADDL,
HPPA_INS_SH3ADDO,
HPPA_INS_SHD,
HPPA_INS_SHRPD,
HPPA_INS_SHRPW,
HPPA_INS_SPOP0,
HPPA_INS_SPOP1,
HPPA_INS_SPOP2,
HPPA_INS_SPOP3,
HPPA_INS_SSM,
HPPA_INS_STB,
HPPA_INS_STBS,
HPPA_INS_STBY,
HPPA_INS_STBYS,
HPPA_INS_STD,
HPPA_INS_STDA,
HPPA_INS_STDBY,
HPPA_INS_STH,
HPPA_INS_STHS,
HPPA_INS_STW,
HPPA_INS_STWA,
HPPA_INS_STWAS,
HPPA_INS_STWS,
HPPA_INS_STWM,
HPPA_INS_SUB,
HPPA_INS_SUBB,
HPPA_INS_SUBBO,
HPPA_INS_SUBI,
HPPA_INS_SUBIO,
HPPA_INS_SUBO,
HPPA_INS_SUBT,
HPPA_INS_SUBTO,
HPPA_INS_SYNC,
HPPA_INS_SYNCDMA,
HPPA_INS_TOCDIS,
HPPA_INS_TOCEN,
HPPA_INS_UADDCM,
HPPA_INS_UADDCMT,
HPPA_INS_UXOR,
HPPA_INS_VDEP,
HPPA_INS_VDEPI,
HPPA_INS_VEXTRS,
HPPA_INS_VEXTRU,
HPPA_INS_VSHD,
HPPA_INS_XMPYU,
HPPA_INS_XOR,
HPPA_INS_ZDEP,
HPPA_INS_ZDEPI,
HPPA_INS_ZVDEP,
HPPA_INS_ZVDEPI,
HPPA_INS_ENDING
} hppa_insn;
/// HPPA space select operand
typedef struct hppa_mem {
hppa_reg base;
hppa_reg space;
cs_ac_type base_access;
} hppa_mem;
// Instruction operand
typedef struct cs_hppa_op {
hppa_op_type type; ///< operand type
union {
hppa_reg reg; ///< register value for REG operand
int64_t imm; ///< immediate value for IMM operand
hppa_mem mem;
};
cs_ac_type access;
} cs_hppa_op;
// Instruction structure
typedef struct cs_hppa {
// Number of operands of this instruction,
// or 0 when instruction has no operand.
uint8_t op_count;
cs_hppa_op operands[NUM_HPPA_OPS]; ///< operands for hppa instruction.
} cs_hppa;
/// HPPA modifiers type. Can be string (most of them) or int (uid, sop)
typedef enum hppa_modifier_type {
HPPA_MOD_STR = 0,
HPPA_MOD_INT = 1
} hppa_modifier_type;
/// hppa string/integer modifier
typedef struct hppa_modifier {
hppa_modifier_type type;
union {
char str_mod[HPPA_STR_MODIFIER_LEN];
uint32_t int_mod;
};
} hppa_modifier;
// Additional instruction info
typedef struct hppa_ext {
hppa_modifier modifiers[HPPA_MAX_MODIFIERS_LEN]; ///< instruction modifiers array
uint8_t mod_num; ///< number of modifiers of current instruction
bool b_writeble; ///< true if some load/store modifier has modify base register bit
bool is_alternative; ///< true if some modifier affects instruction format
} hppa_ext;
// Group of HPPA instructions
typedef enum hppa_insn_group {
HPPA_GRP_INVALID = 0, ///< = CS_GRP_INVALID
HPPA_GRP_COMPUTATION = 128,
HPPA_GRP_MULTIMEDIA,
HPPA_GRP_MEM_REF,
HPPA_GRP_LONG_IMM,
HPPA_GRP_BRANCH,
HPPA_GRP_SYSCTRL,
HPPA_GRP_ASSIST,
HPPA_GRP_FLOAT,
HPPA_GRP_PERFMON,
HPPA_GRP_ENDING,
} hppa_insn_group;
#ifdef __cplusplus
}
#endif
#endif