5#ifndef V8_OBJECTS_SLOTS_INL_H_
6#define V8_OBJECTS_SLOTS_INL_H_
60 *
location() = MapWord::Pack(map.ptr());
111 location(), old.ptr(), target.ptr());
118 location(), old.ptr(), target.ptr());
198#ifdef V8_ENABLE_SANDBOX
208#ifdef V8_ENABLE_SANDBOX
209 ExternalPointerTable& table = isolate.GetExternalPointerTableFor(tag);
211 isolate.GetExternalPointerTableSpaceFor(tag, host.
address()), value, tag);
215 Release_StoreHandle(
handle);
217 store(isolate, value, tag);
221#ifdef V8_COMPRESS_POINTERS
226void ExternalPointerSlot::Relaxed_StoreHandle(
231void ExternalPointerSlot::Release_StoreHandle(
238#ifdef V8_ENABLE_SANDBOX
239 const ExternalPointerTable& table =
240 isolate.GetExternalPointerTableFor(tag_range_);
242 return table.Get(
handle, tag_range_);
250#ifdef V8_ENABLE_SANDBOX
251 DCHECK(tag_range_.Contains(tag));
252 ExternalPointerTable& table = isolate.GetExternalPointerTableFor(tag);
254 table.Set(
handle, value, tag);
263#ifdef V8_ENABLE_SANDBOX
276#ifdef V8_ENABLE_SANDBOX
277 return Relaxed_StoreHandle(content);
285#ifdef V8_ENABLE_SANDBOX
287 Relaxed_StoreHandle(index);
295#ifdef V8_ENABLE_SANDBOX
297 return Relaxed_LoadHandle();
303#ifdef V8_COMPRESS_POINTERS
308void CppHeapPointerSlot::Relaxed_StoreHandle(
313void CppHeapPointerSlot::Release_StoreHandle(
321#ifdef V8_COMPRESS_POINTERS
322 const CppHeapPointerTable& table = isolate.GetCppHeapPointerTable();
324 return table.Get(
handle, tag_range);
332#ifdef V8_COMPRESS_POINTERS
333 CppHeapPointerTable& table = isolate.GetCppHeapPointerTable();
335 table.Set(
handle, value, tag);
342#ifdef V8_COMPRESS_POINTERS
377#ifdef V8_ENABLE_SANDBOX
379 ExposedTrustedObject::kSelfIndirectPointerOffset);
389#ifdef V8_ENABLE_SANDBOX
391 ExposedTrustedObject::kSelfIndirectPointerOffset);
420template <IndirectPo
interSlot::TagCheckStrictness allow_unpublished>
423#ifdef V8_ENABLE_SANDBOX
433 return ResolveCodePointerHandle(
handle);
435 return ResolveTrustedPointerHandle<allow_unpublished>(
handle, isolate);
437 }
else if (tag_ == kCodeIndirectPointerTag) {
438 return ResolveCodePointerHandle(
handle);
440 return ResolveTrustedPointerHandle<allow_unpublished>(
handle, isolate);
447#ifdef V8_ENABLE_SANDBOX
448template <IndirectPo
interSlot::TagCheckStrictness allow_unpublished>
452 const TrustedPointerTable& table = isolate.GetTrustedPointerTableFor(tag_);
468template <
typename SlotT>
470 jit_allocation_.WriteHeaderSlot(this->address(), value,
kRelaxedStore);
480 static const size_t kBlockCopyLimit = 16;
482 reinterpret_cast<const Tagged_t*
>(src), num_tagged);
488#ifdef V8_COMPRESS_POINTERS
493 Address raw_value = value.ptr();
static T Relaxed_CompareAndSwap(T *addr, typename std::remove_reference< T >::type old_value, typename std::remove_reference< T >::type new_value)
static void Release_Store(T *addr, typename std::remove_reference< T >::type new_value)
static T Acquire_Load(T *addr)
static void Relaxed_Store(T *addr, typename std::remove_reference< T >::type new_value)
static T Release_CompareAndSwap(T *addr, typename std::remove_reference< T >::type old_value, typename std::remove_reference< T >::type new_value)
static T Relaxed_Load(T *addr)
Address try_load(IsolateForPointerCompression isolate, CppHeapPointerTagRange tag_range) const
void store(IsolateForPointerCompression isolate, Address value, CppHeapPointerTag tag) const
void init(IsolateForSandbox isolate, Tagged< HeapObject > host, Address value, ExternalPointerTag tag)
void init_lazily_initialized()
uint32_t GetContentAsIndexAfterDeserialization(const DisallowGarbageCollection &no_gc)
ExternalPointer_t RawContent
RawContent GetAndClearContentForSerialization(const DisallowGarbageCollection &no_gc)
void ReplaceContentWithIndexForSerialization(const DisallowGarbageCollection &no_gc, uint32_t index)
Address load(IsolateForSandbox isolate)
void RestoreContentAfterSerialization(RawContent content, const DisallowGarbageCollection &no_gc)
void store(IsolateForSandbox isolate, Address value, ExternalPointerTag tag)
void store(Tagged< HeapObjectReference > value) const
Tagged< HeapObjectReference > operator*() const
Tagged< HeapObject > ToHeapObject() const
void StoreHeapObject(Tagged< HeapObject > value) const
Tagged< HeapObjectReference > load(PtrComprCageBase cage_base) const
static Tagged< Object > RawToTagged(PtrComprCageBase cage_base, Address raw)
Address Relaxed_Load_Raw() const
Tagged< MaybeObject > Relaxed_Load() const
void Relaxed_Store(Tagged< MaybeObject > value) const
Tagged< MaybeObject > load() const
Tagged< MaybeObject > operator*() const
void store(Tagged< MaybeObject > value) const
void Release_CompareAndSwap(Tagged< MaybeObject > old, Tagged< MaybeObject > target) const
static Tagged< Object > RawToTagged(PtrComprCageBase cage_base, Address raw)
void Relaxed_Store(Tagged< Object > value) const
Tagged< Object > load() const
Tagged< Object > Relaxed_Load() const
Tagged< Object > operator*() const
bool contains_map_value(Address raw_value) const
Tagged< Map > load_map() const
void store(Tagged< Object > value) const
void store_map(Tagged< Map > map) const
Tagged< Object > Acquire_Load() const
Tagged< Object > Relaxed_CompareAndSwap(Tagged< Object > old, Tagged< Object > target) const
bool Relaxed_ContainsMapValue(Address raw_value) const
Tagged< Object > Release_CompareAndSwap(Tagged< Object > old, Tagged< Object > target) const
Address Relaxed_Load_Raw() const
void Release_Store(Tagged< Object > value) const
Tagged< Object > Relaxed_Load_AllowUnpublished(IsolateForSandbox isolate) const
IndirectPointerHandle Acquire_LoadHandle() const
void Release_StoreHandle(IndirectPointerHandle handle) const
@ kAllowUnpublishedEntries
Tagged< Object > load(IsolateForSandbox isolate) const
IndirectPointerHandle Relaxed_LoadHandle() const
Tagged< Object > Relaxed_Load(IsolateForSandbox isolate) const
void Relaxed_StoreHandle(IndirectPointerHandle handle) const
void Relaxed_Store(Tagged< ExposedTrustedObject > value) const
Tagged< Object > Acquire_Load(IsolateForSandbox isolate) const
void Release_Store(Tagged< ExposedTrustedObject > value) const
Tagged< Object > ResolveHandle(IndirectPointerHandle handle, IsolateForSandbox isolate) const
void store(Tagged< ExposedTrustedObject > value) const
static IsolateGroup * current()
static constexpr Tagged< Smi > zero()
V8_INLINE constexpr StorageType ptr() const
static V8_INLINE constexpr Tagged_t CompressAny(Address tagged)
typename SlotT::TObject TObject
void Relaxed_Store(TObject value) const
#define HAS_STRONG_HEAP_OBJECT_TAG(value)
ZoneVector< RpoNumber > & result
V8_INLINE IndirectHandle< T > handle(Tagged< T > object, Isolate *isolate)
void CopyTagged(Address dst, const Address src, size_t num_tagged)
@ kUnknownIndirectPointerTag
Tagged(T object) -> Tagged< T >
static void WriteMaybeUnalignedValue(Address p, V value)
void CopyImpl(T *dst_ptr, const T *src_ptr, size_t count)
void MemsetTagged(Tagged_t *start, Tagged< MaybeObject > value, size_t counter)
Handle< To > UncheckedCast(Handle< From > value)
uint32_t IndirectPointerHandle
constexpr ExternalPointerHandle kNullExternalPointerHandle
constexpr IndirectPointerHandle kNullIndirectPointerHandle
uint32_t ExternalPointerHandle
uint32_t CppHeapPointerHandle
static V ReadMaybeUnalignedValue(Address p)
static constexpr Address kNullAddress
constexpr CppHeapPointerHandle kNullCppHeapPointerHandle
void MemsetPointer(FullObjectSlot start, Tagged< Object > value, size_t counter)
constexpr uint32_t kCodePointerHandleMarker
void MemsetUint32(uint32_t *dest, uint32_t value, size_t counter)
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
static constexpr RelaxedStoreTag kRelaxedStore
#define DCHECK_NE(v1, v2)
#define DCHECK(condition)