PatchSet 7758 
Date: 2008/02/16 17:11:39
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
fixed check if words need to be switched on arm

2008-02-16  Dalibor Topic  <[EMAIL PROTECTED]>

* kaffe/kaffevm/constants.c (readConstantPool): Use
check_if_need_to_switch_words_in_jdouble instead of checking
if DOUBLE_ORDER_OPPOSITE is defined.
(check_if_need_to_switch_words_in_jdouble): New static helper function.

* config/config-hacks.h (DOUBLE_ORDER_OPPOSITE): Removed.

Members: 
        ChangeLog:1.5258->1.5259 
        config/config-hacks.h:1.18->1.19 
        kaffe/kaffevm/constants.c:1.21->1.22 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.5258 kaffe/ChangeLog:1.5259
--- kaffe/ChangeLog:1.5258      Sat Feb 16 00:49:40 2008
+++ kaffe/ChangeLog     Sat Feb 16 17:11:39 2008
@@ -1,5 +1,14 @@
 2008-02-16  Dalibor Topic  <[EMAIL PROTECTED]>
 
+       * kaffe/kaffevm/constants.c (readConstantPool): Use 
+       check_if_need_to_switch_words_in_jdouble instead of checking 
+       if DOUBLE_ORDER_OPPOSITE is defined.
+       (check_if_need_to_switch_words_in_jdouble): New static helper function.
+
+       * config/config-hacks.h (DOUBLE_ORDER_OPPOSITE): Removed.
+
+2008-02-16  Dalibor Topic  <[EMAIL PROTECTED]>
+
        * THIRDPARTY: Added license information for files imported 
        from GNU Classpath and GCC.
 
Index: kaffe/config/config-hacks.h
diff -u kaffe/config/config-hacks.h:1.18 kaffe/config/config-hacks.h:1.19
--- kaffe/config/config-hacks.h:1.18    Tue Jun 21 16:41:36 2005
+++ kaffe/config/config-hacks.h Sat Feb 16 17:11:41 2008
@@ -65,18 +65,6 @@
 #define        HAVE_UNALIGNEDACCESS
 #endif
 
-/* On arm, word order of doubles is always big endian when
- * using FPA. When using VFP, word order of doubles follows
- * the word order of the memory system.
- *
- * Therefore, the word order of doubles is opposite to the
- * word order of jlongs when using a little endian arm
- * unless VFP is used.
- */
-#if defined(__ARMEL__) && !defined(__VFP_FP__)
-#define DOUBLE_ORDER_OPPOSITE
-#endif
-
 /*
  * GCC before 3.0 does not support explicit branch optimization.
  */
Index: kaffe/kaffe/kaffevm/constants.c
diff -u kaffe/kaffe/kaffevm/constants.c:1.21 
kaffe/kaffe/kaffevm/constants.c:1.22
--- kaffe/kaffe/kaffevm/constants.c:1.21        Sat Apr 22 12:40:03 2006
+++ kaffe/kaffe/kaffevm/constants.c     Sat Feb 16 17:11:41 2008
@@ -28,6 +28,21 @@
 /*
  * XXX move into readClass.c
  */
+/**
+ * Check if the words making up a jdouble need to be 
+ * switched around. Necessary for some ARM systems.
+ */
+static
+jboolean check_if_need_to_switch_words_in_jdouble(void) {
+  jvalue val; 
+
+  /* -0.0 as an IEEE754 double is 0x80000000000000LL, i.e. < 0LL.
+   * If the words in the double are switched around, then the 
+   * bit pattern will be 0x0000000080000000LL, i.e. > 0LL. 
+   */
+  val.d = -0.0;
+  return val.j > 0;
+}
 
 /*
  * Read in constant pool from opened file.
@@ -168,23 +183,23 @@
                        readu4(&d4b, fp);
 
 #if SIZEOF_VOID_P == 8
-#if defined(DOUBLE_ORDER_OPPOSITE)
-                       pool[i] = WORDS_TO_LONG(d4b, d4);
-#else
-                       pool[i] = WORDS_TO_LONG(d4, d4b);
-#endif /* DOUBLE_ORDER_OPPOSITE */
+                       if(check_if_need_toswitch_words_in_jdouble())
+                         pool[i] = WORDS_TO_LONG(d4b, d4);
+                       else
+                         pool[i] = WORDS_TO_LONG(d4, d4b);
                        i++;
                        pool[i] = 0;
 #else
-#if defined(DOUBLE_ORDER_OPPOSITE)
-                       pool[i] = d4b;
-                       i++;
-                       pool[i] = d4;
-#else
-                       pool[i] = d4;
-                       i++;
-                       pool[i] = d4b;
-#endif /* DOUBLE_ORDER_OPPOSITE */
+                       if (check_if_need_to_switch_words_in_jdouble()) {
+                         pool[i] = d4b;
+                         i++;
+                         pool[i] = d4;
+                       }
+                       else {
+                         pool[i] = d4;
+                         i++;
+                         pool[i] = d4b;
+                       }
 #endif /* SIZEOF_VOID_P == 8 */
                        tags[i] = CONSTANT_Unknown;
                        break;

_______________________________________________
kaffe mailing list
kaffe@kaffe.org
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to