Implement C23 log2p1

C23 adds various <math.h> function families originally defined in TS
18661-4.  Add the log2p1 functions (log2(1+x): like log1p, but for
base-2 logarithms).

This illustrates the intended structure of implementations of all
these function families: define them initially with a type-generic
template implementation.  If someone wishes to add type-specific
implementations, it is likely such implementations can be both faster
and more accurate than the type-generic one and can then override it
for types for which they are implemented (adding benchmarks would be
desirable in such cases to demonstrate that a new implementation is
indeed faster).

The test inputs are copied from those for log1p.  Note that these
changes make gen-auto-libm-tests depend on MPFR 4.2 (or later).

The bulk of the changes are fairly generic for any such new function.
(sysdeps/powerpc/nofpu/Makefile only needs changing for those
type-generic templates that use fabs.)

Tested for x86_64 and x86, and with build-many-glibcs.py.
This commit is contained in:
Joseph Myers 2024-05-20 13:41:39 +00:00
parent cf0ca8d52e
commit 79c52daf47
52 changed files with 3206 additions and 2 deletions

7
NEWS
View File

@ -21,6 +21,13 @@ Major new features:
by _GNU_SOURCE, or by compiling with the GCC options -std=c23,
-std=gnu23, -std=c2x or -std=gnu2x.
* The following ISO C23 function families (introduced in TS
18661-4:2015) are now supported in <math.h>. Each family includes
functions for float, double, long double, _FloatN and _FloatNx, and a
type-generic macro in <tgmath.h>.
- Logarithmic functions: log2p1.
* 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
more extensive verification tests for AT_SECURE programs and not meant to

View File

@ -754,6 +754,20 @@ They are computed in a way that is accurate even if @var{x} is
near zero.
@end deftypefun
@deftypefun double log2p1 (double @var{x})
@deftypefunx float log2p1f (float @var{x})
@deftypefunx {long double} log2p1l (long double @var{x})
@deftypefunx _FloatN log2p1fN (_Float@var{N} @var{x})
@deftypefunx _FloatNx log2p1fNx (_Float@var{N}x @var{x})
@standards{TS 18661-4:2015, math.h}
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return a value equivalent to @w{@code{log2 (1 + @var{x})}}.
They are computed in a way that is accurate even if @var{x} is
near zero.
The @code{log2p1} functions are from TS 18661-4:2015.
@end deftypefun
@cindex complex exponentiation functions
@cindex complex logarithm functions

View File

@ -127,6 +127,7 @@ gen-libm-calls = \
s_fminimum_numF \
s_fminmagF \
s_iseqsigF \
s_log2p1F \
s_nanF \
s_nextdownF \
s_significandF \
@ -650,6 +651,7 @@ libm-test-funcs-auto = \
log10 \
log1p \
log2 \
log2p1 \
pow \
sin \
sincos \
@ -892,6 +894,7 @@ tgmath3-macros = \
log10 \
log1p \
log2 \
log2p1 \
logb \
lrint \
lround \
@ -1264,6 +1267,7 @@ CFLAGS-e_log.c += -fno-builtin-logl
CFLAGS-w_log10.c += -fno-builtin-log10l
CFLAGS-w_log1p.c += -fno-builtin-log1pl
CFLAGS-e_log2.c += -fno-builtin-log2l
CFLAGS-s_log2p1.c += -fno-builtin-log2p1l
CFLAGS-s_logb.c += -fno-builtin-logbl
CFLAGS-s_lrint.c += -fno-builtin-lrintl
CFLAGS-s_lround.c += -fno-builtin-lroundl
@ -1389,6 +1393,7 @@ 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-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
CFLAGS-s_lrint.c += -fno-builtin-lrintf32x -fno-builtin-lrintf64
CFLAGS-s_lround.c += -fno-builtin-lroundf32x -fno-builtin-lroundf64
@ -1503,6 +1508,7 @@ CFLAGS-e_logf.c += -fno-builtin-logf32
CFLAGS-w_log10f.c += -fno-builtin-log10f32
CFLAGS-w_log1pf.c += -fno-builtin-log1pf32
CFLAGS-e_log2f.c += -fno-builtin-log2f32
CFLAGS-s_log2p1f.c += -fno-builtin-log2p1f32
CFLAGS-s_logbf.c += -fno-builtin-logbf32
CFLAGS-s_lrintf.c += -fno-builtin-lrintf32
CFLAGS-s_lroundf.c += -fno-builtin-lroundf32

View File

@ -639,4 +639,10 @@ libm {
# No SVID compatible error handling.
exp10;
}
GLIBC_2.40 {
# Functions not involving _Float64x or _Float128, for all configurations.
log2p1; log2p1f; log2p1l; log2p1f32; log2p1f64; log2p1f32x;
# Functions involving _Float64x or _Float128, for some configurations.
log2p1f64x; log2p1f128;
}
}

View File

@ -6664,6 +6664,57 @@ log2 min
log2 min_subnorm
log2 max
log2p1 0
log2p1 -0
log2p1 e-1
log2p1 -0.25
log2p1 -0.875
log2p1 0x1p-5
log2p1 0x1p-10
log2p1 0x1p-15
log2p1 0x1p-20
log2p1 0x1p-25
log2p1 0x1p-30
log2p1 0x1p-35
log2p1 0x1p-40
log2p1 0x1p-45
log2p1 0x1p-50
log2p1 0x1p-55
log2p1 0x1p-60
log2p1 0x1p-100
log2p1 0x1p-600
log2p1 0x1p-10000
log2p1 min
log2p1 min_subnorm
log2p1 -min
log2p1 -min_subnorm
log2p1 0x1p10
log2p1 0x1p20
log2p1 0x1p30
log2p1 0x1p50
log2p1 0x1p60
log2p1 0x1p100
log2p1 0x1p1000
log2p1 0x6.a0cf42befce9ed4085ef59254b48p-4
log2p1 max
log2p1 0x7.2a4368p-4
log2p1 0x6.d3a118p-4
log2p1 0x5.03f228p+0
log2p1 0x7.264963888ac9p-4
log2p1 0x8.786bdp-4
log2p1 0x7.89dc17790eeb4p-4
log2p1 0x9.81ccf8887c24a7bp-4
log2p1 0xa.5028608bd65f38dp-4
log2p1 0x5.bf78873e20a2d468p-4
log2p1 0x7.aa5198p-4
log2p1 0x2.564fap+0
log2p1 0x7.fc242a2235222ef8p-4
log2p1 -0x4.f37d3c9ce0b14bdd86eb157df5d4p-4
log2p1 0x7.2eca50c4d93196362b4f37f6e8dcp-4
log2p1 -0x6.3fef3067427e43dfcde9e48f74bcp-4
log2p1 0x6.af53d00fd2845d4772260ef5adc4p-4
mul 0 0
mul 0 -0
mul -0 0

File diff suppressed because it is too large Load Diff

View File

@ -112,6 +112,9 @@ __MATHCALL (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr)) __nonnull ((2));
#if __GLIBC_USE (IEC_60559_FUNCS_EXT_C23)
/* Compute exponent to base ten. */
__MATHCALL_VEC (exp10,, (_Mdouble_ __x));
/* Return log2(1 + X). */
__MATHCALL (log2p1,, (_Mdouble_ __x));
#endif
#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99

View File

@ -580,6 +580,7 @@ static test_function test_functions[] =
FUNC_mpfr_f_f ("log10", mpfr_log10, false),
FUNC_mpfr_f_f ("log1p", mpfr_log1p, false),
FUNC_mpfr_f_f ("log2", mpfr_log2, false),
FUNC_mpfr_f_f ("log2p1", mpfr_log2p1, false),
FUNC_mpfr_ff_f ("mul", mpfr_mul, true),
FUNC_mpfr_ff_f ("pow", mpfr_pow, false),
FUNC_mpfr_f_f ("sin", mpfr_sin, false),

View File

@ -743,6 +743,7 @@ class Tests(object):
self.add_tests(prefix + fn, ret, ['r'] * args)
# TS 18661-4 functions.
self.add_tests('exp10', 'r', ['r'])
self.add_tests('log2p1', 'r', ['r'])
# C23 functions.
self.add_tests('fmaximum', 'r', ['r', 'r'])
self.add_tests('fmaximum_mag', 'r', ['r', 'r'])

53
math/libm-test-log2p1.inc Normal file
View File

@ -0,0 +1,53 @@
/* Test log2p1.
Copyright (C) 2024 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include "libm-test-driver.c"
static const struct test_f_f_data log2p1_test_data[] =
{
TEST_f_f (log2p1, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_f_f (log2p1, -2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log2p1, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM|XFAIL_ROUNDING_IBM128_LIBGCC),
TEST_f_f (log2p1, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_f_f (log2p1, plus_infty, plus_infty, ERRNO_UNCHANGED),
TEST_f_f (log2p1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_f_f (log2p1, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_f_f (log2p1, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_f_f (log2p1, -snan_value, qnan_value, INVALID_EXCEPTION),
AUTO_TESTS_f_f (log2p1),
};
static void
log2p1_test (void)
{
ALL_RM_TEST (log2p1, 0, log2p1_test_data, RUN_TEST_LOOP_f_f, END);
}
static void
do_test (void)
{
log2p1_test ();
}
/*
* Local Variables:
* mode:c
* End:
*/

43
math/s_log2p1_template.c Normal file
View File

@ -0,0 +1,43 @@
/* Return base-2 logarithm of 1 + X.
Copyright (C) 2024 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <errno.h>
#include <math.h>
#include <math-underflow.h>
FLOAT
M_DECL_FUNC (__log2p1) (FLOAT x)
{
if (__glibc_unlikely (islessequal (x, M_LIT (-1.0))))
{
if (x == -1)
__set_errno (ERANGE);
else
__set_errno (EDOM);
}
if (isless (M_FABS (x), M_EPSILON / 4))
{
/* Avoid spurious underflows when log1p underflows but log2p1
should not. */
FLOAT ret = M_MLIT (M_LOG2E) * x;
math_check_force_underflow (ret);
return ret;
}
return M_MLIT (M_LOG2E) * M_SUF (__log1p) (x);
}
declare_mgen_alias (__log2p1, log2p1);

View File

@ -48,7 +48,7 @@ volatile int count_cdouble;
volatile int count_cfloat;
volatile int count_cldouble;
#define NCALLS 158
#define NCALLS 160
#define NCALLS_INT 4
#define NCCALLS 47
@ -255,6 +255,7 @@ F(compile_test) (void)
a = exp2 (exp2 (x));
a = exp10 (exp10 (x));
b = log2 (log2 (a));
a = log2p1 (log2p1 (x));
a = pow (pow (x, a), pow (c, b));
b = sqrt (sqrt (a));
a = hypot (hypot (x, b), hypot (c, a));
@ -368,6 +369,7 @@ F(compile_test) (void)
a = exp2 (y);
a = exp10 (y);
a = log2 (y);
a = log2p1 (y);
a = pow (y, y);
a = sqrt (y);
a = hypot (y, y);
@ -641,6 +643,14 @@ TYPE
return x;
}
TYPE
(F(log2p1)) (TYPE x)
{
++count;
P ();
return x;
}
TYPE
(F(pow)) (TYPE x, TYPE y)
{

View File

@ -874,6 +874,9 @@
#if __GLIBC_USE (IEC_60559_FUNCS_EXT_C23)
/* Compute exponent to base ten. */
#define exp10(Val) __TGMATH_UNARY_REAL_ONLY (Val, exp10)
/* Return log2(1 + X). */
#define log2p1(Val) __TGMATH_UNARY_REAL_ONLY (Val, log2p1)
#endif

View File

@ -1424,6 +1424,30 @@ float: 1
float128: 1
ldouble: 1
Function: "log2p1":
double: 1
float: 1
float128: 3
ldouble: 2
Function: "log2p1_downward":
double: 1
float: 1
float128: 3
ldouble: 4
Function: "log2p1_towardzero":
double: 1
float: 1
float128: 2
ldouble: 4
Function: "log2p1_upward":
double: 1
float: 1
float128: 2
ldouble: 5
Function: "log_downward":
double: 1
float128: 1

View File

@ -137,6 +137,9 @@ libm {
__fminimum_magieee128;
__fminimum_mag_numieee128;
}
GLIBC_2.40 {
__log2p1ieee128;
}
}
libc {
LDBL_IBM128_VERSION {

View File

@ -51,7 +51,8 @@ libnldbl-calls = asprintf dprintf fprintf fscanf fwprintf fwscanf iovfscanf \
roundeven fromfp ufromfp fromfpx ufromfpx fadd dadd \
fdiv ddiv ffma dfma fmul dmul fsqrt dsqrt fsub dsub \
fmaximum fmaximum_mag fmaximum_num fmaximum_mag_num \
fminimum fminimum_mag fminimum_num fminimum_mag_num
fminimum fminimum_mag fminimum_num fminimum_mag_num \
log2p1
libnldbl-routines = $(libnldbl-calls:%=nldbl-%)
libnldbl-inhibit-o = $(object-suffixes)
libnldbl-static-only-routines = $(libnldbl-routines)
@ -151,6 +152,7 @@ CFLAGS-nldbl-log.c = -fno-builtin-logl
CFLAGS-nldbl-log10.c = -fno-builtin-log10l
CFLAGS-nldbl-log1p.c = -fno-builtin-log1pl
CFLAGS-nldbl-log2.c = -fno-builtin-log2l
CFLAGS-nldbl-log2p1.c = -fno-builtin-log2p1l
CFLAGS-nldbl-logb.c = -fno-builtin-logbl
CFLAGS-nldbl-lrint.c = -fno-builtin-lrintl
CFLAGS-nldbl-lround.c = -fno-builtin-lroundl

View File

@ -0,0 +1,8 @@
#include "nldbl-compat.h"
double
attribute_hidden
log2p1l (double x)
{
return log2p1 (x);
}

View File

@ -1181,3 +1181,11 @@ GLIBC_2.35 fsqrt F
GLIBC_2.35 fsqrtl F
GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -1038,3 +1038,11 @@ GLIBC_2.38 ynf32x F
GLIBC_2.38 ynf64 F
GLIBC_2.38 ynf64x F
GLIBC_2.38 ynl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -54,4 +54,5 @@ CFLAGS-s_fmaximum_magl.c += -fno-builtin-fabsl
CFLAGS-s_fmaximum_mag_numl.c += -fno-builtin-fabsl
CFLAGS-s_fminimum_magl.c += -fno-builtin-fabsl
CFLAGS-s_fminimum_mag_numl.c += -fno-builtin-fabsl
CFLAGS-s_log2p1l.c += -fno-builtin-fabsl
endif

View File

@ -1149,3 +1149,11 @@ GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -1308,3 +1308,11 @@ GLIBC_2.4 truncl F
GLIBC_2.4 y0l F
GLIBC_2.4 y1l F
GLIBC_2.4 ynl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -757,3 +757,9 @@ GLIBC_2.35 fminimumf64 F
GLIBC_2.35 fminimuml F
GLIBC_2.35 fsqrt F
GLIBC_2.35 fsqrtl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -848,3 +848,9 @@ GLIBC_2.4 y1l F
GLIBC_2.4 yn F
GLIBC_2.4 ynf F
GLIBC_2.4 ynl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -848,3 +848,9 @@ GLIBC_2.4 y1l F
GLIBC_2.4 yn F
GLIBC_2.4 ynf F
GLIBC_2.4 ynl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -823,3 +823,9 @@ GLIBC_2.35 fminimumf64 F
GLIBC_2.35 fminimuml F
GLIBC_2.35 fsqrt F
GLIBC_2.35 fsqrtl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -848,3 +848,9 @@ GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.4 exp2l F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -1188,3 +1188,11 @@ GLIBC_2.35 fsqrt F
GLIBC_2.35 fsqrtl F
GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -1028,3 +1028,11 @@ GLIBC_2.36 ynf32x F
GLIBC_2.36 ynf64 F
GLIBC_2.36 ynf64x F
GLIBC_2.36 ynl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -848,3 +848,9 @@ GLIBC_2.4 y1l F
GLIBC_2.4 yn F
GLIBC_2.4 ynf F
GLIBC_2.4 ynl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -884,3 +884,9 @@ GLIBC_2.35 fsqrt F
GLIBC_2.35 fsqrtl F
GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -848,3 +848,9 @@ GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -848,3 +848,9 @@ GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -848,3 +848,9 @@ GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.4 exp2l F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -1149,3 +1149,11 @@ GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -848,3 +848,9 @@ GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -757,3 +757,9 @@ GLIBC_2.35 ynf32 F
GLIBC_2.35 ynf32x F
GLIBC_2.35 ynf64 F
GLIBC_2.35 ynl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -995,3 +995,9 @@ GLIBC_2.4 truncl F
GLIBC_2.4 y0l F
GLIBC_2.4 y1l F
GLIBC_2.4 ynl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -994,3 +994,9 @@ GLIBC_2.4 truncl F
GLIBC_2.4 y0l F
GLIBC_2.4 y1l F
GLIBC_2.4 ynl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -988,3 +988,9 @@ GLIBC_2.4 truncl F
GLIBC_2.4 y0l F
GLIBC_2.4 y1l F
GLIBC_2.4 ynl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -1321,3 +1321,12 @@ GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.40 __log2p1ieee128 F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -1028,3 +1028,11 @@ GLIBC_2.35 fminimumf64x F
GLIBC_2.35 fminimuml F
GLIBC_2.35 fsqrt F
GLIBC_2.35 fsqrtl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -1125,3 +1125,11 @@ GLIBC_2.35 fminimumf64x F
GLIBC_2.35 fminimuml F
GLIBC_2.35 fsqrt F
GLIBC_2.35 fsqrtl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -1252,3 +1252,11 @@ GLIBC_2.4 truncl F
GLIBC_2.4 y0l F
GLIBC_2.4 y1l F
GLIBC_2.4 ynl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -1252,3 +1252,11 @@ GLIBC_2.4 truncl F
GLIBC_2.4 y0l F
GLIBC_2.4 y1l F
GLIBC_2.4 ynl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -848,3 +848,9 @@ GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.4 exp2l F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -848,3 +848,9 @@ GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.4 exp2l F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1l F

View File

@ -1259,3 +1259,11 @@ GLIBC_2.4 truncl F
GLIBC_2.4 y0l F
GLIBC_2.4 y1l F
GLIBC_2.4 ynl F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -1149,3 +1149,11 @@ GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -1182,3 +1182,11 @@ GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -1182,3 +1182,11 @@ GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
GLIBC_2.39 exp10 F
GLIBC_2.40 log2p1 F
GLIBC_2.40 log2p1f F
GLIBC_2.40 log2p1f128 F
GLIBC_2.40 log2p1f32 F
GLIBC_2.40 log2p1f32x F
GLIBC_2.40 log2p1f64 F
GLIBC_2.40 log2p1f64x F
GLIBC_2.40 log2p1l F

View File

@ -1847,6 +1847,30 @@ float: 1
Function: "log2_vlen8_avx2":
float: 1
Function: "log2p1":
double: 1
float: 1
float128: 3
ldouble: 2
Function: "log2p1_downward":
double: 2
float: 2
float128: 3
ldouble: 4
Function: "log2p1_towardzero":
double: 2
float: 2
float128: 2
ldouble: 4
Function: "log2p1_upward":
double: 1
float: 2
float128: 2
ldouble: 5
Function: "log_downward":
float: 2
float128: 1