src/hotspot/share/gc/z/zMarkStackEntry.hpp
changeset 58066 8407928b9fe5
parent 50875 2217b2fc29ea
--- a/src/hotspot/share/gc/z/zMarkStackEntry.hpp	Mon Sep 09 16:34:45 2019 +0200
+++ b/src/hotspot/share/gc/z/zMarkStackEntry.hpp	Tue Sep 10 11:11:31 2019 +0200
@@ -35,16 +35,18 @@
 //  ------------
 //
 //   6
-//   3                                                                   2 1 0
-//  +---------------------------------------------------------------------+-+-+
-//  |11111111 11111111 11111111 11111111 11111111 11111111 11111111 111111|1|1|
-//  +---------------------------------------------------------------------+-+-+
-//  |                                                                     | |
-//  |                                      1-1 Partial Array Flag (1-bit) * |
-//  |                                                                       |
-//  |                                                0-0 Final Flag (1-bit) *
+//   3                                                                  3 2 1 0
+//  +--------------------------------------------------------------------+-+-+-+
+//  |11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111|1|1|1|
+//  +--------------------------------------------------------------------+-+-+-+
+//  |                                                                    | | |
+//  |                                            2-2 Follow Flag (1-bit) * | |
+//  |                                                                      | |
+//  |                                       1-1 Partial Array Flag (1-bit) * |
+//  |                                                                        |
+//  |                                                 0-0 Final Flag (1-bit) *
 //  |
-//  * 63-2 Object Address (62-bits)
+//  * 63-3 Object Address (61-bits)
 //
 //
 //  Partial array entry
@@ -69,7 +71,8 @@
 private:
   typedef ZBitField<uint64_t, bool,      0,  1>  field_finalizable;
   typedef ZBitField<uint64_t, bool,      1,  1>  field_partial_array;
-  typedef ZBitField<uint64_t, uintptr_t, 2,  62> field_object_address;
+  typedef ZBitField<uint64_t, bool,      2,  1>  field_follow;
+  typedef ZBitField<uint64_t, uintptr_t, 3,  61> field_object_address;
   typedef ZBitField<uint64_t, size_t,    2,  30> field_partial_array_length;
   typedef ZBitField<uint64_t, size_t,    32, 32> field_partial_array_offset;
 
@@ -83,8 +86,9 @@
     // what _entry is initialized to.
   }
 
-  ZMarkStackEntry(uintptr_t object_address, bool finalizable) :
+  ZMarkStackEntry(uintptr_t object_address, bool follow, bool finalizable) :
       _entry(field_object_address::encode(object_address) |
+             field_follow::encode(follow) |
              field_partial_array::encode(false) |
              field_finalizable::encode(finalizable)) {}
 
@@ -110,6 +114,10 @@
     return field_partial_array_length::decode(_entry);
   }
 
+  bool follow() const {
+    return field_follow::decode(_entry);
+  }
+
   uintptr_t object_address() const {
     return field_object_address::decode(_entry);
   }