public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v4 0/5] Improve libm.a static coverage
@ 2024-05-21 16:52 Adhemerval Zanella
  2024-05-21 16:52 ` [PATCH v4 1/5] math: Add support for auto static math tests Adhemerval Zanella
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Adhemerval Zanella @ 2024-05-21 16:52 UTC (permalink / raw)
  To: libc-alpha; +Cc: H . J . Lu

Some recent math optimizations removed some symbols from the static
build and due to the limited static build check, along with
--disable-shared being broken for some time [1], this issue has slipped
some releases.

Although the fix is straightforward, I added an extra framework to
enable static build for math libraries using the generic type
framework (which autogenerated the tests for all supported types using
the C template files). I have not enabled it for all tests due to the
required extra size constraint, this is done with a new define that
can be used with make check (build-math-static-tests).

As an experiment, I enabled static build for all autogenerated math
tests. This has uncovered some extra missing symbols on some ABIs, along
with some issues with implementation used on static for some ABIs.  On
x86_64/i686 it shows that the assembly optimizations for acos, log10,
log2, and ldbl-96 y0/y1 show some issues:

  x86_64-linux-gnu$ grep ^FAIL math/subdir-tests.sum
  FAIL: math/test-float64x-acos-static
  FAIL: math/test-float64x-log10-static
  FAIL: math/test-float64x-log2-static
  FAIL: math/test-float64x-y0-static
  FAIL: math/test-float64x-y1-static
  FAIL: math/test-ldouble-acos-static
  FAIL: math/test-ldouble-log10-static
  FAIL: math/test-ldouble-log2-static
  FAIL: math/test-ldouble-y0-static
  FAIL: math/test-ldouble-y1-static
  
  i686-linux-gnu$ grep ^FAIL math/subdir-tests.sum
  FAIL: math/test-double-atanh-static
  FAIL: math/test-float-atanh-static
  FAIL: math/test-float32-atanh-static
  FAIL: math/test-float32x-atanh-static
  FAIL: math/test-float64-atanh-static
  FAIL: math/test-float64x-acos-static
  FAIL: math/test-float64x-acosh-static
  FAIL: math/test-float64x-atanh-static
  FAIL: math/test-float64x-log10-static
  FAIL: math/test-float64x-log2-static
  FAIL: math/test-float64x-y0-static
  FAIL: math/test-float64x-y1-static
  FAIL: math/test-ldouble-acos-static
  FAIL: math/test-ldouble-acosh-static
  FAIL: math/test-ldouble-atanh-static
  FAIL: math/test-ldouble-log10-static
  FAIL: math/test-ldouble-log2-static
  FAIL: math/test-ldouble-y0-static
  FAIL: math/test-ldouble-y1-static

The powerpc64le also shows multiple issues with the static linking
(using gcc 13.1):

  FAIL: math/test-float128-exp10-static
  FAIL: math/test-float64x-exp10-static
  FAIL: math/test-ibm128-acos-static
  FAIL: math/test-ibm128-copysign-static
  FAIL: math/test-ibm128-exp10-static
  FAIL: math/test-ibm128-fmod-static
  FAIL: math/test-ibm128-frexp-static
  FAIL: math/test-ibm128-modf-static
  [...]

I have not analyzed what is happening, but it might be due to the
'-mabi=ibmlongdouble' along with how libgcc.a was built (I saw some
issues on GCC bugzilla).

I also tested this patchset with build-math-static-tests=yes for all
ABIs, and there is not more build failures.

[1] https://sourceware.org/bugzilla/show_bug.cgi?id=20845

Adhemerval Zanella (5):
  math: Add support for auto static math tests
  math: Fix isnanf128 static build (BZ 31774)
  math: Provided copysignf128 for static libm on alpha, s390, and
    sparcv9
  math: Provide frexpf128 for static libm on alpha, s390, and sparcv9
  math: Provide modf128 for static libm on alpha, s390, and sparcv9

 Makeconfig                                |   5 +
 Makefile.help                             |   4 +
 math/Makefile                             | 120 +++++++++++++++++++++-
 math/test-double-static.h                 |   1 +
 math/test-float-static.h                  |   1 +
 math/test-float128-static.h               |   1 +
 math/test-float32-static.h                |   1 +
 math/test-float32x-static.h               |   1 +
 math/test-float64-static.h                |   1 +
 math/test-float64x-static.h               |   1 +
 math/test-ibm128-static.h                 |   1 +
 math/test-ldouble-static.h                |   1 +
 sysdeps/ieee754/float128/s_isnanf128.c    |   4 +
 sysdeps/ieee754/ldbl-64-128/s_copysignl.c |   4 +-
 sysdeps/ieee754/ldbl-64-128/s_frexpl.c    |   4 +-
 sysdeps/ieee754/ldbl-64-128/s_modfl.c     |   4 +-
 16 files changed, 143 insertions(+), 11 deletions(-)
 create mode 100644 math/test-double-static.h
 create mode 100644 math/test-float-static.h
 create mode 100644 math/test-float128-static.h
 create mode 100644 math/test-float32-static.h
 create mode 100644 math/test-float32x-static.h
 create mode 100644 math/test-float64-static.h
 create mode 100644 math/test-float64x-static.h
 create mode 100644 math/test-ibm128-static.h
 create mode 100644 math/test-ldouble-static.h

-- 
2.43.0


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2024-05-21 20:05 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-21 16:52 [PATCH v4 0/5] Improve libm.a static coverage Adhemerval Zanella
2024-05-21 16:52 ` [PATCH v4 1/5] math: Add support for auto static math tests Adhemerval Zanella
2024-05-21 19:12   ` H.J. Lu
2024-05-21 16:52 ` [PATCH v4 2/5] math: Fix isnanf128 static build (BZ 31774) Adhemerval Zanella
2024-05-21 17:32   ` H.J. Lu
2024-05-21 16:52 ` [PATCH v4 3/5] math: Provided copysignf128 for static libm on alpha, s390, and sparcv9 Adhemerval Zanella
2024-05-21 17:34   ` H.J. Lu
2024-05-21 19:52     ` Adhemerval Zanella Netto
2024-05-21 20:05       ` H.J. Lu
2024-05-21 16:52 ` [PATCH v4 4/5] math: Provide frexpf128 " Adhemerval Zanella
2024-05-21 16:52 ` [PATCH v4 5/5] math: Provide modf128 " Adhemerval Zanella
2024-05-21 17:35   ` H.J. Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).