X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=misc%2Fdecoder_test%2FXED2%2Fdoc%2Fhtml%2Fxed-inst_8h-source.html;fp=misc%2Fdecoder_test%2FXED2%2Fdoc%2Fhtml%2Fxed-inst_8h-source.html;h=e1b2883a1fc44358bf1e7e1cf9a94295254d56f2;hp=0000000000000000000000000000000000000000;hb=ddc16b0737cf58f7aa90a69c6652cdf4090aec51;hpb=626595465a2c6987606a6bc697df65130ad8c2d3 diff --git a/misc/decoder_test/XED2/doc/html/xed-inst_8h-source.html b/misc/decoder_test/XED2/doc/html/xed-inst_8h-source.html new file mode 100644 index 0000000..e1b2883 --- /dev/null +++ b/misc/decoder_test/XED2/doc/html/xed-inst_8h-source.html @@ -0,0 +1,281 @@ + +
+00001 /*BEGIN_LEGAL +00002 Copyright (c) 2007, Intel Corp. +00003 All rights reserved. +00004 +00005 Redistribution and use in source and binary forms, with or without +00006 modification, are permitted provided that the following conditions are +00007 met: +00008 +00009 * Redistributions of source code must retain the above copyright +00010 notice, this list of conditions and the following disclaimer. +00011 +00012 * Redistributions in binary form must reproduce the above +00013 copyright notice, this list of conditions and the following +00014 disclaimer in the documentation and/or other materials provided +00015 with the distribution. +00016 +00017 * Neither the name of Intel Corporation nor the names of its +00018 contributors may be used to endorse or promote products derived +00019 from this software without specific prior written permission. +00020 +00021 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +00022 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +00023 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +00024 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +00025 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +00026 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +00027 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +00028 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +00029 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +00030 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +00031 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +00032 END_LEGAL */ +00035 +00036 #if !defined(_XED_INST_H_) +00037 # define _XED_INST_H_ +00038 +00039 #include "xed-util.h" +00040 #include "xed-portability.h" +00041 #include "xed-category-enum.h" +00042 #include "xed-extension-enum.h" +00043 #include "xed-iclass-enum.h" +00044 #include "xed-operand-enum.h" +00045 #include "xed-operand-visibility-enum.h" +00046 #include "xed-operand-action-enum.h" +00047 #include "xed-operand-type-enum.h" +00048 #include "xed-nonterminal-enum.h" // a generated file +00049 #include "xed-operand-width-enum.h" // a generated file +00050 #include "xed-reg-enum.h" // a generated file +00051 #include "xed-attribute-enum.h" // a generated file +00052 #include "xed-iform-enum.h" // a generated file +00053 #include "xed-operand-bitvec.h" // a generated file +00054 +00055 +00056 struct xed_decoded_inst_s; //fwd-decl +00057 +00058 typedef void (*xed_operand_extractor_fn_t)(struct xed_decoded_inst_s* xds); +00059 //typedef xed_bool_t (*xed_instruction_fixed_bit_confirmer_fn_t)(struct xed_decoded_inst_s* xds); +00060 +00061 +00064 typedef struct XED_DLL_EXPORT xed_operand_s +00065 { +00066 xed_operand_enum_t _name; +00067 +00068 xed_operand_visibility_enum_t _operand_visibility; +00069 +00070 xed_operand_action_enum_t _rw; +00071 xed_operand_width_enum_t _oc2; +00072 +00073 xed_operand_type_enum_t _type; +00074 union { +00075 xed_uint32_t _imm; +00076 xed_nonterminal_enum_t _nt; // for nt_lookup_fn's +00077 xed_reg_enum_t _reg; +00078 } _u; +00079 } xed_operand_t; +00080 +00082 +00083 +00084 static XED_INLINE xed_operand_enum_t xed_operand_name(const xed_operand_t* p) { +00085 return p->_name; +00086 } +00087 +00088 +00090 static XED_INLINE xed_operand_visibility_enum_t xed_operand_operand_visibility( const xed_operand_t* p) { +00091 return p->_operand_visibility; +00092 } +00093 +00094 +00098 static XED_INLINE xed_operand_type_enum_t xed_operand_type(const xed_operand_t* p) { +00099 return p->_type; +00100 } +00101 +00102 +00104 static XED_INLINE xed_operand_width_enum_t xed_operand_width(const xed_operand_t* p) { +00105 return p->_oc2; +00106 } +00107 +00109 static XED_INLINE +00110 xed_nonterminal_enum_t xed_operand_nonterminal_name(const xed_operand_t* p) { +00111 return p->_u._nt; +00112 } +00113 +00123 static XED_INLINE xed_reg_enum_t xed_operand_reg(const xed_operand_t* p) { +00124 return p->_u._reg; +00125 } +00126 +00127 +00128 +00139 static XED_INLINE xed_uint_t xed_operand_template_is_register(const xed_operand_t* p) { +00140 return p->_type == XED_OPERAND_TYPE_NT_LOOKUP_FN || p->_type == XED_OPERAND_TYPE_REG; +00141 } +00142 +00146 static XED_INLINE xed_uint32_t xed_operand_imm(const xed_operand_t* p) { +00147 return p->_u._imm; +00148 } +00149 +00155 XED_DLL_EXPORT void xed_operand_print(const xed_operand_t* p, char* buf, int buflen); +00157 +00158 +00159 +00160 +00161 +00162 +00163 +00164 +00165 +00166 static XED_INLINE xed_uint_t xed_operand_is_register(xed_operand_enum_t name) { +00167 return name >= XED_OPERAND_REG0 && name <= XED_OPERAND_REG15; +00168 } +00174 static XED_INLINE xed_uint_t xed_operand_is_memory_addressing_register(xed_operand_enum_t name) { +00175 return ( name == XED_OPERAND_BASE0 || +00176 name == XED_OPERAND_INDEX || +00177 name == XED_OPERAND_SEG0 || +00178 name == XED_OPERAND_BASE1 || +00179 name == XED_OPERAND_SEG1 ); +00180 } +00181 +00183 +00185 +00186 +00187 +00188 +00189 static XED_INLINE xed_operand_action_enum_t xed_operand_rw(const xed_operand_t* p) { +00190 return p->_rw; +00191 } +00192 +00195 XED_DLL_EXPORT xed_uint_t xed_operand_read(const xed_operand_t* p); +00198 XED_DLL_EXPORT xed_uint_t xed_operand_read_only(const xed_operand_t* p); +00201 XED_DLL_EXPORT xed_uint_t xed_operand_written(const xed_operand_t* p); +00204 XED_DLL_EXPORT xed_uint_t xed_operand_written_only(const xed_operand_t* p); +00207 XED_DLL_EXPORT xed_uint_t xed_operand_read_and_written(const xed_operand_t* p); +00210 XED_DLL_EXPORT xed_uint_t xed_operand_conditional_read(const xed_operand_t* p); +00213 XED_DLL_EXPORT xed_uint_t xed_operand_conditional_write(const xed_operand_t* p); +00215 +00216 +00217 #include "xed-gen-table-defs.h" +00218 XED_DLL_GLOBAL extern const xed_operand_t xed_operand[XED_MAX_OPERAND_TABLE_NODES]; +00219 +00222 typedef struct XED_DLL_EXPORT xed_inst_s { +00223 xed_iclass_enum_t _iclass; +00224 xed_category_enum_t _category; +00225 xed_extension_enum_t _extension; +00226 xed_operand_bitvec_t _operand_bitvec; +00227 // The instruction form for this iclass. The iform is a zero-based dense sequence for each iclass. +00228 xed_uint8_t _iform; +00229 xed_iform_enum_t _iform_enum; +00230 +00231 //xed_instruction_fixed_bit_confirmer_fn_t _confirmer; +00232 +00233 // number of operands in the operands array +00234 xed_uint8_t _noperands; +00235 +00236 // index into the xed_operand[] array of xed_operand_t structures +00237 xed_uint32_t _operand_base; +00238 // bit vector of values from the xed_attribute_enum_t +00239 xed_uint32_t _attributes; +00240 +00241 // rflags info -- index in to the 2 tables of flags information. +00242 // If _flag_complex is true, then the data are in the +00243 // xed_flags_complex_table[]. Otherwise, the data are in the +00244 // xed_flags_simple_table[]. +00245 xed_uint16_t _flag_info_index; +00246 xed_bool_t _flag_complex; +00247 +00248 xed_uint8_t _cpl; // the nominal CPL for the instruction. +00249 } xed_inst_t; +00250 +00252 +00253 +00254 +00255 XED_DLL_EXPORT unsigned int xed_inst_cpl(const xed_inst_t* p) ; +00256 +00257 +00258 //These next few are not doxygen commented because I want people to use the higher +00259 //level interface in xed-decoded-inst.h. +00260 static XED_INLINE xed_iclass_enum_t xed_inst_iclass(const xed_inst_t* p) { +00261 return p->_iclass; +00262 } +00263 +00264 static XED_INLINE xed_category_enum_t xed_inst_category(const xed_inst_t* p) { +00265 return p->_category; +00266 } +00267 +00268 static XED_INLINE xed_extension_enum_t xed_inst_extension(const xed_inst_t* p) { +00269 return p->_extension; +00270 } +00271 +00272 static XED_INLINE xed_uint_t xed_inst_iform(const xed_inst_t* p) { +00273 return p->_iform; +00274 } +00275 static XED_INLINE xed_iform_enum_t xed_inst_iform_enum(const xed_inst_t* p) { +00276 return p->_iform_enum; +00277 } +00278 +00279 +00282 static XED_INLINE unsigned int xed_inst_noperands(const xed_inst_t* p) { +00283 return p->_noperands; +00284 } +00285 +00288 static XED_INLINE const xed_operand_t* xed_inst_operand(const xed_inst_t* p, unsigned int i) { +00289 xed_assert(i < p->_noperands); +00290 return &(xed_operand[p->_operand_base + i]); +00291 } +00292 +00293 +00294 +00295 XED_DLL_EXPORT xed_uint32_t xed_inst_flag_info_index(const xed_inst_t* p); +00296 +00298 +00300 +00301 +00302 +00303 static XED_INLINE xed_uint32_t xed_inst_get_attribute(const xed_inst_t* p, xed_attribute_enum_t attr) { +00304 if (p->_attributes & attr) +00305 return 1; +00306 return 0; +00307 } +00308 +00311 static XED_INLINE xed_uint32_t xed_inst_get_attributes(const xed_inst_t* p) { +00312 return p->_attributes; +00313 } +00316 XED_DLL_EXPORT unsigned int xed_attribute_max(); +00317 +00321 XED_DLL_EXPORT xed_attribute_enum_t xed_attribute(unsigned int i); +00322 +00324 +00325 #endif +