]> git.ipfire.org Git - thirdparty/glibc.git/commit
math: Don't redirect inlined builtin math functions
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 10 Nov 2025 13:28:56 +0000 (10:28 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 17 Nov 2025 14:17:07 +0000 (11:17 -0300)
commit13cfd77bf5679e8a888a63e233fb60529177b278
tree5a5df83fab6cd1d08f0a225a10a6cd39c2749f31
parenta0ce8b0779e290596e99ca6d96c301684a2d7cfe
math: Don't redirect inlined builtin math functions

When we want to inline builtin math functions, like truncf, for

  extern float truncf (float __x) __attribute__ ((__nothrow__ )) __attribute__ ((__const__));
  extern float __truncf (float __x) __attribute__ ((__nothrow__ )) __attribute__ ((__const__));

  float (truncf) (float) asm ("__truncf");

compiler may redirect truncf calls to __truncf, instead of inlining it
(for instance, clang).  The USE_TRUNCF_BUILTIN is 1 to indicate that
truncf should be inlined.  In this case, we don't want the truncf
redirection:

  1. For each math function which may be inlined, we define

  #if USE_TRUNCF_BUILTIN
   # define NO_truncf_BUILTIN inline_truncf
   #else
   # define NO_truncf_BUILTIN truncf
   #endif

in <math-use-builtins.h>.

  2. Include <math-use-builtins.h> in include/math.h.

  3. Change MATH_REDIRECT to

   #define MATH_REDIRECT(FUNC, PREFIX, ARGS) \
    float (NO_ ## FUNC ## f ## _BUILTIN) (ARGS (float)) \
      asm (PREFIX #FUNC "f");

With this change If USE_TRUNCF_BUILTIN is 0, we get

  float (truncf) (float) asm ("__truncf");
  truncf will be redirected to __truncf.

And for USE_TRUNCF_BUILTIN 1, we get:

  float (inline_truncf) (float) asm ("__truncf");

In both cases either truncf will be inlined or the internal alias
(__truncf) will be called.

It is not required for all math-use-builtin symbol, only the one
defined in math.h.  It also allows to remove all the math-use-builtin
inclusion, since it is now implicitly included by math.h.

For MIPS, some math-use-builtin headers include sysdep.h and this
in turn includes a lot of extra headers that do not allow ldbl-128
code to override alias definition (math.h will include
some stdlib.h definition).  The math-use-builtin only requires
the __mips_isa_rev, so move the defintion to sgidefs.h.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Co-authored-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
59 files changed:
include/math.h
math/s_fmax_template.c
math/s_fmin_template.c
sysdeps/generic/math-use-builtins-copysign.h
sysdeps/generic/math-use-builtins.h
sysdeps/ieee754/dbl-64/e_hypot.c
sysdeps/ieee754/dbl-64/e_sqrt.c
sysdeps/ieee754/dbl-64/s_ceil.c
sysdeps/ieee754/dbl-64/s_floor.c
sysdeps/ieee754/dbl-64/s_fma.c
sysdeps/ieee754/dbl-64/s_fmaf.c
sysdeps/ieee754/dbl-64/s_llrint.c
sysdeps/ieee754/dbl-64/s_llround.c
sysdeps/ieee754/dbl-64/s_logb.c
sysdeps/ieee754/dbl-64/s_lrint.c
sysdeps/ieee754/dbl-64/s_lround.c
sysdeps/ieee754/dbl-64/s_modf.c
sysdeps/ieee754/dbl-64/s_nearbyint.c
sysdeps/ieee754/dbl-64/s_rint.c
sysdeps/ieee754/dbl-64/s_round.c
sysdeps/ieee754/dbl-64/s_roundeven.c
sysdeps/ieee754/dbl-64/s_trunc.c
sysdeps/ieee754/float128/float128_private.h
sysdeps/ieee754/flt-32/s_ceilf.c
sysdeps/ieee754/flt-32/s_floorf.c
sysdeps/ieee754/flt-32/s_llrintf.c
sysdeps/ieee754/flt-32/s_llroundf.c
sysdeps/ieee754/flt-32/s_logbf.c
sysdeps/ieee754/flt-32/s_lrintf.c
sysdeps/ieee754/flt-32/s_lroundf.c
sysdeps/ieee754/flt-32/s_modff.c
sysdeps/ieee754/flt-32/s_nearbyintf.c
sysdeps/ieee754/flt-32/s_rintf.c
sysdeps/ieee754/flt-32/s_roundevenf.c
sysdeps/ieee754/flt-32/s_roundf.c
sysdeps/ieee754/flt-32/s_truncf.c
sysdeps/ieee754/ldbl-128/s_ceill.c
sysdeps/ieee754/ldbl-128/s_copysignl.c
sysdeps/ieee754/ldbl-128/s_floorl.c
sysdeps/ieee754/ldbl-128/s_fmal.c
sysdeps/ieee754/ldbl-128/s_llrintl.c
sysdeps/ieee754/ldbl-128/s_logbl.c
sysdeps/ieee754/ldbl-128/s_lrintl.c
sysdeps/ieee754/ldbl-128/s_nearbyintl.c
sysdeps/ieee754/ldbl-128/s_rintl.c
sysdeps/ieee754/ldbl-128/s_roundevenl.c
sysdeps/ieee754/ldbl-128/s_roundl.c
sysdeps/ieee754/ldbl-128/s_truncl.c
sysdeps/ieee754/ldbl-128ibm/s_fabsl.c
sysdeps/ieee754/ldbl-96/s_fabsl.c
sysdeps/mips/fpu/math-use-builtins-fma.h
sysdeps/mips/isarev.h [new file with mode: 0644]
sysdeps/mips/math-use-builtins-ffs.h
sysdeps/powerpc/fpu/e_sqrt.c
sysdeps/unix/mips/sysdep.h
sysdeps/x86_64/fpu/multiarch/s_modf-avx.c
sysdeps/x86_64/fpu/multiarch/s_modf-sse4_1.c
sysdeps/x86_64/fpu/multiarch/s_modff-avx.c
sysdeps/x86_64/fpu/multiarch/s_modff-sse4_1.c