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
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061 #include "defs.h"
00062 #include "mtypes.h"
00063 #ifdef TARG_X8664
00064 #include "config_targ.h"
00065 #endif
00066
00067
00068 TYPE_DESC Machine_Types[] =
00069 { { MTYPE_UNKNOWN, 0, 0, 0, 0, 0, 0, 0, 0, 0, "",0,0, MTYPE_UNKNOWN },
00070 { MTYPE_B, 1, 0, 0, 0, 0, 0, 0, 0, 0, "B",MTYPE_CLASS_INTEGER,0, MTYPE_B },
00071 { MTYPE_I1, 8, 8, 8, 1, 1, 1, 1, 0, 0, "I1",MTYPE_CLASS_INTEGER,1, MTYPE_U1 },
00072 { MTYPE_I2, 16, 16, 16, 2, 2, 2, 1, 0, 0, "I2",MTYPE_CLASS_INTEGER,3, MTYPE_U2 },
00073 { MTYPE_I4, 32, 32, 32, 4, 4, 4, 1, 0, 0, "I4",MTYPE_CLASS_INTEGER,5, MTYPE_U4 },
00074 { MTYPE_I8, 64, 64, 64, 8, 8, 8, 1, 0, 0, "I8",MTYPE_CLASS_INTEGER,7, MTYPE_U8 },
00075 { MTYPE_U1, 8, 8, 8, 1, 1, 1, 0, 0, 0, "U1",MTYPE_CLASS_UNSIGNED_INTEGER,2, MTYPE_I1 },
00076 { MTYPE_U2, 16, 16, 16, 2, 2, 2, 0, 0, 0, "U2",MTYPE_CLASS_UNSIGNED_INTEGER,4, MTYPE_I2 },
00077 { MTYPE_U4, 32, 32, 32, 4, 4, 4, 0, 0, 0, "U4",MTYPE_CLASS_UNSIGNED_INTEGER,6, MTYPE_I4 },
00078 { MTYPE_U8, 64, 64, 64, 8, 8, 8, 0, 0, 0, "U8",MTYPE_CLASS_UNSIGNED_INTEGER,8, MTYPE_I8 },
00079 { MTYPE_F4, 32, 32, 32, 4, 4, 4, 1, 1, 0, "F4",MTYPE_CLASS_FLOAT,9, MTYPE_F4 },
00080 { MTYPE_F8, 64, 64, 64, 8, 8, 8, 1, 1, 0, "F8",MTYPE_CLASS_FLOAT,11, MTYPE_F8 },
00081 { MTYPE_F10, 128,128,128,16, 16,16, 1, 1, 0, "F10",MTYPE_CLASS_FLOAT,13, MTYPE_F10 },
00082 { MTYPE_F16, 128,128,128,16, 16,16, 1, 1, 0, "F16",MTYPE_CLASS_FLOAT,15, MTYPE_F16 },
00083 { MTYPE_STR, 0, 0, 0, 1, 1, 4, 0, 0, 0, "STR",MTYPE_CLASS_STR,0, MTYPE_STR },
00084 { MTYPE_FQ, 128,128,128,16, 16,16, 1, 1, 0, "FQ",MTYPE_CLASS_FLOAT,14, MTYPE_FQ },
00085 { MTYPE_M, 0, 0, 0, 0, 0, 0, 0, 0, 0, "M",0,0, MTYPE_M },
00086 { MTYPE_C4, 64, 64,64, 4, 4, 4, 0, 1, 0, "C4",MTYPE_CLASS_COMPLEX_FLOAT,10, MTYPE_C4 },
00087 { MTYPE_C8, 128,128,128, 8, 8, 8, 0, 1, 0, "C8",MTYPE_CLASS_COMPLEX_FLOAT,12, MTYPE_C8 },
00088 { MTYPE_CQ, 256,256,256,16, 16,16, 0, 1, 0, "CQ",MTYPE_CLASS_COMPLEX_FLOAT,16, MTYPE_CQ },
00089 { MTYPE_V, 0, 0, 0, 0, 0, 0, 0, 0, 0, "V",0,0, MTYPE_V },
00090 { MTYPE_BS, 1, 0, 0, 0, 0, 0, 0, 0, 0, "BS",MTYPE_CLASS_INTEGER,0, MTYPE_BS },
00091 { MTYPE_A4, 32, 32, 32, 4, 4, 4, 0, 0, 0, "A4",MTYPE_CLASS_UNSIGNED_INTEGER,6, MTYPE_A4 },
00092 { MTYPE_A8, 64, 64, 64, 8, 8, 8, 0, 0, 0, "A8",MTYPE_CLASS_UNSIGNED_INTEGER,8, MTYPE_A8 },
00093 { MTYPE_C10, 256,256,256,16, 16,16, 0, 1, 0, "C10",MTYPE_CLASS_COMPLEX_FLOAT,16, MTYPE_C10 },
00094 { MTYPE_C16, 256,256,256,16, 16,16, 0, 1, 0, "C16",MTYPE_CLASS_COMPLEX_FLOAT,16, MTYPE_C16 },
00095 { MTYPE_I16, 256,256,256,16, 16,16, 0, 1, 0, "I16",MTYPE_CLASS_INTEGER,16, MTYPE_I16 },
00096 #ifndef TARG_X8664
00097 { MTYPE_U16, 256,256,256,16, 16,16, 0, 1, 0, "U16",MTYPE_CLASS_UNSIGNED_INTEGER,16, MTYPE_U16 },
00098 #else
00099 { MTYPE_U16, 256,256,256,16, 16,16, 0, 1, 0, "U16",MTYPE_CLASS_UNSIGNED_INTEGER,16, MTYPE_U16 },
00100 { MTYPE_V16C4, 128,128,128,16, 16,16, 0, 1, 0, "V16C4",MTYPE_CLASS_FLOAT|MTYPE_CLASS_VECTOR,16, MTYPE_V16C4 },
00101 { MTYPE_V16C8, 128,128,128,16, 16,16, 0, 1, 0, "V16C8",MTYPE_CLASS_FLOAT|MTYPE_CLASS_VECTOR,16, MTYPE_V16C8 },
00102 { MTYPE_V16I1, 128,128,128,16, 16,16, 0, 1, 0, "V16I1",MTYPE_CLASS_INTEGER|MTYPE_CLASS_VECTOR,16, MTYPE_V16I1 },
00103 { MTYPE_V16I2, 128,128,128,16, 16,16, 0, 1, 0, "V16I2",MTYPE_CLASS_INTEGER|MTYPE_CLASS_VECTOR,16, MTYPE_V16I2 },
00104 { MTYPE_V16I4, 128,128,128,16, 16,16, 0, 1, 0, "V16I4",MTYPE_CLASS_INTEGER|MTYPE_CLASS_VECTOR,16, MTYPE_V16I4 },
00105 { MTYPE_V16I8, 128,128,128,16, 16,16, 0, 1, 0, "V16I8",MTYPE_CLASS_INTEGER|MTYPE_CLASS_VECTOR,16, MTYPE_V16I8 },
00106 { MTYPE_V16F4, 128,128,128,16, 16,16, 0, 1, 0, "V16F4",MTYPE_CLASS_FLOAT|MTYPE_CLASS_VECTOR,16, MTYPE_V16F4 },
00107 { MTYPE_V16F8, 128,128,128,16, 16,16, 0, 1, 0, "V16F8",MTYPE_CLASS_FLOAT|MTYPE_CLASS_VECTOR,16, MTYPE_V16F8 },
00108 { MTYPE_V8I1, 64,64,64,8, 8,8, 0, 1, 0, "V8I1",MTYPE_CLASS_INTEGER|MTYPE_CLASS_SVECTOR,8, MTYPE_V8I1 },
00109 { MTYPE_V8I2, 64,64,64,8, 8,8, 0, 1, 0, "V8I2",MTYPE_CLASS_INTEGER|MTYPE_CLASS_SVECTOR,8, MTYPE_V8I2 },
00110 { MTYPE_V8I4, 64,64,64,8, 8,8, 0, 1, 0, "V8I4",MTYPE_CLASS_INTEGER|MTYPE_CLASS_SVECTOR,8, MTYPE_V8I4 },
00111 { MTYPE_V8F4, 64,64,64,8, 8,8, 0, 1, 0, "V8F4",MTYPE_CLASS_FLOAT|MTYPE_CLASS_SVECTOR,8, MTYPE_V8F4 },
00112 { MTYPE_M8I1, 64,64,64,8, 8,8, 0, 1, 0, "M8I1",MTYPE_CLASS_INTEGER|MTYPE_CLASS_MVECTOR,8, MTYPE_M8I1 },
00113 { MTYPE_M8I2, 64,64,64,8, 8,8, 0, 1, 0, "M8I2",MTYPE_CLASS_INTEGER|MTYPE_CLASS_MVECTOR,8, MTYPE_M8I2 },
00114 { MTYPE_M8I4, 64,64,64,8, 8,8, 0, 1, 0, "M8I4",MTYPE_CLASS_INTEGER|MTYPE_CLASS_MVECTOR,8, MTYPE_M8I4 },
00115 { MTYPE_M8F4, 64,64,64,8, 8,8, 0, 1, 0, "M8F4",MTYPE_CLASS_FLOAT|MTYPE_CLASS_MVECTOR,8, MTYPE_M8F4 }
00116 #endif // TARG_X8664
00117 #if defined(TARG_SL)
00118 { MTYPE_SB1, 8, 8, 8, 1, 1, 1, 1, 0, 0, "SB1",MTYPE_CLASS_INTEGER,1, MTYPE_SBU1 },
00119 { MTYPE_SB2, 16, 16, 16, 2, 2, 2, 1, 0, 0, "SB2",MTYPE_CLASS_INTEGER,3, MTYPE_SBU2 },
00120 { MTYPE_SB4, 32, 32, 32, 4, 4, 4, 1, 0, 0, "SB4",MTYPE_CLASS_INTEGER,5, MTYPE_SBU4 },
00121 { MTYPE_SB8, 64, 64, 64, 8, 8, 8, 1, 0, 0, "SB8",MTYPE_CLASS_INTEGER,7, MTYPE_SBU8 },
00122 { MTYPE_SBU1, 8, 8, 8, 1, 1, 1, 0, 0, 0, "SBU1",MTYPE_CLASS_UNSIGNED_INTEGER,2, MTYPE_SB1 },
00123 { MTYPE_SBU2, 16, 16, 16, 2, 2, 2, 0, 0, 0, "SBU2",MTYPE_CLASS_UNSIGNED_INTEGER,4, MTYPE_SB2 },
00124 { MTYPE_SBU4, 32, 32, 32, 4, 4, 4, 0, 0, 0, "SBU4",MTYPE_CLASS_UNSIGNED_INTEGER,6, MTYPE_SB4 },
00125 { MTYPE_SBU8, 64, 64, 64, 8, 8, 8, 0, 0, 0, "SBU8",MTYPE_CLASS_UNSIGNED_INTEGER,8, MTYPE_SB8 },
00126
00127 { MTYPE_SD1, 8, 8, 8, 1, 1, 1, 1, 0, 0, "SD1",MTYPE_CLASS_INTEGER,1, MTYPE_SDU1 },
00128 { MTYPE_SD2, 16, 16, 16, 2, 2, 2, 1, 0, 0, "SD2",MTYPE_CLASS_INTEGER,3, MTYPE_SDU2 },
00129 { MTYPE_SD4, 32, 32, 32, 4, 4, 4, 1, 0, 0, "SD4",MTYPE_CLASS_INTEGER,5, MTYPE_SDU4 },
00130 { MTYPE_SD8, 64, 64, 64, 8, 8, 8, 1, 0, 0, "SD8",MTYPE_CLASS_INTEGER,7, MTYPE_SDU8 },
00131 { MTYPE_SDU1, 8, 8, 8, 1, 1, 1, 0, 0, 0, "SDU1",MTYPE_CLASS_UNSIGNED_INTEGER,2, MTYPE_SD1 },
00132 { MTYPE_SDU2, 16, 16, 16, 2, 2, 2, 0, 0, 0, "SDU2",MTYPE_CLASS_UNSIGNED_INTEGER,4, MTYPE_SD2 },
00133 { MTYPE_SDU4, 32, 32, 32, 4, 4, 4, 0, 0, 0, "SDU4",MTYPE_CLASS_UNSIGNED_INTEGER,6, MTYPE_SD4 },
00134 { MTYPE_SDU8, 64, 64, 64, 8, 8, 8, 0, 0, 0, "SDU8",MTYPE_CLASS_UNSIGNED_INTEGER,8, MTYPE_SD8 },
00135
00136
00137 { MTYPE_VBUF1, 32, 32, 32, 4, 4, 4, 0, 0, 0, "VBUF1", MTYPE_CLASS_UNSIGNED_INTEGER, 6, MTYPE_VBUF1 },
00138 { MTYPE_VBUF2, 32, 32, 32, 4, 4, 4, 0, 0, 0, "VBUF2", MTYPE_CLASS_UNSIGNED_INTEGER, 6, MTYPE_VBUF2 },
00139 { MTYPE_VBUF4, 32, 32, 32, 4, 4, 4, 0, 0, 0, "VBUF4", MTYPE_CLASS_UNSIGNED_INTEGER, 6, MTYPE_VBUF4 }
00140 #endif // TARG_SL
00141 };
00142
00143 static TYPE_ID Machine_Next_Alignment[] =
00144 {
00145 MTYPE_UNKNOWN,
00146 MTYPE_UNKNOWN,
00147 MTYPE_I2,
00148 MTYPE_I4,
00149 MTYPE_I8,
00150 MTYPE_UNKNOWN,
00151 MTYPE_U2,
00152 MTYPE_U4,
00153 MTYPE_U8,
00154 MTYPE_UNKNOWN,
00155 MTYPE_F8,
00156 #ifdef TARG_IA64
00157 MTYPE_F10,
00158 MTYPE_FQ,
00159 #else
00160 MTYPE_FQ,
00161 MTYPE_UNKNOWN,
00162 #endif
00163 MTYPE_UNKNOWN,
00164 MTYPE_UNKNOWN,
00165 MTYPE_UNKNOWN,
00166 MTYPE_UNKNOWN,
00167 MTYPE_C8,
00168 #ifdef TARG_IA64
00169 MTYPE_C10,
00170 #else
00171 MTYPE_CQ,
00172 #endif
00173 MTYPE_UNKNOWN,
00174 MTYPE_UNKNOWN,
00175 MTYPE_UNKNOWN,
00176 MTYPE_UNKNOWN,
00177 #ifdef TARG_IA64
00178 MTYPE_UNKNOWN,
00179 MTYPE_CQ
00180 #else
00181 MTYPE_UNKNOWN
00182 #endif
00183 };
00184
00185 static TYPE_ID Machine_Prev_Alignment[] =
00186 {
00187 MTYPE_UNKNOWN,
00188 MTYPE_UNKNOWN,
00189 MTYPE_UNKNOWN,
00190 MTYPE_I1,
00191 MTYPE_I2,
00192 MTYPE_I4,
00193 MTYPE_UNKNOWN,
00194 MTYPE_U1,
00195 MTYPE_U2,
00196 MTYPE_U4,
00197 MTYPE_UNKNOWN,
00198 MTYPE_F4,
00199 #ifdef TARG_IA64
00200 MTYPE_F8,
00201 #else
00202 MTYPE_UNKNOWN,
00203 #endif
00204 MTYPE_UNKNOWN,
00205 MTYPE_UNKNOWN,
00206 #ifdef TARG_IA64
00207 MTYPE_F10,
00208 #else
00209 MTYPE_F8,
00210 #endif
00211 MTYPE_UNKNOWN,
00212 MTYPE_UNKNOWN,
00213 MTYPE_C4,
00214 #ifdef TARG_IA64
00215 MTYPE_C10,
00216 #else
00217 MTYPE_C8,
00218 #endif
00219 MTYPE_UNKNOWN,
00220 MTYPE_UNKNOWN,
00221 #ifdef TARG_IA64
00222 MTYPE_UNKNOWN,
00223 MTYPE_UNKNOWN,
00224 MTYPE_C8
00225 #else
00226 MTYPE_UNKNOWN,
00227 MTYPE_UNKNOWN
00228 #endif
00229 };
00230
00231
00232 MTYPE_MASK Machine_Types_Available = 0x1fdffe;
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244 const char *
00245 Mtype_Name (TYPE_ID b)
00246 {
00247 static char buf[32];
00248
00249 if ( b>0 && b<=MTYPE_LAST ) {
00250 return MTYPE_name(b);
00251 } else {
00252 sprintf (buf, "MTYPE_%1d", b);
00253 return buf;
00254 }
00255 }
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266 TYPE_ID Mtype_AlignmentClass(INT32 align, mUINT8 type_class)
00267 {
00268 INT32 i;
00269
00270 #ifdef TARG_X8664
00271
00272
00273
00274
00275
00276
00277 if( Is_Target_32bit() ){
00278 if( align == 8 &&
00279 ( type_class & MTYPE_CLASS_INTEGER ) != 0 ){
00280 return ( type_class & MTYPE_CLASS_UNSIGNED ) ? MTYPE_U8 : MTYPE_I8;
00281 }
00282 }
00283 #endif
00284
00285 for(i=0; i<MTYPE_LAST; i++)
00286 {
00287 if ((MTYPE_type_class(i) == type_class) &&
00288 (MTYPE_align_min(i) == align))
00289 return MTYPE_id(i);
00290 }
00291
00292 return MTYPE_UNKNOWN;
00293 }
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304 TYPE_ID Mtype_Promote_to_A4A8(TYPE_ID x)
00305 {
00306 if (! MTYPE_is_integral(x))
00307 return x;
00308 if (MTYPE_byte_size(x) < 4)
00309 return x;
00310 if (MTYPE_byte_size(x) == 4)
00311 return MTYPE_A4;
00312 return MTYPE_A8;
00313 }
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324 TYPE_ID Mtype_TransferSign(TYPE_ID x, TYPE_ID y)
00325 {
00326 if (y == MTYPE_A4 || y == MTYPE_A8)
00327 return y;
00328 if (x == MTYPE_A4 || x == MTYPE_A8)
00329 return Mtype_Promote_to_A4A8(y);
00330 if (MTYPE_signed(x) ^ MTYPE_signed(y))
00331 {
00332 return MTYPE_complement(y);
00333 }
00334 return y;
00335 }
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346 TYPE_ID Mtype_TransferSize(TYPE_ID x, TYPE_ID y)
00347 {
00348 if (y == MTYPE_A4 || y == MTYPE_A8) {
00349 switch (MTYPE_byte_size(x)) {
00350 case 1: return MTYPE_U1;
00351 case 2: return MTYPE_U2;
00352 case 4: return MTYPE_A4;
00353 case 8: return MTYPE_A8;
00354 }
00355 }
00356 switch (MTYPE_byte_size(x)) {
00357 case 1: return MTYPE_signed(y) ? MTYPE_I1 : MTYPE_U1;
00358 case 2: return MTYPE_signed(y) ? MTYPE_I2 : MTYPE_U2;
00359 case 4: return MTYPE_signed(y) ? MTYPE_I4 : MTYPE_U4;
00360 case 8: return MTYPE_signed(y) ? MTYPE_I8 : MTYPE_U8;
00361 }
00362 return MTYPE_UNKNOWN;
00363 }
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373 TYPE_ID Mtype_complex_to_real(TYPE_ID type)
00374 {
00375 if (MTYPE_is_complex(type))
00376 {
00377 switch(type) {
00378 case MTYPE_C4:
00379 return MTYPE_F4;
00380 case MTYPE_C8:
00381 return MTYPE_F8;
00382 #ifdef TARG_IA64
00383 case MTYPE_C10:
00384 return MTYPE_F10;
00385 #endif
00386 case MTYPE_CQ:
00387 return MTYPE_FQ;
00388 }
00389 }
00390 return type;
00391 }
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404 TYPE_ID Mtype_comparison(TYPE_ID type)
00405 {
00406 switch(type)
00407 {
00408 case MTYPE_I1:
00409 case MTYPE_I2:
00410 return MTYPE_I4;
00411 case MTYPE_U1:
00412 case MTYPE_U2:
00413 return MTYPE_U4;
00414 default:
00415 return type;
00416 }
00417 }
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431 TYPE_ID Mtype_next_alignment(TYPE_ID type)
00432 {
00433 return Machine_Next_Alignment[type];
00434 }
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447 TYPE_ID Mtype_prev_alignment(TYPE_ID type)
00448 {
00449 return Machine_Prev_Alignment[type];
00450 }