--- old/src/hotspot/share/gc/z/zMarkStackEntry.hpp 2019-09-04 13:48:37.240128522 +0200 +++ new/src/hotspot/share/gc/z/zMarkStackEntry.hpp 2019-09-04 13:48:36.987119960 +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 (62-bits) // // // Partial array entry @@ -69,7 +71,8 @@ private: typedef ZBitField field_finalizable; typedef ZBitField field_partial_array; - typedef ZBitField field_object_address; + typedef ZBitField field_follow; + typedef ZBitField field_object_address; typedef ZBitField field_partial_array_length; typedef ZBitField 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); }