Re: [Sablevm-developer] powerpc patch
Brought to you by:
egagnon
From: David P. B. <db...@CS...> - 2002-12-18 19:59:12
|
Hello, Here it is as an unified diff. David On Wed, Dec 18, 2002 at 09:16:57AM -0500, Etienne M. Gagnon wrote: > David Paul BELANGER wrote: > >Etienne, > > > >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. >=20 > The preferred patch format is "diff -u" (unified diffs). >=20 > Could you resend the patch in this format? >=20 > Thanks a lot for your work! >=20 > 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. > > > > > >David > > > > > >--- > > > >David B=E9langer > >Graduate Student > >School of Computer Science > >McGill University > >Office: MC226 > > > >Web page: http://www.cs.mcgill.ca/~dbelan2/ > >Public key: http://www.cs.mcgill.ca/~dbelan2/public_key.txt > > > > > > > >----------------------------------------------------------------------= -- > > > >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:=20 > >/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=20 > >1.1.1.1 > >--- sablevm-1.0.5/src/libsablevm/native.c 14 Dec 2002 02:40:34 -0000=20 > >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:=20 > >/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=20 > >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__= ))=20 > >&& defined (__GNUC__)) > > =20 > > /* > > --------------------------------------------------------------------= -- > >--- 5,11 ---- > > * modification of SableVM. * > > * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ > > =20 > >! #if ((defined (__ia64__) || defined (__alpha__) || defined (__i386__= ) ||=20 > >defined (__powerpc__)) && defined (__GNUC__)) > > =20 > > /* > > --------------------------------------------------------------------= -- > >*************** > >*** 109,114 **** > >--- 109,144 ---- > > result =3D __sync_bool_compare_and_swap (pword, old_value, new_val= ue); > > =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 l= oads > >+ 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:=20 > >/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=20 > >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__= ))=20 > >&& defined (__GNUC__)) > > =20 > > /* "inline" is now an official keyword since the latest C standard=20 > > (1999). > > So, it is a reasonable assuption to expect a target compiler to > >--- 48,54 ---- > > =20 > > */ > > =20 > >! #if ((defined (__ia64__) || defined (__alpha__) || defined (__i386__= ) ||=20 > >defined (__powerpc__)) && defined (__GNUC__)) > > =20 > > /* "inline" is now an official keyword since the latest C standard=20 > > (1999). > > 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=20 > > 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=20 > >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:=20 > >/home/david/cvsroot/sablevm_ppc/sablevm-1.0.5/src/libsablevm/include/j= ni_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=20 > >Dec 2002 01:52:11 -0000 1.1.1.1 > >--- sablevm-1.0.5/src/libsablevm/include/jni_system_specific.h 13=20 > >Dec 2002 19:58:44 -0000 1.2 > >*************** > >*** 15,21 **** > > =20 > > /* alpha and i386 are identical here */ > > =20 > >! #if ((defined (__ia64__) || defined (__alpha__) || defined (__i386__= ))=20 > >&& defined (__GNUC__)) > > =20 > > #define JNICALL > > #define JNIEXPORT > >--- 15,21 ---- > > =20 > > /* alpha and i386 are identical here */ > > =20 > >! #if ((defined (__ia64__) || defined (__alpha__) || defined (__i386__= ) ||=20 > >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:=20 > >/home/david/cvsroot/sablevm_ppc/sablevm-native-library-1.0.5/src/inclu= de/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=20 > >Dec 2002 01:52:11 -0000 1.1.1.1 > >--- sablevm-native-library-1.0.5/src/include/jni_system_specific.h 13=20 > >Dec 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 = double > >--- 8,14 ---- > > =20 > > /* system specific primitive types */ > > =20 > >! #if ((defined (__i386__) || defined (__powerpc__)) && defined (__GNU= C__)) > > =20 > > /* legend: > > u =3D unsigned intger, s =3D signed integer, f =3D float, d =3D = double >=20 > --=20 > Etienne M. Gagnon http://www.info.uqam.ca/~egagnon/ > SableVM: http://www.sablevm.org/ > SableCC: http://www.sablecc.org/ --=20 --- David B=E9langer Graduate Student School of Computer Science McGill University Office: MC226 Web page: http://www.cs.mcgill.ca/~dbelan2/ Public key: http://www.cs.mcgill.ca/~dbelan2/public_key.txt |