2017-09-04 16:55:33 +00:00
|
|
|
/* Single-precision pow function.
|
2023-01-06 21:08:04 +00:00
|
|
|
Copyright (C) 2017-2023 Free Software Foundation, Inc.
|
2017-06-23 12:10:32 +00:00
|
|
|
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
|
Prefer https to http for gnu.org and fsf.org URLs
Also, change sources.redhat.com to sourceware.org.
This patch was automatically generated by running the following shell
script, which uses GNU sed, and which avoids modifying files imported
from upstream:
sed -ri '
s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g
s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g
' \
$(find $(git ls-files) -prune -type f \
! -name '*.po' \
! -name 'ChangeLog*' \
! -path COPYING ! -path COPYING.LIB \
! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \
! -path manual/texinfo.tex ! -path scripts/config.guess \
! -path scripts/config.sub ! -path scripts/install-sh \
! -path scripts/mkinstalldirs ! -path scripts/move-if-change \
! -path INSTALL ! -path locale/programs/charmap-kw.h \
! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \
! '(' -name configure \
-execdir test -f configure.ac -o -f configure.in ';' ')' \
! '(' -name preconfigure \
-execdir test -f preconfigure.ac ';' ')' \
-print)
and then by running 'make dist-prepare' to regenerate files built
from the altered files, and then executing the following to cleanup:
chmod a+x sysdeps/unix/sysv/linux/riscv/configure
# Omit irrelevant whitespace and comment-only changes,
# perhaps from a slightly-different Autoconf version.
git checkout -f \
sysdeps/csky/configure \
sysdeps/hppa/configure \
sysdeps/riscv/configure \
sysdeps/unix/sysv/linux/csky/configure
# Omit changes that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines
git checkout -f \
sysdeps/powerpc/powerpc64/ppc-mcount.S \
sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
# Omit change that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline
git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-07 05:40:42 +00:00
|
|
|
<https://www.gnu.org/licenses/>. */
|
1996-03-05 21:41:30 +00:00
|
|
|
|
2012-03-09 19:29:16 +00:00
|
|
|
#include <math.h>
|
2018-12-10 11:08:36 +00:00
|
|
|
#include <math-barriers.h>
|
|
|
|
#include <math-narrow-eval.h>
|
2017-09-04 16:55:33 +00:00
|
|
|
#include <stdint.h>
|
2019-07-16 15:17:22 +00:00
|
|
|
#include <libm-alias-finite.h>
|
2017-10-10 21:29:11 +00:00
|
|
|
#include <libm-alias-float.h>
|
2017-09-04 16:55:33 +00:00
|
|
|
#include "math_config.h"
|
1996-03-05 21:41:30 +00:00
|
|
|
|
2017-09-04 16:55:33 +00:00
|
|
|
/*
|
|
|
|
POWF_LOG2_POLY_ORDER = 5
|
|
|
|
EXP2F_TABLE_BITS = 5
|
|
|
|
|
|
|
|
ULP error: 0.82 (~ 0.5 + relerr*2^24)
|
|
|
|
relerr: 1.27 * 2^-26 (Relative error ~= 128*Ln2*relerr_log2 + relerr_exp2)
|
|
|
|
relerr_log2: 1.83 * 2^-33 (Relative error of logx.)
|
|
|
|
relerr_exp2: 1.69 * 2^-34 (Relative error of exp2(ylogx).)
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define N (1 << POWF_LOG2_TABLE_BITS)
|
|
|
|
#define T __powf_log2_data.tab
|
|
|
|
#define A __powf_log2_data.poly
|
|
|
|
#define OFF 0x3f330000
|
|
|
|
|
|
|
|
/* Subnormal input is normalized so ix has negative biased exponent.
|
|
|
|
Output is multiplied by N (POWF_SCALE) if TOINT_INTRINICS is set. */
|
|
|
|
static inline double_t
|
|
|
|
log2_inline (uint32_t ix)
|
1996-03-05 21:41:30 +00:00
|
|
|
{
|
2017-09-04 16:55:33 +00:00
|
|
|
/* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
|
|
|
|
double_t z, r, r2, r4, p, q, y, y0, invc, logc;
|
|
|
|
uint32_t iz, top, tmp;
|
|
|
|
int k, i;
|
|
|
|
|
|
|
|
/* x = 2^k z; where z is in range [OFF,2*OFF] and exact.
|
|
|
|
The range is split into N subintervals.
|
|
|
|
The ith subinterval contains z and c is near its center. */
|
|
|
|
tmp = ix - OFF;
|
|
|
|
i = (tmp >> (23 - POWF_LOG2_TABLE_BITS)) % N;
|
|
|
|
top = tmp & 0xff800000;
|
|
|
|
iz = ix - top;
|
|
|
|
k = (int32_t) top >> (23 - POWF_SCALE_BITS); /* arithmetic shift */
|
|
|
|
invc = T[i].invc;
|
|
|
|
logc = T[i].logc;
|
|
|
|
z = (double_t) asfloat (iz);
|
|
|
|
|
|
|
|
/* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */
|
|
|
|
r = z * invc - 1;
|
|
|
|
y0 = logc + (double_t) k;
|
|
|
|
|
|
|
|
/* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */
|
|
|
|
r2 = r * r;
|
|
|
|
y = A[0] * r + A[1];
|
|
|
|
p = A[2] * r + A[3];
|
|
|
|
r4 = r2 * r2;
|
|
|
|
q = A[4] * r + y0;
|
|
|
|
q = p * r2 + q;
|
|
|
|
y = y * r4 + q;
|
|
|
|
return y;
|
|
|
|
}
|
1996-03-05 21:41:30 +00:00
|
|
|
|
2017-09-04 16:55:33 +00:00
|
|
|
#undef N
|
|
|
|
#undef T
|
|
|
|
#define N (1 << EXP2F_TABLE_BITS)
|
|
|
|
#define T __exp2f_data.tab
|
|
|
|
#define SIGN_BIAS (1 << (EXP2F_TABLE_BITS + 11))
|
|
|
|
|
|
|
|
/* The output of log2 and thus the input of exp2 is either scaled by N
|
|
|
|
(in case of fast toint intrinsics) or not. The unscaled xd must be
|
|
|
|
in [-1021,1023], sign_bias sets the sign of the result. */
|
|
|
|
static inline double_t
|
2018-06-13 14:07:21 +00:00
|
|
|
exp2_inline (double_t xd, uint32_t sign_bias)
|
2017-09-04 16:55:33 +00:00
|
|
|
{
|
|
|
|
uint64_t ki, ski, t;
|
|
|
|
/* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
|
|
|
|
double_t kd, z, r, r2, y, s;
|
|
|
|
|
|
|
|
#if TOINT_INTRINSICS
|
|
|
|
# define C __exp2f_data.poly_scaled
|
|
|
|
/* N*x = k + r with r in [-1/2, 1/2] */
|
|
|
|
kd = roundtoint (xd); /* k */
|
|
|
|
ki = converttoint (xd);
|
|
|
|
#else
|
|
|
|
# define C __exp2f_data.poly
|
|
|
|
# define SHIFT __exp2f_data.shift_scaled
|
|
|
|
/* x = k/N + r with r in [-1/(2N), 1/(2N)] */
|
|
|
|
kd = (double) (xd + SHIFT); /* Rounding to double precision is required. */
|
|
|
|
ki = asuint64 (kd);
|
|
|
|
kd -= SHIFT; /* k/N */
|
|
|
|
#endif
|
|
|
|
r = xd - kd;
|
|
|
|
|
|
|
|
/* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */
|
|
|
|
t = T[ki % N];
|
|
|
|
ski = ki + sign_bias;
|
|
|
|
t += ski << (52 - EXP2F_TABLE_BITS);
|
|
|
|
s = asdouble (t);
|
|
|
|
z = C[0] * r + C[1];
|
|
|
|
r2 = r * r;
|
|
|
|
y = C[2] * r + 1;
|
|
|
|
y = z * r2 + y;
|
|
|
|
y = y * s;
|
|
|
|
return y;
|
|
|
|
}
|
2017-06-23 12:10:32 +00:00
|
|
|
|
2018-09-19 09:09:41 +00:00
|
|
|
/* Returns 0 if not int, 1 if odd int, 2 if even int. The argument is
|
|
|
|
the bit representation of a non-zero finite floating-point value. */
|
2017-09-04 16:55:33 +00:00
|
|
|
static inline int
|
|
|
|
checkint (uint32_t iy)
|
|
|
|
{
|
|
|
|
int e = iy >> 23 & 0xff;
|
|
|
|
if (e < 0x7f)
|
|
|
|
return 0;
|
|
|
|
if (e > 0x7f + 23)
|
|
|
|
return 2;
|
|
|
|
if (iy & ((1 << (0x7f + 23 - e)) - 1))
|
|
|
|
return 0;
|
|
|
|
if (iy & (1 << (0x7f + 23 - e)))
|
|
|
|
return 1;
|
|
|
|
return 2;
|
|
|
|
}
|
update from main archive 961030
Thu Oct 31 00:01:39 1996 Ulrich Drepper <drepper@cygnus.com>
* signal/Makefile (routines): Add sigwait.
* signal/signal.h: Add prototype for sigwait.
* sysdeps/posix/sigwait.c: New file. Implementation of sigwait
function from POSIX.1c.
* sysdeps/stub/sigwait.c: New file. Stub version of sigwait.
Wed Oct 30 02:01:17 1996 Richard Henderson <rth@tamu.edu>
* sunrpc/xdr_float.c (xdr_float): Handle sizeof(float)!=sizeof(long),
but don't bother going farther than sizeof(float)==sizeof(int).
(xdr_double): Handle little-endian machines! Handle sizeof(double)
!= 2*sizeof(long), though again don't bother with more than int.
Thu Oct 29 16:09:42 1996 Craig Metz <cmetz@inner.net>
* sysdeps/posix/getaddrinfo.c: Use buffer limits for inet_ntop
function.
Tue Oct 29 12:37:22 1996 Ulrich Drepper <drepper@cygnus.com>
* Makerules: Create symbolic links for linking in $(libdir).
(make-link): Use absolute path for destination if this is not in
the same directory.
* elf/rtld.c (dl_main): When verifying don't check the name of
the dynamic linker.
* shlib-versions: Change entries for Hurd specific libs from
*-*-gnu* to *-*-gnu?* so that i586-pc-linux-gnu does not match
these entries.
* assert/assert.h: Reformat copyright.
Change reference to ANSI into reference to ISO C.
* ctype/ctype.h: Likewise.
* errno.h: Likewise.
* limits.h: Likewise.
* math/math.h: Likewise.
* setjmp/setjmp.h: Likewise.
* stdio/stdio.h: Likewise.
* libio/stdio.h: Likewise.
* stdlib/stdlib.h: Likewise.
* string/string.h: Likewise.
* time/time.h: Likewise.
* string/argz.h: Use __const is definitions.
* elf/dlfcn.h: Use __const and __P. Reformat copyright.
* misc/err.h: Likewise.
* wctype/wctype.h (wctrans_t): Use __const instead of const.
* Makeconfig ($(common-objpfx)soversions.mk): Generate list of
sonames for versioned libraries.
* Makefile: Remove code to generate libc-version.h.
Generate gnu/lib-names.h with info from soversions.mk.
* features.h: Define __GLIBC__ and __GLIBC_MINOR__.
* dirent/tst-seekdir.c: Initialize save3.
* grp/testgrp.c: Initialize my_group.
* grp/fgetgrent_r.c: Change interface to follow POSIX.1c.
* grp/grp.h: Likewise.
* nss/getXXbyYY.c: Likewise.
* nss/getXXbyYY_r.c: Likewise.
* nss/getXXent.c: Likewise.
* nss/getXXent_r.c: Likewise.
* pwd/fgetpwent_r.c: Likewise.
* pwd/pwd.h: Likewise.
* shadow/fgetspent_r.c: Likewise.
* shadow/sgetspent.c: Likewise.
* shadow/sgetspent_r.c: Likewise.
* grp/fgetgrent.c: Adapt for change in interface of fgetgrent_r.
* pwd/fgetpwent.c: Likewise, for fgetpwent_r.c.
* shadow/fgetspent.c: Likewise, for fgetpwent_r.c.
* resolv/netdb.h: Adapt prototypes for reentrant functions to
follow POSIX.1c.
* sunrpc/rpc/netdb.h: Likewise,
* shadow/shadow.h: Likewise.
* inet/getnetgrent_r.c: Follow change in pwd/grp function interface.
* sysdeps/unix/getlogin_r.c: Return ERANGE when buffer is too small.
* inet/herrno.c: Don't define __h_errno. Only h_errno otherwise the
ELF aliasing creates strange situations.
* sysdeps/unix/sysv/linux/errnos.H: Define __set_errno as inline
function.
* sysdeps/unix/sysv/linux/i386/sysdep.S: Don't define __errno.
* sysdeps/unix/sysv/linux/m68k/sysdep.S: Likewise.
* libio/libio.h: Don't declare _IO_flockfile and _IO_funlockfile
weak.
* locale/programs/charmap.c: Add casts to prevent warnings.
* locale/programs/linereader.h: Likewise.
* locale/programs/ld-collate.c: Likewise.
* locale/programs/stringtrans.c: Likewise.
Change types for various variables to prevent warnings.
* locale/programs/ld-ctype.c: Likewise.
* locale/programs/linereader.h (lr_ungetc): Likewise.
* locale/programs/charset.h (struct charset): Use `unsigned int'
as type for width_default.
* posix/regex.c: Change type of `this_reg' variables.
* stdio-common/Makefile: Use -Wno-format for tstdiomisc.c.
* stdio-common/bug5.c: De-ANSI-fy. Use correct types for
variables.
* stdio-common/printf_fp.c: Initialize to_shift.
* stdio-common/test_rdwr.c: Add cast.
* stdio-common/vfprintf.c: Add casts and use correct types to
prevent warnings.
* stdio-common/vfscanf.c: Initialize str and strptr.
* sysdeps/libm-ieee754/e_jnf.c: Use correct types to prevent warnings.
* sysdeps/libm-ieee754/e_pow.c: Likewise.
* sysdeps/libm-ieee754/e_powf.c: Likewise.
* sysdeps/libm-ieee754/e_rem_pio2f.c: Likewise.
* time/test-tz.c: Likewise.
* manual/creature.texi: Document _REENTRANT and _THREAD_SAFE.
* manual/libc.texinfo: Prevent makeinfo failure by avoiding
libc.cp index. This must be fixed.
* manual/nss.texi: Adapt for correct POSIX.1c interface of
reentrant functions.
* manual/users.texi: Document netgroup functions.
* po/es.po: Updated.
* po/fr.po: Updated.
* posix/fnmatch.c: Change to match libit version.
* posix/unistd.h: Change prototype for ttyname_r to match POSIX.1c.
* sysdep/posix/ttyname_r.c: Likewise.
* stdlib/atexit.h (__new_exitfn): Add internal locking.
* stdlib/exit.c: De-ANSI-fy. Handle new ef_us value for flavor.
* stdlib/exit.h: De-ANSI-fy. Define new ef_us value for flavor.
* stdlib/random.c (__srandom): Add internal locking.
(__initstate): Likewise.
(__setstate): Likewise.
(__random): Likewise.
Mon Oct 28 22:28:37 1996 NIIBE Yutaka <gniibe@mri.co.jp>
* sysdeps/generic/crypt-entry.c (crypt_r): Use __set_errno.
(crypt): Likewise.
* resolv/gethnamaddr.c (gethostbyname2): Likewise.
* sysdeps/generic/uname.c: Likewise.
* sysdeps/posix/rename.c: Likewise.
* sysdeps/stub/setrlimit.c: Likewise.
* nss/nss_db/db-netgrp.c (_nss_db_setnetgrent): Fix typo.
Sun Oct 27 11:12:50 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* locale/programs/ld-collate.c (collate_order_elem): Fix format
string.
(collate_element_to): Cast field width argument to `int' for
format string.
(collate_symbol): Likewise.
(collate_order_elem): Likewise.
(collate_weight_bsymbol): Likewise.
(collate_simple_weight): Likewise.
* locale/programs/ld-time.c (STRARR_ELEM): Fix format string.
* locale/programs/ld-ctype.c (ctype_class_newP): Add missing
argument for format string.
(ctype_map_newP): Likewise.
(set_class_defaults): Fix format string.
* locale/programs/localedef.c (construct_output_path): Putting an
explicit \0 into the format string does not work, use %c.
Sat Oct 26 20:38:36 1996 Richard Henderson <rth@tamu.edu>
* Makerules: Install all shared libraries in $(slibdir).
* login/Makefile: Build libutil.so in others pass after
libc.so is created.
* misc/mntent.h: Include <paths.h> for _PATH_MNTTAB & _PATH_MOUNTED.
* string/stratcliff.c: Allocate 3 pages instead of one, then use
mprotect so that we know that the adjacent pages are inaccessible.
* resource/sys/resource.h: Move all structures and enums to ...
* sysdeps/generic/resourcebits.h: ... here ...
* sysdeps/unix/bsd/sun/sunos4/resourcebits.h: ... and here.
* sysdeps/unix/sysv/linux/alpha/resourcebits.h: Remove.
* sysdeps/unix/sysv/linux/i386/resourcebits.h: Remove.
* sysdeps/unix/sysv/linux/m68k/resourcebits.h: Remove.
* sysdeps/unix/sysv/linux/mips/resourcebits.h: Remove.
* sysdeps/unix/sysv/linux/resourcebits.h: New file. Use kernel
header for RLIMIT_* definitions. The members of struct rlimit
are longs.
Thu Oct 24 17:43:34 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* MakeTAGS (sysdep-dirs): Fix typo.
Wed Oct 23 03:45:22 1996 Ulrich Drepper <drepper@cygnus.com>
* Makefile (headers): Don't mention libc-version.h.
(install-others): ...but here.
* time/strptime.c: Recognize %s, %u, %g, and %G format.
nothing is found. This guarantees all subsequent calls behave
* sysdeps/unix/sysv/linux/syscalls.list: Change function name for
* io/getwd.c (getwd) [! PATH_MAX]: Don't assume that the user's
buffer is any longer than the amount necessary to hold the
filename; the Hurd getcwd uses the *entire* contents of the
buffer, however long it is specified to be.
* posix/getconf.c: De-ANSI-fy. Recognize POSIX.2 constant names.
since these do not depend on the platform.
1996-10-31 02:57:12 +00:00
|
|
|
|
2017-09-04 16:55:33 +00:00
|
|
|
static inline int
|
|
|
|
zeroinfnan (uint32_t ix)
|
|
|
|
{
|
|
|
|
return 2 * ix - 1 >= 2u * 0x7f800000 - 1;
|
|
|
|
}
|
1996-03-05 21:41:30 +00:00
|
|
|
|
2017-09-04 16:55:33 +00:00
|
|
|
float
|
2017-09-13 17:14:26 +00:00
|
|
|
__powf (float x, float y)
|
2017-09-04 16:55:33 +00:00
|
|
|
{
|
2018-06-13 14:07:21 +00:00
|
|
|
uint32_t sign_bias = 0;
|
2017-09-04 16:55:33 +00:00
|
|
|
uint32_t ix, iy;
|
|
|
|
|
|
|
|
ix = asuint (x);
|
|
|
|
iy = asuint (y);
|
|
|
|
if (__glibc_unlikely (ix - 0x00800000 >= 0x7f800000 - 0x00800000
|
|
|
|
|| zeroinfnan (iy)))
|
|
|
|
{
|
|
|
|
/* Either (x < 0x1p-126 or inf or nan) or (y is 0 or inf or nan). */
|
|
|
|
if (__glibc_unlikely (zeroinfnan (iy)))
|
|
|
|
{
|
|
|
|
if (2 * iy == 0)
|
2019-11-21 17:57:41 +00:00
|
|
|
return issignaling (x) ? x + y : 1.0f;
|
2017-09-04 16:55:33 +00:00
|
|
|
if (ix == 0x3f800000)
|
2019-11-21 17:57:41 +00:00
|
|
|
return issignaling (y) ? x + y : 1.0f;
|
2017-09-04 16:55:33 +00:00
|
|
|
if (2 * ix > 2u * 0x7f800000 || 2 * iy > 2u * 0x7f800000)
|
|
|
|
return x + y;
|
|
|
|
if (2 * ix == 2 * 0x3f800000)
|
|
|
|
return 1.0f;
|
|
|
|
if ((2 * ix < 2 * 0x3f800000) == !(iy & 0x80000000))
|
|
|
|
return 0.0f; /* |x|<1 && y==inf or |x|>1 && y==-inf. */
|
|
|
|
return y * y;
|
|
|
|
}
|
|
|
|
if (__glibc_unlikely (zeroinfnan (ix)))
|
|
|
|
{
|
|
|
|
float_t x2 = x * x;
|
|
|
|
if (ix & 0x80000000 && checkint (iy) == 1)
|
|
|
|
{
|
|
|
|
x2 = -x2;
|
|
|
|
sign_bias = 1;
|
|
|
|
}
|
|
|
|
#if WANT_ERRNO
|
|
|
|
if (2 * ix == 0 && iy & 0x80000000)
|
|
|
|
return __math_divzerof (sign_bias);
|
|
|
|
#endif
|
|
|
|
return iy & 0x80000000 ? 1 / x2 : x2;
|
1996-03-05 21:41:30 +00:00
|
|
|
}
|
2017-09-04 16:55:33 +00:00
|
|
|
/* x and y are non-zero finite. */
|
|
|
|
if (ix & 0x80000000)
|
|
|
|
{
|
|
|
|
/* Finite x < 0. */
|
|
|
|
int yint = checkint (iy);
|
|
|
|
if (yint == 0)
|
|
|
|
return __math_invalidf (x);
|
|
|
|
if (yint == 1)
|
|
|
|
sign_bias = SIGN_BIAS;
|
|
|
|
ix &= 0x7fffffff;
|
1996-03-05 21:41:30 +00:00
|
|
|
}
|
2017-09-04 16:55:33 +00:00
|
|
|
if (ix < 0x00800000)
|
|
|
|
{
|
|
|
|
/* Normalize subnormal x so exponent becomes negative. */
|
|
|
|
ix = asuint (x * 0x1p23f);
|
|
|
|
ix &= 0x7fffffff;
|
|
|
|
ix -= 23 << 23;
|
update from main archive 961030
Thu Oct 31 00:01:39 1996 Ulrich Drepper <drepper@cygnus.com>
* signal/Makefile (routines): Add sigwait.
* signal/signal.h: Add prototype for sigwait.
* sysdeps/posix/sigwait.c: New file. Implementation of sigwait
function from POSIX.1c.
* sysdeps/stub/sigwait.c: New file. Stub version of sigwait.
Wed Oct 30 02:01:17 1996 Richard Henderson <rth@tamu.edu>
* sunrpc/xdr_float.c (xdr_float): Handle sizeof(float)!=sizeof(long),
but don't bother going farther than sizeof(float)==sizeof(int).
(xdr_double): Handle little-endian machines! Handle sizeof(double)
!= 2*sizeof(long), though again don't bother with more than int.
Thu Oct 29 16:09:42 1996 Craig Metz <cmetz@inner.net>
* sysdeps/posix/getaddrinfo.c: Use buffer limits for inet_ntop
function.
Tue Oct 29 12:37:22 1996 Ulrich Drepper <drepper@cygnus.com>
* Makerules: Create symbolic links for linking in $(libdir).
(make-link): Use absolute path for destination if this is not in
the same directory.
* elf/rtld.c (dl_main): When verifying don't check the name of
the dynamic linker.
* shlib-versions: Change entries for Hurd specific libs from
*-*-gnu* to *-*-gnu?* so that i586-pc-linux-gnu does not match
these entries.
* assert/assert.h: Reformat copyright.
Change reference to ANSI into reference to ISO C.
* ctype/ctype.h: Likewise.
* errno.h: Likewise.
* limits.h: Likewise.
* math/math.h: Likewise.
* setjmp/setjmp.h: Likewise.
* stdio/stdio.h: Likewise.
* libio/stdio.h: Likewise.
* stdlib/stdlib.h: Likewise.
* string/string.h: Likewise.
* time/time.h: Likewise.
* string/argz.h: Use __const is definitions.
* elf/dlfcn.h: Use __const and __P. Reformat copyright.
* misc/err.h: Likewise.
* wctype/wctype.h (wctrans_t): Use __const instead of const.
* Makeconfig ($(common-objpfx)soversions.mk): Generate list of
sonames for versioned libraries.
* Makefile: Remove code to generate libc-version.h.
Generate gnu/lib-names.h with info from soversions.mk.
* features.h: Define __GLIBC__ and __GLIBC_MINOR__.
* dirent/tst-seekdir.c: Initialize save3.
* grp/testgrp.c: Initialize my_group.
* grp/fgetgrent_r.c: Change interface to follow POSIX.1c.
* grp/grp.h: Likewise.
* nss/getXXbyYY.c: Likewise.
* nss/getXXbyYY_r.c: Likewise.
* nss/getXXent.c: Likewise.
* nss/getXXent_r.c: Likewise.
* pwd/fgetpwent_r.c: Likewise.
* pwd/pwd.h: Likewise.
* shadow/fgetspent_r.c: Likewise.
* shadow/sgetspent.c: Likewise.
* shadow/sgetspent_r.c: Likewise.
* grp/fgetgrent.c: Adapt for change in interface of fgetgrent_r.
* pwd/fgetpwent.c: Likewise, for fgetpwent_r.c.
* shadow/fgetspent.c: Likewise, for fgetpwent_r.c.
* resolv/netdb.h: Adapt prototypes for reentrant functions to
follow POSIX.1c.
* sunrpc/rpc/netdb.h: Likewise,
* shadow/shadow.h: Likewise.
* inet/getnetgrent_r.c: Follow change in pwd/grp function interface.
* sysdeps/unix/getlogin_r.c: Return ERANGE when buffer is too small.
* inet/herrno.c: Don't define __h_errno. Only h_errno otherwise the
ELF aliasing creates strange situations.
* sysdeps/unix/sysv/linux/errnos.H: Define __set_errno as inline
function.
* sysdeps/unix/sysv/linux/i386/sysdep.S: Don't define __errno.
* sysdeps/unix/sysv/linux/m68k/sysdep.S: Likewise.
* libio/libio.h: Don't declare _IO_flockfile and _IO_funlockfile
weak.
* locale/programs/charmap.c: Add casts to prevent warnings.
* locale/programs/linereader.h: Likewise.
* locale/programs/ld-collate.c: Likewise.
* locale/programs/stringtrans.c: Likewise.
Change types for various variables to prevent warnings.
* locale/programs/ld-ctype.c: Likewise.
* locale/programs/linereader.h (lr_ungetc): Likewise.
* locale/programs/charset.h (struct charset): Use `unsigned int'
as type for width_default.
* posix/regex.c: Change type of `this_reg' variables.
* stdio-common/Makefile: Use -Wno-format for tstdiomisc.c.
* stdio-common/bug5.c: De-ANSI-fy. Use correct types for
variables.
* stdio-common/printf_fp.c: Initialize to_shift.
* stdio-common/test_rdwr.c: Add cast.
* stdio-common/vfprintf.c: Add casts and use correct types to
prevent warnings.
* stdio-common/vfscanf.c: Initialize str and strptr.
* sysdeps/libm-ieee754/e_jnf.c: Use correct types to prevent warnings.
* sysdeps/libm-ieee754/e_pow.c: Likewise.
* sysdeps/libm-ieee754/e_powf.c: Likewise.
* sysdeps/libm-ieee754/e_rem_pio2f.c: Likewise.
* time/test-tz.c: Likewise.
* manual/creature.texi: Document _REENTRANT and _THREAD_SAFE.
* manual/libc.texinfo: Prevent makeinfo failure by avoiding
libc.cp index. This must be fixed.
* manual/nss.texi: Adapt for correct POSIX.1c interface of
reentrant functions.
* manual/users.texi: Document netgroup functions.
* po/es.po: Updated.
* po/fr.po: Updated.
* posix/fnmatch.c: Change to match libit version.
* posix/unistd.h: Change prototype for ttyname_r to match POSIX.1c.
* sysdep/posix/ttyname_r.c: Likewise.
* stdlib/atexit.h (__new_exitfn): Add internal locking.
* stdlib/exit.c: De-ANSI-fy. Handle new ef_us value for flavor.
* stdlib/exit.h: De-ANSI-fy. Define new ef_us value for flavor.
* stdlib/random.c (__srandom): Add internal locking.
(__initstate): Likewise.
(__setstate): Likewise.
(__random): Likewise.
Mon Oct 28 22:28:37 1996 NIIBE Yutaka <gniibe@mri.co.jp>
* sysdeps/generic/crypt-entry.c (crypt_r): Use __set_errno.
(crypt): Likewise.
* resolv/gethnamaddr.c (gethostbyname2): Likewise.
* sysdeps/generic/uname.c: Likewise.
* sysdeps/posix/rename.c: Likewise.
* sysdeps/stub/setrlimit.c: Likewise.
* nss/nss_db/db-netgrp.c (_nss_db_setnetgrent): Fix typo.
Sun Oct 27 11:12:50 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* locale/programs/ld-collate.c (collate_order_elem): Fix format
string.
(collate_element_to): Cast field width argument to `int' for
format string.
(collate_symbol): Likewise.
(collate_order_elem): Likewise.
(collate_weight_bsymbol): Likewise.
(collate_simple_weight): Likewise.
* locale/programs/ld-time.c (STRARR_ELEM): Fix format string.
* locale/programs/ld-ctype.c (ctype_class_newP): Add missing
argument for format string.
(ctype_map_newP): Likewise.
(set_class_defaults): Fix format string.
* locale/programs/localedef.c (construct_output_path): Putting an
explicit \0 into the format string does not work, use %c.
Sat Oct 26 20:38:36 1996 Richard Henderson <rth@tamu.edu>
* Makerules: Install all shared libraries in $(slibdir).
* login/Makefile: Build libutil.so in others pass after
libc.so is created.
* misc/mntent.h: Include <paths.h> for _PATH_MNTTAB & _PATH_MOUNTED.
* string/stratcliff.c: Allocate 3 pages instead of one, then use
mprotect so that we know that the adjacent pages are inaccessible.
* resource/sys/resource.h: Move all structures and enums to ...
* sysdeps/generic/resourcebits.h: ... here ...
* sysdeps/unix/bsd/sun/sunos4/resourcebits.h: ... and here.
* sysdeps/unix/sysv/linux/alpha/resourcebits.h: Remove.
* sysdeps/unix/sysv/linux/i386/resourcebits.h: Remove.
* sysdeps/unix/sysv/linux/m68k/resourcebits.h: Remove.
* sysdeps/unix/sysv/linux/mips/resourcebits.h: Remove.
* sysdeps/unix/sysv/linux/resourcebits.h: New file. Use kernel
header for RLIMIT_* definitions. The members of struct rlimit
are longs.
Thu Oct 24 17:43:34 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* MakeTAGS (sysdep-dirs): Fix typo.
Wed Oct 23 03:45:22 1996 Ulrich Drepper <drepper@cygnus.com>
* Makefile (headers): Don't mention libc-version.h.
(install-others): ...but here.
* time/strptime.c: Recognize %s, %u, %g, and %G format.
nothing is found. This guarantees all subsequent calls behave
* sysdeps/unix/sysv/linux/syscalls.list: Change function name for
* io/getwd.c (getwd) [! PATH_MAX]: Don't assume that the user's
buffer is any longer than the amount necessary to hold the
filename; the Hurd getcwd uses the *entire* contents of the
buffer, however long it is specified to be.
* posix/getconf.c: De-ANSI-fy. Recognize POSIX.2 constant names.
since these do not depend on the platform.
1996-10-31 02:57:12 +00:00
|
|
|
}
|
2017-09-04 16:55:33 +00:00
|
|
|
}
|
|
|
|
double_t logx = log2_inline (ix);
|
|
|
|
double_t ylogx = y * logx; /* Note: cannot overflow, y is single prec. */
|
|
|
|
if (__glibc_unlikely ((asuint64 (ylogx) >> 47 & 0xffff)
|
|
|
|
>= asuint64 (126.0 * POWF_SCALE) >> 47))
|
|
|
|
{
|
|
|
|
/* |y*log(x)| >= 126. */
|
|
|
|
if (ylogx > 0x1.fffffffd1d571p+6 * POWF_SCALE)
|
2018-12-10 11:08:36 +00:00
|
|
|
/* |x^y| > 0x1.ffffffp127. */
|
2017-09-04 16:55:33 +00:00
|
|
|
return __math_oflowf (sign_bias);
|
2018-12-10 11:08:36 +00:00
|
|
|
if (WANT_ROUNDING && WANT_ERRNO
|
|
|
|
&& ylogx > 0x1.fffffffa3aae2p+6 * POWF_SCALE)
|
|
|
|
/* |x^y| > 0x1.fffffep127, check if we round away from 0. */
|
|
|
|
if ((!sign_bias
|
|
|
|
&& math_narrow_eval (1.0f + math_opt_barrier (0x1p-25f)) != 1.0f)
|
|
|
|
|| (sign_bias
|
|
|
|
&& math_narrow_eval (-1.0f - math_opt_barrier (0x1p-25f))
|
|
|
|
!= -1.0f))
|
|
|
|
return __math_oflowf (sign_bias);
|
2017-09-04 16:55:33 +00:00
|
|
|
if (ylogx <= -150.0 * POWF_SCALE)
|
|
|
|
return __math_uflowf (sign_bias);
|
|
|
|
#if WANT_ERRNO_UFLOW
|
|
|
|
if (ylogx < -149.0 * POWF_SCALE)
|
|
|
|
return __math_may_uflowf (sign_bias);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
return (float) exp2_inline (ylogx, sign_bias);
|
1996-03-05 21:41:30 +00:00
|
|
|
}
|
2017-09-13 17:14:26 +00:00
|
|
|
#ifndef __powf
|
|
|
|
strong_alias (__powf, __ieee754_powf)
|
2019-07-16 15:17:22 +00:00
|
|
|
libm_alias_finite (__ieee754_powf, __powf)
|
2017-09-13 17:14:26 +00:00
|
|
|
versioned_symbol (libm, __powf, powf, GLIBC_2_27);
|
2017-10-10 21:29:11 +00:00
|
|
|
libm_alias_float_other (__pow, pow)
|
2017-09-13 17:14:26 +00:00
|
|
|
#endif
|