| Index: src/interface-descriptors.cc
|
| diff --git a/src/interface-descriptors.cc b/src/interface-descriptors.cc
|
| index 88d4164f6a25b3f33def10777f4b608621eb4763..9cd8516c14b64c179ed4ecae7ff6ad43f877f758 100644
|
| --- a/src/interface-descriptors.cc
|
| +++ b/src/interface-descriptors.cc
|
| @@ -137,36 +137,35 @@ void StoreDescriptor::InitializePlatformSpecific(
|
| data->InitializePlatformSpecific(arraysize(registers), registers);
|
| }
|
|
|
| -
|
| -void StoreTransitionDescriptor::InitializePlatformSpecific(
|
| - CallInterfaceDescriptorData* data) {
|
| - Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(),
|
| - MapRegister()};
|
| -
|
| - data->InitializePlatformSpecific(arraysize(registers), registers);
|
| +bool StoreTransitionDescriptor::PassVectorAndSlotOnStack() {
|
| +#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X87
|
| + return true;
|
| +#else
|
| + return false;
|
| +#endif
|
| }
|
|
|
| -
|
| -void VectorStoreTransitionDescriptor::InitializePlatformSpecific(
|
| +void StoreTransitionDescriptor::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);
|
| + Register registers[] = {
|
| + ReceiverRegister(), NameRegister(), MapRegister(),
|
| + ValueRegister(), SlotRegister(), VectorRegister(),
|
| + };
|
| + int len = arraysize(registers);
|
| + if (PassVectorAndSlotOnStack()) {
|
| + // Pass slot and vector on the stack.
|
| + len -= 2;
|
| }
|
| + data->InitializePlatformSpecific(len, registers);
|
| }
|
|
|
| void StoreTransitionDescriptor::InitializePlatformIndependent(
|
| CallInterfaceDescriptorData* data) {
|
| - // kReceiver, kName, kValue, kMap
|
| + // kReceiver, kName, kMap, kValue, kSlot, kVector
|
| MachineType machine_types[] = {
|
| - MachineType::AnyTagged(), MachineType::AnyTagged(),
|
| - MachineType::AnyTagged(), MachineType::AnyTagged()};
|
| + MachineType::AnyTagged(), MachineType::AnyTagged(),
|
| + MachineType::AnyTagged(), MachineType::AnyTagged(),
|
| + MachineType::TaggedSigned(), MachineType::AnyTagged()};
|
| data->InitializePlatformIndependent(arraysize(machine_types), 0,
|
| machine_types);
|
| }
|
| @@ -229,29 +228,6 @@ void LoadWithVectorDescriptor::InitializePlatformSpecific(
|
| data->InitializePlatformSpecific(arraysize(registers), registers);
|
| }
|
|
|
| -void VectorStoreTransitionDescriptor::InitializePlatformIndependent(
|
| - CallInterfaceDescriptorData* data) {
|
| - bool has_slot = !VectorStoreTransitionDescriptor::SlotRegister().is(no_reg);
|
| -
|
| - if (has_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);
|
| - }
|
| -}
|
| -
|
| void StoreWithVectorDescriptor::InitializePlatformIndependent(
|
| CallInterfaceDescriptorData* data) {
|
| // kReceiver, kName, kValue, kSlot, kVector
|
|
|