00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00032
00033
00034 #ifndef _XED_ENCODE_H_
00035 # define _XED_ENCODE_H_
00036 #include "xed-common-hdrs.h"
00037 #include "xed-types.h"
00038 #include "xed-error-enum.h"
00039 #include "xed-operand-values-interface.h"
00040 #include "xed-operand-width-enum.h"
00041 #include "xed-encoder-iforms.h"
00042 #include "xed-encoder-gen-defs.h"
00043
00044
00045 #include "xed-decoded-inst.h"
00046
00047
00048
00049
00051 typedef struct xed_decoded_inst_s xed_encoder_request_s;
00053 typedef xed_decoded_inst_t xed_encoder_request_t;
00054
00055
00056
00058 XED_DLL_EXPORT xed_iclass_enum_t
00059 xed_encoder_request_get_iclass( const xed_encoder_request_t* p);
00060
00062
00063
00065 XED_DLL_EXPORT void
00066 xed_encoder_request_set_iclass( xed_encoder_request_t* p,
00067 xed_iclass_enum_t iclass);
00068
00070
00071
00072
00073 XED_DLL_EXPORT void xed_encoder_request_set_lock(xed_encoder_request_t* p);
00076 XED_DLL_EXPORT void xed_encoder_request_set_repne(xed_encoder_request_t* p);
00079 XED_DLL_EXPORT void xed_encoder_request_set_rep(xed_encoder_request_t* p);
00082 XED_DLL_EXPORT void xed_encoder_request_clear_rep(xed_encoder_request_t* p);
00084
00086
00087
00088 XED_DLL_EXPORT void xed_encoder_request_set_effective_operand_width( xed_encoder_request_t* p,
00089 xed_uint_t width_bits);
00091 XED_DLL_EXPORT void xed_encoder_request_set_effective_address_size( xed_encoder_request_t* p,
00092 xed_uint_t width_bits);
00100 XED_DLL_EXPORT void xed_encoder_request_set_reg(xed_encoder_request_t* p,
00101 xed_operand_enum_t operand,
00102 xed_reg_enum_t reg);
00104
00106
00107
00120 XED_DLL_EXPORT void xed_encoder_request_set_operand_order(xed_encoder_request_t* p,
00121 xed_uint_t operand_index,
00122 xed_operand_enum_t name);
00123
00131 XED_DLL_EXPORT xed_operand_enum_t xed_encoder_request_get_operand_order(xed_encoder_request_t* p,
00132 xed_uint_t operand_index);
00133
00134
00138 static XED_INLINE
00139 xed_uint_t xed_encoder_request_operand_order_entries(xed_encoder_request_t* p) {
00140 return p->_n_operand_order;
00141 }
00142
00144
00145
00147
00148
00149 XED_DLL_EXPORT void xed_encoder_request_set_relbr(xed_encoder_request_t* p);
00151 XED_DLL_EXPORT void xed_encoder_request_set_branch_displacement(xed_encoder_request_t* p,
00152 xed_int32_t brdisp,
00153 xed_uint_t nbytes);
00155 XED_DLL_EXPORT void xed_encoder_request_set_ptr(xed_encoder_request_t* p);
00157
00158
00160
00161
00162
00163 XED_DLL_EXPORT void xed_encoder_request_set_uimm0(xed_encoder_request_t* p,
00164 xed_uint64_t uimm,
00165 xed_uint_t nbytes);
00168 XED_DLL_EXPORT void xed_encoder_request_set_uimm0_bits(xed_encoder_request_t* p,
00169 xed_uint64_t uimm,
00170 xed_uint_t nbits);
00172 XED_DLL_EXPORT void xed_encoder_request_set_uimm1(xed_encoder_request_t* p,
00173 xed_uint8_t uimm);
00176 XED_DLL_EXPORT void xed_encoder_request_set_simm(xed_encoder_request_t* p,
00177 xed_int32_t simm,
00178 xed_uint_t nbytes);
00179
00181
00182
00183 XED_DLL_EXPORT void xed_encoder_request_set_memory_displacement(xed_encoder_request_t* p,
00184 xed_int64_t memdisp,
00185 xed_uint_t nbytes);
00186
00188 XED_DLL_EXPORT void xed_encoder_request_set_agen(xed_encoder_request_t* p);
00190 XED_DLL_EXPORT void xed_encoder_request_set_mem0(xed_encoder_request_t* p);
00192 XED_DLL_EXPORT void xed_encoder_request_set_mem1(xed_encoder_request_t* p);
00194 XED_DLL_EXPORT void xed_encoder_request_set_memory_operand_length(xed_encoder_request_t* p,
00195 xed_uint_t nbytes);
00197 XED_DLL_EXPORT void xed_encoder_request_set_seg0(xed_encoder_request_t* p,
00198 xed_reg_enum_t seg_reg);
00200 XED_DLL_EXPORT void xed_encoder_request_set_seg1(xed_encoder_request_t* p,
00201 xed_reg_enum_t seg_reg);
00203 XED_DLL_EXPORT void xed_encoder_request_set_base0(xed_encoder_request_t* p,
00204 xed_reg_enum_t base_reg);
00206 XED_DLL_EXPORT void xed_encoder_request_set_base1(xed_encoder_request_t* p,
00207 xed_reg_enum_t base_reg) ;
00209 XED_DLL_EXPORT void xed_encoder_request_set_index(xed_encoder_request_t* p,
00210 xed_reg_enum_t index_reg);
00212 XED_DLL_EXPORT void xed_encoder_request_set_scale(xed_encoder_request_t* p,
00213 xed_uint_t scale);
00215
00218 XED_DLL_EXPORT const xed_operand_values_t* xed_encoder_request_operands_const(const xed_encoder_request_t* p);
00220 XED_DLL_EXPORT xed_operand_values_t* xed_encoder_request_operands(xed_encoder_request_t* p);
00221
00223
00224
00228 XED_DLL_EXPORT void xed_encoder_request_zero_operand_order(xed_encoder_request_t* p);
00229
00231 XED_DLL_EXPORT void xed_encoder_request_zero_set_mode(xed_encoder_request_t* p,
00232 const xed_state_t* dstate);
00234 XED_DLL_EXPORT void xed_encoder_request_zero(xed_encoder_request_t* p) ;
00236
00237 struct xed_decoded_inst_s;
00240 XED_DLL_EXPORT void xed_encoder_request_init_from_decode(struct xed_decoded_inst_s* d);
00241
00243
00244
00245 XED_DLL_EXPORT void xed_encode_request_print(const xed_encoder_request_t* p,
00246 char* buf, xed_uint_t buflen);
00248
00249
00250
00251
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268 XED_DLL_EXPORT xed_error_enum_t
00269 xed_encode(xed_encoder_request_t* r,
00270 xed_uint8_t* array,
00271 const unsigned int ilen,
00272 unsigned int* olen);
00273
00281 XED_DLL_EXPORT xed_error_enum_t
00282 xed_encode_nop(xed_uint8_t* array,
00283 const unsigned int ilen);
00285
00286 #endif