190075Sobrien/* Definitions of target machine GNU compiler. IA-64 version. 2169689Skan Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 3169689Skan Free Software Foundation, Inc. 490075Sobrien Contributed by Steve Ellcey <sje@cup.hp.com> and 590075Sobrien Reva Cuthbertson <reva@cup.hp.com> 690075Sobrien 7132718SkanThis file is part of GCC. 890075Sobrien 9132718SkanGCC is free software; you can redistribute it and/or modify 1090075Sobrienit under the terms of the GNU General Public License as published by 1190075Sobrienthe Free Software Foundation; either version 2, or (at your option) 1290075Sobrienany later version. 1390075Sobrien 14132718SkanGCC is distributed in the hope that it will be useful, 1590075Sobrienbut WITHOUT ANY WARRANTY; without even the implied warranty of 1690075SobrienMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1790075SobrienGNU General Public License for more details. 1890075Sobrien 1990075SobrienYou should have received a copy of the GNU General Public License 20132718Skanalong with GCC; see the file COPYING. If not, write to 21169689Skanthe Free Software Foundation, 51 Franklin Street, Fifth Floor, 22169689SkanBoston, MA 02110-1301, USA. */ 2390075Sobrien 2490075Sobrien/* This macro is a C statement to print on `stderr' a string describing the 2590075Sobrien particular machine description choice. */ 2690075Sobrien 2790075Sobrien#define TARGET_VERSION fprintf (stderr, " (IA-64) HP-UX"); 2890075Sobrien 29132718Skan/* Enable HPUX ABI quirks. */ 30132718Skan#undef TARGET_HPUX 31132718Skan#define TARGET_HPUX 1 32132718Skan 33169689Skan#undef WCHAR_TYPE 34169689Skan#define WCHAR_TYPE "unsigned int" 35169689Skan 36169689Skan#undef WCHAR_TYPE_SIZE 37169689Skan#define WCHAR_TYPE_SIZE 32 38169689Skan 39117395Skan/* Target OS builtins. */ 40117395Skan#define TARGET_OS_CPP_BUILTINS() \ 41117395Skando { \ 42117395Skan builtin_assert("system=hpux"); \ 43117395Skan builtin_assert("system=posix"); \ 44117395Skan builtin_assert("system=unix"); \ 45117395Skan builtin_define_std("hpux"); \ 46117395Skan builtin_define_std("unix"); \ 47117395Skan builtin_define("__IA64__"); \ 48117395Skan builtin_define("_LONGLONG"); \ 49132718Skan builtin_define("_INCLUDE_LONGLONG"); \ 50117395Skan builtin_define("_UINT128_T"); \ 51132718Skan if (c_dialect_cxx () || !flag_iso) \ 52117395Skan { \ 53117395Skan builtin_define("_HPUX_SOURCE"); \ 54117395Skan builtin_define("__STDC_EXT__"); \ 55132718Skan builtin_define("__STDCPP__"); \ 56169689Skan builtin_define("_INCLUDE__STDC_A1_SOURCE"); \ 57117395Skan } \ 58132718Skan if (TARGET_ILP32) \ 59132718Skan builtin_define("_ILP32"); \ 60117395Skan} while (0) 6190075Sobrien 62122180Skan#undef CPP_SPEC 63122180Skan#define CPP_SPEC \ 64122180Skan "%{mt|pthread:-D_REENTRANT -D_THREAD_SAFE -D_POSIX_C_SOURCE=199506L}" 65122180Skan/* aCC defines also -DRWSTD_MULTI_THREAD, -DRW_MULTI_THREAD. These 66122180Skan affect only aCC's C++ library (Rogue Wave-derived) which we do not 67122180Skan use, and they violate the user's name space. */ 68122180Skan 6996263Sobrien#undef ASM_EXTRA_SPEC 7096263Sobrien#define ASM_EXTRA_SPEC "%{milp32:-milp32} %{mlp64:-mlp64}" 7190075Sobrien 7290075Sobrien#undef ENDFILE_SPEC 7390075Sobrien 7490075Sobrien#undef STARTFILE_SPEC 75169689Skan#define STARTFILE_SPEC "%{!shared:%{static:crt0%O%s} \ 76169689Skan %{mlp64:/usr/lib/hpux64/unix98%O%s} \ 77169689Skan %{!mlp64:/usr/lib/hpux32/unix98%O%s}}" 7890075Sobrien 7990075Sobrien#undef LINK_SPEC 80117395Skan#define LINK_SPEC \ 81169689Skan "-z +Accept TypeMismatch \ 82117395Skan %{shared:-b} \ 83117395Skan %{!shared: \ 84117395Skan -u main \ 85117395Skan %{static:-noshared}}" 8690075Sobrien 8790075Sobrien#undef LIB_SPEC 88117395Skan#define LIB_SPEC \ 89117395Skan "%{!shared: \ 90122180Skan %{mt|pthread:-lpthread} \ 91117395Skan %{p:%{!mlp64:-L/usr/lib/hpux32/libp} \ 92117395Skan %{mlp64:-L/usr/lib/hpux64/libp} -lprof} \ 93117395Skan %{pg:%{!mlp64:-L/usr/lib/hpux32/libp} \ 94117395Skan %{mlp64:-L/usr/lib/hpux64/libp} -lgprof} \ 95117395Skan %{!symbolic:-lc}}" 9690075Sobrien 97132718Skan#define MULTILIB_DEFAULTS { "milp32" } 98132718Skan 9990075Sobrien/* A C expression whose value is zero if pointers that need to be extended 10090075Sobrien from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and 10190075Sobrien greater then zero if they are zero-extended and less then zero if the 10290075Sobrien ptr_extend instruction should be used. */ 10390075Sobrien 10490075Sobrien#define POINTERS_EXTEND_UNSIGNED -1 10590075Sobrien 10690075Sobrien#define JMP_BUF_SIZE (8 * 76) 10790075Sobrien 10890075Sobrien#undef TARGET_DEFAULT 109169689Skan#define TARGET_DEFAULT \ 110169689Skan (MASK_DWARF2_ASM | MASK_BIG_ENDIAN | MASK_ILP32) 11190075Sobrien 112169689Skan/* ??? Might not be needed anymore. */ 113169689Skan#define MEMBER_TYPE_FORCES_BLK(FIELD, MODE) ((MODE) == TFmode) 11490075Sobrien 115117395Skan/* ASM_OUTPUT_EXTERNAL_LIBCALL defaults to just a globalize_label call, 116117395Skan but that doesn't put out the @function type information which causes 117117395Skan shared library problems. */ 11890075Sobrien 119117395Skan#undef ASM_OUTPUT_EXTERNAL_LIBCALL 120117395Skan#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \ 121117395Skando { \ 122117395Skan (*targetm.asm_out.globalize_label) (FILE, XSTR (FUN, 0)); \ 123117395Skan ASM_OUTPUT_TYPE_DIRECTIVE (FILE, XSTR (FUN, 0), "function"); \ 124117395Skan} while (0) 12590075Sobrien 12690075Sobrien#undef FUNCTION_ARG_PADDING 12790075Sobrien#define FUNCTION_ARG_PADDING(MODE, TYPE) \ 12890075Sobrien ia64_hpux_function_arg_padding ((MODE), (TYPE)) 12990075Sobrien 13090075Sobrien#undef PAD_VARARGS_DOWN 13190075Sobrien#define PAD_VARARGS_DOWN (!AGGREGATE_TYPE_P (type)) 132117395Skan 133132718Skan#define REGISTER_TARGET_PRAGMAS() \ 134132718Skan c_register_pragma (0, "builtin", ia64_hpux_handle_builtin_pragma) 135117395Skan 136117395Skan/* Tell ia64.c that we are using the HP linker and we should delay output of 137117395Skan function extern declarations so that we don't output them for functions 138117395Skan which are never used (and may not be defined). */ 139117395Skan 140117395Skan#undef TARGET_HPUX_LD 141117395Skan#define TARGET_HPUX_LD 1 142117395Skan 143122180Skan/* The HPUX dynamic linker objects to weak symbols with no 144122180Skan definitions, so do not use them in gthr-posix.h. */ 145122180Skan#define GTHREAD_USE_WEAK 0 146122180Skan 147117395Skan#undef CTORS_SECTION_ASM_OP 148117395Skan#define CTORS_SECTION_ASM_OP "\t.section\t.init_array,\t\"aw\",\"init_array\"" 149117395Skan 150117395Skan#undef DTORS_SECTION_ASM_OP 151117395Skan#define DTORS_SECTION_ASM_OP "\t.section\t.fini_array,\t\"aw\",\"fini_array\"" 152117395Skan 153122180Skan/* The init_array/fini_array technique does not permit the use of 154122180Skan initialization priorities. */ 155122180Skan#define SUPPORTS_INIT_PRIORITY 0 156122180Skan 157117395Skan#undef READONLY_DATA_SECTION_ASM_OP 158117395Skan#define READONLY_DATA_SECTION_ASM_OP "\t.section\t.rodata,\t\"a\",\t\"progbits\"" 159117395Skan 160117395Skan#undef DATA_SECTION_ASM_OP 161117395Skan#define DATA_SECTION_ASM_OP "\t.section\t.data,\t\"aw\",\t\"progbits\"" 162117395Skan 163117395Skan#undef SDATA_SECTION_ASM_OP 164117395Skan#define SDATA_SECTION_ASM_OP "\t.section\t.sdata,\t\"asw\",\t\"progbits\"" 165117395Skan 166117395Skan#undef BSS_SECTION_ASM_OP 167117395Skan#define BSS_SECTION_ASM_OP "\t.section\t.bss,\t\"aw\",\t\"nobits\"" 168117395Skan 169117395Skan#undef SBSS_SECTION_ASM_OP 170117395Skan#define SBSS_SECTION_ASM_OP "\t.section\t.sbss,\t\"asw\",\t\"nobits\"" 171117395Skan 172117395Skan#undef TEXT_SECTION_ASM_OP 173117395Skan#define TEXT_SECTION_ASM_OP "\t.section\t.text,\t\"ax\",\t\"progbits\"" 174117395Skan 175117395Skan/* It is illegal to have relocations in shared segments on HPUX. 176117395Skan Pretend flag_pic is always set. */ 177169689Skan#undef TARGET_ASM_RELOC_RW_MASK 178169689Skan#define TARGET_ASM_RELOC_RW_MASK ia64_hpux_reloc_rw_mask 179132718Skan 180132718Skan/* ia64 HPUX has the float and long double forms of math functions. */ 181132718Skan#undef TARGET_C99_FUNCTIONS 182132718Skan#define TARGET_C99_FUNCTIONS 1 183132718Skan 184169689Skan#undef TARGET_INIT_LIBFUNCS 185132718Skan#define TARGET_INIT_LIBFUNCS ia64_hpux_init_libfuncs 186132718Skan 187132718Skan#define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) ((MODE) == TFmode) 188169689Skan 189169689Skan/* Put all *xf routines in libgcc, regardless of long double size. */ 190169689Skan#undef LIBGCC2_HAS_XF_MODE 191169689Skan#define LIBGCC2_HAS_XF_MODE 1 192169689Skan#define XF_SIZE 64 193169689Skan 194169689Skan/* Put all *tf routines in libgcc, regardless of long double size. */ 195169689Skan#undef LIBGCC2_HAS_TF_MODE 196169689Skan#define LIBGCC2_HAS_TF_MODE 1 197169689Skan#define TF_SIZE 113 198169689Skan 199169689Skan/* HP-UX headers are C++-compatible. */ 200169689Skan#define NO_IMPLICIT_EXTERN_C 201169689Skan 202169689Skan/* HP-UX uses PROFILE_HOOK instead of FUNCTION_PROFILER but we need a 203169689Skan FUNCTION_PROFILER defined because its use is not ifdefed. When using 204169689Skan PROFILE_HOOK, the profile call comes after the prologue. */ 205169689Skan 206169689Skan#undef FUNCTION_PROFILER 207169689Skan#define FUNCTION_PROFILER(FILE, LABELNO) do { } while (0) 208169689Skan 209169689Skan#undef PROFILE_HOOK 210169689Skan#define PROFILE_HOOK(LABEL) ia64_profile_hook (LABEL) 211169689Skan 212169689Skan#undef PROFILE_BEFORE_PROLOGUE 213169689Skan 214169689Skan#undef NO_PROFILE_COUNTERS 215169689Skan#define NO_PROFILE_COUNTERS 0 216169689Skan 217169689Skan#undef HANDLE_PRAGMA_PACK_PUSH_POP 218169689Skan#define HANDLE_PRAGMA_PACK_PUSH_POP 219