X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=libquadmath%2Fmath%2Filogbq.c;h=7f95e9c22400e62f80236e723f3bd29c3e37c415;hb=4d8cd3a26294ce35abb17668eac2b6c38dd23bd0;hp=47986f5b3110d77fc8a598bd4e625c18352d7e19;hpb=c944d49b3bd3667c65c299afd3b1d756084203f4;p=platform%2Fupstream%2Fgcc48.git diff --git a/libquadmath/math/ilogbq.c b/libquadmath/math/ilogbq.c index 47986f5..7f95e9c 100644 --- a/libquadmath/math/ilogbq.c +++ b/libquadmath/math/ilogbq.c @@ -1,4 +1,4 @@ -/* s_ilogbl.c -- long double version of s_ilogb.c. +/* ilogbq.c -- __float128 version of s_ilogb.c. * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. */ @@ -17,7 +17,7 @@ static char rcsid[] = "$NetBSD: $"; #endif -/* ilogbl(long double x) +/* ilogbl(__float128 x) * return the binary exponent of non-zero x * ilogbl(0) = FP_ILOGB0 * ilogbl(NaN) = FP_ILOGBNAN (no signal is raised) @@ -26,6 +26,7 @@ static char rcsid[] = "$NetBSD: $"; #include #include +#include #include "quadmath-imp.h" #ifndef FP_ILOGB0 @@ -45,7 +46,13 @@ ilogbq (__float128 x) hx &= 0x7fffffffffffffffLL; if(hx <= 0x0001000000000000LL) { if((hx|lx)==0) + { + errno = EDOM; +#ifdef USE_FENV_H + feraiseexcept (FE_INVALID); +#endif return FP_ILOGB0; /* ilogbl(0) = FP_ILOGB0 */ + } else /* subnormal x */ if(hx==0) { for (ix = -16431; lx>0; lx<<=1) ix -=1; @@ -58,7 +65,18 @@ ilogbq (__float128 x) else if (FP_ILOGBNAN != INT_MAX) { /* ISO C99 requires ilogbl(+-Inf) == INT_MAX. */ if (((hx^0x7fff000000000000LL)|lx) == 0) + { + errno = EDOM; +#ifdef USE_FENV_H + feraiseexcept (FE_INVALID); +#endif return INT_MAX; + } } + + errno = EDOM; +#ifdef USE_FENV_H + feraiseexcept (FE_INVALID); +#endif return FP_ILOGBNAN; }