[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