From 69862e2511a41d64ff8ce942721589fb12bade15 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 3 Jul 2014 10:37:59 -0700 Subject: [PATCH] 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. --- ChangeLog | 4 ++++ sysdeps/alpha/fpu/s_nearbyint.c | 27 +---------------------- sysdeps/alpha/fpu/s_nearbyintf.c | 46 ---------------------------------------- 3 files changed, 5 insertions(+), 72 deletions(-) delete mode 100644 sysdeps/alpha/fpu/s_nearbyintf.c diff --git a/ChangeLog b/ChangeLog index e84fbbf739..5eb0d431e6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2014-07-03 Richard Henderson + * sysdeps/alpha/fpu/s_nearbyintf.c: Remove file. + * sysdeps/alpha/fpu/s_nearbyint.c (__nearbyint): Remove; + include sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c. + * sysdeps/alpha/fpu/math_private.h (math_opt_barrier): New. (math_force_eval): New. diff --git a/sysdeps/alpha/fpu/s_nearbyint.c b/sysdeps/alpha/fpu/s_nearbyint.c index ed6c997c85..dc13910b3b 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 . */ -#include -#include +#include - -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 e7693303f4..0000000000 --- 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 - . */ - -#include - -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) -- 2.11.4.GIT