On Wed, Oct 06, 2021 at 06:34:33PM +0200, Jakub Jelinek wrote:
> On Wed, Oct 06, 2021 at 11:07:30AM -0500, Segher Boessenkool wrote:
> > We can emulate it everywhere (using libquadmath for example).  This can
> > magically make -msoft-float work as well everywhere, btw.
> 
> Emulation is one thing, but another one is where are those __float128 or
> quad long double arguments and return values passed.  On power8 le I think
> they are passed in VSX registers, aren't they?

On BE just as well.  And on 32 bit.

> But are those available everywhere where ppc64 is supported?  For ppc32
> certainly not, I don't remember for ppc64.

You can use VSX registers on 32 bit just fine.

> Sure, the ABI could say pass it in e.g. in a pair of integer registers...

Or more, on 32-bit.  It isn't very useful to try to optimise this, so
it is easiest to just handle it the same as a struct for register
passing.  For 32-bit this means it then is passed and returned as a
pointer, for the older 64-bit ABIs it means it is passed as two GPRs but
returned as a pointer, and for the ELFv2 ABI (on both BE and LE) it
means that it is passed as well as returned in two GPRs.


Segher

Reply via email to