| Index: runtime/vm/assembler_x64.h
|
| ===================================================================
|
| --- runtime/vm/assembler_x64.h (revision 26436)
|
| +++ runtime/vm/assembler_x64.h (working copy)
|
| @@ -342,7 +342,7 @@
|
| void call(Label* label);
|
| void call(const ExternalLabel* label);
|
|
|
| - static const intptr_t kCallExternalLabelSize = 13;
|
| + static const intptr_t kCallExternalLabelSize = 10;
|
|
|
| void pushq(Register reg);
|
| void pushq(const Address& address);
|
| @@ -652,7 +652,12 @@
|
|
|
| void Drop(intptr_t stack_elements);
|
|
|
| + int32_t AddObject(const Object& obj);
|
| + int32_t AddExternalLabel(const ExternalLabel* label);
|
| + void LoadWordFromPoolOffset(Register dst, int32_t offset);
|
| + void LoadExternalLabel(const ExternalLabel* label);
|
| void LoadObject(Register dst, const Object& object);
|
| + void CallPatchable(const ExternalLabel* label);
|
| void StoreObject(const Address& dst, const Object& obj);
|
| void PushObject(const Object& object);
|
| void CompareObject(Register reg, const Object& object);
|
| @@ -679,7 +684,7 @@
|
| }
|
|
|
| void EnterFrame(intptr_t frame_space);
|
| - void LeaveFrame();
|
| + void LeaveFrame(bool restore_pp = false);
|
| void ReserveAlignedFrameSpace(intptr_t frame_space);
|
|
|
| // Create a frame for calling into runtime that preserves all volatile
|
| @@ -731,6 +736,7 @@
|
| buffer_.FinalizeInstructions(region);
|
| }
|
|
|
| + void LoadPoolPointer();
|
| // Set up a Dart frame on entry with a frame pointer and PC information to
|
| // enable easy access to the RawInstruction object of code corresponding
|
| // to this frame.
|
| @@ -739,6 +745,7 @@
|
| // ret PC
|
| // saved RBP <=== RBP
|
| // pc (used to derive the RawInstruction Object of the dart code)
|
| + // saved PP
|
| // locals space <=== RSP
|
| // .....
|
| // This code sets this up with the sequence:
|
| @@ -746,6 +753,8 @@
|
| // movq rbp, rsp
|
| // call L
|
| // L: <code to adjust saved pc if there is any intrinsification code>
|
| + // ...
|
| + // pushq r15
|
| // .....
|
| void EnterDartFrame(intptr_t frame_size);
|
|
|
| @@ -767,9 +776,9 @@
|
| // movq rbp, rsp
|
| // pushq immediate(0)
|
| // .....
|
| - void EnterStubFrame();
|
| + void EnterStubFrame(bool save_pp = false);
|
|
|
| - // Instruction pattern from entrypoint is used in dart frame prologs
|
| + // Instruction pattern from entrypoint is used in dart frame prologues
|
| // to set up the frame and save a PC which can be used to figure out the
|
| // RawInstruction object corresponding to the code running in the frame.
|
| // entrypoint:
|
| @@ -802,7 +811,7 @@
|
|
|
| private:
|
| AssemblerBuffer buffer_;
|
| - GrowableObjectArray& object_pool_; // Object pool is not used on x64.
|
| + GrowableObjectArray& object_pool_; // Objects and patchable jump targets.
|
| int prologue_offset_;
|
|
|
| class CodeComment : public ZoneAllocated {
|
|
|