[vmkit-commits] [vmkit] r180283 - Added hidden header and integrated it to mmtk objectmodel. Hidden header is not used for the moment
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 09:49:33 PDT 2013
Author: peter.senna
Date: Thu Apr 25 11:47:09 2013
New Revision: 180283
URL: http://llvm.org/viewvc/llvm-project?rev=180283&view=rev
Log:
Added hidden header and integrated it to mmtk objectmodel. Hidden header is not used for the moment
(cherry picked from commit a3d6a995400135666570623369bb0c657ec311c2)
Modified:
vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java
vmkit/trunk/mmtk/magic/LowerMagic.cpp
vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp?rev=180283&r1=180282&r2=180283&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp (original)
+++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp Thu Apr 25 11:47:09 2013
@@ -21,12 +21,14 @@ int Collector::verbose = 0;
extern "C" void* gcmalloc(uint32_t sz, void* _VT) {
gc* res = 0;
+ gcHeader* head = 0;
VirtualTable* VT = (VirtualTable*)_VT;
sz += gcHeader::hiddenHeaderSize();
sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
- res = (gc*)malloc(sz);
- memset((void*)res, 0, sz);
-
+ head = (gcHeader*)malloc(sz);
+ memset((void*)head, 0, sz);
+ res = head->toReference();
+
lock.acquire();
__InternalSet__.insert(res);
lock.release();
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=180283&r1=180282&r2=180283&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:47:09 2013
@@ -43,7 +43,7 @@ public final class Bindings {
Selected.Mutator mutator = Selected.Mutator.get();
int allocator = mutator.checkAllocator(size, 0, 0);
Address res = mutator.alloc(size, 0, 0, allocator, 0);
- res.store(virtualTable);
+ setVT(res, virtualTable);
mutator.postAlloc(res.toObjectReference(), virtualTable, size, allocator);
return res;
}
@@ -131,6 +131,9 @@ public final class Bindings {
}
@Inline
+ private static native void setVT(Address addr , ObjectReference virtualTable);
+
+ @Inline
private static native void memcpy(
ObjectReference to, ObjectReference from, int size);
Modified: vmkit/trunk/mmtk/magic/LowerMagic.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/magic/LowerMagic.cpp?rev=180283&r1=180282&r2=180283&view=diff
==============================================================================
--- vmkit/trunk/mmtk/magic/LowerMagic.cpp (original)
+++ vmkit/trunk/mmtk/magic/LowerMagic.cpp Thu Apr 25 11:47:09 2013
@@ -21,6 +21,7 @@
#include <cstdio>
+#include "vmkit/GC.h"
#include "vmkit/System.h"
using namespace llvm;
@@ -582,11 +583,18 @@ bool LowerMagic::runOnFunction(Function&
res = new ZExtInst(res, FCur->getReturnType(), "", CI);
CI->replaceAllUsesWith(res);
CI->eraseFromParent();
- } else if (!strcmp(FCur->getName().data(), AddressToObjectReferenceMethod) ||
- !strcmp(FCur->getName().data(), AddressToWordMethod)) {
- Value* Val = Call.getArgument(0);
- Val = new BitCastInst(Val, FCur->getReturnType(), "", CI);
- CI->replaceAllUsesWith(Val);
+ } else if (!strcmp(FCur->getName().data(), AddressToObjectReferenceMethod)){
+ Value* Val = Call.getArgument(0);
+ Val = new PtrToIntInst(Val, pointerSizeType, "", CI);
+ Constant* M = ConstantInt::get(pointerSizeType, gcHeader::hiddenHeaderSize());
+ Val = BinaryOperator::CreateAdd(Val, M, "", CI);
+ Val = new IntToPtrInst(Val, FCur->getReturnType(), "", CI);
+ CI->replaceAllUsesWith(Val);
+ CI->eraseFromParent();
+ } else if(!strcmp(FCur->getName().data(), AddressToWordMethod)) {
+ Value* Val = Call.getArgument(0);
+ Val = new BitCastInst(Val, FCur->getReturnType(), "", CI);
+ CI->replaceAllUsesWith(Val);
CI->eraseFromParent();
} else if (!strcmp(FCur->getName().data(), AddressAttemptWordAtOffsetMethod)) {
Value* Ptr = Call.getArgument(0);
@@ -974,7 +982,10 @@ bool LowerMagic::runOnFunction(Function&
CI->eraseFromParent();
} else if (!strcmp(FCur->getName().data(), ObjectReferenceToAddressMethod)) {
Value* Val = Call.getArgument(0);
- Val = new BitCastInst(Val, FCur->getReturnType(), "", CI);
+ Val = new PtrToIntInst(Val, pointerSizeType, "", CI);
+ Constant* M = ConstantInt::get(pointerSizeType, gcHeader::hiddenHeaderSize());
+ Val = BinaryOperator::CreateSub(Val, M, "", CI);
+ Val = new IntToPtrInst(Val, FCur->getReturnType(), "", CI);
CI->replaceAllUsesWith(Val);
CI->eraseFromParent();
} else if (!strcmp(FCur->getName().data(), ObjectReferenceToObjectMethod)) {
Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180283&r1=180282&r2=180283&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:47:09 2013
@@ -61,7 +61,7 @@ extern "C" void* JnJVM_org_j3_bindings_B
extern "C" void* gcmalloc(uint32_t sz, void* VT) {
sz += gcHeader::hiddenHeaderSize();
sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
- return (gc*)JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(sz, VT);
+ return ((gcHeader*)JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(sz, VT))->toReference();
}
extern "C" void addFinalizationCandidate(gc* obj) __attribute__((always_inline));
Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180283&r1=180282&r2=180283&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 11:47:09 2013
@@ -19,7 +19,7 @@ extern "C" word_t Java_org_j3_mmtk_Objec
}
extern "C" word_t Java_org_j3_mmtk_ObjectModel_GC_1HEADER_1OFFSET__ (MMTkObject* OM) {
- return sizeof(void*);
+ return gcHeader::hiddenHeaderSize() + sizeof(void*);
}
extern "C" word_t Java_org_j3_mmtk_ObjectModel_readAvailableBitsWord__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
@@ -31,12 +31,12 @@ extern "C" void Java_org_j3_mmtk_ObjectM
obj->header() = val;
}
-extern "C" gc* Java_org_j3_mmtk_ObjectModel_objectStartRef__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
- return obj;
+extern "C" gcHeader* Java_org_j3_mmtk_ObjectModel_objectStartRef__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
+ return obj ? obj->toHeader() : 0;
}
-extern "C" gc* Java_org_j3_mmtk_ObjectModel_refToAddress__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
- return obj;
+extern "C" gcHeader* Java_org_j3_mmtk_ObjectModel_refToAddress__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
+ return obj ? obj->toHeader() : 0;
}
extern "C" uint8_t Java_org_j3_mmtk_ObjectModel_readAvailableByte__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
@@ -47,8 +47,8 @@ extern "C" void Java_org_j3_mmtk_ObjectM
*vmkit::System::GetLastBytePtr(reinterpret_cast<word_t>(obj)) = val;
}
-extern "C" gc* Java_org_j3_mmtk_ObjectModel_getObjectFromStartAddress__Lorg_vmmagic_unboxed_Address_2 (MMTkObject* OM, gc* obj) {
- return obj;
+extern "C" gc* Java_org_j3_mmtk_ObjectModel_getObjectFromStartAddress__Lorg_vmmagic_unboxed_Address_2 (MMTkObject* OM, gcHeader* obj) {
+ return obj ? obj->toReference() : 0;
}
extern "C" word_t Java_org_j3_mmtk_ObjectModel_prepareAvailableBits__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
@@ -62,6 +62,14 @@ Java_org_j3_mmtk_ObjectModel_attemptAvai
return (val == oldValue);
}
+extern "C" void Java_org_j3_bindings_Bindings_setVT__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2(
+ gcHeader* header, VirtualTable* VT) ALWAYS_INLINE;
+
+extern "C" void Java_org_j3_bindings_Bindings_setVT__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2(
+ gcHeader* header, VirtualTable* VT) {
+ header->toReference()->setVirtualTable(VT);
+}
+
extern "C" void Java_org_j3_bindings_Bindings_memcpy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I(
void* res, void* src, int size) ALWAYS_INLINE;
More information about the vmkit-commits
mailing list