diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 37749c7b4b9e..0c7b21548572 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2014-09-18 Joseph Myers + + * 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. + 2014-09-19 Kito Cheng * except.h: Fix header guard. diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 0b22cf6d2aca..efe74173f17f 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2014-09-18 Joseph Myers + + * c-cppbuiltin.c (c_cpp_builtins): Define __LIBGCC_*_FUNC_EXT__ + for supported floating-point modes. + 2014-09-15 Manuel López-Ibáñez * c.opt (Wpsabi): Use LangEnabledBy. diff --git a/gcc/c-family/c-cppbuiltin.c b/gcc/c-family/c-cppbuiltin.c index b4095a05f2d7..9e2040b67d54 100644 --- a/gcc/c-family/c-cppbuiltin.c +++ b/gcc/c-family/c-cppbuiltin.c @@ -956,6 +956,28 @@ c_cpp_builtins (cpp_reader *pfile) + sizeof ("__LIBGCC_HAS__MODE__")); sprintf (macro_name, "__LIBGCC_HAS_%s_MODE__", name); cpp_define (pfile, macro_name); + macro_name = (char *) alloca (strlen (name) + + sizeof ("__LIBGCC__FUNC_EXT__")); + sprintf (macro_name, "__LIBGCC_%s_FUNC_EXT__", name); + const char *suffix; + if (mode == TYPE_MODE (double_type_node)) + suffix = ""; + else if (mode == TYPE_MODE (float_type_node)) + suffix = "f"; + else if (mode == TYPE_MODE (long_double_type_node)) + suffix = "l"; + /* ??? The following assumes the built-in functions (defined + in target-specific code) match the suffixes used for + constants. Because in fact such functions are not + defined for the 'w' suffix, 'l' is used there + instead. */ + else if (mode == targetm.c.mode_for_suffix ('q')) + suffix = "q"; + else if (mode == targetm.c.mode_for_suffix ('w')) + suffix = "l"; + else + gcc_unreachable (); + builtin_define_with_value (macro_name, suffix, 0); } /* For libgcc crtstuff.c and libgcc2.c. */ diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h index a2c3773a9668..95b8f6fb966f 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 cafc98a9ad28..c1a55c1dd09e 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 b46a13ecfa54..095112822995 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 b09bfd023fe3..e341f6b02c92 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 5f1973567c3f..0e619961bc9c 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 8e2eceab9335..470fbedd6c31 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 be1e6fcff0de..79ad8c1ffa28 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 dd14b8af65f7..4cc80a9c8eab 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 bd1b582fa800..e4b12ec64e54 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 diff --git a/gcc/system.h b/gcc/system.h index 416837c8a6ff..3208a9d6f8c5 100644 --- a/gcc/system.h +++ b/gcc/system.h @@ -936,7 +936,7 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN; EXTRA_CONSTRAINT_STR EXTRA_MEMORY_CONSTRAINT \ EXTRA_ADDRESS_CONSTRAINT CONST_DOUBLE_OK_FOR_CONSTRAINT_P \ CALLER_SAVE_PROFITABLE LARGEST_EXPONENT_IS_NORMAL \ - ROUND_TOWARDS_ZERO SF_SIZE DF_SIZE XF_SIZE TF_SIZE + ROUND_TOWARDS_ZERO SF_SIZE DF_SIZE XF_SIZE TF_SIZE LIBGCC2_TF_CEXT /* Hooks that are no longer used. */ #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE \ diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index fa432395c4e9..3673651497f4 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,7 @@ +2014-09-18 Joseph Myers + + * libgcc2.c (CEXT): Define using __LIBGCC_*_FUNC_EXT__. + 2014-09-18 Joseph Myers * config/i386/sfp-machine.h (FP_TRAPPING_EXCEPTIONS): Treat clear diff --git a/libgcc/libgcc2.c b/libgcc/libgcc2.c index 2800fe949e2a..dc8a235e8b88 100644 --- a/libgcc/libgcc2.c +++ b/libgcc/libgcc2.c @@ -1865,34 +1865,29 @@ NAME (TYPE x, int m) # define MTYPE SFtype # define CTYPE SCtype # define MODE sc -# define CEXT f +# define CEXT __LIBGCC_SF_FUNC_EXT__ # define NOTRUNC __FLT_EVAL_METHOD__ == 0 #elif defined(L_muldc3) || defined(L_divdc3) # define MTYPE DFtype # define CTYPE DCtype # define MODE dc +# define CEXT __LIBGCC_DF_FUNC_EXT__ # if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 64 -# define CEXT l # define NOTRUNC 1 # else -# define CEXT # define NOTRUNC __FLT_EVAL_METHOD__ == 0 || __FLT_EVAL_METHOD__ == 1 # endif #elif defined(L_mulxc3) || defined(L_divxc3) # define MTYPE XFtype # define CTYPE XCtype # define MODE xc -# define CEXT l +# define CEXT __LIBGCC_XF_FUNC_EXT__ # define NOTRUNC 1 #elif defined(L_multc3) || defined(L_divtc3) # define MTYPE TFtype # define CTYPE TCtype # define MODE tc -# if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128 -# define CEXT l -# else -# define CEXT LIBGCC2_TF_CEXT -# endif +# define CEXT __LIBGCC_TF_FUNC_EXT__ # define NOTRUNC 1 #else # error