| 1 | 
         709 | 
         jeremybenn | 
         /* Definitions of target machine GNU compiler. IA64-VMS version.
  | 
      
      
         | 2 | 
          | 
          | 
            Copyright (C) 2003-2011 Free Software Foundation, Inc.
  | 
      
      
         | 3 | 
          | 
          | 
            Contributed by Douglas B Rupp (rupp@gnat.com).
  | 
      
      
         | 4 | 
          | 
          | 
          
  | 
      
      
         | 5 | 
          | 
          | 
         This file is part of GCC.
  | 
      
      
         | 6 | 
          | 
          | 
          
  | 
      
      
         | 7 | 
          | 
          | 
         GCC is free software; you can redistribute it and/or modify
  | 
      
      
         | 8 | 
          | 
          | 
         it under the terms of the GNU General Public License as published by
  | 
      
      
         | 9 | 
          | 
          | 
         the Free Software Foundation; either version 3, or (at your option)
  | 
      
      
         | 10 | 
          | 
          | 
         any later version.
  | 
      
      
         | 11 | 
          | 
          | 
          
  | 
      
      
         | 12 | 
          | 
          | 
         GCC is distributed in the hope that it will be useful,
  | 
      
      
         | 13 | 
          | 
          | 
         but WITHOUT ANY WARRANTY; without even the implied warranty of
  | 
      
      
         | 14 | 
          | 
          | 
         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  | 
      
      
         | 15 | 
          | 
          | 
         GNU General Public License for more details.
  | 
      
      
         | 16 | 
          | 
          | 
          
  | 
      
      
         | 17 | 
          | 
          | 
         You should have received a copy of the GNU General Public License
  | 
      
      
         | 18 | 
          | 
          | 
         along with GCC; see the file COPYING3.  If not see
  | 
      
      
         | 19 | 
          | 
          | 
         <http://www.gnu.org/licenses/>.  */
  | 
      
      
         | 20 | 
          | 
          | 
          
  | 
      
      
         | 21 | 
          | 
          | 
         #define OBJECT_FORMAT_ELF
  | 
      
      
         | 22 | 
          | 
          | 
          
  | 
      
      
         | 23 | 
          | 
          | 
         #define SUBTARGET_OS_CPP_BUILTINS()             \
  | 
      
      
         | 24 | 
          | 
          | 
             do {                                        \
  | 
      
      
         | 25 | 
          | 
          | 
                 builtin_define ("__IA64");              \
  | 
      
      
         | 26 | 
          | 
          | 
                 builtin_define ("__IEEE_FLOAT");        \
  | 
      
      
         | 27 | 
          | 
          | 
             } while (0)
  | 
      
      
         | 28 | 
          | 
          | 
          
  | 
      
      
         | 29 | 
          | 
          | 
         /* Need .debug_line info generated from gcc and gas.  */
  | 
      
      
         | 30 | 
          | 
          | 
         #undef TARGET_DEFAULT
  | 
      
      
         | 31 | 
          | 
          | 
         #if POINTER_SIZE == 64
  | 
      
      
         | 32 | 
          | 
          | 
         #define TARGET_DEFAULT (MASK_DWARF2_ASM | MASK_GNU_AS | MASK_MALLOC64)
  | 
      
      
         | 33 | 
          | 
          | 
         #else
  | 
      
      
         | 34 | 
          | 
          | 
         #define TARGET_DEFAULT (MASK_DWARF2_ASM | MASK_GNU_AS)
  | 
      
      
         | 35 | 
          | 
          | 
         #endif
  | 
      
      
         | 36 | 
          | 
          | 
          
  | 
      
      
         | 37 | 
          | 
          | 
         #define VMS_DEBUG_MAIN_POINTER "TRANSFER$BREAK$GO"
  | 
      
      
         | 38 | 
          | 
          | 
          
  | 
      
      
         | 39 | 
          | 
          | 
         #undef MAX_OFILE_ALIGNMENT
  | 
      
      
         | 40 | 
          | 
          | 
         #define MAX_OFILE_ALIGNMENT 524288  /* 8 x 2^16 by DEC Ada Test CD40VRA */
  | 
      
      
         | 41 | 
          | 
          | 
          
  | 
      
      
         | 42 | 
          | 
          | 
         /* Widest floating-point type efficiently supported by hardware and OS.  */
  | 
      
      
         | 43 | 
          | 
          | 
         #undef WIDEST_HARDWARE_FP_SIZE
  | 
      
      
         | 44 | 
          | 
          | 
         #define WIDEST_HARDWARE_FP_SIZE 64
  | 
      
      
         | 45 | 
          | 
          | 
          
  | 
      
      
         | 46 | 
          | 
          | 
         /* The structure return address arrives as an "argument" on VMS.  */
  | 
      
      
         | 47 | 
          | 
          | 
         #undef PCC_STATIC_STRUCT_RETURN
  | 
      
      
         | 48 | 
          | 
          | 
          
  | 
      
      
         | 49 | 
          | 
          | 
         /* Turn on VMS specific Dwarf2 features.  */
  | 
      
      
         | 50 | 
          | 
          | 
         #define VMS_DEBUGGING_INFO 1
  | 
      
      
         | 51 | 
          | 
          | 
          
  | 
      
      
         | 52 | 
          | 
          | 
         #define ASM_OUTPUT_DWARF_VMS_DELTA(FILE,SIZE,LABEL1,LABEL2) \
  | 
      
      
         | 53 | 
          | 
          | 
         do {                                          \
  | 
      
      
         | 54 | 
          | 
          | 
           fprintf (FILE, "\tdata4.ua\t@slotcount(");  \
  | 
      
      
         | 55 | 
          | 
          | 
           assemble_name (FILE, LABEL1);               \
  | 
      
      
         | 56 | 
          | 
          | 
           fprintf (FILE, "-");                        \
  | 
      
      
         | 57 | 
          | 
          | 
           assemble_name (FILE, LABEL2);               \
  | 
      
      
         | 58 | 
          | 
          | 
           fprintf (FILE, ")");                        \
  | 
      
      
         | 59 | 
          | 
          | 
         } while (0)
  | 
      
      
         | 60 | 
          | 
          | 
          
  | 
      
      
         | 61 | 
          | 
          | 
         #undef STARTFILE_SPEC
  | 
      
      
         | 62 | 
          | 
          | 
         #define STARTFILE_SPEC \
  | 
      
      
         | 63 | 
          | 
          | 
         "%{!shared:%{mvms-return-codes:vcrt0.o%s} %{!mvms-return-codes:pcrt0.o%s} \
  | 
      
      
         | 64 | 
          | 
          | 
             crtbegin.o%s} \
  | 
      
      
         | 65 | 
          | 
          | 
          %{!static:%{shared:crtinitS.o%s crtbeginS.o%s}}"
  | 
      
      
         | 66 | 
          | 
          | 
          
  | 
      
      
         | 67 | 
          | 
          | 
         #undef ENDFILE_SPEC
  | 
      
      
         | 68 | 
          | 
          | 
         #define ENDFILE_SPEC \
  | 
      
      
         | 69 | 
          | 
          | 
         "%{!shared:crtend.o%s} %{!static:%{shared:crtendS.o%s}}"
  | 
      
      
         | 70 | 
          | 
          | 
          
  | 
      
      
         | 71 | 
          | 
          | 
         #define LINK_GCC_C_SEQUENCE_SPEC "%G"
  | 
      
      
         | 72 | 
          | 
          | 
          
  | 
      
      
         | 73 | 
          | 
          | 
         #undef LINK_SPEC
  | 
      
      
         | 74 | 
          | 
          | 
         #define LINK_SPEC "%{g*} %{map} %{save-temps} %{shared} %{v}"
  | 
      
      
         | 75 | 
          | 
          | 
          
  | 
      
      
         | 76 | 
          | 
          | 
         #undef LIB_SPEC
  | 
      
      
         | 77 | 
          | 
          | 
         #define LIB_SPEC ""
  | 
      
      
         | 78 | 
          | 
          | 
          
  | 
      
      
         | 79 | 
          | 
          | 
         #undef ASM_SPEC
  | 
      
      
         | 80 | 
          | 
          | 
         #define ASM_SPEC \
  | 
      
      
         | 81 | 
          | 
          | 
         "%{mno-gnu-as:-N so -N vms_upcase -W DVLoc_off} %{mconstant-gp:-M const_gp} \
  | 
      
      
         | 82 | 
          | 
          | 
          %{mauto-pic:-M no_plabel} %{source-listing:-ahdl=%b.lis}"
  | 
      
      
         | 83 | 
          | 
          | 
          
  | 
      
      
         | 84 | 
          | 
          | 
         #undef ASM_OUTPUT_EXTERNAL_LIBCALL
  | 
      
      
         | 85 | 
          | 
          | 
         #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN)                  \
  | 
      
      
         | 86 | 
          | 
          | 
         do {                                                            \
  | 
      
      
         | 87 | 
          | 
          | 
           (*targetm.asm_out.globalize_label) (FILE, XSTR (FUN, 0));      \
  | 
      
      
         | 88 | 
          | 
          | 
           ASM_OUTPUT_TYPE_DIRECTIVE (FILE, XSTR (FUN, 0), "function");   \
  | 
      
      
         | 89 | 
          | 
          | 
         } while (0)
  | 
      
      
         | 90 | 
          | 
          | 
          
  | 
      
      
         | 91 | 
          | 
          | 
         /* Set the function to change the names of the division and modulus
  | 
      
      
         | 92 | 
          | 
          | 
            functions.   */
  | 
      
      
         | 93 | 
          | 
          | 
         #undef TARGET_INIT_LIBFUNCS
  | 
      
      
         | 94 | 
          | 
          | 
         #define TARGET_INIT_LIBFUNCS ia64_vms_init_libfuncs
  | 
      
      
         | 95 | 
          | 
          | 
          
  | 
      
      
         | 96 | 
          | 
          | 
         #define NAME__MAIN "__gccmain"
  | 
      
      
         | 97 | 
          | 
          | 
         #define SYMBOL__MAIN __gccmain
  | 
      
      
         | 98 | 
          | 
          | 
          
  | 
      
      
         | 99 | 
          | 
          | 
         #define CTOR_LIST_BEGIN asm (".global\tLIB$INITIALIZE#\n");                  \
  | 
      
      
         | 100 | 
          | 
          | 
         STATIC func_ptr __CTOR_LIST__[1]                                             \
  | 
      
      
         | 101 | 
          | 
          | 
           __attribute__ ((__unused__, section(".ctors"), aligned(sizeof(func_ptr)))) \
  | 
      
      
         | 102 | 
          | 
          | 
           = { (func_ptr) (-1) };
  | 
      
      
         | 103 | 
          | 
          | 
          
  | 
      
      
         | 104 | 
          | 
          | 
         #undef INIT_SECTION_ASM_OP
  | 
      
      
         | 105 | 
          | 
          | 
         #define INIT_SECTION_ASM_OP ".section\tLIB$INITIALIZE#,\"a\",@progbits"
  | 
      
      
         | 106 | 
          | 
          | 
          
  | 
      
      
         | 107 | 
          | 
          | 
         #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC)      \
  | 
      
      
         | 108 | 
          | 
          | 
           asm (SECTION_OP "\n\tdata4 @fptr(" #FUNC"#)\n");      \
  | 
      
      
         | 109 | 
          | 
          | 
           FORCE_CODE_SECTION_ALIGN                            \
  | 
      
      
         | 110 | 
          | 
          | 
           asm (TEXT_SECTION_ASM_OP);
  | 
      
      
         | 111 | 
          | 
          | 
          
  | 
      
      
         | 112 | 
          | 
          | 
         #undef FINI_SECTION_ASM_OP
  | 
      
      
         | 113 | 
          | 
          | 
          
  | 
      
      
         | 114 | 
          | 
          | 
         /* Maybe same as HPUX?  Needs to be checked.  */
  | 
      
      
         | 115 | 
          | 
          | 
         #define JMP_BUF_SIZE  (8 * 76)
  | 
      
      
         | 116 | 
          | 
          | 
          
  | 
      
      
         | 117 | 
          | 
          | 
         #undef SUBTARGET_OPTIMIZATION_OPTIONS
  | 
      
      
         | 118 | 
          | 
          | 
         #define SUBTARGET_OPTIMIZATION_OPTIONS                  \
  | 
      
      
         | 119 | 
          | 
          | 
           { OPT_LEVELS_ALL, OPT_fmerge_constants, NULL, 0 }
  | 
      
      
         | 120 | 
          | 
          | 
          
  | 
      
      
         | 121 | 
          | 
          | 
         /* Define this to be nonzero if static stack checking is supported.  */
  | 
      
      
         | 122 | 
          | 
          | 
         #define STACK_CHECK_STATIC_BUILTIN 1
  | 
      
      
         | 123 | 
          | 
          | 
          
  | 
      
      
         | 124 | 
          | 
          | 
         /* Minimum amount of stack required to recover from an anticipated stack
  | 
      
      
         | 125 | 
          | 
          | 
            overflow detection.  The default value conveys an estimate of the amount
  | 
      
      
         | 126 | 
          | 
          | 
            of stack required to propagate an exception.  */
  | 
      
      
         | 127 | 
          | 
          | 
         #define STACK_CHECK_PROTECT (24 * 1024)
  | 
      
      
         | 128 | 
          | 
          | 
          
  | 
      
      
         | 129 | 
          | 
          | 
         #undef ASM_OUTPUT_ALIGNED_DECL_COMMON
  | 
      
      
         | 130 | 
          | 
          | 
         #define ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN) \
  | 
      
      
         | 131 | 
          | 
          | 
           ia64_vms_output_aligned_decl_common (FILE, DECL, NAME, SIZE, ALIGN)
  | 
      
      
         | 132 | 
          | 
          | 
          
  | 
      
      
         | 133 | 
          | 
          | 
         #undef TARGET_VALID_POINTER_MODE
  | 
      
      
         | 134 | 
          | 
          | 
         #define TARGET_VALID_POINTER_MODE ia64_vms_valid_pointer_mode
  | 
      
      
         | 135 | 
          | 
          | 
          
  | 
      
      
         | 136 | 
          | 
          | 
         #undef TARGET_ASM_NAMED_SECTION
  | 
      
      
         | 137 | 
          | 
          | 
         #define TARGET_ASM_NAMED_SECTION ia64_vms_elf_asm_named_section
  | 
      
      
         | 138 | 
          | 
          | 
          
  | 
      
      
         | 139 | 
          | 
          | 
         /* Define this macro if it is advisable to hold scalars in registers
  | 
      
      
         | 140 | 
          | 
          | 
            in a wider mode than that declared by the program.  In such cases,
  | 
      
      
         | 141 | 
          | 
          | 
            the value is constrained to be within the bounds of the declared
  | 
      
      
         | 142 | 
          | 
          | 
            type, but kept valid in the wider mode.  The signedness of the
  | 
      
      
         | 143 | 
          | 
          | 
            extension may differ from that of the type.
  | 
      
      
         | 144 | 
          | 
          | 
          
  | 
      
      
         | 145 | 
          | 
          | 
            For ia64, we always store objects in a full register.  32-bit integers
  | 
      
      
         | 146 | 
          | 
          | 
            are always sign-extended, but smaller objects retain their signedness.  */
  | 
      
      
         | 147 | 
          | 
          | 
          
  | 
      
      
         | 148 | 
          | 
          | 
         #undef PROMOTE_MODE
  | 
      
      
         | 149 | 
          | 
          | 
         #define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE)                       \
  | 
      
      
         | 150 | 
          | 
          | 
           if (GET_MODE_CLASS (MODE) == MODE_INT                         \
  | 
      
      
         | 151 | 
          | 
          | 
               && GET_MODE_SIZE (MODE) < UNITS_PER_WORD)                 \
  | 
      
      
         | 152 | 
          | 
          | 
             {                                                           \
  | 
      
      
         | 153 | 
          | 
          | 
               if ((MODE) == SImode)                                     \
  | 
      
      
         | 154 | 
          | 
          | 
                 (UNSIGNEDP) = 0;                                 \
  | 
      
      
         | 155 | 
          | 
          | 
               (MODE) = DImode;                                          \
  | 
      
      
         | 156 | 
          | 
          | 
             }
  | 
      
      
         | 157 | 
          | 
          | 
          
  | 
      
      
         | 158 | 
          | 
          | 
         #undef TARGET_PROMOTE_FUNCTION_MODE
  | 
      
      
         | 159 | 
          | 
          | 
         #define TARGET_PROMOTE_FUNCTION_MODE default_promote_function_mode_always_promote
  | 
      
      
         | 160 | 
          | 
          | 
          
  | 
      
      
         | 161 | 
          | 
          | 
         /* IA64 VMS doesn't fully support COMDAT sections.  */
  | 
      
      
         | 162 | 
          | 
          | 
          
  | 
      
      
         | 163 | 
          | 
          | 
         #define SUPPORTS_ONE_ONLY 0
  |