00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #define TARGET_CPU_CPP_BUILTINS() \
00025 do \
00026 { \
00027 builtin_define ("__alpha"); \
00028 builtin_define ("__alpha__"); \
00029 builtin_assert ("cpu=alpha"); \
00030 builtin_assert ("machine=alpha"); \
00031 if (TARGET_CIX) \
00032 { \
00033 builtin_define ("__alpha_cix__"); \
00034 builtin_assert ("cpu=cix"); \
00035 } \
00036 if (TARGET_FIX) \
00037 { \
00038 builtin_define ("__alpha_fix__"); \
00039 builtin_assert ("cpu=fix"); \
00040 } \
00041 if (TARGET_BWX) \
00042 { \
00043 builtin_define ("__alpha_bwx__"); \
00044 builtin_assert ("cpu=bwx"); \
00045 } \
00046 if (TARGET_MAX) \
00047 { \
00048 builtin_define ("__alpha_max__"); \
00049 builtin_assert ("cpu=max"); \
00050 } \
00051 if (TARGET_CPU_EV6) \
00052 { \
00053 builtin_define ("__alpha_ev6__"); \
00054 builtin_assert ("cpu=ev6"); \
00055 } \
00056 else if (TARGET_CPU_EV5) \
00057 { \
00058 builtin_define ("__alpha_ev5__"); \
00059 builtin_assert ("cpu=ev5"); \
00060 } \
00061 else \
00062 { \
00063 builtin_define ("__alpha_ev4__"); \
00064 builtin_assert ("cpu=ev4"); \
00065 } \
00066 if (TARGET_IEEE || TARGET_IEEE_WITH_INEXACT) \
00067 builtin_define ("_IEEE_FP"); \
00068 if (TARGET_IEEE_WITH_INEXACT) \
00069 builtin_define ("_IEEE_FP_INEXACT"); \
00070 if (TARGET_LONG_DOUBLE_128) \
00071 builtin_define ("__LONG_DOUBLE_128__"); \
00072 \
00073 \
00074 SUBTARGET_LANGUAGE_CPP_BUILTINS(); \
00075 } while (0)
00076
00077 #ifndef SUBTARGET_LANGUAGE_CPP_BUILTINS
00078 #define SUBTARGET_LANGUAGE_CPP_BUILTINS() \
00079 do \
00080 { \
00081 if (preprocessing_asm_p ()) \
00082 builtin_define_std ("LANGUAGE_ASSEMBLY"); \
00083 else if (c_dialect_cxx ()) \
00084 { \
00085 builtin_define ("__LANGUAGE_C_PLUS_PLUS"); \
00086 builtin_define ("__LANGUAGE_C_PLUS_PLUS__"); \
00087 } \
00088 else \
00089 builtin_define_std ("LANGUAGE_C"); \
00090 if (c_dialect_objc ()) \
00091 { \
00092 builtin_define ("__LANGUAGE_OBJECTIVE_C"); \
00093 builtin_define ("__LANGUAGE_OBJECTIVE_C__"); \
00094 } \
00095 } \
00096 while (0)
00097 #endif
00098
00099 #define CPP_SPEC "%(cpp_subtarget)"
00100
00101 #ifndef CPP_SUBTARGET_SPEC
00102 #define CPP_SUBTARGET_SPEC ""
00103 #endif
00104
00105 #define WORD_SWITCH_TAKES_ARG(STR) \
00106 (!strcmp (STR, "rpath") || DEFAULT_WORD_SWITCH_TAKES_ARG(STR))
00107
00108
00109 #define TARGET_VERSION
00110
00111
00112
00113
00114
00115
00116 enum processor_type
00117 {
00118 PROCESSOR_EV4,
00119 PROCESSOR_EV5,
00120 PROCESSOR_EV6,
00121 PROCESSOR_MAX
00122 };
00123
00124 extern enum processor_type alpha_cpu;
00125
00126 enum alpha_trap_precision
00127 {
00128 ALPHA_TP_PROG,
00129 ALPHA_TP_FUNC,
00130 ALPHA_TP_INSN
00131 };
00132
00133 enum alpha_fp_rounding_mode
00134 {
00135 ALPHA_FPRM_NORM,
00136 ALPHA_FPRM_MINF,
00137 ALPHA_FPRM_CHOP,
00138 ALPHA_FPRM_DYN
00139 };
00140
00141 enum alpha_fp_trap_mode
00142 {
00143 ALPHA_FPTM_N,
00144 ALPHA_FPTM_U,
00145 ALPHA_FPTM_SU,
00146 ALPHA_FPTM_SUI
00147 };
00148
00149 extern int target_flags;
00150
00151 extern enum alpha_trap_precision alpha_tp;
00152 extern enum alpha_fp_rounding_mode alpha_fprm;
00153 extern enum alpha_fp_trap_mode alpha_fptm;
00154 extern int alpha_tls_size;
00155
00156
00157
00158 #define MASK_FP (1 << 0)
00159 #define TARGET_FP ((target_flags & MASK_FP) != 0)
00160
00161
00162
00163
00164
00165 #define MASK_FPREGS (1 << 1)
00166 #define TARGET_FPREGS ((target_flags & MASK_FPREGS) != 0)
00167
00168
00169
00170 #define MASK_GAS (1 << 2)
00171 #define TARGET_GAS ((target_flags & MASK_GAS) != 0)
00172
00173
00174
00175 #define MASK_IEEE_CONFORMANT (1 << 3)
00176 #define TARGET_IEEE_CONFORMANT ((target_flags & MASK_IEEE_CONFORMANT) != 0)
00177
00178
00179
00180 #define MASK_IEEE (1 << 4)
00181 #define TARGET_IEEE ((target_flags & MASK_IEEE) != 0)
00182
00183
00184
00185 #define MASK_IEEE_WITH_INEXACT (1 << 5)
00186 #define TARGET_IEEE_WITH_INEXACT ((target_flags & MASK_IEEE_WITH_INEXACT) != 0)
00187
00188
00189
00190
00191 #define MASK_BUILD_CONSTANTS (1 << 6)
00192 #define TARGET_BUILD_CONSTANTS ((target_flags & MASK_BUILD_CONSTANTS) != 0)
00193
00194
00195
00196
00197 #define MASK_FLOAT_VAX (1 << 7)
00198 #define TARGET_FLOAT_VAX ((target_flags & MASK_FLOAT_VAX) != 0)
00199
00200
00201
00202
00203 #define MASK_BWX (1 << 8)
00204 #define TARGET_BWX ((target_flags & MASK_BWX) != 0)
00205
00206
00207 #define MASK_MAX (1 << 9)
00208 #define TARGET_MAX ((target_flags & MASK_MAX) != 0)
00209
00210
00211 #define MASK_FIX (1 << 10)
00212 #define TARGET_FIX ((target_flags & MASK_FIX) != 0)
00213
00214
00215 #define MASK_CIX (1 << 11)
00216 #define TARGET_CIX ((target_flags & MASK_CIX) != 0)
00217
00218
00219 #define MASK_EXPLICIT_RELOCS (1 << 12)
00220 #define TARGET_EXPLICIT_RELOCS ((target_flags & MASK_EXPLICIT_RELOCS) != 0)
00221
00222
00223 #define MASK_SMALL_DATA (1 << 13)
00224 #define TARGET_SMALL_DATA ((target_flags & MASK_SMALL_DATA) != 0)
00225
00226
00227 #define MASK_TLS_KERNEL (1 << 14)
00228 #define TARGET_TLS_KERNEL ((target_flags & MASK_TLS_KERNEL) != 0)
00229
00230
00231 #define MASK_SMALL_TEXT (1 << 15)
00232 #define TARGET_SMALL_TEXT ((target_flags & MASK_SMALL_TEXT) != 0)
00233
00234
00235
00236 #define MASK_LONG_DOUBLE_128 (1 << 16)
00237 #define TARGET_LONG_DOUBLE_128 ((target_flags & MASK_LONG_DOUBLE_128) != 0)
00238
00239
00240
00241 #define MASK_CPU_EV5 (1 << 28)
00242 #define TARGET_CPU_EV5 ((target_flags & MASK_CPU_EV5) != 0)
00243
00244
00245 #define MASK_CPU_EV6 (1 << 29)
00246 #define TARGET_CPU_EV6 ((target_flags & MASK_CPU_EV6) != 0)
00247
00248
00249
00250 #define MASK_SUPPORT_ARCH (1 << 30)
00251 #define TARGET_SUPPORT_ARCH ((target_flags & MASK_SUPPORT_ARCH) != 0)
00252
00253
00254 #define TARGET_ABI_WINDOWS_NT 0
00255 #define TARGET_ABI_OPEN_VMS 0
00256 #define TARGET_ABI_UNICOSMK 0
00257 #define TARGET_ABI_OSF (!TARGET_ABI_WINDOWS_NT \
00258 && !TARGET_ABI_OPEN_VMS \
00259 && !TARGET_ABI_UNICOSMK)
00260
00261 #ifndef TARGET_AS_CAN_SUBTRACT_LABELS
00262 #define TARGET_AS_CAN_SUBTRACT_LABELS TARGET_GAS
00263 #endif
00264 #ifndef TARGET_AS_SLASH_BEFORE_SUFFIX
00265 #define TARGET_AS_SLASH_BEFORE_SUFFIX TARGET_GAS
00266 #endif
00267 #ifndef TARGET_CAN_FAULT_IN_PROLOGUE
00268 #define TARGET_CAN_FAULT_IN_PROLOGUE 0
00269 #endif
00270 #ifndef TARGET_HAS_XFLOATING_LIBS
00271 #define TARGET_HAS_XFLOATING_LIBS TARGET_LONG_DOUBLE_128
00272 #endif
00273 #ifndef TARGET_PROFILING_NEEDS_GP
00274 #define TARGET_PROFILING_NEEDS_GP 0
00275 #endif
00276 #ifndef TARGET_LD_BUGGY_LDGP
00277 #define TARGET_LD_BUGGY_LDGP 0
00278 #endif
00279 #ifndef TARGET_FIXUP_EV5_PREFETCH
00280 #define TARGET_FIXUP_EV5_PREFETCH 0
00281 #endif
00282 #ifndef HAVE_AS_TLS
00283 #define HAVE_AS_TLS 0
00284 #endif
00285
00286
00287
00288
00289
00290
00291
00292 #define TARGET_SWITCHES \
00293 { {"no-soft-float", MASK_FP, N_("Use hardware fp")}, \
00294 {"soft-float", - MASK_FP, N_("Do not use hardware fp")}, \
00295 {"fp-regs", MASK_FPREGS, N_("Use fp registers")}, \
00296 {"no-fp-regs", - (MASK_FP|MASK_FPREGS), \
00297 N_("Do not use fp registers")}, \
00298 {"alpha-as", -MASK_GAS, N_("Do not assume GAS")}, \
00299 {"gas", MASK_GAS, N_("Assume GAS")}, \
00300 {"ieee-conformant", MASK_IEEE_CONFORMANT, \
00301 N_("Request IEEE-conformant math library routines (OSF/1)")}, \
00302 {"ieee", MASK_IEEE|MASK_IEEE_CONFORMANT, \
00303 N_("Emit IEEE-conformant code, without inexact exceptions")}, \
00304 {"ieee-with-inexact", MASK_IEEE_WITH_INEXACT|MASK_IEEE_CONFORMANT, \
00305 N_("Emit IEEE-conformant code, with inexact exceptions")}, \
00306 {"build-constants", MASK_BUILD_CONSTANTS, \
00307 N_("Do not emit complex integer constants to read-only memory")}, \
00308 {"float-vax", MASK_FLOAT_VAX, N_("Use VAX fp")}, \
00309 {"float-ieee", -MASK_FLOAT_VAX, N_("Do not use VAX fp")}, \
00310 {"bwx", MASK_BWX, N_("Emit code for the byte/word ISA extension")}, \
00311 {"no-bwx", -MASK_BWX, ""}, \
00312 {"max", MASK_MAX, \
00313 N_("Emit code for the motion video ISA extension")}, \
00314 {"no-max", -MASK_MAX, ""}, \
00315 {"fix", MASK_FIX, \
00316 N_("Emit code for the fp move and sqrt ISA extension")}, \
00317 {"no-fix", -MASK_FIX, ""}, \
00318 {"cix", MASK_CIX, N_("Emit code for the counting ISA extension")}, \
00319 {"no-cix", -MASK_CIX, ""}, \
00320 {"explicit-relocs", MASK_EXPLICIT_RELOCS, \
00321 N_("Emit code using explicit relocation directives")}, \
00322 {"no-explicit-relocs", -MASK_EXPLICIT_RELOCS, ""}, \
00323 {"small-data", MASK_SMALL_DATA, \
00324 N_("Emit 16-bit relocations to the small data areas")}, \
00325 {"large-data", -MASK_SMALL_DATA, \
00326 N_("Emit 32-bit relocations to the small data areas")}, \
00327 {"small-text", MASK_SMALL_TEXT, \
00328 N_("Emit direct branches to local functions")}, \
00329 {"large-text", -MASK_SMALL_TEXT, ""}, \
00330 {"tls-kernel", MASK_TLS_KERNEL, \
00331 N_("Emit rdval instead of rduniq for thread pointer")}, \
00332 {"long-double-128", MASK_LONG_DOUBLE_128, \
00333 N_("Use 128-bit long double")}, \
00334 {"long-double-64", -MASK_LONG_DOUBLE_128, \
00335 N_("Use 64-bit long double")}, \
00336 {"", TARGET_DEFAULT | TARGET_CPU_DEFAULT \
00337 | TARGET_DEFAULT_EXPLICIT_RELOCS, ""} }
00338
00339 #define TARGET_DEFAULT MASK_FP|MASK_FPREGS
00340
00341 #ifndef TARGET_CPU_DEFAULT
00342 #define TARGET_CPU_DEFAULT 0
00343 #endif
00344
00345 #ifndef TARGET_DEFAULT_EXPLICIT_RELOCS
00346 #ifdef HAVE_AS_EXPLICIT_RELOCS
00347 #define TARGET_DEFAULT_EXPLICIT_RELOCS MASK_EXPLICIT_RELOCS
00348 #else
00349 #define TARGET_DEFAULT_EXPLICIT_RELOCS 0
00350 #endif
00351 #endif
00352
00353 extern const char *alpha_cpu_string;
00354 extern const char *alpha_tune_string;
00355 extern const char *alpha_fprm_string;
00356 extern const char *alpha_fptm_string;
00357 extern const char *alpha_tp_string;
00358 extern const char *alpha_mlat_string;
00359 extern const char *alpha_tls_size_string;
00360
00361 #define TARGET_OPTIONS \
00362 { \
00363 {"cpu=", &alpha_cpu_string, \
00364 N_("Use features of and schedule given CPU"), 0}, \
00365 {"tune=", &alpha_tune_string, \
00366 N_("Schedule given CPU"), 0}, \
00367 {"fp-rounding-mode=", &alpha_fprm_string, \
00368 N_("Control the generated fp rounding mode"), 0}, \
00369 {"fp-trap-mode=", &alpha_fptm_string, \
00370 N_("Control the IEEE trap mode"), 0}, \
00371 {"trap-precision=", &alpha_tp_string, \
00372 N_("Control the precision given to fp exceptions"), 0}, \
00373 {"memory-latency=", &alpha_mlat_string, \
00374 N_("Tune expected memory latency"), 0}, \
00375 {"tls-size=", &alpha_tls_size_string, \
00376 N_("Specify bit size of immediate TLS offsets"), 0}, \
00377 }
00378
00379
00380
00381
00382 #define OPTION_DEFAULT_SPECS \
00383 {"cpu", "%{!mcpu=*:-mcpu=%(VALUE)}" }, \
00384 {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396 #ifndef SUBTARGET_EXTRA_SPECS
00397 #define SUBTARGET_EXTRA_SPECS
00398 #endif
00399
00400 #define EXTRA_SPECS \
00401 { "cpp_subtarget", CPP_SUBTARGET_SPEC }, \
00402 SUBTARGET_EXTRA_SPECS
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414 #define OVERRIDE_OPTIONS override_options ()
00415
00416
00417
00418
00419
00420
00421
00422 #define CONDITIONAL_REGISTER_USAGE \
00423 { \
00424 int i; \
00425 if (! TARGET_FPREGS) \
00426 for (i = 32; i < 63; i++) \
00427 fixed_regs[i] = call_used_regs[i] = 1; \
00428 }
00429
00430
00431
00432 #define CAN_DEBUG_WITHOUT_FP
00433
00434
00435
00436
00437 #define INT_TYPE_SIZE 32
00438
00439
00440 #define LONG_LONG_TYPE_SIZE 64
00441
00442
00443 #define TARGET_FLOAT_FORMAT \
00444 (TARGET_FLOAT_VAX ? VAX_FLOAT_FORMAT : IEEE_FLOAT_FORMAT)
00445
00446
00447
00448
00449
00450 #define FLOAT_TYPE_SIZE 32
00451 #define DOUBLE_TYPE_SIZE 64
00452 #define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_128 ? 128 : 64)
00453
00454
00455
00456 #ifdef __LONG_DOUBLE_128__
00457 #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
00458 #else
00459 #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
00460 #endif
00461
00462
00463 #define WIDEST_HARDWARE_FP_SIZE 64
00464
00465 #define WCHAR_TYPE "unsigned int"
00466 #define WCHAR_TYPE_SIZE 32
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482 #define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \
00483 if (GET_MODE_CLASS (MODE) == MODE_INT \
00484 && (TYPE == NULL || TREE_CODE (TYPE) != VECTOR_TYPE) \
00485 && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
00486 { \
00487 if ((MODE) == SImode) \
00488 (UNSIGNEDP) = 0; \
00489 (MODE) = DImode; \
00490 }
00491
00492
00493
00494
00495
00496
00497 #define BITS_BIG_ENDIAN 0
00498
00499
00500
00501 #define BYTES_BIG_ENDIAN 0
00502
00503
00504
00505
00506
00507
00508 #define WORDS_BIG_ENDIAN 0
00509
00510
00511 #define UNITS_PER_WORD 8
00512
00513
00514
00515 #define POINTER_SIZE 64
00516
00517
00518 #define PARM_BOUNDARY 64
00519
00520
00521 #define STACK_BOUNDARY 128
00522
00523
00524 #define FUNCTION_BOUNDARY 32
00525
00526
00527 #define EMPTY_FIELD_BOUNDARY 64
00528
00529
00530 #define STRUCTURE_SIZE_BOUNDARY 8
00531
00532
00533 #define PCC_BITFIELD_TYPE_MATTERS 1
00534
00535
00536 #define BIGGEST_ALIGNMENT 128
00537
00538
00539
00540 #define MINIMUM_ATOMIC_ALIGNMENT ((unsigned int) (TARGET_BWX ? 8 : 32))
00541
00542
00543
00544
00545
00546 #if 0
00547 #define CONSTANT_ALIGNMENT(EXP, ALIGN) MAX ((ALIGN), BITS_PER_WORD)
00548 #define DATA_ALIGNMENT(EXP, ALIGN) MAX ((ALIGN), BITS_PER_WORD)
00549 #endif
00550
00551
00552
00553
00554
00555
00556 #define STRICT_ALIGNMENT 1
00557
00558
00559
00560
00561
00562 #define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) 1
00563
00564
00565 #define UNITS_PER_SIMD_WORD UNITS_PER_WORD
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589 #define FIRST_PSEUDO_REGISTER 64
00590
00591
00592
00593
00594 #define FIXED_REGISTERS \
00595 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00596 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, \
00597 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
00598 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }
00599
00600
00601
00602
00603
00604
00605
00606 #define CALL_USED_REGISTERS \
00607 {1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \
00608 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, \
00609 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, \
00610 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
00611
00612
00613
00614
00615 #define REG_ALLOC_ORDER { \
00616 1, 2, 3, 4, 5, 6, 7, 8, \
00617 22, 23, 24, 25, 28, \
00618 0, \
00619 21, 20, 19, 18, 17, 16, \
00620 27, \
00621 \
00622 42, 43, 44, 45, 46, 47, \
00623 54, 55, 56, 57, 58, 59, \
00624 60, 61, 62, \
00625 32, 33, \
00626 53, 52, 51, 50, 49, 48, \
00627 \
00628 9, 10, 11, 12, 13, 14, \
00629 26, \
00630 15, \
00631 \
00632 34, 35, 36, 37, 38, 39, \
00633 40, 41, \
00634 \
00635 29, 30, 31, 63 \
00636 }
00637
00638
00639
00640
00641
00642
00643 #define HARD_REGNO_NREGS(REGNO, MODE) \
00644 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
00645
00646
00647
00648
00649
00650 #define HARD_REGNO_MODE_OK(REGNO, MODE) \
00651 ((REGNO) >= 32 && (REGNO) <= 62 \
00652 ? (MODE) == SFmode || (MODE) == DFmode || (MODE) == DImode \
00653 || (MODE) == SCmode || (MODE) == DCmode \
00654 : 1)
00655
00656
00657
00658
00659
00660
00661
00662 #define MODES_TIEABLE_P(MODE1, MODE2) \
00663 (HARD_REGNO_MODE_OK (32, (MODE1)) \
00664 ? HARD_REGNO_MODE_OK (32, (MODE2)) \
00665 : 1)
00666
00667
00668
00669
00670
00671
00672
00673
00674 #define STACK_POINTER_REGNUM 30
00675
00676
00677 #define HARD_FRAME_POINTER_REGNUM 15
00678
00679
00680
00681
00682
00683 #define FRAME_POINTER_REQUIRED 0
00684
00685
00686 #define ARG_POINTER_REGNUM 31
00687
00688
00689 #define FRAME_POINTER_REGNUM 63
00690
00691
00692
00693
00694
00695 #define STATIC_CHAIN_REGNUM 1
00696
00697
00698
00699 #define PIC_OFFSET_TABLE_REGNUM 29
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729 enum reg_class {
00730 NO_REGS, R0_REG, R24_REG, R25_REG, R27_REG,
00731 GENERAL_REGS, FLOAT_REGS, ALL_REGS,
00732 LIM_REG_CLASSES
00733 };
00734
00735 #define N_REG_CLASSES (int) LIM_REG_CLASSES
00736
00737
00738
00739 #define REG_CLASS_NAMES \
00740 {"NO_REGS", "R0_REG", "R24_REG", "R25_REG", "R27_REG", \
00741 "GENERAL_REGS", "FLOAT_REGS", "ALL_REGS" }
00742
00743
00744
00745
00746
00747 #define REG_CLASS_CONTENTS \
00748 { {0x00000000, 0x00000000}, \
00749 {0x00000001, 0x00000000}, \
00750 {0x01000000, 0x00000000}, \
00751 {0x02000000, 0x00000000}, \
00752 {0x08000000, 0x00000000}, \
00753 {0xffffffff, 0x80000000}, \
00754 {0x00000000, 0x7fffffff}, \
00755 {0xffffffff, 0xffffffff} }
00756
00757
00758
00759
00760
00761
00762 #define REGNO_REG_CLASS(REGNO) \
00763 ((REGNO) == 0 ? R0_REG \
00764 : (REGNO) == 24 ? R24_REG \
00765 : (REGNO) == 25 ? R25_REG \
00766 : (REGNO) == 27 ? R27_REG \
00767 : (REGNO) >= 32 && (REGNO) <= 62 ? FLOAT_REGS \
00768 : GENERAL_REGS)
00769
00770
00771 #define INDEX_REG_CLASS NO_REGS
00772 #define BASE_REG_CLASS GENERAL_REGS
00773
00774
00775
00776 #define REG_CLASS_FROM_LETTER(C) \
00777 ((C) == 'a' ? R24_REG \
00778 : (C) == 'b' ? R25_REG \
00779 : (C) == 'c' ? R27_REG \
00780 : (C) == 'f' ? FLOAT_REGS \
00781 : (C) == 'v' ? R0_REG \
00782 : NO_REGS)
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802
00803 #define CONST_OK_FOR_LETTER_P alpha_const_ok_for_letter_p
00804
00805
00806
00807
00808
00809
00810
00811 #define CONST_DOUBLE_OK_FOR_LETTER_P alpha_const_double_ok_for_letter_p
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829 #define EXTRA_CONSTRAINT alpha_extra_constraint
00830
00831
00832
00833
00834
00835
00836 #define PREFERRED_RELOAD_CLASS alpha_preferred_reload_class
00837
00838
00839
00840
00841
00842
00843
00844
00845 #define SECONDARY_INPUT_RELOAD_CLASS(CLASS,MODE,IN) \
00846 secondary_reload_class((CLASS), (MODE), (IN), 1)
00847
00848 #define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS,MODE,OUT) \
00849 secondary_reload_class((CLASS), (MODE), (OUT), 0)
00850
00851
00852
00853
00854 #define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \
00855 (! TARGET_FIX && (((CLASS1) == FLOAT_REGS && (CLASS2) != FLOAT_REGS) \
00856 || ((CLASS2) == FLOAT_REGS && (CLASS1) != FLOAT_REGS)))
00857
00858
00859
00860
00861
00862
00863 #define SECONDARY_MEMORY_NEEDED_MODE(MODE) \
00864 (GET_MODE_CLASS (MODE) == MODE_FLOAT ? (MODE) \
00865 : GET_MODE_SIZE (MODE) >= 4 ? (MODE) \
00866 : mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (MODE), 0))
00867
00868
00869
00870
00871 #define CLASS_MAX_NREGS(CLASS, MODE) \
00872 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
00873
00874
00875
00876 #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
00877 (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
00878 ? reg_classes_intersect_p (FLOAT_REGS, CLASS) : 0)
00879
00880
00881
00882
00883
00884
00885
00886
00887 #define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \
00888 (((CLASS1) == FLOAT_REGS) == ((CLASS2) == FLOAT_REGS) ? 2 \
00889 : TARGET_FIX ? ((CLASS1) == FLOAT_REGS ? 6 : 8) \
00890 : 4+2*alpha_memory_latency)
00891
00892
00893
00894
00895
00896
00897 extern int alpha_memory_latency;
00898 #define MEMORY_MOVE_COST(MODE,CLASS,IN) (2*alpha_memory_latency)
00899
00900
00901 #define BRANCH_COST 5
00902
00903
00904
00905
00906
00907 #define STACK_GROWS_DOWNWARD
00908
00909
00910
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920 #define STARTING_FRAME_OFFSET 0
00921
00922
00923
00924
00925
00926
00927
00928 #define STACK_CHECK_BUILTIN 1
00929
00930
00931
00932
00933 #define ACCUMULATE_OUTGOING_ARGS 1
00934
00935
00936
00937 #define FIRST_PARM_OFFSET(FNDECL) 0
00938
00939
00940
00941
00942
00943
00944
00945
00946
00947
00948
00949
00950
00951 #define ELIMINABLE_REGS \
00952 {{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
00953 { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
00954 { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
00955 { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}}
00956
00957
00958
00959
00960
00961
00962
00963 #define CAN_ELIMINATE(FROM, TO) 1
00964
00965
00966 #define ALPHA_ROUND(X) (((X) + 15) & ~ 15)
00967
00968
00969
00970 #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
00971 ((OFFSET) = alpha_initial_elimination_offset(FROM, TO))
00972
00973
00974
00975
00976
00977
00978
00979
00980
00981
00982
00983
00984 #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994 #define FUNCTION_VALUE(VALTYPE, FUNC) \
00995 function_value (VALTYPE, FUNC, VOIDmode)
00996
00997
00998
00999
01000 #define LIBCALL_VALUE(MODE) \
01001 function_value (NULL, NULL, MODE)
01002
01003
01004
01005
01006 #define FUNCTION_VALUE_REGNO_P(N) \
01007 ((N) == 0 || (N) == 1 || (N) == 32 || (N) == 33)
01008
01009
01010
01011
01012 #define FUNCTION_ARG_REGNO_P(N) \
01013 (((N) >= 16 && (N) <= 21) || ((N) >= 16 + 32 && (N) <= 21 + 32))
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024
01025 #define CUMULATIVE_ARGS int
01026
01027
01028
01029
01030
01031 #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
01032 (CUM) = 0
01033
01034
01035
01036
01037 #define ALPHA_ARG_SIZE(MODE, TYPE, NAMED) \
01038 ((MODE) == TFmode || (MODE) == TCmode ? 1 \
01039 : (((MODE) == BLKmode ? int_size_in_bytes (TYPE) : GET_MODE_SIZE (MODE)) \
01040 + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
01041
01042
01043
01044
01045
01046 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
01047 ((CUM) += \
01048 (targetm.calls.must_pass_in_stack (MODE, TYPE)) \
01049 ? 6 : ALPHA_ARG_SIZE (MODE, TYPE, NAMED))
01050
01051
01052
01053
01054
01055
01056
01057
01058
01059
01060
01061
01062
01063
01064
01065
01066
01067 #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
01068 function_arg((CUM), (MODE), (TYPE), (NAMED))
01069
01070
01071
01072
01073
01074
01075
01076
01077
01078
01079
01080 struct alpha_compare
01081 {
01082 struct rtx_def *op0, *op1;
01083 int fp_p;
01084 };
01085
01086 extern struct alpha_compare alpha_compare;
01087
01088
01089
01090
01091
01092
01093 #define ASM_COMMENT_START " #"
01094
01095
01096
01097 #define ASM_DECLARE_FUNCTION_NAME(FILE,NAME,DECL) \
01098 alpha_start_function(FILE,NAME,DECL);
01099
01100
01101
01102 #define ASM_DECLARE_FUNCTION_SIZE(FILE,NAME,DECL) \
01103 alpha_end_function(FILE,NAME,DECL)
01104
01105
01106
01107 #define PROFILE_BEFORE_PROLOGUE 1
01108
01109
01110
01111 #define NO_PROFILE_COUNTERS 1
01112
01113
01114
01115
01116
01117 #define FUNCTION_PROFILER(FILE, LABELNO)
01118
01119
01120
01121
01122
01123
01124 #define EXIT_IGNORE_STACK 1
01125
01126
01127
01128 #define EPILOGUE_USES(REGNO) ((REGNO) == 26)
01129
01130
01131
01132
01133
01134
01135
01136
01137
01138 #define TRAMPOLINE_TEMPLATE(FILE) \
01139 do { \
01140 fprintf (FILE, "\tldq $1,24($27)\n"); \
01141 fprintf (FILE, "\tldq $27,16($27)\n"); \
01142 fprintf (FILE, "\tjmp $31,($27),0\n"); \
01143 fprintf (FILE, "\tnop\n"); \
01144 fprintf (FILE, "\t.quad 0,0\n"); \
01145 } while (0)
01146
01147
01148
01149
01150 #define TRAMPOLINE_SECTION text_section
01151
01152
01153
01154 #define TRAMPOLINE_SIZE 32
01155
01156
01157
01158 #define TRAMPOLINE_ALIGNMENT 64
01159
01160
01161
01162
01163
01164 #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
01165 alpha_initialize_trampoline (TRAMP, FNADDR, CXT, 16, 24, 8)
01166
01167
01168
01169
01170
01171
01172 #define RETURN_ADDR_RTX alpha_return_addr
01173
01174
01175 #define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, 26)
01176 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (26)
01177 #define DWARF_ALT_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (64)
01178 #define DWARF_ZERO_REG 31
01179
01180
01181 #define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N) + 16 : INVALID_REGNUM)
01182 #define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 28)
01183 #define EH_RETURN_HANDLER_RTX \
01184 gen_rtx_MEM (Pmode, plus_constant (stack_pointer_rtx, \
01185 current_function_outgoing_args_size))
01186
01187
01188
01189
01190
01191
01192
01193
01194
01195
01196
01197 #define REGNO_OK_FOR_INDEX_P(REGNO) 0
01198 #define REGNO_OK_FOR_BASE_P(REGNO) \
01199 ((REGNO) < 32 || (unsigned) reg_renumber[REGNO] < 32 \
01200 || (REGNO) == 63 || reg_renumber[REGNO] == 63)
01201
01202
01203 #define MAX_REGS_PER_ADDRESS 1
01204
01205
01206
01207
01208
01209 #define CONSTANT_ADDRESS_P(X) \
01210 (GET_CODE (X) == CONST_INT \
01211 && (unsigned HOST_WIDE_INT) (INTVAL (X) + 0x8000) < 0x10000)
01212
01213
01214
01215
01216 #define LEGITIMATE_CONSTANT_P alpha_legitimate_constant_p
01217
01218
01219
01220
01221
01222
01223
01224
01225
01226
01227
01228
01229
01230
01231
01232
01233 #define REG_OK_FOR_INDEX_P(X) 0
01234
01235
01236
01237 #define NONSTRICT_REG_OK_FOR_BASE_P(X) \
01238 (REGNO (X) < 32 || REGNO (X) == 63 || REGNO (X) >= FIRST_PSEUDO_REGISTER)
01239
01240
01241
01242
01243
01244
01245 #define NONSTRICT_REG_OK_FP_BASE_P(X) \
01246 (REGNO (X) == 31 || REGNO (X) == 63 \
01247 || (REGNO (X) >= FIRST_PSEUDO_REGISTER \
01248 && REGNO (X) < LAST_VIRTUAL_REGISTER))
01249
01250
01251 #define STRICT_REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
01252
01253 #ifdef REG_OK_STRICT
01254 #define REG_OK_FOR_BASE_P(X) STRICT_REG_OK_FOR_BASE_P (X)
01255 #else
01256 #define REG_OK_FOR_BASE_P(X) NONSTRICT_REG_OK_FOR_BASE_P (X)
01257 #endif
01258
01259
01260
01261
01262 #ifdef REG_OK_STRICT
01263 #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, WIN) \
01264 do { \
01265 if (alpha_legitimate_address_p (MODE, X, 1)) \
01266 goto WIN; \
01267 } while (0)
01268 #else
01269 #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, WIN) \
01270 do { \
01271 if (alpha_legitimate_address_p (MODE, X, 0)) \
01272 goto WIN; \
01273 } while (0)
01274 #endif
01275
01276
01277
01278
01279
01280 #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \
01281 do { \
01282 rtx new_x = alpha_legitimize_address (X, NULL_RTX, MODE); \
01283 if (new_x) \
01284 { \
01285 X = new_x; \
01286 goto WIN; \
01287 } \
01288 } while (0)
01289
01290
01291
01292
01293
01294 #define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND_L,WIN) \
01295 do { \
01296 rtx new_x = alpha_legitimize_reload_address (X, MODE, OPNUM, TYPE, IND_L); \
01297 if (new_x) \
01298 { \
01299 X = new_x; \
01300 goto WIN; \
01301 } \
01302 } while (0)
01303
01304
01305
01306
01307
01308
01309 #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
01310 { if (GET_CODE (ADDR) == AND) goto LABEL; }
01311
01312
01313
01314 #define CASE_VECTOR_MODE SImode
01315
01316
01317
01318
01319
01320
01321
01322
01323
01324 #define CASE_VECTOR_PC_RELATIVE 1
01325
01326
01327 #define DEFAULT_SIGNED_CHAR 1
01328
01329
01330
01331
01332 #define MOVE_MAX 8
01333
01334
01335
01336
01337
01338
01339
01340 #define MOVE_RATIO (TARGET_BWX ? 7 : 2)
01341
01342
01343
01344 #define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TImode)
01345
01346
01347
01348
01349
01350
01351
01352
01353 #define SLOW_BYTE_ACCESS 1
01354
01355
01356
01357 #define WORD_REGISTER_OPERATIONS
01358
01359
01360
01361
01362
01363 #define LOAD_EXTEND_OP(MODE) ((MODE) == SImode ? SIGN_EXTEND : ZERO_EXTEND)
01364
01365
01366 #define SHORT_IMMEDIATES_SIGN_EXTEND
01367
01368
01369
01370 #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
01371
01372
01373 #define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 64, TARGET_CIX)
01374 #define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 64, TARGET_CIX)
01375
01376
01377
01378 #define FLOAT_STORE_FLAG_VALUE(MODE) \
01379 REAL_VALUE_ATOF ((TARGET_FLOAT_VAX ? "0.5" : "2.0"), (MODE))
01380
01381
01382
01383 #define CANONICALIZE_COMPARISON(CODE,OP0,OP1) \
01384 do { \
01385 if (((CODE) == GE || (CODE) == GT || (CODE) == GEU || (CODE) == GTU) \
01386 && (GET_CODE (OP1) == REG || (OP1) == const0_rtx)) \
01387 { \
01388 rtx tem = (OP0); \
01389 (OP0) = (OP1); \
01390 (OP1) = tem; \
01391 (CODE) = swap_condition (CODE); \
01392 } \
01393 if (((CODE) == LT || (CODE) == LTU) \
01394 && GET_CODE (OP1) == CONST_INT && INTVAL (OP1) == 256) \
01395 { \
01396 (CODE) = (CODE) == LT ? LE : LEU; \
01397 (OP1) = GEN_INT (255); \
01398 } \
01399 } while (0)
01400
01401
01402
01403
01404 #define Pmode DImode
01405
01406
01407
01408 #define FUNCTION_MODE Pmode
01409
01410
01411
01412
01413
01414
01415
01416
01417
01418
01419
01420 #define NO_FUNCTION_CSE
01421
01422
01423
01424 #define SHIFT_COUNT_TRUNCATED 1
01425
01426
01427
01428
01429
01430 #define ASM_APP_ON (TARGET_EXPLICIT_RELOCS ? "\t.set\tmacro\n" : "")
01431
01432
01433
01434 #define ASM_APP_OFF (TARGET_EXPLICIT_RELOCS ? "\t.set\tnomacro\n" : "")
01435
01436 #define TEXT_SECTION_ASM_OP "\t.text"
01437
01438
01439
01440 #define READONLY_DATA_SECTION_ASM_OP "\t.rdata"
01441
01442
01443
01444 #define DATA_SECTION_ASM_OP "\t.data"
01445
01446
01447
01448
01449 #define REGISTER_NAMES \
01450 {"$0", "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", \
01451 "$9", "$10", "$11", "$12", "$13", "$14", "$15", \
01452 "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23", \
01453 "$24", "$25", "$26", "$27", "$28", "$29", "$30", "AP", \
01454 "$f0", "$f1", "$f2", "$f3", "$f4", "$f5", "$f6", "$f7", "$f8", \
01455 "$f9", "$f10", "$f11", "$f12", "$f13", "$f14", "$f15", \
01456 "$f16", "$f17", "$f18", "$f19", "$f20", "$f21", "$f22", "$f23",\
01457 "$f24", "$f25", "$f26", "$f27", "$f28", "$f29", "$f30", "FP"}
01458
01459
01460
01461 #define ASM_OUTPUT_LABELREF(STREAM, NAME) \
01462 do { \
01463 const char *name_ = NAME; \
01464 if (*name_ == '@' || *name_ == '%') \
01465 name_ += 2; \
01466 if (*name_ == '*') \
01467 name_++; \
01468 else \
01469 fputs (user_label_prefix, STREAM); \
01470 fputs (name_, STREAM); \
01471 } while (0)
01472
01473
01474 #define GLOBAL_ASM_OP "\t.globl "
01475
01476
01477
01478 #define USER_LABEL_PREFIX ""
01479
01480
01481
01482
01483
01484 #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \
01485 { ASM_OUTPUT_ALIGN (FILE, 2); (*targetm.asm_out.internal_label) (FILE, PREFIX, NUM); }
01486
01487
01488
01489
01490
01491
01492 #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
01493 sprintf ((LABEL), "*$%s%ld", (PREFIX), (long)(NUM))
01494
01495
01496
01497
01498 #define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \
01499 do { \
01500 FILE *_hide_asm_out_file = (MYFILE); \
01501 const unsigned char *_hide_p = (const unsigned char *) (MYSTRING); \
01502 int _hide_thissize = (MYLENGTH); \
01503 int _size_so_far = 0; \
01504 { \
01505 FILE *asm_out_file = _hide_asm_out_file; \
01506 const unsigned char *p = _hide_p; \
01507 int thissize = _hide_thissize; \
01508 int i; \
01509 fprintf (asm_out_file, "\t.ascii \""); \
01510 \
01511 for (i = 0; i < thissize; i++) \
01512 { \
01513 register int c = p[i]; \
01514 \
01515 if (_size_so_far ++ > 50 && i < thissize - 4) \
01516 _size_so_far = 0, fprintf (asm_out_file, "\"\n\t.ascii \""); \
01517 \
01518 if (c == '\"' || c == '\\') \
01519 putc ('\\', asm_out_file); \
01520 if (c >= ' ' && c < 0177) \
01521 putc (c, asm_out_file); \
01522 else \
01523 { \
01524 fprintf (asm_out_file, "\\%o", c); \
01525
01526
01527
01528
01529 \
01530 if (i < thissize - 1 && ISDIGIT (p[i + 1])) \
01531 _size_so_far = 0, fprintf (asm_out_file, "\"\n\t.ascii \""); \
01532 } \
01533 } \
01534 fprintf (asm_out_file, "\"\n"); \
01535 } \
01536 } \
01537 while (0)
01538
01539
01540
01541
01542 #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) abort ()
01543
01544
01545
01546 #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
01547 fprintf (FILE, "\t.%s $L%d\n", TARGET_ABI_WINDOWS_NT ? "long" : "gprel32", \
01548 (VALUE))
01549
01550
01551
01552
01553
01554 #define ASM_OUTPUT_ALIGN(FILE,LOG) \
01555 if ((LOG) != 0) \
01556 fprintf (FILE, "\t.align %d\n", LOG);
01557
01558
01559
01560 #define ASM_OUTPUT_SKIP(FILE,SIZE) \
01561 fprintf (FILE, "\t.space "HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE))
01562
01563
01564
01565
01566 #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
01567 ( fputs ("\t.comm ", (FILE)), \
01568 assemble_name ((FILE), (NAME)), \
01569 fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE)))
01570
01571
01572
01573
01574 #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE,ROUNDED) \
01575 ( fputs ("\t.lcomm ", (FILE)), \
01576 assemble_name ((FILE), (NAME)), \
01577 fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE)))
01578
01579
01580
01581
01582
01583
01584 #define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
01585
01586
01587
01588
01589
01590
01591
01592
01593
01594
01595
01596
01597
01598
01599
01600
01601
01602
01603
01604 #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
01605 ((CODE) == '/' || (CODE) == ',' || (CODE) == '-' || (CODE) == '~' \
01606 || (CODE) == '#' || (CODE) == '*' || (CODE) == '&' || (CODE) == '+')
01607
01608
01609
01610 #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
01611 print_operand_address((FILE), (ADDR))
01612
01613
01614 #define EXPAND_BUILTIN_VA_START(valist, nextarg) \
01615 alpha_va_start (valist, nextarg)
01616
01617
01618 #define OBJECT_FORMAT_COFF
01619 #define EXTENDED_COFF
01620
01621
01622 #define NM_FLAGS "-pg"
01623
01624
01625
01626 #define SDB_DEBUGGING_INFO 1
01627 #define DBX_DEBUGGING_INFO 1
01628 #define MIPS_DEBUGGING_INFO 1
01629
01630 #ifndef PREFERRED_DEBUGGING_TYPE
01631 #define PREFERRED_DEBUGGING_TYPE SDB_DEBUG
01632 #endif
01633
01634
01635
01636
01637
01638
01639
01640
01641
01642
01643
01644
01645
01646
01647
01648 extern long alpha_arg_offset;
01649 extern long alpha_auto_offset;
01650 #define DEBUGGER_AUTO_OFFSET(X) \
01651 ((GET_CODE (X) == PLUS ? INTVAL (XEXP (X, 1)) : 0) + alpha_auto_offset)
01652 #define DEBUGGER_ARG_OFFSET(OFFSET, X) (OFFSET + alpha_arg_offset)
01653
01654
01655 #define DBX_OUTPUT_SOURCE_LINE(STREAM, LINE, COUNTER) do { \
01656 dbxout_begin_stabn_sline (LINE); \
01657 dbxout_stab_value_internal_label ("LM", &COUNTER); \
01658 } while (0)
01659
01660
01661 extern int num_source_filenames;
01662 #define SDB_OUTPUT_SOURCE_LINE(STREAM, LINE) \
01663 fprintf (STREAM, "\t.loc\t%d %d\n", num_source_filenames, LINE)
01664
01665 #define ASM_OUTPUT_SOURCE_FILENAME(STREAM, NAME) \
01666 alpha_output_filename (STREAM, NAME)
01667
01668
01669
01670
01671 #define DBX_CONTIN_LENGTH 3000
01672
01673
01674 #define DEFAULT_GDB_EXTENSIONS 1
01675
01676
01677 #define NO_DBX_FUNCTION_END 1
01678
01679
01680
01681
01682
01683
01684 #define ASM_STABS_OP ((TARGET_GAS) ? "\t.stabs\t" : " #.stabs\t")
01685 #define ASM_STABN_OP ((TARGET_GAS) ? "\t.stabn\t" : " #.stabn\t")
01686 #define ASM_STABD_OP ((TARGET_GAS) ? "\t.stabd\t" : " #.stabd\t")
01687
01688
01689 #define SDB_ALLOW_FORWARD_REFERENCES
01690
01691
01692 #define SDB_ALLOW_UNKNOWN_REFERENCES
01693
01694 #define PUT_SDB_DEF(a) \
01695 do { \
01696 fprintf (asm_out_file, "\t%s.def\t", \
01697 (TARGET_GAS) ? "" : "#"); \
01698 ASM_OUTPUT_LABELREF (asm_out_file, a); \
01699 fputc (';', asm_out_file); \
01700 } while (0)
01701
01702 #define PUT_SDB_PLAIN_DEF(a) \
01703 do { \
01704 fprintf (asm_out_file, "\t%s.def\t.%s;", \
01705 (TARGET_GAS) ? "" : "#", (a)); \
01706 } while (0)
01707
01708 #define PUT_SDB_TYPE(a) \
01709 do { \
01710 fprintf (asm_out_file, "\t.type\t0x%x;", (a)); \
01711 } while (0)
01712
01713
01714
01715
01716
01717
01718 extern int sdb_label_count;
01719
01720 #define PUT_SDB_BLOCK_START(LINE) \
01721 do { \
01722 fprintf (asm_out_file, \
01723 "$Lb%d:\n\t%s.begin\t$Lb%d\t%d\n", \
01724 sdb_label_count, \
01725 (TARGET_GAS) ? "" : "#", \
01726 sdb_label_count, \
01727 (LINE)); \
01728 sdb_label_count++; \
01729 } while (0)
01730
01731 #define PUT_SDB_BLOCK_END(LINE) \
01732 do { \
01733 fprintf (asm_out_file, \
01734 "$Le%d:\n\t%s.bend\t$Le%d\t%d\n", \
01735 sdb_label_count, \
01736 (TARGET_GAS) ? "" : "#", \
01737 sdb_label_count, \
01738 (LINE)); \
01739 sdb_label_count++; \
01740 } while (0)
01741
01742 #define PUT_SDB_FUNCTION_START(LINE)
01743
01744 #define PUT_SDB_FUNCTION_END(LINE)
01745
01746 #define PUT_SDB_EPILOGUE_END(NAME) ((void)(NAME))
01747
01748
01749
01750
01751
01752
01753
01754 #define CODE_MASK 0x8F300
01755 #define MIPS_IS_STAB(sym) (((sym)->index & 0xFFF00) == CODE_MASK)
01756 #define MIPS_MARK_STAB(code) ((code)+CODE_MASK)
01757 #define MIPS_UNMARK_STAB(code) ((code)-CODE_MASK)
01758
01759
01760
01761 #define SHASH_SIZE 511
01762 #define THASH_SIZE 55
01763
01764
01765
01766 #define ALIGN_SYMTABLE_OFFSET(OFFSET) (((OFFSET) + 7) & ~7)
01767
01768
01769 #define NO_IMPLICIT_EXTERN_C