[vmkit-commits] [vmkit] r180352 - Undo pre/post alloc split. Merge again into gcmalloc call for best performance.

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


Author: peter.senna
Date: Thu Apr 25 12:00:36 2013
New Revision: 180352

URL: http://llvm.org/viewvc/llvm-project?rev=180352&view=rev
Log:
Undo pre/post alloc split. Merge again into gcmalloc call for best performance.
(cherry picked from commit c914d4dc0e85632e1be4183efb28562e0e4d0c8f)

Modified:
    vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java
    vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
    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=180352&r1=180351&r2=180352&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 12:00:36 2013
@@ -38,6 +38,16 @@ import org.vmutil.options.StringOption;
 
 
 public final class Bindings {
+	  @Inline
+	  private static Address gcmalloc(int size, ObjectReference virtualTable) {
+	    Selected.Mutator mutator = Selected.Mutator.get();
+	    int allocator = mutator.checkAllocator(size, 0, 0);
+	    Address res = mutator.alloc(size, 0, 0, allocator, 0);
+	    setType(res.toObjectReference(), virtualTable);
+	    mutator.postAlloc(res.toObjectReference(), virtualTable, size, allocator);
+	    return res;
+	  }
+	
 	@Inline
 	private static Address prealloc(int size) {
 		Selected.Mutator mutator = Selected.Mutator.get();
@@ -138,6 +148,9 @@ public final class Bindings {
 
   @Inline
   private static native int hiddenHeaderSize();
+
+  @Inline
+  private static native void setType(ObjectReference obj, ObjectReference type);
   
   @Inline
   private static native void memcpy(

Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180352&r1=180351&r2=180352&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 12:00:36 2013
@@ -60,6 +60,9 @@ extern "C" void* JnJVM_org_j3_bindings_B
 extern "C" void* JnJVM_org_j3_bindings_Bindings_postalloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I(
 		void* object, void* type, int sz) ALWAYS_INLINE;
 
+extern "C" void* JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(
+    int sz, void* VT) ALWAYS_INLINE;
+
 extern "C" void* prealloc(uint32_t size) {
 	gc* res = 0;
   gcHeader* head = 0;
@@ -75,6 +78,10 @@ extern "C" void postalloc(gc* obj, void*
 	JnJVM_org_j3_bindings_Bindings_postalloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I(obj, type, size);
 }
 
+/**************************************
+ * Sample of code using pre/post alloc. It is slower but you can have
+ * a better control of objects allocation.
+ *
 extern "C" void* gcmalloc(uint32_t sz, void* type) {
   gc* res = 0;
   llvm_gcroot(res, 0);
@@ -83,6 +90,15 @@ extern "C" void* gcmalloc(uint32_t sz, v
 	postalloc(res, type, sz);
 	return res;
 }
+*/
+
+extern "C" void* gcmalloc(uint32_t sz, void* type) {
+  gc* res = 0;
+  llvm_gcroot(res, 0);
+	sz += gcHeader::hiddenHeaderSize();
+	res = ((gcHeader*)JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(sz, type))->toReference();
+	return res;
+}
 
 extern "C" void* gcmallocUnresolved(uint32_t sz, void* type) {
   gc* res = 0;

Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180352&r1=180351&r2=180352&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 12:00:36 2013
@@ -62,6 +62,14 @@ Java_org_j3_mmtk_ObjectModel_attemptAvai
   return (val == oldValue);
 }
 
+extern "C" void Java_org_j3_bindings_Bindings_setType__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2(
+                    gc* obj, void* type) ALWAYS_INLINE;
+
+extern "C" void Java_org_j3_bindings_Bindings_setType__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2(
+                    gc* obj, void* type) {
+	vmkit::Thread::get()->MyVM->setType(obj, type);
+}
+
 extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__() ALWAYS_INLINE;
 
 extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__() {





More information about the vmkit-commits mailing list