diff options
Diffstat (limited to 'libquadmath/math/nearbyintq.c')
-rw-r--r-- | libquadmath/math/nearbyintq.c | 25 |
1 files changed, 4 insertions, 21 deletions
diff --git a/libquadmath/math/nearbyintq.c b/libquadmath/math/nearbyintq.c index b250927ea2a..1e24c46da8b 100644 --- a/libquadmath/math/nearbyintq.c +++ b/libquadmath/math/nearbyintq.c @@ -1,4 +1,4 @@ -/* nearbyintq.c -- __float128 version of s_nearbyint.c. +/* s_nearbyintl.c -- long double version of s_nearbyint.c. * Conversion to IEEE quad long double by Jakub Jelinek, jj@ultra.linux.cz. */ @@ -24,12 +24,6 @@ */ #include "quadmath-imp.h" -#ifdef HAVE_FENV_H -# include <fenv.h> -# if defined HAVE_FEHOLDEXCEPT && defined HAVE_FESETENV -# define USE_FENV_H -# endif -#endif static const __float128 TWO112[2]={ @@ -37,12 +31,9 @@ TWO112[2]={ -5.19229685853482762853049632922009600E+33Q /* 0xC06F000000000000, 0 */ }; -__float128 -nearbyintq(__float128 x) +__float128 nearbyintq(__float128 x) { -#ifdef USE_FENV_H fenv_t env; -#endif int64_t i0,j0,sx; uint64_t i1 __attribute__ ((unused)); __float128 w,t; @@ -51,15 +42,11 @@ nearbyintq(__float128 x) j0 = ((i0>>48)&0x7fff)-0x3fff; if(j0<112) { if(j0<0) { -#ifdef USE_FENV_H feholdexcept (&env); -#endif - w = TWO112[sx]+x; + w = TWO112[sx] + math_opt_barrier (x); t = w-TWO112[sx]; math_force_eval (t); -#ifdef USE_FENV_H fesetenv (&env); -#endif GET_FLT128_MSW64(i0,t); SET_FLT128_MSW64(t,(i0&0x7fffffffffffffffLL)|(sx<<63)); return t; @@ -68,14 +55,10 @@ nearbyintq(__float128 x) if(j0==0x4000) return x+x; /* inf or NaN */ else return x; /* x is integral */ } -#ifdef USE_FENV_H feholdexcept (&env); -#endif - w = TWO112[sx]+x; + w = TWO112[sx] + math_opt_barrier (x); t = w-TWO112[sx]; math_force_eval (t); -#ifdef USE_FENV_H fesetenv (&env); -#endif return t; } |