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 "config.h"
00063 #include "config_asm.h"
00064 #include "config_debug.h"
00065 #include "config_targ_opt.h"
00066 #include "config_opt.h"
00067 #include "erglob.h"
00068 #include "tracing.h"
00069 #include "mtypes.h"
00070 #include "stab.h"
00071 #include "targ_sim.h"
00072
00073 #if defined(FRONT_END_C) || defined(FRONT_END_CPLUSPLUS)
00074 typedef unsigned char an_integer_kind;
00075 #include "c_int_model.h"
00076 #endif
00077
00078 extern char *Ofast;
00079
00080
00081
00082 BOOL ARCH_generate_nor = FALSE;
00083 BOOL ARCH_mask_shift_counts = FALSE;
00084
00085
00086 TARGET_ABI Target_ABI = ABI_UNDEF;
00087 TARGET_PROCESSOR Target = TARGET_UNDEF;
00088 TARGET_ISA Target_ISA = TARGET_ISA_UNDEF;
00089
00090
00091
00092
00093 CLASS_INDEX Spill_Int_Mtype = 0;
00094 CLASS_INDEX Spill_Float_Mtype = 0;
00095 CLASS_INDEX Spill_Int32_Mtype = 0;
00096 CLASS_INDEX Spill_Float32_Mtype = 0;
00097
00098
00099
00100
00101 CLASS_INDEX Max_Int_Mtype = 0;
00102 CLASS_INDEX Max_Uint_Mtype = 0;
00103 CLASS_INDEX Def_Int_Mtype = 0;
00104 CLASS_INDEX Def_Uint_Mtype = 0;
00105
00106
00107 BOOL Use_32_Bit_Pointers = FALSE;
00108
00109
00110 INT Pointer_Size;
00111 CLASS_INDEX Pointer_Mtype;
00112 CLASS_INDEX Pointer_Mtype2;
00113
00114
00115 TYPE_ID Pointer_type;
00116 TYPE_ID Pointer_type2;
00117 TYPE_ID Boolean_type;
00118 TYPE_ID Boolean_type2;
00119 TYPE_ID Integer_type;
00120
00121
00122 INT Comparison_Result_Size;
00123 CLASS_INDEX Comparison_Result_Mtype;
00124
00125
00126
00127
00128 char *AS_ADDRESS;
00129 char *AS_ADDRESS_UNALIGNED;
00130
00131
00132 BOOL Char_Type_Is_Signed = FALSE;
00133
00134
00135 static BOOL Target_int64;
00136
00137
00138 #define FPX_DEF EXC_ALL
00139 INT16 FP_Exception_Enable_Max = FPX_DEF;
00140 INT16 FP_Exception_Enable_Min = 0;
00141
00142 INT32 Align_Instructions = 0;
00143 BOOL Avoid_TFP_blikely_bug = FALSE;
00144 BOOL Avoid_TFP_blikely_bug_overridden = FALSE;
00145
00146
00147 BOOL Force_IEEE_Comparisons = TRUE;
00148
00149
00150
00151 BOOL WHIRL_Return_Val_On = TRUE;
00152 BOOL WHIRL_Mldid_Mstid_On = TRUE;
00153 BOOL WHIRL_Return_Info_On = TRUE;
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168 INT16 Symbolic_Debug_Mode;
00169 INT16 Max_Symbolic_Debug_Mode;
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180 BOOL Allow_Word_Aligned_Doubles = FALSE;
00181
00182
00183 BOOL Generate_Position_Independent_Code = FALSE;
00184
00185
00186 BOOL Split_64_Bit_Int_Ops = TRUE;
00187
00188
00189 BOOL Split_Quad_Ops = TRUE;
00190
00191
00192 BOOL No_Quad_Aligned_Branch = FALSE;
00193
00194
00195 BOOL Only_Unsigned_64_Bit_Ops = FALSE;
00196
00197 BOOL Has_GP_Groups = FALSE;
00198
00199
00200
00201
00202 BOOL Use_Load_Store_Offset = TRUE;
00203
00204 #if defined (FRONT_END_C) || defined (FRONT_END_CPLUSPLUS)
00205
00206 PREG_NUM Map_Reg_To_Preg [] = {
00207
00208 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007,
00209 0x008, 0x009, 0x00a, 0x00b, 0x00c, 0x00d, 0x00e, 0x00f,
00210 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017,
00211 0x018, 0x019, 0x01a, 0x01b, 0x01c, 0x01d, 0x01e, 0x01f,
00212
00213 0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027,
00214 0x028, 0x029, 0x02a, 0x02b, 0x02c, 0x02d, 0x02e, 0x02f,
00215 0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037,
00216 0x038, 0x039, 0x03a, 0x03b, 0x03c, 0x03d, 0x03e, 0x03f,
00217 0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047,
00218 0x048, 0x049, 0x04a, 0x04b, 0x04c, 0x04d, 0x04e, 0x04f,
00219 0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057,
00220 0x058, 0x059, 0x05a, 0x05b, 0x05c, 0x05d, 0x05e, 0x05f,
00221 0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067,
00222 0x068, 0x069, 0x06a, 0x06b, 0x06c, 0x06d, 0x06e, 0x06f,
00223 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077,
00224 0x078, 0x079, 0x07a, 0x07b, 0x07c, 0x07d, 0x07e, 0x07f,
00225 0x080, 0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087,
00226 0x088, 0x089, 0x08a, 0x08b, 0x08c, 0x08d, 0x08e, 0x08f,
00227 0x090, 0x091, 0x092, 0x093, 0x094, 0x095, 0x096, 0x097,
00228 0x098, 0x099, 0x09a, 0x09b, 0x09c, 0x09d, 0x09e, 0x09f,
00229 0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4, 0x0a5, 0x0a6, 0x0a7,
00230 0x0a8, 0x0a9, 0x0aa, 0x0ab, 0x0ac, 0x0ad, 0x0ae, 0x0af,
00231 0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6, 0x0b7,
00232 0x0b8, 0x0b9, 0x0ba, 0x0bb, 0x0bc, 0x0bd, 0x0be, 0x0bf,
00233 0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7,
00234 0x0c8, 0x0c9, 0x0ca, 0x0cb, 0x0cc, 0x0cd, 0x0ce, 0x0cf,
00235 0x0d0, 0x0d1, 0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7,
00236 0x0d8, 0x0d9, 0x0da, 0x0db, 0x0dc, 0x0dd, 0x0de, 0x0df,
00237 0x0e0, 0x0e1, 0x0e2, 0x0e3, 0x0e4, 0x0e5, 0x0e6, 0x0e7,
00238 0x0e8, 0x0e9, 0x0ea, 0x0eb, 0x0ec, 0x0ed, 0x0ee, 0x0ef,
00239 0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5, 0x0f6, 0x0f7,
00240 0x0f8, 0x0f9, 0x0fa, 0x0fb, 0x0fc, 0x0fd, 0x0fe, 0x0ff,
00241
00242 -1, -1, -1, -1, -1, -1, -1, -1,
00243 -1, -1, -1, -1, -1, -1, -1, -1,
00244 -1, -1, -1, -1, -1, -1, -1, -1,
00245 -1, -1, -1, -1, -1, -1, -1, -1,
00246 -1, -1, -1, -1, -1, -1, -1, -1,
00247 -1, -1, -1, -1, -1, -1, -1, -1,
00248 -1, -1, -1, -1, -1, -1, -1, -1,
00249 -1, -1, -1, -1, -1, -1, -1, -1,
00250
00251 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107,
00252
00253 0x07f, 0x07e, 0x07d, 0x07c, 0x07b, 0x07a, 0x079, 0x078,
00254
00255 -1
00256 };
00257
00258 #endif
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270 static struct bnm {
00271 char name[16];
00272 } bnb[4];
00273 static INT16 bnb_used = 0;
00274
00275 char *
00276 Abi_Name ( TARGET_ABI b)
00277 {
00278 char *r;
00279
00280 switch ( b ) {
00281 case ABI_N32: return "n32";
00282 case ABI_N64: return "n64";
00283 default:
00284 r = bnb[bnb_used].name;
00285 bnb_used = (bnb_used + 1) % 4;
00286 sprintf (r, "ABI_%d", b);
00287 return r;
00288 }
00289 }
00290
00291 char *
00292 Isa_Name ( TARGET_ISA b)
00293 {
00294 char *r;
00295
00296 switch ( b ) {
00297 case TARGET_ISA_Mips64: return "mips64";
00298 default:
00299 r = bnb[bnb_used].name;
00300 bnb_used = (bnb_used + 1) % 4;
00301 sprintf (r, "ISA_%d", b);
00302 return r;
00303 }
00304 }
00305
00306 char *
00307 Targ_Name ( TARGET_PROCESSOR b)
00308 {
00309 char *r;
00310
00311 switch ( b ) {
00312 case TARGET_R10K: return "r10000";
00313 case TARGET_sb1: return "sb1";
00314 default:
00315 r = bnb[bnb_used].name;
00316 bnb_used = (bnb_used + 1) % 4;
00317 sprintf (r, "PROCESSOR_%d", b);
00318 return r;
00319 }
00320 }
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331 void
00332 Preconfigure_Target ( void )
00333 {
00334 return;
00335 }
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356 static void
00357 Prepare_Target ( void )
00358 {
00359 TARGET_ISA isa_default = TARGET_ISA_UNDEF;
00360 TARGET_PROCESSOR targ_default = TARGET_UNDEF;
00361
00362
00363 if ( ABI_Name != NULL ) {
00364 if ( strcmp ( ABI_Name, "n32" ) == 0 ) {
00365 Target_ABI = ABI_N32;
00366 isa_default = TARGET_ISA_M2;
00367 #if 0 // for non-KEY, default target is r10000
00368 targ_default = TARGET_sb1;
00369 #else
00370 #ifdef TARG_SL
00371 targ_default = TARGET_sl1_pcore;
00372 #else
00373 targ_default = TARGET_R10K;
00374 #endif
00375 #endif
00376 Use_32_Bit_Pointers = TRUE;
00377 } else if ( strcmp ( ABI_Name, "n64" ) == 0 ) {
00378 Target_ABI = ABI_N64;
00379 isa_default = TARGET_ISA_Mips64;
00380 targ_default = TARGET_sb1;
00381 Use_32_Bit_Pointers = FALSE;
00382 } else {
00383 ErrMsg ( EC_Inv_TARG, "abi", ABI_Name );
00384 }
00385 }
00386
00387
00388 if ( ISA_Name != NULL ) {
00389 TARGET_ISA isa;
00390
00391 if ( strcasecmp ( ISA_Name, "mips64" ) == 0 ) {
00392 isa = TARGET_ISA_Mips64;
00393 targ_default = TARGET_sb1;
00394 } else
00395 isa = TARGET_ISA_M2;
00396
00397
00398 if ( Target_ISA != TARGET_ISA_UNDEF && Target_ISA != isa ) {
00399 ErrMsg ( EC_Incons_TARG, "isa", ISA_Name,
00400 "isa", Isa_Name(Target_ISA) );
00401 }
00402 Target_ISA = isa;
00403 }
00404
00405
00406
00407
00408 switch ( Target_ISA ) {
00409 case TARGET_ISA_UNDEF:
00410 Target_ISA = isa_default;
00411 break;
00412 }
00413
00414
00415 if ( Processor_Name != NULL ) {
00416 TARGET_PROCESSOR targ;
00417
00418 if ( strcasecmp ( Processor_Name, "sb1" ) == 0 ) {
00419 targ = TARGET_sb1;
00420 } else if ( strcasecmp ( Processor_Name, "r10000" ) == 0 ) {
00421 targ = TARGET_R10K;
00422 }
00423 #ifdef TARG_SL
00424 else if ( strcasecmp (Processor_Name, "sl1_pcore") == 0 ) {
00425 targ = TARGET_sl1_pcore;
00426 } else if (strcasecmp (Processor_Name, "sl1_dsp") == 0) {
00427 targ = TARGET_sl1_dsp;
00428 } else if (strcasecmp (Processor_Name, "sl2_pcore") == 0 ) {
00429 targ = TARGET_sl2_pcore;
00430 } else if (strcasecmp (Processor_Name, "sl2_mcore") == 0 ) {
00431 targ = TARGET_sl2_mcore;
00432 }
00433 #endif
00434 else {
00435 ErrMsg ( EC_Inv_TARG, "processor", Processor_Name );
00436 targ = TARGET_UNDEF;
00437 }
00438
00439
00440 if ( Target != TARGET_UNDEF && Target != targ ) {
00441 ErrMsg ( EC_Incons_TARG, "processor", Processor_Name,
00442 "processor", Targ_Name(Target) );
00443 }
00444 Target = targ;
00445 }
00446
00447
00448
00449
00450 switch ( Target ) {
00451 case TARGET_sb1:
00452 Target_ISA = TARGET_ISA_Mips64;
00453 Target = TARGET_sb1;
00454 break;
00455 case TARGET_R10K:
00456 Target_ISA = TARGET_ISA_Mips64;
00457 Target = TARGET_R10K;
00458 break;
00459 #ifdef TARG_SL
00460 case TARGET_sl1_pcore:
00461 Target_ISA = TARGET_ISA_Mips64;
00462 Target = TARGET_sl1_pcore;
00463 break;
00464 case TARGET_sl1_dsp:
00465 Target_ISA = TARGET_ISA_Mips64;
00466 Target = TARGET_sl1_dsp;
00467 break;
00468 case TARGET_sl2_pcore:
00469 Target_ISA = TARGET_ISA_Mips64;
00470 Target = TARGET_sl2_pcore;
00471 break;
00472 case TARGET_sl2_mcore:
00473 Target_ISA = TARGET_ISA_Mips64;
00474 Target = TARGET_sl2_mcore;
00475 break;
00476 #endif
00477 case TARGET_UNDEF:
00478 Target = targ_default;
00479 if ( Target == TARGET_UNDEF ) {
00480
00481 Target_ISA = TARGET_ISA_Mips64;
00482 Target = TARGET_sb1;
00483 }
00484 break;
00485 }
00486
00487
00488 switch ( Target_FPRs ) {
00489 default:
00490 ErrMsg ( EC_Inv_FPRs, Target_FPRs );
00491
00492 case 0:
00493 Target_FPRs = 128;
00494 break;
00495 case 16:
00496 ErrMsg ( EC_FPR_16 );
00497 break;
00498 case 32:
00499 ErrMsg ( EC_FPR_32 );
00500 break;
00501 }
00502
00503
00504 Target_int64 = FALSE;
00505 Use_32_Bit_Pointers = (Target_ABI == ABI_N32);
00506 #if defined(FRONT_END_C) || defined(FRONT_END_CPLUSPLUS)
00507 #ifndef KEY
00508
00509
00510 Target_Int_Model = ( Target_ABI == ABI_N64 ) ? TARGET_INT_LP64
00511 : TARGET_INT_ILP32;
00512 #endif
00513 Make_Int_Model_Consistent ();
00514 #endif
00515 }
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526 void
00527 Configure_Target ( void )
00528 {
00529
00530 #if !(defined(FRONT_END_C) || defined(FRONT_END_CPLUSPLUS))
00531 if (Endian_Name == NULL)
00532 #if defined(TARG_SL) || defined(TARG_MIPS)
00533 Target_Byte_Sex = LITTLE_ENDIAN;
00534 #else
00535 Target_Byte_Sex = BIG_ENDIAN;
00536 #endif
00537 else Target_Byte_Sex = strncmp(Endian_Name, "lit", 3) == 0 ? LITTLE_ENDIAN
00538 : BIG_ENDIAN;
00539 #endif
00540 Same_Byte_Sex = ( Target_Byte_Sex == Host_Byte_Sex );
00541 #ifdef TARG_SL
00542 Gen_PIC_Calls = FALSE;
00543 #else
00544 Gen_PIC_Calls = TRUE;
00545 #endif
00546 GP_Is_Preserved = FALSE;
00547
00548
00549 Prepare_Target ();
00550
00551
00552 if (OPT_unroll_times > 0 && !OPT_unroll_times_overridden)
00553 #if defined(TARG_SL)
00554 OPT_unroll_times = 0;
00555 #else
00556 OPT_unroll_times = 4;
00557 #endif
00558
00559
00560 #if defined(TARG_SL)
00561 Spill_Int_Mtype = MTYPE_I4;
00562 Spill_Float_Mtype = MTYPE_F4;
00563 Spill_Int32_Mtype = MTYPE_I4;
00564 Spill_Float32_Mtype = MTYPE_F4;
00565 Max_Int_Mtype = Def_Int_Mtype = MTYPE_I4;
00566 Max_Uint_Mtype = Def_Uint_Mtype = MTYPE_U4;
00567 #else
00568 Spill_Int_Mtype = MTYPE_I8;
00569 Spill_Int32_Mtype = MTYPE_I4;
00570 Spill_Float32_Mtype = MTYPE_F4;
00571 Spill_Float_Mtype = MTYPE_F8;
00572 Max_Int_Mtype = Def_Int_Mtype = MTYPE_I8;
00573 Max_Uint_Mtype = Def_Uint_Mtype = MTYPE_U8;
00574 #endif
00575 Boolean_type = MTYPE_I4;
00576 Boolean_type2 = MTYPE_I4;
00577 Integer_type = MTYPE_I4;
00578
00579 Split_Quad_Ops = TRUE;
00580 Split_64_Bit_Int_Ops = FALSE;
00581
00582 #if defined(FRONT_END_C) || defined(FRONT_END_CPLUSPLUS)
00583 #ifndef EDG_FORTRAN
00584 Make_Int_Model_Consistent();
00585 #endif
00586 #endif
00587
00588
00589
00590 if ( Use_32_Bit_Pointers ) {
00591 Pointer_Size = 4;
00592 Pointer_Mtype = WHIRL_Mtype_A_On ? MTYPE_A4 : MTYPE_U4;
00593 Pointer_type = Pointer_Mtype;
00594 Pointer_Mtype2 = MTYPE_U4;
00595 Pointer_type2 = MTYPE_U4;
00596 } else {
00597 Pointer_Size = 8;
00598 Pointer_Mtype = WHIRL_Mtype_A_On ? MTYPE_A8: MTYPE_U8;
00599 Pointer_type = Pointer_Mtype;
00600 Pointer_Mtype2 = MTYPE_U8;
00601 Pointer_type2 = MTYPE_U8;
00602 }
00603
00604 if ( Use_32_Bit_Pointers ) {
00605 AS_ADDRESS = AS_WORD;
00606 AS_ADDRESS_UNALIGNED = AS_WORD;
00607 } else {
00608 AS_ADDRESS = AS_DWORD;
00609 AS_ADDRESS_UNALIGNED = AS_DWORD_UNALIGNED;
00610 }
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620 if ( Aggregate_Alignment > 0 ) {
00621 INT32 i = 1;
00622 while ( i < Aggregate_Alignment ) i <<= 1;
00623 Aggregate_Alignment = i;
00624
00625 if (Aggregate_Alignment < (Target_int64 ? 8 : 4))
00626 {
00627 Align_Object = FALSE;
00628 }
00629 }
00630
00631 #if defined(BACK_END)
00632 Init_Targ_Sim();
00633 #endif
00634
00635 #define IS_POW2(n) (((n) & ((n)-1))==0)
00636 FmtAssert (IS_POW2(Align_Instructions),
00637 ("-OPT:align_instructions=<n> must equal power of two"));
00638
00639 return;
00640 }
00641
00642
00643
00644
00645
00646
00647
00648
00649
00650
00651 void
00652 IPA_Configure_Target (void)
00653 {
00654 if (Target_ABI == ABI_N32) {
00655 Pointer_Size = 4;
00656 Pointer_Mtype = WHIRL_Mtype_A_On ? MTYPE_A4 : MTYPE_U4;
00657 Pointer_type = Pointer_Mtype;
00658 Pointer_Mtype2 = MTYPE_U4;
00659 Pointer_type2 = MTYPE_U4;
00660 } else {
00661 Pointer_Size = 8;
00662 Pointer_Mtype = WHIRL_Mtype_A_On ? MTYPE_A8 : MTYPE_U8;
00663 Pointer_type = Pointer_Mtype;
00664 Pointer_Mtype2 = MTYPE_U8;
00665 Pointer_type2 = MTYPE_U8;
00666 }
00667
00668 Integer_type = MTYPE_I4;
00669 Boolean_type = MTYPE_I4;
00670 Boolean_type2 = MTYPE_I4;
00671
00672 }
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683 void
00684 Configure_Source_Target ( char * )
00685 {
00686 char *option;
00687
00688 Indexed_Loads_Allowed = TRUE;
00689
00690
00691 if ( Kernel_Code ) {
00692 Zeroinit_in_bss = FALSE;
00693 }
00694
00695
00696 if ( FP_Excp_Max != NULL ) {
00697 FP_Exception_Enable_Max = 0;
00698 option = FP_Excp_Max;
00699 while ( *option ) {
00700 switch ( *option ) {
00701 case 'I': FP_Exception_Enable_Max |= FPX_I; break;
00702 case 'U': FP_Exception_Enable_Max |= FPX_U; break;
00703 case 'O': FP_Exception_Enable_Max |= FPX_O; break;
00704 case 'Z': FP_Exception_Enable_Max |= FPX_Z; break;
00705 case 'V': FP_Exception_Enable_Max |= FPX_V; break;
00706 }
00707 option++;
00708 }
00709 }
00710 if ( FP_Excp_Min != NULL ) {
00711 FP_Exception_Enable_Min = 0;
00712 option = FP_Excp_Min;
00713 while ( *option ) {
00714 switch ( *option ) {
00715 case 'I': FP_Exception_Enable_Min |= FPX_I; break;
00716 case 'U': FP_Exception_Enable_Min |= FPX_U; break;
00717 case 'O': FP_Exception_Enable_Min |= FPX_O; break;
00718 case 'Z': FP_Exception_Enable_Min |= FPX_Z; break;
00719 case 'V': FP_Exception_Enable_Min |= FPX_V; break;
00720 }
00721 option++;
00722 }
00723 }
00724
00725 if ( DEBUG_Trap_Uv )
00726 FP_Exception_Enable_Min |= FPX_V;
00727
00728
00729 if (Gen_PIC_Call_Shared)
00730 Gen_PIC_Call_Shared = FALSE;
00731
00732 return;
00733 }
00734
00735
00736 extern BOOL
00737 Set_Target_ABI (BOOL is_64bit, INT isa)
00738 {
00739 if (is_64bit) {
00740 switch (Target_ABI) {
00741 case ABI_UNDEF:
00742 Target_ABI = ABI_N64;
00743 break;
00744 case ABI_N64:
00745 break;
00746 default:
00747 return FALSE;
00748 }
00749 } else {
00750 switch (Target_ABI) {
00751 case ABI_UNDEF:
00752 Target_ABI = ABI_N32;
00753 break;
00754 case ABI_N32:
00755 break;
00756 default:
00757 return FALSE;
00758 }
00759 }
00760
00761 if (Target_ISA == TARGET_ISA_UNDEF) {
00762 Target_ISA = TARGET_ISA_Mips64;
00763 }
00764
00765 return TRUE;
00766 }