summaryrefslogtreecommitdiff
path: root/libquadmath/math/llrintq.c
diff options
context:
space:
mode:
Diffstat (limited to 'libquadmath/math/llrintq.c')
-rw-r--r--libquadmath/math/llrintq.c21
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;
}