This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH], PowerPC IEEE 128-bit fp, #11-rev4 (enable libgcc conversions)


On Wed, Jan 20, 2016 at 8:00 PM, Michael Meissner
<meissner@linux.vnet.ibm.com> wrote:
> This is revision 4 of the IEEE 128-bit floating point libgcc support.
>
> Since revision 3, I have removed the gcc changes that broke AIX.  I rewrote the
> IBM extended double pack/unpack support to not use the builtin functions, but
> instead uses a union.  The libgcc code that I wrote tickles a bug in the pack
> function.  While I would like to fix the pack function bug, I will need to make
> sure I don't break AIX, so I didn't want to couple this library to getting
> those bugs fixed.
>
> I have also rewritten how the ifunc support is done, so that ifunc is only done
> if the target assembler supports ISA 3.0 instructions AND the compiler supports
> ifunc functions.  This is so that the compiler can build on 64-bit systems if
> --enable-gnu-indirect-function is not specified without the ifunc functions
> being flagged.
>
> I have done bootstraps on both a big endian power7 system and a little endian
> power8 with no regressions.  In addition, I have built a compiler explicitly
> disabling ifunc support, and it built and ran the ieee 128-bit floating point
> unit tests correctly.
>
> Can I install this into libgcc?
>
> Assuming I can install these changes, the one final change that I would like to
> make is to enable float128 automatically on VSX powerpc Linux systems, but not
> on other systems (AIX, *BSD, etc.) since those systems do not build float128
> emulator functions.

What does "enable" mean?

> 2016-01-20  Michael Meissner  <meissner@linux.vnet.ibm.com>
>             Steven Munroe <munroesj@linux.vnet.ibm.com>
>             Tulio Magno Quites Machado Filho <tulioqm@br.ibm.com>
>
>         * config/rs6000/float128-sed: New files to convert TF names to KF
>         names for PowerPC IEEE 128-bit floating point support.
>         * config/rs6000/float128-sed-hw: Likewise.
>
>         * config/rs6000/float128-hw.c: New file for ISA 3.0 IEEE 128-bit
>         floating point hardware support.
>
>         * config/rs6000/float128-ifunc.c: New file to pick either IEEE
>         128-bit floating point software emulation or use ISA 3.0 hardware
>         support if it is available.
>
>         * config/rs6000/quad-float128.h: New file to support IEEE 128-bit
>         floating point.
>
>         * config/rs6000/extendkftf2-sw.c: New file, convert IEEE 128-bit
>         floating point to IBM extended double.
>
>         * config/rs6000/trunctfkf2-sw.c: New file, convert IBM extended
>         double to IEEE 128-bit floating point.
>
>         * config/rs6000/t-float128: New Makefile fragments to enable
>         building __float128 emulation support.
>         * config/rs6000/t-float128-hw: Likewise.
>
>         * config/rs6000/sfp-exceptions.c: New file to provide exception
>         support for IEEE 128-bit floating point.
>
>         * config/rs6000/floattikf.c: New files for converting between IEEE
>         128-bit floating point and signed/unsigned 128-bit integers.
>         * config/rs6000/fixunskfti.c: Likewise.
>         * config/rs6000/fixkfti.c: Likewise.
>         * config/rs6000/floatuntikf.c: Likewise.
>
>         * config/rs6000/sfp-machine.h (_FP_W_TYPE_SIZE): Use 64-bit types
>         when building on 64-bit systems, or when VSX is enabled.
>         (_FP_W_TYPE): Likewise.
>         (_FP_WS_TYPE): Likewise.
>         (_FP_I_TYPE): Likewise.
>         (TItype): Define on 64-bit systems.
>         (UTItype): Likewise.
>         (TI_BITS): Likewise.
>         (_FP_MUL_MEAT_D): Add support for using 64-bit types.
>         (_FP_MUL_MEAT_Q): Likewise.
>         (_FP_DIV_MEAT_D): Likewise.
>         (_FP_DIV_MEAT_Q): Likewise.
>         (_FP_NANFRAC_D): Likewise.
>         (_FP_NANFRAC_Q): Likewise.
>         (ISA_BIT): Add exception support if we are being compiled on a
>         machine with hardware floating point support to build the IEEE
>         128-bit emulation functions.
>         (FP_EX_INVALID): Likewise.
>         (FP_EX_OVERFLOW): Likewise.
>         (FP_EX_UNDERFLOW): Likewise.
>         (FP_EX_DIVZERO): Likewise.
>         (FP_EX_INEXACT): Likewise.
>         (FP_EX_ALL): Likewise.
>         (__sfp_handle_exceptions): Likewise.
>         (FP_HANDLE_EXCEPTIONS): Likewise.
>         (FP_RND_NEAREST): Likewise.
>         (FP_RND_ZERO): Likewise.
>         (FP_RND_PINF): Likewise.
>         (FP_RND_MINF): Likewise.
>         (FP_RND_MASK): Likewise.
>         (_FP_DECL_EX): Likewise.
>         (FP_INIT_ROUNDMODE): Likewise.
>         (FP_ROUNDMODE): Likewise.
>
>         * libgcc/config.host (powerpc*-*-linux*): If compiler can compile
>         VSX code, enable IEEE 128-bit floating point.  If the compiler can
>         compile IEEE 128-bit floating point code with ISA 3.0 IEEE 128-bit
>         floating point hardware instructions and it supports declaring
>         functions with the ifunc attribute, enable ifunc functions to
>         switch between software and hardware support.
>         * configure.ac (powerpc*-*-linux*): Likewise.
>         * configure: Regenerate.

Okay.

Thanks, David


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]