rs6000: float128 on BE and 32-bit
This fixes float128 on BE and on 32-bit. The configure tests need to use -mabi=altivec for 32-bit, since it is not the default there. That also enables the "vector" keyword, used by the tests. To do this it temporarily adds a few flags to the CFLAGS variable. It also fixes a syntax error in the libgcc_cv_powerpc_float128_hw test (the function name was missing in the function declaration). Regenerating config.in (via autoreconf) removed the duplicate definition of HAVE_SOLARIS_CRTS. Finally, this adds a "-mfloat128-hardware requires -m64" test to rs6000.c: all the current patterns need 64-bit registers. Maybe we'll want to add float128 hardware support to 32-bit some day, but certainly not today. * config/rs6000/rs6000.c (rs6000_option_override_internal): Disallow -mfloat128-hardware without -m64. libgcc/ * configure.ac (test for libgcc_cv_powerpc_float128): Temporarily modify CFLAGS. Add -mabi=altivec -mvsx -mfloat128. (test for libgcc_cv_powerpc_float128_hw): Add -mpower9-vector and -mfloat128-hardware to the CFLAGS. Fix syntax error in the C snippet. * configure: Regenerate. * config.in: Regenerate. From-SVN: r246043
This commit is contained in:
parent
0c942f3eda
commit
7502c5970d
@ -1,5 +1,10 @@
|
||||
2017-03-10 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_option_override_internal): Disallow
|
||||
-mfloat128-hardware without -m64.
|
||||
|
||||
2017-03-10 Will Schmidt <will_schmidt@vnet.ibm.com>
|
||||
|
||||
|
||||
PR target/79941
|
||||
* config/rs6000/rs6000.c (builtin_function_type): Add VMUL*U[HB]
|
||||
entries to the case statement that marks unsigned arguments to
|
||||
|
@ -4686,6 +4686,14 @@ rs6000_option_override_internal (bool global_init_p)
|
||||
rs6000_isa_flags &= ~OPTION_MASK_FLOAT128_HW;
|
||||
}
|
||||
|
||||
if (TARGET_FLOAT128_HW && !TARGET_64BIT)
|
||||
{
|
||||
if ((rs6000_isa_flags_explicit & OPTION_MASK_FLOAT128_HW) != 0)
|
||||
error ("-mfloat128-hardware requires -m64");
|
||||
|
||||
rs6000_isa_flags &= ~OPTION_MASK_FLOAT128_HW;
|
||||
}
|
||||
|
||||
if (TARGET_FLOAT128_HW && !TARGET_FLOAT128_KEYWORD
|
||||
&& (rs6000_isa_flags_explicit & OPTION_MASK_FLOAT128_HW) != 0
|
||||
&& (rs6000_isa_flags_explicit & OPTION_MASK_FLOAT128_KEYWORD) == 0)
|
||||
|
@ -1,3 +1,12 @@
|
||||
2017-03-10 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
* configure.ac (test for libgcc_cv_powerpc_float128): Temporarily
|
||||
modify CFLAGS. Add -mabi=altivec -mvsx -mfloat128.
|
||||
(test for libgcc_cv_powerpc_float128_hw): Add -mpower9-vector and
|
||||
-mfloat128-hardware to the CFLAGS. Fix syntax error in the C snippet.
|
||||
* configure: Regenerate.
|
||||
* config.in: Regenerate.
|
||||
|
||||
2017-03-02 Jonathan Yong <10walls@gmail.com>
|
||||
|
||||
* config/i386/gthr-win32.h: Define NOGDI before
|
||||
|
@ -21,9 +21,6 @@
|
||||
/* Define if the system-provided CRTs are present on Solaris. */
|
||||
#undef HAVE_SOLARIS_CRTS
|
||||
|
||||
/* Define if the system-provided CRTs are present on Solaris. */
|
||||
#undef HAVE_SOLARIS_CRTS
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
|
12
libgcc/configure
vendored
12
libgcc/configure
vendored
@ -4779,6 +4779,8 @@ case ${host} in
|
||||
# software libraries, and whether the assembler can handle xsaddqp
|
||||
# for hardware support.
|
||||
powerpc*-*-linux*)
|
||||
saved_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -mabi=altivec -mvsx -mfloat128"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PowerPC ISA 2.06 to build __float128 libraries" >&5
|
||||
$as_echo_n "checking for PowerPC ISA 2.06 to build __float128 libraries... " >&6; }
|
||||
if test "${libgcc_cv_powerpc_float128+set}" = set; then :
|
||||
@ -4786,8 +4788,7 @@ if test "${libgcc_cv_powerpc_float128+set}" = set; then :
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#pragma GCC target ("vsx")
|
||||
vector double dadd (vector double a, vector double b) { return a + b; }
|
||||
vector double dadd (vector double a, vector double b) { return a + b; }
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"; then :
|
||||
libgcc_cv_powerpc_float128=yes
|
||||
@ -4799,6 +4800,7 @@ fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgcc_cv_powerpc_float128" >&5
|
||||
$as_echo "$libgcc_cv_powerpc_float128" >&6; }
|
||||
|
||||
CFLAGS="$CFLAGS -mpower9-vector -mfloat128-hardware"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PowerPC ISA 3.0 to build hardware __float128 libraries" >&5
|
||||
$as_echo_n "checking for PowerPC ISA 3.0 to build hardware __float128 libraries... " >&6; }
|
||||
if test "${libgcc_cv_powerpc_float128_hw+set}" = set; then :
|
||||
@ -4806,12 +4808,11 @@ if test "${libgcc_cv_powerpc_float128_hw+set}" = set; then :
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#pragma GCC target ("vsx,power9-vector")
|
||||
#include <sys/auxv.h>
|
||||
#include <sys/auxv.h>
|
||||
#ifndef AT_PLATFORM
|
||||
#error "AT_PLATFORM is not defined"
|
||||
#endif
|
||||
vector unsigned char (vector unsigned char a, vector unsigned char b)
|
||||
vector unsigned char add (vector unsigned char a, vector unsigned char b)
|
||||
{
|
||||
vector unsigned char ret;
|
||||
__asm__ ("xsaddqp %0,%1,%2" : "=v" (ret) : "v" (a), "v" (b));
|
||||
@ -4830,6 +4831,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgcc_cv_powerpc_float128_hw" >&5
|
||||
$as_echo "$libgcc_cv_powerpc_float128_hw" >&6; }
|
||||
CFLAGS="$saved_CFLAGS"
|
||||
esac
|
||||
|
||||
# Collect host-machine-specific information.
|
||||
|
@ -379,23 +379,24 @@ case ${host} in
|
||||
# software libraries, and whether the assembler can handle xsaddqp
|
||||
# for hardware support.
|
||||
powerpc*-*-linux*)
|
||||
saved_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -mabi=altivec -mvsx -mfloat128"
|
||||
AC_CACHE_CHECK([for PowerPC ISA 2.06 to build __float128 libraries],
|
||||
[libgcc_cv_powerpc_float128],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[#pragma GCC target ("vsx")
|
||||
vector double dadd (vector double a, vector double b) { return a + b; }],
|
||||
[vector double dadd (vector double a, vector double b) { return a + b; }],
|
||||
[libgcc_cv_powerpc_float128=yes],
|
||||
[libgcc_cv_powerpc_float128=no])])
|
||||
|
||||
CFLAGS="$CFLAGS -mpower9-vector -mfloat128-hardware"
|
||||
AC_CACHE_CHECK([for PowerPC ISA 3.0 to build hardware __float128 libraries],
|
||||
[libgcc_cv_powerpc_float128_hw],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[#pragma GCC target ("vsx,power9-vector")
|
||||
#include <sys/auxv.h>
|
||||
[#include <sys/auxv.h>
|
||||
#ifndef AT_PLATFORM
|
||||
#error "AT_PLATFORM is not defined"
|
||||
#endif
|
||||
vector unsigned char (vector unsigned char a, vector unsigned char b)
|
||||
vector unsigned char add (vector unsigned char a, vector unsigned char b)
|
||||
{
|
||||
vector unsigned char ret;
|
||||
__asm__ ("xsaddqp %0,%1,%2" : "=v" (ret) : "v" (a), "v" (b));
|
||||
@ -406,6 +407,7 @@ powerpc*-*-linux*)
|
||||
__attribute__ ((__ifunc__ ("add_resolver")));],
|
||||
[libgcc_cv_powerpc_float128_hw=yes],
|
||||
[libgcc_cv_powerpc_float128_hw=no])])
|
||||
CFLAGS="$saved_CFLAGS"
|
||||
esac
|
||||
|
||||
# Collect host-machine-specific information.
|
||||
|
Loading…
Reference in New Issue
Block a user