[PATCH] rs6000: Fix mangling for 128-bit float

Segher Boessenkool segher@kernel.crashing.org
Fri Jun 1 21:49:00 GMT 2018


On Fri, Jun 01, 2018 at 09:33:57PM +0000, Joseph Myers wrote:
> On Fri, 1 Jun 2018, Segher Boessenkool wrote:
> 
> > This patch changes the (C++) mangling of the 128-bit float types.
> > IBM long double ("double-double") is mangled as "g", as before, and
> > IEEE 128-bit long double is mangled as "u9__ieee128".
> 
> To be clear: given this mangling (which certainly simplifies the ABI), is 
> the intent that only one type with double-double format, and only one type 
> with binary128 format, will be accessible in any given C++ compilation, to 
> avoid ICEs (bugs 85075 and 85518) from different types having the same 
> mangling?  So __ibm128 *will* be the same type as long double when those 
> have the same format, and likewise long double, __float128, __ieee128 and 
> __typeof (__builtin_inff128 ()) will have the same type when they have the 
> same format?

Yes.  (__float128 is just a #define btw.)

> You can have the simple mangling that's compatible between different 
> choices of long double, or you can have the types being consistently 
> different so people can e.g. overload and write templates using them 
> without worrying about the possibility that __ieee128 might or might not 
> be the same type as long double depending on the compiler options, but you 
> can't have both without running into problems.

Right.  But given how much this simplifies, we'll just have to bite the
bullet and get this to work properly.


Segher



More information about the Gcc-patches mailing list