Always support float128 on x86.

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
This commit is contained in:
Joseph Myers 2016-08-26 12:13:42 +01:00 committed by Joseph Myers
parent 4d1d8d6af3
commit 21184026d5
12 changed files with 24 additions and 57 deletions

View 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

View 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

View 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

View 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

View 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

View 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

View file

@ -103,5 +103,3 @@ crti.o%s \
#define TARGET_POSIX_IO
#undef DBX_REGISTER_NUMBER
#define IX86_MAYBE_NO_LIBGCC_TFMODE

View 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

View 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

View 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

View 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.

View 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"