aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/c-family/ChangeLog5
-rw-r--r--gcc/c-family/c-cppbuiltin.c22
-rw-r--r--gcc/config/i386/cygming.h3
-rw-r--r--gcc/config/i386/darwin.h3
-rw-r--r--gcc/config/i386/dragonfly.h3
-rw-r--r--gcc/config/i386/freebsd.h3
-rw-r--r--gcc/config/i386/gnu-user-common.h3
-rw-r--r--gcc/config/i386/openbsdelf.h3
-rw-r--r--gcc/config/i386/sol2.h3
-rw-r--r--gcc/config/ia64/ia64.h3
-rw-r--r--gcc/config/ia64/linux.h4
-rw-r--r--gcc/system.h2
-rw-r--r--libgcc/ChangeLog4
-rw-r--r--libgcc/libgcc2.c13
15 files changed, 49 insertions, 38 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 37749c7..0c7b215 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,16 @@
+2014-09-18 Joseph Myers <joseph@codesourcery.com>
+
+ * 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 <kito@0xlab.org>
* except.h: Fix header guard.
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 0b22cf6..efe7417 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,8 @@
+2014-09-18 Joseph Myers <joseph@codesourcery.com>
+
+ * c-cppbuiltin.c (c_cpp_builtins): Define __LIBGCC_*_FUNC_EXT__
+ for supported floating-point modes.
+
2014-09-15 Manuel López-Ibáñez <manu@gcc.gnu.org>
* c.opt (Wpsabi): Use LangEnabledBy.
diff --git a/gcc/c-family/c-cppbuiltin.c b/gcc/c-family/c-cppbuiltin.c
index b4095a0..9e2040b 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 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
diff --git a/gcc/system.h b/gcc/system.h
index 416837c..3208a9d 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 fa432395..3673651 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,5 +1,9 @@
2014-09-18 Joseph Myers <joseph@codesourcery.com>
+ * libgcc2.c (CEXT): Define using __LIBGCC_*_FUNC_EXT__.
+
+2014-09-18 Joseph Myers <joseph@codesourcery.com>
+
* config/i386/sfp-machine.h (FP_TRAPPING_EXCEPTIONS): Treat clear
bits not set bits as indicating trapping exceptions.
diff --git a/libgcc/libgcc2.c b/libgcc/libgcc2.c
index 2800fe9..dc8a235 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