[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