Re: [PATCH] Remove matherr, and SVID and X/Open math library configurations
Jozef Lawrynowicz <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <20190122205140.4366dbe9@jozef-kubuntu> |
On Wed, 16 Jan 2019 09:50:00 +0100 Corinna Vinschen <[email protected]> wrote: > Your patch was fine, just the problem of stopping to export a symbol > from Cygwin worried me. > > We don't want to break an older application to run just because we > removed a function from the DLL. On reading your mail and further > reading up on matherr it seems this isn't really a problem. > > If we *really* get a complaint on the Cygwin mailing list, we can > resurrect matherr just as an exportable symbol for Cygwin. Ok, sounds good. > Can you please resend your patch? I've attached the original patch (0001-*), but also 3 further patches which make some additional improvements to the float math functions. 0002-Newlib-Remove-HUGE_VAL-definition-from-libm-math-fun.patch 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. 0003-Newlib-Use-HUGE_VALF-instead-of-HUGE_VAL-in-single-p.patch This patch replaces instances of "(float).*HUGE_VAL" with a direct usage of HUGE_VALF, which is also defined in math.h. 0004-Newlib-Use-nanf-instead-of-nan-in-single-precision-f.patch This patch further reduces code size for a few single-precision float math functions, by using nanf() instead of nan() where required. I've regtested the patches with the GCC testsuite for arm-unknown-eabi, and I built Cygwin and regtested it with "make check". Thanks, Jozef
0001-Remove-matherr-and-SVID-and-X-Open-math-library-conf.patch
(text/x-patch, 135 KB) - not displayed
0002-Newlib-Remove-HUGE_VAL-definition-from-libm-math-fun.patch
(text/x-patch, 17.4 KB)
From 4ccd46f8abdeb80fd90832a29842b0d735901f8b Mon Sep 17 00:00:00 2001 From: Jozef Lawrynowicz <[email protected]> Date: Tue, 22 Jan 2019 10:38:37 +0000 Subject: [PATCH 2/4] [Newlib] Remove HUGE_VAL definition from libm math functions --- newlib/libm/common/hypotl.c | 6 ------ newlib/libm/math/k_standard.c | 6 ------ newlib/libm/math/w_cosh.c | 6 ------ newlib/libm/math/w_exp.c | 6 ------ newlib/libm/math/w_gamma.c | 6 ------ newlib/libm/math/w_hypot.c | 6 ------ newlib/libm/math/w_j0.c | 6 ------ newlib/libm/math/w_j1.c | 6 ------ newlib/libm/math/w_jn.c | 6 ------ newlib/libm/math/w_lgamma.c | 6 ------ newlib/libm/math/w_log.c | 6 ------ newlib/libm/math/w_log10.c | 6 ------ newlib/libm/math/w_pow.c | 6 ------ newlib/libm/math/w_scalb.c | 6 ------ newlib/libm/math/w_sinh.c | 6 ------ newlib/libm/math/wf_cosh.c | 6 ------ newlib/libm/math/wf_exp.c | 6 ------ newlib/libm/math/wf_gamma.c | 6 ------ newlib/libm/math/wf_hypot.c | 6 ------ newlib/libm/math/wf_j0.c | 6 ------ newlib/libm/math/wf_j1.c | 6 ------ newlib/libm/math/wf_jn.c | 6 ------ newlib/libm/math/wf_lgamma.c | 6 ------ newlib/libm/math/wf_log.c | 6 ------ newlib/libm/math/wf_log10.c | 6 ------ newlib/libm/math/wf_scalb.c | 6 ------ newlib/libm/math/wf_sinh.c | 6 ------ newlib/libm/math/wr_gamma.c | 6 ------ newlib/libm/math/wr_lgamma.c | 6 ------ newlib/libm/math/wrf_gamma.c | 6 ------ newlib/libm/math/wrf_lgamma.c | 6 ------ 31 files changed, 186 deletions(-) diff --git a/newlib/libm/common/hypotl.c b/newlib/libm/common/hypotl.c index a0dcdc3c1..fb51adee4 100644 --- a/newlib/libm/common/hypotl.c +++ b/newlib/libm/common/hypotl.c @@ -52,12 +52,6 @@ hypotl (long double x, long double y) if ((! finitel (z)) && finitel (x) && finitel (y)) { /* hypot (finite, finite) overflow. */ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD (inf, 0x7ff00000); /* Set inf to infinite. */ -#endif errno = ERANGE; return (long double) HUGE_VAL; } diff --git a/newlib/libm/math/k_standard.c b/newlib/libm/math/k_standard.c index 91fd6c33f..906412ba7 100644 --- a/newlib/libm/math/k_standard.c +++ b/newlib/libm/math/k_standard.c @@ -86,12 +86,6 @@ static double zero = 0.0; /* used as const */ #endif { double retval = 0.0; -#ifndef HUGE_VAL /* this is the only routine that uses HUGE_VAL */ -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif #ifdef _USE_WRITE /* (void) fflush(_stdout_r(p)); */ diff --git a/newlib/libm/math/w_cosh.c b/newlib/libm/math/w_cosh.c index a26442178..5021e28a1 100644 --- a/newlib/libm/math/w_cosh.c +++ b/newlib/libm/math/w_cosh.c @@ -74,12 +74,6 @@ QUICKREF if(_LIB_VERSION == _IEEE_ || isnan(x)) return z; if(fabs(x)>7.10475860073943863426e+02) { /* cosh(finite) overflow */ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif errno = ERANGE; return HUGE_VAL; } else diff --git a/newlib/libm/math/w_exp.c b/newlib/libm/math/w_exp.c index 3da6d7702..66c3f5c74 100644 --- a/newlib/libm/math/w_exp.c +++ b/newlib/libm/math/w_exp.c @@ -79,12 +79,6 @@ u_threshold= -7.45133219101941108420e+02; /* 0xc0874910, 0xD52D3051 */ if(finite(x)) { if(x>o_threshold) { /* exp(finite) overflow */ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif errno = ERANGE; return HUGE_VAL; } else if(x<u_threshold) { diff --git a/newlib/libm/math/w_gamma.c b/newlib/libm/math/w_gamma.c index 6de114a86..cfded7b5d 100644 --- a/newlib/libm/math/w_gamma.c +++ b/newlib/libm/math/w_gamma.c @@ -155,12 +155,6 @@ in terms of the base return values, although the <[signgam]> global for y = __ieee754_gamma_r(x,&(_REENT_SIGNGAM(_REENT))); if(_LIB_VERSION == _IEEE_) return y; if(!finite(y)&&finite(x)) { -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif if(floor(x)==x&&x<=0.0) { /* gamma(-integer) or gamma(0) */ errno = EDOM; diff --git a/newlib/libm/math/w_hypot.c b/newlib/libm/math/w_hypot.c index 441fc20cb..48b47881e 100644 --- a/newlib/libm/math/w_hypot.c +++ b/newlib/libm/math/w_hypot.c @@ -68,12 +68,6 @@ PORTABILITY if(_LIB_VERSION == _IEEE_) return z; if((!finite(z))&&finite(x)&&finite(y)) { /* hypot(finite,finite) overflow */ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif errno = ERANGE; return HUGE_VAL; } else diff --git a/newlib/libm/math/w_j0.c b/newlib/libm/math/w_j0.c index 59d17e8b8..b537ef406 100644 --- a/newlib/libm/math/w_j0.c +++ b/newlib/libm/math/w_j0.c @@ -129,12 +129,6 @@ None of the Bessel functions are in ANSI C. z = __ieee754_y0(x); if(_LIB_VERSION == _IEEE_ || isnan(x) ) return z; if(x <= 0.0){ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif /* y0(0) = -inf or y0(x<0) = NaN */ errno = EDOM; return -HUGE_VAL; diff --git a/newlib/libm/math/w_j1.c b/newlib/libm/math/w_j1.c index 127324aad..6f25fea27 100644 --- a/newlib/libm/math/w_j1.c +++ b/newlib/libm/math/w_j1.c @@ -56,12 +56,6 @@ z = __ieee754_y1(x); if(_LIB_VERSION == _IEEE_ || isnan(x) ) return z; if(x <= 0.0){ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif /* y1(0) = -inf or y1(x<0) = NaN */ errno = EDOM; return -HUGE_VAL; diff --git a/newlib/libm/math/w_jn.c b/newlib/libm/math/w_jn.c index 0482fa95a..28a9abc07 100644 --- a/newlib/libm/math/w_jn.c +++ b/newlib/libm/math/w_jn.c @@ -79,12 +79,6 @@ if(_LIB_VERSION == _IEEE_ || isnan(x) ) return z; if(x <= 0.0){ /* yn(n,0) = -inf or yn(x<0) = NaN */ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif errno = EDOM; return -HUGE_VAL; } diff --git a/newlib/libm/math/w_lgamma.c b/newlib/libm/math/w_lgamma.c index f848f1c95..25d12c9c7 100644 --- a/newlib/libm/math/w_lgamma.c +++ b/newlib/libm/math/w_lgamma.c @@ -38,12 +38,6 @@ y = __ieee754_lgamma_r(x,&(_REENT_SIGNGAM(_REENT))); if(_LIB_VERSION == _IEEE_) return y; if(!finite(y)&&finite(x)) { -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif if(floor(x)==x&&x<=0.0) /* lgamma(-integer) */ errno = EDOM; diff --git a/newlib/libm/math/w_log.c b/newlib/libm/math/w_log.c index 37afcac3c..2a6c980e0 100644 --- a/newlib/libm/math/w_log.c +++ b/newlib/libm/math/w_log.c @@ -63,12 +63,6 @@ PORTABILITY double z; z = __ieee754_log(x); if(_LIB_VERSION == _IEEE_ || isnan(x) || x > 0.0) return z; -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif if(x==0.0) { /* log(0) */ errno = ERANGE; diff --git a/newlib/libm/math/w_log10.c b/newlib/libm/math/w_log10.c index 69ef5f92c..a9112f86f 100644 --- a/newlib/libm/math/w_log10.c +++ b/newlib/libm/math/w_log10.c @@ -64,12 +64,6 @@ PORTABILITY z = __ieee754_log10(x); if(_LIB_VERSION == _IEEE_ || isnan(x)) return z; if(x<=0.0) { -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif if(x==0.0) { /* log10(0) */ errno = ERANGE; diff --git a/newlib/libm/math/w_pow.c b/newlib/libm/math/w_pow.c index e9ac37051..6e953360a 100644 --- a/newlib/libm/math/w_pow.c +++ b/newlib/libm/math/w_pow.c @@ -66,12 +66,6 @@ PORTABILITY return __ieee754_pow(x,y); #else double z; -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif z=__ieee754_pow(x,y); if(_LIB_VERSION == _IEEE_|| isnan(y)) return z; if(isnan(x)) { diff --git a/newlib/libm/math/w_scalb.c b/newlib/libm/math/w_scalb.c index 77fb2af53..14f54a7e8 100644 --- a/newlib/libm/math/w_scalb.c +++ b/newlib/libm/math/w_scalb.c @@ -41,12 +41,6 @@ return __ieee754_scalb(x,fn); #else double z; -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif z = __ieee754_scalb(x,fn); if(_LIB_VERSION == _IEEE_) return z; if(!(finite(z)||isnan(z))&&finite(x)) { diff --git a/newlib/libm/math/w_sinh.c b/newlib/libm/math/w_sinh.c index 0e97e5455..9d7833a2c 100644 --- a/newlib/libm/math/w_sinh.c +++ b/newlib/libm/math/w_sinh.c @@ -79,12 +79,6 @@ QUICKREF if(_LIB_VERSION == _IEEE_) return z; if(!finite(z)&&finite(x)) { /* sinh(finite) overflow */ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif errno = ERANGE; return ((x>0.0) ? HUGE_VAL : -HUGE_VAL); } else diff --git a/newlib/libm/math/wf_cosh.c b/newlib/libm/math/wf_cosh.c index 1b507b09b..e0fd1c492 100644 --- a/newlib/libm/math/wf_cosh.c +++ b/newlib/libm/math/wf_cosh.c @@ -35,12 +35,6 @@ if(_LIB_VERSION == _IEEE_ || isnan(x)) return z; if(fabsf(x)>8.9415985107e+01f) { /* coshf(finite) overflow */ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif errno = ERANGE; return (float)HUGE_VAL; } else diff --git a/newlib/libm/math/wf_exp.c b/newlib/libm/math/wf_exp.c index af1800eeb..73177bc25 100644 --- a/newlib/libm/math/wf_exp.c +++ b/newlib/libm/math/wf_exp.c @@ -45,12 +45,6 @@ u_threshold= -1.0397208405e+02; /* 0xc2cff1b5 */ if(finitef(x)) { if(x>o_threshold) { /* expf(finite) overflow */ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif errno = ERANGE; return HUGE_VAL; } else if(x<u_threshold) { diff --git a/newlib/libm/math/wf_gamma.c b/newlib/libm/math/wf_gamma.c index aeaf394c5..86517f1a1 100644 --- a/newlib/libm/math/wf_gamma.c +++ b/newlib/libm/math/wf_gamma.c @@ -32,12 +32,6 @@ y = __ieee754_gammaf_r(x,&(_REENT_SIGNGAM(_REENT))); if(_LIB_VERSION == _IEEE_) return y; if(!finitef(y)&&finitef(x)) { -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif if(floorf(x)==x&&x<=0.0f) { /* gammaf(-integer) or gammaf(0) */ errno = EDOM; diff --git a/newlib/libm/math/wf_hypot.c b/newlib/libm/math/wf_hypot.c index 7a2234c13..5bcce9c71 100644 --- a/newlib/libm/math/wf_hypot.c +++ b/newlib/libm/math/wf_hypot.c @@ -35,12 +35,6 @@ if(_LIB_VERSION == _IEEE_) return z; if((!finitef(z))&&finitef(x)&&finitef(y)) { /* hypotf(finite,finite) overflow */ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif errno = ERANGE; return (float)HUGE_VAL; } else diff --git a/newlib/libm/math/wf_j0.c b/newlib/libm/math/wf_j0.c index 71ea421d4..32e76fbe4 100644 --- a/newlib/libm/math/wf_j0.c +++ b/newlib/libm/math/wf_j0.c @@ -55,12 +55,6 @@ z = __ieee754_y0f(x); if(_LIB_VERSION == _IEEE_ || isnan(x) ) return z; if(x <= (float)0.0){ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif /* y0f(0) = -inf or y0f(x<0) = NaN */ errno = EDOM; return (float)-HUGE_VAL; diff --git a/newlib/libm/math/wf_j1.c b/newlib/libm/math/wf_j1.c index 01c9999c6..41d6c49c5 100644 --- a/newlib/libm/math/wf_j1.c +++ b/newlib/libm/math/wf_j1.c @@ -58,12 +58,6 @@ if(_LIB_VERSION == _IEEE_ || isnan(x) ) return z; if(x <= 0.0f){ /* y1f(0) = -inf or y1f(x<0) = NaN */ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif errno = EDOM; return (float)-HUGE_VAL; } diff --git a/newlib/libm/math/wf_jn.c b/newlib/libm/math/wf_jn.c index b41837273..450c81589 100644 --- a/newlib/libm/math/wf_jn.c +++ b/newlib/libm/math/wf_jn.c @@ -54,12 +54,6 @@ if(_LIB_VERSION == _IEEE_ || isnan(x) ) return z; if(x <= 0.0f){ /* ynf(n,0) = -inf or ynf(x<0) = NaN */ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif errno = EDOM; return (float)-HUGE_VAL; } diff --git a/newlib/libm/math/wf_lgamma.c b/newlib/libm/math/wf_lgamma.c index 574111e36..1ecd264fa 100644 --- a/newlib/libm/math/wf_lgamma.c +++ b/newlib/libm/math/wf_lgamma.c @@ -32,12 +32,6 @@ y = __ieee754_lgammaf_r(x,&(_REENT_SIGNGAM(_REENT))); if(_LIB_VERSION == _IEEE_) return y; if(!finitef(y)&&finitef(x)) { -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif if(floorf(x)==x&&x<=0.0f) { /* lgammaf(-integer) */ errno = EDOM; diff --git a/newlib/libm/math/wf_log.c b/newlib/libm/math/wf_log.c index 24e6eeb80..2f6ac772b 100644 --- a/newlib/libm/math/wf_log.c +++ b/newlib/libm/math/wf_log.c @@ -34,12 +34,6 @@ float z; z = __ieee754_logf(x); if(_LIB_VERSION == _IEEE_ || isnan(x) || x > 0.0f) return z; -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif if(x==0.0f) { /* logf(0) */ errno = ERANGE; diff --git a/newlib/libm/math/wf_log10.c b/newlib/libm/math/wf_log10.c index 3560c5c0e..a61120d24 100644 --- a/newlib/libm/math/wf_log10.c +++ b/newlib/libm/math/wf_log10.c @@ -34,12 +34,6 @@ z = __ieee754_log10f(x); if(_LIB_VERSION == _IEEE_ || isnan(x)) return z; if(x<=0.0f) { -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif if(x==0.0f) { /* log10f(0) */ errno = ERANGE; diff --git a/newlib/libm/math/wf_scalb.c b/newlib/libm/math/wf_scalb.c index acdf8a80d..b57e2e684 100644 --- a/newlib/libm/math/wf_scalb.c +++ b/newlib/libm/math/wf_scalb.c @@ -41,12 +41,6 @@ return __ieee754_scalbf(x,fn); #else float z; -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif z = __ieee754_scalbf(x,fn); if(_LIB_VERSION == _IEEE_) return z; if(!(finitef(z)||isnan(z))&&finitef(x)) { diff --git a/newlib/libm/math/wf_sinh.c b/newlib/libm/math/wf_sinh.c index f7d5a9665..9149d19f3 100644 --- a/newlib/libm/math/wf_sinh.c +++ b/newlib/libm/math/wf_sinh.c @@ -35,12 +35,6 @@ if(_LIB_VERSION == _IEEE_) return z; if(!finitef(z)&&finitef(x)) { /* sinhf(finite) overflow */ -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif errno = ERANGE; return ( (x>0.0f) ? HUGE_VAL : -HUGE_VAL); } else diff --git a/newlib/libm/math/wr_gamma.c b/newlib/libm/math/wr_gamma.c index f07908c8a..9dda12b5a 100644 --- a/newlib/libm/math/wr_gamma.c +++ b/newlib/libm/math/wr_gamma.c @@ -34,12 +34,6 @@ y = __ieee754_gamma_r(x,signgamp); if(_LIB_VERSION == _IEEE_) return y; if(!finite(y)&&finite(x)) { -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif if(floor(x)==x&&x<=0.0) /* gamma(-integer) or gamma(0) */ errno = EDOM; diff --git a/newlib/libm/math/wr_lgamma.c b/newlib/libm/math/wr_lgamma.c index 8a32a59b8..d961db58d 100644 --- a/newlib/libm/math/wr_lgamma.c +++ b/newlib/libm/math/wr_lgamma.c @@ -34,12 +34,6 @@ y = __ieee754_lgamma_r(x,signgamp); if(_LIB_VERSION == _IEEE_) return y; if(!finite(y)&&finite(x)) { -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif if(floor(x)==x&&x<=0.0) /* lgamma(-integer) */ errno = EDOM; diff --git a/newlib/libm/math/wrf_gamma.c b/newlib/libm/math/wrf_gamma.c index 625ea4772..b03919bfd 100644 --- a/newlib/libm/math/wrf_gamma.c +++ b/newlib/libm/math/wrf_gamma.c @@ -34,12 +34,6 @@ y = __ieee754_gammaf_r(x,signgamp); if(_LIB_VERSION == _IEEE_) return y; if(!finitef(y)&&finitef(x)) { -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif if(floorf(x)==x&&x<=0.0f) { /* gammaf(-integer) or gamma(0) */ errno = EDOM; diff --git a/newlib/libm/math/wrf_lgamma.c b/newlib/libm/math/wrf_lgamma.c index e91bffb38..f12c0dff1 100644 --- a/newlib/libm/math/wrf_lgamma.c +++ b/newlib/libm/math/wrf_lgamma.c @@ -34,12 +34,6 @@ y = __ieee754_lgammaf_r(x,signgamp); if(_LIB_VERSION == _IEEE_) return y; if(!finitef(y)&&finitef(x)) { -#ifndef HUGE_VAL -#define HUGE_VAL inf - double inf = 0.0; - - SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */ -#endif if(floorf(x)==x&&x<=0.0f) { /* lgammaf(-integer) or lgamma(0) */ errno = EDOM; -- 2.17.1
0003-Newlib-Use-HUGE_VALF-instead-of-HUGE_VAL-in-single-p.patch
(text/x-patch, 7.1 KB)
From 6ac91fb3a8387a9d2257950496ecb59be7e74e2f Mon Sep 17 00:00:00 2001 From: Jozef Lawrynowicz <[email protected]> Date: Tue, 22 Jan 2019 10:39:38 +0000 Subject: [PATCH 3/4] [Newlib] Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions --- newlib/libm/math/wf_cosh.c | 2 +- newlib/libm/math/wf_exp.c | 2 +- newlib/libm/math/wf_gamma.c | 2 +- newlib/libm/math/wf_hypot.c | 2 +- newlib/libm/math/wf_j0.c | 2 +- newlib/libm/math/wf_j1.c | 2 +- newlib/libm/math/wf_jn.c | 2 +- newlib/libm/math/wf_lgamma.c | 2 +- newlib/libm/math/wf_log.c | 2 +- newlib/libm/math/wf_log10.c | 2 +- newlib/libm/math/wf_pow.c | 6 +++--- newlib/libm/math/wf_scalb.c | 2 +- newlib/libm/math/wf_sinh.c | 2 +- newlib/libm/math/wr_gamma.c | 2 +- newlib/libm/math/wrf_gamma.c | 2 +- newlib/libm/math/wrf_lgamma.c | 2 +- 16 files changed, 18 insertions(+), 18 deletions(-) diff --git a/newlib/libm/math/wf_cosh.c b/newlib/libm/math/wf_cosh.c index e0fd1c492..976009914 100644 --- a/newlib/libm/math/wf_cosh.c +++ b/newlib/libm/math/wf_cosh.c @@ -36,7 +36,7 @@ if(fabsf(x)>8.9415985107e+01f) { /* coshf(finite) overflow */ errno = ERANGE; - return (float)HUGE_VAL; + return HUGE_VALF; } else return z; #endif diff --git a/newlib/libm/math/wf_exp.c b/newlib/libm/math/wf_exp.c index 73177bc25..38cacd95a 100644 --- a/newlib/libm/math/wf_exp.c +++ b/newlib/libm/math/wf_exp.c @@ -46,7 +46,7 @@ u_threshold= -1.0397208405e+02; /* 0xc2cff1b5 */ if(x>o_threshold) { /* expf(finite) overflow */ errno = ERANGE; - return HUGE_VAL; + return HUGE_VALF; } else if(x<u_threshold) { /* expf(finite) underflow */ errno = ERANGE; diff --git a/newlib/libm/math/wf_gamma.c b/newlib/libm/math/wf_gamma.c index 86517f1a1..0235ff4db 100644 --- a/newlib/libm/math/wf_gamma.c +++ b/newlib/libm/math/wf_gamma.c @@ -39,7 +39,7 @@ /* gammaf(finite) overflow */ errno = ERANGE; } - return (float)HUGE_VAL; + return HUGE_VALF; } else return y; #endif diff --git a/newlib/libm/math/wf_hypot.c b/newlib/libm/math/wf_hypot.c index 5bcce9c71..dfc1e1d08 100644 --- a/newlib/libm/math/wf_hypot.c +++ b/newlib/libm/math/wf_hypot.c @@ -36,7 +36,7 @@ if((!finitef(z))&&finitef(x)&&finitef(y)) { /* hypotf(finite,finite) overflow */ errno = ERANGE; - return (float)HUGE_VAL; + return HUGE_VALF; } else return z; #endif diff --git a/newlib/libm/math/wf_j0.c b/newlib/libm/math/wf_j0.c index 32e76fbe4..4d125db79 100644 --- a/newlib/libm/math/wf_j0.c +++ b/newlib/libm/math/wf_j0.c @@ -57,7 +57,7 @@ if(x <= (float)0.0){ /* y0f(0) = -inf or y0f(x<0) = NaN */ errno = EDOM; - return (float)-HUGE_VAL; + return -HUGE_VALF; } if(x>(float)X_TLOSS) { /* y0f(x>X_TLOSS) */ diff --git a/newlib/libm/math/wf_j1.c b/newlib/libm/math/wf_j1.c index 41d6c49c5..e178273c5 100644 --- a/newlib/libm/math/wf_j1.c +++ b/newlib/libm/math/wf_j1.c @@ -59,7 +59,7 @@ if(x <= 0.0f){ /* y1f(0) = -inf or y1f(x<0) = NaN */ errno = EDOM; - return (float)-HUGE_VAL; + return -HUGE_VALF; } if(x>(float)X_TLOSS) { /* y1f(x>X_TLOSS) */ diff --git a/newlib/libm/math/wf_jn.c b/newlib/libm/math/wf_jn.c index 450c81589..3e4632ead 100644 --- a/newlib/libm/math/wf_jn.c +++ b/newlib/libm/math/wf_jn.c @@ -55,7 +55,7 @@ if(x <= 0.0f){ /* ynf(n,0) = -inf or ynf(x<0) = NaN */ errno = EDOM; - return (float)-HUGE_VAL; + return -HUGE_VALF; } if(x>(float)X_TLOSS) { /* ynf(x>X_TLOSS) */ diff --git a/newlib/libm/math/wf_lgamma.c b/newlib/libm/math/wf_lgamma.c index 1ecd264fa..c644072e4 100644 --- a/newlib/libm/math/wf_lgamma.c +++ b/newlib/libm/math/wf_lgamma.c @@ -39,7 +39,7 @@ /* lgammaf(finite) overflow */ errno = ERANGE; } - return (float)HUGE_VAL; + return HUGE_VALF; } else return y; #endif diff --git a/newlib/libm/math/wf_log.c b/newlib/libm/math/wf_log.c index 2f6ac772b..93d1d213e 100644 --- a/newlib/libm/math/wf_log.c +++ b/newlib/libm/math/wf_log.c @@ -37,7 +37,7 @@ if(x==0.0f) { /* logf(0) */ errno = ERANGE; - return (float)-HUGE_VAL; + return -HUGE_VALF; } else { /* logf(x<0) */ errno = EDOM; diff --git a/newlib/libm/math/wf_log10.c b/newlib/libm/math/wf_log10.c index a61120d24..c9f8ecb57 100644 --- a/newlib/libm/math/wf_log10.c +++ b/newlib/libm/math/wf_log10.c @@ -37,7 +37,7 @@ if(x==0.0f) { /* log10f(0) */ errno = ERANGE; - return (float)-HUGE_VAL; + return -HUGE_VALF; } else { /* log10f(x<0) */ errno = EDOM; diff --git a/newlib/libm/math/wf_pow.c b/newlib/libm/math/wf_pow.c index 2288977e9..73648b83f 100644 --- a/newlib/libm/math/wf_pow.c +++ b/newlib/libm/math/wf_pow.c @@ -51,7 +51,7 @@ if(finitef(y)&&y<0.0f) { /* 0**neg */ errno = EDOM; - return (float)-HUGE_VAL; + return -HUGE_VALF; } return z; } @@ -67,8 +67,8 @@ /* powf(x,y) overflow */ errno = ERANGE; if(x<0.0f&&rintf(y)!=y) - return (float)-HUGE_VAL; - return (float)HUGE_VAL; + return -HUGE_VALF; + return HUGE_VALF; } } } diff --git a/newlib/libm/math/wf_scalb.c b/newlib/libm/math/wf_scalb.c index b57e2e684..e87dc37dd 100644 --- a/newlib/libm/math/wf_scalb.c +++ b/newlib/libm/math/wf_scalb.c @@ -46,7 +46,7 @@ if(!(finitef(z)||isnan(z))&&finitef(x)) { /* scalbf overflow; */ errno = ERANGE; - return (x > 0.0 ? HUGE_VAL : -HUGE_VAL); + return (x > 0.0 ? HUGE_VALF : -HUGE_VALF); } if(z==0.0f&&z!=x) { /* scalbf underflow */ diff --git a/newlib/libm/math/wf_sinh.c b/newlib/libm/math/wf_sinh.c index 9149d19f3..2f2c605ef 100644 --- a/newlib/libm/math/wf_sinh.c +++ b/newlib/libm/math/wf_sinh.c @@ -36,7 +36,7 @@ if(!finitef(z)&&finitef(x)) { /* sinhf(finite) overflow */ errno = ERANGE; - return ( (x>0.0f) ? HUGE_VAL : -HUGE_VAL); + return ( (x>0.0f) ? HUGE_VALF : -HUGE_VALF); } else return z; #endif diff --git a/newlib/libm/math/wr_gamma.c b/newlib/libm/math/wr_gamma.c index 9dda12b5a..c4c2a829e 100644 --- a/newlib/libm/math/wr_gamma.c +++ b/newlib/libm/math/wr_gamma.c @@ -40,7 +40,7 @@ else /* gamma(finite) overflow */ errno = ERANGE; - return HUGE_VAL; + return HUGE_VALF; } else return y; #endif diff --git a/newlib/libm/math/wrf_gamma.c b/newlib/libm/math/wrf_gamma.c index b03919bfd..d43c7f03d 100644 --- a/newlib/libm/math/wrf_gamma.c +++ b/newlib/libm/math/wrf_gamma.c @@ -41,7 +41,7 @@ /* gammaf(finite) overflow */ errno = ERANGE; } - return (float)HUGE_VAL; + return HUGE_VALF; } else return y; #endif diff --git a/newlib/libm/math/wrf_lgamma.c b/newlib/libm/math/wrf_lgamma.c index f12c0dff1..2785b87e5 100644 --- a/newlib/libm/math/wrf_lgamma.c +++ b/newlib/libm/math/wrf_lgamma.c @@ -41,7 +41,7 @@ /* lgammaf(finite) overflow */ errno = ERANGE; } - return (float)HUGE_VAL; + return HUGE_VALF; } else return y; #endif -- 2.17.1
0004-Newlib-Use-nanf-instead-of-nan-in-single-precision-f.patch
(text/x-patch, 1.7 KB)
From f0ff96916fcbda502af8098524d5289dd889bb99 Mon Sep 17 00:00:00 2001 From: Jozef Lawrynowicz <[email protected]> Date: Tue, 22 Jan 2019 10:40:18 +0000 Subject: [PATCH 4/4] [Newlib] Use nanf() instead of nan() in single-precision float libm math functions --- newlib/libm/math/wf_acos.c | 2 +- newlib/libm/math/wf_asin.c | 2 +- newlib/libm/math/wf_log.c | 2 +- newlib/libm/math/wf_log10.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/newlib/libm/math/wf_acos.c b/newlib/libm/math/wf_acos.c index 15d869980..c24912de5 100644 --- a/newlib/libm/math/wf_acos.c +++ b/newlib/libm/math/wf_acos.c @@ -31,7 +31,7 @@ if(fabsf(x)>1.0f) { /* acosf(|x|>1) */ errno = EDOM; - return (float) nan(""); + return nanf(""); } else return z; #endif diff --git a/newlib/libm/math/wf_asin.c b/newlib/libm/math/wf_asin.c index 2f9ffaf6e..c9f15e352 100644 --- a/newlib/libm/math/wf_asin.c +++ b/newlib/libm/math/wf_asin.c @@ -38,7 +38,7 @@ if(fabsf(x)>1.0f) { /* asinf(|x|>1) */ errno = EDOM; - return (float)nan(""); + return nanf(""); } else return z; #endif diff --git a/newlib/libm/math/wf_log.c b/newlib/libm/math/wf_log.c index 93d1d213e..97f4a7f1a 100644 --- a/newlib/libm/math/wf_log.c +++ b/newlib/libm/math/wf_log.c @@ -41,7 +41,7 @@ } else { /* logf(x<0) */ errno = EDOM; - return nan(""); + return nanf(""); } #endif } diff --git a/newlib/libm/math/wf_log10.c b/newlib/libm/math/wf_log10.c index c9f8ecb57..529ed6514 100644 --- a/newlib/libm/math/wf_log10.c +++ b/newlib/libm/math/wf_log10.c @@ -41,7 +41,7 @@ } else { /* log10f(x<0) */ errno = EDOM; - return nan(""); + return nanf(""); } } else return z; -- 2.17.1