[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