From a942f4314f6b5f477ab8fd19ca98861cc2f17e75 Mon Sep 17 00:00:00 2001 From: "plind44@gmail.com" Date: Fri, 9 May 2014 17:29:21 +0000 Subject: [PATCH] MIPS: Reland r20974: Unify and simplify the FastCloneShallowArrayStub. Port r21230 (56ef3ac) Original commit message: - Don't bake in length/capacity into full codegen calls of stubs, allowing boilerplates to increase their capacity without regenerating code. - Unify all variants of the clone stub into a single, length-independent version. - Various tweaks to make sure that the clone stub doesn't spill and therefore need an eager stack frame. - Handle all lengths of array literals in the fast case. BUG= R=plind44@gmail.com Review URL: https://codereview.chromium.org/273103002 Patch from Balazs Kilvady . git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@21239 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/mips/code-stubs-mips.cc | 14 ++++++++++++++ src/mips/full-codegen-mips.cc | 12 +----------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc index a746d76..6e033b9 100644 --- a/src/mips/code-stubs-mips.cc +++ b/src/mips/code-stubs-mips.cc @@ -59,6 +59,11 @@ void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( static Register registers[] = { a3, a2, a1 }; descriptor->register_param_count_ = 3; descriptor->register_params_ = registers; + static Representation representations[] = { + Representation::Tagged(), + Representation::Smi(), + Representation::Tagged() }; + descriptor->register_param_representations_ = representations; descriptor->deoptimization_handler_ = Runtime::FunctionForId( Runtime::kHiddenCreateArrayLiteralStubBailout)->entry; @@ -202,6 +207,11 @@ static void InitializeArrayConstructorDescriptor( descriptor->stack_parameter_count_ = a0; descriptor->register_param_count_ = 3; descriptor->register_params_ = registers_variable_args; + static Representation representations[] = { + Representation::Tagged(), + Representation::Tagged(), + Representation::Integer32() }; + descriptor->register_param_representations_ = representations; } descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; @@ -229,6 +239,10 @@ static void InitializeInternalArrayConstructorDescriptor( descriptor->stack_parameter_count_ = a0; descriptor->register_param_count_ = 2; descriptor->register_params_ = registers_variable_args; + static Representation representations[] = { + Representation::Tagged(), + Representation::Integer32() }; + descriptor->register_param_representations_ = representations; } descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc index 21a96dc..95d2931 100644 --- a/src/mips/full-codegen-mips.cc +++ b/src/mips/full-codegen-mips.cc @@ -1810,17 +1810,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) { __ Push(a3, a2, a1, a0); __ CallRuntime(Runtime::kHiddenCreateArrayLiteral, 4); } else { - ASSERT(IsFastSmiOrObjectElementsKind(constant_elements_kind) || - FLAG_smi_only_arrays); - FastCloneShallowArrayStub::Mode mode = - FastCloneShallowArrayStub::CLONE_ANY_ELEMENTS; - - if (has_fast_elements) { - mode = FastCloneShallowArrayStub::CLONE_ELEMENTS; - } - - FastCloneShallowArrayStub stub(isolate(), mode, allocation_site_mode, - length); + FastCloneShallowArrayStub stub(isolate(), allocation_site_mode); __ CallStub(&stub); } -- 2.7.4