+++ /dev/null
-/*BEGIN_LEGAL
-Intel Open Source License
-
-Copyright (c) 2002-2007 Intel Corporation
-All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer. Redistributions
-in binary form must reproduce the above copyright notice, this list of
-conditions and the following disclaimer in the documentation and/or
-other materials provided with the distribution. Neither the name of
-the Intel Corporation nor the names of its contributors may be used to
-endorse or promote products derived from this software without
-specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR
-ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-END_LEGAL */
-/// @file xed-operand-values-interface.h
-/// @author Mark Charney <mark.charney@intel.com>
-
-#if !defined(_XED_OPERAND_VALUES_INTERFACE_H_)
-# define _XED_OPERAND_VALUES_INTERFACE_H_
-
-#include "xed-common-hdrs.h"
-#include "xed-common-defs.h"
-#include "xed-portability.h"
-#include "xed-util.h"
-#include "xed-types.h"
-#include "xed-state.h" // a generated file
-#include "xed-operand-enum.h" // a generated file
-#include "xed-operand-storage.h"
-#include "xed-reg-enum.h" // generated
-#include "xed-iclass-enum.h" // generated
-/// @name Initialization
-//@{
-/// @ingroup OPERANDS
-/// Initializes operand structure
-XED_DLL_EXPORT void xed_operand_values_init(xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-/// Initializes operand structure and sets state values
-XED_DLL_EXPORT void xed_operand_values_init_set_mode(xed_operand_values_t* p,
- const xed_state_t* dstate);
-/// @ingroup OPERANDS
-/// Initializes dst operand structure but preserves the existing
-/// MODE/SMODE/AMODE values from the src operand structure.
-XED_DLL_EXPORT void xed_operand_values_init_keep_mode( xed_operand_values_t* dst,
- const xed_operand_values_t* src );
-//@}
-
-// Returns the raw operand fields. Do not use this.
-XED_DLL_EXPORT xed_uint32_t
-xed_operand_values_get_operand_decider(const xed_operand_values_t* p,
- xed_operand_enum_t operand_decider_index) ;
-
-
-///////////////////////////////////////////////////////////
-/// @name String output
-//@{
-/// @ingroup OPERANDS
-/// Dump all the information about the operands to buf.
-XED_DLL_EXPORT void xed_operand_values_dump(const xed_operand_values_t* ov, char* buf, int buflen);
-/// @ingroup OPERANDS
-/// More tersely dump all the information about the operands to buf.
-XED_DLL_EXPORT void xed_operand_values_print_short(const xed_operand_values_t* ov, char* buf, int buflen);
-//@}
-
-/// @name REP/REPNE Prefixes
-//@{
-/// @ingroup OPERANDS
-/// True if the instruction has a real REP prefix. This returns false if
-/// there is no F2/F3 prefix or the F2/F3 prefix is used to refine the
-/// opcode as in some SSE operations.
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_real_rep(const xed_operand_values_t* p);
-/// @ingroup OPERANDS
-/// True if the instruction as a real F3 REP prefix.
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_rep_prefix(const xed_operand_values_t* p);
-/// @ingroup OPERANDS
-/// True if the instruction as a real F2 REP prefix.
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_repne_prefix(const xed_operand_values_t* p);
-//@}
-
-/// @ingroup OPERANDS
-/// Returns true if the memory operation has atomic read-modify-write
-/// semantics. An XCHG accessing memory is atomic with or without a
-/// LOCK prefix.
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_get_atomic(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-/// Returns true if the memory operatoin has a valid lock prefix.
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_lock_prefix(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-/// Indicates if the default segment is being used.
-/// @param[in] p the pointer to the #xed_operand_values_t structure.
-/// @param[in] i 0 or 1, indicating which memory operation.
-/// @return true if the memory operation is using the default segment for the associated addressing mode base register.
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_using_default_segment(const xed_operand_values_t* p, unsigned int i);
-
-
-
-/// @ingroup OPERANDS
-/// Returns The effective operand width in bits: 16/32/64. Note this is not
-/// the same as the width of the operand! For 8 bit operations, the
-/// effective operand width is the machine mode's default width.
-XED_DLL_EXPORT xed_uint32_t xed_operand_values_get_effective_operand_width(const xed_operand_values_t* p);
-/// @ingroup OPERANDS
-/// Returns The effective address width in bits: 16/32/64.
-XED_DLL_EXPORT xed_uint32_t xed_operand_values_get_effective_address_width(const xed_operand_values_t* p);
-
-
-/// @ingroup OPERANDS
-/// True if there is a memory displacement
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_memory_displacement(const xed_operand_values_t* p);
-/// @ingroup OPERANDS
-/// True if there is a branch displacement
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_branch_displacement(const xed_operand_values_t* p);
-/// @ingroup OPERANDS
-/// True if there is a memory or branch displacement
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_displacement(const xed_operand_values_t* p);
-
-
-/// @ingroup OPERANDS
-/// Deprecated. Compatibility function for XED0. See has_memory_displacement().
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_get_displacement_for_memop(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-/// Return true if there is an immediate operand
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_immediate(const xed_operand_values_t* p);
-
-
-/// @ingroup OPERANDS
-/// ALIAS for has_displacement().
-/// Deprecated. See has_memory_displacement() and
-/// has_branch_displacement().
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_disp(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_address_size_prefix(const xed_operand_values_t* p);
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_operand_size_prefix(const xed_operand_values_t* p);
-
-#if 0
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_refining_66_prefix(const xed_operand_values_t* p);
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_refining_f2_prefix(const xed_operand_values_t* p);
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_refining_f3_prefix(const xed_operand_values_t* p);
-#endif
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_segment_prefix(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-/// Return the segment prefix, if any, as a #xed_reg_enum_t value.
-XED_DLL_EXPORT xed_reg_enum_t
-xed_operand_values_segment_prefix(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_is_prefetch(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_bool_t xed_operand_values_get_long_mode(const xed_operand_values_t* p);
-
-/// @name Memory Addressing
-//@{
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_accesses_memory(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT unsigned int
-xed_operand_values_number_of_memory_operands(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT unsigned int
-xed_operand_values_get_memory_operand_length(const xed_operand_values_t* p,
- unsigned int memop_idx);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_reg_enum_t
-xed_operand_values_get_base_reg(const xed_operand_values_t* p,unsigned int memop_idx);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_reg_enum_t
-xed_operand_values_get_index_reg(const xed_operand_values_t* p,unsigned int memop_idx);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_reg_enum_t
-xed_operand_values_get_seg_reg(const xed_operand_values_t* p,unsigned int memop_idx);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT unsigned int
-xed_operand_values_get_scale(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-/// Returns true if the instruction access memory but without using a MODRM
-/// byte limiting its addressing modes.
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_memop_without_modrm(const xed_operand_values_t* p);
-/// @ingroup OPERANDS
-/// Returns true if the instruction has a MODRM byte.
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_modrm_byte(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-/// Returns true if the instruction has a SIB byte.
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_has_sib_byte(const xed_operand_values_t* p);
-//@}
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_branch_not_taken_hint(const xed_operand_values_t* p);
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_branch_taken_hint(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_bool_t
-xed_operand_values_is_nop(const xed_operand_values_t* p);
-
-
-/// @name Immediates
-//@{
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_int64_t
-xed_operand_values_get_immediate_int64(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_uint64_t
-xed_operand_values_get_immediate_uint64(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-/// Return true if the first immediate (IMM0) is signed
-XED_DLL_EXPORT xed_uint_t xed_operand_values_get_immediate_is_signed(const xed_operand_values_t* p);
-
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_uint8_t
-xed_operand_values_get_immediate_byte(const xed_operand_values_t* p,unsigned int i);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_uint8_t
-xed_operand_values_get_second_immediate(const xed_operand_values_t* p);
-//@}
-
-/// @name Memory Displacements
-//@{
-/// @ingroup OPERANDS
-/// Return the memory displacement width in BYTES
-XED_DLL_EXPORT xed_uint32_t
-xed_operand_values_get_memory_displacement_length(const xed_operand_values_t* p);
-/// @ingroup OPERANDS
-/// Return the memory displacement width in BITS
-XED_DLL_EXPORT xed_uint32_t
-xed_operand_values_get_memory_displacement_length_bits(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_int64_t
-xed_operand_values_get_memory_displacement_int64(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_uint8_t
-xed_operand_values_get_memory_displacement_byte(const xed_operand_values_t* p,unsigned int i);
-//@}
-
-/// @name Branch Displacements
-//@{
-/// @ingroup OPERANDS
-/// Return the branch displacement width in bytes
-XED_DLL_EXPORT xed_uint32_t
-xed_operand_values_get_branch_displacement_length(const xed_operand_values_t* p);
-/// @ingroup OPERANDS
-/// Return the branch displacement width in bits
-XED_DLL_EXPORT xed_uint32_t
-xed_operand_values_get_branch_displacement_length_bits(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_int32_t
-xed_operand_values_get_branch_displacement_int32(const xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_uint8_t
-xed_operand_values_get_branch_displacement_byte(const xed_operand_values_t* p,unsigned int i);
-//@}
-
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT xed_iclass_enum_t
-xed_operand_values_get_iclass(const xed_operand_values_t* p);
-
-////////////////////////////////////////////////////
-// ENCODE API
-////////////////////////////////////////////////////
-/// @name Encoding
-//@{
-/// @ingroup OPERANDS
-XED_DLL_EXPORT void xed_operand_values_zero_immediate(xed_operand_values_t* p);
-/// @ingroup OPERANDS
-XED_DLL_EXPORT void xed_operand_values_zero_branch_displacement(xed_operand_values_t* p);
-/// @ingroup OPERANDS
-XED_DLL_EXPORT void xed_operand_values_zero_memory_displacement(xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT void xed_operand_values_set_lock(xed_operand_values_t* p);
-/// @ingroup OPERANDS
-XED_DLL_EXPORT void xed_operand_values_zero_segment_override(xed_operand_values_t* p);
-
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT void
-xed_operand_values_set_iclass(xed_operand_values_t* p,xed_iclass_enum_t iclass);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT void
-xed_operand_values_set_effective_operand_width(xed_operand_values_t* p,unsigned int width);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT void
-xed_operand_values_set_memory_operand_length(xed_operand_values_t* p,unsigned int memop_length);
-
-
-/// @ingroup OPERANDS
-/// Set the memory displacement using a BYTES length
-XED_DLL_EXPORT void
-xed_operand_values_set_memory_displacement(xed_operand_values_t* p,xed_int64_t x, unsigned int len);
-/// @ingroup OPERANDS
-/// Set the memory displacement using a BITS length
-XED_DLL_EXPORT void
-xed_operand_values_set_memory_displacement_bits(xed_operand_values_t* p,xed_int64_t x, unsigned int len_bits);
-
-/// @ingroup OPERANDS
-/// Indicate that we have a relative branch.
-XED_DLL_EXPORT void xed_operand_values_set_relbr(xed_operand_values_t* p);
-
-/// @ingroup OPERANDS
-/// Set the branch displacement using a BYTES length
-XED_DLL_EXPORT void
-xed_operand_values_set_branch_displacement(xed_operand_values_t* p,xed_int32_t x, unsigned int len);
-/// @ingroup OPERANDS
-/// Set the branch displacement using a BITS length
-XED_DLL_EXPORT void
-xed_operand_values_set_branch_displacement_bits(xed_operand_values_t* p,xed_int32_t x, unsigned int len_bits);
-
-/// @ingroup OPERANDS
-/// Set the signed immediate using a BYTES length
-XED_DLL_EXPORT void
-xed_operand_values_set_immediate_signed(xed_operand_values_t* p,xed_int32_t x, unsigned int bytes);
-/// @ingroup OPERANDS
-/// Set the signed immediate using a BITS length
-XED_DLL_EXPORT void
-xed_operand_values_set_immediate_signed_bits(xed_operand_values_t* p,xed_int32_t x, unsigned int bits);
-
-
-/// @ingroup OPERANDS
-/// Set the unsigned immediate using a BYTE length.
-XED_DLL_EXPORT void
-xed_operand_values_set_immediate_unsigned(xed_operand_values_t* p,xed_uint64_t x, unsigned int bytes);
-/// @ingroup OPERANDS
-/// Set the unsigned immediate using a BIT length.
-XED_DLL_EXPORT void
-xed_operand_values_set_immediate_unsigned_bits(xed_operand_values_t* p,xed_uint64_t x, unsigned int bits);
-
-
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT void xed_operand_values_set_base_reg(xed_operand_values_t* p,
- unsigned int memop_idx,
- xed_reg_enum_t new_base);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT void xed_operand_values_set_seg_reg(xed_operand_values_t* p,
- unsigned int memop_idx,
- xed_reg_enum_t new_seg);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT void xed_operand_values_set_index_reg(xed_operand_values_t* p,
- unsigned int memop_idx,
- xed_reg_enum_t new_index);
-
-/// @ingroup OPERANDS
-XED_DLL_EXPORT void xed_operand_values_set_scale(xed_operand_values_t* p,
- xed_uint_t memop_idx,
- xed_uint_t new_scale);
-
-
-/// @ingroup OPERANDS
-/// Set the operand storage field entry named 'operand_name' to the
-/// register value specified by 'reg_name'.
-XED_DLL_EXPORT void
-xed_operand_values_set_operand_reg(xed_operand_values_t* p,
- xed_operand_enum_t operand_name,
- xed_reg_enum_t reg_name);
-
-//@}
-#endif
-
-//Local Variables:
-//pref: "../../xed-operand-values-interface.c"
-//End: