Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(304)

Unified Diff: runtime/vm/assembler_x64.h

Issue 22825023: Uses an object pool on x64 (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | runtime/vm/assembler_x64.cc » ('j') | runtime/vm/assembler_x64.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 {
« no previous file with comments | « no previous file | runtime/vm/assembler_x64.cc » ('j') | runtime/vm/assembler_x64.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698