Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Unified Diff: src/ic/handler-compiler.cc

Issue 2357323003: [ic][ia32][x87] Don't push/pop value/slot/vector in store handlers. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/ic/handler-compiler.h ('k') | src/ic/ia32/handler-compiler-ia32.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « src/ic/handler-compiler.h ('k') | src/ic/ia32/handler-compiler-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698