diff --git a/Mapping.h b/Mapping.h index f06c2cf0f2..313be0f502 100644 --- a/Mapping.h +++ b/Mapping.h @@ -33,6 +33,7 @@ typedef struct insn_map { loongarch_suppl_info loongarch; aarch64_suppl_info aarch64; systemz_suppl_info systemz; + xtensa_suppl_info xtensa; } suppl_info; // Supplementary information for each instruction. #endif } insn_map; diff --git a/arch/Xtensa/XtensaMapping.c b/arch/Xtensa/XtensaMapping.c index 7da4f6aad1..207aa6d73b 100644 --- a/arch/Xtensa/XtensaMapping.c +++ b/arch/Xtensa/XtensaMapping.c @@ -59,6 +59,12 @@ static void set_instr_map_data(MCInst *MI) map_implicit_reads(MI, mapping_insns); map_implicit_writes(MI, mapping_insns); map_groups(MI, mapping_insns); + + const xtensa_suppl_info *suppl_info = + map_get_suppl_info(MI, mapping_insns); + if (suppl_info) { + Xtensa_get_detail(MI)->format = suppl_info->form; + } #endif } diff --git a/bindings/python/capstone/xtensa.py b/bindings/python/capstone/xtensa.py index 0e39470d18..b346b55384 100644 --- a/bindings/python/capstone/xtensa.py +++ b/bindings/python/capstone/xtensa.py @@ -45,6 +45,7 @@ class CsXtensa(ctypes.Structure): _fields_ = ( ("op_count", ctypes.c_uint8), ("operands", XtensaOp * 8), + ("format", ctypes.c_uint32), ) diff --git a/include/capstone/xtensa.h b/include/capstone/xtensa.h index d89a1e1001..62754e697e 100644 --- a/include/capstone/xtensa.h +++ b/include/capstone/xtensa.h @@ -1681,6 +1681,10 @@ typedef enum { // generated content end } xtensa_insn_form; +typedef struct { + xtensa_insn_form form; +} xtensa_suppl_info; + typedef enum cs_xtensa_op_type { XTENSA_OP_INVALID = CS_OP_INVALID, ///< = (Uninitialized). XTENSA_OP_REG = CS_OP_REG, ///< = (Register operand). @@ -1712,6 +1716,7 @@ typedef struct cs_xtensa_operand { typedef struct cs_xtensa { uint8_t op_count; cs_xtensa_op operands[MAX_XTENSA_OPS]; + xtensa_insn_form format; } cs_xtensa; #ifdef __cplusplus