Update.
authorUlrich Drepper <drepper@redhat.com>
Mon, 4 Dec 2000 04:56:36 +0000 (04:56 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 4 Dec 2000 04:56:36 +0000 (04:56 +0000)
* sysdeps/i386/fpu/s_nextafterl.c (__nextafterl): Hopefully fix
the handling of denormalized numbers.

* math/test-misc.c (main): Test for fpclassify and pseudo denormal
numbers on x86.
* sysdeps/i386/fpu/fpclassifyl.c: New file.

ChangeLog
sysdeps/i386/fpu/s_nextafterl.c

index bc30cc6..b083cef 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,11 @@
 2000-12-03  Ulrich Drepper  <drepper@redhat.com>
 
-       * math/test-misc.c (main): Test for pseudo denormal numbers on x86.
-       * sysdeps/i386/fpu/fpclassify.c: New file.
+       * sysdeps/i386/fpu/s_nextafterl.c (__nextafterl): Hopefully fix
+       the handling of denormalized numbers.
+
+       * math/test-misc.c (main): Test for fpclassify and pseudo denormal
+       numbers on x86.
+       * sysdeps/i386/fpu/fpclassifyl.c: New file.
 
        * sysdeps/i386/ldbl2mpn.c (__mpn_extract_long_double): Handle the
        pseudo denormal representation of LDBL_MIN.
index bca7181..a905858 100644 (file)
@@ -59,8 +59,17 @@ static char rcsid[] = "$NetBSD: $";
            if(ix>iy||((ix==iy) && (hx>hy||((hx==hy)&&(lx>ly))))) {
              /* x > y, x -= ulp */
                if(lx==0) {
-                   if (hx==0) esx -= 1;
-                   hx -= 1;
+                   if (hx <= 0x80000000) {
+                     if (esx == 0)
+                       hx = 0;
+                     else {
+                       esx -= 1;
+                       hx = hx - 1;
+                       if (esx > 0)
+                         hx |= 0x80000000;
+                     }
+                   } else
+                     hx -= 1;
                }
                lx -= 1;
            } else {                            /* x < y, x += ulp */
@@ -75,8 +84,17 @@ static char rcsid[] = "$NetBSD: $";
            if(esy>=0||(ix>iy||((ix==iy)&&(hx>hy||((hx==hy)&&(lx>ly)))))){
              /* x < y, x -= ulp */
                if(lx==0) {
-                   if (hx==0) esx -= 1;
-                   hx -= 1;
+                   if (hx <= 0x80000000) {
+                     if (esx == 0)
+                       hx = 0;
+                     else {
+                       esx -= 1;
+                       hx = hx - 1;
+                       if (esx > 0)
+                         hx |= 0x80000000;
+                     }
+                   } else
+                     hx -= 1;
                }
                lx -= 1;
            } else {                            /* x > y, x += ulp */