Age | Commit message (Collapse) | Author | Files | Lines |
|
bug 14155)
This fix comes from glibc, from files which originated from
the same place as the newlib files. Those files in glibc carry
the same license as the newlib files.
Bug 14155 is spurious underflow exceptions from Bessel functions for
large arguments. (The correct results for large x are roughly
constant * sin or cos (x + constant) / sqrt (x), so no underflow
exceptions should occur based on the final result.)
There are various places underflows may occur in the intermediate
calculations that cause the failures listed in that bug. This patch
fixes problems for the double version where underflows occur in
calculating the intermediate functions P and Q (in particular, x**-12
gets computed while calculating Q). Appropriate approximations are
used for P and Q for arguments at least 0x1p28 and above to avoid the
underflows.
For sufficiently large x - 0x1p129 and above - the code already has a
cut-off to avoid calculating P and Q at all, which means the
approximations -0.125 / x and 0.375 / x can't themselves cause
underflows calculating Q. This cut-off is heuristically reasonable
for the point beyond which Q can be neglected (based on expecting
around 0x1p-64 to be the least absolute value of sin or cos for large
arguments representable in double).
The float versions use a cut-off 0x1p17, which is less heuristically
justifiable but should still only affect values near zeroes of the
Bessel functions where these implementations are intrinsically
inaccurate anyway (bugs 14469-14472), and should serve to avoid
underflows (the float underflow for jn in bug 14155 probably comes
from the recurrence to compute jn). ldbl-96 uses 0x1p129, which may
not really be enough heuristically (0x1p143 or so might be safer - 143
= 64 + 79, number of mantissa bits plus total number of significant
bits in representation) but again should avoid underflows and only
affect values where the code is substantially inaccurate anyway.
ldbl-128 and ldbl-128ibm share a completely different implementation
with no such cut-off, which I propose to fix separately.
Signed-off-by: Keith Packard <keithp@keithp.com>
|
|
Add the missing mask for the decomposition of hi+lo which caused some
errors of 1-2 ULP.
This change is taken over from FreeBSD:
https://github.com/freebsd/freebsd/commit/95436ce20dab5a34ba46373410b96411b1734578
Additionally I've removed some variable assignments which were never
read before being overwritten again in the next 2 lines.
|
|
This fix for k_tan.c is a copy from fdlibm version 5.3 (see also
http://www.netlib.org/fdlibm/readme), adjusted to use the macros
available in newlib (SET_LOW_WORD).
This fix reduces the ULP error of the value shown in the fdlibm readme
(tan(1.7765241907548024E+269)) to 0.45 (thereby reducing the error by
1).
This issue only happens for large numbers that get reduced by the range
reduction to a value smaller in magnitude than 2^-28, that is also
reduced an uneven number of times. This seems rather unlikely given that
one ULP is (much) larger than 2^-28 for the values that may cause an
issue. Although given the sheer number of values a double can
represent, it is still possible that there are more affected values,
finding them however will be quite hard, if not impossible.
We also took a look at how another library (libm in FreeBSD) handles the
issue: In FreeBSD the complete if branch which checks for values smaller
than 2^-28 (or rather 2^-27, another change done by FreeBSD) is moved
out of the kernel function and into the external function. This means
that the value that gets checked for this condition is the unreduced
value. Therefore the input value which caused a problem in the
fdlibm/newlib kernel tan will run through the full polynomial, including
the careful calculation of -1/(x+r). So the difference is really whether
r or y is used. r = y + p with p being the result of the polynomial with
1/3*x^3 being the largest (and magnitude defining) value. With x being
<2^-27 we therefore know that p is smaller than y (y has to be at least
the size of the value of x last mantissa bit divided by 2, which is at
least x*2^-51 for doubles) by enough to warrant saying that r ~ y. So
we can conclude that the general implementation of this special case is
the same, FreeBSD simply has a different philosophy on when to handle
especially small numbers.
|
|
While testing the exp function we noticed some errors at the specified
magnitude. Within this range the exp function returns the input value +1
as an output. We chose to run a test of 1m exponentially spaced values
in the ranges [-2^-27,-2^-32] and [2^-32,2^-27] which showed 7603 and
3912 results with an error of >=0.5 ULP (compared with MPFR in 128 bit)
with the highest being 0.56 ULP and 0.53 ULP.
It's easy to fix by changing the magnitude at which the input value +1
is returned from <2^-28 to <2^-32 and using the polynomial instead. This
reduces the number of results with an error of >=0.5 ULP to 485 and 479
in above tests, all of which are exactly 0.5 ULP.
As we were already checking on exp we also took a look at expf. For expf
the magnitude where the input value +1 is returned can be increased from
<2^-28 to <2^-23 without accuracy loss for a slight performance
improvement. To ensure this was the correct value we tested all values
in the ranges [-2^-17,-2^-28] and [2^-28,2^-17] (~92.3m values each).
|
|
The single-precision trigonometric functions show rather high errors in
specific ranges starting at about 30000 radians. For example the sinf
procedure produces an error of 7626.55 ULP with the input
5.195880078125e+04 (0x474AF6CD) (compared with MPFR in 128bit
precision). For the test we used 100k values evenly spaced in the range
of [30k, 70k]. The issues are periodic at higher ranges.
This error was introduced when the double precision range reduction was
first converted to float. The shift by 8 bits always returns 0 as iq is
never higher than 255.
The fix reduces the error of the example above to 0.45 ULP, highest
error within the test set fell to 1.31 ULP, which is not perfect, but
still a significant improvement. Testing other previously erroneous
ranges no longer show particularly large accuracy errors.
|
|
Prevent confusion between -1.0 and 1.0 in powf. The corresponding
similar error was previously fixed for pow (see commit bb25dd1b)
|
|
I think I may have encountered a bug in the implementation of pow:
pow(-1.0, NaN) returns 1.0 when it should return NaN.
Because ix is used to check input vs 1.0 rather than hx, -1.0 is
mistaken for 1.0
|
|
This patch reduces code size for a few single-precision float math
functions, by using nanf() instead of nan() where required.
|
|
This patch replaces instances of "(float).*HUGE_VAL" with a direct usage of
HUGE_VALF, which is also defined in math.h.
|
|
This patch removes the definitions of HUGE_VAL from some of the float math
functions. HUGE_VAL is defined in newlib/libc/include/math.h, so it is not
necessary to have a further definition in the math functions.
|
|
Default math library configuration is now IEEE
|
|
constant fits in an int.
|
|
Defined, never mentioned.
Signed-off-by: Keith Packard <keithp@keithp.com>
|
|
* unused variables
* potentially used uninitialized
* suggested bracketing
* misleading indentation
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
|
|
The new implementation is provided under !__OBSOLETE_MATH, it uses
ISO C99 code. With default settings the worst case error in nearest
rounding mode is 0.54 ULP with inlined fma and fma contraction. It uses
a 4 KB lookup table in addition to the table in exp_data.c, on aarch64
.text+.rodata size of libm.a is increased by 2295 bytes.
Improvements on Cortex-A72:
latency: 3.3x
thruput: 4.9x
|
|
The new implementations are provided under !__OBSOLETE_MATH, it uses
ISO C99 code. With default settings the worst case error in nearest
rounding mode is 0.519 ULP with inlined fma and fma contraction. It uses
a 2 KB lookup table, on aarch64 .text+.rodata size of libm.a is increased
by 1703 bytes. The w_log.c wrapper is disabled since error handling is
inline in the new code.
New __HAVE_FAST_FMA and __HAVE_FAST_FMA_DEFAULT feature macros were
added to enable selecting between the code path that uses fma and the
one that does not. Targets supposed to set __HAVE_FAST_FMA_DEFAULT
if they have single instruction fma and the compiler can actually
inline it (gcc has __FP_FAST_FMA macro but that does not guarantee
inlining with -fno-builtin-fma).
Improvements on Cortex-A72:
latency: 1.9x
thruput: 2.3x
|
|
The new implementations are provided under !__OBSOLETE_MATH, they use
ISO C99 code. There are several settings, with the default one the
worst case error in nearest rounding mode is 0.509 ULP for exp and
0.507 ULP for exp2 when a multiply and add is contracted into an fma.
They use a shared 2 KB lookup table, on aarch64 .text+.rodata size
of libm.a is increased by 1868 bytes. The w_*.c wrappers are disabled
for the new code as it takes care of error handling inline.
The old exp2(x) code used to be just pow(2,x) so the speedup there
is more significant.
The file name has no special prefix to avoid any name collision with
existing files.
Improvements on Cortex-A72:
exp latency: 3.2x
exp thruput: 4.1x
exp2 latency: 7.8x
exp2 thruput: 18.8x
|
|
Here is the correct patch with both filenames and int cast fixed:
This patch is a complete rewrite of sinf, cosf and sincosf. The new version
is significantly faster, as well as simple and accurate.
The worst-case ULP is 0.56072, maximum relative error is 0.5303p-23 over all
4 billion inputs. In non-nearest rounding modes the error is 1ULP.
The algorithm uses 3 main cases: small inputs which don't need argument
reduction, small inputs which need a simple range reduction and large inputs
requiring complex range reduction. The code uses approximate integer
comparisons to quickly decide between these cases - on some targets this may
be slow, so this can be configured to use floating point comparisons.
The small range reducer uses a single reduction step to handle values up to
120.0. It is fastest on targets which support inlined round instructions.
The large range reducer uses integer arithmetic for simplicity. It does a
32x96 bit multiply to compute a 64-bit modulo result. This is more than
accurate enough to handle the worst-case cancellation for values close to
an integer multiple of PI/4. It could be further optimized, however it is
already much faster than necessary.
Simple benchmark showing speedup factor on AArch64 for various ranges:
range 0.7853982 sinf 1.7 cosf 2.2 sincosf 2.8
range 1.570796 sinf 1.9 cosf 1.9 sincosf 2.7
range 3.141593 sinf 2.0 cosf 2.0 sincosf 3.5
range 6.283185 sinf 2.3 cosf 2.3 sincosf 4.2
range 125.6637 sinf 2.9 cosf 3.0 sincosf 5.1
range 1.1259e15 sinf 26.8 cosf 26.8 sincosf 45.2
ChangeLog:
2018-05-18 Wilco Dijkstra <wdijkstr@arm.com>
* newlib/libm/common/Makefile.in: Regenerated.
* newlib/libm/common/Makefile.am: Add sinf.c, cosf.c, sincosf.c
sincosf.h, sincosf_data.c. Add -fbuiltin -fno-math-errno to CFLAGS.
* newlib/libm/common/math_config.h: Add HAVE_FAST_ROUND, HAVE_FAST_LROUND,
roundtoint, converttoint, force_eval_float, force_eval_double, eval_as_float,
eval_as_double, likely, unlikely.
* newlib/libm/common/cosf.c: New file.
* newlib/libm/common/sinf.c: Likewise.
* newlib/libm/common/sincosf.h: Likewise.
* newlib/libm/common/sincosf.c: Likewise.
* newlib/libm/common/sincosf_data.c: Likewise.
* newlib/libm/math/sf_cos.c: Add #if to build conditionally.
* newlib/libm/math/sf_sin.c: Likewise.
* newlib/libm/math/wf_sincos.c: Likewise.
--
|
|
This reverts commit fca80a9d1b3fa6620cdaccec6b726eef1a6530a1.
Accidentally pushed a preliminary version
|
|
This patch is a complete rewrite of sinf, cosf and sincosf. The new version
is significantly faster, as well as simple and accurate.
The worst-case ULP is 0.56072, maximum relative error is 0.5303p-23 over all
4 billion inputs. In non-nearest rounding modes the error is 1ULP.
The algorithm uses 3 main cases: small inputs which don't need argument
reduction, small inputs which need a simple range reduction and large inputs
requiring complex range reduction. The code uses approximate integer
comparisons to quickly decide between these cases - on some targets this may
be slow, so this can be configured to use floating point comparisons.
The small range reducer uses a single reduction step to handle values up to
120.0. It is fastest on targets which support inlined round instructions.
The large range reducer uses integer arithmetic for simplicity. It does a
32x96 bit multiply to compute a 64-bit modulo result. This is more than
accurate enough to handle the worst-case cancellation for values close to
an integer multiple of PI/4. It could be further optimized, however it is
already much faster than necessary.
Simple benchmark showing speedup factor on AArch64 for various ranges:
range 0.7853982 sinf 1.7 cosf 2.2 sincosf 2.8
range 1.570796 sinf 1.9 cosf 1.9 sincosf 2.7
range 3.141593 sinf 2.0 cosf 2.0 sincosf 3.5
range 6.283185 sinf 2.3 cosf 2.3 sincosf 4.2
range 125.6637 sinf 2.9 cosf 3.0 sincosf 5.1
range 1.1259e15 sinf 26.8 cosf 26.8 sincosf 45.2
ChangeLog:
2018-06-18 Wilco Dijkstra <wdijkstr@arm.com>
* newlib/libm/common/Makefile.in: Regenerated.
* newlib/libm/common/Makefile.am: Add sinf.c, cosf.c, sincosf.c
sincosf.h, sincosf_data.c. Add -fbuiltin -fno-math-errno to CFLAGS.
* newlib/libm/common/math_config.h: Add HAVE_FAST_ROUND, HAVE_FAST_LROUND,
roundtoint, converttoint, force_eval_float, force_eval_double, eval_as_float,
eval_as_double, likely, unlikely.
* newlib/libm/common/cosf.c: New file.
* newlib/libm/common/sinf.c: Likewise.
* newlib/libm/common/sincosf.h: Likewise.
* newlib/libm/common/sincosf.c: Likewise.
* newlib/libm/common/sincosf_data.c: Likewise.
* newlib/libm/math/sf_cos.c: Add #if to build conditionally.
* newlib/libm/math/sf_sin.c: Likewise.
* newlib/libm/math/wf_sincos.c: Likewise.
--
|
|
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
|
|
* Use 0.0f instead of 0.0 in divide.
|
|
Updated patch to use 0.0f in addition to calling rintf.
Tested same way as before, with a testcase that triggers the code and
make check.
OK?
newlib/
* libm/math/wf_pow.c (powf): Call rintf instead of rint. Use 0.0f
for compare.
|
|
Discard QUICKREF sections, rather than writing them to stderr
Discard MATHREF sections, rather than discarding as an error
Pass NOTES sections through to texinfo, rather than discarding as an error
Don't redirect makedoc stderr to .ref file
Remove makedoc output on error
Remove .ref files from CLEANFILES
Regenerate Makefile.ins
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
|
|
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
|
|
Based on code from https://github.com/ARM-software/optimized-routines/
This patch adds a highly optimized generic implementation of expf,
exp2f, logf, log2f and powf. The new functions are not only
faster (6x for powf!), but are also smaller and more accurate.
In order to achieve this, the algorithm uses double precision
arithmetic for accuracy, avoids divisions and uses small table
lookups to minimize the polynomials. Special cases are handled
inline to avoid the unnecessary overhead of wrapper functions and
set errno to POSIX requirements.
The new functions are added under newlib/libm/common, but the old
implementations are kept (in newlib/libm/math) for non-IEEE or
pre-C99 systems. Targets can enable the new math code by defining
__OBSOLETE_MATH_DEFAULT to 0 in newlib/libc/include/machine/ieeefp.h,
users can override the default by defining __OBSOLETE_MATH.
Currently the new code is enabled for AArch64 and AArch32 with VFP.
Targets with a single precision FPU may still prefer the old
implementation.
libm.a size changes:
arm: -1692
arm/thumb/v7-a/nofp: -878
arm/thumb/v7-a+fp/hard: -864
arm/thumb/v7-a+fp/softfp: -908
aarch64: -1476
|
|
|
|
makedoc defines a command as 'all upper case, and alone on a line'.
A few QUICKREF lines currently violate this by having some additional text after
the QUICKREF.
So, currently, these lines are treated as an unknown command.
This is benign as QUICKREF currently does nothing but produce some ignored
output on stderr. I'm not sure what the intent of QUICKREF is.
2015-11-06 Jon Turney <jon.turney@dronecode.org.uk>
* libm/mathfp/s_acos.c: Fix QUICKREF.
* libm/mathfp/e_acosh.c: Ditto.
* libm/math/w_asin.c: Ditto.
* libm/mathfp/e_acosh.c: Ditto.
* libm/mathfp/s_acos.c: Ditto.
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
|
|
- Also, harmonize libm to use CHEWOUT_FILES like libc, rather than chobj.
Update documentation appropriately.
* HOWTO: Update.
* Makefile.shared: Move documentation rules to here...
* libc/argz/Makefile.am: ... from here ...
* libc/ctype/Makefile.am: ... and here.
* libc/errno/Makefile.am: Ditto.
* libc/iconv/Makefile.am: Ditto.
* libc/iconv/ccs/Makefile.am : Ditto.
* libc/iconv/ces/Makefile.am: Ditto.
* libc/iconv/lib/Makefile.am: Ditto.
* libc/locale/Makefile.am: Ditto.
* libc/misc/Makefile.am: Ditto.
* libc/posix/Makefile.am: Ditto.
* libc/reent/Makefile.am: Ditto.
* libc/search/Makefile.am: Ditto.
* libc/stdio/Makefile.am: Ditto.
* libc/stdio64/Makefile.am: Ditto.
* libc/stdlib/Makefile.am : Ditto.
* libc/string/Makefile.am: Ditto.
* libc/syscalls/Makefile.am: Ditto.
* libc/time/Makefile.am : Ditto.
* libc/unix/Makefile.am: Ditto.
* libc/xdr/Makefile.am: Ditto.
* libm/common/Makefile.am: Ditto.
* libm/complex/Makefile.am: Ditto.
* libm/math/Makefile.am: Ditto.
* libm/mathfp/Makefile.am: Ditto.
|
|
- also move previous ChangeLog entry to newlib instead of top-level
* libc/time/wcsftime.c: Consistently use an em-dash in FUNCTION
summary.
* libm/common/isgreater.c: Ditto.
* libm/common/s_fdim.c: Ditto.
* libm/common/s_fma.c: Ditto.
* libm/common/s_fmax.c: Ditto.
* libm/common/s_fmin.c: Ditto.
* libm/common/s_infinity.c: Ditto.
* libm/common/s_isnan.c: Ditto.
* libm/common/s_log2.c: Ditto.
* libm/common/s_logb.c: Ditto.
* libm/common/s_lrint.c: Ditto.
* libm/common/s_lround.c: Ditto.
* libm/common/s_nearbyint.c: Ditto.
* libm/common/s_remquo.c: Ditto.
* libm/common/s_rint.c: Ditto.
* libm/common/s_round.c: Ditto.
* libm/common/s_scalbn.c: Ditto.
* libm/common/s_signbit.c: Ditto.
* libm/common/s_trunc.c: Ditto.
* libm/math/w_exp2.c: Ditto.
* libm/math/w_gamma.c: Ditto.
|
|
* libc/stdio/fseek.c: Add missing semicolons to prototypes in
SYNOPSIS.
* libc/stdio/fwide.c: Ditto.
* libc/stdio64/fseeko64.c: Ditto.
* libc/string/strtok.c: Ditto.
* libc/string/wcstok.c: Ditto.
* libm/math/w_cosh.c: Ditto.
* libm/math/w_fmod.c: Ditto.
* libm/mathfp/s_cosh.c: Ditto.
* libm/mathfp/s_fmod.c: Ditto.
|
|
I think these are accidental omissions, as these source files are listed to be
chewed by makedoc, but the result is not included by any texinfo source file.
Future work: Nothing in libc/reent/ which is processed by makedoc is included by
reent.tex
2015-06-23 Jon Turney <jon.turney@dronecode.org.uk>
* libc/stdlib/stdlib.tex: Include itoa and utoa, and add to menu.
* libc/string/strings.tex: Include memrchr and rawmemchr, and add
to menu.
* libm/math/math.tex: Include exp10 and pow10, and add to menu.
* libm/common/s_exp10.c: Improve one-line description.
* libm/common/s_exp10.c: Ditto.
Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
|
|
* libm/math/e_sqrt.c (__ieee754_sqrt): Don't truncate constant to
"int".
|
|
(cimagl): Add prototype.
(creall): Add prototype.
* libc/include/ieeefp.h: Include float.h.
(EXT_EXPBITS, EXT_FRACHBITS, EXT_FRACLBITS)
(EXT_EXP_INFNAN. EXT_EXP_BIAS, EXT_FRACBITS): Define.
(struct ieee_ext, union ieee_ext_u): New types for long double
support.
* libc/include/math.h (finitel): Add prototype.
(hypotl): Add prototype.
(sqrtl): Add prototype.
* libm/common/Makefile.am (lsrc): Add sl_finite.c.
* libm/common/Makefile.in: Regenerate.
* libm/common/fdlibm.h (__ieee754_hypotl): Add prototype.
* libm/common/hypotl.c (hypotl): Add implementation for when long
double is larger than double.
* libm/common/sqrtl.c (sqrtl): Likewise.
* libm/common/sl_finite.c: New file. Adds implementation of the
finitel function.
* libm/complex/Makefile.am (lsrc): Define.
(libcomplex_la_SOURCES): Add lsrc.
(lib_a_SOURCES): Add lsrc.
* libm/complex/Makefile.in: Regenerate.
* libm/complex/cabs.c: Add documentation of cabsl function.
* libm/complex/cimag.c: Add documentation of cimagl function.
* libm/complex/creall.c: Add documentation of creall function.
* libm/complex/cabsl.c: New file. Adds implementation of the
cabsl function.
* libm/complex/cimagl.c: New file. Adds implementation of the
cimagl function.
* libm/complex/creall.c: New file. Adds implementation of the
creall function.
* libm/math/Makefile.am (lsrc): Define.
(libmath_la_SOURCES): Add lsrc.
(lib_a_SOURCES): Add lsrc.
* libm/math/Makefile.in: Regenerate.
* libm/math/el_hypot.c: New file. Adds implementation of the
__ieee754_hypotl function.
|
|
* libm/math/math.tex: Ditto.
|
|
* NEWS: Update with 2.0.0 info.
* README: Ditto.
* acinclude.m4: Change version number to 2.0.0.
* aclocal.m4: Regenerated.
* configure: Ditto.
* Makefile.in: Regenerated.
* doc/aclocal.m4: Ditto.
* doc/configure: Ditto.
* libc/*/aclocal.m4: Ditto.
* libc/*/configure: Ditto.
* libc/libc.texinfo: Ditto.
* libm/*/aclocal.m4: Ditto.
* libm/*/configure: Ditto.
* libm/libm.texinfo: Ditto.
* libc/sys/linux/shared.ld: Add VERS_2.0
|
|
compiler warnings found this way.
* libc/stdio/freopen.c (_freopen_r): Fix bug setting _flags.
* libc/include/stdio.h (_rename): Define when building newlib.
* libc/include/sys/signal.h (_kill): Ditto.
* libc/include/sys/stat.h (_mkdir): Ditto.
* libc/include/sys/time.h (_gettimeofday): Ditto.
* libc/include/sys/times.h (_times): Ditto.
* libc/include/sys/wait.h (_wait): Ditto.
* libc/locale/lmessages.c (empty): Don't define for Cygwin.
* libc/locale/lmonetary.c (cnv): Ditto.
* libc/locale/nl_langinfo.c (nl_langinfo): Ditto for variable s.
* libc/posix/collate.c: Throughout cast to avoid compiler warning.
* libc/posix/engine.c (matcher): Initialize dp to avoid compiler
warning.
* libc/posix/glob.c: Disable on Cygwin. Explain why.
* libc/posix/regcomp.c: Fix "uninitialized" compiler warnings.
(dissect): Deliberately silence gcc compiler warning. Add comment to
explain why.
* libc/posix/wordexp.c (wordexp): Remove num_bytes variable since result
is never used.
* libc/posix/popen.c (popen): Ditto for variable last.
* libc/reent/mkdirr.c: Include sys/stat.h.
* libc/reent/renamer.c: Include stdio.h.
* libc/search/hash.c: Throughout use underscored variants of the stat
function family.
(init_hash): Add missing definition for the __USE_INTERNAL_STAT64 case.
* libc/search/hash_bigkey.c (__big_insert): Add parenthesis to avoid
compiler warning.
* libc/search/hash_page.c (overflow_page): Initalize freep to NULL to
avoid compiler warning.
* libc/stdio/asiprintf.c (_asiprintf_r): Cast unsigned char * to char *
to avoid compiler warning.
(asiprintf): Ditto.
* libc/stdio/asprintf.c (_asprintf_r): Ditto.
(asprintf): Ditto.
* libc/stdio/vasiprintf.c (_vasiprintf_r): Ditto.
* libc/stdio/vasprintf.c (_vasprintf_r): Ditto.
* libc/stdio/mktemp.c (_gettemp): Cast to unsigned char in call to
isdigit to avoid compiler warning.
* libc/stdio/vfprintf.c (_VFPRINTF_R): Initialize variables used for
grouping to avoid compiler warning. Only define and set nseps and
nrepeats if they are really used.
* libc/stdio/vfwprintf.c (_VFWPRINTF_R): Ditto. Only define state if
it is really used.
* libc/stdio/vfscanf.c (u_char): Revert to be defined as unsigned char.
(__SVFSCANF_R): Cast fmt in call to __mbtowc.
* libc/stdlib/mbtowc_r.c (JIS_state_table): Disable when building
Cygwin.
(JIS_action_table): Ditto.
* libc/stdlib/wctomb_r.c (__utf8_wctomb): Add parenthesis to avoid
compiler warning.
* libc/string/strcasestr.c: Deliberately silence gcc compiler warning.
Add comment to explain why.
* libc/time/strptime.c (strptime): Cast to unsigned char in calls to
isspace to avoid compiler warning.
* libm/math/e_atan2.c (__ieee754_atan2): Add parenthesis to avoid
compiler warning.
* libm/math/e_exp.c (__ieee754_exp): Initialize k to 0 to avoid
compiler warning. Drop setting it to 0 later.
* libm/math/ef_exp.c (__ieee754_expf): Ditto.
* libm/math/e_pow.c (__ieee754_pow): Add braces to avoid compiler
warning.
* libm/math/ef_pow.c (__ieee754_powf): Ditto.
* libm/math/er_lgamma.c (__ieee754_lgamma_r): Initialize nadj to 0 to
avoid compiler warning.
* libm/math/erf_lgamma.c (__ieee754_lgammaf_r): Ditto.
* libm/math/e_rem_pio2.c (__ieee754_rem_pio2): Ditto for variable z.
* libm/common/sf_round.c (roundf): Remove signbit variable since result
is never used.
|
|
* NEWS: Update with 1.20.0 info.
* README: Ditto.
* acinclude.m4: Change version number to 1.20.0.
* aclocal.m4: Regenerated.
* configure: Ditto.
* Makefile.in: Regenerated.
* doc/aclocal.m4: Ditto.
* doc/configure: Ditto.
* libc/*/aclocal.m4: Ditto.
* libc/*/configure: Ditto.
* libc/libc.texinfo: Ditto.
* libm/*/aclocal.m4: Ditto.
* libm/*/configure: Ditto.
* libm/libm.texinfo: Ditto.
* libc/sys/linux/shared.ld: Add VERS_1.20
|
|
* libm/math/w_tgamma.c: Only build ifndef _DOUBLE_IS_32BITS.
* libm/math/wf_tgamma.c: Map tgamma to tgammaf, ifdef _DOUBLE_IS_32BITS.
|
|
* NEWS: Update with 1.19.0 info.
* README: Ditto.
* MAINTAINERS: Update.
* acinclude.m4: Change version number to 1.19.0.
* aclocal.m4: Regenerated.
* configure: Ditto.
* Makefile.am: Fix stmp-targ-include target.
* Makefile.in: Regenerated.
* doc/aclocal.m4: Ditto.
* doc/configure: Ditto.
* libc/*/aclocal.m4: Ditto.
* libc/*/configure: Ditto.
* libc/libc.texinfo: Ditto.
* libm/*/aclocal.m4: Ditto.
* libm/*/configure: Ditto.
* libm/libm.texinfo: Ditto.
* libc/sys/linux/shared.ld: Add VERS_1.19
|
|
* libm/math/wf_cabs.c: Delete.
* libm/math/Makefile.am (src): Remove w_cabs.c.
(fsrc): Remove wf_cabs.c.
* libm/math/Makefile.in: Regenerate.
|
|
* libc/stdlib/getenv.c: Delete "char *_findenv_r ();", as is not a
proper prototype, and is properly prototyped in stdlib.h, anyway.
* libc/stdlib/getenv_r.c: Ditto.
* libc/search/hash.c: Add _DEFUN to __hash_open() declaration; add
#define __DBINTERFACE_PRIVATE to activate prototypes from db_local.h.
* libc/search/db_local.h: Correct __hash_open() prototype.
* libc/sys/linux/cmath/math_private.h: Eliminate compiler warnings:
Remove #define INFINITY (redefines from math.h); remove #define __isnanf
and #define __isinff isinff.
|
|
Work around issues with new libtool files in ..
* configure.in: Unconditionally call _LT_PROG_ECHO_BACKSLASH.
* iconvdata/configure.in: Ditto.
* libc/configure.in: Ditto.
* libc/machine/configure.in: Ditto.
* libc/machine/i386/configure.in: Ditto.
* libc/sys/configure.in: Ditto.
* libc/sys/linux/configure.in: Ditto.
* libc/sys/linux/linuxthreads/configure.in: Ditto.
* libc/sys/linux/linuxthreads/machine/configure.in: Ditto.
* libc/sys/linux/linuxthreads/machine/i386/configure.in: Ditto.
* libc/sys/linux/machine/configure.in: Ditto.
* libc/sys/linux/machine/i386/configure.in: Ditto.
* libm/configure.in: Ditto.
* libm/machine/configure.in: Ditto.
* libm/machine/i386/configure.in: Ditto.
* libc/machine/sh/configure.in: Ditto. Also, call
AC_NO_EXECUTABLES before NEWLIB_CONFIGURE.
* aclocal.m4: Regenerated.
* configure: Ditto.
* Makefile.in: Ditto.
* doc/aclocal.m4: Ditto.
* doc/Makefile.in: Ditto.
* libc/*/aclocal.m4: Ditto.
* libc/*/Makefile.in: Ditto.
* libc/*/configure: Ditto.
* libm/*/aclocal.m4: Ditto.
* libm/*/Makefile.in: Ditto.
* libm/*/configure: Ditto.
|
|
* configure.host: Don't set -O2 flag in newlib_cflags. Leave
that to CFLAGS.
* acinclude.m4: Don't reset CFLAGS before calling _AC_PROG_CC_G
as it sets the same flags as we are using.
* aclocal.m4: Regenerated.
* configure: Ditto.
* Makefile.in: Ditto.
* iconvdata/aclocal.m4: Ditto.
* iconvdata/configure: Ditto.
* iconvdata/Makefile.in: Ditto.
* doc/aclocal.m4: Ditto.
* doc/configure: Ditto.
* doc/Makefile.in: Ditto.
* libc/aclocal.m4: Ditto.
* libc/configure: Ditto.
* libc/Makefile.in: Ditto.
* libc/*Makefile.in: Ditto.
* libc/*aclocal.m4: Ditto.
* libc/*configure: Ditto.
* libm/*Makefile.in: Ditto.
* libm/*aclocal.m4: Ditto.
* libm/*configure: Ditto.
|
|
* libm/math/ef_scalb.c: Replace isnanf() (pre-C99 function call) with
isnan() (C99 macro).
* libm/math/wf_log.c: Ditto.
* libm/math/wf_j0.c: Ditto.
* libm/math/wf_sqrt.c: Ditto.
* libm/math/wf_pow.c: Ditto.
* libm/math/wf_fmod.c: Ditto.
* libm/math/wf_remainder.c: Ditto.
* libm/math/wf_scalb.c: Ditto.
* libm/math/wf_atanh.c: Ditto.
* libm/math/wf_cosh.c: Ditto.
* libm/math/wf_acos.c: Ditto.
* libm/math/wf_acosh.c: Ditto.
* libm/math/wf_jn.c: Ditto.
* libm/math/wf_log10.c: Ditto.
* libm/math/wf_asin.c: Ditto.
* libm/math/wf_j1.c: Ditto.
* libm/common/sf_isnan.c: Add #include <ieeefp.h>, fix comment.
* libm/common/sf_isinf.c: Add #include <ieeefp.h>, adjust comment to
match that from s_isinf.c.
* libc/include/machine/ieeefp.h: Simplify isinf and isnan macros to
remove un-necessary extension use (in a similar manner to as was
recently done in math.h).
* libc/include/math.h: Remove isnanf and isinff prototypes (are in
ieeefp.h).
* libm/machine/spu/sf_isinf.c: Fix comment (remove <math.h>).
|
|
* libc/include/math.h: (llround, llroundf): Declare.
* libm/common/s_llround.c: New file, implementing llround().
* libm/common/sf_llround.c: New file, implementing llroundf().
* libm/common/sf_lround.c: Remove spurious cast in _DOUBLE_IS_32BITS
version of function.
* libm/common/sf_lrint.c: Ditto.
* libm/common/sf_logb.c: Corrected return for subnormal argument
by replacing existing function with a version created from sf_ilogb.c.
* libm/common/s_logb.c: Ditto, except starting point s_ilogb.c. Also
added documentation for logb() and logbf().
* libm/common/s_signbit.c: Add signbit() documentation.
* libm/common/s_log2.c: Update return values to match what w_log2.c has,
since log2 uses log(); add note about being derived instead of direct.
* libm/common/sf_fma.c: Add casts to attempt to get correct results,
as well as comments pointing out problems with the implementation.
* libm/common/s_fma.c: Add fma() and fmaf() documentation.
* libm/common/sf_remquo.c: Incorrect quotient returns for large values
corrected by discarding existing function and replacing with Sun
verion, with some enhancements.
* libm/common/s_remquo.c: Ditto. Add remquo() and remquof()
documentation.
* libm/common/s_fmax.c: Add fmax() and fmaxf() documentation.
* libm/common/s_fmin.c: Add fmin() and fminf() documentation.
* libm/common/s_fdim.c: Return NAN for NAN arg, add fdim() and fdimf()
documentation.
* libm/common/sf_fdim.c: Return NAN for NAN arg, HUGE_VALF for inf arg.
* libm/common/s_trunc.c: Add trunc() and truncf() documentation.
* libm/common/s_rint.c: Add rint() and rintf() documentation.
* libm/common/s_round.c: Add round() and roundf() documentation.
* libm/common/s_scalbn.c: Add scalbln() and scalblnf() documentation.
* libm/common/s_infinity.c: Add infinity() and infinityf()
documentation.
* libm/common/s_lround.c: Add lround(), lroundf(), llround(), and
llroundf() documentation.
* libm/common/s_lrint.c: Add lrint(), lrintf(), llrint(), and llrintf()
documentation.
* libm/common/isgreater.c: New file for documenting math.h function-like
macros isgreater(), isgreaterequal(), isless(), islessequal(),
islessgreater(), and isunordered().
* libm/common/s_isnan.c: Add documentation for function-like macros
fpclassify(), isfinite(), isinf(), isnan(), and isnormal().
* libm/common/s_nearbyint.c: Add nearbyint() and nearbyintf()
documentation.
* libm/common/Makefile.am: Add s_llround.c (src); sf_llround.c (fsrc);
s_fdim.def, s_fma.def, s_fmax.def, s_fmin.def,
s_logb.def, s_lrint.def, s_lround.def, s_nearbyint.def, s_remquo.def,
s_rint.def, s_round.def, s_signbit.def, s_trunc.def, and
isgreater.def (chobj);
re-name all existing chew files (chobj) to match source file base
names (put in underscores), delete all special targets for chew files
(leaving all to be generated by rule).
* libm/common/Makefile.in: regenerate.
* libm/math/w_exp2.c: Add "base 2" to documentation description (and
delete TRAD_SYNOPSIS).
* libm/math/w_gamma.c: Add tgamma() and tgammaf() documentation, along
with some history behind the function names.
* libm/math/math.tex: Add includes for newly-added documentation (see
.def additions to common/Makefile.am and math/Makefile.am in this
ChangeLog list), adjusted existing .def file names to match source file
base names (added underscores); add mention of HUGE_VALF; rename
"Version of library" section to "Error Handling" and add some text
about floating-point exception; added section "Standards Compliance And
Portability".
* libm/math/Makefile.am: Add w_exp2.def (chobj);
re-name all existing chew files (chobj) to match source file base
names, delete all special targets for chew files (leaving all to be
generated by rule).
* libm/math/Makefile.in: regenerated
* doc/makedoc.c: Change silent ignoring of commands < 5 characters
to a failure when reading macro file for commands < 4 characters;
add -v (verbose) option for printing some debugging information;
get rid of spurious translation of "@*" to "*" (no source files used @*,
so no existing doc pages were affected); clean up some compiler
warnings.
* doc/doc.str: add BUGS and SEEALSO sections (to match texi2pod.pl
which has them); Remove ITEM command (redundant with makedoc built-in
"o", not used in any present source file so nothing is lost, anyway).
* HOWTO: New file to hold information for maintainers regarding how
to do things. Initial sections on documentation and ELIX levels.
|
|
* aclocal.m4: Ditto.
* Makefile.in: Ditto.
* newlib.hin: Ditto.
* doc/Makefile.in: Ditto.
* doc/configure: Ditto.
* iconvdata/Makefile.in: Ditto.
* iconvdata/aclocal.m4: Ditto.
* iconvdata/configure: Ditto.
* libc/Makefile.in: Ditto.
* libc/aclocal.m4: Ditto.
* libc/configure: Ditto.
* libc/argz/Makefile.in: Ditto.
* libc/ctype/Makefile.in: Ditto.
* libc/errno/Makefile.in: Ditto.
* libc/iconv/Makefile.in: Ditto.
* libc/iconv/ccs/Makefile.in: Ditto.
* libc/iconv/ccs/binary/Makefile.in: Ditto.
* libc/iconv/ces/Makefile.in: Ditto.
* libc/iconv/lib/Makefile.in: Ditto.
* libc/locale/Makefile.in: Ditto.
* libc/machine/Makefile.in: Ditto.
* libc/machine/aclocal.m4: Ditto.
* libc/machine/configure: Ditto.
* libc/machine/a29k/Makefile.in: Ditto.
* libc/machine/a29k/configure: Ditto.
* libc/machine/arm/Makefile.in: Ditto.
* libc/machine/arm/configure: Ditto.
* libc/machine/bfin/Makefile.in: Ditto.
* libc/machine/bfin/configure: Ditto.
* libc/machine/cris/Makefile.in: Ditto.
* libc/machine/cris/configure: Ditto.
* libc/machine/crx/Makefile.in: Ditto.
* libc/machine/crx/configure: Ditto.
* libc/machine/d10v/Makefile.in: Ditto.
* libc/machine/d10v/configure: Ditto.
* libc/machine/d30v/Makefile.in: Ditto.
* libc/machine/d30v/configure: Ditto.
* libc/machine/fr30/Makefile.in: Ditto.
* libc/machine/fr30/configure: Ditto.
* libc/machine/frv/Makefile.in: Ditto.
* libc/machine/frv/configure: Ditto.
* libc/machine/h8300/Makefile.in: Ditto.
* libc/machine/h8300/configure: Ditto.
* libc/machine/h8500/Makefile.in: Ditto.
* libc/machine/h8500/configure: Ditto.
* libc/machine/hppa/Makefile.in: Ditto.
* libc/machine/hppa/configure: Ditto.
* libc/machine/i386/Makefile.in: Ditto.
* libc/machine/i386/aclocal.m4: Ditto.
* libc/machine/i386/configure: Ditto.
* libc/machine/i960/Makefile.in: Ditto.
* libc/machine/i960/configure: Ditto.
* libc/machine/iq2000/Makefile.in: Ditto.
* libc/machine/iq2000/configure: Ditto.
* libc/machine/m32c/Makefile.in: Ditto.
* libc/machine/m32c/configure: Ditto.
* libc/machine/m32r/Makefile.in: Ditto.
* libc/machine/m32r/configure: Ditto.
* libc/machine/m68hc11/Makefile.in: Ditto.
* libc/machine/m68hc11/configure: Ditto.
* libc/machine/m68k/Makefile.in: Ditto.
* libc/machine/m68k/configure: Ditto.
* libc/machine/m88k/Makefile.in: Ditto.
* libc/machine/m88k/configure: Ditto.
* libc/machine/mep/Makefile.in: Ditto.
* libc/machine/mep/configure: Ditto.
* libc/machine/mips/Makefile.in: Ditto.
* libc/machine/mips/configure: Ditto.
* libc/machine/mn10200/Makefile.in: Ditto.
* libc/machine/mn10200/configure: Ditto.
* libc/machine/mn10300/Makefile.in: Ditto.
* libc/machine/mn10300/configure: Ditto.
* libc/machine/mt/Makefile.in: Ditto.
* libc/machine/mt/configure: Ditto.
* libc/machine/necv70/Makefile.in: Ditto.
* libc/machine/necv70/configure: Ditto.
* libc/machine/powerpc/Makefile.in: Ditto.
* libc/machine/powerpc/configure: Ditto.
* libc/machine/sh/Makefile.in: Ditto.
* libc/machine/sh/configure: Ditto.
* libc/machine/sparc/Makefile.in: Ditto.
* libc/machine/sparc/configure: Ditto.
* libc/machine/spu/Makefile.in: Ditto.
* libc/machine/spu/configure: Ditto.
* libc/machine/tic4x/Makefile.in: Ditto.
* libc/machine/tic4x/configure: Ditto.
* libc/machine/tic80/Makefile.in: Ditto.
* libc/machine/tic80/configure: Ditto.
* libc/machine/v850/Makefile.in: Ditto.
* libc/machine/v850/configure: Ditto.
* libc/machine/w65/Makefile.in: Ditto.
* libc/machine/w65/configure: Ditto.
* libc/machine/x86_64/Makefile.in: Ditto.
* libc/machine/x86_64/configure: Ditto.
* libc/machine/xscale/Makefile.in: Ditto.
* libc/machine/xscale/configure: Ditto.
* libc/machine/xstormy16/Makefile.in: Ditto.
* libc/machine/xstormy16/configure: Ditto.
* libc/machine/z8k/Makefile.in: Ditto.
* libc/machine/z8k/configure: Ditto.
* libc/misc/Makefile.in: Ditto.
* libc/posix/Makefile.in: Ditto.
* libc/reent/Makefile.in: Ditto.
* libc/search/Makefile.in: Ditto.
* libc/signal/Makefile.in: Ditto.
* libc/stdio/Makefile.in: Ditto.
* libc/stdio64/Makefile.in: Ditto.
* libc/stdlib/Makefile.in: Ditto.
* libc/string/Makefile.in: Ditto.
* libc/sys/Makefile.in: Ditto.
* libc/sys/aclocal.m4: Ditto.
* libc/sys/configure: Ditto.
* libc/sys/a29khif/Makefile.in: Ditto.
* libc/sys/a29khif/configure: Ditto.
* libc/sys/arc/Makefile.in: Ditto.
* libc/sys/arc/configure: Ditto.
* libc/sys/arm/Makefile.in: Ditto.
* libc/sys/arm/configure: Ditto.
* libc/sys/d10v/Makefile.in: Ditto.
* libc/sys/d10v/configure: Ditto.
* libc/sys/decstation/Makefile.in: Ditto.
* libc/sys/decstation/configure: Ditto.
* libc/sys/h8300hms/Makefile.in: Ditto.
* libc/sys/h8300hms/configure: Ditto.
* libc/sys/h8500hms/Makefile.in: Ditto.
* libc/sys/h8500hms/configure: Ditto.
* libc/sys/linux/Makefile.in: Ditto.
* libc/sys/linux/aclocal.m4: Ditto.
* libc/sys/linux/configure: Ditto.
* libc/sys/linux/argp/Makefile.in: Ditto.
* libc/sys/linux/cmath/Makefile.in: Ditto.
* libc/sys/linux/dl/Makefile.in: Ditto.
* libc/sys/linux/iconv/Makefile.in: Ditto.
* libc/sys/linux/intl/Makefile.in: Ditto.
* libc/sys/linux/linuxthreads/Makefile.in: Ditto.
* libc/sys/linux/linuxthreads/aclocal.m4: Ditto.
* libc/sys/linux/linuxthreads/configure: Ditto.
* libc/sys/linux/linuxthreads/machine/Makefile.in: Ditto.
* libc/sys/linux/linuxthreads/machine/aclocal.m4: Ditto.
* libc/sys/linux/linuxthreads/machine/configure: Ditto.
* libc/sys/linux/linuxthreads/machine/i386/Makefile.in: Ditto.
* libc/sys/linux/linuxthreads/machine/i386/aclocal.m4: Ditto.
* libc/sys/linux/linuxthreads/machine/i386/configure: Ditto.
* libc/sys/linux/machine/Makefile.in: Ditto.
* libc/sys/linux/machine/aclocal.m4: Ditto.
* libc/sys/linux/machine/configure: Ditto.
* libc/sys/linux/machine/i386/Makefile.in: Ditto.
* libc/sys/linux/machine/i386/aclocal.m4: Ditto.
* libc/sys/linux/machine/i386/configure: Ditto.
* libc/sys/linux/net/Makefile.in: Ditto.
* libc/sys/linux/stdlib/Makefile.in: Ditto.
* libc/sys/m88kbug/Makefile.in: Ditto.
* libc/sys/m88kbug/configure: Ditto.
* libc/sys/mmixware/Makefile.in: Ditto.
* libc/sys/mmixware/configure: Ditto.
* libc/sys/netware/Makefile.in: Ditto.
* libc/sys/netware/configure: Ditto.
* libc/sys/rdos/Makefile.in: Ditto.
* libc/sys/rdos/configure: Ditto.
* libc/sys/rtems/Makefile.in: Ditto.
* libc/sys/rtems/configure: Ditto.
* libc/sys/sh/Makefile.in: Ditto.
* libc/sys/sh/configure: Ditto.
* libc/sys/sparc64/Makefile.in: Ditto.
* libc/sys/sparc64/configure: Ditto.
* libc/sys/sun4/Makefile.in: Ditto.
* libc/sys/sun4/configure: Ditto.
* libc/sys/sysmec/Makefile.in: Ditto.
* libc/sys/sysmec/configure: Ditto.
* libc/sys/sysnec810/Makefile.in: Ditto.
* libc/sys/sysnec810/configure: Ditto.
* libc/sys/sysnecv850/Makefile.in: Ditto.
* libc/sys/sysnecv850/configure: Ditto.
* libc/sys/sysvi386/Makefile.in: Ditto.
* libc/sys/sysvi386/configure: Ditto.
* libc/sys/sysvnecv70/Makefile.in: Ditto.
* libc/sys/sysvnecv70/configure: Ditto.
* libc/sys/tic80/Makefile.in: Ditto.
* libc/sys/tic80/configure: Ditto.
* libc/sys/w65/Makefile.in: Ditto.
* libc/sys/w65/configure: Ditto.
* libc/sys/z8ksim/Makefile.in: Ditto.
* libc/sys/z8ksim/configure: Ditto.
* libc/syscalls/Makefile.in: Ditto.
* libc/time/Makefile.in: Ditto.
* libc/unix/Makefile.in: Ditto.
* libm/Makefile.in: Ditto.
* libm/aclocal.m4: Ditto.
* libm/configure: Ditto.
* libm/common/Makefile.in: Ditto.
* libm/machine/Makefile.in: Ditto.
* libm/machine/aclocal.m4: Ditto.
* libm/machine/configure: Ditto.
* libm/machine/i386/Makefile.in: Ditto.
* libm/machine/i386/aclocal.m4: Ditto.
* libm/machine/i386/configure: Ditto.
* libm/machine/spu/Makefile.in: Ditto.
* libm/machine/spu/configure: Ditto.
* libm/math/Makefile.in: Ditto.
* libm/mathfp/Makefile.in: Ditto.
|
|
* NEWS: Update with 1.16.0 info.
* README: Ditto.
* acinclude.m4: Change version number to 1.16.0.
* aclocal.m4: Regenerated.
* configure: Ditto.
* doc/aclocal.m4: Ditto.
* doc/configure: Ditto.
* libc/*/aclocal.m4: Ditto.
* libc/*/configure: Ditto.
* libc/libc.texinfo: Ditto.
* libm/*/aclocal.m4: Ditto.
* libm/*/configure: Ditto.
* libm/libm.texinfo: Ditto.
* libc/sys/linux/shared.ld: Add VERS_1.16.
|
|
* libm/mathfp/s_logarithm.c: Fix error introduced by previous
fix when handling negative input values. Make function
consistent with math directory and glibc version such that
inf and nan values return inf and nan respectively with no
errno setting.
* libm/mathfp/sf_logarithm.c: Ditto.
* libm/math/w_log.c: Set errno to ERANGE when input is 0.0.
* libm/math/wf_log.c: Ditto.
* libm/math/w_log10.c: Ditto.
* libm/math/wf_log10.c: Ditto.
|
|
* libm/math/wf_tgamma.c: Add missing include.
|