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.h b/src/interface-descriptors.h
index 60d8723..18fc9a8 100644
--- a/src/interface-descriptors.h
+++ b/src/interface-descriptors.h
@@ -13,84 +13,90 @@
class PlatformInterfaceDescriptor;
-#define INTERFACE_DESCRIPTOR_LIST(V) \
- V(Void) \
- V(Load) \
- V(Store) \
- V(StoreTransition) \
- V(VectorStoreTransition) \
- V(VectorStoreICTrampoline) \
- V(VectorStoreIC) \
- V(LoadWithVector) \
- V(FastArrayPush) \
- V(FastNewClosure) \
- V(FastNewContext) \
- V(FastNewObject) \
- V(FastNewRestParameter) \
- V(FastNewSloppyArguments) \
- V(FastNewStrictArguments) \
- V(TypeConversion) \
- V(Typeof) \
- V(FastCloneRegExp) \
- V(FastCloneShallowArray) \
- V(FastCloneShallowObject) \
- V(CreateAllocationSite) \
- V(CreateWeakCell) \
- V(CallFunction) \
- V(CallFunctionWithFeedback) \
- V(CallFunctionWithFeedbackAndVector) \
- V(CallConstruct) \
- V(CallTrampoline) \
- V(ConstructStub) \
- V(ConstructTrampoline) \
- V(RegExpConstructResult) \
- V(TransitionElementsKind) \
- V(AllocateHeapNumber) \
- V(AllocateFloat32x4) \
- V(AllocateInt32x4) \
- V(AllocateUint32x4) \
- V(AllocateBool32x4) \
- V(AllocateInt16x8) \
- V(AllocateUint16x8) \
- V(AllocateBool16x8) \
- V(AllocateInt8x16) \
- V(AllocateUint8x16) \
- V(AllocateBool8x16) \
- V(ArrayNoArgumentConstructor) \
- V(ArrayConstructorConstantArgCount) \
- V(ArrayConstructor) \
- V(InternalArrayConstructorConstantArgCount) \
- V(InternalArrayConstructor) \
- V(Compare) \
- V(BinaryOp) \
- V(BinaryOpWithAllocationSite) \
- V(CountOp) \
- V(StringAdd) \
- V(StringCompare) \
- V(Keyed) \
- V(Named) \
- V(HasProperty) \
- V(CallHandler) \
- V(ArgumentAdaptor) \
- V(ApiCallbackWith0Args) \
- V(ApiCallbackWith1Args) \
- V(ApiCallbackWith2Args) \
- V(ApiCallbackWith3Args) \
- V(ApiCallbackWith4Args) \
- V(ApiCallbackWith5Args) \
- V(ApiCallbackWith6Args) \
- V(ApiCallbackWith7Args) \
- V(ApiGetter) \
- V(LoadGlobalViaContext) \
- V(StoreGlobalViaContext) \
- V(MathPowTagged) \
- V(MathPowInteger) \
- V(ContextOnly) \
- V(GrowArrayElements) \
- V(InterpreterDispatch) \
- V(InterpreterPushArgsAndCall) \
- V(InterpreterPushArgsAndConstruct) \
- V(InterpreterCEntry) \
+#define INTERFACE_DESCRIPTOR_LIST(V) \
+ V(Void) \
+ V(ContextOnly) \
+ V(OnStackWith1Args) \
+ V(OnStackWith2Args) \
+ V(OnStackWith3Args) \
+ V(OnStackWith4Args) \
+ V(OnStackWith5Args) \
+ V(OnStackWith6Args) \
+ V(OnStackWith7Args) \
+ V(Load) \
+ V(LoadGlobal) \
+ V(LoadGlobalWithVector) \
+ V(Store) \
+ V(StoreTransition) \
+ V(VectorStoreTransition) \
+ V(VectorStoreICTrampoline) \
+ V(VectorStoreIC) \
+ V(LoadWithVector) \
+ V(VarArgFunction) \
+ V(FastNewClosure) \
+ V(FastNewContext) \
+ V(FastNewObject) \
+ V(FastNewRestParameter) \
+ V(FastNewSloppyArguments) \
+ V(FastNewStrictArguments) \
+ V(TypeConversion) \
+ V(Typeof) \
+ V(FastCloneRegExp) \
+ V(FastCloneShallowArray) \
+ V(FastCloneShallowObject) \
+ V(CreateAllocationSite) \
+ V(CreateWeakCell) \
+ V(CallFunction) \
+ V(CallFunctionWithFeedback) \
+ V(CallFunctionWithFeedbackAndVector) \
+ V(CallConstruct) \
+ V(CallTrampoline) \
+ V(ConstructStub) \
+ V(ConstructTrampoline) \
+ V(RegExpConstructResult) \
+ V(TransitionElementsKind) \
+ V(AllocateHeapNumber) \
+ V(AllocateFloat32x4) \
+ V(AllocateInt32x4) \
+ V(AllocateUint32x4) \
+ V(AllocateBool32x4) \
+ V(AllocateInt16x8) \
+ V(AllocateUint16x8) \
+ V(AllocateBool16x8) \
+ V(AllocateInt8x16) \
+ V(AllocateUint8x16) \
+ V(AllocateBool8x16) \
+ V(ArrayNoArgumentConstructor) \
+ V(ArraySingleArgumentConstructor) \
+ V(ArrayNArgumentsConstructor) \
+ V(Compare) \
+ V(BinaryOp) \
+ V(BinaryOpWithAllocationSite) \
+ V(CountOp) \
+ V(StringAdd) \
+ V(StringCompare) \
+ V(Keyed) \
+ V(Named) \
+ V(HasProperty) \
+ V(CallHandler) \
+ V(ArgumentAdaptor) \
+ V(ApiCallbackWith0Args) \
+ V(ApiCallbackWith1Args) \
+ V(ApiCallbackWith2Args) \
+ V(ApiCallbackWith3Args) \
+ V(ApiCallbackWith4Args) \
+ V(ApiCallbackWith5Args) \
+ V(ApiCallbackWith6Args) \
+ V(ApiCallbackWith7Args) \
+ V(ApiGetter) \
+ V(StoreGlobalViaContext) \
+ V(MathPowTagged) \
+ V(MathPowInteger) \
+ V(GrowArrayElements) \
+ V(InterpreterDispatch) \
+ V(InterpreterPushArgsAndCall) \
+ V(InterpreterPushArgsAndConstruct) \
+ V(InterpreterCEntry) \
V(ResumeGenerator)
class CallInterfaceDescriptorData {
@@ -110,7 +116,7 @@
// and register side by side (eg, RegRep(r1, Representation::Tagged()).
// The same should go for the CodeStubDescriptor class.
void InitializePlatformSpecific(
- int register_parameter_count, Register* registers,
+ int register_parameter_count, const Register* registers,
PlatformInterfaceDescriptor* platform_descriptor = NULL);
bool IsInitialized() const { return register_param_count_ >= 0; }
@@ -219,6 +225,12 @@
}
}
+ // Initializes |data| using the platform dependent default set of registers.
+ // It is intended to be used for TurboFan stubs when particular set of
+ // registers does not matter.
+ static void DefaultInitializePlatformSpecific(
+ CallInterfaceDescriptorData* data, int register_parameter_count);
+
private:
const CallInterfaceDescriptorData* data_;
};
@@ -230,6 +242,17 @@
} \
static inline CallDescriptors::Key key();
+#define DECLARE_DEFAULT_DESCRIPTOR(name, base, parameter_count) \
+ DECLARE_DESCRIPTOR_WITH_BASE(name, base) \
+ protected: \
+ void InitializePlatformSpecific(CallInterfaceDescriptorData* data) \
+ override { \
+ DefaultInitializePlatformSpecific(data, parameter_count); \
+ } \
+ name(Isolate* isolate, CallDescriptors::Key key) : base(isolate, key) {} \
+ \
+ public:
+
#define DECLARE_DESCRIPTOR(name, base) \
DECLARE_DESCRIPTOR_WITH_BASE(name, base) \
protected: \
@@ -262,6 +285,77 @@
DECLARE_DESCRIPTOR(VoidDescriptor, CallInterfaceDescriptor)
};
+class ContextOnlyDescriptor : public CallInterfaceDescriptor {
+ public:
+ DECLARE_DESCRIPTOR(ContextOnlyDescriptor, CallInterfaceDescriptor)
+};
+
+// The OnStackWith*ArgsDescriptors have a lot of boilerplate. The superclass
+// OnStackArgsDescriptorBase is not meant to be instantiated directly and has no
+// public constructors to ensure this is so.contains all the logic, and the
+//
+// Use OnStackArgsDescriptorBase::ForArgs(isolate, parameter_count) to
+// instantiate a descriptor with the number of args.
+class OnStackArgsDescriptorBase : public CallInterfaceDescriptor {
+ public:
+ static CallInterfaceDescriptor ForArgs(Isolate* isolate, int parameter_count);
+
+ protected:
+ OnStackArgsDescriptorBase(Isolate* isolate, CallDescriptors::Key key)
+ : CallInterfaceDescriptor(isolate, key) {}
+ void InitializePlatformSpecific(CallInterfaceDescriptorData* data) override;
+ FunctionType* BuildCallInterfaceDescriptorFunctionTypeWithArg(
+ Isolate* isolate, int register_parameter_count, int parameter_count);
+};
+
+class OnStackWith1ArgsDescriptor : public OnStackArgsDescriptorBase {
+ public:
+ DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith1ArgsDescriptor,
+ OnStackArgsDescriptorBase,
+ 1)
+};
+
+class OnStackWith2ArgsDescriptor : public OnStackArgsDescriptorBase {
+ public:
+ DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith2ArgsDescriptor,
+ OnStackArgsDescriptorBase,
+ 2)
+};
+
+class OnStackWith3ArgsDescriptor : public OnStackArgsDescriptorBase {
+ public:
+ DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith3ArgsDescriptor,
+ OnStackArgsDescriptorBase,
+ 3)
+};
+
+class OnStackWith4ArgsDescriptor : public OnStackArgsDescriptorBase {
+ public:
+ DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith4ArgsDescriptor,
+ OnStackArgsDescriptorBase,
+ 4)
+};
+
+class OnStackWith5ArgsDescriptor : public OnStackArgsDescriptorBase {
+ public:
+ DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith5ArgsDescriptor,
+ OnStackArgsDescriptorBase,
+ 5)
+};
+
+class OnStackWith6ArgsDescriptor : public OnStackArgsDescriptorBase {
+ public:
+ DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith6ArgsDescriptor,
+ OnStackArgsDescriptorBase,
+ 6)
+};
+
+class OnStackWith7ArgsDescriptor : public OnStackArgsDescriptorBase {
+ public:
+ DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith7ArgsDescriptor,
+ OnStackArgsDescriptorBase,
+ 7)
+};
// LoadDescriptor is used by all stubs that implement Load/KeyedLoad ICs.
class LoadDescriptor : public CallInterfaceDescriptor {
@@ -275,6 +369,17 @@
static const Register SlotRegister();
};
+class LoadGlobalDescriptor : public CallInterfaceDescriptor {
+ public:
+ DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(LoadGlobalDescriptor,
+ CallInterfaceDescriptor)
+
+ enum ParameterIndices { kSlotIndex };
+
+ static const Register SlotRegister() {
+ return LoadDescriptor::SlotRegister();
+ }
+};
class StoreDescriptor : public CallInterfaceDescriptor {
public:
@@ -378,6 +483,17 @@
static const Register VectorRegister();
};
+class LoadGlobalWithVectorDescriptor : public LoadGlobalDescriptor {
+ public:
+ DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(LoadGlobalWithVectorDescriptor,
+ LoadGlobalDescriptor)
+
+ enum ParameterIndices { kSlotIndex, kVectorIndex };
+
+ static const Register VectorRegister() {
+ return LoadWithVectorDescriptor::VectorRegister();
+ }
+};
class FastNewClosureDescriptor : public CallInterfaceDescriptor {
public:
@@ -425,10 +541,7 @@
public:
enum ParameterIndices { kKeyIndex, kObjectIndex };
- DECLARE_DESCRIPTOR(HasPropertyDescriptor, CallInterfaceDescriptor)
-
- static const Register KeyRegister();
- static const Register ObjectRegister();
+ DECLARE_DEFAULT_DESCRIPTOR(HasPropertyDescriptor, CallInterfaceDescriptor, 2)
};
class TypeofDescriptor : public CallInterfaceDescriptor {
@@ -532,15 +645,6 @@
};
-class LoadGlobalViaContextDescriptor : public CallInterfaceDescriptor {
- public:
- DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(LoadGlobalViaContextDescriptor,
- CallInterfaceDescriptor)
-
- static const Register SlotRegister();
-};
-
-
class StoreGlobalViaContextDescriptor : public CallInterfaceDescriptor {
public:
DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(StoreGlobalViaContextDescriptor,
@@ -578,37 +682,36 @@
kFunctionIndex,
kAllocationSiteIndex,
kArgumentCountIndex,
+ kFunctionParameterIndex,
kContextIndex
};
};
-class ArrayConstructorConstantArgCountDescriptor
+class ArraySingleArgumentConstructorDescriptor
: public CallInterfaceDescriptor {
public:
- DECLARE_DESCRIPTOR(ArrayConstructorConstantArgCountDescriptor,
- CallInterfaceDescriptor)
-};
-
-
-class ArrayConstructorDescriptor : public CallInterfaceDescriptor {
- public:
- DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ArrayConstructorDescriptor,
- CallInterfaceDescriptor)
-};
-
-
-class InternalArrayConstructorConstantArgCountDescriptor
- : public CallInterfaceDescriptor {
- public:
- DECLARE_DESCRIPTOR(InternalArrayConstructorConstantArgCountDescriptor,
- CallInterfaceDescriptor)
-};
-
-
-class InternalArrayConstructorDescriptor : public CallInterfaceDescriptor {
- public:
DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(
- InternalArrayConstructorDescriptor, CallInterfaceDescriptor)
+ ArraySingleArgumentConstructorDescriptor, CallInterfaceDescriptor)
+ enum ParameterIndices {
+ kFunctionIndex,
+ kAllocationSiteIndex,
+ kArgumentCountIndex,
+ kFunctionParameterIndex,
+ kArraySizeSmiParameterIndex,
+ kContextIndex
+ };
+};
+
+class ArrayNArgumentsConstructorDescriptor : public CallInterfaceDescriptor {
+ public:
+ DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(
+ ArrayNArgumentsConstructorDescriptor, CallInterfaceDescriptor)
+ enum ParameterIndices {
+ kFunctionIndex,
+ kAllocationSiteIndex,
+ kArgumentCountIndex,
+ kContextIndex
+ };
};
@@ -756,7 +859,6 @@
static const Register CallbackRegister();
};
-
class MathPowTaggedDescriptor : public CallInterfaceDescriptor {
public:
DECLARE_DESCRIPTOR(MathPowTaggedDescriptor, CallInterfaceDescriptor)
@@ -764,7 +866,6 @@
static const Register exponent();
};
-
class MathPowIntegerDescriptor : public CallInterfaceDescriptor {
public:
DECLARE_DESCRIPTOR(MathPowIntegerDescriptor, CallInterfaceDescriptor)
@@ -772,15 +873,9 @@
static const Register exponent();
};
-
-class ContextOnlyDescriptor : public CallInterfaceDescriptor {
+class VarArgFunctionDescriptor : public CallInterfaceDescriptor {
public:
- DECLARE_DESCRIPTOR(ContextOnlyDescriptor, CallInterfaceDescriptor)
-};
-
-class FastArrayPushDescriptor : public CallInterfaceDescriptor {
- public:
- DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(FastArrayPushDescriptor,
+ DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(VarArgFunctionDescriptor,
CallInterfaceDescriptor)
};