Index: src/interface-descriptors.cc |
diff --git a/src/interface-descriptors.cc b/src/interface-descriptors.cc |
index 73090d6515e18787b632171b6c2997d46d928ca9..95729095f48ff4da90c9d92737312dc819a7a094 100644 |
--- a/src/interface-descriptors.cc |
+++ b/src/interface-descriptors.cc |
@@ -109,6 +109,21 @@ void StoreTransitionDescriptor::InitializePlatformSpecific( |
} |
+void VectorStoreTransitionDescriptor::InitializePlatformSpecific( |
+ 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); |
+ } |
+} |
+ |
+ |
Type::FunctionType* |
StoreTransitionDescriptor::BuildCallInterfaceDescriptorFunctionType( |
Isolate* isolate, int paramater_count) { |
@@ -228,14 +243,19 @@ Type::FunctionType* |
VectorStoreTransitionDescriptor::BuildCallInterfaceDescriptorFunctionType( |
Isolate* isolate, int paramater_count) { |
Zone* zone = isolate->interface_descriptor_zone(); |
- Type::FunctionType* function = |
- Type::FunctionType::New(AnyTagged(zone), Type::Undefined(), 6, zone); |
- function->InitParameter(0, AnyTagged(zone)); // receiver |
- function->InitParameter(1, AnyTagged(zone)); // name |
- function->InitParameter(2, AnyTagged(zone)); // value |
- function->InitParameter(3, SmiType(zone)); // slot |
- function->InitParameter(4, AnyTagged(zone)); // vector |
- function->InitParameter(5, AnyTagged(zone)); // map |
+ bool has_slot = !VectorStoreTransitionDescriptor::SlotRegister().is(no_reg); |
+ int arg_count = has_slot ? 6 : 5; |
+ Type::FunctionType* function = Type::FunctionType::New( |
+ AnyTagged(zone), Type::Undefined(), arg_count, zone); |
+ int index = 0; |
+ 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; |
} |