diff options
Diffstat (limited to 'libquadmath/math/llrintq.c')
-rw-r--r-- | libquadmath/math/llrintq.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/libquadmath/math/llrintq.c b/libquadmath/math/llrintq.c index a6a0ae64bd3..5cc0a4461c3 100644 --- a/libquadmath/math/llrintq.c +++ b/libquadmath/math/llrintq.c @@ -1,6 +1,6 @@ /* Round argument to nearest integral value according to current rounding direction. - Copyright (C) 1997-2017 Free Software Foundation, Inc. + Copyright (C) 1997-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997 and Jakub Jelinek <jj@ultra.linux.cz>, 1999. @@ -16,9 +16,8 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ #include "quadmath-imp.h" @@ -53,9 +52,7 @@ llrintq (__float128 x) /* In the event of overflow we must raise the "invalid" exception, but not "inexact". */ t = nearbyintq (x); -#ifdef USE_FENV_H feraiseexcept (t == LLONG_MAX ? FE_INEXACT : FE_INVALID); -#endif } else #endif @@ -82,21 +79,21 @@ llrintq (__float128 x) unspecified. */ #if defined FE_INVALID || defined FE_INEXACT if (x < (__float128) LLONG_MIN - && x > (__float128) LLONG_MIN - 1.0Q) + && x > (__float128) LLONG_MIN - 1) { /* If truncation produces LLONG_MIN, the cast will not raise the exception, but may raise "inexact". */ t = nearbyintq (x); -#ifdef USE_FENV_H feraiseexcept (t == LLONG_MIN ? FE_INEXACT : FE_INVALID); -#endif return LLONG_MIN; } + else if (FIX_FLT128_LLONG_CONVERT_OVERFLOW && x != (__float128) LLONG_MIN) + { + feraiseexcept (FE_INVALID); + return sx == 0 ? LLONG_MAX : LLONG_MIN; + } #endif - - /* The number is too large. It is left implementation defined - what happens. */ return (long long int) x; } |