diff options
Diffstat (limited to 'deps/v8/src/interface-descriptors.cc')
-rw-r--r-- | deps/v8/src/interface-descriptors.cc | 766 |
1 files changed, 308 insertions, 458 deletions
diff --git a/deps/v8/src/interface-descriptors.cc b/deps/v8/src/interface-descriptors.cc index a16cae7d61..2628b9fb6f 100644 --- a/deps/v8/src/interface-descriptors.cc +++ b/deps/v8/src/interface-descriptors.cc @@ -7,41 +7,6 @@ namespace v8 { namespace internal { -namespace { -// Constructors for common combined semantic and representation types. -Type* SmiType(Zone* zone) { - return Type::Intersect(Type::SignedSmall(), Type::TaggedSigned(), zone); -} - - -Type* UntaggedIntegral32(Zone* zone) { - return Type::Intersect(Type::Signed32(), Type::UntaggedIntegral32(), zone); -} - - -Type* AnyTagged(Zone* zone) { - return Type::Intersect( - Type::Any(), - Type::Union(Type::TaggedPointer(), Type::TaggedSigned(), zone), zone); -} - - -Type* ExternalPointer(Zone* zone) { - return Type::Intersect(Type::Internal(), Type::UntaggedPointer(), zone); -} -} // namespace - -FunctionType* CallInterfaceDescriptor::BuildDefaultFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), parameter_count, zone) - ->AsFunction(); - while (parameter_count-- != 0) { - function->InitParameter(parameter_count, AnyTagged(zone)); - } - return function; -} void CallInterfaceDescriptorData::InitializePlatformSpecific( int register_parameter_count, const Register* registers, @@ -56,6 +21,22 @@ void CallInterfaceDescriptorData::InitializePlatformSpecific( } } +void CallInterfaceDescriptorData::InitializePlatformIndependent( + int parameter_count, int extra_parameter_count, + const MachineType* machine_types) { + // InterfaceDescriptor owns a copy of the MachineType array. + // We only care about parameters, not receiver and result. + param_count_ = parameter_count + extra_parameter_count; + machine_types_.reset(NewArray<MachineType>(param_count_)); + for (int i = 0; i < param_count_; i++) { + if (machine_types == NULL || i >= parameter_count) { + machine_types_[i] = MachineType::AnyTagged(); + } else { + machine_types_[i] = machine_types[i]; + } + } +} + const char* CallInterfaceDescriptor::DebugName(Isolate* isolate) const { CallInterfaceDescriptorData* start = isolate->call_descriptor_data(0); size_t index = data_ - start; @@ -79,15 +60,12 @@ void VoidDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(0, nullptr); } -FunctionType* -FastNewFunctionContextDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), 2, zone)->AsFunction(); - function->InitParameter(0, AnyTagged(zone)); - function->InitParameter(1, UntaggedIntegral32(zone)); - return function; +void FastNewFunctionContextDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::Int32()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } void FastNewFunctionContextDescriptor::InitializePlatformSpecific( @@ -96,33 +74,28 @@ void FastNewFunctionContextDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } -FunctionType* LoadDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kReceiver, AnyTagged(zone)); - function->InitParameter(kName, AnyTagged(zone)); - function->InitParameter(kSlot, SmiType(zone)); - return function; +void LoadDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kReceiver, kName, kSlot + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::AnyTagged(), + MachineType::TaggedSigned()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } - void LoadDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = {ReceiverRegister(), NameRegister(), SlotRegister()}; data->InitializePlatformSpecific(arraysize(registers), registers); } -FunctionType* LoadGlobalDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kSlot, SmiType(zone)); - return function; +void LoadGlobalDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kSlot + MachineType machine_types[] = {MachineType::TaggedSigned()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } void LoadGlobalDescriptor::InitializePlatformSpecific( @@ -131,16 +104,13 @@ void LoadGlobalDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } -FunctionType* -LoadGlobalWithVectorDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kSlot, SmiType(zone)); - function->InitParameter(kVector, AnyTagged(zone)); - return function; +void LoadGlobalWithVectorDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kSlot, kVector + MachineType machine_types[] = {MachineType::TaggedSigned(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } void LoadGlobalWithVectorDescriptor::InitializePlatformSpecific( @@ -150,76 +120,77 @@ void LoadGlobalWithVectorDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } -FunctionType* StoreDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kReceiver, AnyTagged(zone)); - function->InitParameter(kName, AnyTagged(zone)); - function->InitParameter(kValue, AnyTagged(zone)); - function->InitParameter(kSlot, SmiType(zone)); - return function; +void StoreDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kReceiver, kName, kValue, kSlot + MachineType machine_types[] = { + MachineType::AnyTagged(), MachineType::AnyTagged(), + MachineType::AnyTagged(), MachineType::TaggedSigned()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } void StoreDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(), SlotRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} + int len = arraysize(registers) - kStackArgumentsCount; + data->InitializePlatformSpecific(len, registers); +} void StoreTransitionDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { - Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(), - MapRegister()}; - - data->InitializePlatformSpecific(arraysize(registers), registers); + Register registers[] = { + ReceiverRegister(), NameRegister(), MapRegister(), + ValueRegister(), SlotRegister(), VectorRegister(), + }; + int len = arraysize(registers) - kStackArgumentsCount; + data->InitializePlatformSpecific(len, registers); } - -void VectorStoreTransitionDescriptor::InitializePlatformSpecific( +void StoreTransitionDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { - if (SlotRegister().is(no_reg)) { - Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(), - MapRegister(), VectorRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); - } else { - Register registers[] = {ReceiverRegister(), NameRegister(), - ValueRegister(), MapRegister(), - SlotRegister(), VectorRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); - } + // kReceiver, kName, kMap, kValue, kSlot, kVector + MachineType machine_types[] = { + MachineType::AnyTagged(), MachineType::AnyTagged(), + MachineType::AnyTagged(), MachineType::AnyTagged(), + MachineType::TaggedSigned(), MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } -FunctionType* -StoreTransitionDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kReceiver, AnyTagged(zone)); - function->InitParameter(kName, AnyTagged(zone)); - function->InitParameter(kValue, AnyTagged(zone)); - function->InitParameter(kMap, AnyTagged(zone)); - return function; +void StoreNamedTransitionDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kReceiver, kFieldOffset, kMap, kValue, kSlot, kVector, kName + MachineType machine_types[] = { + MachineType::AnyTagged(), MachineType::TaggedSigned(), + MachineType::AnyTagged(), MachineType::AnyTagged(), + MachineType::TaggedSigned(), MachineType::AnyTagged(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } -FunctionType* -StoreGlobalViaContextDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kSlot, UntaggedIntegral32(zone)); - function->InitParameter(kValue, AnyTagged(zone)); - return function; +void StoreNamedTransitionDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + Register registers[] = { + ReceiverRegister(), FieldOffsetRegister(), MapRegister(), + ValueRegister(), SlotRegister(), VectorRegister(), + NameRegister(), + }; + int len = arraysize(registers) - kStackArgumentsCount; + data->InitializePlatformSpecific(len, registers); } +void StoreGlobalViaContextDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kSlot, kValue + MachineType machine_types[] = {MachineType::Int32(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} void StoreGlobalViaContextDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { @@ -252,18 +223,14 @@ void MathPowIntegerDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } -FunctionType* -LoadWithVectorDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kReceiver, AnyTagged(zone)); - function->InitParameter(kName, AnyTagged(zone)); - function->InitParameter(kSlot, SmiType(zone)); - function->InitParameter(kVector, AnyTagged(zone)); - return function; +void LoadWithVectorDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kReceiver, kName, kSlot, kVector + MachineType machine_types[] = { + MachineType::AnyTagged(), MachineType::AnyTagged(), + MachineType::TaggedSigned(), MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } @@ -274,63 +241,33 @@ void LoadWithVectorDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } -FunctionType* -VectorStoreTransitionDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - bool has_slot = !VectorStoreTransitionDescriptor::SlotRegister().is(no_reg); - int arg_count = has_slot ? 6 : 5; - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), arg_count, zone) - ->AsFunction(); - int index = 0; - // TODO(ishell): use ParameterIndices here - function->InitParameter(index++, AnyTagged(zone)); // receiver - function->InitParameter(index++, AnyTagged(zone)); // name - function->InitParameter(index++, AnyTagged(zone)); // value - function->InitParameter(index++, AnyTagged(zone)); // map - if (has_slot) { - function->InitParameter(index++, SmiType(zone)); // slot - } - function->InitParameter(index++, AnyTagged(zone)); // vector - return function; -} - -FunctionType* -StoreWithVectorDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kReceiver, AnyTagged(zone)); - function->InitParameter(kName, AnyTagged(zone)); - function->InitParameter(kValue, AnyTagged(zone)); - function->InitParameter(kSlot, SmiType(zone)); - function->InitParameter(kVector, AnyTagged(zone)); - return function; +void StoreWithVectorDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kReceiver, kName, kValue, kSlot, kVector + MachineType machine_types[] = { + MachineType::AnyTagged(), MachineType::AnyTagged(), + MachineType::AnyTagged(), MachineType::TaggedSigned(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } void StoreWithVectorDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(), SlotRegister(), VectorRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); + int len = arraysize(registers) - kStackArgumentsCount; + data->InitializePlatformSpecific(len, registers); } -FunctionType* -BinaryOpWithVectorDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - DCHECK_EQ(parameter_count, kParameterCount); - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kLeft, AnyTagged(zone)); - function->InitParameter(kRight, AnyTagged(zone)); - function->InitParameter(kSlot, UntaggedIntegral32(zone)); - function->InitParameter(kVector, AnyTagged(zone)); - return function; +void BinaryOpWithVectorDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kLeft, kRight, kSlot, kVector + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::AnyTagged(), MachineType::Int32(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } const Register ApiGetterDescriptor::ReceiverRegister() { @@ -349,291 +286,204 @@ void ContextOnlyDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(0, nullptr); } -CallInterfaceDescriptor OnStackArgsDescriptorBase::ForArgs( - Isolate* isolate, int parameter_count) { - switch (parameter_count) { - case 1: - return OnStackWith1ArgsDescriptor(isolate); - case 2: - return OnStackWith2ArgsDescriptor(isolate); - case 3: - return OnStackWith3ArgsDescriptor(isolate); - case 4: - return OnStackWith4ArgsDescriptor(isolate); - case 5: - return OnStackWith5ArgsDescriptor(isolate); - case 6: - return OnStackWith6ArgsDescriptor(isolate); - case 7: - return OnStackWith7ArgsDescriptor(isolate); - default: - UNREACHABLE(); - return VoidDescriptor(isolate); - } +void GrowArrayElementsDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + Register registers[] = {ObjectRegister(), KeyRegister()}; + data->InitializePlatformSpecific(arraysize(registers), registers); } -FunctionType* -OnStackArgsDescriptorBase::BuildCallInterfaceDescriptorFunctionTypeWithArg( - Isolate* isolate, int register_parameter_count, int parameter_count) { - DCHECK_EQ(0, register_parameter_count); - DCHECK_GT(parameter_count, 0); - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), AnyTagged(zone), parameter_count, zone) - ->AsFunction(); - for (int i = 0; i < parameter_count; i++) { - function->InitParameter(i, AnyTagged(zone)); - } - return function; +void VarArgFunctionDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kActualArgumentsCount + MachineType machine_types[] = {MachineType::Int32()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } -void OnStackArgsDescriptorBase::InitializePlatformSpecific( +void FastCloneRegExpDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { - data->InitializePlatformSpecific(0, nullptr); + // kClosure, kLiteralIndex, kPattern, kFlags + MachineType machine_types[] = { + MachineType::AnyTagged(), MachineType::TaggedSigned(), + MachineType::AnyTagged(), MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } -void GrowArrayElementsDescriptor::InitializePlatformSpecific( +void FastCloneShallowArrayDescriptor::InitializePlatformIndependent( CallInterfaceDescriptorData* data) { - Register registers[] = {ObjectRegister(), KeyRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); + // kClosure, kLiteralIndex, kConstantElements + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::TaggedSigned(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } -FunctionType* -VarArgFunctionDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), AnyTagged(zone), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); - return function; -} - -FunctionType* -FastCloneRegExpDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kClosure, AnyTagged(zone)); - function->InitParameter(kLiteralIndex, SmiType(zone)); - function->InitParameter(kPattern, AnyTagged(zone)); - function->InitParameter(kFlags, AnyTagged(zone)); - return function; -} - -FunctionType* -FastCloneShallowArrayDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kClosure, AnyTagged(zone)); - function->InitParameter(kLiteralIndex, SmiType(zone)); - function->InitParameter(kConstantElements, AnyTagged(zone)); - return function; -} - -FunctionType* -CreateAllocationSiteDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kVector, AnyTagged(zone)); - function->InitParameter(kSlot, SmiType(zone)); - return function; -} - -FunctionType* -CreateWeakCellDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kVector, AnyTagged(zone)); - function->InitParameter(kSlot, SmiType(zone)); - function->InitParameter(kValue, AnyTagged(zone)); - return function; -} - -FunctionType* -CallTrampolineDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kFunction, AnyTagged(zone)); - function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); - return function; -} - -FunctionType* ConstructStubDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kFunction, AnyTagged(zone)); - function->InitParameter(kNewTarget, AnyTagged(zone)); - function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); - function->InitParameter(kAllocationSite, AnyTagged(zone)); - return function; -} - -FunctionType* -ConstructTrampolineDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kFunction, AnyTagged(zone)); - function->InitParameter(kNewTarget, AnyTagged(zone)); - function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); - return function; -} - -FunctionType* -CallFunctionWithFeedbackDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kFunction, Type::Receiver()); - function->InitParameter(kSlot, SmiType(zone)); - return function; -} - -FunctionType* CallFunctionWithFeedbackAndVectorDescriptor:: - BuildCallInterfaceDescriptorFunctionType(Isolate* isolate, - int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kFunction, Type::Receiver()); - function->InitParameter(kSlot, SmiType(zone)); - function->InitParameter(kVector, AnyTagged(zone)); - return function; -} - -FunctionType* -ArrayNoArgumentConstructorDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kFunction, Type::Receiver()); - function->InitParameter(kAllocationSite, AnyTagged(zone)); - function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); - function->InitParameter(kFunctionParameter, AnyTagged(zone)); - return function; -} - -FunctionType* ArraySingleArgumentConstructorDescriptor:: - BuildCallInterfaceDescriptorFunctionType(Isolate* isolate, - int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kFunction, Type::Receiver()); - function->InitParameter(kAllocationSite, AnyTagged(zone)); - function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); - function->InitParameter(kFunctionParameter, AnyTagged(zone)); - function->InitParameter(kArraySizeSmiParameter, AnyTagged(zone)); - return function; -} - -FunctionType* -ArrayNArgumentsConstructorDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kFunction, Type::Receiver()); - function->InitParameter(kAllocationSite, AnyTagged(zone)); - function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); - return function; -} - -FunctionType* -ArgumentAdaptorDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kFunction, Type::Receiver()); - function->InitParameter(kNewTarget, AnyTagged(zone)); - function->InitParameter(kActualArgumentsCount, UntaggedIntegral32(zone)); - function->InitParameter(kExpectedArgumentsCount, UntaggedIntegral32(zone)); - return function; -} - -CallInterfaceDescriptor ApiCallbackDescriptorBase::ForArgs(Isolate* isolate, - int argc) { - switch (argc) { - case 0: - return ApiCallbackWith0ArgsDescriptor(isolate); - case 1: - return ApiCallbackWith1ArgsDescriptor(isolate); - case 2: - return ApiCallbackWith2ArgsDescriptor(isolate); - case 3: - return ApiCallbackWith3ArgsDescriptor(isolate); - case 4: - return ApiCallbackWith4ArgsDescriptor(isolate); - case 5: - return ApiCallbackWith5ArgsDescriptor(isolate); - case 6: - return ApiCallbackWith6ArgsDescriptor(isolate); - case 7: - return ApiCallbackWith7ArgsDescriptor(isolate); - default: - UNREACHABLE(); - return VoidDescriptor(isolate); - } +void CreateAllocationSiteDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kVector, kSlot + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::TaggedSigned()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } -FunctionType* -ApiCallbackDescriptorBase::BuildCallInterfaceDescriptorFunctionTypeWithArg( - Isolate* isolate, int parameter_count, int argc) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = Type::Function(AnyTagged(zone), Type::Undefined(), - kParameterCount + argc, zone) - ->AsFunction(); - function->InitParameter(kFunction, AnyTagged(zone)); - function->InitParameter(kCallData, AnyTagged(zone)); - function->InitParameter(kHolder, AnyTagged(zone)); - function->InitParameter(kApiFunctionAddress, ExternalPointer(zone)); - for (int i = 0; i < argc; i++) { - function->InitParameter(i, AnyTagged(zone)); - } - return function; -} - -FunctionType* -InterpreterDispatchDescriptor::BuildCallInterfaceDescriptorFunctionType( - Isolate* isolate, int parameter_count) { - Zone* zone = isolate->interface_descriptor_zone(); - FunctionType* function = - Type::Function(AnyTagged(zone), Type::Undefined(), kParameterCount, zone) - ->AsFunction(); - function->InitParameter(kAccumulator, AnyTagged(zone)); - function->InitParameter(kBytecodeOffset, UntaggedIntegral32(zone)); - function->InitParameter(kBytecodeArray, AnyTagged(zone)); - function->InitParameter(kDispatchTable, AnyTagged(zone)); - return function; +void CreateWeakCellDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kVector, kSlot, kValue + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::TaggedSigned(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void CallTrampolineDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kFunction, kActualArgumentsCount + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::Int32()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void ConstructStubDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kFunction, kNewTarget, kActualArgumentsCount, kAllocationSite + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::AnyTagged(), MachineType::Int32(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void ConstructTrampolineDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kFunction, kNewTarget, kActualArgumentsCount + MachineType machine_types[] = { + MachineType::AnyTagged(), MachineType::AnyTagged(), MachineType::Int32()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void CallFunctionWithFeedbackDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kFunction, kSlot + MachineType machine_types[] = {MachineType::AnyTagged(), + MachineType::TaggedSigned()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void CallFunctionWithFeedbackAndVectorDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kFunction, kSlot, kVector + MachineType machine_types[] = {MachineType::TaggedPointer(), + MachineType::TaggedSigned(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void ArrayNoArgumentConstructorDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kFunction, kAllocationSite, kActualArgumentsCount, kFunctionParameter + MachineType machine_types[] = {MachineType::TaggedPointer(), + MachineType::AnyTagged(), MachineType::Int32(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void ArraySingleArgumentConstructorDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kFunction, kAllocationSite, kActualArgumentsCount, kFunctionParameter, + // kArraySizeSmiParameter + MachineType machine_types[] = { + MachineType::TaggedPointer(), MachineType::AnyTagged(), + MachineType::Int32(), MachineType::AnyTagged(), MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void ArrayNArgumentsConstructorDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kFunction, kAllocationSite, kActualArgumentsCount + MachineType machine_types[] = {MachineType::TaggedPointer(), + MachineType::AnyTagged(), + MachineType::Int32()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void ArgumentAdaptorDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kFunction, kNewTarget, kActualArgumentsCount, kExpectedArgumentsCount + MachineType machine_types[] = {MachineType::TaggedPointer(), + MachineType::AnyTagged(), MachineType::Int32(), + MachineType::Int32()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void ApiCallbackDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kFunction, kCallData, kHolder, kApiFunctionAddress + MachineType machine_types[] = { + MachineType::AnyTagged(), MachineType::AnyTagged(), + MachineType::AnyTagged(), MachineType::Pointer()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void InterpreterDispatchDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kAccumulator, kBytecodeOffset, kBytecodeArray, kDispatchTable + MachineType machine_types[] = { + MachineType::AnyTagged(), MachineType::IntPtr(), MachineType::AnyTagged(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void InterpreterPushArgsAndCallDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kNumberOfArguments, kFirstArgument, kFunction + MachineType machine_types[] = {MachineType::Int32(), MachineType::Pointer(), + MachineType::AnyTagged()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void InterpreterPushArgsAndConstructDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kNumberOfArguments, kNewTarget, kConstructor, kFeedbackElement, + // kFirstArgument + MachineType machine_types[] = { + MachineType::Int32(), MachineType::AnyTagged(), MachineType::AnyTagged(), + MachineType::AnyTagged(), MachineType::Pointer()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void InterpreterPushArgsAndConstructArrayDescriptor:: + InitializePlatformIndependent(CallInterfaceDescriptorData* data) { + // kNumberOfArguments, kFunction, kFeedbackElement, kFirstArgument + MachineType machine_types[] = {MachineType::Int32(), MachineType::AnyTagged(), + MachineType::AnyTagged(), + MachineType::Pointer()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); +} + +void InterpreterCEntryDescriptor::InitializePlatformIndependent( + CallInterfaceDescriptorData* data) { + // kNumberOfArguments, kFirstArgument, kFunctionEntry + MachineType machine_types[] = {MachineType::Int32(), MachineType::Pointer(), + MachineType::Pointer()}; + data->InitializePlatformIndependent(arraysize(machine_types), 0, + machine_types); } } // namespace internal |