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

Unified Diff: src/interface-descriptors.cc

Issue 1376933006: Vector ICs: Get rid of stack arguments on ia32 transitioning stores. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Code comments. Created 5 years, 2 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/interface-descriptors.h ('k') | src/isolate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
}
« no previous file with comments | « src/interface-descriptors.h ('k') | src/isolate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698