| Index: src/interface-descriptors.cc
|
| diff --git a/src/interface-descriptors.cc b/src/interface-descriptors.cc
|
| index a16cae7d61cc68062f2f9b8926eb2573f5405dd7..88d4164f6a25b3f33def10777f4b608621eb4763 100644
|
| --- a/src/interface-descriptors.cc
|
| +++ b/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,17 +120,14 @@ 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(
|
| @@ -194,32 +161,24 @@ void VectorStoreTransitionDescriptor::InitializePlatformSpecific(
|
| }
|
| }
|
|
|
| -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;
|
| -}
|
| -
|
| -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 StoreTransitionDescriptor::InitializePlatformIndependent(
|
| + CallInterfaceDescriptorData* data) {
|
| + // kReceiver, kName, kValue, kMap
|
| + MachineType machine_types[] = {
|
| + MachineType::AnyTagged(), MachineType::AnyTagged(),
|
| + MachineType::AnyTagged(), MachineType::AnyTagged()};
|
| + data->InitializePlatformIndependent(arraysize(machine_types), 0,
|
| + machine_types);
|
| }
|
|
|
| +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 +211,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,41 +229,38 @@ void LoadWithVectorDescriptor::InitializePlatformSpecific(
|
| data->InitializePlatformSpecific(arraysize(registers), registers);
|
| }
|
|
|
| -FunctionType*
|
| -VectorStoreTransitionDescriptor::BuildCallInterfaceDescriptorFunctionType(
|
| - Isolate* isolate, int parameter_count) {
|
| - Zone* zone = isolate->interface_descriptor_zone();
|
| +void VectorStoreTransitionDescriptor::InitializePlatformIndependent(
|
| + CallInterfaceDescriptorData* data) {
|
| 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
|
| + // kReceiver, kName, kValue, kMap, 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);
|
| + } else {
|
| + // kReceiver, kName, kValue, kMap, kVector
|
| + MachineType machine_types[] = {
|
| + MachineType::AnyTagged(), MachineType::AnyTagged(),
|
| + MachineType::AnyTagged(), MachineType::AnyTagged(),
|
| + MachineType::AnyTagged()};
|
| + data->InitializePlatformIndependent(arraysize(machine_types), 0,
|
| + machine_types);
|
| }
|
| - 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(
|
| @@ -318,19 +270,14 @@ void StoreWithVectorDescriptor::InitializePlatformSpecific(
|
| data->InitializePlatformSpecific(arraysize(registers), 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() {
|
| @@ -372,19 +319,9 @@ CallInterfaceDescriptor OnStackArgsDescriptorBase::ForArgs(
|
| }
|
| }
|
|
|
| -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 OnStackArgsDescriptorBase::InitializePlatformIndependent(
|
| + CallInterfaceDescriptorData* data) {
|
| + data->InitializePlatformIndependent(0, extra_args(), NULL);
|
| }
|
|
|
| void OnStackArgsDescriptorBase::InitializePlatformSpecific(
|
| @@ -398,186 +335,139 @@ void GrowArrayElementsDescriptor::InitializePlatformSpecific(
|
| data->InitializePlatformSpecific(arraysize(registers), registers);
|
| }
|
|
|
| -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;
|
| +void VarArgFunctionDescriptor::InitializePlatformIndependent(
|
| + CallInterfaceDescriptorData* data) {
|
| + // kActualArgumentsCount
|
| + MachineType machine_types[] = {MachineType::Int32()};
|
| + data->InitializePlatformIndependent(arraysize(machine_types), 0,
|
| + machine_types);
|
| }
|
|
|
| -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;
|
| +void FastCloneRegExpDescriptor::InitializePlatformIndependent(
|
| + CallInterfaceDescriptorData* data) {
|
| + // kClosure, kLiteralIndex, kPattern, kFlags
|
| + MachineType machine_types[] = {
|
| + MachineType::AnyTagged(), MachineType::TaggedSigned(),
|
| + MachineType::AnyTagged(), MachineType::AnyTagged()};
|
| + data->InitializePlatformIndependent(arraysize(machine_types), 0,
|
| + machine_types);
|
| }
|
|
|
| -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;
|
| +void FastCloneShallowArrayDescriptor::InitializePlatformIndependent(
|
| + CallInterfaceDescriptorData* data) {
|
| + // kClosure, kLiteralIndex, kConstantElements
|
| + MachineType machine_types[] = {MachineType::AnyTagged(),
|
| + MachineType::TaggedSigned(),
|
| + MachineType::AnyTagged()};
|
| + data->InitializePlatformIndependent(arraysize(machine_types), 0,
|
| + machine_types);
|
| }
|
|
|
| -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;
|
| +void CreateAllocationSiteDescriptor::InitializePlatformIndependent(
|
| + CallInterfaceDescriptorData* data) {
|
| + // kVector, kSlot
|
| + MachineType machine_types[] = {MachineType::AnyTagged(),
|
| + MachineType::TaggedSigned()};
|
| + data->InitializePlatformIndependent(arraysize(machine_types), 0,
|
| + machine_types);
|
| +}
|
| +
|
| +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);
|
| }
|
|
|
| CallInterfaceDescriptor ApiCallbackDescriptorBase::ForArgs(Isolate* isolate,
|
| @@ -605,35 +495,24 @@ CallInterfaceDescriptor ApiCallbackDescriptorBase::ForArgs(Isolate* isolate,
|
| }
|
| }
|
|
|
| -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;
|
| +void ApiCallbackDescriptorBase::InitializePlatformIndependent(
|
| + CallInterfaceDescriptorData* data) {
|
| + // kFunction, kCallData, kHolder, kApiFunctionAddress
|
| + MachineType machine_types[] = {
|
| + MachineType::AnyTagged(), MachineType::AnyTagged(),
|
| + MachineType::AnyTagged(), MachineType::Pointer()};
|
| + data->InitializePlatformIndependent(arraysize(machine_types), extra_args(),
|
| + machine_types);
|
| }
|
|
|
| -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 InterpreterDispatchDescriptor::InitializePlatformIndependent(
|
| + CallInterfaceDescriptorData* data) {
|
| + // kAccumulator, kBytecodeOffset, kBytecodeArray, kDispatchTable
|
| + MachineType machine_types[] = {MachineType::AnyTagged(), MachineType::Int32(),
|
| + MachineType::AnyTagged(),
|
| + MachineType::AnyTagged()};
|
| + data->InitializePlatformIndependent(arraysize(machine_types), 0,
|
| + machine_types);
|
| }
|
|
|
| } // namespace internal
|
|
|