Go to the documentation of this file.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
00031
00032
00033
00034
00035
00036 #ifndef mtypes_INCLUDED
00037 #define mtypes_INCLUDED
00038 #ifdef __cplusplus
00039 extern "C" {
00040 #endif
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 #ifdef _KEEP_RCS_ID
00060 #endif
00061
00062
00063 #define MTYPE_UNKNOWN 0
00064 #define MTYPE_FIRST 1
00065 #define MTYPE_B 1
00066 #define MTYPE_I1 2
00067 #define MTYPE_I2 3
00068 #define MTYPE_I4 4
00069 #define MTYPE_I8 5
00070 #define MTYPE_U1 6
00071 #define MTYPE_U2 7
00072 #define MTYPE_U4 8
00073 #define MTYPE_U8 9
00074 #define MTYPE_F4 10
00075 #define MTYPE_F8 11
00076 #define MTYPE_F10 12
00077 #define MTYPE_F16 13
00078
00079
00080 #define MTYPE_STR 14
00081 #define MTYPE_STRING MTYPE_STR
00082 #define MTYPE_FQ 15
00083 #define MTYPE_M 16
00084 #define MTYPE_C4 17
00085 #define MTYPE_C8 18
00086 #define MTYPE_CQ 19
00087 #define MTYPE_V 20
00088
00089 #define MTYPE_BS 21
00090 #define MTYPE_A4 22
00091 #define MTYPE_A8 23
00092 #define MTYPE_C10 24
00093 #define MTYPE_C16 25
00094 #define MTYPE_I16 26
00095 #define MTYPE_U16 27
00096
00097
00098 #define MTYPE_LAST 27
00099
00100
00101 typedef UINT8 TYPE_ID;
00102 typedef mUINT8 mTYPE_ID;
00103
00104
00105
00106 #define MTYPE_CLASS_INTEGER 0x01
00107 #define MTYPE_CLASS_FLOAT 0x02
00108 #define MTYPE_CLASS_COMPLEX 0x04
00109 #define MTYPE_CLASS_UNSIGNED 0x08
00110 #define MTYPE_CLASS_STR 0x10
00111 #define MTYPE_CLASS_UNSIGNED_INTEGER (MTYPE_CLASS_UNSIGNED|MTYPE_CLASS_INTEGER)
00112 #define MTYPE_CLASS_COMPLEX_FLOAT (MTYPE_CLASS_COMPLEX|MTYPE_CLASS_FLOAT)
00113
00114
00115 typedef struct type_desc {
00116 mCLASS_INDEX id;
00117 mUINT16 bit_size;
00118 mUINT16 byte_size;
00119 mUINT16 dummy1;
00120 mUINT8 alignment;
00121 mUINT8 dummy2;
00122 mUINT8 dummy3;
00123
00124 mBOOL signed_type;
00125 mBOOL float_type;
00126 mCLASS_INDEX dummy4;
00127 mUINT8 type_class_bits;
00128 mUINT8 type_order;
00129 mCLASS_INDEX complement;
00130 } TYPE_DESC;
00131
00132
00133
00134
00135 extern TYPE_DESC Machine_Types[];
00136
00137
00138 #define MTYPE_id(n) (Machine_Types[n].id)
00139 #define MTYPE_bit_size(n) (Machine_Types[n].bit_size)
00140 #define MTYPE_byte_size(n) (MTYPE_bit_size(n) >> 3)
00141 #define MTYPE_size_reg(n) MTYPE_bit_size(n)
00142 #define MTYPE_size_min(n) MTYPE_bit_size(n)
00143 #define MTYPE_size_best(n) MTYPE_bit_size(n)
00144 #define MTYPE_alignment(n) (Machine_Types[n].alignment)
00145 #define MTYPE_align_min(n) MTYPE_alignment(n)
00146 #define MTYPE_align_req(n) MTYPE_alignment(n)
00147 #define MTYPE_align_best(n) MTYPE_alignment(n)
00148 #define MTYPE_signed(n) (Machine_Types[n].signed_type)
00149 #define MTYPE_float(n) (Machine_Types[n].float_type)
00150 #define MTYPE_name(n) Mtype_Name(n)
00151 #define MTYPE_type_class(n) (Machine_Types[n].type_class_bits)
00152 #define MTYPE_type_order(n) (Machine_Types[n].type_order)
00153 #define MTYPE_complement(n) (Machine_Types[n].complement)
00154
00155
00156 #define MTYPE_is_integral(n) (MTYPE_type_class(n) & MTYPE_CLASS_INTEGER)
00157 #define MTYPE_is_signed(n) (MTYPE_type_class(n)==MTYPE_CLASS_INTEGER)
00158 #define MTYPE_is_unsigned(n) (MTYPE_type_class(n)==MTYPE_CLASS_UNSIGNED_INTEGER)
00159 #define MTYPE_is_float(n) (MTYPE_type_class(n) & MTYPE_CLASS_FLOAT)
00160 #define MTYPE_is_complex(n) (MTYPE_type_class(n) & MTYPE_CLASS_COMPLEX)
00161 #define MTYPE_is_str(n) (MTYPE_type_class(n)==MTYPE_STR)
00162 #define MTYPE_is_m(n) ((n)==MTYPE_M)
00163 #define MTYPE_is_void(n) ((n)==MTYPE_V)
00164
00165 #define MTYPE_is_quad(n) ((n)==MTYPE_FQ || (n)==MTYPE_CQ)
00166 #define MTYPE_is_pointer(n) ((n)==Pointer_type || (n)==Pointer_type2)
00167 #define MTYPE_is_boolean(n) ((n)==Boolean_type || (n)==Boolean_type2)
00168
00169
00170 #define MTYPE_RegisterSize(n) MTYPE_byte_size(n)
00171
00172 #define MTYPE_is_size_double(n) (MTYPE_bit_size(n) == MTYPE_bit_size(MTYPE_I8))
00173
00174
00175 typedef UINT32 MTYPE_MASK;
00176
00177
00178 #define Type_Mask(t) ( ((MTYPE_MASK) 1) << (t) )
00179
00180
00181 #define TMASK_Element(m,k) (((m) & Type_Mask(k))!=0)
00182 #define TMASK_And(m1,m2) ((m1) & (m2))
00183 #define TMASK_Or(m1,m2) ((m1) | (m2))
00184 #define TMASK_Included(m1,m2) (TMASK_And(m1,m2)==(m1))
00185
00186
00187 extern MTYPE_MASK Machine_Types_Available;
00188 #define MTYPE_Avail(k) TMASK_Element(Machine_Types_Available,k)
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214 extern const char* Mtype_Name ( TYPE_ID );
00215 extern TYPE_ID Name_To_Mtype ( const char* nm );
00216
00217 extern TYPE_ID Mtype_AlignmentClass( INT32 , mUINT8 );
00218 extern TYPE_ID Mtype_Promote_to_A4A8( TYPE_ID );
00219 extern TYPE_ID Mtype_TransferSign( TYPE_ID, TYPE_ID );
00220 extern TYPE_ID Mtype_TransferSize( TYPE_ID, TYPE_ID );
00221 extern TYPE_ID Mtype_complex_to_real( TYPE_ID);
00222 extern TYPE_ID Mtype_comparison( TYPE_ID );
00223 extern TYPE_ID Mtype_next_alignment( TYPE_ID);
00224 extern TYPE_ID Mtype_prev_alignment( TYPE_ID);
00225
00226
00227 #ifdef __cplusplus
00228 }
00229 #endif
00230 #endif