about summary refs log tree commit diff
path: root/sysdeps/alpha/fpu/s_ceil.c
diff options
context:
space:
mode:
authorAurelien Jarno <aurelien@aurel32.net>2016-08-02 09:18:59 +0200
committerAurelien Jarno <aurelien@aurel32.net>2016-08-02 09:18:59 +0200
commit062e53c195b4a87754632c7d51254867247698b4 (patch)
tree93cf3b7c6ab4e94af89443e99d2020dda46929c8 /sysdeps/alpha/fpu/s_ceil.c
parente720d3d9fea2058adb3de2905f1a399ad3e812ff (diff)
downloadglibc-062e53c195b4a87754632c7d51254867247698b4.tar.gz
glibc-062e53c195b4a87754632c7d51254867247698b4.tar.xz
glibc-062e53c195b4a87754632c7d51254867247698b4.zip
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.
Diffstat (limited to 'sysdeps/alpha/fpu/s_ceil.c')
-rw-r--r--sysdeps/alpha/fpu/s_ceil.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/sysdeps/alpha/fpu/s_ceil.c b/sysdeps/alpha/fpu/s_ceil.c
index c1ff864d4b..e9c350af1c 100644
--- a/sysdeps/alpha/fpu/s_ceil.c
+++ b/sysdeps/alpha/fpu/s_ceil.c
@@ -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));