Commit 06061925 by Michael Meissner Committed by Michael Meissner

config.gcc (powerpc*-linux*-*): Add support for 64-bit little endian Linux…

config.gcc (powerpc*-linux*-*): Add support for 64-bit little endian Linux systems to optionally enable...

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

	* config.gcc (powerpc*-linux*-*): Add support for 64-bit little
	endian Linux systems to optionally enable multilibs for selecting
	the long double type if the user configured an explicit type.
	* config/rs6000/rs6000.h (TARGET_IEEEQUAD_MULTILIB): Indicate we
	have no long double multilibs if not defined.
	* config/rs6000/rs6000.c (rs6000_option_override_internal): Do not
	warn if the user used -mabi={ieee,ibm}longdouble and we built
	multilibs for long double.
	* config/rs6000/linux64.h (MULTILIB_DEFAULTS_IEEE): Define as the
	appropriate multilib option.
	(MULTILIB_DEFAULTS): Add MULTILIB_DEFAULTS_IEEE to the default
	multilib options.
	* config/rs6000/t-ldouble-linux64le-ibm: New configuration files
	for building long double multilibs.
	* config/rs6000/t-ldouble-linux64le-ieee: Likewise.

From-SVN: r256775
parent dbc4d77c
2018-01-16 Michael Meissner <meissner@linux.vnet.ibm.com>
* config.gcc (powerpc*-linux*-*): Add support for 64-bit little
endian Linux systems to optionally enable multilibs for selecting
the long double type if the user configured an explicit type.
* config/rs6000/rs6000.h (TARGET_IEEEQUAD_MULTILIB): Indicate we
have no long double multilibs if not defined.
* config/rs6000/rs6000.c (rs6000_option_override_internal): Do not
warn if the user used -mabi={ieee,ibm}longdouble and we built
multilibs for long double.
* config/rs6000/linux64.h (MULTILIB_DEFAULTS_IEEE): Define as the
appropriate multilib option.
(MULTILIB_DEFAULTS): Add MULTILIB_DEFAULTS_IEEE to the default
multilib options.
* config/rs6000/t-ldouble-linux64le-ibm: New configuration files
for building long double multilibs.
* config/rs6000/t-ldouble-linux64le-ieee: Likewise.
2018-01-16 John David Anglin <danglin@gcc.gnu.org> 2018-01-16 John David Anglin <danglin@gcc.gnu.org>
* config.gcc (hppa*-*-linux*): Change callee copies ABI to caller * config.gcc (hppa*-*-linux*): Change callee copies ABI to caller
......
...@@ -4407,6 +4407,16 @@ case "${target}" in ...@@ -4407,6 +4407,16 @@ case "${target}" in
elif test x$with_long_double_format = xibm; then elif test x$with_long_double_format = xibm; then
tm_defines="${tm_defines} TARGET_IEEEQUAD_DEFAULT=0" tm_defines="${tm_defines} TARGET_IEEEQUAD_DEFAULT=0"
fi fi
case "${target}:${enable_multilib}:${with_long_double_format}" in
powerpc64le*:yes:ieee | powerpc64le*:yes:ibm)
tm_defines="${tm_defines} TARGET_IEEEQUAD_MULTILIB=1"
tmake_file="${tmake_file} rs6000/t-ldouble-linux64le-${with_long_double_format}"
;;
*)
:
;;
esac
;; ;;
s390*-*-*) s390*-*-*)
......
...@@ -245,11 +245,18 @@ extern int dot_symbols; ...@@ -245,11 +245,18 @@ extern int dot_symbols;
#define DYNAMIC_LINKER_PREFIX "" #define DYNAMIC_LINKER_PREFIX ""
#endif #endif
#if TARGET_IEEEQUAD_DEFAULT
#define MULTILIB_DEFAULTS_IEEE "mabi=ieeelongdouble"
#else /* TARGET_IEEEQUAD_DEFAULT. */
#define MULTILIB_DEFAULTS_IEEE "mabi=ibmlongdouble"
#endif /* TARGET_IEEEQUAD_DEFAULT. */
#undef MULTILIB_DEFAULTS #undef MULTILIB_DEFAULTS
#if DEFAULT_ARCH64_P #if DEFAULT_ARCH64_P
#define MULTILIB_DEFAULTS { "m64" } #define MULTILIB_DEFAULTS { "m64", MULTILIB_DEFAULTS_IEEE }
#else #else
#define MULTILIB_DEFAULTS { "m32" } #define MULTILIB_DEFAULTS { "m32", MULTILIB_DEFAULTS_IEEE }
#endif #endif
/* Split stack is only supported for 64 bit, and requires glibc >= 2.18. */ /* Split stack is only supported for 64 bit, and requires glibc >= 2.18. */
......
...@@ -4587,11 +4587,15 @@ rs6000_option_override_internal (bool global_init_p) ...@@ -4587,11 +4587,15 @@ rs6000_option_override_internal (bool global_init_p)
systems will also set long double to be IEEE 128-bit. AIX and Darwin systems will also set long double to be IEEE 128-bit. AIX and Darwin
explicitly redefine TARGET_IEEEQUAD and TARGET_IEEEQUAD_DEFAULT to 0, so explicitly redefine TARGET_IEEEQUAD and TARGET_IEEEQUAD_DEFAULT to 0, so
those systems will not pick up this default. Warn if the user changes the those systems will not pick up this default. Warn if the user changes the
default unless -Wno-psabi. */ default unless either the user used the -Wno-psabi option, or the compiler
was built to enable multilibs to switch between the two long double
types. */
if (!global_options_set.x_rs6000_ieeequad) if (!global_options_set.x_rs6000_ieeequad)
rs6000_ieeequad = TARGET_IEEEQUAD_DEFAULT; rs6000_ieeequad = TARGET_IEEEQUAD_DEFAULT;
else if (rs6000_ieeequad != TARGET_IEEEQUAD_DEFAULT && TARGET_LONG_DOUBLE_128) else if (!TARGET_IEEEQUAD_MULTILIB
&& rs6000_ieeequad != TARGET_IEEEQUAD_DEFAULT
&& TARGET_LONG_DOUBLE_128)
{ {
static bool warned_change_long_double; static bool warned_change_long_double;
if (!warned_change_long_double) if (!warned_change_long_double)
...@@ -564,6 +564,12 @@ extern int rs6000_vector_align[]; ...@@ -564,6 +564,12 @@ extern int rs6000_vector_align[];
#define TARGET_ALTIVEC_ABI rs6000_altivec_abi #define TARGET_ALTIVEC_ABI rs6000_altivec_abi
#define TARGET_LDBRX (TARGET_POPCNTD || rs6000_cpu == PROCESSOR_CELL) #define TARGET_LDBRX (TARGET_POPCNTD || rs6000_cpu == PROCESSOR_CELL)
/* Define as 1 if we support multilibs for switching long double between IEEE
128-bit floating point and IBM extended double. */
#ifndef TARGET_IEEEQUAD_MULTILIB
#define TARGET_IEEEQUAD_MULTILIB 0
#endif
/* ISA 2.01 allowed FCFID to be done in 32-bit, previously it was 64-bit only. /* ISA 2.01 allowed FCFID to be done in 32-bit, previously it was 64-bit only.
Enable 32-bit fcfid's on any of the switches for newer ISA machines or Enable 32-bit fcfid's on any of the switches for newer ISA machines or
XILINX. */ XILINX. */
......
# Long double multilib libraries for PowerPC 64-bit little endian systems using
# IBM extended double as the long double type.
#
# Copyright (C) 2018 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
MULTILIB_OPTIONS += mabi=ieeelongdouble/mabi=ibmlongdouble
MULTILIB_DIRNAMES += ieee128 ibm128
MULTILIB_OSDIRNAMES += mabi.ibmlongdouble=../lib64$(call if_multiarch,:powerpc64-linux-gnu) \
mabi.ieeelongdouble=../lib64/ieee128$(call if_multiarch,:powerpc64-linux-gnu) \
../lib64$(call if_multiarch,:powerpc64-linux-gnu)
# Long double multilib libraries for PowerPC 64-bit little endian systems using
# IEEE 128-bit floating point as the long double type.
#
# Copyright (C) 2018 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
MULTILIB_OPTIONS += mabi=ieeelongdouble/mabi=ibmlongdouble
MULTILIB_DIRNAMES += ieee128 ibm128
MULTILIB_OSDIRNAMES += mabi.ibmlongdouble=../lib64/ibm128$(call if_multiarch,:powerpc64-linux-gnu) \
mabi.ieeelongdouble=../lib64$(call if_multiarch,:powerpc64-linux-gnu) \
../lib64$(call if_multiarch,:powerpc64-linux-gnu)
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