Commit a3b11faf by Michael Meissner Committed by Michael Meissner

rs6000.c (rs6000_emit_move): If we load or store a long double type...

[gcc]
2018-01-17  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* config/rs6000/rs6000.c (rs6000_emit_move): If we load or store a
	long double type, set the flags for noting the default long double
	type, even if we don't pass or return a long double type.

[gcc/testsuite]
2018-01-17  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* gcc.target/powerpc/gnuattr1.c: New test to make sure we set the
	appropriate .gnu_attribute for the long double type, if we use the
	long double type, but do not generate any calls.
	* gcc.target/powerpc/gnuattr2.c: Likewise.
	* gcc.target/powerpc/gnuattr3.c: Likewise.

From-SVN: r256822
parent a533fc76
2018-01-17 Michael Meissner <meissner@linux.vnet.ibm.com>
* config/rs6000/rs6000.c (rs6000_emit_move): If we load or store a
long double type, set the flags for noting the default long double
type, even if we don't pass or return a long double type.
2018-01-17 Jan Hubicka <hubicka@ucw.cz>
PR ipa/83051
......
......@@ -10494,6 +10494,23 @@ rs6000_emit_move (rtx dest, rtx source, machine_mode mode)
gcc_unreachable ();
}
#ifdef HAVE_AS_GNU_ATTRIBUTE
/* If we use a long double type, set the flags in .gnu_attribute that say
what the long double type is. This is to allow the linker's warning
message for the wrong long double to be useful, even if the function does
not do a call (for example, doing a 128-bit add on power9 if the long
double type is IEEE 128-bit. Do not set this if __ibm128 or __floa128 are
used if they aren't the default long dobule type. */
if (rs6000_gnu_attr && (HAVE_LD_PPC_GNU_ATTR_LONG_DOUBLE || TARGET_64BIT))
{
if (TARGET_LONG_DOUBLE_128 && (mode == TFmode || mode == TCmode))
rs6000_passes_float = rs6000_passes_long_double = true;
else if (!TARGET_LONG_DOUBLE_128 && (mode == DFmode || mode == DCmode))
rs6000_passes_float = rs6000_passes_long_double = true;
}
#endif
/* See if we need to special case SImode/SFmode SUBREG moves. */
if ((mode == SImode || mode == SFmode) && SUBREG_P (source)
&& rs6000_emit_move_si_sf_subreg (dest, source, mode))
2018-01-17 Michael Meissner <meissner@linux.vnet.ibm.com>
* gcc.target/powerpc/gnuattr1.c: New test to make sure we set the
appropriate .gnu_attribute for the long double type, if we use the
long double type, but do not generate any calls.
* gcc.target/powerpc/gnuattr2.c: Likewise.
* gcc.target/powerpc/gnuattr3.c: Likewise.
2018-01-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/78344
......
/* { dg-do compile { target { powerpc*-linux-* } } } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-options "-O2 -mvsx -mlong-double-64" } */
/* { dg-final { scan-assembler "gnu_attribute 4, 9" } } */
/* Check that if we can do the long double operation without doing an emulator
call, such as with 64-bit long double support, that we still set the
appropriate .gnu_attribute. */
long double a;
void add1 (void)
{
a++;
}
/* { dg-do compile { target { powerpc*-linux-* && lp64 } } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-options "-O2 -mpower9-vector -mabi=ieeelongdouble -Wno-psabi" } */
/* { dg-final { scan-assembler "gnu_attribute 4, 13" } } */
/* Check that if we can do the long double operation without doing an emulator
call, such as with IEEE 128-bit hardware support on power9, that we still
set the appropriate .gnu_attribute. The && lp64 is needed, because we can't
enable the IEEE 128-bit hardware instructions on ISA 3.0 (power9) in 32-bit,
because we don't have a TImode available. */
long double a;
void add1 (void)
{
a++;
}
/* { dg-do compile { target { powerpc*-linux-* } } } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-options "-O2 -mvsx -mabi=ibmlongdouble -Wno-psabi" } */
/* { dg-final { scan-assembler "gnu_attribute 4, 5" } } */
/* Check that if we can do the long double operation without doing an emulator
call, such as with copysign, that we still set the appropriate
.gnu_attribute. */
long double a, b, c;
void cs (void)
{
a = __builtin_copysignl (b, c);
}
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