Chromium Code Reviews| Index: src/ia32/code-stubs-ia32.cc |
| diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc |
| index 9a6719bcda1531cf6bb0f28ab3a4a31e2c2d2a80..89ec9c51c31343ff415728601da4ca1163e311be 100644 |
| --- a/src/ia32/code-stubs-ia32.cc |
| +++ b/src/ia32/code-stubs-ia32.cc |
| @@ -22,170 +22,120 @@ namespace internal { |
| void FastNewClosureStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { ebx }; |
| - descriptor->register_param_count_ = 1; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - Runtime::FunctionForId(Runtime::kHiddenNewClosureFromStubFailure)->entry; |
| + Register registers[] = { ebx }; |
| + descriptor->Initialize( |
| + ARRAY_SIZE(registers), registers, |
| + Runtime::FunctionForId(Runtime::kHiddenNewClosureFromStubFailure)->entry); |
| } |
| void FastNewContextStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { edi }; |
| - descriptor->register_param_count_ = 1; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = NULL; |
| + Register registers[] = { edi }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers); |
| } |
| void ToNumberStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { eax }; |
| - descriptor->register_param_count_ = 1; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = NULL; |
| + Register registers[] = { eax }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers); |
| } |
| void NumberToStringStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { eax }; |
| - descriptor->register_param_count_ = 1; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - Runtime::FunctionForId(Runtime::kHiddenNumberToString)->entry; |
| + Register registers[] = { eax }; |
| + descriptor->Initialize( |
| + ARRAY_SIZE(registers), registers, |
| + Runtime::FunctionForId(Runtime::kHiddenNumberToString)->entry); |
| } |
| void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { eax, ebx, ecx }; |
| - descriptor->register_param_count_ = 3; |
| - descriptor->register_params_ = registers; |
| - static Representation representations[] = { |
| + Register registers[] = { eax, ebx, ecx }; |
| + Representation representations[] = { |
| Representation::Tagged(), |
| Representation::Smi(), |
| Representation::Tagged() }; |
| - descriptor->register_param_representations_ = representations; |
| - descriptor->deoptimization_handler_ = |
| + |
| + descriptor->Initialize( |
| + ARRAY_SIZE(registers), registers, |
| Runtime::FunctionForId( |
| - Runtime::kHiddenCreateArrayLiteralStubBailout)->entry; |
| + Runtime::kHiddenCreateArrayLiteralStubBailout)->entry, |
| + representations); |
| } |
| void FastCloneShallowObjectStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { eax, ebx, ecx, edx }; |
| - descriptor->register_param_count_ = 4; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - Runtime::FunctionForId(Runtime::kHiddenCreateObjectLiteral)->entry; |
| + Register registers[] = { eax, ebx, ecx, edx }; |
| + descriptor->Initialize( |
| + ARRAY_SIZE(registers), registers, |
| + Runtime::FunctionForId(Runtime::kHiddenCreateObjectLiteral)->entry); |
| } |
| void CreateAllocationSiteStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { ebx, edx }; |
| - descriptor->register_param_count_ = 2; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = NULL; |
| -} |
| - |
| - |
| -void KeyedLoadFastElementStub::InitializeInterfaceDescriptor( |
| - CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { edx, ecx }; |
| - descriptor->register_param_count_ = 2; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure); |
| -} |
| - |
| - |
| -void KeyedLoadDictionaryElementStub::InitializeInterfaceDescriptor( |
| - CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { edx, ecx }; |
| - descriptor->register_param_count_ = 2; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure); |
| + Register registers[] = { ebx, edx }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers); |
| } |
| void RegExpConstructResultStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { ecx, ebx, eax }; |
| - descriptor->register_param_count_ = 3; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - Runtime::FunctionForId(Runtime::kHiddenRegExpConstructResult)->entry; |
| -} |
| - |
| - |
| -void KeyedLoadGenericElementStub::InitializeInterfaceDescriptor( |
| - CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { edx, ecx }; |
| - descriptor->register_param_count_ = 2; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - Runtime::FunctionForId(Runtime::kKeyedGetProperty)->entry; |
| + Register registers[] = { ecx, ebx, eax }; |
| + descriptor->Initialize( |
| + ARRAY_SIZE(registers), registers, |
| + Runtime::FunctionForId(Runtime::kHiddenRegExpConstructResult)->entry); |
| } |
| void LoadFieldStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { edx }; |
| - descriptor->register_param_count_ = 1; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = NULL; |
| + Register registers[] = { edx }; |
|
Jakob Kummerow
2014/06/25 10:31:56
I think this could use LoadIC::ReceiverRegister()
mvstanton
2014/06/25 12:29:00
Good catch, it's in the next CL!
|
| + descriptor->Initialize(ARRAY_SIZE(registers), registers); |
| } |
| void KeyedLoadFieldStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { edx }; |
| - descriptor->register_param_count_ = 1; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = NULL; |
| + Register registers[] = { edx }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers); |
| } |
| void StringLengthStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { edx, ecx }; |
| - descriptor->register_param_count_ = 2; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = NULL; |
| + Register registers[] = { edx, ecx }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers); |
| } |
| void KeyedStringLengthStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { edx, ecx }; |
| - descriptor->register_param_count_ = 2; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = NULL; |
| + Register registers[] = { edx, ecx }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers); |
| } |
| void KeyedStoreFastElementStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { edx, ecx, eax }; |
| - descriptor->register_param_count_ = 3; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - FUNCTION_ADDR(KeyedStoreIC_MissFromStubFailure); |
| + Register registers[] = { edx, ecx, eax }; |
| + descriptor->Initialize( |
| + ARRAY_SIZE(registers), registers, |
| + FUNCTION_ADDR(KeyedStoreIC_MissFromStubFailure)); |
| } |
| void TransitionElementsKindStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { eax, ebx }; |
| - descriptor->register_param_count_ = 2; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry; |
| + Register registers[] = { eax, ebx }; |
| + descriptor->Initialize( |
| + ARRAY_SIZE(registers), registers, |
| + Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry); |
| } |
| @@ -197,29 +147,31 @@ static void InitializeArrayConstructorDescriptor( |
| // eax -- number of arguments |
| // edi -- function |
| // ebx -- allocation site with elements kind |
| - static Register registers_variable_args[] = { edi, ebx, eax }; |
| - static Register registers_no_args[] = { edi, ebx }; |
| + Address deopt_handler = Runtime::FunctionForId( |
| + Runtime::kHiddenArrayConstructor)->entry; |
| if (constant_stack_parameter_count == 0) { |
| - descriptor->register_param_count_ = 2; |
| - descriptor->register_params_ = registers_no_args; |
| + Register registers[] = { edi, ebx }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers, |
| + deopt_handler, |
| + NULL, |
| + constant_stack_parameter_count, |
| + JS_FUNCTION_STUB_MODE); |
| } else { |
| // stack param count needs (constructor pointer, and single argument) |
| - descriptor->handler_arguments_mode_ = PASS_ARGUMENTS; |
| - descriptor->stack_parameter_count_ = eax; |
| - descriptor->register_param_count_ = 3; |
| - descriptor->register_params_ = registers_variable_args; |
| - static Representation representations[] = { |
| + Register registers[] = { edi, ebx, eax }; |
| + Representation representations[] = { |
| Representation::Tagged(), |
| Representation::Tagged(), |
| Representation::Integer32() }; |
| - descriptor->register_param_representations_ = representations; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers, |
| + eax, |
| + deopt_handler, |
| + representations, |
| + constant_stack_parameter_count, |
| + JS_FUNCTION_STUB_MODE, |
| + PASS_ARGUMENTS); |
| } |
| - |
| - descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; |
| - descriptor->function_mode_ = JS_FUNCTION_STUB_MODE; |
| - descriptor->deoptimization_handler_ = |
| - Runtime::FunctionForId(Runtime::kHiddenArrayConstructor)->entry; |
| } |
| @@ -229,28 +181,30 @@ static void InitializeInternalArrayConstructorDescriptor( |
| // register state |
| // eax -- number of arguments |
| // edi -- constructor function |
| - static Register registers_variable_args[] = { edi, eax }; |
| - static Register registers_no_args[] = { edi }; |
| + Address deopt_handler = Runtime::FunctionForId( |
| + Runtime::kHiddenInternalArrayConstructor)->entry; |
| if (constant_stack_parameter_count == 0) { |
| - descriptor->register_param_count_ = 1; |
| - descriptor->register_params_ = registers_no_args; |
| + Register registers[] = { edi }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers, |
| + deopt_handler, |
| + NULL, |
| + constant_stack_parameter_count, |
| + JS_FUNCTION_STUB_MODE); |
| } else { |
| // stack param count needs (constructor pointer, and single argument) |
| - descriptor->handler_arguments_mode_ = PASS_ARGUMENTS; |
| - descriptor->stack_parameter_count_ = eax; |
| - descriptor->register_param_count_ = 2; |
| - descriptor->register_params_ = registers_variable_args; |
| - static Representation representations[] = { |
| + Register registers[] = { edi, eax }; |
| + Representation representations[] = { |
| Representation::Tagged(), |
| Representation::Integer32() }; |
| - descriptor->register_param_representations_ = representations; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers, |
| + eax, |
| + deopt_handler, |
| + representations, |
| + constant_stack_parameter_count, |
| + JS_FUNCTION_STUB_MODE, |
| + PASS_ARGUMENTS); |
| } |
| - |
| - descriptor->hint_stack_parameter_count_ = constant_stack_parameter_count; |
| - descriptor->function_mode_ = JS_FUNCTION_STUB_MODE; |
| - descriptor->deoptimization_handler_ = |
| - Runtime::FunctionForId(Runtime::kHiddenInternalArrayConstructor)->entry; |
| } |
| @@ -292,22 +246,18 @@ void InternalArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor( |
| void CompareNilICStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { eax }; |
| - descriptor->register_param_count_ = 1; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - FUNCTION_ADDR(CompareNilIC_Miss); |
| + Register registers[] = { eax }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers, |
| + FUNCTION_ADDR(CompareNilIC_Miss)); |
| descriptor->SetMissHandler( |
| ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate())); |
| } |
| void ToBooleanStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { eax }; |
| - descriptor->register_param_count_ = 1; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - FUNCTION_ADDR(ToBooleanIC_Miss); |
| + Register registers[] = { eax }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers, |
| + FUNCTION_ADDR(ToBooleanIC_Miss)); |
| descriptor->SetMissHandler( |
| ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate())); |
| } |
| @@ -315,30 +265,25 @@ void ToBooleanStub::InitializeInterfaceDescriptor( |
| void StoreGlobalStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { edx, ecx, eax }; |
| - descriptor->register_param_count_ = 3; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - FUNCTION_ADDR(StoreIC_MissFromStubFailure); |
| + Register registers[] = { edx, ecx, eax }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers, |
| + FUNCTION_ADDR(StoreIC_MissFromStubFailure)); |
| } |
| void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { eax, ebx, ecx, edx }; |
| - descriptor->register_param_count_ = 4; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss); |
| + Register registers[] = { eax, ebx, ecx, edx }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers, |
| + FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss)); |
| } |
| void BinaryOpICStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { edx, eax }; |
| - descriptor->register_param_count_ = 2; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = FUNCTION_ADDR(BinaryOpIC_Miss); |
| + Register registers[] = { edx, eax }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers, |
| + FUNCTION_ADDR(BinaryOpIC_Miss)); |
| descriptor->SetMissHandler( |
| ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate())); |
| } |
| @@ -346,21 +291,18 @@ void BinaryOpICStub::InitializeInterfaceDescriptor( |
| void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { ecx, edx, eax }; |
| - descriptor->register_param_count_ = 3; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite); |
| + Register registers[] = { ecx, edx, eax }; |
| + descriptor->Initialize(ARRAY_SIZE(registers), registers, |
| + FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite)); |
| } |
| void StringAddStub::InitializeInterfaceDescriptor( |
| CodeStubInterfaceDescriptor* descriptor) { |
| - static Register registers[] = { edx, eax }; |
| - descriptor->register_param_count_ = 2; |
| - descriptor->register_params_ = registers; |
| - descriptor->deoptimization_handler_ = |
| - Runtime::FunctionForId(Runtime::kHiddenStringAdd)->entry; |
| + Register registers[] = { edx, eax }; |
| + descriptor->Initialize( |
| + ARRAY_SIZE(registers), registers, |
| + Runtime::FunctionForId(Runtime::kHiddenStringAdd)->entry); |
| } |
| @@ -456,18 +398,18 @@ void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm) { |
| isolate()->counters()->code_stubs()->Increment(); |
| CodeStubInterfaceDescriptor* descriptor = GetInterfaceDescriptor(); |
| - int param_count = descriptor->register_param_count_; |
| + int param_count = descriptor->register_param_count(); |
| { |
| // Call the runtime system in a fresh internal frame. |
| FrameScope scope(masm, StackFrame::INTERNAL); |
| - ASSERT(descriptor->register_param_count_ == 0 || |
| - eax.is(descriptor->register_params_[param_count - 1])); |
| + ASSERT(descriptor->register_param_count() == 0 || |
| + eax.is(descriptor->GetParameterRegister(param_count - 1))); |
| // Push arguments |
| for (int i = 0; i < param_count; ++i) { |
| - __ push(descriptor->register_params_[i]); |
| + __ push(descriptor->GetParameterRegister(i)); |
| } |
| ExternalReference miss = descriptor->miss_handler(); |
| - __ CallExternalReference(miss, descriptor->register_param_count_); |
| + __ CallExternalReference(miss, descriptor->register_param_count()); |
| } |
| __ ret(0); |