hotspot/src/share/vm/oops/oop.pcgc.inline.hpp
changeset 360 21d113ecbf6a
parent 1 489c9b5090e2
child 670 ddf3e9583f2f
--- a/hotspot/src/share/vm/oops/oop.pcgc.inline.hpp	Fri Apr 11 09:56:35 2008 -0400
+++ b/hotspot/src/share/vm/oops/oop.pcgc.inline.hpp	Sun Apr 13 17:43:42 2008 -0400
@@ -67,8 +67,8 @@
   // update_header();
   // The klass has moved.  Is the location of the klass
   // within the limits?
-  if ((((HeapWord*)&_klass) >= begin_limit) &&
-      (((HeapWord*)&_klass) < end_limit)) {
+  if ((((HeapWord*)&_metadata._klass) >= begin_limit) &&
+      (((HeapWord*)&_metadata._klass) < end_limit)) {
     set_klass(updated_klass);
   }
 
@@ -89,7 +89,11 @@
 // Used by parallel old GC.
 
 inline void oopDesc::follow_header(ParCompactionManager* cm) {
-  PSParallelCompact::mark_and_push(cm, (oop*)&_klass);
+  if (UseCompressedOops) {
+    PSParallelCompact::mark_and_push(cm, compressed_klass_addr());
+  } else {
+    PSParallelCompact::mark_and_push(cm, klass_addr());
+  }
 }
 
 inline oop oopDesc::forward_to_atomic(oop p) {
@@ -114,9 +118,18 @@
 }
 
 inline void oopDesc::update_header() {
-  PSParallelCompact::adjust_pointer((oop*)&_klass);
+  if (UseCompressedOops) {
+    PSParallelCompact::adjust_pointer(compressed_klass_addr());
+  } else {
+    PSParallelCompact::adjust_pointer(klass_addr());
+  }
 }
 
 inline void oopDesc::update_header(HeapWord* beg_addr, HeapWord* end_addr) {
-  PSParallelCompact::adjust_pointer((oop*)&_klass, beg_addr, end_addr);
+  if (UseCompressedOops) {
+    PSParallelCompact::adjust_pointer(compressed_klass_addr(),
+                                      beg_addr, end_addr);
+  } else {
+    PSParallelCompact::adjust_pointer(klass_addr(), beg_addr, end_addr);
+  }
 }