5#ifndef V8_SANDBOX_TAGGED_PAYLOAD_H_
6#define V8_SANDBOX_TAGGED_PAYLOAD_H_
15template <
typename PayloadTaggingScheme>
17 static_assert(PayloadTaggingScheme::kMarkBit != 0,
18 "Invalid kMarkBit specified in tagging scheme.");
20 static_assert((PayloadTaggingScheme::kMarkBit &
21 PayloadTaggingScheme::kTagMask) == 0);
27 return encoded_word_ & ~(tag | PayloadTaggingScheme::kMarkBit);
31 typename PayloadTaggingScheme::TagType tag) {
35 bool IsTaggedWith(
typename PayloadTaggingScheme::TagType tag)
const {
36 return (
encoded_word_ & PayloadTaggingScheme::kTagMask) == tag;
39 void SetTag(
typename PayloadTaggingScheme::TagType new_tag) {
55 typename PayloadTaggingScheme::TagType
ExtractTag()
const {
56 return static_cast<typename PayloadTaggingScheme::TagType
>(
58 PayloadTaggingScheme::kMarkBit);
62 return IsTaggedWith(PayloadTaggingScheme::kFreeEntryTag);
66 if constexpr (PayloadTaggingScheme::kSupportsEvacuation) {
67 return IsTaggedWith(PayloadTaggingScheme::kEvacuationEntryTag);
74 if constexpr (PayloadTaggingScheme::kSupportsZapping) {
75 return IsTaggedWith(PayloadTaggingScheme::kZappedEntryTag);
82 if constexpr (PayloadTaggingScheme::kSupportsEvacuation) {
83 return Untag(PayloadTaggingScheme::kEvacuationEntryTag);
bool ContainsEvacuationEntry() const
Address Untag(typename PayloadTaggingScheme::TagType tag) const
bool HasMarkBitSet() const
TaggedPayload(Address pointer, typename PayloadTaggingScheme::TagType tag)
PayloadTaggingScheme::TagType ExtractTag() const
static Address Tag(Address pointer, typename PayloadTaggingScheme::TagType tag)
bool IsTaggedWith(typename PayloadTaggingScheme::TagType tag) const
uint32_t ExtractFreelistLink() const
bool operator!=(TaggedPayload other) const
bool ContainsFreelistLink() const
bool ContainsPointer() const
bool operator==(TaggedPayload other) const
void SetTag(typename PayloadTaggingScheme::TagType new_tag)
Address ExtractEvacuationEntryHandleLocation() const