Implement C23 logp1

C23 adds various <math.h> function families originally defined in TS
18661-4.  Add the logp1 functions (aliases for log1p functions - the
name is intended to be more consistent with the new log2p1 and
log10p1, where clearly it would have been very confusing to name those
functions log21p and log101p).  As aliases rather than new functions,
the content of this patch is somewhat different from those actually
adding new functions.

Tests are shared with log1p, so this patch *does* mechanically update
all affected libm-test-ulps files to expect the same errors for both
functions.

The vector versions of log1p on aarch64 and x86_64 are *not* updated
to have logp1 aliases (and thus there are no corresponding header,
tests, abilist or ulps changes for vector functions either).  It would
be reasonable for such vector aliases and corresponding changes to
other files to be made separately.  For now, the log1p tests instead
avoid testing logp1 in the vector case (a Makefile change is needed to
avoid problems with grep, used in generating the .c files for vector
function tests, matching more than one ALL_RM_TEST line in a file
testing multiple functions with the same inputs, when it assumes that
the .inc file only has a single such line).

Tested for x86_64 and x86, and with build-many-glibcs.py.
This commit is contained in:
Joseph Myers 2024-06-17 13:47:09 +00:00
parent ca38eff280
commit bb014f50c4
80 changed files with 725 additions and 12 deletions

2
NEWS
View File

@ -26,7 +26,7 @@ Major new features:
functions for float, double, long double, _FloatN and _FloatNx, and a
type-generic macro in <tgmath.h>.
- Logarithmic functions: log2p1.
- Logarithmic functions: log2p1, logp1.
* A new tunable, glibc.rtld.enable_secure, used to run a program
as if it were a setuid process. This is currently a testing tool to allow

View File

@ -745,13 +745,25 @@ to subtraction of two numbers that are nearly equal.
@deftypefunx {long double} log1pl (long double @var{x})
@deftypefunx _FloatN log1pfN (_Float@var{N} @var{x})
@deftypefunx _FloatNx log1pfNx (_Float@var{N}x @var{x})
@deftypefunx double logp1 (double @var{x})
@deftypefunx float logp1f (float @var{x})
@deftypefunx {long double} logp1l (long double @var{x})
@deftypefunx _FloatN logp1fN (_Float@var{N} @var{x})
@deftypefunx _FloatNx logp1fNx (_Float@var{N}x @var{x})
@standards{ISO, math.h}
@standardsx{log1pfN, TS 18661-3:2015, math.h}
@standardsx{log1pfNx, TS 18661-3:2015, math.h}
@standardsx{logp1, TS 18661-4:2015, math.h}
@standardsx{logp1f, TS 18661-4:2015, math.h}
@standardsx{logp1l, TS 18661-4:2015, math.h}
@standardsx{logp1fN, TS 18661-4:2015, math.h}
@standardsx{logp1fNx, TS 18661-4:2015, math.h}
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return a value equivalent to @w{@code{log (1 + @var{x})}}.
They are computed in a way that is accurate even if @var{x} is
near zero.
The @code{logp1} names for these functions are from TS 18661-4:2015.
@end deftypefun
@deftypefun double log2p1 (double @var{x})

View File

@ -966,6 +966,7 @@ tgmath3-macros = \
log2 \
log2p1 \
logb \
logp1 \
lrint \
lround \
nearbyint \
@ -1145,7 +1146,7 @@ $(foreach t,$(libm-tests-vector),$(objpfx)$(t).c): $(objpfx)test-%.c:
type_func=$*; \
type=$${type_func%-*}; \
func=$${type_func##*-}; \
func_args=$$(grep ALL_RM_TEST libm-test-$$func.inc \
func_args=$$(grep "ALL_RM_TEST ($$func," libm-test-$$func.inc \
| sed 's/.*RUN_TEST_LOOP_//;s/_.*//'); \
( \
echo "#include <test-$$type.h>"; \
@ -1375,7 +1376,7 @@ CFLAGS-s_llrint.c += -fno-builtin-llrintl
CFLAGS-s_llround.c += -fno-builtin-llroundl
CFLAGS-e_log.c += -fno-builtin-logl
CFLAGS-w_log10.c += -fno-builtin-log10l
CFLAGS-w_log1p.c += -fno-builtin-log1pl
CFLAGS-w_log1p.c += -fno-builtin-log1pl -fno-builtin-logp1l
CFLAGS-e_log2.c += -fno-builtin-log2l
CFLAGS-s_log2p1.c += -fno-builtin-log2p1l
CFLAGS-s_logb.c += -fno-builtin-logbl
@ -1501,7 +1502,7 @@ CFLAGS-s_llrint.c += -fno-builtin-llrintf32x -fno-builtin-llrintf64
CFLAGS-s_llround.c += -fno-builtin-llroundf32x -fno-builtin-llroundf64
CFLAGS-e_log.c += -fno-builtin-logf32x -fno-builtin-logf64
CFLAGS-w_log10.c += -fno-builtin-log10f32x -fno-builtin-log10f64
CFLAGS-w_log1p.c += -fno-builtin-log1pf32x -fno-builtin-log1pf64
CFLAGS-w_log1p.c += -fno-builtin-log1pf32x -fno-builtin-log1pf64 -fno-builtin-logp1f32x -fno-builtin-logp1f64
CFLAGS-e_log2.c += -fno-builtin-log2f32x -fno-builtin-log2f64
CFLAGS-s_log2p1.c += -fno-builtin-log2p1f32x -fno-builtin-log2p1f64
CFLAGS-s_logb.c += -fno-builtin-logbf32x -fno-builtin-logbf64
@ -1616,7 +1617,7 @@ CFLAGS-s_llrintf.c += -fno-builtin-llrintf32
CFLAGS-s_llroundf.c += -fno-builtin-llroundf32
CFLAGS-e_logf.c += -fno-builtin-logf32
CFLAGS-w_log10f.c += -fno-builtin-log10f32
CFLAGS-w_log1pf.c += -fno-builtin-log1pf32
CFLAGS-w_log1pf.c += -fno-builtin-log1pf32 -fno-builtin-logp1f32
CFLAGS-e_log2f.c += -fno-builtin-log2f32
CFLAGS-s_log2p1f.c += -fno-builtin-log2p1f32
CFLAGS-s_logbf.c += -fno-builtin-logbf32

View File

@ -642,7 +642,9 @@ libm {
GLIBC_2.40 {
# Functions not involving _Float64x or _Float128, for all configurations.
log2p1; log2p1f; log2p1l; log2p1f32; log2p1f64; log2p1f32x;
logp1; logp1f; logp1l; logp1f32; logp1f64; logp1f32x;
# Functions involving _Float64x or _Float128, for some configurations.
log2p1f64x; log2p1f128;
logp1f64x; logp1f128;
}
}

View File

@ -115,6 +115,9 @@ __MATHCALL_VEC (exp10,, (_Mdouble_ __x));
/* Return log2(1 + X). */
__MATHCALL (log2p1,, (_Mdouble_ __x));
/* Return log(1 + X). */
__MATHCALL (logp1,, (_Mdouble_ __x));
#endif
#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99

View File

@ -744,6 +744,7 @@ class Tests(object):
# TS 18661-4 functions.
self.add_tests('exp10', 'r', ['r'])
self.add_tests('log2p1', 'r', ['r'])
self.add_tests('logp1', 'r', ['r'])
# C23 functions.
self.add_tests('fmaximum', 'r', ['r', 'r'])
self.add_tests('fmaximum_mag', 'r', ['r', 'r'])

View File

@ -40,10 +40,22 @@ log1p_test (void)
ALL_RM_TEST (log1p, 0, log1p_test_data, RUN_TEST_LOOP_f_f, END);
}
#if !TEST_MATHVEC
static void
logp1_test (void)
{
/* logp1 uses the same test data as log1p. */
ALL_RM_TEST (logp1, 0, log1p_test_data, RUN_TEST_LOOP_f_f, END);
}
#endif
static void
do_test (void)
{
log1p_test ();
#if !TEST_MATHVEC
logp1_test ();
#endif
}
/*

View File

@ -48,7 +48,7 @@ volatile int count_cdouble;
volatile int count_cfloat;
volatile int count_cldouble;
#define NCALLS 160
#define NCALLS 162
#define NCALLS_INT 4
#define NCCALLS 47
@ -256,6 +256,7 @@ F(compile_test) (void)
a = exp10 (exp10 (x));
b = log2 (log2 (a));
a = log2p1 (log2p1 (x));
a = logp1 (logp1 (x));
a = pow (pow (x, a), pow (c, b));
b = sqrt (sqrt (a));
a = hypot (hypot (x, b), hypot (c, a));
@ -370,6 +371,7 @@ F(compile_test) (void)
a = exp10 (y);
a = log2 (y);
a = log2p1 (y);
a = logp1 (y);
a = pow (y, y);
a = sqrt (y);
a = hypot (y, y);
@ -651,6 +653,14 @@ TYPE
return x;
}
TYPE
(F(logp1)) (TYPE x)
{
++count;
P ();
return x;
}
TYPE
(F(pow)) (TYPE x, TYPE y)
{

View File

@ -877,6 +877,9 @@
/* Return log2(1 + X). */
#define log2p1(Val) __TGMATH_UNARY_REAL_ONLY (Val, log2p1)
/* Return log(1 + X). */
#define logp1(Val) __TGMATH_UNARY_REAL_ONLY (Val, logp1)
#endif

View File

@ -33,3 +33,5 @@ M_DECL_FUNC (__w_log1p) (FLOAT x)
return M_SUF (__log1p) (x);
}
declare_mgen_alias (__w_log1p, log1p)
strong_alias (M_SUF (__w_log1p), M_SUF (__w_logp1))
declare_mgen_alias (__w_logp1, logp1)

View File

@ -1412,6 +1412,26 @@ double: 1
float: 2
ldouble: 1
Function: "logp1":
double: 1
float: 1
ldouble: 3
Function: "logp1_downward":
double: 1
float: 2
ldouble: 3
Function: "logp1_towardzero":
double: 2
float: 2
ldouble: 3
Function: "logp1_upward":
double: 2
float: 2
ldouble: 2
Function: "pow":
double: 1
float: 1

View File

@ -1221,6 +1221,26 @@ double: 1
float: 2
ldouble: 1
Function: "logp1":
double: 1
float: 1
ldouble: 3
Function: "logp1_downward":
double: 2
float: 2
ldouble: 3
Function: "logp1_towardzero":
double: 2
float: 2
ldouble: 3
Function: "logp1_upward":
double: 2
float: 2
ldouble: 2
Function: "pow":
double: 1
float: 1

View File

@ -979,6 +979,22 @@ Function: "log_upward":
double: 1
float: 1
Function: "logp1":
double: 1
float: 1
Function: "logp1_downward":
double: 1
float: 2
Function: "logp1_towardzero":
double: 2
float: 2
Function: "logp1_upward":
double: 2
float: 2
Function: "pow":
double: 1
float: 1

View File

@ -234,6 +234,10 @@ Function: "log2":
double: 2
float: 1
Function: "logp1":
double: 1
float: 1
Function: "pow":
double: 1

View File

@ -991,6 +991,22 @@ Function: "log_upward":
double: 1
float: 2
Function: "logp1":
double: 1
float: 1
Function: "logp1_downward":
double: 2
float: 2
Function: "logp1_towardzero":
double: 2
float: 2
Function: "logp1_upward":
double: 2
float: 2
Function: "pow":
double: 1
float: 1

View File

@ -950,6 +950,22 @@ double: 2
Function: "log2_upward":
double: 3
Function: "logp1":
double: 1
float: 1
Function: "logp1_downward":
double: 2
float: 2
Function: "logp1_towardzero":
double: 2
float: 2
Function: "logp1_upward":
double: 2
float: 2
Function: "pow":
double: 1

View File

@ -964,6 +964,22 @@ Function: "log_upward":
double: 1
float: 2
Function: "logp1":
double: 1
float: 1
Function: "logp1_downward":
double: 2
float: 2
Function: "logp1_towardzero":
double: 2
float: 2
Function: "logp1_upward":
double: 2
float: 2
Function: "pow":
double: 1
float: 1

View File

@ -1000,6 +1000,22 @@ Function: "log_upward":
double: 1
float: 2
Function: "logp1":
double: 1
float: 1
Function: "logp1_downward":
double: 2
float: 2
Function: "logp1_towardzero":
double: 2
float: 2
Function: "logp1_upward":
double: 2
float: 2
Function: "pow":
double: 1
float: 1

View File

@ -1436,6 +1436,29 @@ double: 1
float128: 1
ldouble: 1
Function: "logp1":
double: 1
float128: 3
ldouble: 2
Function: "logp1_downward":
double: 1
float: 1
float128: 3
ldouble: 4
Function: "logp1_towardzero":
double: 1
float: 1
float128: 3
ldouble: 4
Function: "logp1_upward":
double: 1
float: 1
float128: 2
ldouble: 3
Function: "pow":
double: 1
float128: 2

View File

@ -1463,6 +1463,29 @@ double: 1
float128: 1
ldouble: 1
Function: "logp1":
double: 1
float128: 3
ldouble: 2
Function: "logp1_downward":
double: 1
float: 1
float128: 3
ldouble: 4
Function: "logp1_towardzero":
double: 1
float: 1
float128: 3
ldouble: 4
Function: "logp1_upward":
double: 1
float: 1
float128: 2
ldouble: 3
Function: "pow":
double: 1
float128: 2

View File

@ -100,7 +100,7 @@ CFLAGS-s_llrintf128.c += -fno-builtin-llrintf64x
CFLAGS-s_llroundf128.c += -fno-builtin-llroundf64x
CFLAGS-e_logf128.c += -fno-builtin-logf64x
CFLAGS-w_log10f128.c += -fno-builtin-log10f64x
CFLAGS-w_log1pf128.c += -fno-builtin-log1pf64x
CFLAGS-w_log1pf128.c += -fno-builtin-log1pf64x -fno-builtin-logp1f64x
CFLAGS-e_log2f128.c += -fno-builtin-log2f64x
CFLAGS-s_logbf128.c += -fno-builtin-logbf64x
CFLAGS-s_lrintf128.c += -fno-builtin-lrintf64x

View File

@ -358,6 +358,7 @@
#define llroundl llroundf128
#define log1pl log1pf128
#define logbl logbf128
#define logp1l logp1f128
#define logl logf128
#define lrintl lrintf128
#define lroundl lroundf128

View File

@ -89,7 +89,7 @@ CFLAGS-s_llrintl.c += -fno-builtin-llrintf64x -fno-builtin-llrintf128
CFLAGS-s_llroundl.c += -fno-builtin-llroundf64x -fno-builtin-llroundf128
CFLAGS-e_logl.c += -fno-builtin-logf64x -fno-builtin-logf128
CFLAGS-w_log10l.c += -fno-builtin-log10f64x -fno-builtin-log10f128
CFLAGS-w_log1pl.c += -fno-builtin-log1pf64x -fno-builtin-log1pf128
CFLAGS-w_log1pl.c += -fno-builtin-log1pf64x -fno-builtin-log1pf128 -fno-builtin-logp1f64x -fno-builtin-logp1f128
CFLAGS-e_log2l.c += -fno-builtin-log2f64x -fno-builtin-log2f128
CFLAGS-s_logbl.c += -fno-builtin-logbf64x -fno-builtin-logbf128
CFLAGS-s_lrintl.c += -fno-builtin-lrintf64x -fno-builtin-lrintf128

View File

@ -139,6 +139,7 @@ libm {
}
GLIBC_2.40 {
__log2p1ieee128;
__logp1ieee128;
}
}
libc {

View File

@ -110,7 +110,7 @@ CFLAGS-s_llrintl.c += -fno-builtin-llrintf64x
CFLAGS-s_llroundl.c += -fno-builtin-llroundf64x
CFLAGS-e_logl.c += -fno-builtin-logf64x
CFLAGS-w_log10l.c += -fno-builtin-log10f64x
CFLAGS-w_log1pl.c += -fno-builtin-log1pf64x
CFLAGS-w_log1pl.c += -fno-builtin-log1pf64x -fno-builtin-logp1f64x
CFLAGS-e_log2l.c += -fno-builtin-log2f64x
CFLAGS-s_logbl.c += -fno-builtin-logbf64x
CFLAGS-s_lrintl.c += -fno-builtin-lrintf64x

View File

@ -341,7 +341,7 @@ CFLAGS-nldbl-llrint.c = -fno-builtin-llrintl
CFLAGS-nldbl-llround.c = -fno-builtin-llroundl
CFLAGS-nldbl-log.c = -fno-builtin-logl
CFLAGS-nldbl-log10.c = -fno-builtin-log10l
CFLAGS-nldbl-log1p.c = -fno-builtin-log1pl
CFLAGS-nldbl-log1p.c = -fno-builtin-log1pl -fno-builtin-logp1l
CFLAGS-nldbl-log2.c = -fno-builtin-log2l
CFLAGS-nldbl-log2p1.c = -fno-builtin-log2p1l
CFLAGS-nldbl-logb.c = -fno-builtin-logbl

View File

@ -6,3 +6,4 @@ log1pl (double x)
{
return log1p (x);
}
weak_alias (log1pl, logp1l)

View File

@ -1232,6 +1232,26 @@ Function: "log_upward":
double: 1
ldouble: 2
Function: "logp1":
double: 1
float: 1
ldouble: 3
Function: "logp1_downward":
double: 2
float: 2
ldouble: 3
Function: "logp1_towardzero":
double: 2
float: 2
ldouble: 3
Function: "logp1_upward":
double: 2
float: 2
ldouble: 2
Function: "pow":
double: 1
ldouble: 2

View File

@ -134,6 +134,9 @@ float: 2
Function: "log1p":
float: 1
Function: "logp1":
float: 1
Function: "sincos":
double: 1
float: 1

View File

@ -1189,3 +1189,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -1046,3 +1046,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -231,6 +231,10 @@ Function: "log2":
double: 2
float: 1
Function: "logp1":
double: 1
float: 1
Function: "pow":
float: 1

View File

@ -975,6 +975,22 @@ Function: "log_upward":
double: 1
float: 2
Function: "logp1":
double: 1
float: 1
Function: "logp1_downward":
double: 2
float: 2
Function: "logp1_towardzero":
double: 2
float: 2
Function: "logp1_upward":
double: 2
float: 2
Function: "pow":
double: 1
float: 1

View File

@ -1223,6 +1223,26 @@ double: 1
float: 2
ldouble: 1
Function: "logp1":
double: 1
float: 1
ldouble: 3
Function: "logp1_downward":
double: 2
float: 2
ldouble: 3
Function: "logp1_towardzero":
double: 2
float: 2
ldouble: 3
Function: "logp1_upward":
double: 2
float: 2
ldouble: 2
Function: "pow":
double: 1
float: 1

View File

@ -237,6 +237,10 @@ Function: "log2":
double: 2
float: 1
Function: "logp1":
double: 1
float: 1
Function: "pow":
double: 1
float: 3

View File

@ -955,6 +955,22 @@ double: 1
Function: "log2_upward":
double: 1
Function: "logp1":
double: 1
float: 1
Function: "logp1_downward":
double: 2
float: 2
Function: "logp1_towardzero":
double: 2
float: 2
Function: "logp1_upward":
double: 2
float: 2
Function: "pow":
double: 1

View File

@ -953,6 +953,22 @@ double: 1
Function: "log2_upward":
double: 1
Function: "logp1":
double: 1
float: 1
Function: "logp1_downward":
double: 2
float: 2
Function: "logp1_towardzero":
double: 2
float: 2
Function: "logp1_upward":
double: 2
float: 2
Function: "pow":
double: 1

View File

@ -1546,6 +1546,30 @@ float: 2
float128: 1
ldouble: 1
Function: "logp1":
double: 1
float: 1
float128: 3
ldouble: 2
Function: "logp1_downward":
double: 1
float: 2
float128: 3
ldouble: 2
Function: "logp1_towardzero":
double: 2
float: 2
float128: 3
ldouble: 3
Function: "logp1_upward":
double: 2
float: 2
float128: 2
ldouble: 3
Function: "mul_downward_ldouble":
double: 1
float: 1

View File

@ -1260,6 +1260,26 @@ double: 1
float: 2
ldouble: 1
Function: "logp1":
double: 1
float: 1
ldouble: 2
Function: "logp1_downward":
double: 2
float: 2
ldouble: 2
Function: "logp1_towardzero":
double: 2
float: 2
ldouble: 2
Function: "logp1_upward":
double: 2
float: 2
ldouble: 2
Function: "mul_downward_ldouble":
double: 1
float: 1

View File

@ -295,7 +295,7 @@ CFLAGS-s_llrintf128-ifunc.c += -fno-builtin-llrintf64x
CFLAGS-s_llroundf128-ifunc.c += -fno-builtin-llroundf64x
CFLAGS-e_logf128-ifunc.c += -fno-builtin-logf64x
CFLAGS-w_log10f128-ifunc.c += -fno-builtin-log10f64x
CFLAGS-w_log1pf128-ifunc.c += -fno-builtin-log1pf64x
CFLAGS-w_log1pf128-ifunc.c += -fno-builtin-log1pf64x -fno-builtin-logp1f64x
CFLAGS-e_log2f128-ifunc.c += -fno-builtin-log2f64x
CFLAGS-s_logbf128-ifunc.c += -fno-builtin-logbf64x
CFLAGS-s_lrintf128-ifunc.c += -fno-builtin-lrintf64x

View File

@ -33,6 +33,10 @@ extern __typeof (ldexpf128) F128_SFX_APPEND (__ldexpf128);
#define __ldexpf128 F128_SFX_APPEND (__ldexpf128)
extern __typeof (log1pf128) F128_SFX_APPEND (__w_log1pf128);
#define __w_log1pf128 F128_SFX_APPEND (__w_log1pf128)
/* libm_hidden_proto is disabled by the time we reach here.
Ensure some internally called functions are still called
without going through the PLT. Note, this code is only

View File

@ -138,7 +138,9 @@
/* Ensure the wrapper functions get exposed via IFUNC, not the
wrappee (e.g __w_log1pf128_power8 instead of __log1pf128_power8. */
#define DECL_ALIAS_w_log1p(x) MAKE_IFUNCP_WRAP_R(w_,x,)
#define DECL_ALIAS_w_log1p(x) \
MAKE_IFUNCP_WRAP_R (w_, x, ) \
MAKE_IFUNCP_WRAP_R (w_, logp1, )
#define DECL_ALIAS_w_scalbln(x) MAKE_IFUNCP_WRAP_R(w_,x,)
/* These are declared in their respective jX objects. */

View File

@ -106,11 +106,13 @@ F128_REDIR (__remainderf128);
extern _Float128 __wrap_scalbnf128 (_Float128, int);
extern _Float128 __w_scalblnf128 (_Float128, long int);
extern _Float128 __w_log1pf128 (_Float128);
extern _Float128 __w_logp1f128 (_Float128);
extern _Float128 __scalbf128 (_Float128, _Float128);
F128_REDIR (__scalbf128);
F128_REDIR (__wrap_scalbnf128);
F128_REDIR (__w_scalblnf128);
F128_REDIR (__w_log1pf128);
F128_REDIR (__w_logp1f128);
/* Include the redirects shared with math_private.h users. */
#include <float128-ifunc-redirects.h>

View File

@ -1208,6 +1208,26 @@ Function: "log_upward":
double: 1
ldouble: 1
Function: "logp1":
double: 1
float: 1
ldouble: 3
Function: "logp1_downward":
double: 1
float: 2
ldouble: 3
Function: "logp1_towardzero":
double: 2
float: 2
ldouble: 3
Function: "logp1_upward":
double: 2
float: 2
ldouble: 2
Function: "pow":
double: 1
ldouble: 2

View File

@ -1212,6 +1212,26 @@ Function: "log_upward":
double: 1
ldouble: 2
Function: "logp1":
double: 1
float: 1
ldouble: 3
Function: "logp1_downward":
double: 1
float: 2
ldouble: 3
Function: "logp1_towardzero":
double: 2
float: 2
ldouble: 3
Function: "logp1_upward":
double: 2
float: 2
ldouble: 2
Function: "pow":
double: 1
ldouble: 2

View File

@ -1230,6 +1230,26 @@ ldouble: 2
Function: "log_upward":
ldouble: 1
Function: "logp1":
double: 1
float: 1
ldouble: 3
Function: "logp1_downward":
double: 1
float: 2
ldouble: 3
Function: "logp1_towardzero":
double: 2
float: 2
ldouble: 3
Function: "logp1_upward":
double: 2
float: 2
ldouble: 2
Function: "pow":
double: 1
ldouble: 2

View File

@ -475,6 +475,14 @@ float: 1
Function: "log2_towardzero":
double: 2
Function: "logp1":
double: 1
float: 1
Function: "logp1_towardzero":
double: 2
float: 2
Function: "pow":
double: 1
float: 1

View File

@ -1223,6 +1223,26 @@ double: 1
float: 2
ldouble: 1
Function: "logp1":
double: 1
float: 1
ldouble: 3
Function: "logp1_downward":
double: 2
float: 2
ldouble: 3
Function: "logp1_towardzero":
double: 2
float: 2
ldouble: 3
Function: "logp1_upward":
double: 2
float: 2
ldouble: 2
Function: "pow":
double: 1
float: 3

View File

@ -1157,3 +1157,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -1316,3 +1316,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -763,3 +763,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -854,3 +854,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -854,3 +854,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -829,3 +829,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -854,3 +854,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -1196,3 +1196,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -1036,3 +1036,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -854,3 +854,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -890,3 +890,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -854,3 +854,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -854,3 +854,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -854,3 +854,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -1157,3 +1157,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -854,3 +854,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -763,3 +763,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -1001,3 +1001,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -1000,3 +1000,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -994,3 +994,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -1322,6 +1322,7 @@ GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.40 __log2p1ieee128 F
GLIBC_2.40 __logp1ieee128 F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
@ -1330,3 +1331,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -1036,3 +1036,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -1133,3 +1133,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -1260,3 +1260,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -1260,3 +1260,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -854,3 +854,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -854,3 +854,9 @@ GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1l F

View File

@ -1267,3 +1267,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -1157,3 +1157,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -1190,3 +1190,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -1190,3 +1190,11 @@ GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F
GLIBC_2.40 logp1 F
GLIBC_2.40 logp1f F
GLIBC_2.40 logp1f128 F
GLIBC_2.40 logp1f32 F
GLIBC_2.40 logp1f32x F
GLIBC_2.40 logp1f64 F
GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F

View File

@ -1907,6 +1907,30 @@ float: 3
Function: "log_vlen8_avx2":
float: 3
Function: "logp1":
double: 1
float: 1
float128: 3
ldouble: 2
Function: "logp1_downward":
double: 2
float: 2
float128: 3
ldouble: 4
Function: "logp1_towardzero":
double: 2
float: 2
float128: 3
ldouble: 4
Function: "logp1_upward":
double: 2
float: 2
float128: 2
ldouble: 3
Function: "pow":
double: 1
float: 1