[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