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;
 }

Reply via email to