From: titzer Date: Fri, 31 Jul 2015 15:18:34 +0000 (-0700) Subject: [turbofan] Simplifying handling of callee-cleanup stack area. X-Git-Tag: upstream/4.7.83~1083 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=44bfb4b57e25e1df529624a02686e98051e03c5b;p=platform%2Fupstream%2Fv8.git [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} --- diff --git a/src/compiler/arm/code-generator-arm.cc b/src/compiler/arm/code-generator-arm.cc index 0c97f846f..b472feb0a 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(descriptor->JSParameterCount()) - : (info()->IsStub() - ? info()->code_stub()->GetStackParameterCount() - : 0); + int pop_count = static_cast(descriptor->StackParameterCount()); if (pop_count != 0) { __ Drop(pop_count); } diff --git a/src/compiler/arm64/code-generator-arm64.cc b/src/compiler/arm64/code-generator-arm64.cc index c3e9af6a2..58adc2509 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(descriptor->JSParameterCount()) - : (info()->IsStub() - ? info()->code_stub()->GetStackParameterCount() - : 0); + int pop_count = static_cast(descriptor->StackParameterCount()); if (pop_count != 0) { __ Drop(pop_count); } diff --git a/src/compiler/c-linkage.cc b/src/compiler/c-linkage.cc index 613337c90..d261d7850 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 diff --git a/src/compiler/ia32/code-generator-ia32.cc b/src/compiler/ia32/code-generator-ia32.cc index 12eb42448..298627b55 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(descriptor->JSParameterCount()) - : (info()->IsStub() - ? info()->code_stub()->GetStackParameterCount() - : 0); + int pop_count = static_cast(descriptor->StackParameterCount()); if (pop_count == 0) { __ ret(0); } else { diff --git a/src/compiler/linkage-impl.h b/src/compiler/linkage-impl.h index 7118e24b9..60d6424a2 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 diff --git a/src/compiler/linkage.h b/src/compiler/linkage.h index 033a1cfae..7f94766fb 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_; diff --git a/src/compiler/mips/code-generator-mips.cc b/src/compiler/mips/code-generator-mips.cc index 66ffb6f89..e2ae0bd05 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(descriptor->JSParameterCount()) - : (info()->IsStub() - ? info()->code_stub()->GetStackParameterCount() - : 0); + int pop_count = static_cast(descriptor->StackParameterCount()); if (pop_count != 0) { __ DropAndRet(pop_count); } else { diff --git a/src/compiler/mips64/code-generator-mips64.cc b/src/compiler/mips64/code-generator-mips64.cc index 77c9edf80..1c4a78922 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(descriptor->JSParameterCount()) - : (info()->IsStub() - ? info()->code_stub()->GetStackParameterCount() - : 0); + int pop_count = static_cast(descriptor->StackParameterCount()); if (pop_count != 0) { __ DropAndRet(pop_count); } else { diff --git a/src/compiler/ppc/code-generator-ppc.cc b/src/compiler/ppc/code-generator-ppc.cc index cdc1424cc..3d91e68a8 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(descriptor->JSParameterCount()) - : (info()->IsStub() - ? info()->code_stub()->GetStackParameterCount() - : 0); + int pop_count = static_cast(descriptor->StackParameterCount()); __ LeaveFrame(StackFrame::MANUAL, pop_count * kPointerSize); __ Ret(); } diff --git a/src/compiler/x64/code-generator-x64.cc b/src/compiler/x64/code-generator-x64.cc index 56477d66b..38c7f2a31 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(descriptor->JSParameterCount()) - : (info()->IsStub() - ? info()->code_stub()->GetStackParameterCount() - : 0); + int pop_count = static_cast(descriptor->StackParameterCount()); if (pop_count == 0) { __ Ret(); } else { diff --git a/src/compiler/x87/code-generator-x87.cc b/src/compiler/x87/code-generator-x87.cc index 1335d3f56..bd984113f 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(descriptor->JSParameterCount()) - : (info()->IsStub() - ? info()->code_stub()->GetStackParameterCount() - : 0); + int pop_count = static_cast(descriptor->StackParameterCount()); if (pop_count == 0) { __ ret(0); } else { diff --git a/test/cctest/compiler/test-linkage.cc b/test/cctest/compiler/test-linkage.cc index 252c43133..cbfde03ca 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(descriptor->JSParameterCount())); + CHECK_EQ(0, static_cast(descriptor->StackParameterCount())); CHECK_EQ(1, static_cast(descriptor->ReturnCount())); CHECK_EQ(Operator::kNoProperties, descriptor->properties()); CHECK_EQ(false, descriptor->IsJSFunctionCall());