diff options
author | Joseph Myers <joseph@codesourcery.com> | 2014-09-19 00:27:26 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2014-09-19 00:27:26 +0100 |
commit | dd69f0471de39b76e83c00fa4909d090ab8bf618 (patch) | |
tree | e1e000c788f9ea68c8ba46ee3d61a85c1bd7f81b /gcc/config | |
parent | f1717f8df9419f72f384448de851f0cd8a64c46e (diff) | |
download | gcc-dd69f0471de39b76e83c00fa4909d090ab8bf618.zip gcc-dd69f0471de39b76e83c00fa4909d090ab8bf618.tar.gz gcc-dd69f0471de39b76e83c00fa4909d090ab8bf618.tar.bz2 |
Remove LIBGCC2_TF_CEXT target macro.
This patch removes the (undocumented) LIBGCC2_TF_CEXT target macro,
replacing it by -fbuilding-libgcc predefines (and thereby gets rid of
another LIBGCC2_LONG_DOUBLE_TYPE_SIZE conditional, though some more
patches are needed before that target macro can be eliminated). This
macro indicated the suffix used on __builtin_huge_val,
__builtin_copysign, __builtin_fabs built-in function names to produce
the names for a given floating-point mode.
Predefines are added for all floating-point modes supported for
libgcc, not just TFmode. These are fully accurate for modes
corresponding to float, double and long double. For other modes, the
suffix for *constants* is determined by the targetm.c.mode_for_suffix
hook (the limit to two possible suffixes 'w' and 'q' being hardcoded
in various places). This is in fact the suffix for built-in functions
as well where such functions exist.
* For i386, the *q functions always exist (whether or not TFmode is
used for long double). The *w functions never exist (but this
doesn't matter for libgcc, since no i386 configuration treats XFmode
as a supported scalar mode if long double is TFmode; if __float80
were to be supported for 64-bit Android, properly such functions
ought to be added).
* For ia64, the *q functions exist for non-HP-UX (under HP-UX, long
double is TFmode, so they aren't needed). The *w functions never
exist. This is an issue for this libgcc code for the XFmode complex
functions in libgcc on HP-UX; as I understand it, right now those
will accidentally be using TFmode versions of those three functions,
so involving unnecessary conversions, while the sanity check on CEXT
accidentally passes because all it tests is the sizes of the types.
Because of the lack of 'w' functions, the patch uses 'l' when the
constant suffix is 'w', matching what the existing libgcc code would
do for IA64 HP-UX in that case.
Ideally there would be generic code to create such built-in functions
for all supported floating-point types. That may be something to
consider if support for TS 18661-3 (standard bindings for IEEE
754-2008, defining names such as _Float128, and function names such as
copysignf128) is added in future.
Bootstrapped with no regressions on x86_64-unknown-linux-gnu.
gcc:
* system.h (LIBGCC2_TF_CEXT): Poison.
* config/i386/cygming.h (LIBGCC2_TF_CEXT): Remove.
* config/i386/darwin.h (LIBGCC2_TF_CEXT): Likewise.
* config/i386/dragonfly.h (LIBGCC2_TF_CEXT): Likewise.
* config/i386/freebsd.h (LIBGCC2_TF_CEXT): Likewise.
* config/i386/gnu-user-common.h (LIBGCC2_TF_CEXT): Likewise.
* config/i386/openbsdelf.h (LIBGCC2_TF_CEXT): Likewise.
* config/i386/sol2.h (LIBGCC2_TF_CEXT): Likewise.
* config/ia64/ia64.h (LIBGCC2_TF_CEXT): Likewise.
* config/ia64/linux.h (LIBGCC2_TF_CEXT): Likewise.
gcc/c-family:
* c-cppbuiltin.c (c_cpp_builtins): Define __LIBGCC_*_FUNC_EXT__
for supported floating-point modes.
libgcc:
* libgcc2.c (CEXT): Define using __LIBGCC_*_FUNC_EXT__.
From-SVN: r215368
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/i386/cygming.h | 3 | ||||
-rw-r--r-- | gcc/config/i386/darwin.h | 3 | ||||
-rw-r--r-- | gcc/config/i386/dragonfly.h | 3 | ||||
-rw-r--r-- | gcc/config/i386/freebsd.h | 3 | ||||
-rw-r--r-- | gcc/config/i386/gnu-user-common.h | 3 | ||||
-rw-r--r-- | gcc/config/i386/openbsdelf.h | 3 | ||||
-rw-r--r-- | gcc/config/i386/sol2.h | 3 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.h | 3 | ||||
-rw-r--r-- | gcc/config/ia64/linux.h | 4 |
9 files changed, 0 insertions, 28 deletions
diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h index a2c3773..95b8f6f 100644 --- a/gcc/config/i386/cygming.h +++ b/gcc/config/i386/cygming.h @@ -339,9 +339,6 @@ do { \ #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN)) -/* Put all *tf routines in libgcc. */ -#define LIBGCC2_TF_CEXT q - /* Output function declarations at the end of the file. */ #undef TARGET_ASM_FILE_END #define TARGET_ASM_FILE_END i386_pe_file_end diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h index cafc98a..c1a55c1 100644 --- a/gcc/config/i386/darwin.h +++ b/gcc/config/i386/darwin.h @@ -153,9 +153,6 @@ extern int darwin_emit_branch_islands; #define SHIFT_DOUBLE_OMITS_COUNT 0 -/* Put all *tf routines in libgcc. */ -#define LIBGCC2_TF_CEXT q - #undef TARGET_ASM_FILE_END #define TARGET_ASM_FILE_END darwin_file_end diff --git a/gcc/config/i386/dragonfly.h b/gcc/config/i386/dragonfly.h index b46a13e..0951128 100644 --- a/gcc/config/i386/dragonfly.h +++ b/gcc/config/i386/dragonfly.h @@ -89,9 +89,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #undef TARGET_96_ROUND_53_LONG_DOUBLE #define TARGET_96_ROUND_53_LONG_DOUBLE (!TARGET_64BIT) -/* Put all *tf routines in libgcc. */ -#define LIBGCC2_TF_CEXT q - /* Static stack checking is supported by means of probes. */ #define STACK_CHECK_STATIC_BUILTIN 1 diff --git a/gcc/config/i386/freebsd.h b/gcc/config/i386/freebsd.h index b09bfd0..e341f6b 100644 --- a/gcc/config/i386/freebsd.h +++ b/gcc/config/i386/freebsd.h @@ -131,9 +131,6 @@ along with GCC; see the file COPYING3. If not see #undef TARGET_96_ROUND_53_LONG_DOUBLE #define TARGET_96_ROUND_53_LONG_DOUBLE (!TARGET_64BIT) -/* Put all *tf routines in libgcc. */ -#define LIBGCC2_TF_CEXT q - /* Static stack checking is supported by means of probes. */ #define STACK_CHECK_STATIC_BUILTIN 1 diff --git a/gcc/config/i386/gnu-user-common.h b/gcc/config/i386/gnu-user-common.h index 5f19735..0e61996 100644 --- a/gcc/config/i386/gnu-user-common.h +++ b/gcc/config/i386/gnu-user-common.h @@ -57,9 +57,6 @@ along with GCC; see the file COPYING3. If not see GNU_USER_TARGET_MATHFILE_SPEC " " \ GNU_USER_TARGET_ENDFILE_SPEC -/* Put all *tf routines in libgcc. */ -#define LIBGCC2_TF_CEXT q - #define TARGET_ASM_FILE_END file_end_indicate_exec_stack /* The stack pointer needs to be moved while checking the stack. */ diff --git a/gcc/config/i386/openbsdelf.h b/gcc/config/i386/openbsdelf.h index 8e2ecea..470fbed 100644 --- a/gcc/config/i386/openbsdelf.h +++ b/gcc/config/i386/openbsdelf.h @@ -111,6 +111,3 @@ along with GCC; see the file COPYING3. If not see #define OBSD_HAS_CORRECT_SPECS #define HAVE_ENABLE_EXECUTE_STACK - -/* Put all *tf routines in libgcc. */ -#define LIBGCC2_TF_CEXT q diff --git a/gcc/config/i386/sol2.h b/gcc/config/i386/sol2.h index be1e6fc..79ad8c1 100644 --- a/gcc/config/i386/sol2.h +++ b/gcc/config/i386/sol2.h @@ -236,6 +236,3 @@ along with GCC; see the file COPYING3. If not see #ifndef USE_GLD #define USE_HIDDEN_LINKONCE 0 #endif - -/* Put all *tf routines in libgcc. */ -#define LIBGCC2_TF_CEXT q diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h index dd14b8a..4cc80a9 100644 --- a/gcc/config/ia64/ia64.h +++ b/gcc/config/ia64/ia64.h @@ -258,9 +258,6 @@ while (0) #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE (TARGET_ABI_OPEN_VMS ? 64 : 80) -/* On HP-UX, we use the l suffix for TFmode in libgcc2.c. */ -#define LIBGCC2_TF_CEXT l - #define DEFAULT_SIGNED_CHAR 1 /* A C expression for a string describing the name of the data type to use for diff --git a/gcc/config/ia64/linux.h b/gcc/config/ia64/linux.h index bd1b582..e4b12ec 100644 --- a/gcc/config/ia64/linux.h +++ b/gcc/config/ia64/linux.h @@ -76,10 +76,6 @@ do { \ #undef LINK_EH_SPEC #define LINK_EH_SPEC "" -/* Put all *tf routines in libgcc. */ -#undef LIBGCC2_TF_CEXT -#define LIBGCC2_TF_CEXT q - #undef TARGET_INIT_LIBFUNCS #define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs |