Map long double built-ins correctly with IEEE 128-bit long double.
commite11e5d3889f9e54c547efee50fa1b72b50f0f265
authorMichael Meissner <meissner@linux.ibm.com>
Thu, 28 Jan 2021 16:30:46 +0000 (28 11:30 -0500)
committerMichael Meissner <meissner@linux.ibm.com>
Thu, 28 Jan 2021 16:30:46 +0000 (28 11:30 -0500)
tree619107109b36ebadb39cbcfb7de2e9749753b0bb
parent6bb207b468da36d9d99c63409dc4098514759c90
Map long double built-ins correctly with IEEE 128-bit long double.

The PowerPC has two different 128-bit long double types, one that uses a pair
of doubles to get more mantissa range, and the other using the IEEE 128-bit
754R binary floating point format.  The pair of doubles has been used as the
traditional format, and we are in the process of moving to allow an
implementation to switch to using IEEE 128-bit floating point.  The GLIBC and
LIBSTDC++ libraries have been modified to have functions using the two
different formats in their libraries with different names.

This patch goes through all of the built-in functions that either take long
double arguments or return long double, and changes the name from the
traditional name to the IEEE 128-bit name.  The minimum GLIBC version to
support IEEE 128-bit floating point is 2.32.

The names changed are:

    * <name>l is usually mapped to __<name>ieee128;
    * <extra>printf is mapped to __<extra>printfieee128; (and)
    * <extra>scanf is mapped to __isoc99_<extra>scanfieee128.

A few functions have different mappings:

    * dreml => __remainderieee128;
    * gammal => __lgammaieee128;
    * gammal_r => __lgammaieee128_r;
    * lgammal_r => __lgammaieee128_r;
    * nexttoward => __nexttoward_to_ieee128;
    * nexttowardf => __nexttowardf_to_ieee128;
    * nexttowardl => __nexttowardl_to_ieee128;
    * pow10l => __exp10ieee128;
    * scalbl => __scalbieee128;
    * significandl => __significandieee128; (and)
    * sincosl => __sincosieee128.

gcc/
2021-01-28  Michael Meissner  <meissner@linux.ibm.com>

* config/rs6000/rs6000.c (rs6000_mangle_decl_assembler_name): Add
support for mapping built-in function names for long double
built-in functions if long double is IEEE 128-bit.

gcc/testsuite/
2021-01-28  Michael Meissner  <meissner@linux.ibm.com>

* gcc.target/powerpc/float128-longdouble-math.c: New test.
* gcc.target/powerpc/float128-longdouble-stdio.c: New test.
* gcc.target/powerpc/float128-math.c: Adjust test for new name
being generated.  Add support for running test on power10.  Add
support for running if long double defaults to 64-bits.
gcc/config/rs6000/rs6000.c
gcc/testsuite/gcc.target/powerpc/float128-longdouble-math.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/float128-longdouble-stdio.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/float128-math.c