mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-17 13:00:43 +08:00
alpha: fix ceil on sNaN input
The alpha version of ceil wrongly return sNaN for sNaN input. Fix that by checking for NaN and by returning the input value added with itself in that case. Finally remove the code to handle inexact exception, ceil should never generate such an exception. Changelog: * sysdeps/alpha/fpu/s_ceil.c (__ceil): Add argument with itself when it is a NaN. [_IEEE_FP_INEXACT] Remove. * sysdeps/alpha/fpu/s_ceilf.c (__ceilf): Likewise.
This commit is contained in:
parent
e720d3d9fe
commit
062e53c195
@ -1,3 +1,10 @@
|
||||
2016-08-02 Aurelien Jarno <aurelien@aurel32.net>
|
||||
|
||||
* sysdeps/alpha/fpu/s_ceil.c (__ceil): Add argument with itself
|
||||
when it is a NaN.
|
||||
[_IEEE_FP_INEXACT] Remove.
|
||||
* sysdeps/alpha/fpu/s_ceilf.c (__ceilf): Likewise.
|
||||
|
||||
2016-08-01 Carlos O'Donell <carlos@redhat.com>
|
||||
|
||||
* version.h (RELEASE): Set to "development"
|
||||
|
@ -26,17 +26,16 @@
|
||||
double
|
||||
__ceil (double x)
|
||||
{
|
||||
if (isnan (x))
|
||||
return x + x;
|
||||
|
||||
if (isless (fabs (x), 9007199254740992.0)) /* 1 << DBL_MANT_DIG */
|
||||
{
|
||||
double tmp1, new_x;
|
||||
|
||||
new_x = -x;
|
||||
__asm (
|
||||
#ifdef _IEEE_FP_INEXACT
|
||||
"cvttq/svim %2,%1\n\t"
|
||||
#else
|
||||
"cvttq/svm %2,%1\n\t"
|
||||
#endif
|
||||
"cvtqt/m %1,%0\n\t"
|
||||
: "=f"(new_x), "=&f"(tmp1)
|
||||
: "f"(new_x));
|
||||
|
@ -25,6 +25,9 @@
|
||||
float
|
||||
__ceilf (float x)
|
||||
{
|
||||
if (isnanf (x))
|
||||
return x + x;
|
||||
|
||||
if (isless (fabsf (x), 16777216.0f)) /* 1 << FLT_MANT_DIG */
|
||||
{
|
||||
/* Note that Alpha S_Floating is stored in registers in a
|
||||
@ -36,11 +39,7 @@ __ceilf (float x)
|
||||
|
||||
new_x = -x;
|
||||
__asm ("cvtst/s %3,%2\n\t"
|
||||
#ifdef _IEEE_FP_INEXACT
|
||||
"cvttq/svim %2,%1\n\t"
|
||||
#else
|
||||
"cvttq/svm %2,%1\n\t"
|
||||
#endif
|
||||
"cvtqt/m %1,%0\n\t"
|
||||
: "=f"(new_x), "=&f"(tmp1), "=&f"(tmp2)
|
||||
: "f"(new_x));
|
||||
|
Loading…
Reference in New Issue
Block a user