| Index: src/code-stubs-hydrogen.cc
|
| diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc
|
| index 22fabbe5b56f1ee2f9f281685311bc1edbe0a0e5..f2b04f766884ff7dfb8ee8115b95a108a51fbe61 100644
|
| --- a/src/code-stubs-hydrogen.cc
|
| +++ b/src/code-stubs-hydrogen.cc
|
| @@ -38,8 +38,8 @@ class CodeStubGraphBuilderBase : public HGraphBuilder {
|
| arguments_length_(NULL),
|
| info_(stub, isolate),
|
| context_(NULL) {
|
| - descriptor_ = stub->GetInterfaceDescriptor();
|
| - int parameter_count = descriptor_->GetEnvironmentParameterCount();
|
| + stub->InitializeInterfaceDescriptor(&descriptor_);
|
| + int parameter_count = descriptor_.GetEnvironmentParameterCount();
|
| parameters_.Reset(new HParameter*[parameter_count]);
|
| }
|
| virtual bool BuildGraph();
|
| @@ -47,7 +47,7 @@ class CodeStubGraphBuilderBase : public HGraphBuilder {
|
| protected:
|
| virtual HValue* BuildCodeStub() = 0;
|
| HParameter* GetParameter(int parameter) {
|
| - DCHECK(parameter < descriptor_->GetEnvironmentParameterCount());
|
| + DCHECK(parameter < descriptor_.GetEnvironmentParameterCount());
|
| return parameters_[parameter];
|
| }
|
| HValue* GetArgumentsLength() {
|
| @@ -103,7 +103,7 @@ class CodeStubGraphBuilderBase : public HGraphBuilder {
|
| SmartArrayPointer<HParameter*> parameters_;
|
| HValue* arguments_length_;
|
| CompilationInfoWithZone info_;
|
| - CodeStubInterfaceDescriptor* descriptor_;
|
| + CodeStubInterfaceDescriptor descriptor_;
|
| HContext* context_;
|
| };
|
|
|
| @@ -119,22 +119,22 @@ bool CodeStubGraphBuilderBase::BuildGraph() {
|
| isolate()->GetHTracer()->TraceCompilation(&info_);
|
| }
|
|
|
| - int param_count = descriptor_->GetEnvironmentParameterCount();
|
| + int param_count = descriptor_.GetEnvironmentParameterCount();
|
| HEnvironment* start_environment = graph()->start_environment();
|
| HBasicBlock* next_block = CreateBasicBlock(start_environment);
|
| Goto(next_block);
|
| next_block->SetJoinId(BailoutId::StubEntry());
|
| set_current_block(next_block);
|
|
|
| - bool runtime_stack_params = descriptor_->stack_parameter_count().is_valid();
|
| + bool runtime_stack_params = descriptor_.stack_parameter_count().is_valid();
|
| HInstruction* stack_parameter_count = NULL;
|
| for (int i = 0; i < param_count; ++i) {
|
| - Representation r = descriptor_->GetEnvironmentParameterRepresentation(i);
|
| + Representation r = descriptor_.GetEnvironmentParameterRepresentation(i);
|
| HParameter* param = Add<HParameter>(i,
|
| HParameter::REGISTER_PARAMETER, r);
|
| start_environment->Bind(i, param);
|
| parameters_[i] = param;
|
| - if (descriptor_->IsEnvironmentParameterCountRegister(i)) {
|
| + if (descriptor_.IsEnvironmentParameterCountRegister(i)) {
|
| param->set_type(HType::Smi());
|
| stack_parameter_count = param;
|
| arguments_length_ = stack_parameter_count;
|
| @@ -159,16 +159,16 @@ bool CodeStubGraphBuilderBase::BuildGraph() {
|
| // We might have extra expressions to pop from the stack in addition to the
|
| // arguments above.
|
| HInstruction* stack_pop_count = stack_parameter_count;
|
| - if (descriptor_->function_mode() == JS_FUNCTION_STUB_MODE) {
|
| + if (descriptor_.function_mode() == JS_FUNCTION_STUB_MODE) {
|
| if (!stack_parameter_count->IsConstant() &&
|
| - descriptor_->hint_stack_parameter_count() < 0) {
|
| + descriptor_.hint_stack_parameter_count() < 0) {
|
| HInstruction* constant_one = graph()->GetConstant1();
|
| stack_pop_count = AddUncasted<HAdd>(stack_parameter_count, constant_one);
|
| stack_pop_count->ClearFlag(HValue::kCanOverflow);
|
| // TODO(mvstanton): verify that stack_parameter_count+1 really fits in a
|
| // smi.
|
| } else {
|
| - int count = descriptor_->hint_stack_parameter_count();
|
| + int count = descriptor_.hint_stack_parameter_count();
|
| stack_pop_count = Add<HConstant>(count);
|
| }
|
| }
|
| @@ -251,18 +251,14 @@ Handle<Code> HydrogenCodeStub::GenerateLightweightMissCode() {
|
| template <class Stub>
|
| static Handle<Code> DoGenerateCode(Stub* stub) {
|
| Isolate* isolate = stub->isolate();
|
| - CodeStub::Major major_key = static_cast<CodeStub*>(stub)->MajorKey();
|
| - CodeStubInterfaceDescriptor* descriptor =
|
| - isolate->code_stub_interface_descriptor(major_key);
|
| - if (!descriptor->IsInitialized()) {
|
| - stub->InitializeInterfaceDescriptor(descriptor);
|
| - }
|
| + CodeStubInterfaceDescriptor descriptor;
|
| + stub->InitializeInterfaceDescriptor(&descriptor);
|
|
|
| // If we are uninitialized we can use a light-weight stub to enter
|
| // the runtime that is significantly faster than using the standard
|
| // stub-failure deopt mechanism.
|
| - if (stub->IsUninitialized() && descriptor->has_miss_handler()) {
|
| - DCHECK(!descriptor->stack_parameter_count().is_valid());
|
| + if (stub->IsUninitialized() && descriptor.has_miss_handler()) {
|
| + DCHECK(!descriptor.stack_parameter_count().is_valid());
|
| return stub->GenerateLightweightMissCode();
|
| }
|
| base::ElapsedTimer timer;
|
|
|