26
27 #include "gc/z/zBitField.hpp"
28 #include "memory/allocation.hpp"
29 #include "metaprogramming/primitiveConversions.hpp"
30
31 //
32 // Forwarding table entry layout
33 // -----------------------------
34 //
35 // 6 4 4 0
36 // 3 2 1 0
37 // +------------------------+-----------------------------------------------+
38 // |11111111 11111111 111111|11 11111111 11111111 11111111 11111111 11111111|
39 // +------------------------+-----------------------------------------------+
40 // | |
41 // | * 41-0 To Object Offset (42-bits)
42 // |
43 // * 63-42 From Object Index (22-bits)
44 //
45
46 class ZForwardingTableEntry VALUE_OBJ_CLASS_SPEC {
47 friend struct PrimitiveConversions;
48
49 private:
50 typedef ZBitField<uint64_t, size_t, 0, 42> field_to_offset;
51 typedef ZBitField<uint64_t, size_t, 42, 22> field_from_index;
52
53 uint64_t _entry;
54
55 public:
56 ZForwardingTableEntry() :
57 _entry(empty()) {}
58
59 ZForwardingTableEntry(size_t from_index, size_t to_offset) :
60 _entry(field_from_index::encode(from_index) |
61 field_to_offset::encode(to_offset)) {}
62
63 static uintptr_t empty() {
64 return (uintptr_t)-1;
65 }
66
|
26
27 #include "gc/z/zBitField.hpp"
28 #include "memory/allocation.hpp"
29 #include "metaprogramming/primitiveConversions.hpp"
30
31 //
32 // Forwarding table entry layout
33 // -----------------------------
34 //
35 // 6 4 4 0
36 // 3 2 1 0
37 // +------------------------+-----------------------------------------------+
38 // |11111111 11111111 111111|11 11111111 11111111 11111111 11111111 11111111|
39 // +------------------------+-----------------------------------------------+
40 // | |
41 // | * 41-0 To Object Offset (42-bits)
42 // |
43 // * 63-42 From Object Index (22-bits)
44 //
45
46 class ZForwardingTableEntry {
47 friend struct PrimitiveConversions;
48
49 private:
50 typedef ZBitField<uint64_t, size_t, 0, 42> field_to_offset;
51 typedef ZBitField<uint64_t, size_t, 42, 22> field_from_index;
52
53 uint64_t _entry;
54
55 public:
56 ZForwardingTableEntry() :
57 _entry(empty()) {}
58
59 ZForwardingTableEntry(size_t from_index, size_t to_offset) :
60 _entry(field_from_index::encode(from_index) |
61 field_to_offset::encode(to_offset)) {}
62
63 static uintptr_t empty() {
64 return (uintptr_t)-1;
65 }
66
|