summaryrefslogtreecommitdiff
path: root/sysdeps/ieee754/ldbl-96/s_roundl.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/ieee754/ldbl-96/s_roundl.c')
-rw-r--r--sysdeps/ieee754/ldbl-96/s_roundl.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/sysdeps/ieee754/ldbl-96/s_roundl.c b/sysdeps/ieee754/ldbl-96/s_roundl.c
index 4f35c4847b..c5c304cb2e 100644
--- a/sysdeps/ieee754/ldbl-96/s_roundl.c
+++ b/sysdeps/ieee754/ldbl-96/s_roundl.c
@@ -1,5 +1,5 @@
/* Round long double to integer away from zero.
- Copyright (C) 1997-2016 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.
@@ -20,16 +20,14 @@
#include <math.h>
#include <math_private.h>
-
-
-static const long double huge = 1.0e4930L;
+#include <libm-alias-ldouble.h>
long double
__roundl (long double x)
{
int32_t j0;
- u_int32_t se, i1, i0;
+ uint32_t se, i1, i0;
GET_LDOUBLE_WORDS (se, i0, i1, x);
j0 = (se & 0x7fff) - 0x3fff;
@@ -37,7 +35,6 @@ __roundl (long double x)
{
if (j0 < 0)
{
- math_force_eval (huge + x);
se &= 0x8000;
i0 = i1 = 0;
if (j0 == -1)
@@ -48,14 +45,12 @@ __roundl (long double x)
}
else
{
- u_int32_t i = 0x7fffffff >> j0;
+ uint32_t i = 0x7fffffff >> j0;
if (((i0 & i) | i1) == 0)
/* X is integral. */
return x;
- /* Raise inexact if x != 0. */
- math_force_eval (huge + x);
- u_int32_t j = i0 + (0x40000000 >> j0);
+ uint32_t j = i0 + (0x40000000 >> j0);
if (j < i0)
se += 1;
i0 = (j & ~i) | 0x80000000;
@@ -72,17 +67,15 @@ __roundl (long double x)
}
else
{
- u_int32_t i = 0xffffffff >> (j0 - 31);
+ uint32_t i = 0xffffffff >> (j0 - 31);
if ((i1 & i) == 0)
/* X is integral. */
return x;
- math_force_eval (huge + x);
- /* Raise inexact if x != 0. */
- u_int32_t j = i1 + (1 << (62 - j0));
+ uint32_t j = i1 + (1 << (62 - j0));
if (j < i1)
{
- u_int32_t k = i0 + 1;
+ uint32_t k = i0 + 1;
if (k < i0)
{
se += 1;
@@ -97,4 +90,4 @@ __roundl (long double x)
SET_LDOUBLE_WORDS (x, se, i0, i1);
return x;
}
-weak_alias (__roundl, roundl)
+libm_alias_ldouble (__round, round)