Re: [Sablevm-developer] powerpc patch
Brought to you by:
egagnon
From: Etienne M. G. <eti...@uq...> - 2002-12-18 14:22:57
|
David Paul BELANGER wrote: > Etienne, >=20 > I am sending the powerpc patch I have. The patch is against release > 1.0.5. Let me know the correct/prefered patch format, I am not=20 > familiar with diff/patch. The preferred patch format is "diff -u" (unified diffs). Could you resend the patch in this format? Thanks a lot for your work! Etienne >=20 > It was not heavily tested yet. I'm not sure if the libffi bug work > around works 100%. Other parts should be correct. >=20 >=20 > David >=20 >=20 > --- >=20 > David B=E9langer > Graduate Student > School of Computer Science > McGill University > Office: MC226 >=20 > Web page: http://www.cs.mcgill.ca/~dbelan2/ > Public key: http://www.cs.mcgill.ca/~dbelan2/public_key.txt >=20 >=20 >=20 > -----------------------------------------------------------------------= - >=20 > Index: sablevm-1.0.5/src/libsablevm/native.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > RCS file: /home/david/cvsroot/sablevm_ppc/sablevm-1.0.5/src/libsablevm/= native.c,v > retrieving revision 1.1.1.1 > retrieving revision 1.3 > diff -c -r1.1.1.1 -r1.3 > *** sablevm-1.0.5/src/libsablevm/native.c 13 Dec 2002 01:52:11 -0000 1.= 1.1.1 > --- sablevm-1.0.5/src/libsablevm/native.c 14 Dec 2002 02:40:34 -0000 1.= 3 > *************** > *** 325,331 **** > --- 325,335 ---- > case 'B': > { > method->data.native_method->arg_types[i] =3D SVM_TYPE_BYTE; > + #ifdef LIBFFIBUG > + method->data.native_method->args[i] =3D &ffi_type_uint; > + #else > method->data.native_method->args[i] =3D &ffi_type_sint8; > + #endif > i++; > } > break; > *************** > *** 333,339 **** > --- 337,347 ---- > case 'C': > { > method->data.native_method->arg_types[i] =3D SVM_TYPE_CHAR; > + #ifdef LIBFFIBUG > + method->data.native_method->args[i] =3D &ffi_type_uint; > + #else > method->data.native_method->args[i] =3D &ffi_type_uint16; > + #endif > i++; > } > break; > *************** > *** 357,363 **** > --- 365,375 ---- > case 'S': > { > method->data.native_method->arg_types[i] =3D SVM_TYPE_SHORT; > + #ifdef LIBFFIBUG > + method->data.native_method->args[i] =3D &ffi_type_uint; > + #else > method->data.native_method->args[i] =3D &ffi_type_sint16; > + #endif > i++; > } > break; > *************** > *** 365,371 **** > --- 377,387 ---- > case 'Z': > { > method->data.native_method->arg_types[i] =3D SVM_TYPE_BOOLEAN; > + #ifdef LIBFFIBUG > + method->data.native_method->args[i] =3D &ffi_type_uint; > + #else > method->data.native_method->args[i] =3D &ffi_type_uint8; > + #endif > i++; > } > break; > *************** > *** 904,910 **** > --- 920,930 ---- > case SVM_TYPE_BOOLEAN: > { > /* don't forget about little/big endian alignment */ > + #ifdef LIBFFIBUG > + params[0].jint =3D *(((jboolean *) &result[0]) + 3); > + #else =20 > params[0].jint =3D *((jboolean *) &result[0]); > + #endif > frame->stack_size++; > } > break; > *************** > *** 912,918 **** > --- 932,942 ---- > case SVM_TYPE_BYTE: > { > /* don't forget about little/big endian alignment */ > + #ifdef LIBFFIBUG > + params[0].jint =3D *(((jbyte *) &result[0]) + 3); > + #else > params[0].jint =3D *((jbyte *) &result[0]); > + #endif > frame->stack_size++; > } > break; > *************** > *** 920,926 **** > --- 944,954 ---- > case SVM_TYPE_SHORT: > { > /* don't forget about little/big endian alignment */ > + #ifdef LIBFFIBUG > + params[0].jint =3D *(((jshort *) &result[0]) + 2); > + #else > params[0].jint =3D *((jshort *) &result[0]); > + #endif > frame->stack_size++; > } > break; > *************** > *** 928,934 **** > --- 956,966 ---- > case SVM_TYPE_CHAR: > { > /* don't forget about little/big endian alignment */ > + #ifdef LIBFFIBUG > + params[0].jint =3D *(((jchar *) &result[0]) + 2); > + #else > params[0].jint =3D *((jchar *) &result[0]); > + #endif > frame->stack_size++; > } > break; > *************** > *** 1238,1247 **** > } > break; > =20 > ! case SVM_TYPE_BOOLEAN: > { > ! /* don't forget about little/big endian alignment */ > params[0].jint =3D *((jboolean *) &result[0]); > frame->stack_size++; > } > break; > --- 1270,1284 ---- > } > break; > =20 > ! case SVM_TYPE_BOOLEAN: =20 > { > !=20 > ! #ifdef LIBFFIBUG > ! params[0].jint =3D *(((jboolean *) &result[0]) + 3); > ! #else > params[0].jint =3D *((jboolean *) &result[0]); > + #endif > +=20 > frame->stack_size++; > } > break; > *************** > *** 1249,1255 **** > --- 1286,1296 ---- > case SVM_TYPE_BYTE: > { > /* don't forget about little/big endian alignment */ > + #ifdef LIBFFIBUG > + params[0].jint =3D *(((jbyte *) &result[0]) + 3); > + #else > params[0].jint =3D *((jbyte *) &result[0]); > + #endif > frame->stack_size++; > } > break; > *************** > *** 1257,1263 **** > --- 1298,1308 ---- > case SVM_TYPE_SHORT: > { > /* don't forget about little/big endian alignment */ > + #ifdef LIBFFIBUG > + params[0].jint =3D *(((jshort *) &result[0]) + 2); > + #else > params[0].jint =3D *((jshort *) &result[0]); > + #endif > frame->stack_size++; > } > break; > *************** > *** 1265,1271 **** > --- 1310,1320 ---- > case SVM_TYPE_CHAR: > { > /* don't forget about little/big endian alignment */ > + #ifdef LIBFFIBUG > + params[0].jint =3D *(((jchar *) &result[0]) + 2); > + #else > params[0].jint =3D *((jchar *) &result[0]); > + #endif > frame->stack_size++; > } > break; > Index: sablevm-1.0.5/src/libsablevm/system.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > RCS file: /home/david/cvsroot/sablevm_ppc/sablevm-1.0.5/src/libsablevm/= system.c,v > retrieving revision 1.1.1.1 > diff -c -r1.1.1.1 system.c > *** sablevm-1.0.5/src/libsablevm/system.c 13 Dec 2002 01:52:11 -0000 1.= 1.1.1 > --- sablevm-1.0.5/src/libsablevm/system.c 18 Dec 2002 02:23:30 -0000 > *************** > *** 5,11 **** > * modification of SableVM. * > * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ > =20 > ! #if ((defined (__ia64__) || defined (__alpha__) || defined (__i386__)= ) && defined (__GNUC__)) > =20 > /* > ---------------------------------------------------------------------= - > --- 5,11 ---- > * modification of SableVM. * > * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ > =20 > ! #if ((defined (__ia64__) || defined (__alpha__) || defined (__i386__)= || defined (__powerpc__)) && defined (__GNUC__)) > =20 > /* > ---------------------------------------------------------------------= - > *************** > *** 109,114 **** > --- 109,144 ---- > result =3D __sync_bool_compare_and_swap (pword, old_value, new_valu= e); > =20 > #endif > +=20 > + #if (defined (__powerpc__)) > +=20 > + int result; > +=20 > + /* > + * Adapted from the glibc-linuxthreads, file pt-machine.h > + * > + */ > + __asm__ __volatile__ ( > + "0: lwarx %0,0,%1 ;" > + " xor. %0,%3,%0;" > + " bne 1f;" > + " stwcx. %2,0,%1;" > + " bne- 0b;" > + "1: " > + : "=3D&r"(result) > + : "r"(pword), "r"(new_value), "r"(old_value) > + : "cr0", "memory"); > + /* This version of __compare_and_swap is to be used when acquiring > + a lock, so we don't need to worry about whether other memory > + operations have completed, but we do need to be sure that any lo= ads > + after this point really occur after we have acquired the lock. = */ > + __asm__ __volatile__ ("isync" : : : "memory"); > +=20 > + /* flip the value of result */ > + result =3D !result; > +=20 > + #endif > +=20 > =20 > return result ? JNI_TRUE : JNI_FALSE; > } > Index: sablevm-1.0.5/src/libsablevm/system.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > RCS file: /home/david/cvsroot/sablevm_ppc/sablevm-1.0.5/src/libsablevm/= system.h,v > retrieving revision 1.1.1.1 > diff -c -r1.1.1.1 system.h > *** sablevm-1.0.5/src/libsablevm/system.h 13 Dec 2002 01:52:11 -0000 1.= 1.1.1 > --- sablevm-1.0.5/src/libsablevm/system.h 18 Dec 2002 02:30:27 -0000 > *************** > *** 48,54 **** > =20 > */ > =20 > ! #if ((defined (__ia64__) || defined (__alpha__) || defined (__i386__)= ) && defined (__GNUC__)) > =20 > /* "inline" is now an official keyword since the latest C standard (1= 999). > So, it is a reasonable assuption to expect a target compiler to > --- 48,54 ---- > =20 > */ > =20 > ! #if ((defined (__ia64__) || defined (__alpha__) || defined (__i386__)= || defined (__powerpc__)) && defined (__GNUC__)) > =20 > /* "inline" is now an official keyword since the latest C standard (1= 999). > So, it is a reasonable assuption to expect a target compiler to > *************** > *** 100,107 **** > --- 100,120 ---- > #define SVM_ALIGNMENT_POWER 3 /* 2 ^^ SVM_ALIGNMENT_POWER =3D=3D SVM_= ALIGNMENT */ > #define SVM_PAGE_SIZE 16384 > =20 > + #elif defined (__powerpc__) > +=20 > + typedef _svmt_u32 _svmt_word; > +=20 > + #define SVM_WORD_SIZE 4 /* size in bytes */ > + #define SVM_WORD_BIT_COUNT 32 /* size in bits */ > +=20 > + /* see comments at the head of this file */ > + #define SVM_ALIGNMENT 8 > + #define SVM_ALIGNMENT_POWER 3 /* 2 ^^ SVM_ALIGNMENT_POWER =3D=3D SVM_= ALIGNMENT */ > + #define SVM_PAGE_SIZE 4096 > +=20 > #endif > =20 > +=20 > /* FFI specific types */ > #define ffi_type_float32 ffi_type_float > #define ffi_type_float64 ffi_type_double > *************** > *** 163,165 **** > --- 176,179 ---- > #endif > =20 > #endif /* not SVM_SYSTEM_H */ > +=20 > Index: sablevm-1.0.5/src/libsablevm/include/jni_system_specific.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > RCS file: /home/david/cvsroot/sablevm_ppc/sablevm-1.0.5/src/libsablevm/= include/jni_system_specific.h,v > retrieving revision 1.1.1.1 > retrieving revision 1.2 > diff -c -r1.1.1.1 -r1.2 > *** sablevm-1.0.5/src/libsablevm/include/jni_system_specific.h 13 Dec 2= 002 01:52:11 -0000 1.1.1.1 > --- sablevm-1.0.5/src/libsablevm/include/jni_system_specific.h 13 Dec 2= 002 19:58:44 -0000 1.2 > *************** > *** 15,21 **** > =20 > /* alpha and i386 are identical here */ > =20 > ! #if ((defined (__ia64__) || defined (__alpha__) || defined (__i386__)= ) && defined (__GNUC__)) > =20 > #define JNICALL > #define JNIEXPORT > --- 15,21 ---- > =20 > /* alpha and i386 are identical here */ > =20 > ! #if ((defined (__ia64__) || defined (__alpha__) || defined (__i386__)= || defined (__powerpc__)) && defined (__GNUC__)) > =20 > #define JNICALL > #define JNIEXPORT > Index: sablevm-native-library-1.0.5/src/include/jni_system_specific.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > RCS file: /home/david/cvsroot/sablevm_ppc/sablevm-native-library-1.0.5/= src/include/jni_system_specific.h,v > retrieving revision 1.1.1.1 > retrieving revision 1.2 > diff -c -r1.1.1.1 -r1.2 > *** sablevm-native-library-1.0.5/src/include/jni_system_specific.h 13 D= ec 2002 01:52:11 -0000 1.1.1.1 > --- sablevm-native-library-1.0.5/src/include/jni_system_specific.h 13 D= ec 2002 19:59:23 -0000 1.2 > *************** > *** 8,14 **** > =20 > /* system specific primitive types */ > =20 > ! #if (defined (__i386__) && defined (__GNUC__)) > =20 > /* legend: > u =3D unsigned intger, s =3D signed integer, f =3D float, d =3D d= ouble > --- 8,14 ---- > =20 > /* system specific primitive types */ > =20 > ! #if ((defined (__i386__) || defined (__powerpc__)) && defined (__GNUC= __)) > =20 > /* legend: > u =3D unsigned intger, s =3D signed integer, f =3D float, d =3D d= ouble --=20 Etienne M. Gagnon http://www.info.uqam.ca/~egagnon/ SableVM: http://www.sablevm.org/ SableCC: http://www.sablecc.org/ |