Merge V8 5.3.332.45. DO NOT MERGE
Test: Manual
FPIIM-449
Change-Id: Id3254828b068abdea3cb10442e0172a8c9a98e03
(cherry picked from commit 13e2dadd00298019ed862f2b2fc5068bba730bcf)
diff --git a/src/interface-descriptors.cc b/src/interface-descriptors.cc
index 860ad2a..50638f9 100644
--- a/src/interface-descriptors.cc
+++ b/src/interface-descriptors.cc
@@ -43,9 +43,8 @@
return function;
}
-
void CallInterfaceDescriptorData::InitializePlatformSpecific(
- int register_parameter_count, Register* registers,
+ int register_parameter_count, const Register* registers,
PlatformInterfaceDescriptor* platform_descriptor) {
platform_specific_descriptor_ = platform_descriptor;
register_param_count_ = register_parameter_count;
@@ -98,6 +97,38 @@
data->InitializePlatformSpecific(arraysize(registers), registers);
}
+FunctionType* LoadGlobalDescriptor::BuildCallInterfaceDescriptorFunctionType(
+ Isolate* isolate, int paramater_count) {
+ Zone* zone = isolate->interface_descriptor_zone();
+ FunctionType* function =
+ Type::Function(AnyTagged(zone), Type::Undefined(), 1, zone)->AsFunction();
+ function->InitParameter(0, SmiType(zone));
+ return function;
+}
+
+void LoadGlobalDescriptor::InitializePlatformSpecific(
+ CallInterfaceDescriptorData* data) {
+ Register registers[] = {LoadWithVectorDescriptor::SlotRegister()};
+ data->InitializePlatformSpecific(arraysize(registers), registers);
+}
+
+FunctionType*
+LoadGlobalWithVectorDescriptor::BuildCallInterfaceDescriptorFunctionType(
+ Isolate* isolate, int paramater_count) {
+ Zone* zone = isolate->interface_descriptor_zone();
+ FunctionType* function =
+ Type::Function(AnyTagged(zone), Type::Undefined(), 2, zone)->AsFunction();
+ function->InitParameter(0, SmiType(zone));
+ function->InitParameter(1, AnyTagged(zone));
+ return function;
+}
+
+void LoadGlobalWithVectorDescriptor::InitializePlatformSpecific(
+ CallInterfaceDescriptorData* data) {
+ Register registers[] = {LoadWithVectorDescriptor::SlotRegister(),
+ LoadWithVectorDescriptor::VectorRegister()};
+ data->InitializePlatformSpecific(arraysize(registers), registers);
+}
void StoreDescriptor::InitializePlatformSpecific(
CallInterfaceDescriptorData* data) {
@@ -143,23 +174,6 @@
}
FunctionType*
-LoadGlobalViaContextDescriptor::BuildCallInterfaceDescriptorFunctionType(
- Isolate* isolate, int paramater_count) {
- Zone* zone = isolate->interface_descriptor_zone();
- FunctionType* function =
- Type::Function(AnyTagged(zone), Type::Undefined(), 1, zone)->AsFunction();
- function->InitParameter(0, UntaggedIntegral32(zone));
- return function;
-}
-
-
-void LoadGlobalViaContextDescriptor::InitializePlatformSpecific(
- CallInterfaceDescriptorData* data) {
- Register registers[] = {SlotRegister()};
- data->InitializePlatformSpecific(arraysize(registers), registers);
-}
-
-FunctionType*
StoreGlobalViaContextDescriptor::BuildCallInterfaceDescriptorFunctionType(
Isolate* isolate, int paramater_count) {
Zone* zone = isolate->interface_descriptor_zone();
@@ -190,19 +204,12 @@
data->InitializePlatformSpecific(arraysize(registers), registers);
}
-void HasPropertyDescriptor::InitializePlatformSpecific(
- CallInterfaceDescriptorData* data) {
- Register registers[] = {KeyRegister(), ObjectRegister()};
- data->InitializePlatformSpecific(arraysize(registers), registers);
-}
-
void MathPowTaggedDescriptor::InitializePlatformSpecific(
CallInterfaceDescriptorData* data) {
Register registers[] = {exponent()};
data->InitializePlatformSpecific(arraysize(registers), registers);
}
-
void MathPowIntegerDescriptor::InitializePlatformSpecific(
CallInterfaceDescriptorData* data) {
Register registers[] = {exponent()};
@@ -309,6 +316,48 @@
data->InitializePlatformSpecific(0, nullptr);
}
+CallInterfaceDescriptor OnStackArgsDescriptorBase::ForArgs(
+ Isolate* isolate, int parameter_count) {
+ switch (parameter_count) {
+ case 1:
+ return OnStackWith1ArgsDescriptor(isolate);
+ case 2:
+ return OnStackWith2ArgsDescriptor(isolate);
+ case 3:
+ return OnStackWith3ArgsDescriptor(isolate);
+ case 4:
+ return OnStackWith4ArgsDescriptor(isolate);
+ case 5:
+ return OnStackWith5ArgsDescriptor(isolate);
+ case 6:
+ return OnStackWith6ArgsDescriptor(isolate);
+ case 7:
+ return OnStackWith7ArgsDescriptor(isolate);
+ default:
+ UNREACHABLE();
+ return VoidDescriptor(isolate);
+ }
+}
+
+FunctionType*
+OnStackArgsDescriptorBase::BuildCallInterfaceDescriptorFunctionTypeWithArg(
+ Isolate* isolate, int register_parameter_count, int parameter_count) {
+ DCHECK_EQ(0, register_parameter_count);
+ DCHECK_GT(parameter_count, 0);
+ Zone* zone = isolate->interface_descriptor_zone();
+ FunctionType* function =
+ Type::Function(AnyTagged(zone), AnyTagged(zone), parameter_count, zone)
+ ->AsFunction();
+ for (int i = 0; i < parameter_count; i++) {
+ function->InitParameter(i, AnyTagged(zone));
+ }
+ return function;
+}
+
+void OnStackArgsDescriptorBase::InitializePlatformSpecific(
+ CallInterfaceDescriptorData* data) {
+ data->InitializePlatformSpecific(0, nullptr);
+}
void GrowArrayElementsDescriptor::InitializePlatformSpecific(
CallInterfaceDescriptorData* data) {
@@ -316,7 +365,8 @@
data->InitializePlatformSpecific(arraysize(registers), registers);
}
-FunctionType* FastArrayPushDescriptor::BuildCallInterfaceDescriptorFunctionType(
+FunctionType*
+VarArgFunctionDescriptor::BuildCallInterfaceDescriptorFunctionType(
Isolate* isolate, int paramater_count) {
Zone* zone = isolate->interface_descriptor_zone();
FunctionType* function =
@@ -444,26 +494,29 @@
return function;
}
+FunctionType* ArraySingleArgumentConstructorDescriptor::
+ BuildCallInterfaceDescriptorFunctionType(Isolate* isolate,
+ int paramater_count) {
+ Zone* zone = isolate->interface_descriptor_zone();
+ FunctionType* function =
+ Type::Function(AnyTagged(zone), Type::Undefined(), 5, zone)->AsFunction();
+ function->InitParameter(0, Type::Receiver()); // JSFunction
+ function->InitParameter(1, AnyTagged(zone));
+ function->InitParameter(2, UntaggedIntegral32(zone));
+ function->InitParameter(3, AnyTagged(zone));
+ function->InitParameter(4, AnyTagged(zone));
+ return function;
+}
+
FunctionType*
-ArrayConstructorDescriptor::BuildCallInterfaceDescriptorFunctionType(
+ArrayNArgumentsConstructorDescriptor::BuildCallInterfaceDescriptorFunctionType(
Isolate* isolate, int paramater_count) {
Zone* zone = isolate->interface_descriptor_zone();
FunctionType* function =
Type::Function(AnyTagged(zone), Type::Undefined(), 3, zone)->AsFunction();
function->InitParameter(0, Type::Receiver()); // JSFunction
- function->InitParameter(1, AnyTagged(zone));
- function->InitParameter(2, UntaggedIntegral32(zone));
- return function;
-}
-
-FunctionType*
-InternalArrayConstructorDescriptor::BuildCallInterfaceDescriptorFunctionType(
- Isolate* isolate, int paramater_count) {
- Zone* zone = isolate->interface_descriptor_zone();
- FunctionType* function =
- Type::Function(AnyTagged(zone), Type::Undefined(), 2, zone)->AsFunction();
- function->InitParameter(0, Type::Receiver()); // JSFunction
- function->InitParameter(1, UntaggedIntegral32(zone));
+ function->InitParameter(1, AnyTagged(zone)); // Allocation site or undefined
+ function->InitParameter(2, UntaggedIntegral32(zone)); // Arg count
return function;
}