76 #ifdef ASSERT
77 inline void CompressedKlassPointers::check_encodable(const void* addr) {
78 assert(UseCompressedClassPointers, "Only call for +UseCCP");
79 assert(addr != nullptr, "Null Klass?");
80 assert(is_encodable(addr),
81 "Address " PTR_FORMAT " is not encodable (Klass range: " RANGEFMT ", klass alignment: %d)",
82 p2i(addr), RANGE2FMTARGS(_klass_range_start, _klass_range_end), klass_alignment_in_bytes());
83 }
84
85 inline void CompressedKlassPointers::check_valid_narrow_klass_id(narrowKlass nk) {
86 check_init(_base);
87 assert(UseCompressedClassPointers, "Only call for +UseCCP");
88 assert(nk > 0, "narrow Klass ID is 0");
89 const uint64_t nk_mask = ~right_n_bits(narrow_klass_pointer_bits());
90 assert(((uint64_t)nk & nk_mask) == 0, "narrow klass id bit spillover (%u)", nk);
91 assert(nk >= _lowest_valid_narrow_klass_id &&
92 nk <= _highest_valid_narrow_klass_id, "narrowKlass ID out of range (%u)", nk);
93 }
94 #endif // ASSERT
95
96 inline address CompressedKlassPointers::encoding_range_end() {
97 const int max_bits = narrow_klass_pointer_bits() + _shift;
98 return (address)((uintptr_t)_base + nth_bit(max_bits));
99 }
100
101 #endif // SHARE_OOPS_COMPRESSEDKLASS_INLINE_HPP
|
76 #ifdef ASSERT
77 inline void CompressedKlassPointers::check_encodable(const void* addr) {
78 assert(UseCompressedClassPointers, "Only call for +UseCCP");
79 assert(addr != nullptr, "Null Klass?");
80 assert(is_encodable(addr),
81 "Address " PTR_FORMAT " is not encodable (Klass range: " RANGEFMT ", klass alignment: %d)",
82 p2i(addr), RANGE2FMTARGS(_klass_range_start, _klass_range_end), klass_alignment_in_bytes());
83 }
84
85 inline void CompressedKlassPointers::check_valid_narrow_klass_id(narrowKlass nk) {
86 check_init(_base);
87 assert(UseCompressedClassPointers, "Only call for +UseCCP");
88 assert(nk > 0, "narrow Klass ID is 0");
89 const uint64_t nk_mask = ~right_n_bits(narrow_klass_pointer_bits());
90 assert(((uint64_t)nk & nk_mask) == 0, "narrow klass id bit spillover (%u)", nk);
91 assert(nk >= _lowest_valid_narrow_klass_id &&
92 nk <= _highest_valid_narrow_klass_id, "narrowKlass ID out of range (%u)", nk);
93 }
94 #endif // ASSERT
95
96 // Given a narrow Klass ID, returns true if it appears to be valid
97 inline bool CompressedKlassPointers::is_valid_narrow_klass_id(narrowKlass nk) {
98 return nk >= _lowest_valid_narrow_klass_id && nk < _highest_valid_narrow_klass_id;
99 }
100
101 inline address CompressedKlassPointers::encoding_range_end() {
102 const int max_bits = narrow_klass_pointer_bits() + _shift;
103 return (address)((uintptr_t)_base + nth_bit(max_bits));
104 }
105
106 #endif // SHARE_OOPS_COMPRESSEDKLASS_INLINE_HPP
|