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
This commit is contained in:
Michael Meissner 2018-01-17 01:06:34 +00:00 committed by Michael Meissner
parent dbc4d77ca4
commit 060619250d
7 changed files with 102 additions and 5 deletions

View File

@ -1,3 +1,21 @@
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>
* config.gcc (hppa*-*-linux*): Change callee copies ABI to caller

View File

@ -4407,6 +4407,16 @@ case "${target}" in
elif test x$with_long_double_format = xibm; then
tm_defines="${tm_defines} TARGET_IEEEQUAD_DEFAULT=0"
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*-*-*)

View File

@ -245,11 +245,18 @@ extern int dot_symbols;
#define DYNAMIC_LINKER_PREFIX ""
#endif
#undef MULTILIB_DEFAULTS
#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
#if DEFAULT_ARCH64_P
#define MULTILIB_DEFAULTS { "m64" }
#define MULTILIB_DEFAULTS { "m64", MULTILIB_DEFAULTS_IEEE }
#else
#define MULTILIB_DEFAULTS { "m32" }
#define MULTILIB_DEFAULTS { "m32", MULTILIB_DEFAULTS_IEEE }
#endif
/* Split stack is only supported for 64 bit, and requires glibc >= 2.18. */

View File

@ -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
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
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)
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;
if (!warned_change_long_double)

View File

@ -564,6 +564,12 @@ extern int rs6000_vector_align[];
#define TARGET_ALTIVEC_ABI rs6000_altivec_abi
#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.
Enable 32-bit fcfid's on any of the switches for newer ISA machines or
XILINX. */

View File

@ -0,0 +1,26 @@
# 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)

View File

@ -0,0 +1,26 @@
# 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)