Commit e3637a7c authored by Sigurd Schneider's avatar Sigurd Schneider Committed by Commit Bot

[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: 's avatarMichael Starzinger <mstarzinger@chromium.org>
Cr-Commit-Position: refs/heads/master@{#59423}
parent a02eac53
...@@ -184,24 +184,6 @@ Handle<Code> Assembler::relative_code_target_object_handle_at( ...@@ -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;
} }
......
...@@ -765,24 +765,6 @@ void RelocInfo::WipeOut() { ...@@ -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()) {
......
...@@ -170,24 +170,6 @@ void RelocInfo::WipeOut() { ...@@ -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);
......
...@@ -288,24 +288,6 @@ Handle<Code> Assembler::relative_code_target_object_handle_at( ...@@ -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.
......
...@@ -237,25 +237,6 @@ void RelocInfo::WipeOut() { ...@@ -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.
......
...@@ -230,25 +230,6 @@ void RelocInfo::WipeOut() { ...@@ -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() {
......
...@@ -278,7 +278,22 @@ class RelocInfo { ...@@ -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 { ...@@ -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_; }
......
...@@ -215,24 +215,6 @@ void RelocInfo::WipeOut() { ...@@ -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) {}
......
...@@ -395,24 +395,6 @@ void RelocInfo::WipeOut() { ...@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment