[llvm-commits] CVS: llvm-java/runtime/runtime.c

Alkis Evlogimenos alkis at cs.uiuc.edu
Wed Feb 2 08:18:59 PST 2005



Changes in directory llvm-java/runtime:

runtime.c updated: 1.17 -> 1.18
---
Log message:

Implement ArrayCopy.java.


---
Diffs of the changes:  (+24 -3)

 runtime.c |   27 ++++++++++++++++++++++++---
 1 files changed, 24 insertions(+), 3 deletions(-)


Index: llvm-java/runtime/runtime.c
diff -u llvm-java/runtime/runtime.c:1.17 llvm-java/runtime/runtime.c:1.18
--- llvm-java/runtime/runtime.c:1.17	Wed Feb  2 00:08:20 2005
+++ llvm-java/runtime/runtime.c	Wed Feb  2 10:18:48 2005
@@ -17,13 +17,14 @@
 };
 
 struct llvm_java_object_typeinfo {
-  int depth;
+  jint depth;
   struct llvm_java_object_vtable** vtables;
-  int lastIface;
+  jint lastIface;
   union {
-    int interfaceFlag;
+    jint interfaceFlag;
     struct llvm_java_object_vtable** interfaces;
   };
+  jint elementSize; /* The element size - 0 for classes */
 };
 
 struct llvm_java_object_vtable {
@@ -356,3 +357,23 @@
   llvm_java_main(argc, argv);
   return 0;
 }
+
+void Java_java_lang_VMSystem_arraycopy(JNIEnv *env, jobject clazz,
+                                       jobject srcObj, jint srcStart,
+                                       jobject dstObj, jint dstStart,
+                                       jint length) {
+  struct llvm_java_bytearray* srcArray = (struct llvm_java_bytearray*) srcObj;
+  struct llvm_java_bytearray* dstArray = (struct llvm_java_bytearray*) dstObj;
+
+  jbyte* src = srcArray->data;
+  jbyte* dst = dstArray->data;
+
+  if (srcObj->vtable->typeinfo.elementSize !=
+      dstObj->vtable->typeinfo.elementSize)
+    llvm_java_throw(NULL);
+
+  src += srcStart * srcObj->vtable->typeinfo.elementSize;
+  dst += dstStart * dstObj->vtable->typeinfo.elementSize;
+
+  memcpy(dst, src, length * srcObj->vtable->typeinfo.elementSize);
+}






More information about the llvm-commits mailing list