[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