[vmkit-commits] [vmkit] r108316 - in /vmkit/trunk: include/mvm/Threads/Locks.h lib/J3/Compiler/JavaJIT.cpp lib/Mvm/GCMmap2/ObjectHeader.h mmtk/config/marksweep/ObjectHeader.h mmtk/mmtk-j3/ObjectModel.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Jul 13 21:24:36 PDT 2010


Author: geoffray
Date: Tue Jul 13 23:24:36 2010
New Revision: 108316

URL: http://llvm.org/viewvc/llvm-project?rev=108316&view=rev
Log:
Add an ObjectHeader.h file that will describe the header of a GC object.


Added:
    vmkit/trunk/lib/Mvm/GCMmap2/ObjectHeader.h
    vmkit/trunk/mmtk/config/marksweep/ObjectHeader.h
Modified:
    vmkit/trunk/include/mvm/Threads/Locks.h
    vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp
    vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp

Modified: vmkit/trunk/include/mvm/Threads/Locks.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Locks.h?rev=108316&r1=108315&r2=108316&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/Threads/Locks.h (original)
+++ vmkit/trunk/include/mvm/Threads/Locks.h Tue Jul 13 23:24:36 2010
@@ -14,6 +14,7 @@
 #include <cassert>
 #include <cstdio>
 
+#include "ObjectHeader.h"
 #include "mvm/Threads/Thread.h"
 
 #ifdef WITH_LLVM_GCC
@@ -184,44 +185,27 @@
   void lockAll(int count);
 };
 
-#if (__WORDSIZE == 64)
-  static const uint64_t FatMask = 0x8000000000000000;
-#else
-  static const uint64_t FatMask = 0x80000000;
-#endif
-
-  static const uint64_t ThinCountMask = 0xFF000;
-  static const uint64_t ThinCountShift = 12;
-  static const uint64_t ThinCountAdd = 0x1000;
-  // Mask for all GC objects.
-  static const uint64_t GCMask = 0xFFF;
-  // Mask for the hash code bits.
-  static const uint64_t HashMask = 0xFFC;
-  // Mask for the GC bits.
-  static const uint64_t GCBitMask = 0x3;
-
-  class FatLockNoGC {
-  public:
-    static void gcroot(void* val, void* unused) 
-      __attribute__ ((always_inline)) {}
+class FatLockNoGC {
+public:
+  static void gcroot(void* val, void* unused) 
+    __attribute__ ((always_inline)) {}
 
-    static uintptr_t mask() {
-      return 0;
-    }
-  };
+  static uintptr_t mask() {
+    return 0;
+  }
+};
   
-  class FatLockWithGC {
-  public:
-    static void gcroot(void* val, void* unused) 
-      __attribute__ ((always_inline)) {
-      llvm_gcroot(val, unused);
-    }
+class FatLockWithGC {
+public:
+  static void gcroot(void* val, void* unused) 
+    __attribute__ ((always_inline)) {
+    llvm_gcroot(val, unused);
+  }
     
-    static uintptr_t mask() {
-      return GCMask;
-    }
-  };
-
+  static uintptr_t mask() {
+    return NonLockBitsMask;
+  }
+};
 
 /// ThinLock - This class is an implementation of thin locks. The template class
 /// TFatLock is a virtual machine specific fat lock.
@@ -231,9 +215,6 @@
 public:
   uintptr_t lock;
 
-
-
-
   /// overflowThinlock - Change the lock of this object to a fat lock because
   /// we have reached 0xFF locks.
   void overflowThinLock(Owner* O) {
@@ -254,8 +235,7 @@
   ThinLock() {
     initialise();
   }
-
-  
+ 
   /// changeToFatlock - Change the lock of this object to a fat lock. The lock
   /// may be in a thin lock or fat lock state.
   TFatLock* changeToFatlock(Owner* O) {

Modified: vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp?rev=108316&r1=108315&r2=108316&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/JavaJIT.cpp Tue Jul 13 23:24:36 2010
@@ -546,10 +546,10 @@
   
   Value* lock = new LoadInst(lockPtr, "", currentBlock);
   lock = new PtrToIntInst(lock, intrinsics->pointerSizeType, "", currentBlock);
-  Value* GCMask = ConstantInt::get(intrinsics->pointerSizeType,
-                                   mvm::GCMask);
+  Value* NonLockBitsMask = ConstantInt::get(intrinsics->pointerSizeType,
+                                            mvm::NonLockBitsMask);
 
-  lock = BinaryOperator::CreateAnd(lock, GCMask, "", currentBlock);
+  lock = BinaryOperator::CreateAnd(lock, NonLockBitsMask, "", currentBlock);
 
   lockPtr = new BitCastInst(lockPtr, 
                             PointerType::getUnqual(intrinsics->pointerSizeType),
@@ -644,9 +644,11 @@
                             PointerType::getUnqual(intrinsics->pointerSizeType),
                             "", currentBlock);
   Value* lock = new LoadInst(lockPtr, "", currentBlock);
-  Value* GCMask = ConstantInt::get(intrinsics->pointerSizeType, ~mvm::GCMask);
+  Value* NonLockBitsMask = ConstantInt::get(
+      intrinsics->pointerSizeType, ~mvm::NonLockBitsMask);
 
-  Value* lockedMask = BinaryOperator::CreateAnd(lock, GCMask, "", currentBlock);
+  Value* lockedMask = BinaryOperator::CreateAnd(
+      lock, NonLockBitsMask, "", currentBlock);
   
   Value* threadId = getCurrentThread(intrinsics->MutatorThreadType);
   threadId = new PtrToIntInst(threadId, intrinsics->pointerSizeType, "",
@@ -667,8 +669,10 @@
   
   // Locked once, set zero
   currentBlock = LockedOnceBB;
-  GCMask = ConstantInt::get(intrinsics->pointerSizeType, mvm::GCMask);
-  lockedMask = BinaryOperator::CreateAnd(lock, GCMask, "", currentBlock);
+  NonLockBitsMask = ConstantInt::get(
+      intrinsics->pointerSizeType, mvm::NonLockBitsMask);
+  lockedMask = BinaryOperator::CreateAnd(
+      lock, NonLockBitsMask, "", currentBlock);
   new StoreInst(lockedMask, lockPtr, false, currentBlock);
   BranchInst::Create(EndUnlock, currentBlock);
 

Added: vmkit/trunk/lib/Mvm/GCMmap2/ObjectHeader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/ObjectHeader.h?rev=108316&view=auto
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/ObjectHeader.h (added)
+++ vmkit/trunk/lib/Mvm/GCMmap2/ObjectHeader.h Tue Jul 13 23:24:36 2010
@@ -0,0 +1,35 @@
+//===----- ObjectHeader.h - Macros for describing an object header --------===//
+//
+//                          The VMKit project
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef MVM_OBJECT_HEADER_H
+#define MVM_OBJECT_HEADER_H
+
+#include <stdint.h>
+
+namespace mvm {
+  #if (__WORDSIZE == 64)
+  static const uint64_t FatMask = 0x8000000000000000;
+#else
+  static const uint64_t FatMask = 0x80000000;
+#endif
+
+  static const uint64_t ThinCountMask = 0xFF000;
+  static const uint64_t ThinCountShift = 12;
+  static const uint64_t ThinCountAdd = 0x1000;
+  // Mask for all GC objects.
+  static const uint64_t NonLockBitsMask = 0xFFF;
+  // Mask for the hash code bits.
+  static const uint64_t HashMask = 0xFFC;
+  // Mask for the GC bits.
+  static const uint64_t GCBitMask = 0x3;
+
+  static const bool MovesObject = false;
+}
+
+#endif // MVM_OBJECT_HEADER_H

Added: vmkit/trunk/mmtk/config/marksweep/ObjectHeader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/config/marksweep/ObjectHeader.h?rev=108316&view=auto
==============================================================================
--- vmkit/trunk/mmtk/config/marksweep/ObjectHeader.h (added)
+++ vmkit/trunk/mmtk/config/marksweep/ObjectHeader.h Tue Jul 13 23:24:36 2010
@@ -0,0 +1,35 @@
+//===----- ObjectHeader.h - Macros for describing an object header --------===//
+//
+//                          The VMKit project
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef MVM_OBJECT_HEADER_H
+#define MVM_OBJECT_HEADER_H
+
+#include <stdint.h>
+
+namespace mvm {
+  #if (__WORDSIZE == 64)
+  static const uint64_t FatMask = 0x8000000000000000;
+#else
+  static const uint64_t FatMask = 0x80000000;
+#endif
+
+  static const uint64_t ThinCountMask = 0xFF000;
+  static const uint64_t ThinCountShift = 12;
+  static const uint64_t ThinCountAdd = 0x1000;
+  // Mask for all GC objects.
+  static const uint64_t NonLockBitsMask = 0xFFF;
+  // Mask for the hash code bits.
+  static const uint64_t HashMask = 0xFFC;
+  // Mask for the GC bits.
+  static const uint64_t GCBitMask = 0x3;
+
+  static const bool MovesObject = false;
+}
+
+#endif // MVM_OBJECT_HEADER_H

Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=108316&r1=108315&r2=108316&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Tue Jul 13 23:24:36 2010
@@ -26,7 +26,7 @@
 
 extern "C" void Java_org_j3_mmtk_ObjectModel_writeAvailableBitsWord__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Word_2 (JavaObject* OM, JavaObject* obj, uintptr_t val) {
   // Comment the assert, it prevents MMTkInline.inc to be self-contained.
-  // assert((val & ~mvm::GCMask) == (((uintptr_t*)obj)[1] & ~mvm::GCMask) && "GC bits do not fit");
+  // assert((val & ~mvm::NonLockBitsMask) == (((uintptr_t*)obj)[1] & ~mvm::GCMask) && "GC bits do not fit");
 #if defined(__PPC__)
   ((uint8_t*)obj)[7] &= ~mvm::GCBitMask;
   ((uint8_t*)obj)[7] |= val;
@@ -53,7 +53,7 @@
 }
 
 extern "C" void Java_org_j3_mmtk_ObjectModel_writeAvailableByte__Lorg_vmmagic_unboxed_ObjectReference_2B (JavaObject* OM, JavaObject* obj, uint8_t val) {
-  assert((val & mvm::GCMask) == val && "GC bits do not fit");
+  assert((val & mvm::NonLockBitsMask) == val && "GC bits do not fit");
 #if defined(__PPC__)
   ((uint8_t*)obj)[7] &= ~mvm::GCBitMask;
   ((uint8_t*)obj)[7] |= val;





More information about the vmkit-commits mailing list