[assembler] Move RelocInfo::Visit to reloc-info.h

This unifies the RelocInfo::Visit method across architectures.

Bug: v8:8562
Change-Id: I36fdfb2f456aebb4d69977bb84727c9b49b22f69
Reviewed-on: https://chromium-review.googlesource.com/c/1456106
Commit-Queue: Sigurd Schneider <sigurds@chromium.org>
Reviewed-by: Michael Starzinger <mstarzinger@chromium.org>
Cr-Commit-Position: refs/heads/master@{#59423}
This commit is contained in:
Sigurd Schneider 2019-02-06 15:54:44 +01:00 committed by Commit Bot
parent a02eac53fc
commit e3637a7c0c
9 changed files with 17 additions and 148 deletions

View File

@ -184,24 +184,6 @@ Handle<Code> Assembler::relative_code_target_object_handle_at(
return GetCodeTarget(code_target_index); return GetCodeTarget(code_target_index);
} }
template <typename ObjectVisitor>
void RelocInfo::Visit(ObjectVisitor* visitor) {
RelocInfo::Mode mode = rmode();
if (mode == RelocInfo::EMBEDDED_OBJECT) {
visitor->VisitEmbeddedPointer(host(), this);
} else if (RelocInfo::IsCodeTargetMode(mode)) {
visitor->VisitCodeTarget(host(), this);
} else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
visitor->VisitExternalReference(host(), this);
} else if (mode == RelocInfo::INTERNAL_REFERENCE) {
visitor->VisitInternalReference(host(), this);
} else if (RelocInfo::IsRuntimeEntry(mode)) {
visitor->VisitRuntimeEntry(host(), this);
} else if (RelocInfo::IsOffHeapTarget(mode)) {
visitor->VisitOffHeapTarget(host(), this);
}
}
Operand::Operand(int32_t immediate, RelocInfo::Mode rmode) : rmode_(rmode) { Operand::Operand(int32_t immediate, RelocInfo::Mode rmode) : rmode_(rmode) {
value_.immediate = immediate; value_.immediate = immediate;
} }

View File

@ -765,24 +765,6 @@ void RelocInfo::WipeOut() {
} }
} }
template <typename ObjectVisitor>
void RelocInfo::Visit(ObjectVisitor* visitor) {
RelocInfo::Mode mode = rmode();
if (mode == RelocInfo::EMBEDDED_OBJECT) {
visitor->VisitEmbeddedPointer(host(), this);
} else if (RelocInfo::IsCodeTargetMode(mode)) {
visitor->VisitCodeTarget(host(), this);
} else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
visitor->VisitExternalReference(host(), this);
} else if (mode == RelocInfo::INTERNAL_REFERENCE) {
visitor->VisitInternalReference(host(), this);
} else if (RelocInfo::IsRuntimeEntry(mode)) {
visitor->VisitRuntimeEntry(host(), this);
} else if (RelocInfo::IsOffHeapTarget(mode)) {
visitor->VisitOffHeapTarget(host(), this);
}
}
LoadStoreOp Assembler::LoadOpFor(const CPURegister& rt) { LoadStoreOp Assembler::LoadOpFor(const CPURegister& rt) {
DCHECK(rt.IsValid()); DCHECK(rt.IsValid());
if (rt.IsRegister()) { if (rt.IsRegister()) {

View File

@ -170,24 +170,6 @@ void RelocInfo::WipeOut() {
} }
} }
template <typename ObjectVisitor>
void RelocInfo::Visit(ObjectVisitor* visitor) {
RelocInfo::Mode mode = rmode();
if (mode == RelocInfo::EMBEDDED_OBJECT) {
visitor->VisitEmbeddedPointer(host(), this);
} else if (RelocInfo::IsCodeTargetMode(mode)) {
visitor->VisitCodeTarget(host(), this);
} else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
visitor->VisitExternalReference(host(), this);
} else if (mode == RelocInfo::INTERNAL_REFERENCE) {
visitor->VisitInternalReference(host(), this);
} else if (IsRuntimeEntry(mode)) {
visitor->VisitRuntimeEntry(host(), this);
} else if (RelocInfo::IsOffHeapTarget(mode)) {
visitor->VisitOffHeapTarget(host(), this);
}
}
void Assembler::emit(uint32_t x) { void Assembler::emit(uint32_t x) {
WriteUnalignedValue(reinterpret_cast<Address>(pc_), x); WriteUnalignedValue(reinterpret_cast<Address>(pc_), x);
pc_ += sizeof(uint32_t); pc_ += sizeof(uint32_t);

View File

@ -288,24 +288,6 @@ Handle<Code> Assembler::relative_code_target_object_handle_at(
return GetCodeTarget(code_target_index); return GetCodeTarget(code_target_index);
} }
template <typename ObjectVisitor>
void RelocInfo::Visit(ObjectVisitor* visitor) {
Mode mode = rmode();
if (IsEmbeddedObject(mode)) {
visitor->VisitEmbeddedPointer(host(), this);
} else if (IsCodeTargetMode(mode)) {
visitor->VisitCodeTarget(host(), this);
} else if (IsExternalReference(mode)) {
visitor->VisitExternalReference(host(), this);
} else if (IsInternalReference(mode) || IsInternalReferenceEncoded(mode)) {
visitor->VisitInternalReference(host(), this);
} else if (IsRuntimeEntry(mode)) {
visitor->VisitRuntimeEntry(host(), this);
} else if (IsOffHeapTarget(mode)) {
visitor->VisitOffHeapTarget(host(), this);
}
}
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// Assembler. // Assembler.

View File

@ -237,25 +237,6 @@ void RelocInfo::WipeOut() {
} }
} }
template <typename ObjectVisitor>
void RelocInfo::Visit(ObjectVisitor* visitor) {
RelocInfo::Mode mode = rmode();
if (mode == RelocInfo::EMBEDDED_OBJECT) {
visitor->VisitEmbeddedPointer(host(), this);
} else if (RelocInfo::IsCodeTargetMode(mode)) {
visitor->VisitCodeTarget(host(), this);
} else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
visitor->VisitExternalReference(host(), this);
} else if (mode == RelocInfo::INTERNAL_REFERENCE ||
mode == RelocInfo::INTERNAL_REFERENCE_ENCODED) {
visitor->VisitInternalReference(host(), this);
} else if (RelocInfo::IsRuntimeEntry(mode)) {
visitor->VisitRuntimeEntry(host(), this);
} else if (RelocInfo::IsOffHeapTarget(mode)) {
visitor->VisitOffHeapTarget(host(), this);
}
}
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// Assembler. // Assembler.

View File

@ -230,25 +230,6 @@ void RelocInfo::WipeOut() {
} }
} }
template <typename ObjectVisitor>
void RelocInfo::Visit(ObjectVisitor* visitor) {
RelocInfo::Mode mode = rmode();
if (mode == RelocInfo::EMBEDDED_OBJECT) {
visitor->VisitEmbeddedPointer(host(), this);
} else if (RelocInfo::IsCodeTargetMode(mode)) {
visitor->VisitCodeTarget(host(), this);
} else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
visitor->VisitExternalReference(host(), this);
} else if (mode == RelocInfo::INTERNAL_REFERENCE ||
mode == RelocInfo::INTERNAL_REFERENCE_ENCODED) {
visitor->VisitInternalReference(host(), this);
} else if (IsRuntimeEntry(mode)) {
visitor->VisitRuntimeEntry(host(), this);
} else if (RelocInfo::IsOffHeapTarget(mode)) {
visitor->VisitOffHeapTarget(host(), this);
}
}
Operand::Operand(Register rm) : rm_(rm), rmode_(RelocInfo::NONE) {} Operand::Operand(Register rm) : rm_(rm), rmode_(RelocInfo::NONE) {}
void Assembler::UntrackBranch() { void Assembler::UntrackBranch() {

View File

@ -278,7 +278,22 @@ class RelocInfo {
V8_INLINE void WipeOut(); V8_INLINE void WipeOut();
template <typename ObjectVisitor> template <typename ObjectVisitor>
inline void Visit(ObjectVisitor* v); void Visit(ObjectVisitor* visitor) {
Mode mode = rmode();
if (IsEmbeddedObject(mode)) {
visitor->VisitEmbeddedPointer(host(), this);
} else if (IsCodeTargetMode(mode)) {
visitor->VisitCodeTarget(host(), this);
} else if (IsExternalReference(mode)) {
visitor->VisitExternalReference(host(), this);
} else if (IsInternalReference(mode) || IsInternalReferenceEncoded(mode)) {
visitor->VisitInternalReference(host(), this);
} else if (IsRuntimeEntry(mode)) {
visitor->VisitRuntimeEntry(host(), this);
} else if (IsOffHeapTarget(mode)) {
visitor->VisitOffHeapTarget(host(), this);
}
}
// Check whether the given code contains relocation information that // Check whether the given code contains relocation information that
// either is position-relative or movable by the garbage collector. // either is position-relative or movable by the garbage collector.
@ -379,7 +394,7 @@ class RelocIterator : public Malloced {
explicit RelocIterator(Vector<byte> instructions, explicit RelocIterator(Vector<byte> instructions,
Vector<const byte> reloc_info, Address const_pool, Vector<const byte> reloc_info, Address const_pool,
int mode_mask = -1); int mode_mask = -1);
RelocIterator(RelocIterator&&) = default; RelocIterator(RelocIterator&&) V8_NOEXCEPT = default;
// Iteration // Iteration
bool done() const { return done_; } bool done() const { return done_; }

View File

@ -215,24 +215,6 @@ void RelocInfo::WipeOut() {
} }
} }
template <typename ObjectVisitor>
void RelocInfo::Visit(ObjectVisitor* visitor) {
RelocInfo::Mode mode = rmode();
if (mode == RelocInfo::EMBEDDED_OBJECT) {
visitor->VisitEmbeddedPointer(host(), this);
} else if (RelocInfo::IsCodeTargetMode(mode)) {
visitor->VisitCodeTarget(host(), this);
} else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
visitor->VisitExternalReference(host(), this);
} else if (mode == RelocInfo::INTERNAL_REFERENCE) {
visitor->VisitInternalReference(host(), this);
} else if (IsRuntimeEntry(mode)) {
visitor->VisitRuntimeEntry(host(), this);
} else if (RelocInfo::IsOffHeapTarget(mode)) {
visitor->VisitOffHeapTarget(host(), this);
}
}
// Operand constructors // Operand constructors
Operand::Operand(Register rm) : rm_(rm), rmode_(RelocInfo::NONE) {} Operand::Operand(Register rm) : rm_(rm), rmode_(RelocInfo::NONE) {}

View File

@ -395,24 +395,6 @@ void RelocInfo::WipeOut() {
} }
} }
template <typename ObjectVisitor>
void RelocInfo::Visit(ObjectVisitor* visitor) {
RelocInfo::Mode mode = rmode();
if (mode == RelocInfo::EMBEDDED_OBJECT) {
visitor->VisitEmbeddedPointer(host(), this);
} else if (RelocInfo::IsCodeTargetMode(mode)) {
visitor->VisitCodeTarget(host(), this);
} else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
visitor->VisitExternalReference(host(), this);
} else if (mode == RelocInfo::INTERNAL_REFERENCE) {
visitor->VisitInternalReference(host(), this);
} else if (RelocInfo::IsRuntimeEntry(mode)) {
visitor->VisitRuntimeEntry(host(), this);
} else if (RelocInfo::IsOffHeapTarget(mode)) {
visitor->VisitOffHeapTarget(host(), this);
}
}
} // namespace internal } // namespace internal
} // namespace v8 } // namespace v8