// Copyright 2019 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_OBJECTS_COMPRESSED_SLOTS_H_ #define V8_OBJECTS_COMPRESSED_SLOTS_H_ #include "include/v8config.h" #include "src/common/globals.h" #include "src/common/ptr-compr.h" #include "src/objects/slots.h" #include "src/objects/tagged-field.h" namespace v8::internal { #ifdef V8_COMPRESS_POINTERS // A CompressedObjectSlot instance describes a kTaggedSize-sized field ("slot") // holding a compressed tagged pointer (smi or heap object). // Its address() is the address of the slot. // The slot's contents can be read and written using operator* and store(). class CompressedObjectSlot : public SlotBase<CompressedObjectSlot, Tagged_t> { … }; // A CompressedMaybeObjectSlot instance describes a kTaggedSize-sized field // ("slot") holding a possibly-weak compressed tagged pointer // (think: Tagged<MaybeObject>). // Its address() is the address of the slot. // The slot's contents can be read and written using operator* and store(). class CompressedMaybeObjectSlot : public SlotBase<CompressedMaybeObjectSlot, Tagged_t> { … }; // A CompressedHeapObjectSlot instance describes a kTaggedSize-sized field // ("slot") holding a weak or strong compressed pointer to a heap object (think: // Tagged<HeapObjectReference>). // Its address() is the address of the slot. // The slot's contents can be read and written using operator* and store(). // In case it is known that that slot contains a strong heap object pointer, // ToHeapObject() can be used to retrieve that heap object. class CompressedHeapObjectSlot : public SlotBase<CompressedHeapObjectSlot, Tagged_t> { … }; // An OffHeapCompressedObjectSlot instance describes a kTaggedSize-sized field // ("slot") holding a compressed tagged pointer (smi or heap object). // Unlike CompressedObjectSlot, it does not assume that the slot is on the heap, // and so does not provide an operator* with implicit Isolate* calculation. // Its address() is the address of the slot. // The slot's contents can be read and written using load() and store(). template <typename CompressionScheme> class OffHeapCompressedObjectSlot : public SlotBase<OffHeapCompressedObjectSlot<CompressionScheme>, Tagged_t> { … }; #endif // V8_COMPRESS_POINTERS } // namespace v8::internal #endif // V8_OBJECTS_COMPRESSED_SLOTS_H_