| 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
 | 
| 
 |