5af28808 Update Auto-Sync to Python 3.13 and tree-sitter-py 24.0 (#2705) 99f018ac Python binding: (#2742) a07baf83 Auto-Sync update Sparc LLVM-18 (#2704) 81c5c93d Enable to generate legacy MC tests for the fuzzer. (#2733) a25d4980 Add warning about naive search and replace to patch reg names. (#2728) 7ac87d17 Print immediate only memory operands for AArch64. (#2732) c34034c8 Add x30 implicit read to the RET alias. (#2739) 95a4ca3e Update source list before installing valgrind. (#2730) 6909724e Make assertion hit warnings optional in release builds. (#2729) fe6bdc6e Make SStream respect the CS_OPT_UNSIGNED flag. (#2723) 21ce3624 Use cs_ac_type for operand access mode in all arches and use cs_xtensa_op_type for Xtensa operand type (#2721) df26583f clang-format: change license to BSD-3-Clause (#2724) 280b749e Remove unused files. (#2709) 87908ece Add flag for the SoftFail case of the LLVM disassembler. (#2707) efc0ba44 Fix missing operand for smstart, due to space replaced by tab (#2720) 2ae64133 Fix missing sp register read in ret instruction (#2719) 8df252a6 Fix arm pop reg access (#2718) 14612272 ARM: fix typo, cspr -> cpsr (#2716) f2f0a3c3 Fix LoongArch ld/st instructions register info (#2701) 829be2bf LoongArch: Compute absolute address for address operand (#2699) 42fbce6c Add jump group for generic jirl (#2698) fc525c73 Apple AArch64 proprietary (#2692) 895f2f2e Build PDB for debugging on Windows (#2685) 5c3aef03 Version: Update to v6.0.0-alpha4 (#2682) 106f7d3b Update read/written registers for x87 comparison instructions (#2680) ebe3ef2a Add workflow for building on Windows (#2675) 72f7d305 Revert "Add a script to compare the inc file content with the latest generate…" (#2678) 5b5c5ed8 Fix nanomips decoding of jalrc (#2672) ae03cca4 Mips32r6_64r632 is for both mips32r6 and mips64r6 (#2673) 21178aea Add a script to compare the inc file content with the latest generated ones. (#2667) 81a6ba03 MIPS: Fix MIPS16 decoding, wrong flags and ghost registers (#2665) 98a393e3 Stringify BH fields when printing ppc details (#2663) 2607d0f3 Remove undefined constants in riscv_const.py (#2660) (#2661) 5058c634 Decode BH field in print_insn_detail_ppc (#2662) 6461ed08 Add Call group to svc, smc and hvc. (#2651) e2f1dc8d Tms32c64x Little Endian (#2648) 5464c91d Fix build for compilers requiring explicit static for inline functions.. (#2645) bb2f6579 Enhance shift value and types of shift instructions. (#2638) cd282ef5 Update operand type enums of all arch modules to the one in `capstone.h` (#2633) dc0c0909 cmake: Fix building capstone as sub-project (#2629) cd8dd20c - Added missing files for sdist archive (#2624) 9affd99b Give the user some guidance where to add missing enumeration values. (#2639) 1bea3fab Add checks for MIPS details on cstest_py (#2640) ace8056c Add aliases mapping for MIPS & test for id, alias_id (#2635) 1abe1868 Build Tarball before DEB/RPM package. (#2627) 0a012190 Switch to ubuntu-24.04-arm runner image (#2625) 4e0b8c48 Fix wrong version requirement of tricore instructions: (#2620) 8ac2843b chore(version): Update Version to 6.0.0-Alpha3 (#2616) d7ef910b Rebased #2570 (#2614) c831cd5e Fix SystemZ macro in Makefile (#2603) 30601176 Apply new EVM opcode updates (#2602) 3c4d7fc8 Add tricore tc1.8 instructions (#2595) 5f290cad Create debian and rpm package on releases (#2590) 0f09210a delete travis (#2600) 5c5f756f Downgrade labeler to v4 due to https://github.com/actions/labeler/issues/710. (#2598) git-subtree-dir: external/capstone git-subtree-split: 5af288083e9f03e32723f9708c305692f866b666
237 lines
4.9 KiB
C
237 lines
4.9 KiB
C
#ifndef CAPSTONE_XCORE_H
|
|
#define CAPSTONE_XCORE_H
|
|
|
|
/* Capstone Disassembly Engine */
|
|
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2014-2015 */
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "platform.h"
|
|
#include "cs_operand.h"
|
|
|
|
#ifdef _MSC_VER
|
|
#pragma warning(disable:4201)
|
|
#endif
|
|
|
|
/// Operand type for instruction's operands
|
|
typedef enum xcore_op_type {
|
|
XCORE_OP_INVALID = CS_OP_INVALID, ///< = CS_OP_INVALID (Uninitialized).
|
|
XCORE_OP_REG = CS_OP_REG, ///< = CS_OP_REG (Register operand).
|
|
XCORE_OP_IMM = CS_OP_IMM, ///< = CS_OP_IMM (Immediate operand).
|
|
XCORE_OP_MEM = CS_OP_MEM, ///< = CS_OP_MEM (Memory operand).
|
|
} xcore_op_type;
|
|
|
|
/// XCore registers
|
|
typedef enum xcore_reg {
|
|
XCORE_REG_INVALID = 0,
|
|
|
|
XCORE_REG_CP,
|
|
XCORE_REG_DP,
|
|
XCORE_REG_LR,
|
|
XCORE_REG_SP,
|
|
XCORE_REG_R0,
|
|
XCORE_REG_R1,
|
|
XCORE_REG_R2,
|
|
XCORE_REG_R3,
|
|
XCORE_REG_R4,
|
|
XCORE_REG_R5,
|
|
XCORE_REG_R6,
|
|
XCORE_REG_R7,
|
|
XCORE_REG_R8,
|
|
XCORE_REG_R9,
|
|
XCORE_REG_R10,
|
|
XCORE_REG_R11,
|
|
|
|
// pseudo registers
|
|
XCORE_REG_PC, ///< pc
|
|
|
|
// internal thread registers
|
|
// see The-XMOS-XS1-Architecture(X7879A).pdf
|
|
XCORE_REG_SCP, ///< save pc
|
|
XCORE_REG_SSR, //< save status
|
|
XCORE_REG_ET, //< exception type
|
|
XCORE_REG_ED, //< exception data
|
|
XCORE_REG_SED, //< save exception data
|
|
XCORE_REG_KEP, //< kernel entry pointer
|
|
XCORE_REG_KSP, //< kernel stack pointer
|
|
XCORE_REG_ID, //< thread ID
|
|
|
|
XCORE_REG_ENDING, // <-- mark the end of the list of registers
|
|
} xcore_reg;
|
|
|
|
/// Instruction's operand referring to memory
|
|
/// This is associated with XCORE_OP_MEM operand type above
|
|
typedef struct xcore_op_mem {
|
|
uint8_t base; ///< base register, can be safely interpreted as
|
|
///< a value of type `xcore_reg`, but it is only
|
|
///< one byte wide
|
|
uint8_t index; ///< index register, same conditions apply here
|
|
int32_t disp; ///< displacement/offset value
|
|
int direct; ///< +1: forward, -1: backward
|
|
} xcore_op_mem;
|
|
|
|
/// Instruction operand
|
|
typedef struct cs_xcore_op {
|
|
xcore_op_type type; ///< operand type
|
|
union {
|
|
xcore_reg reg; ///< register value for REG operand
|
|
int32_t imm; ///< immediate value for IMM operand
|
|
xcore_op_mem mem; ///< base/disp value for MEM operand
|
|
};
|
|
} cs_xcore_op;
|
|
|
|
/// Instruction structure
|
|
typedef struct cs_xcore {
|
|
/// Number of operands of this instruction,
|
|
/// or 0 when instruction has no operand.
|
|
uint8_t op_count;
|
|
cs_xcore_op operands[8]; ///< operands for this instruction.
|
|
} cs_xcore;
|
|
|
|
/// XCore instruction
|
|
typedef enum xcore_insn {
|
|
XCORE_INS_INVALID = 0,
|
|
|
|
XCORE_INS_ADD,
|
|
XCORE_INS_ANDNOT,
|
|
XCORE_INS_AND,
|
|
XCORE_INS_ASHR,
|
|
XCORE_INS_BAU,
|
|
XCORE_INS_BITREV,
|
|
XCORE_INS_BLA,
|
|
XCORE_INS_BLAT,
|
|
XCORE_INS_BL,
|
|
XCORE_INS_BF,
|
|
XCORE_INS_BT,
|
|
XCORE_INS_BU,
|
|
XCORE_INS_BRU,
|
|
XCORE_INS_BYTEREV,
|
|
XCORE_INS_CHKCT,
|
|
XCORE_INS_CLRE,
|
|
XCORE_INS_CLRPT,
|
|
XCORE_INS_CLRSR,
|
|
XCORE_INS_CLZ,
|
|
XCORE_INS_CRC8,
|
|
XCORE_INS_CRC32,
|
|
XCORE_INS_DCALL,
|
|
XCORE_INS_DENTSP,
|
|
XCORE_INS_DGETREG,
|
|
XCORE_INS_DIVS,
|
|
XCORE_INS_DIVU,
|
|
XCORE_INS_DRESTSP,
|
|
XCORE_INS_DRET,
|
|
XCORE_INS_ECALLF,
|
|
XCORE_INS_ECALLT,
|
|
XCORE_INS_EDU,
|
|
XCORE_INS_EEF,
|
|
XCORE_INS_EET,
|
|
XCORE_INS_EEU,
|
|
XCORE_INS_ENDIN,
|
|
XCORE_INS_ENTSP,
|
|
XCORE_INS_EQ,
|
|
XCORE_INS_EXTDP,
|
|
XCORE_INS_EXTSP,
|
|
XCORE_INS_FREER,
|
|
XCORE_INS_FREET,
|
|
XCORE_INS_GETD,
|
|
XCORE_INS_GET,
|
|
XCORE_INS_GETN,
|
|
XCORE_INS_GETR,
|
|
XCORE_INS_GETSR,
|
|
XCORE_INS_GETST,
|
|
XCORE_INS_GETTS,
|
|
XCORE_INS_INCT,
|
|
XCORE_INS_INIT,
|
|
XCORE_INS_INPW,
|
|
XCORE_INS_INSHR,
|
|
XCORE_INS_INT,
|
|
XCORE_INS_IN,
|
|
XCORE_INS_KCALL,
|
|
XCORE_INS_KENTSP,
|
|
XCORE_INS_KRESTSP,
|
|
XCORE_INS_KRET,
|
|
XCORE_INS_LADD,
|
|
XCORE_INS_LD16S,
|
|
XCORE_INS_LD8U,
|
|
XCORE_INS_LDA16,
|
|
XCORE_INS_LDAP,
|
|
XCORE_INS_LDAW,
|
|
XCORE_INS_LDC,
|
|
XCORE_INS_LDW,
|
|
XCORE_INS_LDIVU,
|
|
XCORE_INS_LMUL,
|
|
XCORE_INS_LSS,
|
|
XCORE_INS_LSUB,
|
|
XCORE_INS_LSU,
|
|
XCORE_INS_MACCS,
|
|
XCORE_INS_MACCU,
|
|
XCORE_INS_MJOIN,
|
|
XCORE_INS_MKMSK,
|
|
XCORE_INS_MSYNC,
|
|
XCORE_INS_MUL,
|
|
XCORE_INS_NEG,
|
|
XCORE_INS_NOT,
|
|
XCORE_INS_OR,
|
|
XCORE_INS_OUTCT,
|
|
XCORE_INS_OUTPW,
|
|
XCORE_INS_OUTSHR,
|
|
XCORE_INS_OUTT,
|
|
XCORE_INS_OUT,
|
|
XCORE_INS_PEEK,
|
|
XCORE_INS_REMS,
|
|
XCORE_INS_REMU,
|
|
XCORE_INS_RETSP,
|
|
XCORE_INS_SETCLK,
|
|
XCORE_INS_SET,
|
|
XCORE_INS_SETC,
|
|
XCORE_INS_SETD,
|
|
XCORE_INS_SETEV,
|
|
XCORE_INS_SETN,
|
|
XCORE_INS_SETPSC,
|
|
XCORE_INS_SETPT,
|
|
XCORE_INS_SETRDY,
|
|
XCORE_INS_SETSR,
|
|
XCORE_INS_SETTW,
|
|
XCORE_INS_SETV,
|
|
XCORE_INS_SEXT,
|
|
XCORE_INS_SHL,
|
|
XCORE_INS_SHR,
|
|
XCORE_INS_SSYNC,
|
|
XCORE_INS_ST16,
|
|
XCORE_INS_ST8,
|
|
XCORE_INS_STW,
|
|
XCORE_INS_SUB,
|
|
XCORE_INS_SYNCR,
|
|
XCORE_INS_TESTCT,
|
|
XCORE_INS_TESTLCL,
|
|
XCORE_INS_TESTWCT,
|
|
XCORE_INS_TSETMR,
|
|
XCORE_INS_START,
|
|
XCORE_INS_WAITEF,
|
|
XCORE_INS_WAITET,
|
|
XCORE_INS_WAITEU,
|
|
XCORE_INS_XOR,
|
|
XCORE_INS_ZEXT,
|
|
|
|
XCORE_INS_ENDING, // <-- mark the end of the list of instructions
|
|
} xcore_insn;
|
|
|
|
/// Group of XCore instructions
|
|
typedef enum xcore_insn_group {
|
|
XCORE_GRP_INVALID = 0, ///< = CS_GRP_INVALID
|
|
|
|
// Generic groups
|
|
// all jump instructions (conditional+direct+indirect jumps)
|
|
XCORE_GRP_JUMP, ///< = CS_GRP_JUMP
|
|
|
|
XCORE_GRP_ENDING, // <-- mark the end of the list of groups
|
|
} xcore_insn_group;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|