[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:
parent
a02eac53fc
commit
e3637a7c0c
@ -184,24 +184,6 @@ Handle<Code> Assembler::relative_code_target_object_handle_at(
|
||||
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) {
|
||||
value_.immediate = immediate;
|
||||
}
|
||||
|
@ -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) {
|
||||
DCHECK(rt.IsValid());
|
||||
if (rt.IsRegister()) {
|
||||
|
@ -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) {
|
||||
WriteUnalignedValue(reinterpret_cast<Address>(pc_), x);
|
||||
pc_ += sizeof(uint32_t);
|
||||
|
@ -288,24 +288,6 @@ Handle<Code> Assembler::relative_code_target_object_handle_at(
|
||||
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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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) {}
|
||||
|
||||
void Assembler::UntrackBranch() {
|
||||
|
@ -278,7 +278,22 @@ class RelocInfo {
|
||||
V8_INLINE void WipeOut();
|
||||
|
||||
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
|
||||
// either is position-relative or movable by the garbage collector.
|
||||
@ -379,7 +394,7 @@ class RelocIterator : public Malloced {
|
||||
explicit RelocIterator(Vector<byte> instructions,
|
||||
Vector<const byte> reloc_info, Address const_pool,
|
||||
int mode_mask = -1);
|
||||
RelocIterator(RelocIterator&&) = default;
|
||||
RelocIterator(RelocIterator&&) V8_NOEXCEPT = default;
|
||||
|
||||
// Iteration
|
||||
bool done() const { return done_; }
|
||||
|
@ -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::Operand(Register rm) : rm_(rm), rmode_(RelocInfo::NONE) {}
|
||||
|
||||
|
@ -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 v8
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user