5#ifndef V8_OBJECTS_COMPRESSED_SLOTS_INL_H_
6#define V8_OBJECTS_COMPRESSED_SLOTS_INL_H_
8#ifdef V8_COMPRESS_POINTERS
24 : SlotBase(reinterpret_cast<
Address>(&object->
ptr_)) {}
26bool CompressedObjectSlot::contains_map_value(Address raw_value)
const {
29 return static_cast<uint32_t
>(
value) ==
30 static_cast<uint32_t
>(
static_cast<Tagged_t>(raw_value));
33bool CompressedObjectSlot::Relaxed_ContainsMapValue(Address raw_value)
const {
36 return static_cast<uint32_t
>(
value) ==
37 static_cast<uint32_t
>(
static_cast<Tagged_t>(raw_value));
40Tagged<Object> CompressedObjectSlot::operator*()
const {
42 return Tagged<Object>(TCompressionScheme::DecompressTagged(address(), value));
45Tagged<Object> CompressedObjectSlot::load()
const {
47 return Tagged<Object>(TCompressionScheme::DecompressTagged(address(), value));
50Tagged<Object> CompressedObjectSlot::load(PtrComprCageBase cage_base)
const {
52 return Tagged<Object>(TCompressionScheme::DecompressTagged(cage_base, value));
55void CompressedObjectSlot::store(Tagged<Object> value)
const {
56 *location() = TCompressionScheme::CompressObject(value.ptr());
59void CompressedObjectSlot::store_map(Tagged<Map> map)
const {
66Tagged<Map> CompressedObjectSlot::load_map()
const {
73Tagged<Object> CompressedObjectSlot::Acquire_Load()
const {
75 return Tagged<Object>(TCompressionScheme::DecompressTagged(address(), value));
78Tagged<Object> CompressedObjectSlot::Relaxed_Load()
const {
80 return Tagged<Object>(TCompressionScheme::DecompressTagged(address(), value));
83Tagged<Object> CompressedObjectSlot::Relaxed_Load(
84 PtrComprCageBase cage_base)
const {
86 return Tagged<Object>(TCompressionScheme::DecompressTagged(cage_base, value));
89Tagged_t CompressedObjectSlot::Relaxed_Load_Raw()
const {
90 return static_cast<Tagged_t>(AsAtomicTagged::Relaxed_Load(location()));
94Tagged<Object> CompressedObjectSlot::RawToTagged(PtrComprCageBase cage_base,
96 return Tagged<Object>(TCompressionScheme::DecompressTagged(cage_base, raw));
99void CompressedObjectSlot::Relaxed_Store(Tagged<Object> value)
const {
100 Tagged_t ptr = TCompressionScheme::CompressObject(value.ptr());
101 AsAtomicTagged::Relaxed_Store(location(), ptr);
104void CompressedObjectSlot::Release_Store(Tagged<Object> value)
const {
105 Tagged_t ptr = TCompressionScheme::CompressObject(value.ptr());
106 AsAtomicTagged::Release_Store(location(), ptr);
109Tagged<Object> CompressedObjectSlot::Release_CompareAndSwap(
110 Tagged<Object> old, Tagged<Object> target)
const {
111 Tagged_t old_ptr = TCompressionScheme::CompressObject(old.ptr());
112 Tagged_t target_ptr = TCompressionScheme::CompressObject(target.ptr());
114 AsAtomicTagged::Release_CompareAndSwap(location(), old_ptr, target_ptr);
115 return Tagged<Object>(
116 TCompressionScheme::DecompressTagged(address(),
result));
123Tagged<MaybeObject> CompressedMaybeObjectSlot::operator*()
const {
125 return Tagged<MaybeObject>(
126 TCompressionScheme::DecompressTagged(address(), value));
129Tagged<MaybeObject> CompressedMaybeObjectSlot::load()
const {
131 return Tagged<MaybeObject>(
132 TCompressionScheme::DecompressTagged(address(), value));
135Tagged<MaybeObject> CompressedMaybeObjectSlot::load(
136 PtrComprCageBase cage_base)
const {
138 return Tagged<MaybeObject>(
139 TCompressionScheme::DecompressTagged(cage_base, value));
142void CompressedMaybeObjectSlot::store(Tagged<MaybeObject> value)
const {
143 *location() = TCompressionScheme::CompressObject(value.ptr());
146Tagged<MaybeObject> CompressedMaybeObjectSlot::Relaxed_Load()
const {
148 return Tagged<MaybeObject>(
149 TCompressionScheme::DecompressTagged(address(), value));
152Tagged<MaybeObject> CompressedMaybeObjectSlot::Relaxed_Load(
153 PtrComprCageBase cage_base)
const {
155 return Tagged<MaybeObject>(
156 TCompressionScheme::DecompressTagged(cage_base, value));
159Tagged_t CompressedMaybeObjectSlot::Relaxed_Load_Raw()
const {
160 return static_cast<Tagged_t>(AsAtomicTagged::Relaxed_Load(location()));
164Tagged<Object> CompressedMaybeObjectSlot::RawToTagged(
165 PtrComprCageBase cage_base, Tagged_t raw) {
166 return Tagged<Object>(TCompressionScheme::DecompressTagged(cage_base, raw));
169void CompressedMaybeObjectSlot::Relaxed_Store(Tagged<MaybeObject> value)
const {
170 Tagged_t ptr = TCompressionScheme::CompressObject(value.ptr());
171 AsAtomicTagged::Relaxed_Store(location(), ptr);
174void CompressedMaybeObjectSlot::Release_CompareAndSwap(
175 Tagged<MaybeObject> old, Tagged<MaybeObject> target)
const {
176 Tagged_t old_ptr = TCompressionScheme::CompressObject(old.ptr());
177 Tagged_t target_ptr = TCompressionScheme::CompressObject(target.ptr());
178 AsAtomicTagged::Release_CompareAndSwap(location(), old_ptr, target_ptr);
185Tagged<HeapObjectReference> CompressedHeapObjectSlot::operator*()
const {
187 return Cast<HeapObjectReference>(Tagged<MaybeObject>(
188 TCompressionScheme::DecompressTagged(address(), value)));
191Tagged<HeapObjectReference> CompressedHeapObjectSlot::load(
192 PtrComprCageBase cage_base)
const {
194 return Cast<HeapObjectReference>(Tagged<MaybeObject>(
195 TCompressionScheme::DecompressTagged(cage_base, value)));
198void CompressedHeapObjectSlot::store(Tagged<HeapObjectReference> value)
const {
199 *location() = TCompressionScheme::CompressObject(value.ptr());
202Tagged<HeapObject> CompressedHeapObjectSlot::ToHeapObject()
const {
205 return Cast<HeapObject>(
206 Tagged<Object>(TCompressionScheme::DecompressTagged(address(), value)));
209void CompressedHeapObjectSlot::StoreHeapObject(Tagged<HeapObject> value)
const {
210 *location() = TCompressionScheme::CompressObject(value.ptr());
217template <
typename CompressionScheme,
typename TObject,
typename Sub
class>
218TObject OffHeapCompressedObjectSlotBase<CompressionScheme, TObject,
219 Subclass>::load()
const {
220 Tagged_t value = *TSlotBase::location();
222 CompressionScheme::DecompressTagged(TSlotBase::address(), value));
225template <
typename CompressionScheme,
typename TObject,
typename Sub
class>
227OffHeapCompressedObjectSlotBase<CompressionScheme, TObject, Subclass>::load(
228 PtrComprCageBase cage_base)
const {
229 Tagged_t value = *TSlotBase::location();
230 return TObject(CompressionScheme::DecompressTagged(cage_base, value));
233template <
typename CompressionScheme,
typename TObject,
typename Sub
class>
234void OffHeapCompressedObjectSlotBase<CompressionScheme, TObject,
235 Subclass>
::store(TObject value)
const {
236 *TSlotBase::location() = CompressionScheme::CompressObject(value.ptr());
239template <
typename CompressionScheme,
typename TObject,
typename Sub
class>
240TObject OffHeapCompressedObjectSlotBase<CompressionScheme, TObject,
241 Subclass>::Relaxed_Load()
const {
242 AtomicTagged_t value = AsAtomicTagged::Relaxed_Load(TSlotBase::location());
244 CompressionScheme::DecompressTagged(TSlotBase::address(), value));
247template <
typename CompressionScheme,
typename TObject,
typename Sub
class>
248TObject OffHeapCompressedObjectSlotBase<CompressionScheme, TObject, Subclass>::
249 Relaxed_Load(PtrComprCageBase cage_base)
const {
250 AtomicTagged_t value = AsAtomicTagged::Relaxed_Load(TSlotBase::location());
251 return TObject(CompressionScheme::DecompressTagged(cage_base, value));
254template <
typename CompressionScheme,
typename TObject,
typename Sub
class>
255Tagged_t OffHeapCompressedObjectSlotBase<CompressionScheme, TObject,
256 Subclass>::Relaxed_Load_Raw()
const {
258 AsAtomicTagged::Relaxed_Load(TSlotBase::location()));
262template <
typename CompressionScheme,
typename TObject,
typename Sub
class>
263Tagged<Object> OffHeapCompressedObjectSlotBase<
264 CompressionScheme, TObject,
265 Subclass>::RawToTagged(PtrComprCageBase cage_base, Tagged_t raw) {
266 return Tagged<Object>(CompressionScheme::DecompressTagged(cage_base, raw));
269template <
typename CompressionScheme,
typename TObject,
typename Sub
class>
270TObject OffHeapCompressedObjectSlotBase<CompressionScheme, TObject,
271 Subclass>::Acquire_Load()
const {
272 AtomicTagged_t value = AsAtomicTagged::Acquire_Load(TSlotBase::location());
274 CompressionScheme::DecompressTagged(TSlotBase::address(), value));
277template <
typename CompressionScheme,
typename TObject,
typename Sub
class>
278TObject OffHeapCompressedObjectSlotBase<CompressionScheme, TObject, Subclass>::
279 Acquire_Load(PtrComprCageBase cage_base)
const {
280 AtomicTagged_t value = AsAtomicTagged::Acquire_Load(TSlotBase::location());
281 return TObject(CompressionScheme::DecompressTagged(cage_base, value));
284template <
typename CompressionScheme,
typename TObject,
typename Sub
class>
285void OffHeapCompressedObjectSlotBase<
286 CompressionScheme, TObject, Subclass>::Relaxed_Store(TObject value)
const {
287 Tagged_t ptr = CompressionScheme::CompressObject(value.ptr());
288 AsAtomicTagged::Relaxed_Store(TSlotBase::location(), ptr);
291template <
typename CompressionScheme,
typename TObject,
typename Sub
class>
292void OffHeapCompressedObjectSlotBase<
293 CompressionScheme, TObject, Subclass>::Release_Store(TObject value)
const {
294 Tagged_t ptr = CompressionScheme::CompressObject(value.ptr());
295 AsAtomicTagged::Release_Store(TSlotBase::location(), ptr);
298template <
typename CompressionScheme,
typename TObject,
typename Sub
class>
299void OffHeapCompressedObjectSlotBase<CompressionScheme, TObject, Subclass>::
300 Release_CompareAndSwap(TObject old, TObject target)
const {
301 Tagged_t old_ptr = CompressionScheme::CompressObject(old.ptr());
302 Tagged_t target_ptr = CompressionScheme::CompressObject(target.ptr());
303 AsAtomicTagged::Release_CompareAndSwap(TSlotBase::location(), old_ptr,
#define V8_MAP_PACKING_BOOL
#define HAS_STRONG_HEAP_OBJECT_TAG(value)
too high values may cause the compiler to set high thresholds for inlining to as much as possible avoid inlined allocation of objects that cannot escape trace load stores from virtual maglev objects use TurboFan fast string builder analyze liveness of environment slots and zap dead values trace TurboFan load elimination emit data about basic block usage in builtins to this enable builtin reordering when run mksnapshot flag for emit warnings when applying builtin profile data verify register allocation in TurboFan randomly schedule instructions to stress dependency tracking enable store store elimination in TurboFan rewrite far to near simulate GC compiler thread race related to allow float parameters to be passed in simulator mode JS Wasm Run additional turbo_optimize_inlined_js_wasm_wrappers enable experimental feedback collection in generic lowering enable Turboshaft s WasmLoadElimination enable Turboshaft s low level load elimination for JS enable Turboshaft s escape analysis for string concatenation use enable Turbolev features that we want to ship in the not too far future trace individual Turboshaft reduction steps trace intermediate Turboshaft reduction steps invocation count threshold for early optimization Enables optimizations which favor memory size over execution speed Enables sampling allocation profiler with X as a sample interval min size of a semi the new space consists of two semi spaces max size of the Collect garbage after Collect garbage after keeps maps alive for< n > old space garbage collections print one detailed trace line in allocation gc speed threshold for starting incremental marking via a task in percent of available threshold for starting incremental marking immediately in percent of available Use a single schedule for determining a marking schedule between JS and C objects schedules the minor GC task with kUserVisible priority max worker number of concurrent for NumberOfWorkerThreads start background threads that allocate memory concurrent_array_buffer_sweeping use parallel threads to clear weak refs in the atomic pause trace progress of the incremental marking trace object counts and memory usage report a tick only when allocated zone memory changes by this amount TracingFlags::gc_stats store(v8::tracing::TracingCategoryObserver::ENABLED_BY_NATIVE)) DEFINE_GENERIC_IMPLICATION(trace_gc_object_stats
ZoneVector< RpoNumber > & result
Atomic8 Relaxed_Load(volatile const Atomic8 *ptr)
base::AtomicWord AtomicTagged_t
#define DCHECK(condition)
std::unique_ptr< ValueMirror > value