summaryrefslogtreecommitdiff
path: root/deps/v8/src/interface-descriptors.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/interface-descriptors.cc')
-rw-r--r--deps/v8/src/interface-descriptors.cc766
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