Index: runtime/vm/assembler_arm64.h |
diff --git a/runtime/vm/assembler_arm64.h b/runtime/vm/assembler_arm64.h |
index 6a70ff884b8f2de210d5bd3b237e943235e6ef11..9aff4ddf8e9a57825a2722a050cbfa7069a9d302 100644 |
--- a/runtime/vm/assembler_arm64.h |
+++ b/runtime/vm/assembler_arm64.h |
@@ -1152,11 +1152,11 @@ class Assembler : public ValueObject { |
add(TMP, PP, Operand(kHeapObjectTag)); |
str(TMP, Address(SP, -1 * kWordSize, Address::PreIndex)); |
} |
- void TagAndPushPPAndPcMarker(Register pc_marker_reg) { |
- ASSERT(pc_marker_reg != TMP2); |
+ void TagAndPushPPAndPcMarker() { |
+ COMPILE_ASSERT(CODE_REG != TMP2); |
// Add the heap object tag back to PP before putting it on the stack. |
add(TMP2, PP, Operand(kHeapObjectTag)); |
- stp(TMP2, pc_marker_reg, |
+ stp(TMP2, CODE_REG, |
Address(SP, -2 * kWordSize, Address::PairPreIndex)); |
} |
void PopAndUntagPP() { |
@@ -1198,14 +1198,14 @@ class Assembler : public ValueObject { |
LslImmediate(dst, src, kSmiTagSize); |
} |
- void Branch(const StubEntry& stub_entry); |
+ void Branch(const StubEntry& stub_entry, |
+ Register pp, |
+ Patchability patchable = kNotPatchable); |
void BranchPatchable(const StubEntry& stub_entry); |
- void BranchLink(const ExternalLabel* label); |
- void BranchLink(const StubEntry& stub_entry); |
+ void BranchLink(const StubEntry& stub_entry, |
+ Patchability patchable = kNotPatchable); |
- // BranchLinkPatchable must be a fixed-length sequence so we can patch it |
- // with the debugger. |
void BranchLinkPatchable(const StubEntry& stub_entry); |
// Macros accepting a pp Register argument may attempt to load values from |
@@ -1283,8 +1283,6 @@ class Assembler : public ValueObject { |
constant_pool_allowed_ = b; |
} |
- void LoadWordFromPoolOffset(Register dst, uint32_t offset); |
- void LoadWordFromPoolOffsetFixed(Register dst, uint32_t offset); |
intptr_t FindImmediate(int64_t imm); |
bool CanLoadFromObjectPool(const Object& object) const; |
void LoadExternalLabel(Register dst, const ExternalLabel* label); |
@@ -1340,9 +1338,12 @@ class Assembler : public ValueObject { |
sub(CSP, CSP, Operand(reserved_space)); |
} |
+ void CheckCodePointer(); |
+ void RestoreCodePointer(); |
+ |
void EnterDartFrame(intptr_t frame_size, Register new_pp = kNoRegister); |
void EnterOsrFrame(intptr_t extra_size, Register new_pp); |
- void LeaveDartFrame(); |
+ void LeaveDartFrame(RestorePP restore_pp = kRestoreCallerPP); |
void EnterCallRuntimeFrame(intptr_t frame_size); |
void LeaveCallRuntimeFrame(); |
@@ -1426,9 +1427,8 @@ class Assembler : public ValueObject { |
bool constant_pool_allowed_; |
- void Branch(const ExternalLabel* label); |
- void BranchPatchable(const ExternalLabel* label); |
- void BranchLinkPatchable(const ExternalLabel* label); |
+ void LoadWordFromPoolOffset(Register dst, uint32_t offset, Register pp = PP); |
+ void LoadWordFromPoolOffsetFixed(Register dst, uint32_t offset); |
void LoadObjectHelper(Register dst, const Object& obj, bool is_unique); |