[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:
parent
1a5751f9b3
commit
44bfb4b57e
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -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_;
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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());
|
||||
|
Loading…
Reference in New Issue
Block a user