Index: runtime/vm/assembler_x64.h |
diff --git a/runtime/vm/assembler_x64.h b/runtime/vm/assembler_x64.h |
index c3ea20d4ea4e2b0401522b57438461ab38bc13ec..ba8d36d0fcd3195d9e5f854e184c1ac1f9dedc25 100644 |
--- a/runtime/vm/assembler_x64.h |
+++ b/runtime/vm/assembler_x64.h |
@@ -348,6 +348,12 @@ class Label : public ValueObject { |
}; |
+enum RestorePP { |
+ kRestoreCallerPP, |
+ kKeepCalleePP |
+}; |
+ |
+ |
class Assembler : public ValueObject { |
public: |
explicit Assembler(bool use_far_branches = false); |
@@ -365,7 +371,7 @@ class Assembler : public ValueObject { |
void call(Label* label); |
void call(const ExternalLabel* label); |
- static const intptr_t kCallExternalLabelSize = 7; |
+ static const intptr_t kCallExternalLabelSize = 19; |
void pushq(Register reg); |
void pushq(const Address& address); |
@@ -686,7 +692,6 @@ class Assembler : public ValueObject { |
// Note: verified_mem mode forces far jumps. |
void j(Condition condition, Label* label, bool near = kFarJump); |
- void j(Condition condition, const ExternalLabel* label); |
void jmp(Register reg); |
void jmp(const Address& address); |
@@ -766,11 +771,11 @@ class Assembler : public ValueObject { |
const ExternalLabel* label, |
Patchability patchable, |
Register pp); |
- void JmpPatchable(const ExternalLabel* label, Register pp); |
- void Jmp(const ExternalLabel* label, Register pp); |
- void J(Condition condition, const ExternalLabel* label, Register pp); |
- void CallPatchable(const ExternalLabel* label); |
- void Call(const ExternalLabel* label, Register pp); |
+ void JmpPatchable(const Code& target, Register pp); |
+ void Jmp(const Code& target, Register pp); |
+ void J(Condition condition, const Code& target, Register pp); |
+ void CallPatchable(const Code& target); |
+ void Call(const Code& target, Register pp); |
// Unaware of write barrier (use StoreInto* methods for storing to objects). |
// TODO(koda): Add StackAddress/HeapAddress types to prevent misuse. |
void StoreObject(const Address& dst, const Object& obj, Register pp); |
@@ -831,6 +836,8 @@ class Assembler : public ValueObject { |
void PushRegisters(intptr_t cpu_register_set, intptr_t xmm_register_set); |
void PopRegisters(intptr_t cpu_register_set, intptr_t xmm_register_set); |
+ void CheckCodePointer(); |
+ |
void EnterFrame(intptr_t frame_space); |
void LeaveFrame(); |
void ReserveAlignedFrameSpace(intptr_t frame_space); |
@@ -921,6 +928,7 @@ class Assembler : public ValueObject { |
buffer_.FinalizeInstructions(region); |
} |
+ void RestoreCodePointer(); |
void LoadPoolPointer(Register pp); |
// Set up a Dart frame on entry with a frame pointer and PC information to |
@@ -942,16 +950,13 @@ class Assembler : public ValueObject { |
// ... |
// pushq r15 |
// ..... |
- void EnterDartFrame(intptr_t frame_size); |
- void EnterDartFrameWithInfo(intptr_t frame_size, |
- Register new_pp, Register pc_marker_override); |
- void LeaveDartFrame(); |
+ void EnterDartFrame(intptr_t frame_size, Register new_pp); |
+ void LeaveDartFrame(RestorePP restore_pp = kRestoreCallerPP); |
// Set up a Dart frame for a function compiled for on-stack replacement. |
// The frame layout is a normal Dart frame, but the frame is partially set |
// up on entry (it is the frame of the unoptimized code). |
- void EnterOsrFrame(intptr_t extra_size, |
- Register new_pp, Register pc_marker_override); |
+ void EnterOsrFrame(intptr_t extra_size); |
// Set up a stub frame so that the stack traversal code can easily identify |
// a stub frame. |