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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.