Hi!
I really think we should include that patch and revert my old one. I've
tested it and it works. Ok to commit?
- twisti
2006-10-12 Christian Thalinger <[EMAIL PROTECTED]>
Fixes PR22800
* native/fdlibm/mprec.h (Storeinc): Define correctly for LE
architectures (like Arm).
* native/jni/java-lang/java_lang_VMDouble.c (doubleToLongBits):
Reverted SWAP_DOUBLE patch.
(doubleToRawLongBits): Likewise.
(longBitsToDouble): Likewise.
Index: native/fdlibm/mprec.h
===================================================================
RCS file: /cvsroot/classpath/classpath/native/fdlibm/mprec.h,v
retrieving revision 1.9
diff -u -3 -p -r1.9 mprec.h
--- native/fdlibm/mprec.h 9 Jun 2006 16:16:35 -0000 1.9
+++ native/fdlibm/mprec.h 12 Sep 2006 14:49:01 -0000
@@ -100,7 +100,7 @@ union double_union
* An alternative that might be better on some machines is
* #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
*/
-#if defined(IEEE_8087) + defined(VAX)
+#if defined(__IEEE_BYTES_LITTLE_ENDIAN) + defined(IEEE_8087) + defined(VAX)
#define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \
((unsigned short *)a)[0] = (unsigned short)c, a++)
#else
Index: native/jni/java-lang/java_lang_VMDouble.c
===================================================================
RCS file:
/cvsroot/classpath/classpath/native/jni/java-lang/java_lang_VMDouble.c,v
retrieving revision 1.13
diff -u -3 -p -r1.13 java_lang_VMDouble.c
--- native/jni/java-lang/java_lang_VMDouble.c 26 Jan 2006 21:09:53 -0000
1.13
+++ native/jni/java-lang/java_lang_VMDouble.c 12 Sep 2006 14:49:01 -0000
@@ -121,17 +121,8 @@ Java_java_lang_VMDouble_doubleToLongBits
{
jvalue val;
jlong e, f;
- val.d = doubleValue;
-
-#if defined(__IEEE_BYTES_LITTLE_ENDIAN)
- /* On little endian ARM processors when using FPA, word order of
- doubles is still big endian. So take that into account here. When
- using VFP, word order of doubles follows byte order. */
-
-#define SWAP_DOUBLE(a) (((a) << 32) | (((a) >> 32) & 0x00000000ffffffff))
- val.j = SWAP_DOUBLE(val.j);
-#endif
+ val.d = doubleValue;
e = val.j & 0x7ff0000000000000LL;
f = val.j & 0x000fffffffffffffLL;
@@ -153,11 +144,8 @@ Java_java_lang_VMDouble_doubleToRawLongB
jclass cls __attribute__ ((__unused__)), jdouble doubleValue)
{
jvalue val;
- val.d = doubleValue;
-#if defined(__IEEE_BYTES_LITTLE_ENDIAN)
- val.j = SWAP_DOUBLE(val.j);
-#endif
+ val.d = doubleValue;
return val.j;
}
@@ -173,11 +161,8 @@ Java_java_lang_VMDouble_longBitsToDouble
jclass cls __attribute__ ((__unused__)), jlong longValue)
{
jvalue val;
- val.j = longValue;
-#if defined(__IEEE_BYTES_LITTLE_ENDIAN)
- val.j = SWAP_DOUBLE(val.j);
-#endif
+ val.j = longValue;
return val.d;
}