X87: VectorICs: New interface descriptor for vector transitioning stores.

port cd35155918 (r30284).

original commit message:

BUG=

Review URL: https://codereview.chromium.org/1303223002

Cr-Commit-Position: refs/heads/master@{#30297}
This commit is contained in:
chunyang.dai 2015-08-21 04:15:01 -07:00 committed by Commit bot
parent 597cfc6ea8
commit 6c40462558

View File

@ -30,11 +30,22 @@ const Register VectorStoreICTrampolineDescriptor::SlotRegister() { return edi; }
const Register VectorStoreICDescriptor::VectorRegister() { return ebx; }
const Register StoreTransitionDescriptor::MapRegister() {
return FLAG_vector_stores ? no_reg : ebx;
const Register VectorStoreTransitionDescriptor::SlotRegister() {
return no_reg;
}
const Register VectorStoreTransitionDescriptor::VectorRegister() {
return no_reg;
}
const Register VectorStoreTransitionDescriptor::MapRegister() { return no_reg; }
const Register StoreTransitionDescriptor::MapRegister() { return ebx; }
const Register LoadGlobalViaContextDescriptor::SlotRegister() { return ebx; }
@ -65,17 +76,11 @@ const Register GrowArrayElementsDescriptor::ObjectRegister() { return eax; }
const Register GrowArrayElementsDescriptor::KeyRegister() { return ebx; }
void StoreTransitionDescriptor::InitializePlatformSpecific(
void VectorStoreTransitionDescriptor::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);
Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister()};
// The other three parameters are on the stack in ia32.
data->InitializePlatformSpecific(arraysize(registers), registers);
}