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 <kilvadyb@homejinni.com>. git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@21239 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
f55eeec3ee
commit
a942f4314f
@ -59,6 +59,11 @@ void FastCloneShallowArrayStub::InitializeInterfaceDescriptor(
|
|||||||
static Register registers[] = { a3, a2, a1 };
|
static Register registers[] = { a3, a2, a1 };
|
||||||
descriptor->register_param_count_ = 3;
|
descriptor->register_param_count_ = 3;
|
||||||
descriptor->register_params_ = registers;
|
descriptor->register_params_ = registers;
|
||||||
|
static Representation representations[] = {
|
||||||
|
Representation::Tagged(),
|
||||||
|
Representation::Smi(),
|
||||||
|
Representation::Tagged() };
|
||||||
|
descriptor->register_param_representations_ = representations;
|
||||||
descriptor->deoptimization_handler_ =
|
descriptor->deoptimization_handler_ =
|
||||||
Runtime::FunctionForId(
|
Runtime::FunctionForId(
|
||||||
Runtime::kHiddenCreateArrayLiteralStubBailout)->entry;
|
Runtime::kHiddenCreateArrayLiteralStubBailout)->entry;
|
||||||
@ -202,6 +207,11 @@ static void InitializeArrayConstructorDescriptor(
|
|||||||
descriptor->stack_parameter_count_ = a0;
|
descriptor->stack_parameter_count_ = a0;
|
||||||
descriptor->register_param_count_ = 3;
|
descriptor->register_param_count_ = 3;
|
||||||
descriptor->register_params_ = registers_variable_args;
|
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;
|
descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count;
|
||||||
@ -229,6 +239,10 @@ static void InitializeInternalArrayConstructorDescriptor(
|
|||||||
descriptor->stack_parameter_count_ = a0;
|
descriptor->stack_parameter_count_ = a0;
|
||||||
descriptor->register_param_count_ = 2;
|
descriptor->register_param_count_ = 2;
|
||||||
descriptor->register_params_ = registers_variable_args;
|
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;
|
descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count;
|
||||||
|
@ -1810,17 +1810,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
|
|||||||
__ Push(a3, a2, a1, a0);
|
__ Push(a3, a2, a1, a0);
|
||||||
__ CallRuntime(Runtime::kHiddenCreateArrayLiteral, 4);
|
__ CallRuntime(Runtime::kHiddenCreateArrayLiteral, 4);
|
||||||
} else {
|
} else {
|
||||||
ASSERT(IsFastSmiOrObjectElementsKind(constant_elements_kind) ||
|
FastCloneShallowArrayStub stub(isolate(), allocation_site_mode);
|
||||||
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);
|
|
||||||
__ CallStub(&stub);
|
__ CallStub(&stub);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user