diff options
author | Richard Henderson <rth@twiddle.net> | 2014-07-03 10:37:59 -0700 |
---|---|---|
committer | Richard Henderson <rth@twiddle.net> | 2014-07-03 10:37:59 -0700 |
commit | 69862e2511a41d64ff8ce942721589fb12bade15 (patch) | |
tree | 73a2d48f9a0a8af2dfa668f9132c5d528d5a8256 /sysdeps/alpha | |
parent | d5e16ade14822f1a125b6d568b1e3e1326e8868d (diff) | |
download | glibc-69862e2511a41d64ff8ce942721589fb12bade15.zip glibc-69862e2511a41d64ff8ce942721589fb12bade15.tar.gz glibc-69862e2511a41d64ff8ce942721589fb12bade15.tar.bz2 |
alpha: Remove nearbyint and nearbyintf implementations
The original implementation was written for EV5, which does not
record inexact in the status register for /SU (but no /I) insns.
But EV6 does record the inexact status; the lack of /I simply
means that the exception is suppressed.
Adding feholdexcept becomes the bulk of the overhead, so we might
as well use the default implementation.
Diffstat (limited to 'sysdeps/alpha')
-rw-r--r-- | sysdeps/alpha/fpu/s_nearbyint.c | 27 | ||||
-rw-r--r-- | sysdeps/alpha/fpu/s_nearbyintf.c | 46 |
2 files changed, 1 insertions, 72 deletions
diff --git a/sysdeps/alpha/fpu/s_nearbyint.c b/sysdeps/alpha/fpu/s_nearbyint.c index ed6c997..dc13910 100644 --- a/sysdeps/alpha/fpu/s_nearbyint.c +++ b/sysdeps/alpha/fpu/s_nearbyint.c @@ -16,33 +16,8 @@ License along with the GNU C Library. If not, see <http://www.gnu.org/licenses/>. */ -#include <math.h> -#include <math_ldbl_opt.h> +#include <sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c> - -double -__nearbyint (double x) -{ - if (isless (fabs (x), 9007199254740992.0)) /* 1 << DBL_MANT_DIG */ - { - double tmp1, new_x; - __asm ("cvttq/svd %2,%1\n\t" - "cvtqt/d %1,%0\n\t" - : "=f"(new_x), "=&f"(tmp1) - : "f"(x)); - - /* nearbyint(-0.1) == -0, and in general we'll always have the same - sign as our input. */ - x = copysign(new_x, x); - } - return x; -} - -weak_alias (__nearbyint, nearbyint) -#ifdef NO_LONG_DOUBLE -strong_alias (__nearbyint, __nearbyintl) -weak_alias (__nearbyint, nearbyintl) -#endif #if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) compat_symbol (libm, __nearbyint, nearbyintl, GLIBC_2_1); #endif diff --git a/sysdeps/alpha/fpu/s_nearbyintf.c b/sysdeps/alpha/fpu/s_nearbyintf.c deleted file mode 100644 index e769330..0000000 --- a/sysdeps/alpha/fpu/s_nearbyintf.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2007-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - 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, see - <http://www.gnu.org/licenses/>. */ - -#include <math.h> - -float -__nearbyintf (float x) -{ - if (isless (fabsf (x), 16777216.0f)) /* 1 << FLT_MANT_DIG */ - { - /* Note that Alpha S_Floating is stored in registers in a - restricted T_Floating format, so we don't even need to - convert back to S_Floating in the end. The initial - conversion to T_Floating is needed to handle denormals. */ - - float tmp1, tmp2, new_x; - - __asm ("cvtst/s %3,%2\n\t" - "cvttq/svd %2,%1\n\t" - "cvtqt/d %1,%0\n\t" - : "=f"(new_x), "=&f"(tmp1), "=&f"(tmp2) - : "f"(x)); - - /* nearbyintf(-0.1) == -0, and in general we'll always have the same - sign as our input. */ - x = copysignf(new_x, x); - } - return x; -} - -weak_alias (__nearbyintf, nearbyintf) |