[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);
|
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() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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(
|
|||||||
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() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
|||||||
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_; }
|
||||||
|
@ -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() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user