Index: src/x87/code-stubs-x87.cc |
diff --git a/src/x87/code-stubs-x87.cc b/src/x87/code-stubs-x87.cc |
index df019361b62a84e939443f7ca1fe63b5f1a86fa8..e5a0c9bbbdffa8a4113bad1f63c390aae307b926 100644 |
--- a/src/x87/code-stubs-x87.cc |
+++ b/src/x87/code-stubs-x87.cc |
@@ -21,169 +21,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::kNewClosureFromStubFailure)->entry; |
+ Register registers[] = { ebx }; |
+ descriptor->Initialize( |
+ ARRAY_SIZE(registers), registers, |
+ Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->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::kNumberToStringRT)->entry; |
+ Register registers[] = { eax }; |
+ descriptor->Initialize( |
+ ARRAY_SIZE(registers), registers, |
+ Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry); |
} |
void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
- static Register registers[] = { eax, ebx, ecx }; |
- 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::kCreateArrayLiteralStubBailout)->entry; |
+ Register registers[] = { eax, ebx, ecx }; |
+ Representation representations[] = { |
+ Representation::Tagged(), |
+ Representation::Smi(), |
+ Representation::Tagged() }; |
+ |
+ descriptor->Initialize( |
+ ARRAY_SIZE(registers), registers, |
+ Runtime::FunctionForId( |
+ Runtime::kCreateArrayLiteralStubBailout)->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::kCreateObjectLiteral)->entry; |
+ Register registers[] = { eax, ebx, ecx, edx }; |
+ descriptor->Initialize( |
+ ARRAY_SIZE(registers), registers, |
+ Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->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::kRegExpConstructResult)->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::kRegExpConstructResult)->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 }; |
+ 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); |
} |
@@ -195,29 +146,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::kArrayConstructor)->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::kArrayConstructor)->entry; |
} |
@@ -227,28 +180,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::kInternalArrayConstructor)->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::kInternalArrayConstructor)->entry; |
} |
@@ -290,22 +245,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())); |
} |
@@ -313,30 +264,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())); |
} |
@@ -344,21 +290,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::kStringAdd)->entry; |
+ Register registers[] = { edx, eax }; |
+ descriptor->Initialize( |
+ ARRAY_SIZE(registers), registers, |
+ Runtime::FunctionForId(Runtime::kStringAdd)->entry); |
} |
@@ -454,18 +397,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); |