34 #if !defined(_XED_DECODED_INST_API_H_)
35 # define _XED_DECODED_INST_API_H_
169 unsigned int operand_index);
177 unsigned int operand_index);
193 unsigned int operand_index);
199 unsigned int operand_index);
206 unsigned int operand_index);
240 dstate.
mmode = mmode;
290 if (mode == 2)
return 64;
291 if (mode == 1)
return 32;
300 if (smode == 2)
return 64;
301 if (smode == 1)
return 32;
391 xed_uint64_t runtime_address) ;
411 xed_uint64_t runtime_instruction_address,
433 unsigned int mem_idx);
437 unsigned int mem_idx);
440 unsigned int mem_idx);
444 unsigned int mem_idx);
448 unsigned int mem_idx);
453 unsigned int mem_idx);
458 unsigned int mem_idx);
531 unsigned int mem_idx);
538 unsigned int memop_idx);
630 xed_uint64_t new_value) {
const xed_inst_t * _inst
when we decode an instruction, we set the _inst and get the properites of that instruction here...
XED_DLL_EXPORT void xed_decoded_inst_dump(const xed_decoded_inst_t *p, char *buf, int buflen)
Print out all the information about the decoded instruction to the buffer buf whose length is maximal...
XED_DLL_EXPORT xed_bool_t xed_format_generic(xed_print_info_t *pi)
Disassemble the instruction information to a buffer.
XED_DLL_EXPORT xed_reg_enum_t xed_decoded_inst_get_base_reg(const xed_decoded_inst_t *p, unsigned int mem_idx)
The main container for instructions.
static XED_INLINE void xed_decoded_inst_set_mode(xed_decoded_inst_t *p, xed_machine_mode_enum_t mmode, xed_address_width_enum_t stack_addr_width)
Set the machine mode and stack addressing width directly.
XED_DLL_EXPORT xed_uint_t xed_decoded_inst_get_memory_displacement_width_bits(const xed_decoded_inst_t *p, unsigned int mem_idx)
Result in BITS.
static XED_INLINE void xed_decoded_inst_set_user_data(xed_decoded_inst_t *p, xed_uint64_t new_value)
Modify the user data field.
union xed_decoded_inst_s::@1 u
XED_DLL_EXPORT unsigned int xed_decoded_inst_get_memory_operand_length(const xed_decoded_inst_t *p, unsigned int memop_idx)
static XED_INLINE xed_uint8_t xed_decoded_inst_get_byte(const xed_decoded_inst_t *p, xed_uint_t byte_index)
Read itext byte.
XED_DLL_EXPORT void xed_decoded_inst_zero_keep_mode(xed_decoded_inst_t *p)
Zero the decode structure, but preserve the existing machine state/mode information.
XED_DLL_EXPORT xed_reg_enum_t xed_decoded_inst_get_index_reg(const xed_decoded_inst_t *p, unsigned int mem_idx)
XED_DLL_EXPORT xed_bool_t xed_decoded_inst_mem_written(const xed_decoded_inst_t *p, unsigned int mem_idx)
XED_DLL_EXPORT void xed_decoded_inst_set_memory_displacement(xed_decoded_inst_t *p, xed_int64_t disp, xed_uint_t length_bytes)
Set the memory displacement using a BYTE length.
XED_DLL_EXPORT const xed_simple_flag_t * xed_decoded_inst_get_rflags_info(const xed_decoded_inst_t *p)
See the comment on xed_decoded_inst_uses_rflags().
xed_operand_element_type_enum_t
XED_DLL_EXPORT void xed_decoded_inst_zero_set_mode(xed_decoded_inst_t *p, const xed_state_t *dstate)
Zero the decode structure, but set the machine state/mode information.
static XED_INLINE const xed_operand_values_t * xed_decoded_inst_operands_const(const xed_decoded_inst_t *p)
Obtain a constant pointer to the operands.
static XED_INLINE xed_isa_set_enum_t xed_inst_isa_set(const xed_inst_t *p)
A collection of xed_flag_action_t's and unions of read and written flags.
XED_DLL_EXPORT xed_reg_enum_t xed_decoded_inst_get_reg(const xed_decoded_inst_t *p, xed_operand_enum_t reg_operand)
Return the specified register operand.
XED_DLL_EXPORT void xed_decoded_inst_set_memory_displacement_bits(xed_decoded_inst_t *p, xed_int64_t disp, xed_uint_t length_bits)
Set the memory displacement a BITS length.
XED_DLL_EXPORT xed_uint_t xed_decoded_inst_get_branch_displacement_width(const xed_decoded_inst_t *p)
Result in BYTES.
XED_DLL_EXPORT xed_uint32_t xed_decoded_inst_get_attribute(const xed_decoded_inst_t *p, xed_attribute_enum_t attr)
Returns 1 if the attribute is defined for this instruction.
#define XED_STATIC_CAST(x, y)
XED_DLL_EXPORT xed_bool_t xed_decoded_inst_mem_written_only(const xed_decoded_inst_t *p, unsigned int mem_idx)
static XED_INLINE const xed_inst_t * xed_decoded_inst_inst(const xed_decoded_inst_t *p)
Return the xed_inst_t structure for this instruction.
XED_DLL_EXPORT xed_reg_enum_t xed_decoded_inst_get_seg_reg(const xed_decoded_inst_t *p, unsigned int mem_idx)
XED_DLL_EXPORT unsigned int xed_decoded_inst_operand_element_size_bits(const xed_decoded_inst_t *p, unsigned int operand_index)
Return the size of an element in bits (for SSE and AVX operands)
XED_DLL_EXPORT xed_uint_t xed_decoded_inst_number_of_memory_operands(const xed_decoded_inst_t *p)
XED_DLL_EXPORT unsigned int xed_decoded_inst_get_memop_address_width(const xed_decoded_inst_t *p, xed_uint_t memop_idx)
Returns the addressing width in bits (16,32,64) for MEM0 (memop_idx==0) or MEM1 (memop_idx==1).
XED_DLL_EXPORT xed_uint32_t xed_decoded_inst_is_xrelease(const xed_decoded_inst_t *p)
Returns 1 if the instruction is xrelease.
static XED_INLINE xed_extension_enum_t xed_inst_extension(const xed_inst_t *p)
static XED_INLINE xed_uint_t xed_decoded_inst_get_stack_address_mode_bits(const xed_decoded_inst_t *p)
Returns 16/32/64 indicating the stack addressing mode with in bits.
xed_address_width_enum_t stack_addr_width
for 16b/32b modes
XED_DLL_EXPORT xed_int32_t xed_decoded_inst_get_signed_immediate(const xed_decoded_inst_t *p)
XED_DLL_EXPORT unsigned int xed_decoded_inst_operand_length(const xed_decoded_inst_t *p, unsigned int operand_index)
Deprecated – returns the length in bytes of the operand_index'th operand.
static XED_INLINE unsigned int xed_decoded_inst_get_iform_enum_dispatch(const xed_decoded_inst_t *p)
Return the instruction zero-based iform number based on masking the corresponding xed_iform_enum_t...
static XED_INLINE xed_bits_t xed3_operand_get_mode(const xed_decoded_inst_t *d)
XED_DLL_EXPORT xed_uint_t xed_decoded_inst_get_immediate_is_signed(const xed_decoded_inst_t *p)
Return true if the first immediate (IMM0) is signed.
static XED_INLINE xed_bool_t xed_decoded_inst_valid(const xed_decoded_inst_t *p)
Return true if the instruction is valid.
static XED_INLINE xed_uint8_t xed3_operand_get_uimm1(const xed_decoded_inst_t *d)
XED_DLL_EXPORT void xed_decoded_inst_set_immediate_unsigned(xed_decoded_inst_t *p, xed_uint64_t x, xed_uint_t length_bytes)
Set the unsigned immediate a BYTE length.
XED_DLL_EXPORT void xed_decoded_inst_set_branch_displacement(xed_decoded_inst_t *p, xed_int32_t disp, xed_uint_t length_bytes)
Set the branch displacement using a BYTE length.
static XED_INLINE xed_iclass_enum_t xed_inst_iclass(const xed_inst_t *p)
XED_DLL_EXPORT void xed_decoded_inst_set_immediate_signed(xed_decoded_inst_t *p, xed_int32_t x, xed_uint_t length_bytes)
Set the signed immediate a BYTE length.
static XED_INLINE xed_iform_enum_t xed_inst_iform_enum(const xed_inst_t *p)
static XED_INLINE xed_operand_values_t * xed_decoded_inst_operands(xed_decoded_inst_t *p)
Obtain a non-constant pointer to the operands.
XED_DLL_EXPORT void xed_decoded_inst_zero(xed_decoded_inst_t *p)
Zero the decode structure completely.
XED_DLL_EXPORT xed_uint64_t xed_decoded_inst_get_unsigned_immediate(const xed_decoded_inst_t *p)
static XED_INLINE xed_uint_t xed_decoded_inst_get_length(const xed_decoded_inst_t *p)
Return the length of the decoded instruction in bytes.
XED_DLL_EXPORT xed_attributes_t xed_decoded_inst_get_attributes(const xed_decoded_inst_t *p)
Returns the attribute bitvector.
XED_DLL_EXPORT xed_uint32_t xed_decoded_inst_has_mpx_prefix(const xed_decoded_inst_t *p)
Returns 1 if the instruction has mpx prefix.
static XED_INLINE xed_extension_enum_t xed_decoded_inst_get_extension(const xed_decoded_inst_t *p)
Return the instruction xed_extension_enum_t enumeration.
static XED_INLINE unsigned int xed_inst_noperands(const xed_inst_t *p)
Number of instruction operands.
static XED_INLINE xed_iform_enum_t xed_decoded_inst_get_iform_enum(const xed_decoded_inst_t *p)
Return the instruction iform enum of type xed_iform_enum_t .
XED_DLL_EXPORT xed_bool_t xed_format_context(xed_syntax_enum_t syntax, const xed_decoded_inst_t *xedd, char *out_buffer, int buffer_len, xed_uint64_t runtime_instruction_address, void *context, xed_disassembly_callback_fn_t symbolic_callback)
Disassemble the decoded instruction using the specified syntax.
static XED_INLINE xed_uint_t xed_decoded_inst_get_machine_mode_bits(const xed_decoded_inst_t *p)
Returns 16/32/64 indicating the machine mode with in bits.
XED_DLL_EXPORT void xed_operand_values_set_mode(xed_operand_values_t *p, const xed_state_t *dstate)
Set the mode values.
XED_DLL_EXPORT void xed_decoded_inst_zero_keep_mode_from_operands(xed_decoded_inst_t *p, const xed_operand_values_t *operands)
Zero the decode structure, but copy the existing machine state/mode information from the supplied ope...
static XED_INLINE void xed_decoded_inst_set_input_chip(xed_decoded_inst_t *p, xed_chip_enum_t chip)
Set a user-specified xed_chip_enum_t chip name for restricting decode.
XED_DLL_EXPORT xed_int64_t xed_decoded_inst_get_memory_displacement(const xed_decoded_inst_t *p, unsigned int mem_idx)
XED_DLL_EXPORT void xed_decoded_inst_set_scale(xed_decoded_inst_t *p, xed_uint_t scale)
XED_DLL_EXPORT xed_uint_t xed_decoded_inst_get_scale(const xed_decoded_inst_t *p, unsigned int mem_idx)
XED_DLL_EXPORT xed_uint8_t xed_decoded_inst_get_modrm(const xed_decoded_inst_t *p)
Returns the modrm byte.
XED_DLL_EXPORT void xed_decoded_inst_set_immediate_unsigned_bits(xed_decoded_inst_t *p, xed_uint64_t x, xed_uint_t length_bits)
Set the unsigned immediate a BITS length.
XED_DLL_EXPORT unsigned int xed_decoded_inst_operand_elements(const xed_decoded_inst_t *p, unsigned int operand_index)
Return the number of element in the operand (for SSE and AVX operands)
XED_DLL_EXPORT xed_operand_element_type_enum_t xed_decoded_inst_operand_element_type(const xed_decoded_inst_t *p, unsigned int operand_index)
Return the type of an element of type xed_operand_element_type_enum_t (for SSE and AVX operands) ...
XED_DLL_EXPORT xed_uint_t xed_decoded_inst_get_immediate_width_bits(const xed_decoded_inst_t *p)
Return the immediate width in BITS.
constant information about a decoded instruction form, including the pointer to the constant operand ...
Encapsulates machine modes for decoder/encoder requests.
XED_DLL_EXPORT xed_uint_t xed_decoded_inst_get_nprefixes(xed_decoded_inst_t *p)
Returns the number of legacy prefixes.
static XED_INLINE unsigned int xed_decoded_inst_noperands(const xed_decoded_inst_t *p)
Return the number of operands.
static XED_INLINE xed_isa_set_enum_t xed_decoded_inst_get_isa_set(xed_decoded_inst_t const *const p)
Return the instruction xed_isa_set_enum_t enumeration.
XED_DLL_EXPORT xed_uint_t xed_decoded_inst_get_branch_displacement_width_bits(const xed_decoded_inst_t *p)
Result in BITS.
static XED_INLINE xed_category_enum_t xed_decoded_inst_get_category(const xed_decoded_inst_t *p)
Return the instruction xed_category_enum_t enumeration.
XED_DLL_EXPORT xed_uint32_t xed_decoded_inst_get_operand_width(const xed_decoded_inst_t *p)
Returns the operand width in bits: 8/16/32/64.
static XED_INLINE xed_uint8_t xed_decoded_inst_get_second_immediate(const xed_decoded_inst_t *p)
Return the second immediate.
XED_DLL_EXPORT xed_bool_t xed_decoded_inst_is_prefetch(const xed_decoded_inst_t *p)
Returns true if the instruction is a prefetch.
XED_DLL_EXPORT unsigned int xed_decoded_inst_operand_length_bits(const xed_decoded_inst_t *p, unsigned int operand_index)
Return the length in bits of the operand_index'th operand.
XED_DLL_EXPORT xed_bool_t xed_decoded_inst_masked_vector_operation(xed_decoded_inst_t *p)
Returns 1 iff the instruction uses destination-masking.
XED_DLL_EXPORT xed_bool_t xed_decoded_inst_conditionally_writes_registers(const xed_decoded_inst_t *p)
int(* xed_disassembly_callback_fn_t)(xed_uint64_t address, char *symbol_buffer, xed_uint32_t buffer_length, xed_uint64_t *offset, void *context)
A xed_disassembly_callback_fn_t takes an address, a pointer to a symbol buffer of buffer_length bytes...
XED_DLL_EXPORT xed_bool_t xed_decoded_inst_uses_rflags(const xed_decoded_inst_t *p)
This returns 1 if the flags are read or written.
XED_DLL_EXPORT void xed_decoded_inst_set_branch_displacement_bits(xed_decoded_inst_t *p, xed_int32_t disp, xed_uint_t length_bits)
Set the branch displacement a BITS length.
static XED_INLINE xed_chip_enum_t xed_decoded_inst_get_input_chip(const xed_decoded_inst_t *p)
Return the user-specified xed_chip_enum_t chip name, or XED_CHIP_INVALID if not set.
XED_DLL_EXPORT xed_bool_t xed_decoded_inst_dump_xed_format(const xed_decoded_inst_t *p, char *buf, int buflen, xed_uint64_t runtime_address)
Print the instruction information in a verbose format.
xed_uint8_t _decoded_length
XED_DLL_EXPORT xed_bool_t xed_decoded_inst_mem_read(const xed_decoded_inst_t *p, unsigned int mem_idx)
XED_DLL_EXPORT xed_bool_t xed_decoded_inst_valid_for_chip(xed_decoded_inst_t const *const p, xed_chip_enum_t chip)
Indicate if this decoded instruction is valid for the specified xed_chip_enum_t chip.
XED_DLL_EXPORT xed_int32_t xed_decoded_inst_get_branch_displacement(const xed_decoded_inst_t *p)
static XED_INLINE void xed3_operand_set_chip(xed_decoded_inst_t *d, xed_chip_enum_t opval)
static XED_INLINE xed_iclass_enum_t xed_decoded_inst_get_iclass(const xed_decoded_inst_t *p)
Return the instruction xed_iclass_enum_t enumeration.
XED_DLL_EXPORT xed_uint_t xed_decoded_inst_vector_length_bits(xed_decoded_inst_t const *const p)
Returns 128, 256 or 512 for operations in the VEX, EVEX (or XOP) encoding space and returns 0 for (mo...
XED_DLL_EXPORT void xed_decoded_inst_set_immediate_signed_bits(xed_decoded_inst_t *p, xed_int32_t x, xed_uint_t length_bits)
Set the signed immediate a BITS length.
union xed_decoded_inst_s::@0 _byte_array
static XED_INLINE xed_bits_t xed3_operand_get_smode(const xed_decoded_inst_t *d)
xed_machine_mode_enum_t mmode
real architected machine modes
static XED_INLINE xed_category_enum_t xed_inst_category(const xed_inst_t *p)
static XED_INLINE xed_chip_enum_t xed3_operand_get_chip(const xed_decoded_inst_t *d)
This contains the information used by the various disassembly printers.
XED_DLL_EXPORT xed_uint32_t xed_decoded_inst_is_xacquire(const xed_decoded_inst_t *p)
Returns 1 if the instruction is xacquire.
XED_DLL_EXPORT xed_uint_t xed_decoded_inst_get_memory_displacement_width(const xed_decoded_inst_t *p, unsigned int mem_idx)
Result in BYTES.
static XED_INLINE xed_uint64_t xed_decoded_inst_get_user_data(xed_decoded_inst_t *p)
Return a user data field for arbitrary use by the user after decoding.
XED_DLL_EXPORT xed_uint_t xed_decoded_inst_get_immediate_width(const xed_decoded_inst_t *p)
Return the immediate width in BYTES.