[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