New exp10f version without SVID compat wrapper

This patch changes the exp10f error handling semantics to only set
errno according to POSIX rules.  New symbol version is introduced at
GLIBC_2.32.  The old wrappers are kept for compat symbols.

There are some outliers that need special handling:

  - ia64 provides an optimized implementation of exp10f that uses ia64
    specific routines to set SVID compatibility.  The new symbol version
    is aliased to the exp10f one.

  - m68k also provides an optimized implementation, and the new version
    uses it instead of the sysdeps/ieee754/flt32 one.

  - riscv and csky uses the generic template implementation that
    does not provide SVID support.  For both cases a new exp10f
    version is not added, but rather the symbols version of the
    generic sysdeps/ieee754/flt32 is adjusted instead.

Checked on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
powerpc64le-linux-gnu.
This commit is contained in:
Adhemerval Zanella 2020-04-08 19:51:44 -03:00
parent 4b2d8e4442
commit be668a8d78
33 changed files with 64 additions and 8 deletions

View File

@ -590,4 +590,7 @@ libm {
totalorderf128; totalorderf128;
totalordermagf128; totalordermagf128;
} }
GLIBC_2.32 {
exp10f;
}
} }

1
math/w_exp10f.c Normal file
View File

@ -0,0 +1 @@
/* Empty. */

View File

@ -28,9 +28,9 @@
#if LIBM_SVID_COMPAT #if LIBM_SVID_COMPAT
float float
__exp10f (float x) __exp10f_compat (float x)
{ {
float z = __ieee754_exp10f (x); float z = __exp10f (x);
if (__builtin_expect (!isfinite (z) || z == 0, 0) if (__builtin_expect (!isfinite (z) || z == 0, 0)
&& isfinite (x) && _LIB_VERSION != _IEEE_) && isfinite (x) && _LIB_VERSION != _IEEE_)
/* exp10f overflow (146) if x > 0, underflow (147) if x < 0. */ /* exp10f overflow (146) if x > 0, underflow (147) if x < 0. */
@ -38,9 +38,9 @@ __exp10f (float x)
return z; return z;
} }
libm_alias_float (__exp10, exp10) compat_symbol (libm, __exp10f_compat, exp10f, GLIBC_2_1);
# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27) # if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27)
strong_alias (__exp10f, __pow10f) strong_alias (__exp10f_compat, __pow10f)
compat_symbol (libm, __pow10f, pow10f, GLIBC_2_1); compat_symbol (libm, __pow10f, pow10f, GLIBC_2_1);
# endif # endif
#endif #endif

View File

@ -218,7 +218,7 @@ LOCAL_OBJECT_END(T_table)
.section .text .section .text
GLOBAL_IEEE754_ENTRY(exp10f) GLOBAL_IEEE754_ENTRY(__exp10f)
{.mfi {.mfi
@ -487,11 +487,17 @@ OUT_RANGE_exp10:
} }
;; ;;
GLOBAL_IEEE754_END(exp10f) GLOBAL_IEEE754_END(__exp10f)
libm_alias_float_other (__exp10, exp10) libm_alias_float_other (__exp10, exp10)
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27) #if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27)
compat_symbol (libm, exp10f, pow10f, GLIBC_2_2) strong_alias (__exp10f, __pow10f_compat)
compat_symbol (libm, __pow10f_compat, pow10f, GLIBC_2_2)
#endif #endif
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_32)
strong_alias (__exp10f, __exp10f_compat)
compat_symbol (libm, __exp10f_compat, exp10f, GLIBC_2_1)
#endif
versioned_symbol (libm, __exp10f, exp10f, GLIBC_2_32)
LOCAL_LIBM_ENTRY(__libm_error_region) LOCAL_LIBM_ENTRY(__libm_error_region)

View File

@ -21,6 +21,8 @@
#include <stdint.h> #include <stdint.h>
#include <libm-alias-finite.h> #include <libm-alias-finite.h>
#include <libm-alias-float.h> #include <libm-alias-float.h>
#include <shlib-compat.h>
#include <math-svid-compat.h>
#include "math_config.h" #include "math_config.h"
/* /*
@ -139,7 +141,7 @@ top13 (float x)
} }
float float
__ieee754_exp10f (float x) __exp10f (float x)
{ {
uint32_t abstop; uint32_t abstop;
uint64_t ki, t; uint64_t ki, t;
@ -195,4 +197,16 @@ __ieee754_exp10f (float x)
y = y * s; y = y * s;
return (float) y; return (float) y;
} }
#ifndef __exp10f
strong_alias (__exp10f, __ieee754_exp10f)
libm_alias_finite (__ieee754_exp10f, __exp10f) libm_alias_finite (__ieee754_exp10f, __exp10f)
/* For architectures that already provided exp10f without SVID support, there
is no need to add a new version. */
#if !LIBM_SVID_COMPAT
# define EXP10F_VERSION GLIBC_2_26
#else
# define EXP10F_VERSION GLIBC_2_32
#endif
versioned_symbol (libm, __exp10f, exp10f, EXP10F_VERSION);
libm_alias_float_other (__exp10, exp10)
#endif

View File

@ -1,3 +1,8 @@
#include <libm-alias-float.h>
#define FUNC __ieee754_exp10f #define FUNC __ieee754_exp10f
#define FUNC_FINITE __exp10f #define FUNC_FINITE __exp10f
#include <e_acosf.c> #include <e_acosf.c>
strong_alias (__ieee754_exp10f, __exp10f)
libm_alias_finite (__ieee754_exp10f, __exp10f)
versioned_symbol (libm, __exp10f, exp10f, GLIBC_2_32);
libm_alias_float_other (__ieee754_exp10, exp10)

View File

@ -1089,3 +1089,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F

View File

@ -1053,3 +1053,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F

View File

@ -1110,6 +1110,7 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 __clog10l F GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F GLIBC_2.4 __fpclassifyl F

View File

@ -470,6 +470,7 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 _LIB_VERSION D 0x4 GLIBC_2.4 _LIB_VERSION D 0x4
GLIBC_2.4 __clog10 F GLIBC_2.4 __clog10 F
GLIBC_2.4 __clog10f F GLIBC_2.4 __clog10f F

View File

@ -470,6 +470,7 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 _LIB_VERSION D 0x4 GLIBC_2.4 _LIB_VERSION D 0x4
GLIBC_2.4 __clog10 F GLIBC_2.4 __clog10 F
GLIBC_2.4 __clog10f F GLIBC_2.4 __clog10f F

View File

@ -781,4 +781,5 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 exp2l F GLIBC_2.4 exp2l F

View File

@ -1096,3 +1096,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F

View File

@ -1026,3 +1026,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F

View File

@ -470,6 +470,7 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 _LIB_VERSION D 0x4 GLIBC_2.4 _LIB_VERSION D 0x4
GLIBC_2.4 __clog10 F GLIBC_2.4 __clog10 F
GLIBC_2.4 __clog10f F GLIBC_2.4 __clog10f F

View File

@ -821,3 +821,4 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F

View File

@ -782,3 +782,4 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F

View File

@ -782,3 +782,4 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F

View File

@ -781,4 +781,5 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 exp2l F GLIBC_2.4 exp2l F

View File

@ -1053,3 +1053,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F

View File

@ -782,3 +782,4 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F

View File

@ -827,6 +827,7 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 __clog10l F GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F GLIBC_2.4 __fpclassifyl F

View File

@ -826,6 +826,7 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 __clog10l F GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F GLIBC_2.4 __fpclassifyl F

View File

@ -820,6 +820,7 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 __clog10l F GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F GLIBC_2.4 __fpclassifyl F

View File

@ -1214,3 +1214,4 @@ GLIBC_2.32 __ufromfpxieee128 F
GLIBC_2.32 __y0ieee128 F GLIBC_2.32 __y0ieee128 F
GLIBC_2.32 __y1ieee128 F GLIBC_2.32 __y1ieee128 F
GLIBC_2.32 __ynieee128 F GLIBC_2.32 __ynieee128 F
GLIBC_2.32 exp10f F

View File

@ -1054,6 +1054,7 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 __clog10l F GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F GLIBC_2.4 __fpclassifyl F

View File

@ -1054,6 +1054,7 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 __clog10l F GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F GLIBC_2.4 __fpclassifyl F

View File

@ -781,4 +781,5 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 exp2l F GLIBC_2.4 exp2l F

View File

@ -781,4 +781,5 @@ GLIBC_2.31 totalordermagf32 F
GLIBC_2.31 totalordermagf32x F GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 exp2l F GLIBC_2.4 exp2l F

View File

@ -1061,6 +1061,7 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F
GLIBC_2.4 __clog10l F GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F GLIBC_2.4 __fpclassifyl F

View File

@ -1053,3 +1053,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F

View File

@ -1087,3 +1087,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F

View File

@ -1087,3 +1087,4 @@ GLIBC_2.31 totalordermagf32x F
GLIBC_2.31 totalordermagf64 F GLIBC_2.31 totalordermagf64 F
GLIBC_2.31 totalordermagf64x F GLIBC_2.31 totalordermagf64x F
GLIBC_2.31 totalordermagl F GLIBC_2.31 totalordermagl F
GLIBC_2.32 exp10f F