Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

fetypes.h

Go to the documentation of this file.
00001 /****************************** 00002 Intel Confidential 00003 ******************************/ 00004 00005 // MACH 00006 /* define the following for WindowsNT only */ 00007 #define WIN32_OR_WIN64 00008 00009 #ifdef WIN32_OR_WIN64 00010 #define LX "%I64x" 00011 #define LD "%I64d" 00012 #else 00013 #define LX "%Lx" 00014 #define LD "%Ld" 00015 #endif 00016 00017 /****************************************************************** 00018 Due to differences in format of the constants we need to wrap is 00019 with a macro to help add the LL on all platforms other than NT 00020 *******************************************************************/ 00021 #ifndef WIN32_OR_WIN64 00022 #define CONST_FORMAT(num) num ## LL 00023 #else 00024 #define CONST_FORMAT(num) ((EM_uint64_t)(num)) 00025 #endif 00026 00027 #ifndef _EM_TYPES_H 00028 #define _EM_TYPES_H 00029 00030 // MACH 00031 // Exception Codes for Emulation Traps and Faults 00032 #define STATUS_EMULATION_FAULT 0x0E0010000 00033 #define STATUS_EMULATION_TRAP 0x0E0020000 00034 00035 // MACH 00036 #define LITTLE_ENDIAN 00037 00038 #define MAX_REAL_GR_INDEX 1 00039 #define MAX_REAL_FR_INDEX 128 00040 00041 #define EM_NUM_PR 64 00042 #define EM_NUM_MEM 1 00043 00044 00045 #ifndef INLINE 00046 #define INLINE 00047 #endif 00048 00049 #if !(defined(BIG_ENDIAN) || defined(LITTLE_ENDIAN)) 00050 #error Endianness not established; define BIG_ENDIAN or LITTLE_ENDIAN 00051 #endif 00052 00053 00054 00055 /***********************/ 00056 /* Basic Integer Types */ 00057 /***********************/ 00058 00059 typedef int EM_int_t; /* 32-bit signed integer */ 00060 typedef unsigned int EM_uint_t; /* 32-bit unsigned integer */ 00061 00062 typedef short EM_short_t; /* 16-bit signed integer */ 00063 typedef unsigned short EM_ushort_t; /* 16-bit unsigned integer */ 00064 00065 typedef unsigned int EM_boolean_t; /* true (1) or false (0) */ 00066 00067 #ifdef WIN32_OR_WIN64 00068 typedef __int64 EM_int64_t; /* 64-bit signed integer */ 00069 typedef unsigned __int64 EM_uint64_t; /* 64-bit unsigned integer */ 00070 00071 #else 00072 00073 // MACH 00074 #ifndef unix 00075 typedef long long EM_int64_t; // 64-bit signed integer 00076 typedef unsigned long long EM_uint64_t; // 64-bit unsigned integer 00077 #else 00078 // MACH: for SCO UNIX 00079 typedef long EM_int64_t; // 64-bit signed integer 00080 typedef unsigned long EM_uint64_t; // 64-bit unsigned integer 00081 #endif 00082 00083 #endif 00084 00085 /******************************************************************************* 00086 FP_EXCP_xxx - Define a typedef for function pointers to override exceptions. 00087 *****************************************************************************/ 00088 00089 typedef void (*FP_EXCP_FAULT)(void*, EM_uint_t); 00090 typedef void (*FP_EXCP_TRAP)(void*, EM_uint_t); 00091 typedef void (*FP_EXCP_SPEC)(void*, EM_uint_t, EM_uint64_t); 00092 00093 00094 typedef struct uint128_struct { 00095 #ifdef BIG_ENDIAN 00096 EM_uint64_t hi; 00097 EM_uint64_t lo; 00098 #endif 00099 #ifdef LITTLE_ENDIAN 00100 EM_uint64_t lo; 00101 EM_uint64_t hi; 00102 #endif 00103 } EM_uint128_t; /* 128-bit unsigned integer */ 00104 00105 typedef struct uint256_struct { 00106 #ifdef BIG_ENDIAN 00107 EM_uint64_t hh; 00108 EM_uint64_t hl; 00109 EM_uint64_t lh; 00110 EM_uint64_t ll; 00111 #endif 00112 #ifdef LITTLE_ENDIAN 00113 EM_uint64_t ll; 00114 EM_uint64_t lh; 00115 EM_uint64_t hl; 00116 EM_uint64_t hh; 00117 #endif 00118 } EM_uint256_t; /* 256-bit unsigned integer */ 00119 00120 /******************/ 00121 /* Support enum's */ 00122 /******************/ 00123 00124 typedef enum { 00125 pr_00 = 0, pr_01 = 1, pr_02 = 2, pr_03 = 3, 00126 pr_04 = 4, pr_05 = 5, pr_06 = 6, pr_07 = 7, 00127 pr_08 = 8, pr_09 = 9, pr_10 = 10, pr_11 = 11, 00128 pr_12 = 12, pr_13 = 13, pr_14 = 14, pr_15 = 15, 00129 00130 pr_16 = 16, pr_17 = 17, pr_18 = 18, pr_19 = 19, 00131 pr_20 = 20, pr_21 = 21, pr_22 = 22, pr_23 = 23, 00132 pr_24 = 24, pr_25 = 25, pr_26 = 26, pr_27 = 27, 00133 pr_28 = 28, pr_29 = 29, pr_30 = 30, pr_31 = 31, 00134 pr_32 = 32, pr_33 = 33, pr_34 = 34, pr_35 = 35, 00135 pr_36 = 36, pr_37 = 37, pr_38 = 38, pr_39 = 39, 00136 pr_40 = 40, pr_41 = 41, pr_42 = 42, pr_43 = 43, 00137 pr_44 = 44, pr_45 = 45, pr_46 = 46, pr_47 = 47, 00138 pr_48 = 48, pr_49 = 49, pr_50 = 50, pr_51 = 51, 00139 pr_52 = 52, pr_53 = 53, pr_54 = 54, pr_55 = 55, 00140 pr_56 = 56, pr_57 = 57, pr_58 = 58, pr_59 = 59, 00141 pr_60 = 60, pr_61 = 61, pr_62 = 62, pr_63 = 63 00142 } EM_pred_reg_specifier; 00143 00144 typedef enum { 00145 gr_000 = 0, gr_001 = 1, gr_002 = 2, gr_003 = 3, 00146 gr_004 = 4, gr_005 = 5, gr_006 = 6, gr_007 = 7, 00147 gr_008 = 8, gr_009 = 9, gr_010 = 10, gr_011 = 11, 00148 gr_012 = 12, gr_013 = 13, gr_014 = 14, gr_015 = 15, 00149 gr_016 = 16, gr_017 = 17, gr_018 = 18, gr_019 = 19, 00150 gr_020 = 20, gr_021 = 21, gr_022 = 22, gr_023 = 23, 00151 gr_024 = 24, gr_025 = 25, gr_026 = 26, gr_027 = 27, 00152 gr_028 = 28, gr_029 = 29, gr_030 = 30, gr_031 = 31, 00153 00154 gr_032 = 32, gr_033 = 33, gr_034 = 34, gr_035 = 35, 00155 gr_036 = 36, gr_037 = 37, gr_038 = 38, gr_039 = 39, 00156 gr_040 = 40, gr_041 = 41, gr_042 = 42, gr_043 = 43, 00157 gr_044 = 44, gr_045 = 45, gr_046 = 46, gr_047 = 47, 00158 gr_048 = 48, gr_049 = 49, gr_050 = 50, gr_051 = 51, 00159 gr_052 = 52, gr_053 = 53, gr_054 = 54, gr_055 = 55, 00160 gr_056 = 56, gr_057 = 57, gr_058 = 58, gr_059 = 59, 00161 gr_060 = 60, gr_061 = 61, gr_062 = 62, gr_063 = 63, 00162 gr_064 = 64, gr_065 = 65, gr_066 = 66, gr_067 = 67, 00163 gr_068 = 68, gr_069 = 69, gr_070 = 70, gr_071 = 71, 00164 gr_072 = 72, gr_073 = 73, gr_074 = 74, gr_075 = 75, 00165 gr_076 = 76, gr_077 = 77, gr_078 = 78, gr_079 = 79, 00166 gr_080 = 80, gr_081 = 81, gr_082 = 82, gr_083 = 83, 00167 gr_084 = 84, gr_085 = 85, gr_086 = 86, gr_087 = 87, 00168 gr_088 = 88, gr_089 = 89, gr_090 = 90, gr_091 = 91, 00169 gr_092 = 92, gr_093 = 93, gr_094 = 94, gr_095 = 95, 00170 gr_096 = 96, gr_097 = 97, gr_098 = 98, gr_099 = 99, 00171 gr_100 = 100, gr_101 = 101, gr_102 = 102, gr_103 = 103, 00172 gr_104 = 104, gr_105 = 105, gr_106 = 106, gr_107 = 107, 00173 gr_108 = 108, gr_109 = 109, gr_110 = 110, gr_111 = 111, 00174 gr_112 = 112, gr_113 = 113, gr_114 = 114, gr_115 = 115, 00175 gr_116 = 116, gr_117 = 117, gr_118 = 118, gr_119 = 119, 00176 gr_120 = 120, gr_121 = 121, gr_122 = 122, gr_123 = 123, 00177 gr_124 = 124, gr_125 = 125, gr_126 = 126, gr_127 = 127 00178 } EM_general_register_specifier; 00179 00180 00181 typedef enum { 00182 fr_000 = 0, fr_001 = 1, fr_002 = 2, fr_003 = 3, 00183 fr_004 = 4, fr_005 = 5, fr_006 = 6, fr_007 = 7, 00184 fr_008 = 8, fr_009 = 9, fr_010 = 10, fr_011 = 11, 00185 fr_012 = 12, fr_013 = 13, fr_014 = 14, fr_015 = 15, 00186 fr_016 = 16, fr_017 = 17, fr_018 = 18, fr_019 = 19, 00187 fr_020 = 20, fr_021 = 21, fr_022 = 22, fr_023 = 23, 00188 fr_024 = 24, fr_025 = 25, fr_026 = 26, fr_027 = 27, 00189 fr_028 = 28, fr_029 = 29, fr_030 = 30, fr_031 = 31, 00190 00191 fr_032 = 32, fr_033 = 33, fr_034 = 34, fr_035 = 35, 00192 fr_036 = 36, fr_037 = 37, fr_038 = 38, fr_039 = 39, 00193 fr_040 = 40, fr_041 = 41, fr_042 = 42, fr_043 = 43, 00194 fr_044 = 44, fr_045 = 45, fr_046 = 46, fr_047 = 47, 00195 fr_048 = 48, fr_049 = 49, fr_050 = 50, fr_051 = 51, 00196 fr_052 = 52, fr_053 = 53, fr_054 = 54, fr_055 = 55, 00197 fr_056 = 56, fr_057 = 57, fr_058 = 58, fr_059 = 59, 00198 fr_060 = 60, fr_061 = 61, fr_062 = 62, fr_063 = 63, 00199 fr_064 = 64, fr_065 = 65, fr_066 = 66, fr_067 = 67, 00200 fr_068 = 68, fr_069 = 69, fr_070 = 70, fr_071 = 71, 00201 fr_072 = 72, fr_073 = 73, fr_074 = 74, fr_075 = 75, 00202 fr_076 = 76, fr_077 = 77, fr_078 = 78, fr_079 = 79, 00203 fr_080 = 80, fr_081 = 81, fr_082 = 82, fr_083 = 83, 00204 fr_084 = 84, fr_085 = 85, fr_086 = 86, fr_087 = 87, 00205 fr_088 = 88, fr_089 = 89, fr_090 = 90, fr_091 = 91, 00206 fr_092 = 92, fr_093 = 93, fr_094 = 94, fr_095 = 95, 00207 fr_096 = 96, fr_097 = 97, fr_098 = 98, fr_099 = 99, 00208 fr_100 = 100, fr_101 = 101, fr_102 = 102, fr_103 = 103, 00209 fr_104 = 104, fr_105 = 105, fr_106 = 106, fr_107 = 107, 00210 fr_108 = 108, fr_109 = 109, fr_110 = 110, fr_111 = 111, 00211 fr_112 = 112, fr_113 = 113, fr_114 = 114, fr_115 = 115, 00212 fr_116 = 116, fr_117 = 117, fr_118 = 118, fr_119 = 119, 00213 fr_120 = 120, fr_121 = 121, fr_122 = 122, fr_123 = 123, 00214 fr_124 = 124, fr_125 = 125, fr_126 = 126, fr_127 = 127 00215 } EM_fp_reg_specifier; 00216 00217 typedef enum { 00218 mem_real_form = 0, 00219 mem_integer_form = 1 00220 } EM_mem_fr_format_type; 00221 00222 00223 typedef enum { 00224 pc_s = 0, 00225 pc_d = 2, 00226 pc_sf = 3, 00227 pc_none = 4, 00228 pc_simd = 5 00229 } EM_opcode_pc_type; 00230 00231 typedef enum { 00232 sfS0 = 0, 00233 sfS1 = 1, 00234 sfS2 = 2, 00235 sfS3 = 3, 00236 sf_none = 4 00237 } EM_opcode_sf_type; 00238 00239 typedef enum { 00240 fctypeUNC = 0, 00241 ctype_or = 1, 00242 ctype_and = 2, 00243 ctype_or_andcm = 3, 00244 ctype_orcm = 4, 00245 ctype_andcm = 5, 00246 ctype_and_orcm = 6, 00247 ctype_none = 7 00248 } EM_opcode_ctype_type; 00249 00250 typedef enum { 00251 crel_eq = 0, 00252 crel_ne = 1, 00253 crel_lt = 2, 00254 crel_le = 3, 00255 crel_gt = 4, 00256 crel_ge = 5, 00257 crel_ltu = 6, 00258 crel_leu = 7, 00259 crel_gtu = 8, 00260 crel_geu = 9 00261 } EM_opcode_crel_type; 00262 00263 00264 typedef enum { 00265 fcrel_nm = 0, 00266 fcrel_m = 1 00267 } EM_opcode_fcrel_type; 00268 00269 typedef enum { 00270 frelEQ = 0, 00271 frelLT = 1, 00272 frelLE = 2, 00273 frelUNORD = 3, 00274 frelNEQ = 4, 00275 frelNLT = 5, 00276 frelNLE = 6, 00277 frelORD = 7, 00278 frelGT = 8, 00279 frelGE = 9, 00280 frelNGT = 10, 00281 frelNGE = 11 00282 } EM_opcode_frel_type; 00283 00284 typedef enum { 00285 sf_single = 0, 00286 SF_PC_RESERVED = 1, 00287 sf_double = 2, 00288 sf_double_extended = 3 00289 } EM_sf_pc_type; 00290 00291 typedef enum { 00292 rc_rn = 0, 00293 rc_rm = 1, 00294 rc_rp = 2, 00295 rc_rz = 3 00296 } EM_sf_rc_type; 00297 00298 typedef enum { 00299 ar_fpsr = 0 00300 } EM_ar_index; 00301 00302 typedef enum { 00303 high = 1, 00304 low = 0 00305 } EM_simd_hilo; 00306 00307 typedef enum { 00308 op_fcmp = 0, 00309 op_fpcmp = 1, 00310 op_fcvt_fx = 2, 00311 op_fpcvt_fx = 3, 00312 op_fcvt_fxu = 4, 00313 op_fpcvt_fxu = 5, 00314 op_fma = 6, 00315 op_fpma = 7, 00316 op_fminmax = 8, 00317 op_fpminmax = 9, 00318 op_fms_fnma = 10, 00319 op_fpms_fpnma = 11, 00320 op_frcpa = 12, 00321 op_fprcpa = 13, 00322 op_frsqrta = 14, 00323 op_fprsqrta = 15, 00324 op_fnorm = 16, 00325 op_fsetc = 17 00326 } EM_opcode_type; 00327 00328 00329 typedef struct EM_limits_check_fprcpa_struct { 00330 EM_uint_t hi_fr3; 00331 EM_uint_t hi_fr2_or_quot; 00332 EM_uint_t lo_fr3; 00333 EM_uint_t lo_fr2_or_quot; 00334 } EM_limits_check_fprcpa; 00335 00336 typedef struct EM_limits_check_fprsqrta_struct { 00337 EM_uint_t hi; 00338 EM_uint_t lo; 00339 } EM_limits_check_fprsqrta; 00340 00341 /***************************/ 00342 /* Support Structure Types */ 00343 /***************************/ 00344 00345 00346 typedef struct trap_control_struct { 00347 EM_uint_t vd:1; 00348 EM_uint_t dd:1; 00349 EM_uint_t zd:1; 00350 EM_uint_t od:1; 00351 EM_uint_t ud:1; 00352 EM_uint_t id:1; 00353 } EM_trap_control_type; 00354 00355 typedef enum { 00356 ss_single_24 = 24, 00357 ss_double_53 = 53, 00358 ss_double_extended_64 = 64 00359 } EM_significand_size_type; 00360 00361 typedef enum { 00362 es_eight_bits = 8, 00363 es_eleven_bits = 11, 00364 es_fifteen_bits = 15, 00365 es_seventeen_bits = 17 00366 } EM_exponent_size_type; 00367 00368 typedef struct controls_struct { 00369 EM_uint_t ftz:1; 00370 EM_uint_t wre:1; 00371 EM_sf_pc_type pc; 00372 EM_sf_rc_type rc; 00373 EM_uint_t td:1; 00374 } EM_controls_type; 00375 00376 typedef struct flags_struct { 00377 EM_uint_t v:1; 00378 EM_uint_t d:1; 00379 EM_uint_t z:1; 00380 EM_uint_t o:1; 00381 EM_uint_t un:1; // MACH 00382 EM_uint_t i:1; 00383 } EM_flags_type; 00384 00385 typedef struct tmp_fp_env_struct { // MACH 00386 long dummy; 00387 EM_trap_control_type controls; 00388 EM_significand_size_type ss; 00389 EM_exponent_size_type es; 00390 00391 EM_sf_rc_type rc; 00392 EM_uint_t ftz:1; 00393 00394 EM_flags_type flags; 00395 EM_flags_type hi_flags; 00396 EM_flags_type lo_flags; 00397 00398 EM_uint_t ebc:1; 00399 EM_uint_t fpa:1; 00400 EM_uint_t hi_fpa:1; 00401 EM_uint_t lo_fpa:1; 00402 EM_uint_t mdl:1; 00403 EM_uint_t mdh:1; 00404 EM_uint_t simd:1; 00405 00406 struct em_faults_struct { 00407 EM_uint_t v:1; 00408 EM_uint_t d:1; 00409 EM_uint_t z:1; 00410 EM_uint_t swa:1; 00411 } em_faults; 00412 struct hi_faults_struct { 00413 EM_uint_t v:1; 00414 EM_uint_t d:1; 00415 EM_uint_t z:1; 00416 EM_uint_t swa:1; 00417 } hi_faults; 00418 struct lo_faults_struct { 00419 EM_uint_t v:1; 00420 EM_uint_t d:1; 00421 EM_uint_t z:1; 00422 EM_uint_t swa:1; 00423 } lo_faults; 00424 00425 struct em_traps_struct { 00426 EM_uint_t o:1; 00427 EM_uint_t un:1; // MACH 00428 EM_uint_t i:1; 00429 } em_traps; 00430 struct hi_traps_struct { 00431 EM_uint_t o:1; 00432 EM_uint_t un:1; // MACH 00433 EM_uint_t i:1; 00434 } hi_traps; 00435 struct lo_traps_struct { 00436 EM_uint_t o:1; 00437 EM_uint_t un:1; // MACH 00438 EM_uint_t i:1; 00439 } lo_traps; 00440 } EM_tmp_fp_env_type; 00441 00442 typedef struct fp_dp_struct { 00443 EM_uint_t sticky:1; 00444 EM_uint128_t significand; 00445 EM_uint_t exponent:19; 00446 EM_uint_t sign:1; 00447 } EM_fp_dp_type; 00448 00449 /*************************/ 00450 /* Register Definitions */ 00451 /*************************/ 00452 00453 typedef struct gr_reg_struct { 00454 EM_uint64_t value; 00455 EM_uint_t nat:1; 00456 } EM_gr_reg_type; 00457 00458 typedef struct fp_reg_struct { 00459 EM_uint64_t significand; 00460 EM_uint_t exponent:17; 00461 EM_uint_t sign:1; 00462 } EM_fp_reg_type; 00463 00464 typedef struct pair_fp_reg_struct { 00465 EM_fp_reg_type hi; 00466 EM_fp_reg_type lo; 00467 } EM_pair_fp_reg_type; 00468 00469 typedef struct sf_struct { 00470 EM_controls_type controls; 00471 EM_flags_type flags; 00472 } EM_sf_type; 00473 00474 typedef struct cfm_struct { 00475 #ifdef BIG_ENDIAN 00476 EM_uint_t reserved :26; 00477 EM_uint_t rrb_pr : 6; 00478 EM_uint_t sof : 7; 00479 EM_uint_t sol : 7; 00480 EM_uint_t sor : 4; 00481 EM_uint_t rrb_gr : 7; 00482 EM_uint_t rrb_fr : 7; 00483 #endif 00484 #ifdef LITTLE_ENDIAN 00485 EM_uint_t rrb_fr : 7; 00486 EM_uint_t rrb_gr : 7; 00487 EM_uint_t sor : 4; 00488 EM_uint_t sol : 7; 00489 EM_uint_t sof : 7; 00490 EM_uint_t rrb_pr : 6; 00491 EM_uint_t reserved :26; 00492 #endif 00493 } EM_cfm_type; 00494 00495 typedef struct fpsr_struct { 00496 #ifdef BIG_ENDIAN 00497 EM_uint_t reserved : 6; 00498 EM_uint_t sf3_flags_i : 1; 00499 EM_uint_t sf3_flags_u : 1; 00500 EM_uint_t sf3_flags_o : 1; 00501 EM_uint_t sf3_flags_z : 1; 00502 EM_uint_t sf3_flags_d : 1; 00503 EM_uint_t sf3_flags_v : 1; 00504 EM_uint_t sf3_controls_td : 1; 00505 EM_uint_t sf3_controls_rc : 2; 00506 EM_uint_t sf3_controls_pc : 2; 00507 EM_uint_t sf3_controls_wre : 1; 00508 EM_uint_t sf3_controls_ftz : 1; 00509 EM_uint_t sf2_flags_i : 1; 00510 EM_uint_t sf2_flags_u : 1; 00511 EM_uint_t sf2_flags_o : 1; 00512 EM_uint_t sf2_flags_z : 1; 00513 EM_uint_t sf2_flags_d : 1; 00514 EM_uint_t sf2_flags_v : 1; 00515 EM_uint_t sf2_controls_td : 1; 00516 EM_uint_t sf2_controls_rc : 2; 00517 EM_uint_t sf2_controls_pc : 2; 00518 EM_uint_t sf2_controls_wre : 1; 00519 EM_uint_t sf2_controls_ftz : 1; 00520 EM_uint_t sf1_flags_i : 1; 00521 EM_uint_t sf1_flags_u : 1; 00522 EM_uint_t sf1_flags_o : 1; 00523 EM_uint_t sf1_flags_z : 1; 00524 EM_uint_t sf1_flags_d : 1; 00525 EM_uint_t sf1_flags_v : 1; 00526 EM_uint_t sf1_controls_td : 1; 00527 EM_uint_t sf1_controls_rc : 2; 00528 EM_uint_t sf1_controls_pc : 2; 00529 EM_uint_t sf1_controls_wre : 1; 00530 EM_uint_t sf1_controls_ftz : 1; 00531 EM_uint_t sf0_flags_i : 1; 00532 EM_uint_t sf0_flags_u : 1; 00533 EM_uint_t sf0_flags_o : 1; 00534 EM_uint_t sf0_flags_z : 1; 00535 EM_uint_t sf0_flags_d : 1; 00536 EM_uint_t sf0_flags_v : 1; 00537 EM_uint_t sf0_controls_td : 1; 00538 EM_uint_t sf0_controls_rc : 2; 00539 EM_uint_t sf0_controls_pc : 2; 00540 EM_uint_t sf0_controls_wre : 1; 00541 EM_uint_t sf0_controls_ftz : 1; 00542 EM_uint_t traps_id : 1; 00543 EM_uint_t traps_ud : 1; 00544 EM_uint_t traps_od : 1; 00545 EM_uint_t traps_zd : 1; 00546 EM_uint_t traps_dd : 1; 00547 EM_uint_t traps_vd : 1; 00548 #endif 00549 #ifdef LITTLE_ENDIAN 00550 EM_uint_t traps_vd : 1; 00551 EM_uint_t traps_dd : 1; 00552 EM_uint_t traps_zd : 1; 00553 EM_uint_t traps_od : 1; 00554 EM_uint_t traps_ud : 1; 00555 EM_uint_t traps_id : 1; 00556 EM_uint_t sf0_controls_ftz : 1; 00557 EM_uint_t sf0_controls_wre : 1; 00558 EM_uint_t sf0_controls_pc : 2; 00559 EM_uint_t sf0_controls_rc : 2; 00560 EM_uint_t sf0_controls_td : 1; 00561 EM_uint_t sf0_flags_v : 1; 00562 EM_uint_t sf0_flags_d : 1; 00563 EM_uint_t sf0_flags_z : 1; 00564 EM_uint_t sf0_flags_o : 1; 00565 EM_uint_t sf0_flags_u : 1; 00566 EM_uint_t sf0_flags_i : 1; 00567 EM_uint_t sf1_controls_ftz : 1; 00568 EM_uint_t sf1_controls_wre : 1; 00569 EM_uint_t sf1_controls_pc : 2; 00570 EM_uint_t sf1_controls_rc : 2; 00571 EM_uint_t sf1_controls_td : 1; 00572 EM_uint_t sf1_flags_v : 1; 00573 EM_uint_t sf1_flags_d : 1; 00574 EM_uint_t sf1_flags_z : 1; 00575 EM_uint_t sf1_flags_o : 1; 00576 EM_uint_t sf1_flags_u : 1; 00577 EM_uint_t sf1_flags_i : 1; 00578 EM_uint_t sf2_controls_ftz : 1; 00579 EM_uint_t sf2_controls_wre : 1; 00580 EM_uint_t sf2_controls_pc : 2; 00581 EM_uint_t sf2_controls_rc : 2; 00582 EM_uint_t sf2_controls_td : 1; 00583 EM_uint_t sf2_flags_v : 1; 00584 EM_uint_t sf2_flags_d : 1; 00585 EM_uint_t sf2_flags_z : 1; 00586 EM_uint_t sf2_flags_o : 1; 00587 EM_uint_t sf2_flags_u : 1; 00588 EM_uint_t sf2_flags_i : 1; 00589 EM_uint_t sf3_controls_ftz : 1; 00590 EM_uint_t sf3_controls_wre : 1; 00591 EM_uint_t sf3_controls_pc : 2; 00592 EM_uint_t sf3_controls_rc : 2; 00593 EM_uint_t sf3_controls_td : 1; 00594 EM_uint_t sf3_flags_v : 1; 00595 EM_uint_t sf3_flags_d : 1; 00596 EM_uint_t sf3_flags_z : 1; 00597 EM_uint_t sf3_flags_o : 1; 00598 EM_uint_t sf3_flags_u : 1; 00599 EM_uint_t sf3_flags_i : 1; 00600 EM_uint_t reserved : 6; 00601 #endif 00602 } EM_fpsr_type; 00603 00604 00605 typedef struct psr_struct { 00606 #ifdef BIG_ENDIAN 00607 EM_uint_t reserved_field_4:19; 00608 EM_uint_t bn:1; 00609 EM_uint_t ed:1; 00610 EM_uint_t ri:2; 00611 EM_uint_t ss:1; 00612 EM_uint_t dd:1; 00613 EM_uint_t da:1; 00614 EM_uint_t id:1; 00615 EM_uint_t it:1; 00616 EM_uint_t mc:1; 00617 EM_uint_t is:1; 00618 EM_uint_t cpl:2; 00619 EM_uint_t reserved_field_3:4; 00620 EM_uint_t rt:1; 00621 EM_uint_t tb:1; 00622 EM_uint_t lp:1; 00623 EM_uint_t db:1; 00624 EM_uint_t si:1; 00625 EM_uint_t di:1; 00626 EM_uint_t pp:1; 00627 EM_uint_t sp:1; 00628 EM_uint_t dfh:1; 00629 EM_uint_t dfl:1; 00630 EM_uint_t dt:1; 00631 EM_uint_t reserved_field_2:1; 00632 EM_uint_t pk:1; 00633 EM_uint_t i:1; 00634 EM_uint_t ic:1; 00635 EM_uint_t reserved_field_1:7; 00636 EM_uint_t mfh:1; 00637 EM_uint_t mfl:1; 00638 EM_uint_t ac:1; 00639 EM_uint_t up:1; 00640 EM_uint_t be:1; 00641 EM_uint_t or:1; 00642 #endif 00643 #ifdef LITTLE_ENDIAN 00644 EM_uint_t or:1; 00645 EM_uint_t be:1; 00646 EM_uint_t up:1; 00647 EM_uint_t ac:1; 00648 EM_uint_t mfl:1; 00649 EM_uint_t mfh:1; 00650 EM_uint_t reserved_field_1:7; 00651 EM_uint_t ic:1; 00652 EM_uint_t i:1; 00653 EM_uint_t pk:1; 00654 EM_uint_t reserved_field_2:1; 00655 EM_uint_t dt:1; 00656 EM_uint_t dfl:1; 00657 EM_uint_t dfh:1; 00658 EM_uint_t sp:1; 00659 EM_uint_t pp:1; 00660 EM_uint_t di:1; 00661 EM_uint_t si:1; 00662 EM_uint_t db:1; 00663 EM_uint_t lp:1; 00664 EM_uint_t tb:1; 00665 EM_uint_t rt:1; 00666 EM_uint_t reserved_field_3:4; 00667 EM_uint_t cpl:2; 00668 EM_uint_t is:1; 00669 EM_uint_t mc:1; 00670 EM_uint_t it:1; 00671 EM_uint_t id:1; 00672 EM_uint_t da:1; 00673 EM_uint_t dd:1; 00674 EM_uint_t ss:1; 00675 EM_uint_t ri:2; 00676 EM_uint_t ed:1; 00677 EM_uint_t bn:1; 00678 EM_uint_t reserved_field_4:19; 00679 #endif 00680 } EM_psr_type; 00681 00682 typedef union ar_union { 00683 EM_fpsr_type fpsr; 00684 EM_uint64_t uint_value; 00685 } EM_ar_type; 00686 00687 /*****************************/ 00688 /* memory format definitions */ 00689 /*****************************/ 00690 00691 typedef union memory_union { 00692 struct int_8_struct { 00693 EM_int_t ivalue:8; 00694 } int_8; 00695 struct int_16_struct { 00696 EM_int_t ivalue:16; 00697 } int_16; 00698 struct int_32_struct { 00699 EM_int_t ivalue:32; 00700 } int_32; 00701 struct int_64_struct { 00702 EM_int64_t ivalue; 00703 } int_64; 00704 struct uint_8_struct { 00705 EM_uint_t uvalue:8; 00706 } uint_8; 00707 struct uint_16_struct { 00708 EM_uint_t uvalue:16; 00709 } uint_16; 00710 struct uint_32_struct { 00711 EM_uint_t uvalue:32; 00712 } uint_32; 00713 struct uint_64_struct { 00714 EM_uint64_t uvalue; 00715 } uint_64; 00716 struct c_float_struct { 00717 float fvalue; 00718 } c_float; 00719 struct c_double_struct { 00720 double fvalue; 00721 } c_double; 00722 struct c_long_double_struct { 00723 long double fvalue; 00724 } c_long_double; 00725 00726 struct fp_single_struct { 00727 #ifdef BIG_ENDIAN 00728 EM_uint_t sign:1; 00729 EM_uint_t exponent:8; 00730 EM_uint_t significand:23; 00731 #endif 00732 #ifdef LITTLE_ENDIAN 00733 EM_uint_t significand:23; 00734 EM_uint_t exponent:8; 00735 EM_uint_t sign:1; 00736 #endif 00737 } fp_single; 00738 00739 struct fp_double_struct { 00740 #ifdef BIG_ENDIAN 00741 EM_uint_t sign:1; 00742 EM_uint_t exponent:11; 00743 EM_uint_t significand_hi:20; 00744 EM_uint_t significand_lo:32; 00745 #endif 00746 #ifdef LITTLE_ENDIAN 00747 EM_uint_t significand_lo:32; 00748 EM_uint_t significand_hi:20; 00749 EM_uint_t exponent:11; 00750 EM_uint_t sign:1; 00751 00752 #endif 00753 } fp_double; 00754 00755 struct fp_double_extended_struct { 00756 #ifdef BIG_ENDIAN 00757 EM_uint_t sign:1; 00758 EM_uint_t exponent:15; 00759 EM_ushort_t significand[4]; 00760 #endif 00761 #ifdef LITTLE_ENDIAN 00762 EM_ushort_t significand[4]; 00763 EM_uint_t exponent:15; 00764 EM_uint_t sign:1; 00765 #endif 00766 } fp_double_extended; 00767 00768 struct fp_spill_fill_struct { 00769 #ifdef BIG_ENDIAN 00770 EM_uint_t reserved2:32; 00771 EM_uint_t reserved1:14; 00772 EM_uint_t sign:1; 00773 EM_uint_t exponent:17; 00774 EM_uint64_t significand; 00775 #endif 00776 #ifdef LITTLE_ENDIAN 00777 EM_uint64_t significand; 00778 EM_uint_t exponent:17; 00779 EM_uint_t sign:1; 00780 EM_uint_t reserved1:14; 00781 EM_uint_t reserved2:32; 00782 #endif 00783 } fp_spill_fill; 00784 00785 00786 struct uint_32_pair_struct { 00787 #ifdef BIG_ENDIAN 00788 EM_uint_t hi:32; 00789 EM_uint_t lo:32; 00790 #endif 00791 #ifdef LITTLE_ENDIAN 00792 EM_uint_t lo:32; 00793 EM_uint_t hi:32; 00794 #endif 00795 } uint_32_pair; 00796 struct uint_64_pair_struct { 00797 #ifdef BIG_ENDIAN 00798 EM_uint64_t hi; 00799 EM_uint64_t lo; 00800 #endif 00801 #ifdef LITTLE_ENDIAN 00802 EM_uint64_t lo; 00803 EM_uint64_t hi; 00804 #endif 00805 } uint_64_pair; 00806 00807 } EM_memory_type; 00808 00809 typedef struct EM_form_struct { 00810 EM_boolean_t advanced_form; 00811 EM_boolean_t clear_form; 00812 EM_boolean_t double_form; 00813 EM_boolean_t exponent_form; 00814 00815 EM_boolean_t fp82_floating_form; 00816 EM_boolean_t fcheck_branch_implemented; 00817 EM_boolean_t general_form; 00818 EM_boolean_t data_form; 00819 EM_boolean_t control_form; 00820 EM_boolean_t high_form; 00821 EM_boolean_t high_unsigned_form; 00822 00823 EM_boolean_t low_form; 00824 EM_boolean_t mix_l_form; 00825 EM_boolean_t mix_r_form; 00826 EM_boolean_t mix_lr_form; 00827 00828 EM_boolean_t neg_sign_form; 00829 EM_boolean_t no_clear_form; 00830 EM_boolean_t pack_form; 00831 00832 EM_boolean_t no_base_update_form; 00833 EM_boolean_t immediate_base_update_form; 00834 EM_boolean_t register_base_update_form; 00835 00836 EM_boolean_t sign_form; 00837 EM_boolean_t sign_exp_form; 00838 EM_boolean_t signed_form; 00839 EM_boolean_t significand_form; 00840 EM_boolean_t single_form; 00841 EM_boolean_t spill_form; 00842 EM_boolean_t swap_form; 00843 EM_boolean_t swap_nl_form; 00844 EM_boolean_t swap_nr_form; 00845 EM_boolean_t sxt_l_form; 00846 EM_boolean_t sxt_r_form; 00847 00848 EM_boolean_t trunc_form; 00849 EM_boolean_t unsigned_form; 00850 } EM_form_type; 00851 00852 typedef void (*EM_EXCP_FAULT)(void*, EM_uint_t); 00853 typedef void (*EM_EXCP_TRAP)(void*, EM_uint_t); 00854 typedef void (*EM_EXCP_SPEC)(void*, EM_uint_t, EM_uint64_t); 00855 00856 00857 typedef struct EM_state_struct { 00858 EM_psr_type state_PSR; 00859 EM_uint64_t state_IP; 00860 EM_ar_type state_AR[1]; 00861 EM_fp_reg_type state_FR[MAX_REAL_FR_INDEX]; 00862 EM_gr_reg_type state_GR[MAX_REAL_GR_INDEX]; 00863 EM_boolean_t state_PR[EM_NUM_PR]; 00864 EM_memory_type state_MEM[EM_NUM_MEM]; 00865 EM_form_type state_form; 00866 EM_uint_t state_MERCED_RTL; 00867 EM_EXCP_FAULT state_fp82_fp_exception_fault; 00868 EM_EXCP_TRAP state_fp82_fp_exception_trap; 00869 void *state_user_context; 00870 EM_uint_t trap_type; // 0 - fault; 1 - trap 00871 } EM_state_type; 00872 00873 00874 #endif /* _EM_TYPES_H */ 00875

Generated on Sat May 15 19:40:00 2004 for test by doxygen 1.3.7