Skip to content
Snippets Groups Projects
  • Jakub Jelinek's avatar
    1868599f
    libgfortran: Provide some further math library fallbacks [PR94694] · 1868599f
    Jakub Jelinek authored
    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.
    1868599f
    History
    libgfortran: Provide some further math library fallbacks [PR94694]
    Jakub Jelinek authored
    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.