Index: src/ia32/interface-descriptors-ia32.cc |
diff --git a/src/ia32/interface-descriptors-ia32.cc b/src/ia32/interface-descriptors-ia32.cc |
index e1138b959de063cbaef3cb4334d114b10a5be974..17b053c5719c3a498542c590ab17a54fb5f29779 100644 |
--- a/src/ia32/interface-descriptors-ia32.cc |
+++ b/src/ia32/interface-descriptors-ia32.cc |
@@ -32,7 +32,9 @@ const Register VectorStoreICTrampolineDescriptor::SlotRegister() { return edi; } |
const Register VectorStoreICDescriptor::VectorRegister() { return ebx; } |
-const Register StoreTransitionDescriptor::MapRegister() { return ebx; } |
+const Register StoreTransitionDescriptor::MapRegister() { |
+ return FLAG_vector_stores ? no_reg : ebx; |
+} |
const Register LoadGlobalViaContextDescriptor::DepthRegister() { return edx; } |
@@ -69,6 +71,20 @@ const Register GrowArrayElementsDescriptor::ObjectRegister() { return eax; } |
const Register GrowArrayElementsDescriptor::KeyRegister() { return ebx; } |
+void StoreTransitionDescriptor::InitializePlatformSpecific( |
+ CallInterfaceDescriptorData* data) { |
+ Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(), |
+ MapRegister()}; |
+ |
+ // When FLAG_vector_stores is true, we want to pass the map register on the |
+ // stack instead of in a register. |
+ DCHECK(FLAG_vector_stores || !MapRegister().is(no_reg)); |
+ |
+ int register_count = FLAG_vector_stores ? 3 : 4; |
+ data->InitializePlatformSpecific(register_count, registers); |
+} |
+ |
+ |
void FastNewClosureDescriptor::InitializePlatformSpecific( |
CallInterfaceDescriptorData* data) { |
Register registers[] = {ebx}; |