Implement C23 powr

C23 adds various <math.h> function families originally defined in TS
18661-4.  Add the powr functions, which are like pow, but with simpler
handling of special cases (based on exp(y*log(x)), so negative x and
0^0 are domain errors, powers of -0 are always +0 or +Inf never -0 or
-Inf, and 1^+-Inf and Inf^0 are also domain errors, while NaN^0 and
1^NaN are NaN).  The test inputs are taken from those for pow, with
appropriate adjustments (including removing all tests that would be
domain errors from those in auto-libm-test-in and adding some more
such tests in libm-test-powr.inc).

The underlying implementation uses __ieee754_pow functions after
dealing with all special cases that need to be handled differently.
It might be a little faster (avoiding a wrapper and redundant checks
for special cases) to have an underlying implementation built
separately for both pow and powr with compile-time conditionals for
special-case handling, but I expect the benefit of that would be
limited given that both functions will end up needing to use the same
logic for computing pow outside of special cases.

My understanding is that powr(negative, qNaN) should raise "invalid":
that the rule on "invalid" for an argument outside the domain of the
function takes precedence over a quiet NaN argument producing a quiet
NaN result with no exceptions raised (for rootn it's explicit that the
0th root of qNaN raises "invalid").  I've raised this on the WG14
reflector to confirm the intent.

Tested for x86_64 and x86, and with build-many-glibcs.py.
This commit is contained in:
Joseph Myers 2025-03-14 15:58:11 +00:00
parent c7c4a5906f
commit 409668f6e8
48 changed files with 18866 additions and 2 deletions

2
NEWS
View File

@ -14,7 +14,7 @@ Major new features:
functions for float, double, long double, _FloatN and _FloatNx, and a
type-generic macro in <tgmath.h>.
- Power and absolute-value functions: rsqrt.
- Power and absolute-value functions: powr, rsqrt.
* On Linux, the pthread_gettid_np function has been added.

View File

@ -774,6 +774,21 @@ do that, so instead it signals a domain error. @code{pow} may also
underflow or overflow the destination type.
@end deftypefun
@deftypefun double powr (double @var{base}, double @var{power})
@deftypefunx float powrf (float @var{base}, float @var{power})
@deftypefunx {long double} powrl (long double @var{base}, long double @var{power})
@deftypefunx _FloatN powrfN (_Float@var{N} @var{base}, _Float@var{N} @var{power})
@deftypefunx _FloatNx powrfNx (_Float@var{N}x @var{base}, _Float@var{N}x @var{power})
@standards{TS 18661-4:2015, math.h}
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These return @var{base} raised to @var{power}, but with special cases
based on @code{exp (power * log (base))}. For example, if @var{base}
is negative, the @code{powr} functions always signal a domain error,
but this is valid for @code{pow} if @var{power} is an integer.
The @code{powr} functions are from TS 18661-4:2015.
@end deftypefun
@cindex square root function
@deftypefun double sqrt (double @var{x})
@deftypefunx float sqrtf (float @var{x})

View File

@ -139,6 +139,7 @@ gen-libm-calls = \
s_log2p1F \
s_nanF \
s_nextdownF \
s_powrF \
s_rsqrtF \
s_significandF \
s_sinpiF \
@ -685,6 +686,7 @@ libm-test-funcs-auto = \
log1p \
log2p1 \
pow \
powr \
rsqrt \
sin \
sincos \
@ -1016,6 +1018,7 @@ tgmath3-macros = \
nexttoward \
nextup \
pow \
powr \
remainder \
remquo \
rint \
@ -1439,6 +1442,7 @@ CFLAGS-s_nexttoward.c += -fno-builtin-nexttoward -fno-builtin-nexttowardl
CFLAGS-s_nexttowardf.c += -fno-builtin-nexttowardf
CFLAGS-s_nextup.c += -fno-builtin-nextupl
CFLAGS-e_pow.c += -fno-builtin-powl
CFLAGS-s_powr.c += -fno-builtin-powrl
CFLAGS-w_remainder.c += -fno-builtin-remainderl -fno-builtin-dreml
CFLAGS-s_remquo.c += -fno-builtin-remquol
CFLAGS-s_rint.c += -fno-builtin-rintl
@ -1574,6 +1578,7 @@ CFLAGS-s_nextafter.c += -fno-builtin-nextafterf32x -fno-builtin-nextafterf64
CFLAGS-s_nextdown.c += -fno-builtin-nextdownf32x -fno-builtin-nextdownf64
CFLAGS-s_nextup.c += -fno-builtin-nextupf32x -fno-builtin-nextupf64
CFLAGS-e_pow.c += -fno-builtin-powf32x -fno-builtin-powf64
CFLAGS-s_powr.c += -fno-builtin-powrf32x -fno-builtin-powrf64
CFLAGS-w_remainder.c += -fno-builtin-remainderf32x -fno-builtin-remainderf64
CFLAGS-s_remquo.c += -fno-builtin-remquof32x -fno-builtin-remquof64
CFLAGS-s_rint.c += -fno-builtin-rintf32x -fno-builtin-rintf64
@ -1700,6 +1705,7 @@ CFLAGS-s_nextafterf.c += -fno-builtin-nextafterf32
CFLAGS-s_nextdownf.c += -fno-builtin-nextdownf32
CFLAGS-s_nextupf.c += -fno-builtin-nextupf32
CFLAGS-e_powf.c += -fno-builtin-powf32
CFLAGS-s_powrf.c += -fno-builtin-powrf32
CFLAGS-w_remainderf.c += -fno-builtin-remainderf32
CFLAGS-s_remquof.c += -fno-builtin-remquof32
CFLAGS-s_rintf.c += -fno-builtin-rintf32

View File

@ -673,8 +673,10 @@ libm {
}
GLIBC_2.42 {
# Functions not involving _Float64x or _Float128, for all configurations.
powr; powrf; powrl; powrf32; powrf64; powrf32x;
rsqrt; rsqrtf; rsqrtl; rsqrtf32; rsqrtf64; rsqrtf32x;
# Functions involving _Float64x or _Float128, for some configurations.
powrf64x; powrf128;
rsqrtf64x; rsqrtf128;
}
}

View File

@ -8151,6 +8151,313 @@ pow 0x1.059c76p+0 0x1.ff80bep+11
pow 0x1.7ac7cp+5 23
pow -0x1.7ac7cp+5 23
powr 10 0
powr 10 -0
powr 1 1
powr 1 -1
powr 1 1.25
powr 1 -1.25
powr 1 0x1p62
powr 1 0x1p63
powr 1 0x1p64
powr 1 0x1p72
powr 1 min_subnorm
powr 1 -min_subnorm
# powr (x, +-0) == 1.
powr 32.75 0
powr 32.75 -0
powr 0x1p72 0
powr 0x1p72 -0
powr 0x1p-72 0
powr 0x1p-72 -0
powr 0x1p72 0x1p72
powr 10 -0x1p72
powr max max
powr 10 -max
powr 0 1
powr 0 11
powr -0 1
powr -0 11
powr 0 2
powr 0 11.1
powr -0 2
powr -0 11.1
# powr (+0, y) == +0 for y an odd integer > 0.
powr 0.0 27
powr 0.0 0xffffff
powr 0.0 0x1.fffffffffffffp+52
powr 0.0 0x1.fffffffffffffffep+63
powr 0.0 0x1.ffffffffffffffffffffffffff8p+105
powr 0.0 0x1.ffffffffffffffffffffffffffffp+112
# powr (-0, y) == +0 (unlike pow) for y an odd integer > 0.
powr -0 27
powr -0 0xffffff
powr -0 0x1fffffe
powr -0 0x1.fffffffffffffp+52
powr -0 0x1.fffffffffffffp+53
powr -0 0x1.fffffffffffffffep+63
powr -0 0x1.fffffffffffffffep+64 xfail-rounding:ibm128-libgcc
powr -0 0x1.ffffffffffffffffffffffffff8p+105 xfail-rounding:ibm128-libgcc
powr -0 0x1.ffffffffffffffffffffffffff8p+106 xfail-rounding:ibm128-libgcc
powr -0 0x1.ffffffffffffffffffffffffffffp+112 xfail-rounding:ibm128-libgcc
powr -0 0x1.ffffffffffffffffffffffffffffp+113 xfail-rounding:ibm128-libgcc
# powr (+0, y) == +0 for y > 0 and not an odd integer.
powr 0.0 4
powr 0.0 0x1p24
powr 0.0 0x1p127
powr 0.0 max
powr 0.0 min_subnorm
# powr (-0, y) == +0 for y > 0 and not an odd integer.
powr -0 0.5
powr -0 4
powr -0 0x1p24
powr -0 0x1p127
powr -0 max
powr -0 min_subnorm
powr 16 0.25
powr 0x1p64 0.125
powr 2 4
powr 256 8
powr 0.75 1.25
powr 0x0.ffffffp0 10
powr 0x0.ffffffp0 100
powr 0x0.ffffffp0 1000
powr 0x0.ffffffp0 0x1p24
powr 0x0.ffffffp0 0x1p30
powr 0x0.ffffffp0 0x1.234566p30
powr 0x0.ffffffp0 -10
powr 0x0.ffffffp0 -100
powr 0x0.ffffffp0 -1000
powr 0x0.ffffffp0 -0x1p24
powr 0x0.ffffffp0 -0x1p30
powr 0x0.ffffffp0 -0x1.234566p30
powr 0x1.000002p0 0x1p24
powr 0x1.000002p0 0x1.234566p29
powr 0x1.000002p0 -0x1.234566p29
powr 0x0.fffffffffffff8p0 0x1.23456789abcdfp62
powr 0x0.fffffffffffff8p0 -0x1.23456789abcdfp62
powr 0x1.0000000000001p0 0x1.23456789abcdfp61
powr 0x1.0000000000001p0 -0x1.23456789abcdfp61
powr 0x0.ffffffffffffffffp0 0x1.23456789abcdef0ep77
powr 0x0.ffffffffffffffffp0 -0x1.23456789abcdef0ep77
powr 0x1.0000000000000002p0 0x1.23456789abcdef0ep76
powr 0x1.0000000000000002p0 -0x1.23456789abcdef0ep76
powr 0x0.ffffffffffffffffffffffffffff8p0 0x1.23456789abcdef0123456789abcdp126
powr 0x0.ffffffffffffffffffffffffffff8p0 -0x1.23456789abcdef0123456789abcdp126
powr 0x1.0000000000000000000000000001p0 0x1.23456789abcdef0123456789abcdp125
powr 0x1.0000000000000000000000000001p0 -0x1.23456789abcdef0123456789abcdp125
powr 0x1.000002p0 0x1p30
powr 0x1.000002p0 max
powr 0x1.00000ep0 0x1p30
powr 0x1.00000ep0 max
powr 1e4932 0.75
powr 1e4928 0.75
powr 1e4924 0.75
powr 1e4920 0.75
powr 10.0 4932.0
powr 10.0 4931.0
powr 10.0 4930.0
powr 10.0 4929.0
powr 10.0 -4931.0
powr 10.0 -4930.0
powr 10.0 -4929.0
powr 1e27 182.0
powr 1e27 -182.0
powr min_subnorm min_subnorm
powr min_subnorm -min_subnorm
powr max min_subnorm
powr max -min_subnorm
powr 0.99 min_subnorm
powr 0.99 -min_subnorm
powr 1.01 min_subnorm
powr 1.01 -min_subnorm
powr 2.0 -100000.0
powr 2 -126.125
powr 2 -126.25
powr 2 -126.375
powr 2 -126.5
powr 2 -126.625
powr 2 -126.75
powr 2 -126.875
powr 2 -969.125
powr 2 -969.25
powr 2 -969.375
powr 2 -969.5
powr 2 -969.625
powr 2 -969.75
powr 2 -969.875
powr 2 -1022.125
powr 2 -1022.25
powr 2 -1022.375
powr 2 -1022.5
powr 2 -1022.625
powr 2 -1022.75
powr 2 -1022.875
powr 2 -16382.125
powr 2 -16382.25
powr 2 -16382.375
powr 2 -16382.5
powr 2 -16382.625
powr 2 -16382.75
powr 2 -16382.875
powr 2 -16383.125
powr 2 -16383.25
powr 2 -16383.375
powr 2 -16383.5
powr 2 -16383.625
powr 2 -16383.75
powr 2 -16383.875
powr 0.5 126.125
powr 0.5 126.25
powr 0.5 126.375
powr 0.5 126.5
powr 0.5 126.625
powr 0.5 126.75
powr 0.5 126.875
powr 0.5 969.125
powr 0.5 969.25
powr 0.5 969.375
powr 0.5 969.5
powr 0.5 969.625
powr 0.5 969.75
powr 0.5 969.875
powr 0.5 1022.125
powr 0.5 1022.25
powr 0.5 1022.375
powr 0.5 1022.5
powr 0.5 1022.625
powr 0.5 1022.75
powr 0.5 1022.875
powr 0.5 16382.125
powr 0.5 16382.25
powr 0.5 16382.375
powr 0.5 16382.5
powr 0.5 16382.625
powr 0.5 16382.75
powr 0.5 16382.875
powr 0.5 16383.125
powr 0.5 16383.25
powr 0.5 16383.375
powr 0.5 16383.5
powr 0.5 16383.625
powr 0.5 16383.75
powr 0.5 16383.875
powr 0x1.00001p1 -126
powr 0x1.00003p1 -126
powr 0x1.00005p1 -126
powr 0x1.00007p1 -126
powr 0x1.00001p1 -969
powr 0x1.00003p1 -969
powr 0x1.00005p1 -969
powr 0x1.00007p1 -969
powr 0x1.00001p1 -1022
powr 0x1.00003p1 -1022
powr 0x1.00005p1 -1022
powr 0x1.00007p1 -1022
powr 0x1.00001p1 -16382
powr 0x1.00003p1 -16382
powr 0x1.00005p1 -16382
powr 0x1.00007p1 -16382
powr 0x1.00001p1 -16383
powr 0x1.00003p1 -16383
powr 0x1.00005p1 -16383
powr 0x1.00007p1 -16383
powr 0x0.ffff1p-1 126
powr 0x0.ffff3p-1 126
powr 0x0.ffff5p-1 126
powr 0x0.ffff7p-1 126
powr 0x0.ffff1p-1 969
powr 0x0.ffff3p-1 969
powr 0x0.ffff5p-1 969
powr 0x0.ffff7p-1 969
powr 0x0.ffff1p-1 1022
powr 0x0.ffff3p-1 1022
powr 0x0.ffff5p-1 1022
powr 0x0.ffff7p-1 1022
powr 0x0.ffff1p-1 16382
powr 0x0.ffff3p-1 16382
powr 0x0.ffff5p-1 16382
powr 0x0.ffff7p-1 16382
powr 0x0.ffff1p-1 16383
powr 0x0.ffff3p-1 16383
powr 0x0.ffff5p-1 16383
powr 0x0.ffff7p-1 16383
powr 0x2.000b3p0 -1022
powr 0x2.000582p0 -1022
powr 2 -0x3.fe513p+8
powr 2 -0x3.fe4e8p+8
powr 10 -1
powr 10 -2
powr 10 -3
powr 10 -4
powr 10 -5
powr 10 -6
powr 10 -7
powr 0x0.ffffffffffffffffp0 1
powr 0x0.ffffffffffffffffp0 2
powr 0x0.ffffffffffffffffp0 3
powr 0x0.ffffffffffffffffp0 4
powr 0x0.ffffffffffffffffp0 5
powr 0x0.ffffffffffffffffp0 6
powr 0x0.ffffffffffffffffp0 7
powr 0x0.ffffffffffffffffp0 -1
powr 0x0.ffffffffffffffffp0 -2
powr 0x0.ffffffffffffffffp0 -3
powr 0x0.ffffffffffffffffp0 -4
powr 0x0.ffffffffffffffffp0 -5
powr 0x0.ffffffffffffffffp0 -6
powr 0x0.ffffffffffffffffp0 -7
powr 0x1.0000000000000002p0 1
powr 0x1.0000000000000002p0 2
powr 0x1.0000000000000002p0 3
powr 0x1.0000000000000002p0 4
powr 0x1.0000000000000002p0 5
powr 0x1.0000000000000002p0 6
powr 0x1.0000000000000002p0 7
powr 0x1.0000000000000002p0 -1
powr 0x1.0000000000000002p0 -2
powr 0x1.0000000000000002p0 -3
powr 0x1.0000000000000002p0 -4
powr 0x1.0000000000000002p0 -5
powr 0x1.0000000000000002p0 -6
powr 0x1.0000000000000002p0 -7
powr 1.0625 1.125
powr 1.5 1.03125
powr 0x1.7d1a0a6f2p+681 1.5
powr 0x1.ce78f2p+0 -0x2.7f1f78p+4
powr 0xf.fffffp+124 -0x5.b5b648p+0
powr 0x1.430d4cp+0 0x5.0e462p+4
powr 0x9.8b82ap-4 -0x1.99907ap+12
powr 0xd.73035p-4 -0x1.47bb8p+8
powr 0x1.059c76p+0 0x1.ff80bep+11
powr 0x1.7ac7cp+5 23
rsqrt 2209
rsqrt 4
rsqrt 2

17775
math/auto-libm-test-out-powr Normal file

File diff suppressed because it is too large Load Diff

View File

@ -186,6 +186,9 @@ __MATHCALL_VEC (cbrt,, (_Mdouble_ __x));
#endif
#if __GLIBC_USE (IEC_60559_FUNCS_EXT_C23)
/* Return X to the Y power. */
__MATHCALL (powr,, (_Mdouble_ __x, _Mdouble_ __y));
/* Return the reciprocal of the square root of X. */
__MATHCALL (rsqrt,, (_Mdouble_ __x));
#endif

View File

@ -589,6 +589,7 @@ static test_function test_functions[] =
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_ff_f ("powr", mpfr_powr, false),
/* mpfr_rec_sqrt differs from rsqrt on -0, but gen-auto-libm-tests
does not handle results that are exact infinities anyway. */
FUNC_mpfr_f_f ("rsqrt", mpfr_rec_sqrt, true),

View File

@ -753,6 +753,7 @@ class Tests(object):
self.add_tests('log2p1', 'r', ['r'])
self.add_tests('log10p1', 'r', ['r'])
self.add_tests('logp1', 'r', ['r'])
self.add_tests('powr', 'r', ['r', 'r'])
self.add_tests('rsqrt', 'r', ['r'])
self.add_tests('sinpi', 'r', ['r'])
self.add_tests('tanpi', 'r', ['r'])

454
math/libm-test-powr.inc Normal file
View File

@ -0,0 +1,454 @@
/* Test powr.
Copyright (C) 1997-2025 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_ff_f_data powr_test_data[] =
{
TEST_ff_f (powr, qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, qnan_value, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, snan_value, 0, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, 0, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, snan_value, minus_zero, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, minus_zero, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, plus_zero, plus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, plus_zero, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_zero, plus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_zero, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_subnorm_value, plus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_subnorm_value, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_subnorm_value, -min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_subnorm_value, min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_subnorm_value, -min_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_subnorm_value, min_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_subnorm_value, -1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_subnorm_value, 1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_subnorm_value, -2.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_subnorm_value, 2.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_subnorm_value, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_subnorm_value, max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, plus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, -min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, -min_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, min_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, -1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, 1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, -2.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, 2.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0, plus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0, -min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0, min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0, -min_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0, min_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0, -1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0, 1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0, -2.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0, 2.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0, max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -2.0, plus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -2.0, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -2.0, -min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -2.0, min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -2.0, -min_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -2.0, min_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -2.0, -1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -2.0, 1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -2.0, -2.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -2.0, 2.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -2.0, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -2.0, max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, plus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, -min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, -min_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, min_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, -1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, 1.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, -2.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, 2.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, 1.1L, plus_infty, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, plus_infty, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (powr, -1.1L, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, 0.9L, plus_infty, 0, ERRNO_UNCHANGED),
TEST_ff_f (powr, 1e-7L, plus_infty, 0, ERRNO_UNCHANGED),
TEST_ff_f (powr, -0.9L, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1e-7L, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, 1.1L, minus_infty, 0, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, minus_infty, 0, ERRNO_UNCHANGED),
TEST_ff_f (powr, -1.1L, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, 0.9L, minus_infty, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (powr, 1e-7L, minus_infty, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (powr, -0.9L, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1e-7L, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, plus_infty, 1e-7L, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, 1, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, 1e7L, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, min_subnorm_value, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, -1e-7L, 0, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, -1, 0, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, -1e7L, 0, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, -min_subnorm_value, 0, ERRNO_UNCHANGED),
TEST_ff_f (powr, minus_infty, 1, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 11, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 1001, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 12, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 1002, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 0.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 1.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 11.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 1001.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -1, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -11, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -1001, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -12, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -1002, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -0.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -1.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -11.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -1001.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, qnan_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, qnan_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, qnan_value, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -qnan_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -qnan_value, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, snan_value, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, snan_value, -qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, -qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, snan_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, snan_value, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, 0, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, 0, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, 0, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, 1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, 1, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, 1, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, 1, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -1, qnan_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1, -qnan_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -1, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, qnan_value, 1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, 1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, snan_value, 1, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, 1, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, qnan_value, -1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, -1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, snan_value, -1, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, -1, qnan_value, INVALID_EXCEPTION),
/* powr (x, qNaN or sNaN) == qNaN. */
TEST_ff_f (powr, 3.0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, 3.0, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, minus_zero, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, minus_zero, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -3.0, qnan_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -3.0, -qnan_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -qnan_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, 3.0, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, 3.0, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, minus_zero, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, minus_zero, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, plus_infty, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, plus_infty, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -3.0, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -3.0, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, minus_infty, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, minus_infty, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, qnan_value, 3.0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, 3.0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, qnan_value, -3.0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, -3.0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, qnan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, qnan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, qnan_value, 2.5, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, 2.5, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, qnan_value, -2.5, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, -2.5, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, qnan_value, min_subnorm_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, min_subnorm_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, qnan_value, -min_subnorm_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, -qnan_value, -min_subnorm_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (powr, snan_value, 3.0, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, 3.0, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, snan_value, -3.0, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, -3.0, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, snan_value, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, snan_value, minus_infty, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, minus_infty, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, snan_value, 2.5, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, 2.5, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, snan_value, -2.5, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, -2.5, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, snan_value, min_subnorm_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, min_subnorm_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, snan_value, -min_subnorm_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, -snan_value, -min_subnorm_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (powr, 1, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, 1, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
/* powr (inf, +-0) is a NaN. */
TEST_ff_f (powr, plus_infty, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, plus_infty, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -0.1L, 1.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -0.1L, -1.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -10.1L, 1.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -10.1L, -1.1L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.01L, min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.01L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0L, min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -1.0L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, 0, -0xffffff, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
#if !TEST_COND_binary32
TEST_ff_f (powr, 0, -0x1.fffffffffffffp+52L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
#endif
#if MANT_DIG >= 64
TEST_ff_f (powr, 0, -0x1.fffffffffffffffep+63L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
# if MANT_DIG >= 106
TEST_ff_f (powr, 0, -0x1.ffffffffffffffffffffffffff8p+105L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
# endif
# if MANT_DIG >= 113
TEST_ff_f (powr, 0, -0x1.ffffffffffffffffffffffffffffp+112L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
# endif
#endif
TEST_ff_f (powr, minus_zero, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, minus_zero, -11L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, minus_zero, -0xffffff, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, minus_zero, -0x1fffffe, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
#if !TEST_COND_binary32
TEST_ff_f (powr, minus_zero, -0x1.fffffffffffffp+52L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, minus_zero, -0x1.fffffffffffffp+53L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
#endif
#if MANT_DIG >= 64
TEST_ff_f (powr, minus_zero, -0x1.fffffffffffffffep+63L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, minus_zero, -0x1.fffffffffffffffep+64L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE|XFAIL_ROUNDING_IBM128_LIBGCC),
# if MANT_DIG >= 106
TEST_ff_f (powr, minus_zero, -0x1.ffffffffffffffffffffffffff8p+105L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, minus_zero, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE|XFAIL_ROUNDING_IBM128_LIBGCC),
# endif
# if MANT_DIG >= 113
TEST_ff_f (powr, minus_zero, -0x1.ffffffffffffffffffffffffffffp+112L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, minus_zero, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
# endif
#endif
TEST_ff_f (powr, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, 0, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, 0, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, 0, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, 0, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, minus_zero, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, minus_zero, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, minus_zero, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, minus_zero, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_ff_f (powr, 0, plus_infty, 0, ERRNO_UNCHANGED),
TEST_ff_f (powr, minus_zero, plus_infty, 0, ERRNO_UNCHANGED),
TEST_ff_f (powr, 0, minus_infty, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (powr, minus_zero, minus_infty, plus_infty, ERRNO_UNCHANGED),
/* powr (x, +inf) == +inf for |x| > 1. */
TEST_ff_f (powr, 1.5, plus_infty, plus_infty, ERRNO_UNCHANGED),
/* powr (x, +inf) == +0 for |x| < 1. */
TEST_ff_f (powr, 0.5, plus_infty, 0.0, ERRNO_UNCHANGED),
/* powr (x, -inf) == +0 for |x| > 1. */
TEST_ff_f (powr, 1.5, minus_infty, 0.0, ERRNO_UNCHANGED),
/* powr (x, -inf) == +inf for |x| < 1. */
TEST_ff_f (powr, 0.5, minus_infty, plus_infty, ERRNO_UNCHANGED),
/* powr (+inf, y) == +inf for y > 0. */
TEST_ff_f (powr, plus_infty, 2, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, 0xffffff, plus_infty, ERRNO_UNCHANGED),
#if !TEST_COND_binary32
TEST_ff_f (powr, plus_infty, 0x1.fffffffffffffp+52L, plus_infty, ERRNO_UNCHANGED),
#endif
#if MANT_DIG >= 64
TEST_ff_f (powr, plus_infty, 0x1.fffffffffffffffep+63L, plus_infty, ERRNO_UNCHANGED),
# if MANT_DIG >= 106
TEST_ff_f (powr, plus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, plus_infty, ERRNO_UNCHANGED),
# endif
# if MANT_DIG >= 113
TEST_ff_f (powr, plus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, plus_infty, ERRNO_UNCHANGED),
# endif
#endif
TEST_ff_f (powr, plus_infty, 0x1p24, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, 0x1p127, plus_infty, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, max_value, plus_infty, ERRNO_UNCHANGED),
/* powr (+inf, y) == +0 for y < 0. */
TEST_ff_f (powr, plus_infty, -1, 0.0, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, -0xffffff, 0.0, ERRNO_UNCHANGED),
#if !TEST_COND_binary32
TEST_ff_f (powr, plus_infty, -0x1.fffffffffffffp+52L, 0.0, ERRNO_UNCHANGED),
#endif
#if MANT_DIG >= 64
TEST_ff_f (powr, plus_infty, -0x1.fffffffffffffffep+63L, 0.0, ERRNO_UNCHANGED),
# if MANT_DIG >= 106
TEST_ff_f (powr, plus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, 0.0, ERRNO_UNCHANGED),
# endif
# if MANT_DIG >= 113
TEST_ff_f (powr, plus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, 0.0, ERRNO_UNCHANGED),
# endif
#endif
TEST_ff_f (powr, plus_infty, -0x1p24, 0.0, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, -0x1p127, 0.0, ERRNO_UNCHANGED),
TEST_ff_f (powr, plus_infty, -max_value, 0.0, ERRNO_UNCHANGED),
/* powr (-inf, y) is a NaN (unlike pow) for y an odd integer > 0. */
TEST_ff_f (powr, minus_infty, 27, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 0xffffff, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 0x1fffffe, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
#if !TEST_COND_binary32
TEST_ff_f (powr, minus_infty, 0x1.fffffffffffffp+52L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 0x1.fffffffffffffp+53L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
#endif
#if MANT_DIG >= 64
TEST_ff_f (powr, minus_infty, 0x1.fffffffffffffffep+63L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 0x1.fffffffffffffffep+64L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM|XFAIL_ROUNDING_IBM128_LIBGCC),
# if MANT_DIG >= 106
TEST_ff_f (powr, minus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 0x1.ffffffffffffffffffffffffff8p+106L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM|XFAIL_ROUNDING_IBM128_LIBGCC),
# endif
# if MANT_DIG >= 113
TEST_ff_f (powr, minus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 0x1.ffffffffffffffffffffffffffffp+113L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
# endif
#endif
/* powr (-inf, y) is a NaN (unlike pow) for y > 0 and not an odd integer. */
TEST_ff_f (powr, minus_infty, 0.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 28, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 0x1p24, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, 0x1p127, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
/* powr (-inf, y) is a NaN (unlike pow) for y an odd integer < 0. */
TEST_ff_f (powr, minus_infty, -3, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -0xffffff, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -0x1fffffe, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
#if !TEST_COND_binary32
TEST_ff_f (powr, minus_infty, -0x1.fffffffffffffp+52L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -0x1.fffffffffffffp+53L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
#endif
#if MANT_DIG >= 64
TEST_ff_f (powr, minus_infty, -0x1.fffffffffffffffep+63L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -0x1.fffffffffffffffep+64L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM|XFAIL_ROUNDING_IBM128_LIBGCC),
# if MANT_DIG >= 106
TEST_ff_f (powr, minus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -0x1.ffffffffffffffffffffffffff8p+106L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM|XFAIL_ROUNDING_IBM128_LIBGCC),
# endif
# if MANT_DIG >= 113
TEST_ff_f (powr, minus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -0x1.ffffffffffffffffffffffffffffp+113L, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
# endif
#endif
/* powr (-inf, y) is a NaN (unlike pow) for y < 0 and not an odd integer. */
TEST_ff_f (powr, minus_infty, -2.0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -0x1p24, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -0x1p127, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, minus_infty, -max_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, 0.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, 1.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -max_value, 1000.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, 0.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, 1.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_ff_f (powr, -min_value, 1000.5, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
AUTO_TESTS_ff_f (powr),
};
static void
powr_test (void)
{
ALL_RM_TEST (powr, 0, powr_test_data, RUN_TEST_LOOP_ff_f, END);
}
static void
do_test (void)
{
powr_test ();
}
/*
* Local Variables:
* mode:c
* End:
*/

50
math/s_powr_template.c Normal file
View File

@ -0,0 +1,50 @@
/* Return X^Y, with special cases based on exp(Y*log(X)).
Copyright (C) 2025 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_private.h>
FLOAT
M_DECL_FUNC (__powr) (FLOAT x, FLOAT y)
{
if (isless (x, M_LIT (0.0))
|| (x == M_LIT (0.0) && y == M_LIT (0.0))
|| (x == M_LIT (1.0) && isinf (y))
|| (isinf (x) && y == M_LIT (0.0)))
{
__set_errno (EDOM);
return (x - x) / (x - x);
}
if (isnan (x) || isnan (y))
return x + y;
x = M_FABS (x);
FLOAT ret = M_SUF (__ieee754_pow) (x, y);
if (!isfinite (ret))
{
if (isfinite (x) && isfinite (y))
__set_errno (ERANGE);
}
else if (ret == 0
&& isfinite (x)
&& x != 0
&& isfinite (y))
__set_errno (ERANGE);
return ret;
}
declare_mgen_alias (__powr, powr);

View File

@ -48,7 +48,7 @@ volatile int count_cdouble;
volatile int count_cfloat;
volatile int count_cldouble;
#define NCALLS 185
#define NCALLS 188
#define NCALLS_INT 4
#define NCCALLS 47
@ -268,6 +268,7 @@ F(compile_test) (void)
a = log10p1 (log10p1 (x));
a = logp1 (logp1 (x));
a = pow (pow (x, a), pow (c, b));
a = powr (powr (x, a), powr (c, b));
b = sqrt (sqrt (a));
a = rsqrt (rsqrt (b));
a = hypot (hypot (x, b), hypot (c, a));
@ -394,6 +395,7 @@ F(compile_test) (void)
a = log10p1 (y);
a = logp1 (y);
a = pow (y, y);
a = powr (y, y);
a = sqrt (y);
a = rsqrt (y);
a = hypot (y, y);
@ -771,6 +773,14 @@ TYPE
return x + y;
}
TYPE
(F(powr)) (TYPE x, TYPE y)
{
++count;
P ();
return x + y;
}
TYPE
(F(sqrt)) (TYPE x)
{

View File

@ -924,6 +924,10 @@
#define cbrt(Val) __TGMATH_UNARY_REAL_ONLY (Val, cbrt)
#if __GLIBC_USE (IEC_60559_FUNCS_EXT_C23)
/* Return X to the Y power. */
# define powr(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, powr)
/* Return 1/sqrt(X). */
# define rsqrt(Val) __TGMATH_UNARY_REAL_ONLY (Val, rsqrt)
#endif

View File

@ -154,6 +154,7 @@ libm {
__tanpiieee128;
}
GLIBC_2.42 {
__powrieee128;
__rsqrtieee128;
}
}

View File

@ -166,6 +166,7 @@ libnldbl-calls = \
obstack_vprintf \
obstack_vprintf_chk \
pow \
powr \
printf \
printf_chk \
printf_fp \
@ -375,6 +376,7 @@ CFLAGS-nldbl-nexttoward.c = -fno-builtin-nexttoward -fno-builtin-nexttowardl
CFLAGS-nldbl-nexttowardf.c = -fno-builtin-nexttowardf
CFLAGS-nldbl-nextup.c = -fno-builtin-nextupl
CFLAGS-nldbl-pow.c = -fno-builtin-powl
CFLAGS-nldbl-powr.c = -fno-builtin-powrl
CFLAGS-nldbl-remainder.c = -fno-builtin-remainderl -fno-builtin-dreml
CFLAGS-nldbl-remquo.c = -fno-builtin-remquol
CFLAGS-nldbl-rint.c = -fno-builtin-rintl

View File

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

View File

@ -1277,6 +1277,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1134,6 +1134,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1245,6 +1245,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1404,6 +1404,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -829,6 +829,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -920,6 +920,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -920,6 +920,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -895,6 +895,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -920,6 +920,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1284,6 +1284,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1124,6 +1124,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -920,6 +920,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -956,6 +956,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -920,6 +920,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -920,6 +920,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -920,6 +920,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1245,6 +1245,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -829,6 +829,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1067,6 +1067,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1066,6 +1066,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1060,6 +1060,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1429,7 +1429,16 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 __powrieee128 F
GLIBC_2.42 __rsqrtieee128 F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1124,6 +1124,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1221,6 +1221,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1348,6 +1348,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1348,6 +1348,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -920,6 +920,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -920,6 +920,12 @@ GLIBC_2.41 tanpif32 F
GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1355,6 +1355,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1245,6 +1245,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1278,6 +1278,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1278,6 +1278,14 @@ GLIBC_2.41 tanpif32x F
GLIBC_2.41 tanpif64 F
GLIBC_2.41 tanpif64x F
GLIBC_2.41 tanpil F
GLIBC_2.42 powr F
GLIBC_2.42 powrf F
GLIBC_2.42 powrf128 F
GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F