public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Segher Boessenkool <segher@kernel.crashing.org>
To: Michael Meissner <meissner@linux.ibm.com>,
	GCC Development <gcc@gcc.gnu.org>,
	"Kewen.Lin" <linkw@linux.ibm.com>,
	David Edelsohn <dje.gcc@gmail.com>,
	Peter Bergner <bergner@linux.ibm.com>,
	Will Schmidt <will_schmidt@vnet.ibm.com>,
	Jason Merrill <jason@redhat.com>, Nathan Sidwell <nathan@acm.org>,
	Mike Stump <mikestump@comcast.net>,
	Iain Sandoe <iain@sandoe.co.uk>,
	Joseph Myers <joseph@codesourcery.com>,
	Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>,
	Alan Modra <amodra@gmail.com>, Nick Clifton <nickc@redhat.com>,
	Jeff Law <jlaw@tachyum.com>, Jakub Jelinek <jakub@redhat.com>,
	Richard Biener <rguenther@suse.de>,
	"David S. Miller" <davem@redhat.com>,
	"Carlos O'Donell" <carlos@redhat.com>,
	libc-alpha@sourceware.org
Subject: Re: Resend: Potential upcoming changes in mangling to PowerPC GCC
Date: Thu, 4 Aug 2022 15:53:55 -0500	[thread overview]
Message-ID: <20220804205355.GO25951@gate.crashing.org> (raw)
In-Reply-To: <YuwGg08djkg6iFQc@toto.the-meissners.org>

Hi!

On Thu, Aug 04, 2022 at 01:48:51PM -0400, Michael Meissner wrote:
> At the moment, GCC 12 on the server PowerPC systems supports multiple 128-bit
> floating point types:
> 
>     *	_Float128 (in the C language): IEEE 128-bit floating point;
> 
>     *	__float128 (in the C and C++ languages): IEEE 128-bit floating point;
> 
>     *	long double: One of IEEE 128-bit floating, IBM 128-bit floating point,
> 	or 64-bit floating point; (and)
> 
>     *	__ibm128: Explicit IBM 128-bit floating point.

And __ieee128, which (unlike __float128) explicitly is IEEE QP float
(and as a bonus that is obvious in every context, too).

> If a file is compiled when long double uses the IEEE 128-bit floating point
> type, then the __float128 type is the long double type and it uses the TFmode
> mode.  And while the _Float128 type is distinct from long double, it also uses
> TFmode.  The __ibm128 type is distinct, and it uses IFmode.

It would be a lot simpler and less roundabout and inside out if we could
do this the other way around: start with the QP float and double-double
types and modes, and point the long double type and TFmode at that.  But
alas.

> While things mostly work with this setup, there are some things that don't work
> as well.  For example, 3 of the tests fail when you are using a system like
> Fedora 36 where IEEE 128-bit long double is default.  These 3 tests use the
> 'nanqs' built-in function, which is mapped to 'nanf128s' and it delivers a
> _Float128 signaling NaN.  But since __float128 uses a different type, the
> signaling NaN is converted and it loses the signaling property.

So you are saying __float128 and _Float128 should *not* be separate
types?  Or, the testcases are buggy, make unwarranted assumptions?

> In addition, it would be nice if we could refine the setting of bits in the ELF
> header so that if you pass an explicit __float128 or __ibm128 object, it
> doesn't set the bits that you used long double of the appropriate type.  But
> the code that sets these bits is done in the RTL stages, and it only looks at
> modes, not at types.

So fix that?  It is a clear bug.

> Now, I'm working on patches to 'do the right thing':
> 
>     *	Make _Float128 and __float128 always use the same distinct type and
> 	always use KFmode;
> 
>     *	Make __ibm128 use a distinct type and always use IFmode; (and)

It cannot always use IFmode?  Generic code uses TFmode for long double
(which can be double-double).

> Because long double mangles the same as either __float128 or __ibm128, you
> cannot write programs like:
> 
> 	double convert (__ibm128    x) { return x; }
> 	double convert (__float128  x) { return x; }
> 	double convert (long double x) { return x; }

I proposed separate mangling for long double, all those years ago, but
long double is the same type as either __ibm128 or __ieee128, always.
Mangling it differently only causes huge complications and it solves
nothing.

> At the moment, the mangling rules are:
> 
>     *	If the type uses the IBM 128-bit encoding, use "g" for mangling;
> 
>     *	If the type uses the IEEE 128-bit encoding, use "u9__ieee128" for
> 	mangling.
> 
> I would suggest at least adding the rule:
> 
>     *	If the type is explicitly __ibm128, use "u8__ibm128" for the mangling,
> 	and if it is long double that uses the IBM 128-bit encoding, continue
> 	to use "g" for the mangling.

That is wrong.  The same type should mangle the same in all cases.

> But in changing the mangling, we have the potential to create compatibility
> issues,

s/potential to/surety this will/

Please open PRs for the broken testcases (one for each, unless of course
you are confident they are the same problems: it is much easier to join
PRs than to split them).


Segher

  reply	other threads:[~2022-08-04 20:56 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-04 17:48 Michael Meissner
2022-08-04 20:53 ` Segher Boessenkool [this message]
2022-08-08 21:44   ` Michael Meissner
2022-08-10 17:14     ` Segher Boessenkool
2022-08-10 19:55 ` Tulio Magno Quites Machado Filho
2022-08-10 20:04   ` Segher Boessenkool
2022-08-10 21:38     ` Tulio Magno Quites Machado Filho

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220804205355.GO25951@gate.crashing.org \
    --to=segher@kernel.crashing.org \
    --cc=amodra@gmail.com \
    --cc=bergner@linux.ibm.com \
    --cc=carlos@redhat.com \
    --cc=davem@redhat.com \
    --cc=dje.gcc@gmail.com \
    --cc=gcc@gcc.gnu.org \
    --cc=iain@sandoe.co.uk \
    --cc=jakub@redhat.com \
    --cc=jason@redhat.com \
    --cc=jlaw@tachyum.com \
    --cc=joseph@codesourcery.com \
    --cc=libc-alpha@sourceware.org \
    --cc=linkw@linux.ibm.com \
    --cc=meissner@linux.ibm.com \
    --cc=mikestump@comcast.net \
    --cc=nathan@acm.org \
    --cc=nickc@redhat.com \
    --cc=rguenther@suse.de \
    --cc=tuliom@linux.ibm.com \
    --cc=will_schmidt@vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).