From 701417f9555df937ef015cd0b8a795f9624eb71e Mon Sep 17 00:00:00 2001 From: "mstarzinger@chromium.org" Date: Fri, 18 Oct 2013 14:55:21 +0000 Subject: [PATCH] Make stack_parameter_count a plain register. R=rossberg@chromium.org, danno@chromium.org Review URL: https://codereview.chromium.org/28993003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17275 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/code-stubs-arm.cc | 4 ++-- src/arm/deoptimizer-arm.cc | 5 +---- src/code-stubs-hydrogen.cc | 4 ++-- src/code-stubs.cc | 2 +- src/code-stubs.h | 9 +++++---- src/deoptimizer.cc | 2 +- src/ia32/code-stubs-ia32.cc | 4 ++-- src/ia32/deoptimizer-ia32.cc | 5 +---- src/mips/code-stubs-mips.cc | 4 ++-- src/mips/deoptimizer-mips.cc | 5 +---- src/x64/code-stubs-x64.cc | 4 ++-- src/x64/deoptimizer-x64.cc | 5 +---- 12 files changed, 21 insertions(+), 32 deletions(-) diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc index 5c5231b..bdcdbf8 100644 --- a/src/arm/code-stubs-arm.cc +++ b/src/arm/code-stubs-arm.cc @@ -192,7 +192,7 @@ static void InitializeArrayConstructorDescriptor( descriptor->register_param_count_ = 2; if (constant_stack_parameter_count != 0) { // stack param count needs (constructor pointer, and single argument) - descriptor->stack_parameter_count_ = &r0; + descriptor->stack_parameter_count_ = r0; } descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; descriptor->register_params_ = registers; @@ -214,7 +214,7 @@ static void InitializeInternalArrayConstructorDescriptor( if (constant_stack_parameter_count != 0) { // stack param count needs (constructor pointer, and single argument) - descriptor->stack_parameter_count_ = &r0; + descriptor->stack_parameter_count_ = r0; } descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; descriptor->register_params_ = registers; diff --git a/src/arm/deoptimizer-arm.cc b/src/arm/deoptimizer-arm.cc index 0ed84ff..9339c5f 100644 --- a/src/arm/deoptimizer-arm.cc +++ b/src/arm/deoptimizer-arm.cc @@ -107,10 +107,7 @@ void Deoptimizer::SetPlatformCompiledStubRegisters( ApiFunction function(descriptor->deoptimization_handler_); ExternalReference xref(&function, ExternalReference::BUILTIN_CALL, isolate_); intptr_t handler = reinterpret_cast(xref.address()); - int params = descriptor->register_param_count_; - if (descriptor->stack_parameter_count_ != NULL) { - params++; - } + int params = descriptor->environment_length(); output_frame->SetRegister(r0.code(), params); output_frame->SetRegister(r1.code(), handler); } diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc index f8fde15..a695161 100644 --- a/src/code-stubs-hydrogen.cc +++ b/src/code-stubs-hydrogen.cc @@ -162,7 +162,7 @@ bool CodeStubGraphBuilderBase::BuildGraph() { } HInstruction* stack_parameter_count; - if (descriptor_->stack_parameter_count_ != NULL) { + if (descriptor_->stack_parameter_count_.is_valid()) { ASSERT(descriptor_->environment_length() == (param_count + 1)); stack_parameter_count = New(param_count, HParameter::REGISTER_PARAMETER, @@ -298,7 +298,7 @@ static Handle DoGenerateCode(Isolate* isolate, Stub* stub) { // the runtime that is significantly faster than using the standard // stub-failure deopt mechanism. if (stub->IsUninitialized() && descriptor->has_miss_handler()) { - ASSERT(descriptor->stack_parameter_count_ == NULL); + ASSERT(!descriptor->stack_parameter_count_.is_valid()); return stub->GenerateLightweightMissCode(isolate); } ElapsedTimer timer; diff --git a/src/code-stubs.cc b/src/code-stubs.cc index 0681137..0c5f389 100644 --- a/src/code-stubs.cc +++ b/src/code-stubs.cc @@ -41,7 +41,7 @@ namespace internal { CodeStubInterfaceDescriptor::CodeStubInterfaceDescriptor() : register_param_count_(-1), - stack_parameter_count_(NULL), + stack_parameter_count_(no_reg), hint_stack_parameter_count_(-1), function_mode_(NOT_JS_FUNCTION_STUB_MODE), register_params_(NULL), diff --git a/src/code-stubs.h b/src/code-stubs.h index d2101ae..b5f74b2 100644 --- a/src/code-stubs.h +++ b/src/code-stubs.h @@ -30,8 +30,9 @@ #include "allocation.h" #include "assembler.h" -#include "globals.h" #include "codegen.h" +#include "globals.h" +#include "macro-assembler.h" namespace v8 { namespace internal { @@ -280,7 +281,7 @@ enum StubFunctionMode { NOT_JS_FUNCTION_STUB_MODE, JS_FUNCTION_STUB_MODE }; struct CodeStubInterfaceDescriptor { CodeStubInterfaceDescriptor(); int register_param_count_; - const Register* stack_parameter_count_; + Register stack_parameter_count_; // if hint_stack_parameter_count_ > 0, the code stub can optimize the // return sequence. Default value is -1, which means it is ignored. int hint_stack_parameter_count_; @@ -289,7 +290,7 @@ struct CodeStubInterfaceDescriptor { Address deoptimization_handler_; int environment_length() const { - if (stack_parameter_count_ != NULL) { + if (stack_parameter_count_.is_valid()) { return register_param_count_ + 1; } return register_param_count_; @@ -320,7 +321,7 @@ struct CodeStubInterfaceDescriptor { // defined outside of the platform directories #define DESCRIPTOR_GET_PARAMETER_REGISTER(descriptor, index) \ ((index) == (descriptor)->register_param_count_) \ - ? *((descriptor)->stack_parameter_count_) \ + ? (descriptor)->stack_parameter_count_ \ : (descriptor)->register_params_[(index)] diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc index 819b5e9..2fc04fa 100644 --- a/src/deoptimizer.cc +++ b/src/deoptimizer.cc @@ -1494,7 +1494,7 @@ void Deoptimizer::DoComputeCompiledStubFrame(TranslationIterator* iterator, } intptr_t caller_arg_count = 0; - bool arg_count_known = descriptor->stack_parameter_count_ == NULL; + bool arg_count_known = !descriptor->stack_parameter_count_.is_valid(); // Build the Arguments object for the caller's parameters and a pointer to it. output_frame_offset -= kPointerSize; diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc index 2e630c8..71f7989 100644 --- a/src/ia32/code-stubs-ia32.cc +++ b/src/ia32/code-stubs-ia32.cc @@ -172,7 +172,7 @@ static void InitializeArrayConstructorDescriptor( if (constant_stack_parameter_count != 0) { // stack param count needs (constructor pointer, and single argument) - descriptor->stack_parameter_count_ = &eax; + descriptor->stack_parameter_count_ = eax; } descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; descriptor->register_params_ = registers; @@ -194,7 +194,7 @@ static void InitializeInternalArrayConstructorDescriptor( if (constant_stack_parameter_count != 0) { // stack param count needs (constructor pointer, and single argument) - descriptor->stack_parameter_count_ = &eax; + descriptor->stack_parameter_count_ = eax; } descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; descriptor->register_params_ = registers; diff --git a/src/ia32/deoptimizer-ia32.cc b/src/ia32/deoptimizer-ia32.cc index 958ca6c..e339b3a 100644 --- a/src/ia32/deoptimizer-ia32.cc +++ b/src/ia32/deoptimizer-ia32.cc @@ -202,10 +202,7 @@ void Deoptimizer::SetPlatformCompiledStubRegisters( FrameDescription* output_frame, CodeStubInterfaceDescriptor* descriptor) { intptr_t handler = reinterpret_cast(descriptor->deoptimization_handler_); - int params = descriptor->register_param_count_; - if (descriptor->stack_parameter_count_ != NULL) { - params++; - } + int params = descriptor->environment_length(); output_frame->SetRegister(eax.code(), params); output_frame->SetRegister(ebx.code(), handler); } diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc index 3f59932..af5f87d 100644 --- a/src/mips/code-stubs-mips.cc +++ b/src/mips/code-stubs-mips.cc @@ -181,7 +181,7 @@ static void InitializeArrayConstructorDescriptor( descriptor->register_param_count_ = 2; if (constant_stack_parameter_count != 0) { // stack param count needs (constructor pointer, and single argument) - descriptor->stack_parameter_count_ = &a0; + descriptor->stack_parameter_count_ = a0; } descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; descriptor->register_params_ = registers; @@ -203,7 +203,7 @@ static void InitializeInternalArrayConstructorDescriptor( if (constant_stack_parameter_count != 0) { // Stack param count needs (constructor pointer, and single argument). - descriptor->stack_parameter_count_ = &a0; + descriptor->stack_parameter_count_ = a0; } descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; descriptor->register_params_ = registers; diff --git a/src/mips/deoptimizer-mips.cc b/src/mips/deoptimizer-mips.cc index 4426d90..d31990b 100644 --- a/src/mips/deoptimizer-mips.cc +++ b/src/mips/deoptimizer-mips.cc @@ -104,10 +104,7 @@ void Deoptimizer::SetPlatformCompiledStubRegisters( ApiFunction function(descriptor->deoptimization_handler_); ExternalReference xref(&function, ExternalReference::BUILTIN_CALL, isolate_); intptr_t handler = reinterpret_cast(xref.address()); - int params = descriptor->register_param_count_; - if (descriptor->stack_parameter_count_ != NULL) { - params++; - } + int params = descriptor->environment_length(); output_frame->SetRegister(s0.code(), params); output_frame->SetRegister(s1.code(), (params - 1) * kPointerSize); output_frame->SetRegister(s2.code(), handler); diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc index 7e6b63c..a81c780 100644 --- a/src/x64/code-stubs-x64.cc +++ b/src/x64/code-stubs-x64.cc @@ -179,7 +179,7 @@ static void InitializeArrayConstructorDescriptor( descriptor->register_param_count_ = 2; if (constant_stack_parameter_count != 0) { // stack param count needs (constructor pointer, and single argument) - descriptor->stack_parameter_count_ = &rax; + descriptor->stack_parameter_count_ = rax; } descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; descriptor->register_params_ = registers; @@ -201,7 +201,7 @@ static void InitializeInternalArrayConstructorDescriptor( if (constant_stack_parameter_count != 0) { // stack param count needs (constructor pointer, and single argument) - descriptor->stack_parameter_count_ = &rax; + descriptor->stack_parameter_count_ = rax; } descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; descriptor->register_params_ = registers; diff --git a/src/x64/deoptimizer-x64.cc b/src/x64/deoptimizer-x64.cc index a5e4583..bf11e08 100644 --- a/src/x64/deoptimizer-x64.cc +++ b/src/x64/deoptimizer-x64.cc @@ -106,10 +106,7 @@ void Deoptimizer::SetPlatformCompiledStubRegisters( FrameDescription* output_frame, CodeStubInterfaceDescriptor* descriptor) { intptr_t handler = reinterpret_cast(descriptor->deoptimization_handler_); - int params = descriptor->register_param_count_; - if (descriptor->stack_parameter_count_ != NULL) { - params++; - } + int params = descriptor->environment_length(); output_frame->SetRegister(rax.code(), params); output_frame->SetRegister(rbx.code(), handler); } -- 2.7.4