Reviewers: danno,
Message:
PTAL.
Turns out that CallDescriptor::JSParameterCount() isn't so interesting after
all.
Description:
[turbofan] Simplifying handling of callee-cleanup stack area.
[email protected]
BUG=
Please review this at https://codereview.chromium.org/1269913002/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+25, -52 lines):
M src/compiler/arm/code-generator-arm.cc
M src/compiler/arm64/code-generator-arm64.cc
M src/compiler/c-linkage.cc
M src/compiler/ia32/code-generator-ia32.cc
M src/compiler/linkage.h
M src/compiler/linkage-impl.h
M src/compiler/mips/code-generator-mips.cc
M src/compiler/mips64/code-generator-mips64.cc
M src/compiler/ppc/code-generator-ppc.cc
M src/compiler/x64/code-generator-x64.cc
M src/compiler/x87/code-generator-x87.cc
M test/cctest/compiler/test-linkage.cc
Index: src/compiler/arm/code-generator-arm.cc
diff --git a/src/compiler/arm/code-generator-arm.cc
b/src/compiler/arm/code-generator-arm.cc
index
0c97f846f0cff35eaccb09b24a02ca10f81dcca5..b472feb0af08d23f0ab20129cef0fc113ab685fe
100644
--- a/src/compiler/arm/code-generator-arm.cc
+++ b/src/compiler/arm/code-generator-arm.cc
@@ -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);
}
Index: src/compiler/arm64/code-generator-arm64.cc
diff --git a/src/compiler/arm64/code-generator-arm64.cc
b/src/compiler/arm64/code-generator-arm64.cc
index
c3e9af6a29e7e6be9931bf1872eebdd96290aa75..58adc2509883c6c5fcd002d1871c680136fae345
100644
--- a/src/compiler/arm64/code-generator-arm64.cc
+++ b/src/compiler/arm64/code-generator-arm64.cc
@@ -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);
}
Index: src/compiler/c-linkage.cc
diff --git a/src/compiler/c-linkage.cc b/src/compiler/c-linkage.cc
index
613337c908c5d772fbeea148326b0964df3bb91c..d261d78501facfb0edeb58a0bc23df0552794814
100644
--- a/src/compiler/c-linkage.cc
+++ b/src/compiler/c-linkage.cc
@@ -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
Index: src/compiler/ia32/code-generator-ia32.cc
diff --git a/src/compiler/ia32/code-generator-ia32.cc
b/src/compiler/ia32/code-generator-ia32.cc
index
12eb42448609fad66a009c6d8116812921283bb0..298627b55bd35dfb1ba40d35da6b49fa16eca1f6
100644
--- a/src/compiler/ia32/code-generator-ia32.cc
+++ b/src/compiler/ia32/code-generator-ia32.cc
@@ -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 {
Index: src/compiler/linkage-impl.h
diff --git a/src/compiler/linkage-impl.h b/src/compiler/linkage-impl.h
index
7118e24b99229c878fe6605b672c11624131c175..60d6424a238a4884fa943606440922dbbc5aa751
100644
--- a/src/compiler/linkage-impl.h
+++ b/src/compiler/linkage-impl.h
@@ -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
Index: src/compiler/linkage.h
diff --git a/src/compiler/linkage.h b/src/compiler/linkage.h
index
033a1cfae613715a616ff13a06ae622eba0fa4af..7f94766fb0a12fdddb6a161536429ac685173db5
100644
--- a/src/compiler/linkage.h
+++ b/src/compiler/linkage.h
@@ -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_;
Index: src/compiler/mips/code-generator-mips.cc
diff --git a/src/compiler/mips/code-generator-mips.cc
b/src/compiler/mips/code-generator-mips.cc
index
66ffb6f898f0e718efbbd22b8c8f3543bca6d6f4..e2ae0bd05dca5f063483f5c5dc3fb224b9263722
100644
--- a/src/compiler/mips/code-generator-mips.cc
+++ b/src/compiler/mips/code-generator-mips.cc
@@ -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 {
Index: src/compiler/mips64/code-generator-mips64.cc
diff --git a/src/compiler/mips64/code-generator-mips64.cc
b/src/compiler/mips64/code-generator-mips64.cc
index
77c9edf80d96e85fc24d5ccaeb741181af737e8c..1c4a789229b4b6b10e1dca922f9d699124b875f5
100644
--- a/src/compiler/mips64/code-generator-mips64.cc
+++ b/src/compiler/mips64/code-generator-mips64.cc
@@ -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 {
Index: src/compiler/ppc/code-generator-ppc.cc
diff --git a/src/compiler/ppc/code-generator-ppc.cc
b/src/compiler/ppc/code-generator-ppc.cc
index
cdc1424cc5e72a7f63a8efa2db56911971f95311..3d91e68a83d790198d8bb5817e23e8826060002b
100644
--- a/src/compiler/ppc/code-generator-ppc.cc
+++ b/src/compiler/ppc/code-generator-ppc.cc
@@ -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();
}
Index: src/compiler/x64/code-generator-x64.cc
diff --git a/src/compiler/x64/code-generator-x64.cc
b/src/compiler/x64/code-generator-x64.cc
index
56477d66b66c9baa0d527da7ed3554d1d69f4e0a..38c7f2a31c90724b3fd39767c07b3801fde1cbc6
100644
--- a/src/compiler/x64/code-generator-x64.cc
+++ b/src/compiler/x64/code-generator-x64.cc
@@ -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 {
Index: src/compiler/x87/code-generator-x87.cc
diff --git a/src/compiler/x87/code-generator-x87.cc
b/src/compiler/x87/code-generator-x87.cc
index
1335d3f56809d832b612e8e3e7d711a0a3b641a3..bd984113f74179496bfccdb6855e5dfd4403fec2
100644
--- a/src/compiler/x87/code-generator-x87.cc
+++ b/src/compiler/x87/code-generator-x87.cc
@@ -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 {
Index: test/cctest/compiler/test-linkage.cc
diff --git a/test/cctest/compiler/test-linkage.cc
b/test/cctest/compiler/test-linkage.cc
index
252c43133e204c70fc13821a249b036aaea59e71..cbfde03ca665e75e1ea69dc050b0617a56e7dd10
100644
--- a/test/cctest/compiler/test-linkage.cc
+++ b/test/cctest/compiler/test-linkage.cc
@@ -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());
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.