diff options
Diffstat (limited to 'deps/v8/src/x64/assembler-x64-inl.h')
-rw-r--r-- | deps/v8/src/x64/assembler-x64-inl.h | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/deps/v8/src/x64/assembler-x64-inl.h b/deps/v8/src/x64/assembler-x64-inl.h index eef4158f53..3d3608cea7 100644 --- a/deps/v8/src/x64/assembler-x64-inl.h +++ b/deps/v8/src/x64/assembler-x64-inl.h @@ -303,7 +303,8 @@ Address RelocInfo::target_address() { Address RelocInfo::target_address_address() { DCHECK(IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_) || IsWasmCall(rmode_) || - rmode_ == EMBEDDED_OBJECT || rmode_ == EXTERNAL_REFERENCE); + IsEmbeddedObject(rmode_) || IsExternalReference(rmode_) || + IsOffHeapTarget(rmode_)); return reinterpret_cast<Address>(pc_); } @@ -335,12 +336,28 @@ Handle<HeapObject> RelocInfo::target_object_handle(Assembler* origin) { } } +void RelocInfo::set_wasm_code_table_entry(Address target, + ICacheFlushMode icache_flush_mode) { + DCHECK(rmode_ == RelocInfo::WASM_CODE_TABLE_ENTRY); + Memory::Address_at(pc_) = target; + if (icache_flush_mode != SKIP_ICACHE_FLUSH) { + Assembler::FlushICache(pc_, sizeof(Address)); + } +} Address RelocInfo::target_external_reference() { DCHECK(rmode_ == RelocInfo::EXTERNAL_REFERENCE); return Memory::Address_at(pc_); } +void RelocInfo::set_target_external_reference( + Address target, ICacheFlushMode icache_flush_mode) { + DCHECK(rmode_ == RelocInfo::EXTERNAL_REFERENCE); + Memory::Address_at(pc_) = target; + if (icache_flush_mode != SKIP_ICACHE_FLUSH) { + Assembler::FlushICache(pc_, sizeof(Address)); + } +} Address RelocInfo::target_internal_reference() { DCHECK(rmode_ == INTERNAL_REFERENCE); @@ -383,6 +400,11 @@ void RelocInfo::set_target_runtime_entry(Address target, } } +Address RelocInfo::target_off_heap_target() { + DCHECK(IsOffHeapTarget(rmode_)); + return Memory::Address_at(pc_); +} + void RelocInfo::WipeOut() { if (IsEmbeddedObject(rmode_) || IsExternalReference(rmode_) || IsInternalReference(rmode_)) { @@ -410,6 +432,8 @@ void RelocInfo::Visit(ObjectVisitor* visitor) { visitor->VisitInternalReference(host(), this); } else if (RelocInfo::IsRuntimeEntry(mode)) { visitor->VisitRuntimeEntry(host(), this); + } else if (RelocInfo::IsOffHeapTarget(mode)) { + visitor->VisitOffHeapTarget(host(), this); } } |