Always support float128 on x86.
authorJoseph Myers <joseph@codesourcery.com>
Fri, 26 Aug 2016 11:13:42 +0000 (12:13 +0100)
committerJoseph Myers <jsm28@gcc.gnu.org>
Fri, 26 Aug 2016 11:13:42 +0000 (12:13 +0100)
In <https://gcc.gnu.org/ml/gcc-bugs/2016-08/msg03233.html>, Nick
reported i386-elf and ia64-elf failing to build because of
float128_type_node being NULL, but being used by the back end for
__float128.

The global float128_type_node is only available conditionally, if
target hooks indicate TFmode is not only available as a scalar mode
and of the right format, but also supported in libgcc.  The back-end
support, however, expects the type always to be available for
__float128 even if the libgcc support is missing.

Although a target-specific node could be restored in the case where
libgcc support is missing, it seems better to address the missing
libgcc support.  Thus, this patch enables TFmode soft-fp in libgcc
globally for all x86 targets - the only special cases needed being for
targets that use soft-fp for SFmode and DFmode, one of which already
had the support for TFmode as well (so I based the i[34567]86-*-rtems*
configuration on that present for i[34567]86-*-elfiamcu).  The i386
implementation of TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P is then
removed as no longer needed.

I can provide such a patch for ia64 if useful, but am not in a
position to test it (and while I'm reasonably confident that enabling
this support would be right for ia64-elf and ia64-freebsd, I've no
real idea if enabling libgcc support for TFmode, with or without also
enabling it for XFmode, would be safe for ia64-vms).

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

gcc:
* config/i386/i386.c (ix86_libgcc_floating_mode_supported_p)
(TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P): Remove.
* config/i386/i386elf.h (IX86_MAYBE_NO_LIBGCC_TFMODE): Likewise.
* config/i386/lynx.h (IX86_MAYBE_NO_LIBGCC_TFMODE): Likewise.
* config/i386/netbsd-elf.h (IX86_MAYBE_NO_LIBGCC_TFMODE):
Likewise.
* config/i386/netbsd64.h (IX86_MAYBE_NO_LIBGCC_TFMODE): Likewise.
* config/i386/nto.h (IX86_MAYBE_NO_LIBGCC_TFMODE): Likewise.
* config/i386/openbsd.h (IX86_MAYBE_NO_LIBGCC_TFMODE): Likewise.
* config/i386/rtemself.h (IX86_NO_LIBGCC_TFMODE): Likewise.
* config/i386/vxworks.h (IX86_MAYBE_NO_LIBGCC_TFMODE): Likewise.

libgcc:
* config.host (i[34567]86-*-* | x86_64-*-*): Enable TFmode soft-fp
where not already enabled.

From-SVN: r239775

12 files changed:
gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386elf.h
gcc/config/i386/lynx.h
gcc/config/i386/netbsd-elf.h
gcc/config/i386/netbsd64.h
gcc/config/i386/nto.h
gcc/config/i386/openbsd.h
gcc/config/i386/rtemself.h
gcc/config/i386/vxworks.h
libgcc/ChangeLog
libgcc/config.host

index dc3cb732c88eb96ed65dda4e9c6430df5cafb302..e8917e35b304148c742182599aa4bf7727badf73 100644 (file)
@@ -1,3 +1,17 @@
+2016-08-26  Joseph Myers  <joseph@codesourcery.com>
+
+       * config/i386/i386.c (ix86_libgcc_floating_mode_supported_p)
+       (TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P): Remove.
+       * config/i386/i386elf.h (IX86_MAYBE_NO_LIBGCC_TFMODE): Likewise.
+       * config/i386/lynx.h (IX86_MAYBE_NO_LIBGCC_TFMODE): Likewise.
+       * config/i386/netbsd-elf.h (IX86_MAYBE_NO_LIBGCC_TFMODE):
+       Likewise.
+       * config/i386/netbsd64.h (IX86_MAYBE_NO_LIBGCC_TFMODE): Likewise.
+       * config/i386/nto.h (IX86_MAYBE_NO_LIBGCC_TFMODE): Likewise.
+       * config/i386/openbsd.h (IX86_MAYBE_NO_LIBGCC_TFMODE): Likewise.
+       * config/i386/rtemself.h (IX86_NO_LIBGCC_TFMODE): Likewise.
+       * config/i386/vxworks.h (IX86_MAYBE_NO_LIBGCC_TFMODE): Likewise.
+
 2016-08-26  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        PR target/70473
index 8c426ff5f2a045d01572ef787d6e2f78a89ed891..3b8b93d97499423ab5233399401e8ffecfab3cb1 100644 (file)
@@ -43284,31 +43284,6 @@ ix86_vector_mode_supported_p (machine_mode mode)
   return false;
 }
 
-/* Implement target hook libgcc_floating_mode_supported_p.  */
-static bool
-ix86_libgcc_floating_mode_supported_p (machine_mode mode)
-{
-  switch (mode)
-    {
-    case SFmode:
-    case DFmode:
-    case XFmode:
-      return true;
-
-    case TFmode:
-#ifdef IX86_NO_LIBGCC_TFMODE
-      return false;
-#elif defined IX86_MAYBE_NO_LIBGCC_TFMODE
-      return TARGET_LONG_DOUBLE_128;
-#else
-      return true;
-#endif
-
-    default:
-      return false;
-    }
-}
-
 /* Target hook for c_mode_for_suffix.  */
 static machine_mode
 ix86_c_mode_for_suffix (char suffix)
@@ -50568,10 +50543,6 @@ ix86_addr_space_zero_address_valid (addr_space_t as)
 #undef TARGET_VECTOR_MODE_SUPPORTED_P
 #define TARGET_VECTOR_MODE_SUPPORTED_P ix86_vector_mode_supported_p
 
-#undef TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P
-#define TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P \
-  ix86_libgcc_floating_mode_supported_p
-
 #undef TARGET_C_MODE_FOR_SUFFIX
 #define TARGET_C_MODE_FOR_SUFFIX ix86_c_mode_for_suffix
 
index e2a6a10d600c6f7a936e0fe40255625cccfc87b1..b93ef66a4e0c560b29995581fe0c329832d657e5 100644 (file)
@@ -101,5 +101,3 @@ along with GCC; see the file COPYING3.  If not see
 #undef ASM_OUTPUT_ALIGNED_BSS
 #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
   asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
-
-#define IX86_MAYBE_NO_LIBGCC_TFMODE
index 6c4fec6264e95ad7a0daf45a7ecc00faa44f0ccc..bb9e17a887a41aee44bd1ec9dcfd14beece478b4 100644 (file)
@@ -85,5 +85,3 @@ along with GCC; see the file COPYING3.  If not see
    TLS is detected by configure.  We undefine it here.  */
 
 #undef HAVE_AS_TLS
-
-#define IX86_MAYBE_NO_LIBGCC_TFMODE
index a6668200f052a18ab0a1677c60052b5f4bfcc346..fb59b3202e2ab88192409c4f0595e2a8ef6b9d35 100644 (file)
@@ -119,5 +119,3 @@ along with GCC; see the file COPYING3.  If not see
 #define DEFAULT_PCC_STRUCT_RETURN 1
 
 #define HAVE_ENABLE_EXECUTE_STACK
-
-#define IX86_MAYBE_NO_LIBGCC_TFMODE
index d1e2925ebcba432c316c300af45a95090a5a7696..315e993047d56f256f0fcef5353d6d85e75d4fc0 100644 (file)
@@ -67,5 +67,3 @@ along with GCC; see the file COPYING3.  If not see
 }
 
 #define HAVE_ENABLE_EXECUTE_STACK
-
-#define IX86_MAYBE_NO_LIBGCC_TFMODE
index 1866cf7141b0a39416c96abf84d3d9baaa7e32dd..42433e963338b6c0fc6b16d7ad88161f606d2f3a 100644 (file)
@@ -103,5 +103,3 @@ crti.o%s \
 #define TARGET_POSIX_IO
 
 #undef DBX_REGISTER_NUMBER
-
-#define IX86_MAYBE_NO_LIBGCC_TFMODE
index 325f1b93de7daff85b65f3488ad68d5b4784781e..15aee25306e26c42e94d6c0f7c84a1f195c602f0 100644 (file)
@@ -99,5 +99,3 @@ along with GCC; see the file COPYING3.  If not see
 #undef ASM_QUAD
 
 #define TARGET_HAVE_NAMED_SECTIONS false
-
-#define IX86_MAYBE_NO_LIBGCC_TFMODE
index 8b7dc5e5d17494d33dc6582295280a2f2c1a0683..21b21737b572625667a316384a2acd34206f2e5c 100644 (file)
@@ -31,5 +31,3 @@ along with GCC; see the file COPYING3.  If not see
 
 #undef LONG_DOUBLE_TYPE_SIZE
 #define LONG_DOUBLE_TYPE_SIZE (TARGET_80387 ? 80 : 64)
-
-#define IX86_NO_LIBGCC_TFMODE
index d92510e19b58ce5df8956bd98dd4e0f97c690337..b4f0d91b65eeb6926f0df58a37cce4afa1f08451 100644 (file)
@@ -87,8 +87,6 @@ along with GCC; see the file COPYING3.  If not see
    fixed gap between segments.  */
 #undef ASM_PREFERRED_EH_DATA_FORMAT
 
-#define IX86_MAYBE_NO_LIBGCC_TFMODE
-
 /* Define this to be nonzero if static stack checking is supported.  */
 #define STACK_CHECK_STATIC_BUILTIN 1
 
index 99bd2f136817ffad9b528b3c7f7ab44b6b13df06..d5ecf7776a79eee3c3bfdc6edaaafe445cf31eb4 100644 (file)
@@ -1,3 +1,8 @@
+2016-08-26  Joseph Myers  <joseph@codesourcery.com>
+
+       * config.host (i[34567]86-*-* | x86_64-*-*): Enable TFmode soft-fp
+       where not already enabled.
+
 2016-08-25  Szabolcs Nagy  <szabolcs.nagy@arm.com>
 
        * config/mips/linux-unwind.h: Use sys/syscall.h.
index 4ccf25d30affb4e0db90ce09306d4db1a32c1325..002f650be9a7cd6f69ce3d51639a735ca7eba564 100644 (file)
@@ -632,7 +632,7 @@ i[34567]86-*-nto-qnx*)
        extra_parts=crtbegin.o
        ;;
 i[34567]86-*-rtems*)
-       tmake_file="$tmake_file i386/t-crtstuff t-softfp-sfdf t-softfp"
+       tmake_file="$tmake_file i386/t-crtstuff t-softfp-sfdftf i386/32/t-softfp i386/t-softfp t-softfp"
        extra_parts="$extra_parts crti.o crtn.o"
        ;;
 i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
@@ -1330,17 +1330,10 @@ i[34567]86-*-linux* | x86_64-*-linux* | \
 esac
 
 case ${host} in
-i[34567]86-*-darwin* | x86_64-*-darwin* | \
-  i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | \
-  i[34567]86-*-linux* | x86_64-*-linux* | \
-  i[34567]86-*-msdosdjgpp* | \
-  i[34567]86-*-gnu* | \
-  i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]* | \
-  i[34567]86-*-cygwin* | x86_64-*-cygwin* | \
-  i[34567]86-*-mingw* | x86_64-*-mingw* | \
-  i[34567]86-*-dragonfly* | x86_64-*-dragonfly* | \
-  i[34567]86-*-freebsd* | x86_64-*-freebsd* | \
-  i[34567]86-*-openbsd* | x86_64-*-openbsd*)
+i[34567]86-*-elfiamcu | i[34567]86-*-rtems*)
+       # These use soft-fp for SFmode and DFmode, not just TFmode.
+       ;;
+i[34567]86-*-* | x86_64-*-*)
        tmake_file="${tmake_file} t-softfp-tf"
        if test "${host_address}" = 32; then
                tmake_file="${tmake_file} i386/${host_address}/t-softfp"