diff options
author | Joseph Myers <joseph@codesourcery.com> | 2021-09-30 20:40:34 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2021-09-30 20:40:34 +0000 |
commit | 52c057e37c3e0d1451f1c1cc0465eddee6cf236d (patch) | |
tree | 6ddd3bdcf0c535535da54268e43339070e3a594d /math | |
parent | 1e1ecea62e899acb58c3fdf3b320a0833ddd0dff (diff) | |
download | glibc-52c057e37c3e0d1451f1c1cc0465eddee6cf236d.tar.gz glibc-52c057e37c3e0d1451f1c1cc0465eddee6cf236d.tar.xz glibc-52c057e37c3e0d1451f1c1cc0465eddee6cf236d.zip |
Add exp10 macro to <tgmath.h> (bug 26108)
glibc has had exp10 functions since long before they were standardized; now they are standardized in TS 18661-4 and C2X, they are also specified there to have a corresponding type-generic macro. Add one to <tgmath.h>, so fixing bug 26108. glibc doesn't have other functions from TS 18661-4 yet, but when added, it will be natural to add the type-generic macro for each function family at the same time as the functions. Tested for x86_64.
Diffstat (limited to 'math')
-rw-r--r-- | math/Makefile | 6 | ||||
-rwxr-xr-x | math/gen-tgmath-tests.py | 2 | ||||
-rw-r--r-- | math/test-tgmath.c | 12 | ||||
-rw-r--r-- | math/tgmath.h | 5 |
4 files changed, 21 insertions, 4 deletions
diff --git a/math/Makefile b/math/Makefile index af734d41c4..e19f4ec343 100644 --- a/math/Makefile +++ b/math/Makefile @@ -374,9 +374,9 @@ $(foreach t,$(libm-tests-base),\ tgmath3-narrow-types = f d f16 f32 f64 f128 f32x f64x tgmath3-narrow-macros = $(foreach t,$(tgmath3-narrow-types), \ $(foreach f,$(libm-narrow-fns),$(t)$(f))) -tgmath3-macros = atan2 cbrt ceil copysign erf erfc exp2 expm1 fdim floor \ - fma fmax fmin fmod frexp hypot ilogb ldexp lgamma llrint \ - llround log10 log1p log2 logb lrint lround nearbyint \ +tgmath3-macros = atan2 cbrt ceil copysign erf erfc exp10 exp2 expm1 fdim \ + floor fma fmax fmin fmod frexp hypot ilogb ldexp lgamma \ + llrint llround log10 log1p log2 logb lrint lround nearbyint \ nextafter nexttoward remainder remquo rint round scalbn \ scalbln tgamma trunc acos asin atan acosh asinh atanh cos \ sin tan cosh sinh tanh exp log pow sqrt fabs carg cimag conj \ diff --git a/math/gen-tgmath-tests.py b/math/gen-tgmath-tests.py index d433b484b8..53d5a54767 100755 --- a/math/gen-tgmath-tests.py +++ b/math/gen-tgmath-tests.py @@ -707,6 +707,8 @@ class Tests(object): ('_Float32x', 'f32x'), ('_Float64x', 'f64x')): self.add_tests(prefix + fn, ret, ['r'] * args) + # TS 18661-4 functions. + self.add_tests('exp10', 'r', ['r']) # C2X functions. self.add_tests('fmaximum', 'r', ['r', 'r']) self.add_tests('fmaximum_mag', 'r', ['r', 'r']) diff --git a/math/test-tgmath.c b/math/test-tgmath.c index f9b5fc640f..678a174bca 100644 --- a/math/test-tgmath.c +++ b/math/test-tgmath.c @@ -48,7 +48,7 @@ volatile int count_cdouble; volatile int count_cfloat; volatile int count_cldouble; -#define NCALLS 156 +#define NCALLS 158 #define NCALLS_INT 4 #define NCCALLS 47 @@ -253,6 +253,7 @@ F(compile_test) (void) a = log1p (log1p (x)); b = logb (logb (a)); a = exp2 (exp2 (x)); + a = exp10 (exp10 (x)); b = log2 (log2 (a)); a = pow (pow (x, a), pow (c, b)); b = sqrt (sqrt (a)); @@ -365,6 +366,7 @@ F(compile_test) (void) a = log1p (y); a = logb (y); a = exp2 (y); + a = exp10 (y); a = log2 (y); a = pow (y, y); a = sqrt (y); @@ -616,6 +618,14 @@ TYPE } TYPE +(F(exp10)) (TYPE x) +{ + ++count; + P (); + return x; +} + +TYPE (F(exp2)) (TYPE x) { ++count; diff --git a/math/tgmath.h b/math/tgmath.h index e8042833dd..13c7022275 100644 --- a/math/tgmath.h +++ b/math/tgmath.h @@ -785,6 +785,11 @@ /* Compute base-2 logarithm of X. */ #define log2(Val) __TGMATH_UNARY_REAL_ONLY (Val, log2) +#if __GLIBC_USE (IEC_60559_FUNCS_EXT_C2X) +/* Compute exponent to base ten. */ +#define exp10(Val) __TGMATH_UNARY_REAL_ONLY (Val, exp10) +#endif + /* Power functions. */ |