This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH], Fix PR target/pr83862: Fix PowerPC long double signbit with -mabi=ieeelongdouble

PR target/83862 pointed out a problem I put into the 128-bit floating point
type signbit optimization.  The issue is we want to avoid doing a load to a
floating point/vector register and then a direct move to do signbit, so we
change the load to load the upper 64-bits of the floating point value to get
the sign bit.  Unfortunately, if the type is IEEE 128-bit and memory is
addressed with an indexed address on a little endian system, it generates an
illegal address and generates an internal compiler error.

I have tested this on a little endian power8 system, with bootstrap compilers.
There was not regression, and the new test passes.  Can I install this into the

The same code is also in GCC 6 and 7.  While, -mabi=ieeelongdouble is not
supported in those releases, you can get a failure if you use an explicit
_Float128 type instead of long double.  Assuming that the bug shows up, can I
apply these patches to those branches as well?

2018-01-16  Michael Meissner  <>

	PR target/83862
	* config/rs6000/rs6000.c (rs6000_split_signbit): Do not create an
	illegal address on little endian systems if the source value is in
	memory addressed with indexed addressing.
	* config/rs6000/ (signbit<mode>2_dm): Likewise.
	(signbit<mode>2_dm_<su>ext): Likewise.

2018-01-16  Michael Meissner  <>

	PR target/83862
	* New test.

Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email:, phone: +1 (978) 899-4797

Attachment: pr83862.patch01b
Description: Text document

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]