diff options
author | Andrew Haley <aph@cygnus.com> | 1999-04-14 07:10:22 +0000 |
---|---|---|
committer | Andrew Haley <aph@gcc.gnu.org> | 1999-04-14 07:10:22 +0000 |
commit | 2b37afcb360a9e4bff48fd71b1a5725c90515049 (patch) | |
tree | 12fffb0f268659e2bad0fdb565a63469eab56f80 /libjava/java/lang | |
parent | 2de45c0679fc608353e9267941477769b3b18ecd (diff) | |
download | gcc-2b37afcb360a9e4bff48fd71b1a5725c90515049.zip gcc-2b37afcb360a9e4bff48fd71b1a5725c90515049.tar.gz gcc-2b37afcb360a9e4bff48fd71b1a5725c90515049.tar.bz2 |
natDouble.java (doubleToLongBits): ensure that all NaNs are always converted to the same long value.
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
Diffstat (limited to 'libjava/java/lang')
-rw-r--r-- | libjava/java/lang/natDouble.cc | 7 | ||||
-rw-r--r-- | libjava/java/lang/natFloat.cc | 6 |
2 files changed, 13 insertions, 0 deletions
diff --git a/libjava/java/lang/natDouble.cc b/libjava/java/lang/natDouble.cc index 1799088..8d8c788 100644 --- a/libjava/java/lang/natDouble.cc +++ b/libjava/java/lang/natDouble.cc @@ -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; } diff --git a/libjava/java/lang/natFloat.cc b/libjava/java/lang/natFloat.cc index e3189be..5712fd4 100644 --- a/libjava/java/lang/natFloat.cc +++ b/libjava/java/lang/natFloat.cc @@ -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; } |