< prev index next >
src/hotspot/share/gc/z/zMarkStackEntry.hpp
Print this page
*** 33,52 ****
//
// Object entry
// ------------
//
// 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) *
// |
! // * 63-2 Object Address (62-bits)
//
//
// Partial array entry
// -------------------
//
--- 33,54 ----
//
// Object entry
// ------------
//
// 6
! // 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-3 Object Address (62-bits)
//
//
// Partial array entry
// -------------------
//
*** 67,77 ****
class ZMarkStackEntry {
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, size_t, 2, 30> field_partial_array_length;
typedef ZBitField<uint64_t, size_t, 32, 32> field_partial_array_offset;
uint64_t _entry;
--- 69,80 ----
class ZMarkStackEntry {
private:
typedef ZBitField<uint64_t, bool, 0, 1> field_finalizable;
typedef ZBitField<uint64_t, bool, 1, 1> field_partial_array;
! 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;
uint64_t _entry;
*** 81,92 ****
// _entry to allow it to be optimized out when instantiating ZMarkStack,
// which has a long array of ZMarkStackEntry elements, but doesn't care
// what _entry is initialized to.
}
! ZMarkStackEntry(uintptr_t object_address, bool finalizable) :
_entry(field_object_address::encode(object_address) |
field_partial_array::encode(false) |
field_finalizable::encode(finalizable)) {}
ZMarkStackEntry(size_t partial_array_offset, size_t partial_array_length, bool finalizable) :
_entry(field_partial_array_offset::encode(partial_array_offset) |
--- 84,96 ----
// _entry to allow it to be optimized out when instantiating ZMarkStack,
// which has a long array of ZMarkStackEntry elements, but doesn't care
// what _entry is initialized to.
}
! 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)) {}
ZMarkStackEntry(size_t partial_array_offset, size_t partial_array_length, bool finalizable) :
_entry(field_partial_array_offset::encode(partial_array_offset) |
*** 108,117 ****
--- 112,125 ----
size_t partial_array_length() const {
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);
}
};
< prev index next >