[vmkit-commits] [vmkit] r143485 - in /vmkit/trunk/lib/J3/ClassLib: ArrayCopy.inc GNUClasspath/ClasspathVMSystem.inc OpenJDK/OpenJDK.inc
Will Dietz
wdietz2 at illinois.edu
Tue Nov 1 13:06:18 PDT 2011
Author: wdietz2
Date: Tue Nov 1 15:06:17 2011
New Revision: 143485
URL: http://llvm.org/viewvc/llvm-project?rev=143485&view=rev
Log:
Move ArrayCopy to new 'ArrayCopy.inc', use in both CP and OJ.
Added:
vmkit/trunk/lib/J3/ClassLib/ArrayCopy.inc
- copied, changed from r143484, vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystem.inc
Modified:
vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystem.inc
vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
Copied: vmkit/trunk/lib/J3/ClassLib/ArrayCopy.inc (from r143484, vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystem.inc)
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/ArrayCopy.inc?p2=vmkit/trunk/lib/J3/ClassLib/ArrayCopy.inc&p1=vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystem.inc&r1=143484&r2=143485&rev=143485&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystem.inc (original)
+++ vmkit/trunk/lib/J3/ClassLib/ArrayCopy.inc Tue Nov 1 15:06:17 2011
@@ -1,4 +1,4 @@
-//===-- ClasspathVMSystem.cpp - GNU classpath java/lang/VMSystem ----------===//
+//===-- ArrayCopy.inc - ArrayCopy implementation --------------------------===//
//
// The VMKit project
//
@@ -7,30 +7,9 @@
//
//===----------------------------------------------------------------------===//
-#include "types.h"
-
-#include "Classpath.h"
-#include "JavaArray.h"
-#include "JavaClass.h"
-#include "JavaObject.h"
-#include "JavaThread.h"
-#include "Jnjvm.h"
-
-using namespace j3;
-
-extern "C" {
-
-JNIEXPORT void JNICALL Java_java_lang_VMSystem_arraycopy(
-#ifdef NATIVE_JNI
-JNIEnv *env,
-jclass _cl,
-#endif
-JavaObject* src,
-jint sstart,
-JavaObject* dst,
-jint dstart,
-jint len) {
+void ArrayCopy(JavaObject* src, jint sstart, JavaObject* dst, jint dstart, jint len)
+{
JavaObject* cur = 0;
llvm_gcroot(src, 0);
llvm_gcroot(dst, 0);
@@ -45,14 +24,14 @@
th->throwException(vm->CreateNullPointerException());
UNREACHABLE();
}
-
+
if (!(JavaObject::getClass(src)->isArray() &&
JavaObject::getClass(dst)->isArray())) {
th->throwException(vm->CreateArrayStoreException(
(JavaVirtualTable*)dst->getVirtualTable()));
UNREACHABLE();
}
-
+
UserClassArray* ts = (UserClassArray*)JavaObject::getClass(src);
UserClassArray* td = (UserClassArray*)JavaObject::getClass(dst);
UserCommonClass* dstType = td->baseClass();
@@ -80,7 +59,7 @@
th->throwException(vm->CreateArrayStoreException(
(JavaVirtualTable*)dst->getVirtualTable()));
}
-
+
if (!(dstType->isPrimitive())) {
for (int i = 0; i < len; i++) {
cur = ArrayObject::getElement((ArrayObject*)src, i + sstart);
@@ -94,25 +73,10 @@
}
}
}
- } else {
+ } else {
uint32 logSize = dstType->asPrimitiveClass()->logSize;
void* ptrDst = (void*)((int64_t)JavaArray::getElements(dst) + (dstart << logSize));
void* ptrSrc = (void*)((int64_t)JavaArray::getElements(src) + (sstart << logSize));
memmove(ptrDst, ptrSrc, len << logSize);
}
-
-}
-
-JNIEXPORT jint JNICALL Java_java_lang_VMSystem_identityHashCode(
-#ifdef NATIVE_JNI
-JNIEnv *env,
-jclass clazz,
-#endif
-JavaObject* obj) {
-
- llvm_gcroot(obj, 0);
- if (obj == NULL) return 0;
- return JavaObject::hashCode(obj);
-}
-
}
Modified: vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystem.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystem.inc?rev=143485&r1=143484&r2=143485&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystem.inc (original)
+++ vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystem.inc Tue Nov 1 15:06:17 2011
@@ -9,6 +9,7 @@
#include "types.h"
+#include "ArrayCopy.h"
#include "Classpath.h"
#include "JavaArray.h"
#include "JavaClass.h"
@@ -30,77 +31,7 @@
JavaObject* dst,
jint dstart,
jint len) {
-
- JavaObject* cur = 0;
- llvm_gcroot(src, 0);
- llvm_gcroot(dst, 0);
- llvm_gcroot(cur, 0);
- assert(src->getVirtualTable());
- assert(dst->getVirtualTable());
-
- JavaThread* th = JavaThread::get();
- Jnjvm *vm = th->getJVM();
-
- if (src == NULL || dst == NULL) {
- th->throwException(vm->CreateNullPointerException());
- UNREACHABLE();
- }
-
- if (!(JavaObject::getClass(src)->isArray() &&
- JavaObject::getClass(dst)->isArray())) {
- th->throwException(vm->CreateArrayStoreException(
- (JavaVirtualTable*)dst->getVirtualTable()));
- UNREACHABLE();
- }
-
- UserClassArray* ts = (UserClassArray*)JavaObject::getClass(src);
- UserClassArray* td = (UserClassArray*)JavaObject::getClass(dst);
- UserCommonClass* dstType = td->baseClass();
- UserCommonClass* srcType = ts->baseClass();
-
- sint32 srcSize = JavaArray::getSize(src);
- sint32 dstSize = JavaArray::getSize(dst);
-
- if (len > srcSize) {
- th->throwException(vm->CreateIndexOutOfBoundsException(len));
- } else if (len > dstSize) {
- th->throwException(vm->CreateIndexOutOfBoundsException(len));
- } else if (len + sstart > srcSize) {
- th->throwException(vm->CreateIndexOutOfBoundsException(len + sstart));
- } else if (len + dstart > dstSize) {
- th->throwException(vm->CreateIndexOutOfBoundsException(len + dstart));
- } else if (dstart < 0) {
- th->throwException(vm->CreateIndexOutOfBoundsException(dstart));
- } else if (sstart < 0) {
- th->throwException(vm->CreateIndexOutOfBoundsException(sstart));
- } else if (len < 0) {
- th->throwException(vm->CreateIndexOutOfBoundsException(len));
- } else if ((dstType->isPrimitive() || srcType->isPrimitive()) &&
- srcType != dstType) {
- th->throwException(vm->CreateArrayStoreException(
- (JavaVirtualTable*)dst->getVirtualTable()));
- }
-
- if (!(dstType->isPrimitive())) {
- for (int i = 0; i < len; i++) {
- cur = ArrayObject::getElement((ArrayObject*)src, i + sstart);
- if (cur) {
- if (!(JavaObject::getClass(cur)->isAssignableFrom(dstType))) {
- th->throwException(vm->CreateArrayStoreException(
- (JavaVirtualTable*)dst->getVirtualTable()));
- break;
- } else {
- ArrayObject::setElement((ArrayObject*)dst, cur, i + dstart);
- }
- }
- }
- } else {
- uint32 logSize = dstType->asPrimitiveClass()->logSize;
- void* ptrDst = (void*)((int64_t)JavaArray::getElements(dst) + (dstart << logSize));
- void* ptrSrc = (void*)((int64_t)JavaArray::getElements(src) + (sstart << logSize));
- memmove(ptrDst, ptrSrc, len << logSize);
- }
-
+ ArrayCopy(src, sstart, dst, dstart, len);
}
JNIEXPORT jint JNICALL Java_java_lang_VMSystem_identityHashCode(
Modified: vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc?rev=143485&r1=143484&r2=143485&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc Tue Nov 1 15:06:17 2011
@@ -7,17 +7,19 @@
//===----------------------------------------------------------------------===//
#include "jvm.h"
-#include "Reader.h"
+
+#include "ArrayCopy.inc"
#include "JavaConstantPool.h"
+#include "Reader.h"
#include "SetProperties.inc"
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+#include <errno.h>
#include <fcntl.h>
#include <signal.h>
-#include <errno.h>
#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/types.h>
#define NYI() \
do{ assert(0 && "Not yet implemented!"); abort(); } while(0)
@@ -215,7 +217,22 @@
JNIEXPORT void JNICALL
JVM_ArrayCopy(JNIEnv *env, jclass ignored, jobject jsrc, jint sstart,
jobject jdst, jint dstart, jint len) {
- NYI();
+ JavaObject *src = 0;
+ JavaObject *dst = 0;
+ JavaObject* cur = 0;
+ llvm_gcroot(src, 0);
+ llvm_gcroot(dst, 0);
+ llvm_gcroot(cur, 0);
+
+ BEGIN_JNI_EXCEPTION
+
+ src = *(JavaObject**)jsrc;
+ dst = *(JavaObject**)jdst;
+
+ ArrayCopy(src, sstart, dst, dstart, len);
+
+ RETURN_VOID_FROM_JNI
+ END_JNI_EXCEPTION
}
JNIEXPORT jobject JNICALL
More information about the vmkit-commits
mailing list