@@ -91,11 +91,16 @@ Address V8HeapCompressionScheme::DecompressTaggedSigned(Tagged_t raw_value) {
9191template <typename TOnHeapAddress>
9292Address V8HeapCompressionScheme::DecompressTagged (TOnHeapAddress on_heap_addr,
9393 Tagged_t raw_value) {
94- #if defined(V8_COMPRESS_POINTERS_IN_SHARED_CAGE)
94+ #ifdef V8_COMPRESS_POINTERS
9595 Address cage_base = base ();
96+ #ifdef V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE
97+ DCHECK_WITH_MSG (cage_base != kNullAddress ,
98+ " V8HeapCompressionScheme::base is not initialized for "
99+ " current thread" );
100+ #endif // V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE
96101#else
97102 Address cage_base = GetPtrComprCageBaseAddress (on_heap_addr);
98- #endif
103+ #endif // V8_COMPRESS_POINTERS
99104 Address result = cage_base + static_cast <Address>(raw_value);
100105 V8_ASSUME (static_cast <uint32_t >(result) == raw_value);
101106 return result;
@@ -191,11 +196,16 @@ Address ExternalCodeCompressionScheme::DecompressTaggedSigned(
191196template <typename TOnHeapAddress>
192197Address ExternalCodeCompressionScheme::DecompressTagged (
193198 TOnHeapAddress on_heap_addr, Tagged_t raw_value) {
194- #if defined(V8_COMPRESS_POINTERS_IN_SHARED_CAGE)
199+ #ifdef V8_COMPRESS_POINTERS
195200 Address cage_base = base ();
201+ #ifdef V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE
202+ DCHECK_WITH_MSG (cage_base != kNullAddress ,
203+ " ExternalCodeCompressionScheme::base is not initialized for "
204+ " current thread" );
205+ #endif // V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE
196206#else
197207 Address cage_base = GetPtrComprCageBaseAddress (on_heap_addr);
198- #endif
208+ #endif // V8_COMPRESS_POINTERS
199209 Address result = cage_base + static_cast <Address>(raw_value);
200210 V8_ASSUME (static_cast <uint32_t >(result) == raw_value);
201211 return result;
@@ -275,6 +285,19 @@ V8_INLINE PtrComprCageBase GetPtrComprCageBase(Tagged<HeapObject> object) {
275285 return GetPtrComprCageBaseFromOnHeapAddress (object.ptr ());
276286}
277287
288+ #ifdef V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE
289+
290+ PtrComprCageAccessScope::PtrComprCageAccessScope (Isolate* isolate)
291+ : cage_base_(V8HeapCompressionScheme::base()) {
292+ V8HeapCompressionScheme::InitBase (isolate->cage_base ());
293+ }
294+
295+ PtrComprCageAccessScope::~PtrComprCageAccessScope () {
296+ V8HeapCompressionScheme::InitBase (cage_base_);
297+ }
298+
299+ #endif // V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE
300+
278301} // namespace internal
279302} // namespace v8
280303
0 commit comments