[vmkit-commits] [vmkit] r198571 - Full array copy implementation

Gael Thomas gael.thomas at lip6.fr
Sun Jan 5 13:30:44 PST 2014


Author: gthomas
Date: Sun Jan  5 15:30:44 2014
New Revision: 198571

URL: http://llvm.org/viewvc/llvm-project?rev=198571&view=rev
Log:
Full array copy implementation

Modified:
    vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
    vmkit/branches/mcjit/lib/j3/vm/j3jni.cc
    vmkit/branches/mcjit/lib/j3/vm/j3options.cc

Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc?rev=198571&r1=198570&r2=198571&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Sun Jan  5 15:30:44 2014
@@ -98,7 +98,8 @@ void JNICALL JVM_ArrayCopy(JNIEnv* env,
 	J3Type* srcType0 = src->vt()->type();
 	J3Type* dstType0 = dst->vt()->type();
 
-	if(!srcType0->isArrayClass() || !dstType0->isArrayClass() || !srcType0->isAssignableTo(dstType0))
+	fprintf(stderr, " array copy from %s to %s\n", srcType0->name()->cStr(), dstType0->name()->cStr());
+	if(!srcType0->isArrayClass() || !dstType0->isArrayClass())
 		J3::arrayStoreException();
 
 	//fprintf(stderr, " array copy: [%d %d %d] [%d %d %d]\n", src_pos, length, src->arrayLength(), dst_pos, length, dst->arrayLength());
@@ -110,7 +111,22 @@ void JNICALL JVM_ArrayCopy(JNIEnv* env,
 
 	uint32_t scale = srcType0->asArrayClass()->component()->logSize();
 
-	src->rawArrayCopyTo(src_pos << scale, dst, dst_pos << scale, length << scale);
+	if(srcType0->isAssignableTo(dstType0))
+		src->rawArrayCopyTo(src_pos << scale, dst, dst_pos << scale, length << scale);
+	else {
+		J3Type* srcEl = srcType0->asArrayClass()->component();
+		J3Type* dstEl = dstType0->asArrayClass()->component();
+
+		if(!srcEl->isObjectType() || !dstEl->isObjectType())
+			J3::arrayStoreException();
+
+		for(uint32_t i=0; i<length; i++) {
+			J3ObjectHandle* val = src->getObjectAt(src_pos + i);
+			if(!val->vt()->type()->isAssignableTo(dstEl))
+				J3::arrayStoreException();
+			dst->setObjectAt(dst_pos + i, val);
+		}
+	}
 
 	leaveJVM(); 
 }

Modified: vmkit/branches/mcjit/lib/j3/vm/j3jni.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3jni.cc?rev=198571&r1=198570&r2=198571&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3jni.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3jni.cc Sun Jan  5 15:30:44 2014
@@ -49,7 +49,13 @@ jclass JNICALL GetSuperclass(JNIEnv* env
 	return res;
 }
 
-jboolean JNICALL IsAssignableFrom(JNIEnv* env, jclass sub, jclass sup) { enterJVM(); leaveJVM(); NYI(); }
+jboolean JNICALL IsAssignableFrom(JNIEnv* env, jclass sub, jclass sup) { 
+	jboolean res;
+	enterJVM();
+	res = J3ObjectType::nativeClass(sub)->isAssignableTo(J3ObjectType::nativeClass(sup));
+	leaveJVM(); 
+	return res;
+}
 
 jobject JNICALL ToReflectedField(JNIEnv* env, jclass cls, jfieldID fieldID, jboolean isStatic) { enterJVM(); leaveJVM(); NYI(); }
 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3options.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3options.cc?rev=198571&r1=198570&r2=198571&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3options.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3options.cc Sun Jan  5 15:30:44 2014
@@ -21,11 +21,11 @@ J3Options::J3Options() {
 	debugLoad = 0;
 	debugResolve = 0;
 	debugIniting = 0;
-	debugTranslate = 0;
+	debugTranslate = 1;
 	debugLinking = 0;
 	debugLifeCycle = 1;
 
-	genDebugExecute = 0;//debugExecute ? 1 : 0;
+	genDebugExecute = debugExecute ? 1 : 0;
 
 	stackSize = 0x80*0x1000;
 }





More information about the vmkit-commits mailing list