mbox series

[v2,00/10] IEEE binary128 long double on powerpc64le

Message ID 20200327211801.31234-1-murphyp@linux.vnet.ibm.com
Headers show
Series IEEE binary128 long double on powerpc64le | expand

Message

Paul E. Murphy March 27, 2020, 9:17 p.m. UTC
New for V2:

Several preparatory patches have been merged, and three new
patches are added.

Notably, GCC 7.5.x is blacklisted as it cannot handle both
-mabi=* and -mlong-double-128 being passed without error.

Update install.texi and regenerate INSTALL per feedback from
JSM.

Cleanup some ugly loose ends in the ldbl-128ibm iscanonical.h,
and add documentation to, and rename __LONG_DOUBLE_USES_FLOAT128
to __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI.

The final 4 patches should be committed simultaneously, and will
be tested against the cross product of the following GCC versions
and CPU targets.

  {power8, power9, powerpc64le} x { GCC 7.3, 8.4, 9.3}

---8<---

This shuffles the powerpc64le Makefile around to support
building and testing the new long double format.  I consider
this support experimental as GNU libstc++ has some growing
pains to make -mfloat128 and -mabi=ieeelongdouble play nicely
togethor, and the runtime symbol selection may also need some
improvement (i.e dlopen/dlsym).  Nevertheless, this is the
start to making this feature available.

The first 3 patches fixup internal headers to ensure local
PLT usage works, and C++ tests continue to work.  Something
changed between g++ 8 and 9 which prevents the redirects from
working unless the headers are marked as system headers.

The majority of the powerpc64le patches refactor the common
ppc64le Makefile to ensure the correct ldouble/float128
compiler flags are applied when -mabi=ieeelongdouble is
applied globally, as should be the case in some future release.

Notably, the only explicit user of long double internally is
difftime.

Gabriel F. T. Gomes (1):
  powerpc64le: Enable support for IEEE long double

Paul E. Murphy (9):
  ldbl-128ibm-compat: workaround C++ redirect limitations
  ldbl-128ibm: simplify iscanonical.h
  Rename __LONG_DOUBLE_USES_FLOAT128 to
  powerpc64le: Enforce -mabi=ibmlongdouble when -mfloat128 used
  powerpc64le: workaround ieee long double / _Float128 stdc++ bug
  powerpc64le: raise GCC requirement to 7.3 for long double transition
  powerpc64le: bump binutils version requirement to >= 2.26
  powerpc64le: enforce non-specific long double in .gnu.attributes
    section
  powerpc64le: blacklist broken GCC compilers (e.g GCC 7.5.0)

 INSTALL                                       |   9 ++
 NEWS                                          |   8 +-
 argp/argp.h                                   |   2 +-
 bits/long-double.h                            |  15 +-
 elf/tst-addr1.c                               |   2 +-
 include/math.h                                |   6 +-
 include/monetary.h                            |   8 +
 include/printf.h                              |   8 +
 include/stdio.h                               |  16 +-
 include/stdlib.h                              |  11 +-
 include/sys/cdefs.h                           |   2 +-
 include/wchar.h                               |   9 ++
 libio/bits/stdio-ldbl.h                       |   4 +-
 libio/stdio.h                                 |   8 +-
 manual/install.texi                           |   9 ++
 math/complex.h                                |   4 +-
 math/math.h                                   |  12 +-
 math/test-ldouble.h                           |   2 +-
 misc/err.h                                    |   2 +-
 misc/error.h                                  |   2 +-
 misc/sys/cdefs.h                              |   4 +-
 misc/sys/syslog.h                             |   2 +-
 stdio-common/printf.h                         |   2 +-
 stdio-common/tst-vfprintf-user-type.c         |   2 +-
 stdlib/bits/stdlib-ldbl.h                     |   2 +-
 stdlib/monetary.h                             |   2 +-
 stdlib/stdlib.h                               |   2 +-
 sysdeps/ieee754/ldbl-128/bits/long-double.h   |   2 +-
 sysdeps/ieee754/ldbl-128ibm-compat/Makefile   |  12 --
 .../ldbl-128ibm-compat/bits/long-double.h     |   7 +-
 .../ieee754/ldbl-128ibm-compat/math_ldbl.h    |   2 +-
 .../ieee754/ldbl-128ibm/bits/iscanonical.h    |  10 +-
 sysdeps/ieee754/ldbl-128ibm/ieee754.h         |   6 +-
 .../ldbl-128ibm/include/bits/iscanonical.h    |   2 +-
 sysdeps/ieee754/ldbl-96/bits/long-double.h    |   2 +-
 sysdeps/ieee754/ldbl-opt/bits/long-double.h   |   2 +-
 sysdeps/mips/ieee754/bits/long-double.h       |   2 +-
 sysdeps/powerpc/fpu/libm-test-ulps            |   4 +
 sysdeps/powerpc/powerpc64/le/Implies-before   |   1 +
 sysdeps/powerpc/powerpc64/le/Makefile         | 130 ++++++++++-----
 sysdeps/powerpc/powerpc64/le/configure        | 151 ++++++++++++++++++
 sysdeps/powerpc/powerpc64/le/configure.ac     |  56 +++++++
 .../powerpc64/le/fpu/multiarch/Makefile       |   4 +-
 .../powerpc64/le/no_ldbl_gnu_attribute.c      |  30 ++++
 .../powerpc64/le/ldbl-128ibm-compat-abi.h     |   8 +
 .../linux/powerpc/powerpc64/le/libc.abilist   |  93 +++++++++++
 .../linux/powerpc/powerpc64/le/libm.abilist   | 117 ++++++++++++++
 .../linux/sparc/sparc32/bits/long-double.h    |   2 +-
 .../linux/sparc/sparc64/bits/long-double.h    |   2 +-
 wcsmbs/bits/wchar-ldbl.h                      |   4 +-
 wcsmbs/wchar.h                                |   8 +-
 51 files changed, 691 insertions(+), 121 deletions(-)
 create mode 100644 sysdeps/powerpc/powerpc64/le/no_ldbl_gnu_attribute.c
 create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ldbl-128ibm-compat-abi.h