Index: runtime/vm/assembler_arm.cc |
diff --git a/runtime/vm/assembler_arm.cc b/runtime/vm/assembler_arm.cc |
index 7663c38a6e54e363a731f604f344f94b5e5fe9af..bd2a6e711e80de722bd47958bc625c215e515b15 100644 |
--- a/runtime/vm/assembler_arm.cc |
+++ b/runtime/vm/assembler_arm.cc |
@@ -2684,6 +2684,12 @@ void Assembler::Branch(const ExternalLabel* label, Condition cond) { |
} |
+void Assembler::Branch(const StubEntry& stub_entry, Condition cond) { |
+ const ExternalLabel label(stub_entry.EntryPoint()); |
+ Branch(&label, cond); |
+} |
+ |
+ |
void Assembler::BranchPatchable(const ExternalLabel* label) { |
// Use a fixed size code sequence, since a function prologue may be patched |
// with this branch sequence. |
@@ -2694,12 +2700,24 @@ void Assembler::BranchPatchable(const ExternalLabel* label) { |
} |
+void Assembler::BranchPatchable(const StubEntry& stub_entry) { |
+ const ExternalLabel label(stub_entry.EntryPoint()); |
+ BranchPatchable(&label); |
+} |
+ |
+ |
void Assembler::BranchLink(const ExternalLabel* label) { |
LoadImmediate(LR, label->address()); // Target address is never patched. |
blx(LR); // Use blx instruction so that the return branch prediction works. |
} |
+void Assembler::BranchLink(const StubEntry& stub_entry) { |
+ const ExternalLabel label(stub_entry.EntryPoint()); |
+ BranchLink(&label); |
+} |
+ |
+ |
void Assembler::BranchLink(const ExternalLabel* label, Patchability patchable) { |
// Make sure that class CallPattern is able to patch the label referred |
// to by this code sequence. |
@@ -2712,11 +2730,24 @@ void Assembler::BranchLink(const ExternalLabel* label, Patchability patchable) { |
} |
+void Assembler::BranchLink(const StubEntry& stub_entry, |
+ Patchability patchable) { |
+ const ExternalLabel label(stub_entry.EntryPoint()); |
+ BranchLink(&label, patchable); |
+} |
+ |
+ |
void Assembler::BranchLinkPatchable(const ExternalLabel* label) { |
BranchLink(label, kPatchable); |
} |
+void Assembler::BranchLinkPatchable(const StubEntry& stub_entry) { |
+ const ExternalLabel label(stub_entry.EntryPoint()); |
+ BranchLinkPatchable(&label); |
+} |
+ |
+ |
void Assembler::BranchLinkOffset(Register base, int32_t offset) { |
ASSERT(base != PC); |
ASSERT(base != IP); |
@@ -3545,7 +3576,7 @@ void Assembler::Stop(const char* message) { |
PushList((1 << R0) | (1 << IP) | (1 << LR)); // Preserve R0, IP, LR. |
LoadImmediate(R0, reinterpret_cast<int32_t>(message)); |
// PrintStopMessage() preserves all registers. |
- BranchLink(&StubCode::PrintStopMessageLabel()); // Passing message in R0. |
+ BranchLink(&StubCode::PrintStopMessage_entry()->label()); |
PopList((1 << R0) | (1 << IP) | (1 << LR)); // Restore R0, IP, LR. |
} |
// Emit the message address before the svc instruction, so that we can |