[vmkit-commits] [vmkit] r96108 - in /vmkit/trunk: include/mvm/Threads/Locks.h mmtk/mmtk-j3/ObjectModel.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sat Feb 13 11:00:01 PST 2010


Author: geoffray
Date: Sat Feb 13 13:00:01 2010
New Revision: 96108

URL: http://llvm.org/viewvc/llvm-project?rev=96108&view=rev
Log:
Fix mask when updating GC bits.


Modified:
    vmkit/trunk/include/mvm/Threads/Locks.h
    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=96108&r1=96107&r2=96108&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/Threads/Locks.h (original)
+++ vmkit/trunk/include/mvm/Threads/Locks.h Sat Feb 13 13:00:01 2010
@@ -186,8 +186,12 @@
   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;
 
 
 

Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=96108&r1=96107&r2=96108&view=diff

==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Sat Feb 13 13:00:01 2010
@@ -21,16 +21,16 @@
 }
 
 extern "C" uintptr_t Java_org_j3_mmtk_ObjectModel_readAvailableBitsWord__Lorg_vmmagic_unboxed_ObjectReference_2 (JavaObject* OM, JavaObject* obj) {
-  return ((uintptr_t*)obj)[1] & mvm::GCMask;
+  return ((uintptr_t*)obj)[1] & mvm::GCBitMask;
 }
 
 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) {
   assert((val & ~mvm::GCMask) == (((uintptr_t*)obj)[1] & ~mvm::GCMask) && "GC bits do not fit");
 #if defined(__PPC__)
-  ((uint8_t*)obj)[7] &= ~mvm::GCMask;
+  ((uint8_t*)obj)[7] &= ~mvm::GCBitMask;
   ((uint8_t*)obj)[7] |= val;
 #else
-  ((uint8_t*)obj)[4] &= ~mvm::GCMask;
+  ((uint8_t*)obj)[4] &= ~mvm::GCBitMask;
   ((uint8_t*)obj)[4] |= val;
 #endif
 }
@@ -45,19 +45,19 @@
 
 extern "C" uint8_t Java_org_j3_mmtk_ObjectModel_readAvailableByte__Lorg_vmmagic_unboxed_ObjectReference_2 (JavaObject* OM, JavaObject* obj) {
 #if defined(__PPC__)
-  return ((uint8_t*)obj)[7] & mvm::GCMask;
+  return ((uint8_t*)obj)[7] & mvm::GCBitMask;
 #else
-  return ((uint8_t*)obj)[4] & mvm::GCMask;
+  return ((uint8_t*)obj)[4] & mvm::GCBitMask;
 #endif
 }
 
 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");
 #if defined(__PPC__)
-  ((uint8_t*)obj)[7] &= ~mvm::GCMask;
+  ((uint8_t*)obj)[7] &= ~mvm::GCBitMask;
   ((uint8_t*)obj)[7] |= val;
 #else
-  ((uint8_t*)obj)[4] &= ~mvm::GCMask;
+  ((uint8_t*)obj)[4] &= ~mvm::GCBitMask;
   ((uint8_t*)obj)[4] |= val;
 #endif
 }
@@ -74,7 +74,7 @@
 Java_org_j3_mmtk_ObjectModel_attemptAvailableBits__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Word_2Lorg_vmmagic_unboxed_Word_2(
     JavaObject* OM, JavaObject* obj, intptr_t oldValue, intptr_t newValue) {
   
-  assert(((oldValue & ~mvm::GCMask) == (newValue & ~mvm::GCMask)) &&
+  assert(((oldValue & ~mvm::GCBitMask) == (newValue & ~mvm::GCBitMask)) &&
          "GC bits do not fit");
   return __sync_bool_compare_and_swap(((intptr_t*)obj) + 1, oldValue, newValue);
 }





More information about the vmkit-commits mailing list