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