[turbofan] Simplifying handling of callee-cleanup stack area.

R=danno@chromium.org
BUG=

Review URL: https://codereview.chromium.org/1269913002

Cr-Commit-Position: refs/heads/master@{#29957}
This commit is contained in:
titzer 2015-07-31 08:18:34 -07:00 committed by Commit bot
parent 1a5751f9b3
commit 44bfb4b57e
12 changed files with 25 additions and 52 deletions

View File

@ -1049,11 +1049,7 @@ void CodeGenerator::AssembleReturn() {
} else {
__ bind(&return_label_);
__ LeaveFrame(StackFrame::MANUAL);
int pop_count = descriptor->IsJSFunctionCall()
? static_cast<int>(descriptor->JSParameterCount())
: (info()->IsStub()
? info()->code_stub()->GetStackParameterCount()
: 0);
int pop_count = static_cast<int>(descriptor->StackParameterCount());
if (pop_count != 0) {
__ Drop(pop_count);
}

View File

@ -1178,11 +1178,7 @@ void CodeGenerator::AssembleReturn() {
__ Bind(&return_label_);
__ Mov(jssp, fp);
__ Pop(fp, lr);
int pop_count = descriptor->IsJSFunctionCall()
? static_cast<int>(descriptor->JSParameterCount())
: (info()->IsStub()
? info()->code_stub()->GetStackParameterCount()
: 0);
int pop_count = static_cast<int>(descriptor->StackParameterCount());
if (pop_count != 0) {
__ Drop(pop_count);
}

View File

@ -233,7 +233,7 @@ CallDescriptor* Linkage::GetSimplifiedCDescriptor(
target_loc, // target location
msig, // machine_sig
locations.Build(), // location_sig
0, // js_parameter_count
0, // stack_parameter_count
Operator::kNoProperties, // properties
kCalleeSaveRegisters, // callee-saved registers
kCalleeSaveFPRegisters, // callee-saved fp regs

View File

@ -1340,11 +1340,7 @@ void CodeGenerator::AssembleReturn() {
__ bind(&return_label_);
__ mov(esp, ebp); // Move stack pointer back to frame pointer.
__ pop(ebp); // Pop caller's frame pointer.
int pop_count = descriptor->IsJSFunctionCall()
? static_cast<int>(descriptor->JSParameterCount())
: (info()->IsStub()
? info()->code_stub()->GetStackParameterCount()
: 0);
int pop_count = static_cast<int>(descriptor->StackParameterCount());
if (pop_count == 0) {
__ ret(0);
} else {

View File

@ -67,7 +67,7 @@ class LinkageHelper {
target_loc, // target location
types.Build(), // machine_sig
locations.Build(), // location_sig
js_parameter_count, // js_parameter_count
js_parameter_count, // stack_parameter_count
Operator::kNoProperties, // properties
kNoCalleeSaved, // callee-saved
kNoCalleeSaved, // callee-saved fp
@ -129,7 +129,7 @@ class LinkageHelper {
target_loc, // target location
types.Build(), // machine_sig
locations.Build(), // location_sig
js_parameter_count, // js_parameter_count
js_parameter_count, // stack_parameter_count
properties, // properties
kNoCalleeSaved, // callee-saved
kNoCalleeSaved, // callee-saved fp
@ -189,7 +189,7 @@ class LinkageHelper {
target_loc, // target location
types.Build(), // machine_sig
locations.Build(), // location_sig
js_parameter_count, // js_parameter_count
stack_parameter_count, // stack_parameter_count
properties, // properties
kNoCalleeSaved, // callee-saved registers
kNoCalleeSaved, // callee-saved fp
@ -221,7 +221,7 @@ class LinkageHelper {
target_loc, // target location
types.Build(), // machine_sig
locations.Build(), // location_sig
0, // js_parameter_count
0, // stack_parameter_count
Operator::kNoProperties, // properties
kNoCalleeSaved, // callee-saved registers
kNoCalleeSaved, // callee-saved fp regs

View File

@ -127,7 +127,7 @@ class CallDescriptor final : public ZoneObject {
CallDescriptor(Kind kind, MachineType target_type, LinkageLocation target_loc,
const MachineSignature* machine_sig,
LocationSignature* location_sig, size_t js_param_count,
LocationSignature* location_sig, size_t stack_param_count,
Operator::Properties properties,
RegList callee_saved_registers,
RegList callee_saved_fp_registers, Flags flags,
@ -137,7 +137,7 @@ class CallDescriptor final : public ZoneObject {
target_loc_(target_loc),
machine_sig_(machine_sig),
location_sig_(location_sig),
js_param_count_(js_param_count),
stack_param_count_(stack_param_count),
properties_(properties),
callee_saved_registers_(callee_saved_registers),
callee_saved_fp_registers_(callee_saved_fp_registers),
@ -164,9 +164,14 @@ class CallDescriptor final : public ZoneObject {
// The number of C parameters to this call.
size_t CParameterCount() const { return machine_sig_->parameter_count(); }
// The number of JavaScript parameters to this call, including the receiver
// object.
size_t JSParameterCount() const { return js_param_count_; }
// The number of stack parameters to the call.
size_t StackParameterCount() const { return stack_param_count_; }
// The number of parameters to the JS function call.
size_t JSParameterCount() const {
DCHECK(IsJSFunctionCall());
return stack_param_count_;
}
// The total number of inputs to this call, which includes the target,
// receiver, context, etc.
@ -225,7 +230,7 @@ class CallDescriptor final : public ZoneObject {
const LinkageLocation target_loc_;
const MachineSignature* const machine_sig_;
const LocationSignature* const location_sig_;
const size_t js_param_count_;
const size_t stack_param_count_;
const Operator::Properties properties_;
const RegList callee_saved_registers_;
const RegList callee_saved_fp_registers_;

View File

@ -1152,11 +1152,7 @@ void CodeGenerator::AssembleReturn() {
__ bind(&return_label_);
__ mov(sp, fp);
__ Pop(ra, fp);
int pop_count = descriptor->IsJSFunctionCall()
? static_cast<int>(descriptor->JSParameterCount())
: (info()->IsStub()
? info()->code_stub()->GetStackParameterCount()
: 0);
int pop_count = static_cast<int>(descriptor->StackParameterCount());
if (pop_count != 0) {
__ DropAndRet(pop_count);
} else {

View File

@ -1228,11 +1228,7 @@ void CodeGenerator::AssembleReturn() {
__ bind(&return_label_);
__ mov(sp, fp);
__ Pop(ra, fp);
int pop_count = descriptor->IsJSFunctionCall()
? static_cast<int>(descriptor->JSParameterCount())
: (info()->IsStub()
? info()->code_stub()->GetStackParameterCount()
: 0);
int pop_count = static_cast<int>(descriptor->StackParameterCount());
if (pop_count != 0) {
__ DropAndRet(pop_count);
} else {

View File

@ -1377,11 +1377,7 @@ void CodeGenerator::AssembleReturn() {
__ b(&return_label_);
} else {
__ bind(&return_label_);
int pop_count = descriptor->IsJSFunctionCall()
? static_cast<int>(descriptor->JSParameterCount())
: (info()->IsStub()
? info()->code_stub()->GetStackParameterCount()
: 0);
int pop_count = static_cast<int>(descriptor->StackParameterCount());
__ LeaveFrame(StackFrame::MANUAL, pop_count * kPointerSize);
__ Ret();
}

View File

@ -1569,11 +1569,7 @@ void CodeGenerator::AssembleReturn() {
__ bind(&return_label_);
__ movq(rsp, rbp); // Move stack pointer back to frame pointer.
__ popq(rbp); // Pop caller's frame pointer.
int pop_count = descriptor->IsJSFunctionCall()
? static_cast<int>(descriptor->JSParameterCount())
: (info()->IsStub()
? info()->code_stub()->GetStackParameterCount()
: 0);
int pop_count = static_cast<int>(descriptor->StackParameterCount());
if (pop_count == 0) {
__ Ret();
} else {

View File

@ -1597,11 +1597,7 @@ void CodeGenerator::AssembleReturn() {
__ bind(&return_label_);
__ mov(esp, ebp); // Move stack pointer back to frame pointer.
__ pop(ebp); // Pop caller's frame pointer.
int pop_count = descriptor->IsJSFunctionCall()
? static_cast<int>(descriptor->JSParameterCount())
: (info()->IsStub()
? info()->code_stub()->GetStackParameterCount()
: 0);
int pop_count = static_cast<int>(descriptor->StackParameterCount());
if (pop_count == 0) {
__ ret(0);
} else {

View File

@ -80,7 +80,7 @@ TEST(TestLinkageCodeStubIncoming) {
CompilationInfo info(&stub, isolate, &zone);
CallDescriptor* descriptor = Linkage::ComputeIncoming(&zone, &info);
CHECK(descriptor);
CHECK_EQ(1, static_cast<int>(descriptor->JSParameterCount()));
CHECK_EQ(0, static_cast<int>(descriptor->StackParameterCount()));
CHECK_EQ(1, static_cast<int>(descriptor->ReturnCount()));
CHECK_EQ(Operator::kNoProperties, descriptor->properties());
CHECK_EQ(false, descriptor->IsJSFunctionCall());