53 assert((is_good(value) || is_null(value)) == result, "Bad address"); 54 return result; 55 } 56 57 inline bool ZAddress::is_weak_bad(uintptr_t value) { 58 return value & ZAddressWeakBadMask; 59 } 60 61 inline bool ZAddress::is_weak_good(uintptr_t value) { 62 return !is_weak_bad(value) && !is_null(value); 63 } 64 65 inline bool ZAddress::is_weak_good_or_null(uintptr_t value) { 66 return !is_weak_bad(value); 67 } 68 69 inline bool ZAddress::is_marked(uintptr_t value) { 70 return value & ZAddressMetadataMarked; 71 } 72 73 inline bool ZAddress::is_finalizable(uintptr_t value) { 74 return value & ZAddressMetadataFinalizable; 75 } 76 77 inline bool ZAddress::is_finalizable_good(uintptr_t value) { 78 return is_finalizable(value) && is_good(value ^ ZAddressMetadataFinalizable); 79 } 80 81 inline bool ZAddress::is_remapped(uintptr_t value) { 82 return value & ZAddressMetadataRemapped; 83 } 84 85 inline bool ZAddress::is_in(uintptr_t value) { 86 // Check that exactly one non-offset bit is set 87 if (!is_power_of_2(value & ~ZAddressOffsetMask)) { 88 return false; 89 } 90 91 // Check that one of the non-finalizable metadata is set 92 return value & (ZAddressMetadataMask & ~ZAddressMetadataFinalizable); | 53 assert((is_good(value) || is_null(value)) == result, "Bad address"); 54 return result; 55 } 56 57 inline bool ZAddress::is_weak_bad(uintptr_t value) { 58 return value & ZAddressWeakBadMask; 59 } 60 61 inline bool ZAddress::is_weak_good(uintptr_t value) { 62 return !is_weak_bad(value) && !is_null(value); 63 } 64 65 inline bool ZAddress::is_weak_good_or_null(uintptr_t value) { 66 return !is_weak_bad(value); 67 } 68 69 inline bool ZAddress::is_marked(uintptr_t value) { 70 return value & ZAddressMetadataMarked; 71 } 72 73 inline bool ZAddress::is_marked_or_null(uintptr_t value) { 74 return is_marked(value) || is_null(value); 75 } 76 77 inline bool ZAddress::is_finalizable(uintptr_t value) { 78 return value & ZAddressMetadataFinalizable; 79 } 80 81 inline bool ZAddress::is_finalizable_good(uintptr_t value) { 82 return is_finalizable(value) && is_good(value ^ ZAddressMetadataFinalizable); 83 } 84 85 inline bool ZAddress::is_remapped(uintptr_t value) { 86 return value & ZAddressMetadataRemapped; 87 } 88 89 inline bool ZAddress::is_in(uintptr_t value) { 90 // Check that exactly one non-offset bit is set 91 if (!is_power_of_2(value & ~ZAddressOffsetMask)) { 92 return false; 93 } 94 95 // Check that one of the non-finalizable metadata is set 96 return value & (ZAddressMetadataMask & ~ZAddressMetadataFinalizable); |