Mercurial > hg > CbC > CbC_gcc
diff libquadmath/math/llrintq.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line diff
--- a/libquadmath/math/llrintq.c Thu Oct 25 07:37:49 2018 +0900 +++ b/libquadmath/math/llrintq.c Thu Feb 13 11:34:05 2020 +0900 @@ -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 @@ /* 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 @@ 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; }