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