From c36e6dd754453b8f57767b19c58d2f832bac8bb0 Mon Sep 17 00:00:00 2001 From: Thomas Fitzsimmons Date: Thu, 27 Jun 2002 20:25:57 +0000 Subject: * libm/mathfp/er_lgamma.c: Remove __kernel references. * libm/mathfp/erf_lgamma.c: Likewise. * libm/mathfp/s_tgamma.c: Likewise. * libm/mathfp/sf_tgamma.c: Likewise. --- newlib/libm/mathfp/er_lgamma.c | 14 ++++++++------ newlib/libm/mathfp/erf_lgamma.c | 16 +++++++++------- newlib/libm/mathfp/s_tgamma.c | 15 ++++++++++++--- newlib/libm/mathfp/sf_tgamma.c | 17 ++++++++++++----- 4 files changed, 41 insertions(+), 21 deletions(-) (limited to 'newlib/libm') diff --git a/newlib/libm/mathfp/er_lgamma.c b/newlib/libm/mathfp/er_lgamma.c index 9d8e370fa..8b754764d 100644 --- a/newlib/libm/mathfp/er_lgamma.c +++ b/newlib/libm/mathfp/er_lgamma.c @@ -285,7 +285,7 @@ static double zero= 0.00000000000000000000e+00; GET_HIGH_WORD(ix,x); ix &= 0x7fffffff; - if(ix<0x3fd00000) return __kernel_sin(pi*x,zero,0); + if(ix<0x3fd00000) return sin(pi*x); y = -x; /* x is assume negative */ /* @@ -309,14 +309,14 @@ static double zero= 0.00000000000000000000e+00; } } switch (n) { - case 0: y = __kernel_sin(pi*y,zero,0); break; + case 0: y = sin(pi*y); break; case 1: - case 2: y = __kernel_cos(pi*(0.5-y),zero); break; + case 2: y = cos(pi*(0.5-y)); break; case 3: - case 4: y = __kernel_sin(pi*(one-y),zero,0); break; + case 4: y = sin(pi*(one-y)); break; case 5: - case 6: y = -__kernel_cos(pi*(y-1.5),zero); break; - default: y = __kernel_sin(pi*(y-2.0),zero,0); break; + case 6: y = -cos(pi*(y-1.5)); break; + default: y = sin(pi*(y-2.0)); break; } return -y; } @@ -332,6 +332,8 @@ static double zero= 0.00000000000000000000e+00; double t,y,z,nadj,p,p1,p2,p3,q,r,w; __int32_t i,hx,lx,ix; + nadj = 0; + EXTRACT_WORDS(hx,lx,x); /* purge off +-inf, NaN, +-0, and negative arguments */ diff --git a/newlib/libm/mathfp/erf_lgamma.c b/newlib/libm/mathfp/erf_lgamma.c index 664812d81..64bec0aca 100644 --- a/newlib/libm/mathfp/erf_lgamma.c +++ b/newlib/libm/mathfp/erf_lgamma.c @@ -107,7 +107,7 @@ static float zero= 0.0000000000e+00; GET_FLOAT_WORD(ix,x); ix &= 0x7fffffff; - if(ix<0x3e800000) return __kernel_sinf(pi*x,zero,0); + if(ix<0x3e800000) return sinf(pi*x); y = -x; /* x is assume negative */ /* @@ -131,14 +131,14 @@ static float zero= 0.0000000000e+00; } } switch (n) { - case 0: y = __kernel_sinf(pi*y,zero,0); break; + case 0: y = sinf(pi*y); break; case 1: - case 2: y = __kernel_cosf(pi*((float)0.5-y),zero); break; + case 2: y = cosf(pi*((float)0.5-y)); break; case 3: - case 4: y = __kernel_sinf(pi*(one-y),zero,0); break; + case 4: y = sinf(pi*(one-y)); break; case 5: - case 6: y = -__kernel_cosf(pi*(y-(float)1.5),zero); break; - default: y = __kernel_sinf(pi*(y-(float)2.0),zero,0); break; + case 6: y = -cosf(pi*(y-(float)1.5)); break; + default: y = sinf(pi*(y-(float)2.0)); break; } return -y; } @@ -156,7 +156,9 @@ static float zero= 0.0000000000e+00; GET_FLOAT_WORD(hx,x); - /* purge off +-inf, NaN, +-0, and negative arguments */ + nadj = 0; + + /* purge off +-inf, NaN, +-0, and negative arguments */ *signgamp = 1; ix = hx&0x7fffffff; if(ix>=0x7f800000) return x*x; diff --git a/newlib/libm/mathfp/s_tgamma.c b/newlib/libm/mathfp/s_tgamma.c index 2dec8d7e4..4caf27089 100644 --- a/newlib/libm/mathfp/s_tgamma.c +++ b/newlib/libm/mathfp/s_tgamma.c @@ -16,6 +16,7 @@ */ #include +#include #ifdef __STDC__ double tgamma(double x) @@ -26,7 +27,7 @@ { double y; int local_signgam; - y = __ieee754_gamma_r(x,&local_signgam); + y = gamma_r(x,&local_signgam); if (local_signgam < 0) y = -y; #ifdef _IEEE_LIBM return y; @@ -35,9 +36,17 @@ if(!finite(y)&&finite(x)) { if(floor(x)==x&&x<=0.0) - return __kernel_standard(x,x,41); /* tgamma pole */ + { + /* tgamma pole */ + errno = EDOM; + return HUGE_VAL; + } else - return __kernel_standard(x,x,40); /* tgamma overflow */ + { + /* tgamma overflow */ + errno = ERANGE; + return HUGE_VAL; + } } return y; #endif diff --git a/newlib/libm/mathfp/sf_tgamma.c b/newlib/libm/mathfp/sf_tgamma.c index 11b7a37aa..f4d145634 100644 --- a/newlib/libm/mathfp/sf_tgamma.c +++ b/newlib/libm/mathfp/sf_tgamma.c @@ -14,6 +14,7 @@ */ #include +#include #ifdef __STDC__ float tgammaf(float x) @@ -24,7 +25,7 @@ { float y; int local_signgam; - y = __ieee754_gammaf_r(x,&local_signgam); + y = gammaf_r(x,&local_signgam); if (local_signgam < 0) y = -y; #ifdef _IEEE_LIBM return y; @@ -33,11 +34,17 @@ if(!finitef(y)&&finitef(x)) { if(floorf(x)==x&&x<=(float)0.0) - /* tgammaf pole */ - return (float)__kernel_standard((double)x,(double)x,141); + { + /* tgammaf pole */ + errno = EDOM; + return HUGE_VAL; + } else - /* tgammaf overflow */ - return (float)__kernel_standard((double)x,(double)x,140); + { + /* tgammaf overflow */ + errno = ERANGE; + return HUGE_VAL; + } } return y; #endif -- cgit v1.2.3