libgfortran: Provide some further math library fallbacks [PR94694]
authorJakub Jelinek <jakub@redhat.com>
Wed, 22 Apr 2020 17:17:15 +0000 (19:17 +0200)
committerJakub Jelinek <jakub@redhat.com>
Wed, 22 Apr 2020 19:34:19 +0000 (21:34 +0200)
commit1868599f8daf7798018ce8a8f314015f5a2ac520
tree4a9e4d8e1017d6bc4c3f1de3eaff89af049d9c90
parent545f1addf7247a800bbb943650efaa4c35d3bd1d
libgfortran: Provide some further math library fallbacks [PR94694]

The following patch provides some further math library fallbacks.
fmaf can be implemented using fma if available, fma and fmal can use
x * y + z as fallback, it is not perfect, but e.g. glibc on various arches
has been using that as fallback for many years,
and copysign/copysignl/fabs/fabsl can be implemented using corresponding
__builtin_* if we make sure that gcc expands it inline instead of using
a library call (these days it is expanded inline on most targets).

2020-04-22  Jakub Jelinek  <jakub@redhat.com>

PR libfortran/94694
PR libfortran/94586
* configure.ac: Add math func checks for fmaf, fma and fmal.  Add
HAVE_INLINE_BUILTIN_COPYSIGN check.
* c99_protos.h (copysign, fmaf, fma, fmal): Provide fallback
prototypes.
(HAVE_COPYSIGN, HAVE_FMAF, HAVE_FMA, HAVE_FMAL): Define if not
defined and fallback version is provided.
* intrinsics/c99_functions.c (copysign, fmaf, fma, fmal): Provide
fallback implementations if possible
* configure: Regenerated.
* config.h.in: Regenerated.

* math.m4 (GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1,
GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2): New.
config/ChangeLog
config/math.m4
libgfortran/ChangeLog
libgfortran/c99_protos.h
libgfortran/config.h.in
libgfortran/configure
libgfortran/configure.ac
libgfortran/intrinsics/c99_functions.c