re PR target/85358 (PowerPC: Using -mabi=ieeelongdouble -mcpu=power9 breaks __ibm128)
authorMichael Meissner <meissner@linux.ibm.com>
Mon, 18 Jun 2018 19:10:08 +0000 (19:10 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Mon, 18 Jun 2018 19:10:08 +0000 (19:10 +0000)
commit6a8886e45f7eb6684f4e27b9d823ea3d02df787c
tree8005da91b739ec8d9e6b89e3b0a29707aff9b968
parentb0874c667d1bcc7e414f130dd4ec3973d388dbfb
re PR target/85358 (PowerPC: Using -mabi=ieeelongdouble -mcpu=power9 breaks __ibm128)

[gcc]
2018-06-18  Michael Meissner  <meissner@linux.ibm.com>

PR target/85358
* config/rs6000/rs6000-modes.def (toplevel): Rework the 128-bit
floating point modes, so that IFmode is numerically greater than
TFmode, which is greater than KFmode using FRACTIONAL_FLOAT_MODE
to declare the ordering.  This prevents IFmode from being
converted to TFmode when long double is IEEE 128-bit on an ISA 3.0
machine.  Include rs6000-modes.h to share the fractional values
between genmodes* and the rest of the compiler.
(IFmode): Likewise.
(KFmode): Likewise.
(TFmode): Likewise.
* config/rs6000/rs6000-modes.h: New file.
* config/rs6000/rs6000.c (rs6000_debug_reg_global): Change the
meaning of rs6000_long_double_size so that 126..128 selects an
appropriate 128-bit floating point type.
(rs6000_option_override_internal): Likewise.
* config/rs6000/rs6000.h (toplevel): Include rs6000-modes.h.
(TARGET_LONG_DOUBLE_128): Change the meaning of
rs6000_long_double_size so that 126..128 selects an appropriate
128-bit floating point type.
(LONG_DOUBLE_TYPE_SIZE): Update comment.
* config/rs6000/rs6000.md (trunciftf2): Correct the modes of the
source and destination to match the standard usage.
(truncifkf2): Likewise.
(copysign<mode>3, IEEE iterator): Rework copysign of float128 on
ISA 2.07 to use an explicit clobber, instead of passing in a
temporary.
(copysign<mode>3_soft): Likewise.

[libgcc]
2018-06-18  Michael Meissner  <meissner@linux.ibm.com>

* config/rs6000/t-float128 (FP128_CFLAGS_SW): Compile float128
support modules with -mno-gnu-attribute.
* config/rs6000/t-float128-hw (FP128_CFLAGS_HW): Likewise.

From-SVN: r261712
gcc/ChangeLog
gcc/config/rs6000/rs6000-modes.def
gcc/config/rs6000/rs6000-modes.h [new file with mode: 0644]
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h
gcc/config/rs6000/rs6000.md
libgcc/ChangeLog
libgcc/config/rs6000/t-float128
libgcc/config/rs6000/t-float128-hw