natDouble.java (doubleToLongBits): ensure that all NaNs are always converted to the...
authorAndrew Haley <aph@cygnus.com>
Wed, 14 Apr 1999 07:10:22 +0000 (07:10 +0000)
committerAndrew Haley <aph@gcc.gnu.org>
Wed, 14 Apr 1999 07:10:22 +0000 (07:10 +0000)
1999-04-14  Andrew Haley  <aph@cygnus.com>
        * java/lang/natDouble.java (doubleToLongBits): ensure that all
        NaNs are always converted to the same long value.
        * java/lang/natFloat.java (floatToIntBits): ditto, but for float
        converted to int.

From-SVN: r26439

libjava/ChangeLog
libjava/java/lang/natDouble.cc
libjava/java/lang/natFloat.cc

index 1cd361cafe48c239037f14fe633b1e6d1333c8d3..3d5b9ad1e60c18328fefe32fced95819da7c6624 100644 (file)
@@ -1,3 +1,10 @@
+1999-04-14  Andrew Haley  <aph@cygnus.com>
+
+       * java/lang/natDouble.java (doubleToLongBits): ensure that all
+       NaNs are always converted to the same long value.  
+       * java/lang/natFloat.java (floatToIntBits): ditto, but for float
+       converted to int.
+
 1999-04-13  Tom Tromey  <tromey@cygnus.com>
 
        * java/lang/natSystem.cc (arraycopy): Don't always use jbyteArray;
index 17990884751bfa09aa660014b81040579c4814ff..8d8c7883ba4fa0af3436e5c9839c0e6d4581b7b8 100644 (file)
@@ -47,6 +47,13 @@ java::lang::Double::doubleToLongBits(jdouble value)
 {
   union u u;
   u.d = value;
+  
+  jlong e = u.l & 0x7ff0000000000000LL;
+  jlong f = u.l & 0x000fffffffffffffLL;
+
+  if (e == 0x7ff0000000000000LL && f != 0L)
+    u.l = 0x7ff8000000000000LL;
+
   return u.l;
 }
 
index e3189bebc2d58f810d1f5a541630750ef3c44d4b..5712fd4190cc7b8d2de6a51e72e9dc00f1debb95 100644 (file)
@@ -24,6 +24,12 @@ java::lang::Float::floatToIntBits(jfloat value)
 {
   union u u;
   u.d = value;
+  jint e = u.l & 0x7f800000;
+  jint f = u.l & 0x007fffff;
+
+  if (e == 0x7f800000 && f != 0)
+    u.l = 0x7fc00000;
+
   return u.l;
 }