summaryrefslogtreecommitdiff
path: root/deps/v8/src/ia32/interface-descriptors-ia32.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/ia32/interface-descriptors-ia32.cc')
-rw-r--r--deps/v8/src/ia32/interface-descriptors-ia32.cc67
1 files changed, 53 insertions, 14 deletions
diff --git a/deps/v8/src/ia32/interface-descriptors-ia32.cc b/deps/v8/src/ia32/interface-descriptors-ia32.cc
index 4724d1eb44..22d85d8cc3 100644
--- a/deps/v8/src/ia32/interface-descriptors-ia32.cc
+++ b/deps/v8/src/ia32/interface-descriptors-ia32.cc
@@ -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; }
@@ -42,14 +53,23 @@ const Register StoreGlobalViaContextDescriptor::SlotRegister() { return ebx; }
const Register StoreGlobalViaContextDescriptor::ValueRegister() { return eax; }
-const Register InstanceofDescriptor::left() { return eax; }
-const Register InstanceofDescriptor::right() { return edx; }
+const Register InstanceOfDescriptor::LeftRegister() { return edx; }
+const Register InstanceOfDescriptor::RightRegister() { return eax; }
+
+
+const Register StringCompareDescriptor::LeftRegister() { return edx; }
+const Register StringCompareDescriptor::RightRegister() { return eax; }
const Register ArgumentsAccessReadDescriptor::index() { return edx; }
const Register ArgumentsAccessReadDescriptor::parameter_count() { return eax; }
+const Register ArgumentsAccessNewDescriptor::function() { return edi; }
+const Register ArgumentsAccessNewDescriptor::parameter_count() { return ecx; }
+const Register ArgumentsAccessNewDescriptor::parameter_pointer() { return edx; }
+
+
const Register ApiGetterDescriptor::function_address() { return edx; }
@@ -65,17 +85,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);
}
@@ -102,6 +116,10 @@ void ToNumberDescriptor::InitializePlatformSpecific(
// static
+const Register ToStringDescriptor::ReceiverRegister() { return eax; }
+
+
+// static
const Register ToObjectDescriptor::ReceiverRegister() { return eax; }
@@ -189,6 +207,15 @@ void CallConstructDescriptor::InitializePlatformSpecific(
}
+void CallTrampolineDescriptor::InitializePlatformSpecific(
+ CallInterfaceDescriptorData* data) {
+ // eax : number of arguments
+ // edi : the target to call
+ Register registers[] = {edi, eax};
+ data->InitializePlatformSpecific(arraysize(registers), registers);
+}
+
+
void RegExpConstructResultDescriptor::InitializePlatformSpecific(
CallInterfaceDescriptorData* data) {
Register registers[] = {ecx, ebx, eax};
@@ -371,6 +398,18 @@ void MathRoundVariantCallFromOptimizedCodeDescriptor::
};
data->InitializePlatformSpecific(arraysize(registers), registers);
}
+
+
+void PushArgsAndCallDescriptor::InitializePlatformSpecific(
+ CallInterfaceDescriptorData* data) {
+ Register registers[] = {
+ eax, // argument count (including receiver)
+ ebx, // address of first argument
+ edi // the target callable to be call
+ };
+ data->InitializePlatformSpecific(arraysize(registers), registers);
+}
+
} // namespace internal
} // namespace v8