Commit 8c7a27d5 by Michael Meissner Committed by Michael Meissner

configure.ac (--with-long-double-format): Add support for the configuration…

configure.ac (--with-long-double-format): Add support for the configuration option to change the default long double...

2018-01-11  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* configure.ac (--with-long-double-format): Add support for the
	configuration option to change the default long double format on
	PowerPC systems.
	* config.gcc (powerpc*-linux*-*): Likewise.
	* configure: Regenerate.
	* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): If long
	double is IEEE, define __KC__ and __KF__ to allow floatn.h to be
	used without modification.

From-SVN: r256558
parent 02a03501
2018-01-11 Michael Meissner <meissner@linux.vnet.ibm.com>
* configure.ac (--with-long-double-format): Add support for the
configuration option to change the default long double format on
PowerPC systems.
* config.gcc (powerpc*-linux*-*): Likewise.
* configure: Regenerate.
* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): If long
double is IEEE, define __KC__ and __KF__ to allow floatn.h to be
used without modification.
2018-01-11 Bill Schmidt <wschmidt@linux.vnet.ibm.com> 2018-01-11 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* config/rs6000/rs6000-builtin.def (BU_P7_MISC_X): New #define. * config/rs6000/rs6000-builtin.def (BU_P7_MISC_X): New #define.
......
...@@ -4400,6 +4400,14 @@ case "${target}" in ...@@ -4400,6 +4400,14 @@ case "${target}" in
exit 1 exit 1
fi fi
fi fi
# Set up the default long double format if the user changed it.
if test x$with_long_double_format = xieee; then
tm_defines="${tm_defines} TARGET_IEEEQUAD_DEFAULT=1"
elif test x$with_long_double_format = xibm; then
tm_defines="${tm_defines} TARGET_IEEEQUAD_DEFAULT=0"
fi
;; ;;
s390*-*-*) s390*-*-*)
......
...@@ -708,7 +708,18 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile) ...@@ -708,7 +708,18 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile)
builtin_define ("__LONGDOUBLE128"); builtin_define ("__LONGDOUBLE128");
if (TARGET_IEEEQUAD) if (TARGET_IEEEQUAD)
builtin_define ("__LONG_DOUBLE_IEEE128__"); {
/* Older versions of GLIBC used __attribute__((__KC__)) to create the
IEEE 128-bit floating point complex type for C++ (which does not
support _Float128 _Complex). If the default for long double is
IEEE 128-bit mode, the library would need to use
__attribute__((__TC__)) instead. Defining __KF__ and __KC__
is a stop-gap to build with the older libraries, until we
get an updated library. */
builtin_define ("__LONG_DOUBLE_IEEE128__");
builtin_define ("__KF__=__TF__");
builtin_define ("__KC__=__TC__");
}
else else
builtin_define ("__LONG_DOUBLE_IBM128__"); builtin_define ("__LONG_DOUBLE_IBM128__");
} }
......
...@@ -945,6 +945,7 @@ enable_linker_build_id ...@@ -945,6 +945,7 @@ enable_linker_build_id
enable_libssp enable_libssp
enable_default_ssp enable_default_ssp
with_long_double_128 with_long_double_128
with_long_double_format
with_gc with_gc
with_system_zlib with_system_zlib
enable_maintainer_mode enable_maintainer_mode
...@@ -1738,6 +1739,9 @@ Optional Packages: ...@@ -1738,6 +1739,9 @@ Optional Packages:
--with-glibc-version=M.N --with-glibc-version=M.N
assume GCC used with glibc version M.N or later assume GCC used with glibc version M.N or later
--with-long-double-128 use 128-bit long double by default --with-long-double-128 use 128-bit long double by default
--with-long-double-format={ieee,ibm}
Specify whether PowerPC long double uses IEEE or IBM format
--with-gc={page,zone} this option is not supported anymore. It used to --with-gc={page,zone} this option is not supported anymore. It used to
choose the garbage collection mechanism to use with choose the garbage collection mechanism to use with
the compiler the compiler
...@@ -18442,7 +18446,7 @@ else ...@@ -18442,7 +18446,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 18445 "configure" #line 18449 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
...@@ -18548,7 +18552,7 @@ else ...@@ -18548,7 +18552,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 18551 "configure" #line 18555 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
...@@ -29185,6 +29189,45 @@ $as_echo "#define TARGET_DEFAULT_LONG_DOUBLE_128 1" >>confdefs.h ...@@ -29185,6 +29189,45 @@ $as_echo "#define TARGET_DEFAULT_LONG_DOUBLE_128 1" >>confdefs.h
fi fi
# Check if TFmode long double target should use the IBM extended double or IEEE
# 128-bit floating point formats if long doubles are 128-bits long. The long
# double type can only be switched on powerpc64 bit Linux systems where VSX is
# supported. Other PowerPC systems do not build the IEEE 128-bit emulator in
# libgcc.
# Check whether --with-long-double-format was given.
if test "${with_long_double_format+set}" = set; then :
withval=$with_long_double_format;
case "$target:$with_long_double_format" in
powerpc64le-*-linux*:ieee | powerpc64le-*-linux*:ibm)
:
;;
powerpc64-*-linux*:ieee | powerpc64-*-linux*:ibm)
# IEEE 128-bit emulation is only built on 64-bit VSX Linux systems
case "$with_cpu" in
power7 | power8 | power9 | power1*)
:
;;
*)
as_fn_error "Configuration option --with-long-double-format is only \
supported if the default cpu is power7 or newer" "$LINENO" 5
with_long_double_format=""
;;
esac
;;
xpowerpc64*-*-linux*:*)
as_fn_error "--with-long-double-format argument should be ibm or ieee" "$LINENO" 5
with_long_double_format=""
;;
*)
as_fn_error "Configure option --with-long-double-format is only supported \
on 64-bit PowerPC VSX Linux systems" "$LINENO" 5
with_long_double_format=""
;;
esac
fi
# Check if the target LIBC supports exporting the AT_PLATFORM and AT_HWCAP # Check if the target LIBC supports exporting the AT_PLATFORM and AT_HWCAP
# values in the TCB. Currently, only GLIBC 2.23 and later support this. # values in the TCB. Currently, only GLIBC 2.23 and later support this.
gcc_cv_libc_provides_hwcap_in_tcb=no gcc_cv_libc_provides_hwcap_in_tcb=no
......
...@@ -5885,6 +5885,43 @@ if test x$gcc_cv_target_ldbl128 = xyes; then ...@@ -5885,6 +5885,43 @@ if test x$gcc_cv_target_ldbl128 = xyes; then
[Define if TFmode long double should be the default]) [Define if TFmode long double should be the default])
fi fi
# Check if TFmode long double target should use the IBM extended double or IEEE
# 128-bit floating point formats if long doubles are 128-bits long. The long
# double type can only be switched on powerpc64 bit Linux systems where VSX is
# supported. Other PowerPC systems do not build the IEEE 128-bit emulator in
# libgcc.
AC_ARG_WITH([long-double-format],
[AS_HELP_STRING([--with-long-double-format={ieee,ibm}]
[Specify whether PowerPC long double uses IEEE or IBM format])],[
case "$target:$with_long_double_format" in
powerpc64le-*-linux*:ieee | powerpc64le-*-linux*:ibm)
:
;;
powerpc64-*-linux*:ieee | powerpc64-*-linux*:ibm)
# IEEE 128-bit emulation is only built on 64-bit VSX Linux systems
case "$with_cpu" in
power7 | power8 | power9 | power1*)
:
;;
*)
AC_MSG_ERROR([Configuration option --with-long-double-format is only \
supported if the default cpu is power7 or newer])
with_long_double_format=""
;;
esac
;;
xpowerpc64*-*-linux*:*)
AC_MSG_ERROR([--with-long-double-format argument should be ibm or ieee])
with_long_double_format=""
;;
*)
AC_MSG_ERROR([Configure option --with-long-double-format is only supported \
on 64-bit PowerPC VSX Linux systems])
with_long_double_format=""
;;
esac],
[])
# Check if the target LIBC supports exporting the AT_PLATFORM and AT_HWCAP # Check if the target LIBC supports exporting the AT_PLATFORM and AT_HWCAP
# values in the TCB. Currently, only GLIBC 2.23 and later support this. # values in the TCB. Currently, only GLIBC 2.23 and later support this.
gcc_cv_libc_provides_hwcap_in_tcb=no gcc_cv_libc_provides_hwcap_in_tcb=no
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment