| Index: src/ic/handler-compiler.cc
|
| diff --git a/src/ic/handler-compiler.cc b/src/ic/handler-compiler.cc
|
| index db2e319b90f34afd445d39e17e12e673e279e923..b88f6db0ca26e504d78b9d54715b1ed862d9f640 100644
|
| --- a/src/ic/handler-compiler.cc
|
| +++ b/src/ic/handler-compiler.cc
|
| @@ -441,23 +441,24 @@ Handle<Code> NamedStoreHandlerCompiler::CompileStoreTransition(
|
| // Ensure that the StoreTransitionStub we are going to call has the same
|
| // number of stack arguments. This means that we don't have to adapt them
|
| // if we decide to call the transition or miss stub.
|
| - STATIC_ASSERT(StoreWithVectorDescriptor::kStackArgumentsCount ==
|
| + STATIC_ASSERT(Descriptor::kStackArgumentsCount ==
|
| StoreTransitionDescriptor::kStackArgumentsCount);
|
| - STATIC_ASSERT(StoreWithVectorDescriptor::kStackArgumentsCount == 0 ||
|
| - StoreWithVectorDescriptor::kStackArgumentsCount == 3);
|
| - STATIC_ASSERT(StoreWithVectorDescriptor::kParameterCount -
|
| - StoreWithVectorDescriptor::kValue ==
|
| + STATIC_ASSERT(Descriptor::kStackArgumentsCount == 0 ||
|
| + Descriptor::kStackArgumentsCount == 3);
|
| + STATIC_ASSERT(Descriptor::kParameterCount - Descriptor::kValue ==
|
| StoreTransitionDescriptor::kParameterCount -
|
| StoreTransitionDescriptor::kValue);
|
| - STATIC_ASSERT(StoreWithVectorDescriptor::kParameterCount -
|
| - StoreWithVectorDescriptor::kSlot ==
|
| + STATIC_ASSERT(Descriptor::kParameterCount - Descriptor::kSlot ==
|
| StoreTransitionDescriptor::kParameterCount -
|
| StoreTransitionDescriptor::kSlot);
|
| - STATIC_ASSERT(StoreWithVectorDescriptor::kParameterCount -
|
| - StoreWithVectorDescriptor::kVector ==
|
| + STATIC_ASSERT(Descriptor::kParameterCount - Descriptor::kVector ==
|
| StoreTransitionDescriptor::kParameterCount -
|
| StoreTransitionDescriptor::kVector);
|
|
|
| + if (Descriptor::kPassLastArgsOnStack) {
|
| + __ LoadParameterFromStack<Descriptor>(value(), Descriptor::kValue);
|
| + }
|
| +
|
| bool need_save_restore = IC::ShouldPushPopSlotAndVector(kind());
|
| if (need_save_restore) {
|
| PushVectorAndSlot();
|
| @@ -550,6 +551,9 @@ Handle<Code> NamedStoreHandlerCompiler::CompileStoreField(LookupIterator* it) {
|
| bool need_save_restore = false;
|
| if (RequiresFieldTypeChecks(field_type)) {
|
| need_save_restore = IC::ShouldPushPopSlotAndVector(kind());
|
| + if (Descriptor::kPassLastArgsOnStack) {
|
| + __ LoadParameterFromStack<Descriptor>(value(), Descriptor::kValue);
|
| + }
|
| if (need_save_restore) PushVectorAndSlot();
|
| GenerateFieldTypeChecks(field_type, value(), &miss);
|
| if (need_save_restore) PopVectorAndSlot();
|
| @@ -583,6 +587,9 @@ Handle<Code> NamedStoreHandlerCompiler::CompileStoreCallback(
|
| GenerateTailCall(masm(), slow_stub);
|
| }
|
| Register holder = Frontend(name);
|
| + if (Descriptor::kPassLastArgsOnStack) {
|
| + __ LoadParameterFromStack<Descriptor>(value(), Descriptor::kValue);
|
| + }
|
| GenerateApiAccessorCall(masm(), call_optimization, handle(object->map()),
|
| receiver(), scratch2(), true, value(), holder,
|
| accessor_index);
|
|
|