summaryrefslogtreecommitdiffstats
path: root/newlib
Commit message (Collapse)AuthorAgeFilesLines
* testsuite: Fix iconv tests to use new encoding config definesKeith Packard via Newlib2020-07-103-48/+47
| | | | | | | | _ICONV_CONVERTER -> ICONV_FROM_ENCODING. It's not perfect, as the library can support different from/to encodings now, but at least in the default configurations the tests now work. Signed-off-by: Keith Packard <keithp@keithp.com>
* libc/iconv: find_alias was mis-computing remaining alias table lengthKeith Packard via Newlib2020-07-101-1/+1
| | | | | | | | This caused the strnstr to walk off the end of the alias array and fetch invalid data. Instead of attempting to update 'len', just re-compute it based on the table end pointer that is already known. Signed-off-by: Keith Packard <keithp@keithp.com>
* libc/iconv: Remove unneeded pointer var for _iconv_aliasesKeith Packard via Newlib2020-07-102-6/+3
| | | | | | | The pointer value for the iconv alias data never changes, so get rid of the pointer and make it an array instead. Signed-off-by: Keith Packard <keithp@keithp.com>
* libc/iconv: Detect CES handler loading failureKeith Packard via Newlib2020-07-101-1/+1
| | | | | | | Fix the code checking for character set loading failure so that it checks the return value from the init function. Signed-off-by: Keith Packard <keithp@keithp.com>
* Removed #ifndef _ARM_PCS_VFP_ from sys/fenv.h for armEshan dhawan via Newlib2020-07-061-2/+2
| | | | Signed-off-by: Eshan dhawan <eshandhawan51@gmail.com>
* libm: machine: Add missing sparc and mips configurationCorinna Vinschen2020-07-037-3/+12683
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* mips fenv supportEshan dhawan via Newlib2020-07-0319-0/+662
| | | | Signed-off-by: Eshan dhawan <eshandhawan51@gmail.com>
* SPARC fenv supportEshan dhawan via Newlib2020-07-0317-0/+546
| | | | Signed-off-by: Eshan dhawan <eshandhawan51@gmail.com>
* fenv aarch64 supportEshan dhawan via Newlib2020-07-0216-3/+515
| | | | Signed-off-by: Eshan dhawan <eshandhawan51@gmail.com>
* fenv support armEshan dhawan via Newlib2020-06-0922-3/+1339
| | | | Signed-off-by: Eshan dhawan <eshandhawan51@gmail.com>
* Regenerate libm/machine configuration files for powerpcJeff Johnston2020-06-094-3/+6342
|
* hard float support for PowerPC taken from FreeBSDEshan dhawan via Newlib2020-06-0318-0/+491
| | | | Signed-off-by: Eshan dhawan <eshandhawan51@gmail.com>
* Reimplement aligned_allocSzabolcs Nagy2020-05-191-32/+30
| | | | | | | | | | | | | | | | | | | | The original implementation had multiple issues: - Only worked when posix_memalign was available (Linux, RTEMS). - Violated C11 link namespace rules by calling posix_memalign. - Failed to set errno on error. These can be fixed by essentially using the same implementation for aligned_alloc as for memalign, i.e. simply calling _memalign_r (which is always available and a "more reserved name" although technically still not in the reserved link namespace, at least code written in c cannot define a colliding symbol, newlib has plenty such namespace issues so this is fine). It is not clear what the right policy is when MALLOC_PROVIDED is set, currently that does not cover aligned_alloc so it is kept that way. Tested on aarch64-none-elf
* newlib/libm/math: Make pow/powf return qnan for snan argKeith Packard via Newlib2020-03-262-7/+16
| | | | | | | | The IEEE spec for pow only has special case for x**0 and 1**y when x/y are quiet NaN. For signaling NaN, the general case applies and these functions should signal the invalid exception and return a quiet NaN. Signed-off-by: Keith Packard <keithp@keithp.com>
* newlib/libm/common: Don't re-convert float to bits in modf/modffKeith Packard via Newlib2020-03-262-15/+5
| | | | | | | | These functions shared a pattern of re-converting the argument to bits when returning +/-0. Skip that as the initial conversion still has the sign bit. Signed-off-by: Keith Packard <keithp@keithp.com>
* newlib/libm/common: Fix modf/modff returning snanKeith Packard via Newlib2020-03-262-16/+4
| | | | | | | | | Recent GCC appears to elide multiplication by 1, which causes snan parameters to be returned unchanged through *iptr. Use the existing conversion of snan to qnan to also set the correct result in *iptr instead. Signed-off-by: Keith Packard <keithp@keithp.com>
* Fix spurious underflow exceptions for Bessel functions for double(from glibc ↵Joseph S. Myers2020-03-264-9/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* Fix hypotf missing mask in hi+lo decompositionFabian Schriever2020-03-191-2/+2
| | | | | | | | | | | 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.
* Fix modf/f for NaN inputFabian Schriever2020-03-192-0/+2
| | | | | For NaN input the modf/f procedures should return NaN instead of zero with the sign of the input.
* Fix for k_tan.c specific inputsFabian Schriever2020-03-181-8/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* RTEMS: Include missing header and fix stubSebastian Huber2020-03-131-1/+2
| | | | Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
* Fix truncf for sNaN inputFabian Schriever2020-03-111-1/+1
| | | | | | | | | | Make line 47 in sf_trunc.c reachable. While converting the double precision function trunc to the single precision version truncf an error was introduced into the special case. This special case is meant to catch both NaNs and infinities, however qNaNs and infinities work just fine with the simple return of x (line 51). The only error occurs for sNaNs where the same sNaN is returned and no invalid exception is raised.
* i386/fenv.c: Include fenv.c implementation shared with x86_64, not stubJoel Sherrill2020-03-101-1/+1
|
* Fix error in fdim/f for infinitiesFabian Schriever2020-03-102-8/+2
| | | | | | | | | | | The comparison c == FP_INFINITE causes the function to return +inf as it expects x = +inf to always be larger than y. This shortcut causes several issues as it also returns +inf for the following cases: - fdim(+inf, +inf), expected (as per C99): +0.0 - fdim(-inf, any non NaN), expected: +0.0 I don't see a reason to keep the comparison as all the infinity cases return the correct result using just the ternary operation.
* Fix error in exp in magnitude [2e-32,2e-28]Fabian Schriever2020-03-092-2/+2
| | | | | | | | | | | | | | | | | | | | 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).
* Fix error in float trig. function range reductionFabian Schriever2020-03-031-1/+1
| | | | | | | | | | | | | | | | | | 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.
* Fix error in powf for (-1.0, NaN) inputFabian Schriever2020-03-021-1/+1
| | | | | Prevent confusion between -1.0 and 1.0 in powf. The corresponding similar error was previously fixed for pow (see commit bb25dd1b)
* arm: Finish moving newlib to unified syntax for Thumb1Richard Earnshaw2020-03-021-7/+8
| | | | | | Most code in newlib already uses unified syntax, but just a couple of laggards remain. This patch removes these and means the the entire code base has now been converted.
* x86_64/i386 fenv: Replace symlink with include fenv_stub.cJoel Sherrill2020-02-2523-23/+161
| | | | | | | | | | | | Having symlinks for these files led to an issue reported to the RTEMS Project that showed up using some tar for native Windows to unpack the newlib sources. It creates symlinks in the tar file as copies of the files the symlinks point to. If the links appear in the tar file before the source exists, it cannot copy the file. The solution in this patch is to convert the files that are symbolic links into simple files which include the file they were linked to. This should be more portable and avoids the symbolinc link problem.
* newlib/libc/include/devctl.h: Add extern "C" wrapperJoel Sherrill2020-02-201-0/+8
| | | | Adding this was necessary to allow posix_devctl() from C++.
* Locale modifier "@cjksingle" to enforce single-width CJK width.Thomas Wolff2020-02-182-4/+17
| | | | | | This option follows a proposal in the Terminals Working Group Specifications (https://gitlab.freedesktop.org/terminal-wg/specifications/issues/9#note_406682). It makes locale width consistent with the corresponding mintty feature.
* pow: fix pow(-1.0, NaN)Nicolas Brunie2020-02-141-1/+1
| | | | | | | 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
* Typo in license for newlib/libc/stdio/flags.cKeith Packard2020-02-061-1/+1
| | | | | | | | Fix spelling: MERCHANT I BILITY -> MERCHANT A BILITY Signed-off-by: Keith Packard <keithp@keithp.com>
* Typo in license terms for newlib/libm/common/log2.cKeith Packard2020-02-061-1/+1
| | | | | | The closing quotes were in the wrong place Signed-off-by: Keith Packard <keithp@keithp.com>
* Use remove-advertising-clause script to edit BSD licensesKeith Packard2020-01-29274-924/+281
| | | | | | | This edits licenses held by Berkeley and NetBSD, both of which have removed the advertising requirement from their licenses. Signed-off-by: Keith Packard <keithp@keithp.com>
* Revert "newlib: fix fseek optimization with SEEK_CUR"Corinna Vinschen2020-01-292-12/+50
| | | | | | | | | | | This reverts commit 59362c80e3a02c011fd0ef3d7f07a20098d2a9d5. This breaks gnulib's autoconf test for POSIX compatibility of fflush/fseek. After fflush/fseek, ftello and lseek are out of sync, with lseek having the wrong offset. This breaks backward compatibility with Cygwin applications. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Bump up newlib release to 3.3.0Jeff Johnston2020-01-21109-1083/+1083
|
* Change the reent verify check option to document disabling itJeff Johnston2020-01-213-5/+5
| | | | | | - also change the handling of default_newlib_reent_check_verify to be the same as other default variables in configure.host - regenerate newlib/configure
* Default newlib_reent_check_verify to yes in configure.hostJeff Johnston2020-01-211-3/+3
|
* riscv: Map between ieeefp.h exception bits and RISC-V FCSR bitsKeith Packard2020-01-211-3/+37
| | | | | | | | If we had architecture-specific exception bits, we could just set them to match the processor, but instead ieeefp.h is shared by all targets so we need to map between the public values and the register contents. Signed-off-by: Keith Packard <keithp@keithp.com>
* riscv: Add 'break' statements to fpsetround switchKeith Packard2020-01-211-4/+4
| | | | | | | | This makes the fpsetround function actually do something rather than just return -1 due to the default 'fall-through' behavior of the switch statement. Signed-off-by: Keith Packard <keithp@keithp.com>
* riscv: Use current pseudo-instructions to access the FCSR registerKeith Packard2020-01-211-2/+2
| | | | | | | Use fscsr and frcsr to store and read the FCSR register instead of fssr and frsr. Signed-off-by: Keith Packard <keithp@keithp.com>
* Prevent more NULL ptr accesses due to Balloc out of memoryJeff Johnston2020-01-093-9/+9
| | | | - fix gdtoa-gethex.c, ldtoa.c, and strtodg.c to use eBalloc
* Bump up release to 3.2.0 for yearly snapshotnewlib-snapshot-20200102newlib-3.2.0Jeff Johnston2020-01-02111-1094/+1111
|
* doc: add more details about adding documentation to HOWTOJon Turney2019-12-291-2/+4
| | | | | Add a little more detail to the checklist for adding documentation Also update the list of supported sections
* Optimize setjmp/longjmp for moxie.Anthony Green2019-12-202-87/+39
| | | | | We don't need to save/restore every register -- just those we don't expect to be trashed by function calls.
* Don't display trailing '.' in _dcvtKeith Packard2019-12-181-3/+12
| | | | | | | In the two helper functions that _dcvt calls for 'f' and 'e' mode, if there are no digits to display after the decimal point, don't add one. Signed-off-by: Keith Packard <keithp@keithp.com>
* Fix gcvt to always show 'ndigits' of precisionKeith Packard2019-12-181-11/+7
| | | | | | | | | Leading zeros after the decimal point should not count towards the 'ndigits' limit. This makes gcvt match glibc and the posix gcvt man page. Signed-off-by: Keith Packard <keithp@keithp.com>
* Fix fcvt to only show 'ndigit' past decimalKeith Packard2019-12-181-8/+1
| | | | | | | Even if the number is really small and this means showing *no* digits. This makes newlib match glibc, and the fcvt posix man page. Signed-off-by: Keith Packard <keithp@keithp.com>
* doc: Untabify python scripts used for making man pagesJon Turney2019-12-182-219/+219
| | | | | These scripts fail with a TabError exception if 'python' is python3, as mixing tabs and spaces in indentation is forbidden in python3.