[vmkit-commits] [vmkit] r180299 - Add memcpy for Address Objects.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 09:52:10 PDT 2013


Author: peter.senna
Date: Thu Apr 25 11:50:14 2013
New Revision: 180299

URL: http://llvm.org/viewvc/llvm-project?rev=180299&view=rev
Log:
Add memcpy for Address Objects.
(cherry picked from commit 5684342534953cb65bc5bb03df0d3d7ee2c82497)

Modified:
    vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java
    vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp

Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java?rev=180299&r1=180298&r2=180299&view=diff
==============================================================================
--- vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java (original)
+++ vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Thu Apr 25 11:50:14 2013
@@ -118,16 +118,17 @@ public final class Bindings {
   }
 
   @Inline
-  private static Address copy(ObjectReference from,
+  private static ObjectReference copy(ObjectReference from,
                               ObjectReference virtualTable,
                               int size,
                               int allocator) {
+	int wholeSize = size + hiddenHeaderSize();
     Selected.Collector plan = Selected.Collector.get();
-    allocator = plan.copyCheckAllocator(from, size, 0, allocator);
-    Address to = plan.allocCopy(from, size, 0, 0, allocator);
-    memcpy(to.toObjectReference(), from, size);
+    allocator = plan.copyCheckAllocator(from, wholeSize, 0, allocator);
+    Address to = plan.allocCopy(from, wholeSize, 0, 0, allocator);
+    memcpy(to, from.toAddress(), wholeSize);
     plan.postCopy(to.toObjectReference(), virtualTable, size, allocator);
-    return to;
+    return to.toObjectReference();
   }
 
   @Inline
@@ -138,8 +139,13 @@ public final class Bindings {
   
   @Inline
   private static native void memcpy(
+      Address to, Address from, int size);
+
+  @Inline
+  private static native void memcpy(
       ObjectReference to, ObjectReference from, int size);
 
+  
   @Inline
   private static void arrayWriteBarrier(ObjectReference ref, Address slot, ObjectReference value) {
     if (Selected.Constraints.get().needsObjectReferenceWriteBarrier()) {

Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180299&r1=180298&r2=180299&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 11:50:14 2013
@@ -85,6 +85,15 @@ extern "C" void Java_org_j3_bindings_Bin
   memcpy(res, src, size);
 }
 
+extern "C" void Java_org_j3_bindings_Bindings_memcpy__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_Address_2I(
+    void* res, void* src, int size) ALWAYS_INLINE;
+
+extern "C" void Java_org_j3_bindings_Bindings_memcpy__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_Address_2I(
+    void* res, void* src, int size) {
+  memcpy(res, src, size);
+}
+
+
 extern "C" word_t JnJVM_org_j3_bindings_Bindings_copy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(
     gc* obj, VirtualTable* VT, int size, int allocator);
 





More information about the vmkit-commits mailing list