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

Unified Diff: src/arm/lithium-codegen-arm.h

Issue 24795002: Thumb2 Backend: Use sp-relative offsets for stack slot operations in Crankshaft Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 3 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 | src/arm/lithium-codegen-arm.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/arm/lithium-codegen-arm.h
diff --git a/src/arm/lithium-codegen-arm.h b/src/arm/lithium-codegen-arm.h
index d0bfcbbb94e102d44f0bde49ffa3464b5b3e5496..e5688dd00939f35ddfd8f0a5f67a3fbcff13bcd7 100644
--- a/src/arm/lithium-codegen-arm.h
+++ b/src/arm/lithium-codegen-arm.h
@@ -64,6 +64,7 @@ class LCodeGen BASE_EMBEDDED {
osr_pc_offset_(-1),
last_lazy_deopt_pc_(0),
frame_is_built_(false),
+ fp_sp_delta_(-1),
safepoints_(info->zone()),
resolver_(this),
expected_safepoint_kind_(Safepoint::kSimple),
@@ -232,15 +233,28 @@ class LCodeGen BASE_EMBEDDED {
RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS
};
+ void SetFpSpDelta(int argument_count);
+
+ void Push(Register src1);
+ void Push(Register src1, Register src2);
+ void Push(Register src1, Register src2, Register src3);
+ void Push(Register src1, Register src2, Register src3, Register src4);
+
+#ifdef DEBUG
+ void CheckFpSpDelta(LInstruction* instr);
+#endif // DEBUG
+
void CallCode(
Handle<Code> code,
RelocInfo::Mode mode,
+ int num_arguments,
LInstruction* instr,
TargetAddressStorageMode storage_mode = CAN_INLINE_TARGET_ADDRESS);
void CallCodeGeneric(
Handle<Code> code,
RelocInfo::Mode mode,
+ int num_arguments,
LInstruction* instr,
SafepointMode safepoint_mode,
TargetAddressStorageMode storage_mode = CAN_INLINE_TARGET_ADDRESS);
@@ -408,6 +422,7 @@ class LCodeGen BASE_EMBEDDED {
int osr_pc_offset_;
int last_lazy_deopt_pc_;
bool frame_is_built_;
+ int fp_sp_delta_;
// Builder that keeps track of safepoints in the code. The table
// itself is emitted at the end of the generated code.
@@ -432,9 +447,12 @@ class LCodeGen BASE_EMBEDDED {
switch (codegen_->expected_safepoint_kind_) {
case Safepoint::kWithRegisters:
codegen_->masm_->PushSafepointRegisters();
- break;
+ codegen_->fp_sp_delta_ += kNumSafepointSavedRegisters * kPointerSize;
+ break;
case Safepoint::kWithRegistersAndDoubles:
codegen_->masm_->PushSafepointRegistersAndDoubles();
+ codegen_->fp_sp_delta_ += kNumSafepointSavedRegisters * kPointerSize
+ + DwVfpRegister::NumAllocatableRegisters() * kDoubleSize;
break;
default:
UNREACHABLE();
@@ -447,9 +465,12 @@ class LCodeGen BASE_EMBEDDED {
switch (kind) {
case Safepoint::kWithRegisters:
codegen_->masm_->PopSafepointRegisters();
+ codegen_->fp_sp_delta_ -= kNumSafepointRegisters * kPointerSize;
break;
case Safepoint::kWithRegistersAndDoubles:
codegen_->masm_->PopSafepointRegistersAndDoubles();
+ codegen_->fp_sp_delta_ -= kNumSafepointSavedRegisters * kPointerSize
+ + DwVfpRegister::NumAllocatableRegisters() * kDoubleSize;
break;
default:
UNREACHABLE();
« no previous file with comments | « no previous file | src/arm/lithium-codegen-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698