diff options
Diffstat (limited to 'contrib/gcc/config/rs6000/sysv4.h')
-rw-r--r-- | contrib/gcc/config/rs6000/sysv4.h | 656 |
1 files changed, 262 insertions, 394 deletions
diff --git a/contrib/gcc/config/rs6000/sysv4.h b/contrib/gcc/config/rs6000/sysv4.h index 26450e7..ea149f0 100644 --- a/contrib/gcc/config/rs6000/sysv4.h +++ b/contrib/gcc/config/rs6000/sysv4.h @@ -1,25 +1,24 @@ /* Target definitions for GNU compiler for PowerPC running System V.4 - Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 - Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, + 2004 Free Software Foundation, Inc. Contributed by Cygnus Support. -This file is part of GNU CC. + This file is part of GCC. -GNU CC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 2, or (at your + option) any later version. -GNU CC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + GCC is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. */ /* Header files should be C++ aware in general. */ #define NO_IMPLICIT_EXTERN_C @@ -80,17 +79,15 @@ extern enum rs6000_sdata_type rs6000_sdata; /* Strings provided by SUBTARGET_OPTIONS */ extern const char *rs6000_abi_name; extern const char *rs6000_sdata_name; +extern const char *rs6000_tls_size_string; /* For -mtls-size= */ /* Override rs6000.h definition. */ #undef SUBTARGET_OPTIONS -#define SUBTARGET_OPTIONS \ - { "call-", &rs6000_abi_name, N_("Select ABI calling convention") }, \ - { "sdata=", &rs6000_sdata_name, N_("Select method for sdata handling") } - -/* Max # of bytes for variables to automatically be put into the .sdata - or .sdata2 sections. */ -extern int g_switch_value; /* Value of the -G xx switch. */ -extern int g_switch_set; /* Whether -G xx was passed. */ +#define SUBTARGET_OPTIONS \ + { "call-", &rs6000_abi_name, N_("Select ABI calling convention"), 0}, \ + { "sdata=", &rs6000_sdata_name, N_("Select method for sdata handling"), 0}, \ + { "tls-size=", &rs6000_tls_size_string, \ + N_("Specify bit size of immediate TLS offsets"), 0 } #define SDATA_DEFAULT_SIZE 8 @@ -150,9 +147,12 @@ extern int g_switch_set; /* Whether -G xx was passed. */ N_("Link with libmvme.a, libc.a and crt0.o") }, \ { "emb", 0, \ N_("Set the PPC_EMB bit in the ELF flags header") }, \ - { "vxworks", 0, N_("no description yet") }, \ { "windiss", 0, N_("Use the WindISS simulator") }, \ { "shlib", 0, N_("no description yet") }, \ + { "64", MASK_64BIT | MASK_POWERPC64 | MASK_POWERPC, \ + N_("Generate 64-bit code") }, \ + { "32", - (MASK_64BIT | MASK_POWERPC64), \ + N_("Generate 32-bit code") }, \ EXTRA_SUBTARGET_SWITCHES \ { "newlib", 0, N_("no description yet") }, @@ -173,6 +173,9 @@ do { \ if (!g_switch_set) \ g_switch_value = SDATA_DEFAULT_SIZE; \ \ + if (rs6000_abi_name == NULL) \ + rs6000_abi_name = RS6000_ABI_NAME; \ + \ if (!strcmp (rs6000_abi_name, "sysv")) \ rs6000_current_abi = ABI_V4; \ else if (!strcmp (rs6000_abi_name, "sysv-noeabi")) \ @@ -186,11 +189,6 @@ do { \ rs6000_current_abi = ABI_V4; \ target_flags |= MASK_EABI; \ } \ - else if (!strcmp (rs6000_abi_name, "aix")) \ - { \ - rs6000_current_abi = ABI_AIX_NODESC; \ - target_flags |= MASK_EABI; \ - } \ else if (!strcmp (rs6000_abi_name, "aixdesc")) \ rs6000_current_abi = ABI_AIX; \ else if (!strcmp (rs6000_abi_name, "freebsd")) \ @@ -201,6 +199,8 @@ do { \ rs6000_current_abi = ABI_V4; \ else if (!strcmp (rs6000_abi_name, "netbsd")) \ rs6000_current_abi = ABI_V4; \ + else if (!strcmp (rs6000_abi_name, "openbsd")) \ + rs6000_current_abi = ABI_V4; \ else if (!strcmp (rs6000_abi_name, "i960-old")) \ { \ rs6000_current_abi = ABI_V4; \ @@ -248,8 +248,9 @@ do { \ rs6000_sdata_name); \ } \ \ - else if (flag_pic && \ - (rs6000_sdata == SDATA_EABI || rs6000_sdata == SDATA_SYSV)) \ + else if (flag_pic && DEFAULT_ABI != ABI_AIX \ + && (rs6000_sdata == SDATA_EABI \ + || rs6000_sdata == SDATA_SYSV)) \ { \ rs6000_sdata = SDATA_DATA; \ error ("-f%s and -msdata=%s are incompatible", \ @@ -280,7 +281,7 @@ do { \ rs6000_abi_name); \ } \ \ - if (flag_pic > 1 && rs6000_current_abi == ABI_AIX) \ + if (!TARGET_64BIT && flag_pic > 1 && rs6000_current_abi == ABI_AIX) \ { \ flag_pic = 0; \ error ("-fPIC and -mcall-%s are incompatible", \ @@ -294,14 +295,21 @@ do { \ } \ \ /* Treat -fPIC the same as -mrelocatable. */ \ - if (flag_pic > 1) \ + if (flag_pic > 1 && DEFAULT_ABI != ABI_AIX) \ target_flags |= MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC; \ \ else if (TARGET_RELOCATABLE) \ flag_pic = 2; \ - \ } while (0) +#ifndef RS6000_BI_ARCH +# define SUBSUBTARGET_OVERRIDE_OPTIONS \ +do { \ + if ((TARGET_DEFAULT ^ target_flags) & MASK_64BIT) \ + error ("-m%s not supported in this configuration", \ + (target_flags & MASK_64BIT) ? "64" : "32"); \ +} while (0) +#endif /* Override rs6000.h definition. */ #undef TARGET_DEFAULT @@ -377,12 +385,6 @@ do { \ #undef STRICT_ALIGNMENT #define STRICT_ALIGNMENT (TARGET_STRICT_ALIGN) -/* Alignment in bits of the stack boundary. Note, in order to allow building - one set of libraries with -mno-eabi instead of eabi libraries and non-eabi - versions, just use 64 as the stack boundary. */ -#undef STACK_BOUNDARY -#define STACK_BOUNDARY (TARGET_ALTIVEC_ABI ? 128 : 64) - /* Define this macro if you wish to preserve a certain alignment for the stack pointer, greater than what the hardware enforces. The definition is a C expression for the desired alignment (measured @@ -399,7 +401,8 @@ do { \ #define PREFERRED_STACK_BOUNDARY 128 /* Real stack boundary as mandated by the appropriate ABI. */ -#define ABI_STACK_BOUNDARY ((TARGET_EABI && !TARGET_ALTIVEC_ABI) ? 64 : 128) +#define ABI_STACK_BOUNDARY \ + ((TARGET_EABI && !TARGET_ALTIVEC && !TARGET_ALTIVEC_ABI) ? 64 : 128) /* An expression for the alignment of a structure field FIELD if the alignment computed in the usual way is COMPUTED. */ @@ -438,7 +441,8 @@ do { \ /* Put PC relative got entries in .got2. */ #define MINIMAL_TOC_SECTION_ASM_OP \ - ((TARGET_RELOCATABLE || flag_pic) ? "\t.section\t\".got2\",\"aw\"" : "\t.section\t\".got1\",\"aw\"") + (TARGET_RELOCATABLE || (flag_pic && DEFAULT_ABI != ABI_AIX) \ + ? "\t.section\t\".got2\",\"aw\"" : "\t.section\t\".got1\",\"aw\"") #define SDATA_SECTION_ASM_OP "\t.section\t\".sdata\",\"aw\"" #define SDATA2_SECTION_ASM_OP "\t.section\t\".sdata2\",\"a\"" @@ -461,7 +465,7 @@ do { \ #define TOC_SECTION_FUNCTION \ void \ -toc_section () \ +toc_section (void) \ { \ if (in_section != in_toc) \ { \ @@ -474,7 +478,7 @@ toc_section () \ { \ toc_initialized = 1; \ fprintf (asm_out_file, "%s\n", TOC_SECTION_ASM_OP); \ - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LCTOC", 0); \ + (*targetm.asm_out.internal_label) (asm_out_file, "LCTOC", 0); \ fprintf (asm_out_file, "\t.tc "); \ ASM_OUTPUT_INTERNAL_LABEL_PREFIX (asm_out_file, "LCTOC1[TC],"); \ ASM_OUTPUT_INTERNAL_LABEL_PREFIX (asm_out_file, "LCTOC1"); \ @@ -502,15 +506,15 @@ toc_section () \ } \ } \ \ -extern int in_toc_section PARAMS ((void)); \ -int in_toc_section () \ +extern int in_toc_section (void); \ +int in_toc_section (void) \ { \ return in_section == in_toc; \ } #define SDATA_SECTION_FUNCTION \ void \ -sdata_section () \ +sdata_section (void) \ { \ if (in_section != in_sdata) \ { \ @@ -521,7 +525,7 @@ sdata_section () \ #define SDATA2_SECTION_FUNCTION \ void \ -sdata2_section () \ +sdata2_section (void) \ { \ if (in_section != in_sdata2) \ { \ @@ -532,7 +536,7 @@ sdata2_section () \ #define SBSS_SECTION_FUNCTION \ void \ -sbss_section () \ +sbss_section (void) \ { \ if (in_section != in_sbss) \ { \ @@ -543,7 +547,7 @@ sbss_section () \ #define INIT_SECTION_FUNCTION \ void \ -init_section () \ +init_section (void) \ { \ if (in_section != in_init) \ { \ @@ -554,7 +558,7 @@ init_section () \ #define FINI_SECTION_FUNCTION \ void \ -fini_section () \ +fini_section (void) \ { \ if (in_section != in_fini) \ { \ @@ -610,51 +614,7 @@ extern int rs6000_pic_labelno; /* Override elfos.h definition. */ #undef ASM_DECLARE_FUNCTION_NAME #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ - do { \ - const char *const init_ptr = (TARGET_64BIT) ? ".quad" : ".long"; \ - \ - if (TARGET_RELOCATABLE \ - && (get_pool_size () != 0 || current_function_profile) \ - && uses_TOC()) \ - { \ - char buf[256]; \ - \ - ASM_OUTPUT_INTERNAL_LABEL (FILE, "LCL", rs6000_pic_labelno); \ - \ - ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 1); \ - fprintf (FILE, "\t%s ", init_ptr); \ - assemble_name (FILE, buf); \ - putc ('-', FILE); \ - ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno); \ - assemble_name (FILE, buf); \ - putc ('\n', FILE); \ - } \ - \ - ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function"); \ - ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \ - \ - if (DEFAULT_ABI == ABI_AIX) \ - { \ - const char *desc_name, *orig_name; \ - \ - orig_name = (*targetm.strip_name_encoding) (NAME); \ - desc_name = orig_name; \ - while (*desc_name == '.') \ - desc_name++; \ - \ - if (TREE_PUBLIC (DECL)) \ - fprintf (FILE, "\t.globl %s\n", desc_name); \ - \ - fprintf (FILE, "%s\n", MINIMAL_TOC_SECTION_ASM_OP); \ - fprintf (FILE, "%s:\n", desc_name); \ - fprintf (FILE, "\t%s %s\n", init_ptr, orig_name); \ - fprintf (FILE, "\t%s _GLOBAL_OFFSET_TABLE_\n", init_ptr); \ - if (DEFAULT_ABI == ABI_AIX) \ - fprintf (FILE, "\t%s 0\n", init_ptr); \ - fprintf (FILE, "\t.previous\n"); \ - } \ - ASM_OUTPUT_LABEL (FILE, NAME); \ - } while (0) + rs6000_elf_declare_function_name ((FILE), (NAME), (DECL)) /* The USER_LABEL_PREFIX stuff is affected by the -fleading-underscore flag. The LOCAL_LABEL_PREFIX variable is used by dbxelf.h. */ @@ -662,7 +622,7 @@ extern int rs6000_pic_labelno; #define LOCAL_LABEL_PREFIX "." #define USER_LABEL_PREFIX "" -/* svr4.h overrides ASM_OUTPUT_INTERNAL_LABEL. */ +/* svr4.h overrides (*targetm.asm_out.internal_label). */ #define ASM_OUTPUT_INTERNAL_LABEL_PREFIX(FILE,PREFIX) \ asm_fprintf (FILE, "%L%s", PREFIX) @@ -697,7 +657,8 @@ do { \ { \ fprintf (FILE, "%s", LCOMM_ASM_OP); \ assemble_name ((FILE), (NAME)); \ - fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \ + fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", \ + (SIZE), (ALIGN) / BITS_PER_UNIT); \ } \ ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \ } while (0) @@ -708,6 +669,20 @@ do { \ ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN); \ } while (0) +#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN +/* To support -falign-* switches we need to use .p2align so + that alignment directives in code sections will be padded + with no-op instructions, rather than zeroes. */ +#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ + if ((LOG) != 0) \ + { \ + if ((MAX_SKIP) == 0) \ + fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ + else \ + fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ + } +#endif + /* This is how to output code to push a register on the stack. It need not be very fast code. @@ -747,16 +722,6 @@ do { \ || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \ || (CHAR) == 'B' || (CHAR) == 'b' || (CHAR) == 'G') -/* Output .file. */ -/* Override elfos.h definition. */ -#undef ASM_FILE_START -#define ASM_FILE_START(FILE) \ -do { \ - output_file_directive ((FILE), main_input_filename); \ - rs6000_file_start (FILE, TARGET_CPU_DEFAULT); \ -} while (0) - - extern int fixuplabelno; /* Handle constructors specially for -mrelocatable. */ @@ -772,8 +737,21 @@ extern int fixuplabelno; /* Historically we have also supported stabs debugging. */ #define DBX_DEBUGGING_INFO 1 +#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number (REGNO) + +/* Map register numbers held in the call frame info that gcc has + collected using DWARF_FRAME_REGNUM to those that should be output in + .debug_frame and .eh_frame. We continue to use gcc hard reg numbers + for .eh_frame, but use the numbers mandated by the various ABIs for + .debug_frame. rs6000_emit_prologue has translated any combination of + CR2, CR3, CR4 saves to a save of CR2. The actual code emitted saves + the whole of CR, so we map CR2_REGNO to the DWARF reg for CR. */ +#define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) \ + ((FOR_EH) ? (REGNO) \ + : (REGNO) == CR2_REGNO ? 64 \ + : DBX_REGISTER_NUMBER (REGNO)) + #define TARGET_ENCODE_SECTION_INFO rs6000_elf_encode_section_info -#define TARGET_STRIP_NAME_ENCODING rs6000_elf_strip_name_encoding #define TARGET_IN_SMALL_DATA_P rs6000_elf_in_small_data_p #define TARGET_SECTION_TYPE_FLAGS rs6000_elf_section_type_flags @@ -782,25 +760,8 @@ extern int fixuplabelno; #define RS6000_OUTPUT_BASENAME(FILE, NAME) \ assemble_name (FILE, NAME) -/* This is how to output a reference to a user-level label named NAME. - `assemble_name' uses this. */ - -/* Override elfos.h definition. */ -#undef ASM_OUTPUT_LABELREF -#define ASM_OUTPUT_LABELREF(FILE,NAME) \ -do { \ - const char *_name = NAME; \ - if (*_name == '@') \ - _name++; \ - \ - if (*_name == '*') \ - fprintf (FILE, "%s", _name + 1); \ - else \ - asm_fprintf (FILE, "%U%s", _name); \ -} while (0) - -/* But, to make this work, we have to output the stabs for the function - name *first*... */ +/* We have to output the stabs for the function name *first*, before + outputting its label. */ #define DBX_FUNCTION_FIRST @@ -810,6 +771,25 @@ do { \ #define TARGET_VERSION fprintf (stderr, " (PowerPC System V.4)"); #endif +#define TARGET_OS_SYSV_CPP_BUILTINS() \ + do \ + { \ + if (flag_pic == 1) \ + { \ + builtin_define ("__pic__=1"); \ + builtin_define ("__PIC__=1"); \ + } \ + else if (flag_pic == 2) \ + { \ + builtin_define ("__pic__=2"); \ + builtin_define ("__PIC__=2"); \ + } \ + if (target_flags_explicit \ + & MASK_RELOCATABLE) \ + builtin_define ("_RELOCATABLE"); \ + } \ + while (0) + #ifndef TARGET_OS_CPP_BUILTINS #define TARGET_OS_CPP_BUILTINS() \ do \ @@ -821,6 +801,7 @@ do { \ builtin_assert ("system=svr4"); \ builtin_assert ("cpu=powerpc"); \ builtin_assert ("machine=powerpc"); \ + TARGET_OS_SYSV_CPP_BUILTINS (); \ } \ while (0) #endif @@ -831,16 +812,17 @@ do { \ #define ASM_SPEC "%(asm_cpu) \ %{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \ %{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \ -%{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} \ -%{memb} %{!memb: %{msdata: -memb} %{msdata=eabi: -memb}} \ -%{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian} \ -%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ - %{mcall-freebsd: -mbig} \ - %{mcall-i960-old: -mlittle} \ - %{mcall-linux: -mbig} \ - %{mcall-gnu: -mbig} \ - %{mcall-netbsd: -mbig} \ -}}}}" +%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \ +%{memb|msdata|msdata=eabi: -memb} \ +%{mlittle|mlittle-endian:-mlittle; \ + mbig|mbig-endian :-mbig; \ + mcall-aixdesc | \ + mcall-freebsd | \ + mcall-netbsd | \ + mcall-openbsd | \ + mcall-linux | \ + mcall-gnu :-mbig; \ + mcall-i960-old :-mlittle}" #define CC1_ENDIAN_BIG_SPEC "" @@ -855,19 +837,16 @@ do { \ /* Pass -G xxx to the compiler and set correct endian mode. */ #define CC1_SPEC "%{G*} \ -%{mlittle: %(cc1_endian_little)} %{!mlittle: %{mlittle-endian: %(cc1_endian_little)}} \ -%{mbig: %(cc1_endian_big)} %{!mbig: %{mbig-endian: %(cc1_endian_big)}} \ -%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ - %{mcall-aixdesc: -mbig %(cc1_endian_big) } \ - %{mcall-freebsd: -mbig %(cc1_endian_big) } \ - %{mcall-i960-old: -mlittle %(cc1_endian_little) } \ - %{mcall-linux: -mbig %(cc1_endian_big) } \ - %{mcall-gnu: -mbig %(cc1_endian_big) } \ - %{mcall-netbsd: -mbig %(cc1_endian_big) } \ - %{!mcall-aixdesc: %{!mcall-freebsd: %{!mcall-i960-old: %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: \ - %(cc1_endian_default) \ - }}}}}} \ -}}}} \ +%{mlittle|mlittle-endian: %(cc1_endian_little); \ + mbig |mbig-endian : %(cc1_endian_big); \ + mcall-aixdesc | \ + mcall-freebsd | \ + mcall-netbsd | \ + mcall-openbsd | \ + mcall-linux | \ + mcall-gnu : -mbig %(cc1_endian_big); \ + mcall-i960-old : -mlittle %(cc1_endian_little); \ + : %(cc1_endian_default)} \ %{mno-sdata: -msdata=none } \ %{meabi: %{!mcall-*: -mcall-sysv }} \ %{!meabi: %{!mno-eabi: \ @@ -876,7 +855,8 @@ do { \ %{mcall-i960-old: -meabi } \ %{mcall-linux: -mno-eabi } \ %{mcall-gnu: -mno-eabi } \ - %{mcall-netbsd: -mno-eabi }}} \ + %{mcall-netbsd: -mno-eabi } \ + %{mcall-openbsd: -mno-eabi }}} \ %{msdata: -msdata=default} \ %{mno-sdata: -msdata=none} \ %{profile: -p}" @@ -900,18 +880,17 @@ do { \ /* Default starting address if specified. */ #define LINK_START_SPEC "\ -%{mads: %(link_start_ads) } \ -%{myellowknife: %(link_start_yellowknife) } \ -%{mmvme: %(link_start_mvme) } \ -%{msim: %(link_start_sim) } \ -%{mwindiss: %(link_start_windiss) } \ -%{mcall-freebsd: %(link_start_freebsd) } \ -%{mcall-linux: %(link_start_linux) } \ -%{mcall-gnu: %(link_start_gnu) } \ -%{mcall-netbsd: %(link_start_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ - %{!mcall-linux: %{!mcall-gnu: %{!mcall-netbsd: \ - %{!mcall-freebsd: %(link_start_default) }}}}}}}}}" +%{mads : %(link_start_ads) ; \ + myellowknife : %(link_start_yellowknife) ; \ + mmvme : %(link_start_mvme) ; \ + msim : %(link_start_sim) ; \ + mwindiss : %(link_start_windiss) ; \ + mcall-freebsd: %(link_start_freebsd) ; \ + mcall-linux : %(link_start_linux) ; \ + mcall-gnu : %(link_start_gnu) ; \ + mcall-netbsd : %(link_start_netbsd) ; \ + mcall-openbsd: %(link_start_openbsd) ; \ + : %(link_start_default) }" #define LINK_START_DEFAULT_SPEC "" @@ -959,97 +938,85 @@ do { \ /* Any specific OS flags. */ #define LINK_OS_SPEC "\ -%{mads: %(link_os_ads) } \ -%{myellowknife: %(link_os_yellowknife) } \ -%{mmvme: %(link_os_mvme) } \ -%{msim: %(link_os_sim) } \ -%{mwindiss: %(link_os_windiss) } \ -%{mcall-freebsd: %(link_os_freebsd) } \ -%{mcall-linux: %(link_os_linux) } \ -%{mcall-gnu: %(link_os_gnu) } \ -%{mcall-netbsd: %(link_os_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ - %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ - %{!mcall-netbsd: %(link_os_default) }}}}}}}}}" +%{mads : %(link_os_ads) ; \ + myellowknife : %(link_os_yellowknife) ; \ + mmvme : %(link_os_mvme) ; \ + msim : %(link_os_sim) ; \ + mwindiss : %(link_os_windiss) ; \ + mcall-freebsd: %(link_os_freebsd) ; \ + mcall-linux : %(link_os_linux) ; \ + mcall-gnu : %(link_os_gnu) ; \ + mcall-netbsd : %(link_os_netbsd) ; \ + mcall-openbsd: %(link_os_openbsd) ; \ + : %(link_os_default) }" #define LINK_OS_DEFAULT_SPEC "" -#define CPP_SYSV_SPEC \ -"%{mrelocatable*: -D_RELOCATABLE} \ -%{fpic: -D__PIC__=1 -D__pic__=1} \ -%{!fpic: %{fPIC: -D__PIC__=2 -D__pic__=2}}" - /* Override rs6000.h definition. */ #undef CPP_SPEC -#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_sysv) \ -%{mads: %(cpp_os_ads) } \ -%{myellowknife: %(cpp_os_yellowknife) } \ -%{mmvme: %(cpp_os_mvme) } \ -%{msim: %(cpp_os_sim) } \ -%{mwindiss: %(cpp_os_windiss) } \ -%{mcall-freebsd: %(cpp_os_freebsd) } \ -%{mcall-linux: %(cpp_os_linux) } \ -%{mcall-gnu: %(cpp_os_gnu) } \ -%{mcall-netbsd: %(cpp_os_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ - %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ - %{!mcall-netbsd: %(cpp_os_default) }}}}}}}}}" +#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \ +%{mads : %(cpp_os_ads) ; \ + myellowknife : %(cpp_os_yellowknife) ; \ + mmvme : %(cpp_os_mvme) ; \ + msim : %(cpp_os_sim) ; \ + mwindiss : %(cpp_os_windiss) ; \ + mcall-freebsd: %(cpp_os_freebsd) ; \ + mcall-linux : %(cpp_os_linux) ; \ + mcall-gnu : %(cpp_os_gnu) ; \ + mcall-netbsd : %(cpp_os_netbsd) ; \ + mcall-openbsd: %(cpp_os_openbsd) ; \ + : %(cpp_os_default) }" #define CPP_OS_DEFAULT_SPEC "" /* Override svr4.h definition. */ #undef STARTFILE_SPEC #define STARTFILE_SPEC "\ -%{mads: %(startfile_ads) } \ -%{myellowknife: %(startfile_yellowknife) } \ -%{mmvme: %(startfile_mvme) } \ -%{msim: %(startfile_sim) } \ -%{mwindiss: %(startfile_windiss) } \ -%{mcall-freebsd: %(startfile_freebsd) } \ -%{mcall-linux: %(startfile_linux) } \ -%{mcall-gnu: %(startfile_gnu) } \ -%{mcall-netbsd: %(startfile_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ - %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ - %{!mcall-netbsd: %(startfile_default) }}}}}}}}}" +%{mads : %(startfile_ads) ; \ + myellowknife : %(startfile_yellowknife) ; \ + mmvme : %(startfile_mvme) ; \ + msim : %(startfile_sim) ; \ + mwindiss : %(startfile_windiss) ; \ + mcall-freebsd: %(startfile_freebsd) ; \ + mcall-linux : %(startfile_linux) ; \ + mcall-gnu : %(startfile_gnu) ; \ + mcall-netbsd : %(startfile_netbsd) ; \ + mcall-openbsd: %(startfile_openbsd) ; \ + : %(startfile_default) }" #define STARTFILE_DEFAULT_SPEC "" /* Override svr4.h definition. */ #undef LIB_SPEC #define LIB_SPEC "\ -%{mads: %(lib_ads) } \ -%{myellowknife: %(lib_yellowknife) } \ -%{mmvme: %(lib_mvme) } \ -%{msim: %(lib_sim) } \ -%{mwindiss: %(lib_windiss) } \ -%{mcall-freebsd: %(lib_freebsd) } \ -%{mcall-linux: %(lib_linux) } \ -%{mcall-gnu: %(lib_gnu) } \ -%{mcall-netbsd: %(lib_netbsd) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ - %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ - %{!mcall-netbsd: %(lib_default) }}}}}}}}}" +%{mads : %(lib_ads) ; \ + myellowknife : %(lib_yellowknife) ; \ + mmvme : %(lib_mvme) ; \ + msim : %(lib_sim) ; \ + mwindiss : %(lib_windiss) ; \ + mcall-freebsd: %(lib_freebsd) ; \ + mcall-linux : %(lib_linux) ; \ + mcall-gnu : %(lib_gnu) ; \ + mcall-netbsd : %(lib_netbsd) ; \ + mcall-openbsd: %(lib_openbsd) ; \ + : %(lib_default) }" #define LIB_DEFAULT_SPEC "" /* Override svr4.h definition. */ #undef ENDFILE_SPEC #define ENDFILE_SPEC "\ -%{mads: crtsavres.o%s %(endfile_ads)} \ -%{myellowknife: crtsavres.o%s %(endfile_yellowknife)} \ -%{mmvme: crtsavres.o%s %(endfile_mvme)} \ -%{msim: crtsavres.o%s %(endfile_sim)} \ -%{mwindiss: %(endfile_windiss)} \ -%{mcall-freebsd: crtsavres.o%s %(endfile_freebsd) } \ -%{mcall-linux: crtsavres.o%s %(endfile_linux) } \ -%{mcall-gnu: crtsavres.o%s %(endfile_gnu) } \ -%{mcall-netbsd: crtsavres.o%s %(endfile_netbsd) } \ -%{mvxworks: crtsavres.o%s %(endfile_vxworks) } \ -%{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \ - %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \ - %{!mcall-netbsd: %{!mvxworks: %(crtsavres_default) \ - %(endfile_default) }}}}}}}}}}" +%{mads : crtsavres.o%s %(endfile_ads) ; \ + myellowknife : crtsavres.o%s %(endfile_yellowknife) ; \ + mmvme : crtsavres.o%s %(endfile_mvme) ; \ + msim : crtsavres.o%s %(endfile_sim) ; \ + mwindiss : %(endfile_windiss) ; \ + mcall-freebsd: crtsavres.o%s %(endfile_freebsd) ; \ + mcall-linux : crtsavres.o%s %(endfile_linux) ; \ + mcall-gnu : crtsavres.o%s %(endfile_gnu) ; \ + mcall-netbsd : crtsavres.o%s %(endfile_netbsd) ; \ + mcall-openbsd: crtsavres.o%s %(endfile_openbsd) ; \ + : %(crtsavres_default) %(endfile_default) }" #define CRTSAVRES_DEFAULT_SPEC "crtsavres.o%s" @@ -1110,7 +1077,7 @@ do { \ /* FreeBSD support. */ #define CPP_OS_FREEBSD_SPEC "\ - -D__ELF__ -D__PPC__ -D__ppc__ -D__PowerPC__ -D__powerpc__ \ + -D__PPC__ -D__ppc__ -D__PowerPC__ -D__powerpc__ \ -Acpu=powerpc -Amachine=powerpc" #define STARTFILE_FREEBSD_SPEC FBSD_STARTFILE_SPEC @@ -1120,38 +1087,32 @@ do { \ #define LINK_OS_FREEBSD_SPEC "\ %{p:%e`-p' not supported; use `-pg' and gprof(1)} \ - %{Wl,*:%*} \ - %{v:-V} \ - %{assert*} %{R*} %{rpath*} %{defsym*} \ - %{shared:-Bshareable %{h*} %{soname*}} \ - %{!shared: \ - %{!static: \ - %{rdynamic: -export-dynamic} \ - %{!dynamic-linker: -dynamic-linker /usr/libexec/ld-elf.so.1}} \ - %{static:-Bstatic}} \ - %{symbolic:-Bsymbolic}" + %{Wl,*:%*} \ + %{v:-V} \ + %{assert*} %{R*} %{rpath*} %{defsym*} \ + %{shared:-Bshareable %{h*} %{soname*}} \ + %{!shared: \ + %{!static: \ + %{rdynamic: -export-dynamic} \ + %{!dynamic-linker:-dynamic-linker %(fbsd_dynamic_linker) }} \ + %{static:-Bstatic}} \ + %{symbolic:-Bsymbolic}" /* GNU/Linux support. */ -#ifdef USE_GNULIBC_1 -#define LIB_LINUX_SPEC "%{mnewlib: --start-group -llinux -lc --end-group } \ -%{!mnewlib: -lc }" -#else #define LIB_LINUX_SPEC "%{mnewlib: --start-group -llinux -lc --end-group } \ -%{!mnewlib: %{shared:-lc} %{!shared: %{pthread:-lpthread } \ -%{profile:-lc_p} %{!profile:-lc}}}" -#endif +%{!mnewlib: %{pthread:-lpthread} %{shared:-lc} \ +%{!shared: %{profile:-lc_p} %{!profile:-lc}}}" -#ifdef USE_GNULIBC_1 +#ifdef HAVE_LD_PIE #define STARTFILE_LINUX_SPEC "\ -%{!shared: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}} \ -%{mnewlib: ecrti.o%s} %{!mnewlib: crti.o%s} \ -%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" +%{!shared: %{pg|p:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \ +%{mnewlib:ecrti.o%s;:crti.o%s} \ +%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" #else #define STARTFILE_LINUX_SPEC "\ -%{!shared: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}} \ -%{mnewlib: ecrti.o%s} %{!mnewlib: crti.o%s} \ -%{static:crtbeginT.o%s} \ -%{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}" +%{!shared: %{pg|p:gcrt1.o%s;:crt1.o%s}} \ +%{mnewlib:ecrti.o%s;:crti.o%s} \ +%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" #endif #define ENDFILE_LINUX_SPEC "%{!shared:crtend.o%s} %{shared:crtendS.o%s} \ @@ -1163,25 +1124,16 @@ do { \ %{rdynamic:-export-dynamic} \ %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}" -#if !defined(USE_GNULIBC_1) && defined(HAVE_LD_EH_FRAME_HDR) +#if defined(HAVE_LD_EH_FRAME_HDR) # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " #endif -#ifdef USE_GNULIBC_1 -#define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \ -%{!undef: \ - %{!ansi: \ - %{!std=*:-Dunix -D__unix -Dlinux -D__linux} \ - %{std=gnu*:-Dunix -D__unix -Dlinux -D__linux}}} \ --Asystem=unix -Asystem=posix" -#else #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \ %{!undef: \ %{!ansi: \ %{!std=*:-Dunix -D__unix -Dlinux -D__linux} \ %{std=gnu*:-Dunix -D__unix -Dlinux -D__linux}}} \ --Asystem=unix -Asystem=posix %{pthread:-D_REENTRANT}" -#endif +-Asystem=linux -Asystem=unix -Asystem=posix %{pthread:-D_REENTRANT}" /* GNU/Hurd support. */ #define LIB_GNU_SPEC "%{mnewlib: --start-group -lgnu -lc --end-group } \ @@ -1229,64 +1181,35 @@ ncrtn.o%s" %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}}}" #define CPP_OS_NETBSD_SPEC "\ --D__powerpc__ -D__NetBSD__ -D__ELF__ -D__KPRINTF_ATTRIBUTE__" - -/* RTEMS support. */ - -#define CPP_OS_RTEMS_SPEC "\ -%{!mcpu*: %{!Dppc*: %{!Dmpc*: -Dmpc750} } }\ -%{mcpu=403: %{!Dppc*: %{!Dmpc*: -Dppc403} } } \ -%{mcpu=505: %{!Dppc*: %{!Dmpc*: -Dmpc505} } } \ -%{mcpu=601: %{!Dppc*: %{!Dmpc*: -Dppc601} } } \ -%{mcpu=602: %{!Dppc*: %{!Dmpc*: -Dppc602} } } \ -%{mcpu=603: %{!Dppc*: %{!Dmpc*: -Dppc603} } } \ -%{mcpu=603e: %{!Dppc*: %{!Dmpc*: -Dppc603e} } } \ -%{mcpu=604: %{!Dppc*: %{!Dmpc*: -Dmpc604} } } \ -%{mcpu=750: %{!Dppc*: %{!Dmpc*: -Dmpc750} } } \ -%{mcpu=821: %{!Dppc*: %{!Dmpc*: -Dmpc821} } } \ -%{mcpu=860: %{!Dppc*: %{!Dmpc*: -Dmpc860} } }" - -/* VxWorks support. */ -/* VxWorks does all the library stuff itself. */ -#define LIB_VXWORKS_SPEC "" - -/* VxWorks provides the functionality of crt0.o and friends itself. */ - -#define STARTFILE_VXWORKS_SPEC "" - -#define ENDFILE_VXWORKS_SPEC "" - -/* Because it uses ld -r, vxworks has no start/end files, nor starting - address. */ - -#define LINK_START_VXWORKS_SPEC "" - -#define LINK_OS_VXWORKS_SPEC "-r" - -#define CPP_OS_VXWORKS_SPEC "\ --DCPU_FAMILY=PPC \ -%{!mcpu*: \ - %{mpowerpc*: -DCPU=PPC603} \ - %{!mno-powerpc: -DCPU=PPC603}} \ -%{mcpu=powerpc: -DCPU=PPC603} \ -%{mcpu=401: -DCPU=PPC403} \ -%{mcpu=403: -DCPU=PPC403} \ -%{mcpu=405: -DCPU=PPC405} \ -%{mcpu=601: -DCPU=PPC601} \ -%{mcpu=602: -DCPU=PPC603} \ -%{mcpu=603: -DCPU=PPC603} \ -%{mcpu=603e: -DCPU=PPC603} \ -%{mcpu=ec603e: -DCPU=PPC603} \ -%{mcpu=604: -DCPU=PPC604} \ -%{mcpu=604e: -DCPU=PPC604} \ -%{mcpu=620: -DCPU=PPC604} \ -%{mcpu=740: -DCPU=PPC603} \ -%{mcpu=7450: -DCPU=PPC603} \ -%{mcpu=750: -DCPU=PPC603} \ -%{mcpu=801: -DCPU=PPC603} \ -%{mcpu=821: -DCPU=PPC603} \ -%{mcpu=823: -DCPU=PPC603} \ -%{mcpu=860: -DCPU=PPC603}" +-D__powerpc__ -D__NetBSD__ -D__KPRINTF_ATTRIBUTE__" + +/* OpenBSD support. */ +#ifndef LIB_OPENBSD_SPEC +#define LIB_OPENBSD_SPEC "%{!shared:%{pthread:-lpthread%{p:_p}%{!p:%{pg:_p}}}} %{!shared:-lc%{p:_p}%{!p:%{pg:_p}}}" +#endif + +#ifndef STARTFILE_OPENBSD_SPEC +#define STARTFILE_OPENBSD_SPEC "\ +%{!shared: %{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt0.o%s}}} \ +%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" +#endif + +#ifndef ENDFILE_OPENBSD_SPEC +#define ENDFILE_OPENBSD_SPEC "\ +%{!shared:crtend.o%s} %{shared:crtendS.o%s}" +#endif + +#ifndef LINK_START_OPENBSD_SPEC +#define LINK_START_OPENBSD_SPEC "-Ttext 0x400074" +#endif + +#ifndef LINK_OS_OPENBSD_SPEC +#define LINK_OS_OPENBSD_SPEC "" +#endif + +#ifndef CPP_OS_OPENBSD_SPEC +#define CPP_OS_OPENBSD_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}" +#endif /* WindISS support. */ @@ -1311,7 +1234,6 @@ ncrtn.o%s" /* Override rs6000.h definition. */ #undef SUBTARGET_EXTRA_SPECS #define SUBTARGET_EXTRA_SPECS \ - { "cpp_sysv", CPP_SYSV_SPEC }, \ { "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \ { "lib_ads", LIB_ADS_SPEC }, \ { "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \ @@ -1321,7 +1243,7 @@ ncrtn.o%s" { "lib_gnu", LIB_GNU_SPEC }, \ { "lib_linux", LIB_LINUX_SPEC }, \ { "lib_netbsd", LIB_NETBSD_SPEC }, \ - { "lib_vxworks", LIB_VXWORKS_SPEC }, \ + { "lib_openbsd", LIB_OPENBSD_SPEC }, \ { "lib_windiss", LIB_WINDISS_SPEC }, \ { "lib_default", LIB_DEFAULT_SPEC }, \ { "startfile_ads", STARTFILE_ADS_SPEC }, \ @@ -1332,7 +1254,7 @@ ncrtn.o%s" { "startfile_gnu", STARTFILE_GNU_SPEC }, \ { "startfile_linux", STARTFILE_LINUX_SPEC }, \ { "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \ - { "startfile_vxworks", STARTFILE_VXWORKS_SPEC }, \ + { "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \ { "startfile_windiss", STARTFILE_WINDISS_SPEC }, \ { "startfile_default", STARTFILE_DEFAULT_SPEC }, \ { "endfile_ads", ENDFILE_ADS_SPEC }, \ @@ -1343,7 +1265,7 @@ ncrtn.o%s" { "endfile_gnu", ENDFILE_GNU_SPEC }, \ { "endfile_linux", ENDFILE_LINUX_SPEC }, \ { "endfile_netbsd", ENDFILE_NETBSD_SPEC }, \ - { "endfile_vxworks", ENDFILE_VXWORKS_SPEC }, \ + { "endfile_openbsd", ENDFILE_OPENBSD_SPEC }, \ { "endfile_windiss", ENDFILE_WINDISS_SPEC }, \ { "endfile_default", ENDFILE_DEFAULT_SPEC }, \ { "link_path", LINK_PATH_SPEC }, \ @@ -1358,7 +1280,7 @@ ncrtn.o%s" { "link_start_gnu", LINK_START_GNU_SPEC }, \ { "link_start_linux", LINK_START_LINUX_SPEC }, \ { "link_start_netbsd", LINK_START_NETBSD_SPEC }, \ - { "link_start_vxworks", LINK_START_VXWORKS_SPEC }, \ + { "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \ { "link_start_windiss", LINK_START_WINDISS_SPEC }, \ { "link_start_default", LINK_START_DEFAULT_SPEC }, \ { "link_os", LINK_OS_SPEC }, \ @@ -1370,7 +1292,7 @@ ncrtn.o%s" { "link_os_linux", LINK_OS_LINUX_SPEC }, \ { "link_os_gnu", LINK_OS_GNU_SPEC }, \ { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \ - { "link_os_vxworks", LINK_OS_VXWORKS_SPEC }, \ + { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \ { "link_os_windiss", LINK_OS_WINDISS_SPEC }, \ { "link_os_default", LINK_OS_DEFAULT_SPEC }, \ { "cc1_endian_big", CC1_ENDIAN_BIG_SPEC }, \ @@ -1384,10 +1306,13 @@ ncrtn.o%s" { "cpp_os_gnu", CPP_OS_GNU_SPEC }, \ { "cpp_os_linux", CPP_OS_LINUX_SPEC }, \ { "cpp_os_netbsd", CPP_OS_NETBSD_SPEC }, \ - { "cpp_os_rtems", CPP_OS_RTEMS_SPEC }, \ - { "cpp_os_vxworks", CPP_OS_VXWORKS_SPEC }, \ + { "cpp_os_openbsd", CPP_OS_OPENBSD_SPEC }, \ { "cpp_os_windiss", CPP_OS_WINDISS_SPEC }, \ - { "cpp_os_default", CPP_OS_DEFAULT_SPEC }, + { "cpp_os_default", CPP_OS_DEFAULT_SPEC }, \ + { "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }, \ + SUBSUBTARGET_EXTRA_SPECS + +#define SUBSUBTARGET_EXTRA_SPECS /* Define this macro as a C expression for the initializer of an array of string to tell the driver program which options are @@ -1420,63 +1345,6 @@ ncrtn.o%s" #define HANDLE_PRAGMA_PACK_PUSH_POP 1 -/* Define library calls for quad FP operations. These are all part of the - PowerPC 32bit ABI. */ -#define ADDTF3_LIBCALL "_q_add" -#define DIVTF3_LIBCALL "_q_div" -#define EXTENDDFTF2_LIBCALL "_q_dtoq" -#define EQTF2_LIBCALL "_q_feq" -#define GETF2_LIBCALL "_q_fge" -#define GTTF2_LIBCALL "_q_fgt" -#define LETF2_LIBCALL "_q_fle" -#define LTTF2_LIBCALL "_q_flt" -#define NETF2_LIBCALL "_q_fne" -#define FLOATSITF2_LIBCALL "_q_itoq" -#define MULTF3_LIBCALL "_q_mul" -#define NEGTF2_LIBCALL "_q_neg" -#define TRUNCTFDF2_LIBCALL "_q_qtod" -#define FIX_TRUNCTFSI2_LIBCALL "_q_qtoi" -#define TRUNCTFSF2_LIBCALL "_q_qtos" -#define FIXUNS_TRUNCTFSI2_LIBCALL "_q_qtou" -#define SQRTTF_LIBCALL "_q_sqrt" -#define EXTENDSFTF2_LIBCALL "_q_stoq" -#define SUBTF3_LIBCALL "_q_sub" -#define FLOATUNSSITF2_LIBCALL "_q_utoq" - -#define INIT_TARGET_OPTABS \ - do { \ - if (TARGET_HARD_FLOAT) \ - { \ - add_optab->handlers[(int) TFmode].libfunc \ - = init_one_libfunc (ADDTF3_LIBCALL); \ - sub_optab->handlers[(int) TFmode].libfunc \ - = init_one_libfunc (SUBTF3_LIBCALL); \ - neg_optab->handlers[(int) TFmode].libfunc \ - = init_one_libfunc (NEGTF2_LIBCALL); \ - smul_optab->handlers[(int) TFmode].libfunc \ - = init_one_libfunc (MULTF3_LIBCALL); \ - sdiv_optab->handlers[(int) TFmode].libfunc \ - = init_one_libfunc (DIVTF3_LIBCALL); \ - eqtf2_libfunc = init_one_libfunc (EQTF2_LIBCALL); \ - netf2_libfunc = init_one_libfunc (NETF2_LIBCALL); \ - gttf2_libfunc = init_one_libfunc (GTTF2_LIBCALL); \ - getf2_libfunc = init_one_libfunc (GETF2_LIBCALL); \ - lttf2_libfunc = init_one_libfunc (LTTF2_LIBCALL); \ - letf2_libfunc = init_one_libfunc (LETF2_LIBCALL); \ - trunctfsf2_libfunc = init_one_libfunc (TRUNCTFSF2_LIBCALL); \ - trunctfdf2_libfunc = init_one_libfunc (TRUNCTFDF2_LIBCALL); \ - extendsftf2_libfunc = init_one_libfunc (EXTENDSFTF2_LIBCALL); \ - extenddftf2_libfunc = init_one_libfunc (EXTENDDFTF2_LIBCALL); \ - floatsitf_libfunc = init_one_libfunc (FLOATSITF2_LIBCALL); \ - fixtfsi_libfunc = init_one_libfunc (FIX_TRUNCTFSI2_LIBCALL); \ - fixunstfsi_libfunc \ - = init_one_libfunc (FIXUNS_TRUNCTFSI2_LIBCALL); \ - if (TARGET_PPC_GPOPT || TARGET_POWER2) \ - sqrt_optab->handlers[(int) TFmode].libfunc \ - = init_one_libfunc (SQRTTF_LIBCALL); \ - } \ - } while (0) - /* Select a format to encode pointers in exception handling data. CODE is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is true if the symbol may be affected by dynamic relocations. */ |