Index: src/arm64/code-stubs-arm64.cc |
diff --git a/src/arm64/code-stubs-arm64.cc b/src/arm64/code-stubs-arm64.cc |
index 70ead443fd647ffb12c72933996a5857305dd01e..280c681b1b36887e82c7f3833916d804579faf39 100644 |
--- a/src/arm64/code-stubs-arm64.cc |
+++ b/src/arm64/code-stubs-arm64.cc |
@@ -14,46 +14,39 @@ |
namespace v8 { |
namespace internal { |
- |
void FastNewClosureStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
// x2: function info |
- static Register registers[] = { x2 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = |
- Runtime::FunctionForId(Runtime::kHiddenNewClosureFromStubFailure)->entry; |
+ Register registers[] = { x2 }; |
+ descriptor->Initialize( |
+ ARRAY_SIZE(registers), registers, |
+ Runtime::FunctionForId(Runtime::kHiddenNewClosureFromStubFailure)->entry); |
} |
void FastNewContextStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
// x1: function |
- static Register registers[] = { x1 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = NULL; |
+ Register registers[] = { x1 }; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers); |
} |
void ToNumberStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
// x0: value |
- static Register registers[] = { x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = NULL; |
+ Register registers[] = { x0 }; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers); |
} |
void NumberToStringStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
// x0: value |
- static Register registers[] = { x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = |
- Runtime::FunctionForId(Runtime::kHiddenNumberToString)->entry; |
+ Register registers[] = { x0 }; |
+ descriptor->Initialize( |
+ ARRAY_SIZE(registers), registers, |
+ Runtime::FunctionForId(Runtime::kHiddenNumberToString)->entry); |
} |
@@ -62,17 +55,16 @@ void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( |
// x3: array literals array |
// x2: array literal index |
// x1: constant elements |
- static Register registers[] = { x3, x2, x1 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- static Representation representations[] = { |
+ Register registers[] = { x3, x2, x1 }; |
+ 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); |
} |
@@ -82,11 +74,10 @@ void FastCloneShallowObjectStub::InitializeInterfaceDescriptor( |
// x2: object literal index |
// x1: constant properties |
// x0: object literal flags |
- static Register registers[] = { x3, x2, x1, x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = |
- Runtime::FunctionForId(Runtime::kHiddenCreateObjectLiteral)->entry; |
+ Register registers[] = { x3, x2, x1, x0 }; |
+ descriptor->Initialize( |
+ ARRAY_SIZE(registers), registers, |
+ Runtime::FunctionForId(Runtime::kHiddenCreateObjectLiteral)->entry); |
} |
@@ -94,44 +85,8 @@ void CreateAllocationSiteStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
// x2: feedback vector |
// x3: call feedback slot |
- static Register registers[] = { x2, x3 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = NULL; |
-} |
- |
- |
-void KeyedLoadGenericElementStub::InitializeInterfaceDescriptor( |
- CodeStubInterfaceDescriptor* descriptor) { |
- static Register registers[] = { x1, x0 }; |
- descriptor->register_param_count_ = 2; |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = |
- Runtime::FunctionForId(Runtime::kKeyedGetProperty)->entry; |
-} |
- |
- |
-void KeyedLoadFastElementStub::InitializeInterfaceDescriptor( |
- CodeStubInterfaceDescriptor* descriptor) { |
- // x1: receiver |
- // x0: key |
- static Register registers[] = { x1, x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = |
- FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure); |
-} |
- |
- |
-void KeyedLoadDictionaryElementStub::InitializeInterfaceDescriptor( |
- CodeStubInterfaceDescriptor* descriptor) { |
- // x1: receiver |
- // x0: key |
- static Register registers[] = { x1, x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = |
- FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure); |
+ Register registers[] = { x2, x3 }; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers); |
} |
@@ -140,49 +95,40 @@ void RegExpConstructResultStub::InitializeInterfaceDescriptor( |
// x2: length |
// x1: index (of last match) |
// x0: string |
- static Register registers[] = { x2, x1, x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = |
- Runtime::FunctionForId(Runtime::kHiddenRegExpConstructResult)->entry; |
+ Register registers[] = { x2, x1, x0 }; |
+ descriptor->Initialize( |
+ ARRAY_SIZE(registers), registers, |
+ Runtime::FunctionForId(Runtime::kHiddenRegExpConstructResult)->entry); |
} |
void LoadFieldStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
// x0: receiver |
- static Register registers[] = { x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = NULL; |
+ Register registers[] = { x0 }; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers); |
} |
void KeyedLoadFieldStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
// x1: receiver |
- static Register registers[] = { x1 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = NULL; |
+ Register registers[] = { x1 }; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers); |
} |
void StringLengthStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
- static Register registers[] = { x0, x2 }; |
- descriptor->register_param_count_ = 2; |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = NULL; |
+ Register registers[] = { x0, x2 }; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers); |
} |
void KeyedStringLengthStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
- static Register registers[] = { x1, x0 }; |
- descriptor->register_param_count_ = 2; |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = NULL; |
+ Register registers[] = { x1, x0 }; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers); |
} |
@@ -191,11 +137,10 @@ void KeyedStoreFastElementStub::InitializeInterfaceDescriptor( |
// x2: receiver |
// x1: key |
// x0: value |
- static Register registers[] = { x2, x1, x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = |
- FUNCTION_ADDR(KeyedStoreIC_MissFromStubFailure); |
+ Register registers[] = { x2, x1, x0 }; |
+ descriptor->Initialize( |
+ ARRAY_SIZE(registers), registers, |
+ FUNCTION_ADDR(KeyedStoreIC_MissFromStubFailure)); |
} |
@@ -203,23 +148,20 @@ void TransitionElementsKindStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
// x0: value (js_array) |
// x1: to_map |
- static Register registers[] = { x0, x1 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
+ Register registers[] = { x0, x1 }; |
Address entry = |
Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry; |
- descriptor->deoptimization_handler_ = FUNCTION_ADDR(entry); |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers, |
+ FUNCTION_ADDR(entry)); |
} |
void CompareNilICStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
// x0: value to compare |
- static Register registers[] = { x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = |
- FUNCTION_ADDR(CompareNilIC_Miss); |
+ Register registers[] = { x0 }; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers, |
+ FUNCTION_ADDR(CompareNilIC_Miss)); |
descriptor->SetMissHandler( |
ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate())); |
} |
@@ -231,31 +173,31 @@ static void InitializeArrayConstructorDescriptor( |
// x1: function |
// x2: allocation site with elements kind |
// x0: number of arguments to the constructor function |
- static Register registers_variable_args[] = { x1, x2, x0 }; |
- static Register registers_no_args[] = { x1, x2 }; |
+ Address deopt_handler = Runtime::FunctionForId( |
+ Runtime::kHiddenArrayConstructor)->entry; |
if (constant_stack_parameter_count == 0) { |
- descriptor->register_param_count_ = |
- sizeof(registers_no_args) / sizeof(registers_no_args[0]); |
- descriptor->register_params_ = registers_no_args; |
+ Register registers[] = { x1, x2 }; |
+ 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_ = x0; |
- descriptor->register_param_count_ = |
- sizeof(registers_variable_args) / sizeof(registers_variable_args[0]); |
- descriptor->register_params_ = registers_variable_args; |
- static Representation representations[] = { |
+ Register registers[] = { x1, x2, x0 }; |
+ Representation representations[] = { |
Representation::Tagged(), |
Representation::Tagged(), |
Representation::Integer32() }; |
- descriptor->register_param_representations_ = representations; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers, |
+ x0, |
+ 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; |
} |
@@ -282,30 +224,30 @@ static void InitializeInternalArrayConstructorDescriptor( |
int constant_stack_parameter_count) { |
// x1: constructor function |
// x0: number of arguments to the constructor function |
- static Register registers_variable_args[] = { x1, x0 }; |
- static Register registers_no_args[] = { x1 }; |
+ Address deopt_handler = Runtime::FunctionForId( |
+ Runtime::kHiddenInternalArrayConstructor)->entry; |
if (constant_stack_parameter_count == 0) { |
- descriptor->register_param_count_ = |
- sizeof(registers_no_args) / sizeof(registers_no_args[0]); |
- descriptor->register_params_ = registers_no_args; |
+ Register registers[] = { x1 }; |
+ 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_ = x0; |
- descriptor->register_param_count_ = |
- sizeof(registers_variable_args) / sizeof(registers_variable_args[0]); |
- descriptor->register_params_ = registers_variable_args; |
- static Representation representations[] = { |
+ Register registers[] = { x1, x0 }; |
+ Representation representations[] = { |
Representation::Tagged(), |
Representation::Integer32() }; |
- descriptor->register_param_representations_ = representations; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers, |
+ x0, |
+ 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; |
} |
@@ -330,10 +272,9 @@ void InternalArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor( |
void ToBooleanStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
// x0: value |
- static Register registers[] = { x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = FUNCTION_ADDR(ToBooleanIC_Miss); |
+ Register registers[] = { x0 }; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers, |
+ FUNCTION_ADDR(ToBooleanIC_Miss)); |
descriptor->SetMissHandler( |
ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate())); |
} |
@@ -344,11 +285,9 @@ void StoreGlobalStub::InitializeInterfaceDescriptor( |
// x1: receiver |
// x2: key (unused) |
// x0: value |
- static Register registers[] = { x1, x2, x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = |
- FUNCTION_ADDR(StoreIC_MissFromStubFailure); |
+ Register registers[] = { x1, x2, x0 }; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers, |
+ FUNCTION_ADDR(StoreIC_MissFromStubFailure)); |
} |
@@ -358,11 +297,9 @@ void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor( |
// x3: target map |
// x1: key |
// x2: receiver |
- static Register registers[] = { x0, x3, x1, x2 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = |
- FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss); |
+ Register registers[] = { x0, x3, x1, x2 }; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers, |
+ FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss)); |
} |
@@ -370,10 +307,9 @@ void BinaryOpICStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
// x1: left operand |
// x0: right operand |
- static Register registers[] = { x1, x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = FUNCTION_ADDR(BinaryOpIC_Miss); |
+ Register registers[] = { x1, x0 }; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers, |
+ FUNCTION_ADDR(BinaryOpIC_Miss)); |
descriptor->SetMissHandler( |
ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate())); |
} |
@@ -384,11 +320,9 @@ void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor( |
// x2: allocation site |
// x1: left operand |
// x0: right operand |
- static Register registers[] = { x2, x1, x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = |
- FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite); |
+ Register registers[] = { x2, x1, x0 }; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers, |
+ FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite)); |
} |
@@ -396,11 +330,10 @@ void StringAddStub::InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) { |
// x1: left operand |
// x0: right operand |
- static Register registers[] = { x1, x0 }; |
- descriptor->register_param_count_ = sizeof(registers) / sizeof(registers[0]); |
- descriptor->register_params_ = registers; |
- descriptor->deoptimization_handler_ = |
- Runtime::FunctionForId(Runtime::kHiddenStringAdd)->entry; |
+ Register registers[] = { x1, x0 }; |
+ descriptor->Initialize( |
+ ARRAY_SIZE(registers), registers, |
+ Runtime::FunctionForId(Runtime::kHiddenStringAdd)->entry); |
} |
@@ -507,22 +440,22 @@ 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) || |
- x0.Is(descriptor->register_params_[param_count - 1])); |
+ ASSERT((descriptor->register_param_count() == 0) || |
+ x0.Is(descriptor->GetParameterRegister(param_count - 1))); |
// Push arguments |
MacroAssembler::PushPopQueue queue(masm); |
for (int i = 0; i < param_count; ++i) { |
- queue.Queue(descriptor->register_params_[i]); |
+ queue.Queue(descriptor->GetParameterRegister(i)); |
} |
queue.PushQueued(); |
ExternalReference miss = descriptor->miss_handler(); |
- __ CallExternalReference(miss, descriptor->register_param_count_); |
+ __ CallExternalReference(miss, descriptor->register_param_count()); |
} |
__ Ret(); |