diff options
Diffstat (limited to 'newlib/libm')
-rw-r--r-- | newlib/libm/common/sf_round.c | 4 | ||||
-rw-r--r-- | newlib/libm/math/e_atan2.c | 2 | ||||
-rw-r--r-- | newlib/libm/math/e_exp.c | 3 | ||||
-rw-r--r-- | newlib/libm/math/e_pow.c | 3 | ||||
-rw-r--r-- | newlib/libm/math/e_rem_pio2.c | 2 | ||||
-rw-r--r-- | newlib/libm/math/ef_exp.c | 3 | ||||
-rw-r--r-- | newlib/libm/math/ef_pow.c | 3 | ||||
-rw-r--r-- | newlib/libm/math/er_lgamma.c | 2 | ||||
-rw-r--r-- | newlib/libm/math/erf_lgamma.c | 2 |
9 files changed, 14 insertions, 10 deletions
diff --git a/newlib/libm/common/sf_round.c b/newlib/libm/common/sf_round.c index c8f1d7733..1bf60890c 100644 --- a/newlib/libm/common/sf_round.c +++ b/newlib/libm/common/sf_round.c @@ -18,12 +18,16 @@ float x; #endif { + int signbit; __uint32_t w; /* Most significant word, least significant word. */ int exponent_less_127; GET_FLOAT_WORD(w, x); + /* Extract sign bit. */ + signbit = w & 0x80000000; + /* Extract exponent field. */ exponent_less_127 = (int)((w & 0x7f800000) >> 23) - 127; diff --git a/newlib/libm/math/e_atan2.c b/newlib/libm/math/e_atan2.c index 8e9650f29..268be64a9 100644 --- a/newlib/libm/math/e_atan2.c +++ b/newlib/libm/math/e_atan2.c @@ -73,7 +73,7 @@ pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */ if(((ix|((lx|-lx)>>31))>0x7ff00000)|| ((iy|((ly|-ly)>>31))>0x7ff00000)) /* x or y is NaN */ return x+y; - if(((hx-0x3ff00000)|lx)==0) return atan(y); /* x=1.0 */ + if((hx-0x3ff00000|lx)==0) return atan(y); /* x=1.0 */ m = ((hy>>31)&1)|((hx>>30)&2); /* 2*sign(x)+sign(y) */ /* when y = 0 */ diff --git a/newlib/libm/math/e_exp.c b/newlib/libm/math/e_exp.c index e7455eef6..ce093c610 100644 --- a/newlib/libm/math/e_exp.c +++ b/newlib/libm/math/e_exp.c @@ -109,7 +109,7 @@ P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */ #endif { double y,hi,lo,c,t; - __int32_t k = 0,xsb; + __int32_t k,xsb; __uint32_t hx; GET_HIGH_WORD(hx,x); @@ -144,6 +144,7 @@ P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */ else if(hx < 0x3e300000) { /* when |x|<2**-28 */ if(huge+x>one) return one+x;/* trigger inexact */ } + else k = 0; /* x is now in primary range */ t = x*x; diff --git a/newlib/libm/math/e_pow.c b/newlib/libm/math/e_pow.c index cad6737a1..aac0b4211 100644 --- a/newlib/libm/math/e_pow.c +++ b/newlib/libm/math/e_pow.c @@ -120,10 +120,9 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ /* x|y==NaN return NaN unless x==1 then return 1 */ if(ix > 0x7ff00000 || ((ix==0x7ff00000)&&(lx!=0)) || - iy > 0x7ff00000 || ((iy==0x7ff00000)&&(ly!=0))) { + iy > 0x7ff00000 || ((iy==0x7ff00000)&&(ly!=0))) if(((ix-0x3ff00000)|lx)==0) return one; else return nan(""); - } /* determine if y is an odd int when x < 0 * yisint = 0 ... y is not an integer diff --git a/newlib/libm/math/e_rem_pio2.c b/newlib/libm/math/e_rem_pio2.c index ddfecba2d..3e5d0f7a2 100644 --- a/newlib/libm/math/e_rem_pio2.c +++ b/newlib/libm/math/e_rem_pio2.c @@ -89,7 +89,7 @@ pio2_3t = 8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */ double x,y[]; #endif { - double z = 0.0,w,t,r,fn; + double z,w,t,r,fn; double tx[3]; __int32_t i,j,n,ix,hx; int e0,nx; diff --git a/newlib/libm/math/ef_exp.c b/newlib/libm/math/ef_exp.c index 6824f991a..19c570cfd 100644 --- a/newlib/libm/math/ef_exp.c +++ b/newlib/libm/math/ef_exp.c @@ -47,7 +47,7 @@ P5 = 4.1381369442e-08; /* 0x3331bb4c */ #endif { float y,hi,lo,c,t; - __int32_t k = 0,xsb,sx; + __int32_t k,xsb,sx; __uint32_t hx; GET_FLOAT_WORD(sx,x); @@ -79,6 +79,7 @@ P5 = 4.1381369442e-08; /* 0x3331bb4c */ else if(hx < 0x31800000) { /* when |x|<2**-28 */ if(huge+x>one) return one+x;/* trigger inexact */ } + else k = 0; /* x is now in primary range */ t = x*x; diff --git a/newlib/libm/math/ef_pow.c b/newlib/libm/math/ef_pow.c index b3041dbdc..6804ce45a 100644 --- a/newlib/libm/math/ef_pow.c +++ b/newlib/libm/math/ef_pow.c @@ -77,10 +77,9 @@ ivln2_l = 7.0526075433e-06; /* 0x36eca570 =1/ln2 tail*/ /* x|y==NaN return NaN unless x==1 then return 1 */ if(FLT_UWORD_IS_NAN(ix) || - FLT_UWORD_IS_NAN(iy)) { + FLT_UWORD_IS_NAN(iy)) if(ix==0x3f800000) return one; else return nanf(""); - } /* determine if y is an odd int when x < 0 * yisint = 0 ... y is not an integer diff --git a/newlib/libm/math/er_lgamma.c b/newlib/libm/math/er_lgamma.c index 386a8a73b..7c9a153ed 100644 --- a/newlib/libm/math/er_lgamma.c +++ b/newlib/libm/math/er_lgamma.c @@ -216,7 +216,7 @@ static double zero= 0.00000000000000000000e+00; double x; int *signgamp; #endif { - double t,y,z,nadj = 0.0,p,p1,p2,p3,q,r,w; + double t,y,z,nadj,p,p1,p2,p3,q,r,w; __int32_t i,hx,lx,ix; EXTRACT_WORDS(hx,lx,x); diff --git a/newlib/libm/math/erf_lgamma.c b/newlib/libm/math/erf_lgamma.c index 3c6ba02af..90cc5425d 100644 --- a/newlib/libm/math/erf_lgamma.c +++ b/newlib/libm/math/erf_lgamma.c @@ -151,7 +151,7 @@ static float zero= 0.0000000000e+00; float x; int *signgamp; #endif { - float t,y,z,nadj = 0.0,p,p1,p2,p3,q,r,w; + float t,y,z,nadj,p,p1,p2,p3,q,r,w; __int32_t i,hx,ix; GET_FLOAT_WORD(hx,x); |