< prev index next >

src/hotspot/share/gc/z/zForwardingEntry.hpp

Print this page

        

*** 30,73 **** // // Forwarding entry layout // ----------------------- // ! // 6 4 4 0 ! // 3 2 1 0 ! // +------------------------+-----------------------------------------------+ ! // |11111111 11111111 111111|11 11111111 11111111 11111111 11111111 11111111| ! // +------------------------+-----------------------------------------------+ ! // | | ! // | * 41-0 To Object Offset (42-bits) // | ! // * 63-42 From Object Index (22-bits) // class ZForwardingEntry { friend struct PrimitiveConversions; private: ! typedef ZBitField<uint64_t, size_t, 0, 42> field_to_offset; ! typedef ZBitField<uint64_t, size_t, 42, 22> field_from_index; uint64_t _entry; - static uintptr_t empty() { - return (uintptr_t)-1; - } - public: ZForwardingEntry() : ! _entry(empty()) {} ZForwardingEntry(size_t from_index, size_t to_offset) : ! _entry(field_from_index::encode(from_index) | ! field_to_offset::encode(to_offset)) {} ! bool is_empty() const { ! return _entry == empty(); } size_t to_offset() const { return field_to_offset::decode(_entry); } --- 30,73 ---- // // Forwarding entry layout // ----------------------- // ! // 6 4 4 ! // 3 6 5 1 0 ! // +--------------------+--------------------------------------------------+-+ ! // |11111111 11111111 11|111111 11111111 11111111 11111111 11111111 1111111|1| ! // +--------------------+--------------------------------------------------+-+ ! // | | | ! // | | 0-0 Populated Flag (1-bits) * ! // | | ! // | * 45-1 To Object Offset (45-bits) // | ! // * 63-46 From Object Index (18-bits) // class ZForwardingEntry { friend struct PrimitiveConversions; private: ! typedef ZBitField<uint64_t, bool, 0, 1> field_populated; ! typedef ZBitField<uint64_t, size_t, 1, 45> field_to_offset; ! typedef ZBitField<uint64_t, size_t, 46, 18> field_from_index; uint64_t _entry; public: ZForwardingEntry() : ! _entry(0) {} ZForwardingEntry(size_t from_index, size_t to_offset) : ! _entry(field_populated::encode(true) | ! field_to_offset::encode(to_offset) | ! field_from_index::encode(from_index)) {} ! bool populated() const { ! return field_populated::decode(_entry); } size_t to_offset() const { return field_to_offset::decode(_entry); }
< prev index next >