I want to discuss changes that I think we need to make across the open source
toochain to allow us to change the long double type on PowerPC hardware from
using the IBM extended double (i.e. a pair of doubles) to the IEEE 128-bit
format defined in IEEE 754.

I wasn't sure whom to address this to, so I took a scatter shot approach.  I
likely missed a few people, and some people were added that may not need to
participate in the discussion.  Sorry for either not including you initially or
for including you by mistake.

I added people from the following areas:

        PowerPC folk

        Langugage maintainers: At the moment, only the C/C++ front ends have
        code to support both 128-bit floating point types.  The other languages
        use just the defaults provided by the machine maintainers.  However, it
        may be we will need to think about rules for code being compiled and
        linked with a different long double format.

        Arm/x86 maintainers: It is possible that these sorts of changes might
        mesh with things that are being planned.  For example, maybe x86 might
        want to explore changing the default for long double from the
        traditional Intel 80-bit format to IEEE 128-bit.  And there might be
        issues with the several different 16-bit floating point formats
        floating around.

        Glibc developers: I added Tulio and Carlos, but I suspect there may be
        others that might want to respond.

        Binutils developers: I added Alan, Peter, and Nick.  I don't know who
        else might be interested.

        Gdb developers: I added Pedro and Ulrich, but I don't know if there are
        others that may be interested.

At the moment, this change is only done if you use the following option:
        --with-long-double-format=ieee

option when configuring GCC.  There will be some changes need to make this
option work as intended.  You will also need an up to date glibc and binutils
if you want to use this option.

In terms of time table, I feel that whatever changes are made NEED to be done
by the time GCC 11 is released.

Each topic will be done as a followup to this post, so that people can
concentrate on individual features via threaded email readers, rather than
wading through the whole list over time.

For those of you that are not aware, the PowerPC ISA 3.0 (power9) now has
instructions that implement IEEE 754 128-bit floating point directly.  Over the
last few releases, I have been adding support for IEEE 128-bit floating point
into GCC.  On power7 and power8 hardware we use soft-float emulator to emulate
the IEEE 128-bit floating point format.

At the moment, we are only considering doing these changes on the little endian
PowerPC linux systems.

In theory, it could work on big endian 64-bit PowerPC linux systems that are
configured with a minimum cpu of power7.  You would need to edit the libgcc and
gcc support to enable IEEE 128-bit floating point on those systems and build
current glibc for those systems.  However, I'm not planning to do this work.

In addition, the IEEE 128-bit instructions are not enabled on 32-bit systems
(you can use the soft-fp emulation, just not the hardware support).  This is
due to the issue within GCC we don't support TImode on 32-bit systems.  Some
parts of GCC require a supported integer that is the same size as basic types.
If somebody is motivated to do that work, that is fine, but I'm not planning to
do that work.

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

Reply via email to