| 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.
|
|
|