This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: RFC Migrating PowerPC to IEEE 128-bit Floating Point
- From: Michael Meissner <meissner at linux dot vnet dot ibm dot com>
- To: Steven Munroe <munroesj at linux dot vnet dot ibm dot com>
- Cc: Joseph Myers <joseph at codesourcery dot com>, "Carlos O'Donell" <carlos at redhat dot com>, libc-alpha at sourceware dot org, Tulio Magno Quites Machado Filho <tuliom at linux dot vnet dot ibm dot com>, Ulrich Weigand <Ulrich dot Weigand at de dot ibm dot com>, Michael Meissner <meissner at linux dot vnet dot ibm dot com>, David Edelsohn <dje dot gcc at gmail dot com>, jakub at redhat dot com
- Date: Tue, 13 Oct 2015 14:53:20 -0400
- Subject: Re: RFC Migrating PowerPC to IEEE 128-bit Floating Point
- Authentication-results: sourceware.org; auth=none
- References: <1443640701 dot 8741 dot 27 dot camel at oc7878010663> <alpine dot DEB dot 2 dot 10 dot 1509302017260 dot 21553 at digraph dot polyomino dot org dot uk> <1444759582 dot 31347 dot 25 dot camel at oc7878010663>
On Tue, Oct 13, 2015 at 01:06:22PM -0500, Steven Munroe wrote:
> On Wed, 2015-09-30 at 21:15 +0000, Joseph Myers wrote:
> > (It's fine for some functions to require particular instruction set
> > extensions, e.g. for the ABI for the __float128 entry points to be that
> > they require VSX support. This is not of course an issue for
> > little-endian where VSX support is required anyway, only for big-endian if
> > any __float128 support is added there. The build system would need to
> > ensure the right options are passed when building __float128 files,
> > without adding inappropriate VSX requirements when building other files.)
In my current patches to libgcc to add the support for __float128 I added
#pragma GCC target ("vsx,float128")
to make sure the float 128 files were built with the VSX instruction set even
if the rest of libgcc (and eventually glibc) is built with other options.
> Technically only VMX support is required for parameter passing which
> includes PowerMAC G5/970, Freescale e6500, IBM POWER6 and later.
The compiler currently requires VSX, not just Altivec to enable __float128.
I could relax it to just Altivec, but I would worry about unintential unalgined
__float128 accesses given that the Altivec loads and stores ignore the bottom 3
address bits.
>
> As you say the PPC64LE will have VMX/VSX by definition.
>
> Modern PPC32BE and PPC64BE Hard-float systems support VMX/VSX ans can
> migrate to __float128 as this work is completed.
>
> Older POWER servers (power4 power5 power5+) without VMX/VSX are or are
> going out of service and are not supported by current distros, and so
> will not be compiling for or using __float128. We will maintain
> versioned IBM long double (which only requires hard float) to support
> existing application migrated to newer systems and distros.
>
> The PPC32 Soft-float ABI would continue to pass by reference and could
> migrate to __float128 if they choose.
In my original work, I allowed __float128 without the VSX instruction set,
using different emulator functions depending on whether you used VSX or not,
and it worked. However, it was getting cumbersome to document and explain the
two different emulators, and I worried about user code inadvertently having
some modules compiled with VSX and some without.
If there is perceived need, we can resurect this (assuming David is willing to
allow it).
Are there actual users that are asking for __float128 on embedded and other
non-server systems?
--
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meissner@linux.vnet.ibm.com, phone: +1 (978) 899-4797