5#ifndef V8_COMMON_PTR_COMPR_H_
6#define V8_COMMON_PTR_COMPR_H_
15#ifdef V8_ENABLE_SANDBOX
22template <
typename Cage>
44 template <
typename TOnHeapAddress>
52 template <
typename ProcessPo
interCallback>
71#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE
79#ifdef V8_ENABLE_SANDBOX
103 return static_cast<Address>(raw_value);
108 return static_cast<Tagged_t>(tagged);
112#ifdef V8_EXTERNAL_CODE_SPACE
147class ExternalCodeCompressionScheme {
149 V8_INLINE static Address PrepareCageBaseAddress(Address on_heap_addr);
154 static Address GetPtrComprCageBaseAddress(Address on_heap_addr) =
delete;
156 V8_INLINE static Address GetPtrComprCageBaseAddress(
157 PtrComprCageBase cage_base);
163 V8_INLINE static Tagged_t CompressObject(Address tagged);
166 V8_INLINE static constexpr Tagged_t CompressAny(Address tagged);
169 V8_INLINE static Address DecompressTaggedSigned(Tagged_t raw_value);
172 template <
typename TOnHeapAddress>
173 V8_INLINE static Address DecompressTagged(TOnHeapAddress on_heap_addr,
184 template <
typename ProcessPo
interCallback>
185 V8_INLINE static void ProcessIntermediatePointers(
186 PtrComprCageBase cage_base, Address raw_value,
195#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE
209#ifdef V8_COMPRESS_POINTERS
210 constexpr bool v8_pointer_compression_unaligned =
sizeof(
V) >
kTaggedSize;
212 constexpr bool v8_pointer_compression_unaligned =
false;
215 constexpr bool unaligned_double_field =
217 if (unaligned_double_field || v8_pointer_compression_unaligned) {
227#ifdef V8_COMPRESS_POINTERS
228 constexpr bool v8_pointer_compression_unaligned =
sizeof(
V) >
kTaggedSize;
230 constexpr bool v8_pointer_compression_unaligned =
false;
233 constexpr bool unaligned_double_field =
235 if (unaligned_double_field || v8_pointer_compression_unaligned) {
247#ifdef V8_COMPRESS_POINTERS_IN_MULTIPLE_CAGES
254 const Address cage_base_;
255#ifdef V8_EXTERNAL_CODE_SPACE
256 const Address code_cage_base_;
259#ifdef V8_ENABLE_SANDBOX
260 Sandbox* saved_current_sandbox_;
static V8_EXPORT_PRIVATE void set_base_non_inlined(Address base)
static V8_EXPORT_PRIVATE Address base_non_inlined()
static thread_local uintptr_t base_ V8_CONSTINIT
V8_INLINE PtrComprCageAccessScope(Isolate *isolate)
static Tagged_t CompressObject(Address tagged)
static Address DecompressTaggedSigned(Tagged_t raw_value)
static V8_INLINE Address GetPtrComprCageBaseAddress(PtrComprCageBase cage_base)
static V8_INLINE constexpr Tagged_t CompressAny(Address tagged)
static V8_INLINE Address DecompressTaggedSigned(Tagged_t raw_value)
static V8_INLINE Tagged_t CompressObject(Address tagged)
static V8_INLINE void ProcessIntermediatePointers(PtrComprCageBase cage_base, Address raw_value, ProcessPointerCallback callback)
static V8_INLINE void InitBase(Address base)
static V8_INLINE Address DecompressTagged(TOnHeapAddress on_heap_addr, Tagged_t raw_value)
V8_CONST static V8_INLINE Address base()
static V8_INLINE constexpr Address GetPtrComprCageBaseAddress(Address on_heap_addr)
#define HAS_SMI_TAG(value)
static V ReadUnalignedValue(Address p)
static void WriteUnalignedValue(Address p, V value)
constexpr int kTaggedSize
static void WriteMaybeUnalignedValue(Address p, V value)
V8_INLINE PtrComprCageBase GetPtrComprCageBase()
static V ReadMaybeUnalignedValue(Address p)
constexpr int kDoubleSize
V8HeapCompressionScheme TrustedSpaceCompressionScheme
V8HeapCompressionSchemeImpl< MainCage > V8HeapCompressionScheme
#define DCHECK(condition)
#define V8_EXPORT_PRIVATE