Index: src/interface-descriptors.h |
diff --git a/src/interface-descriptors.h b/src/interface-descriptors.h |
index 4475900e072141fbb44acc3b7243eaf321819c6e..b773c916ecbff19be72d97f42d792848d36bc653 100644 |
--- a/src/interface-descriptors.h |
+++ b/src/interface-descriptors.h |
@@ -18,6 +18,7 @@ class PlatformInterfaceDescriptor; |
V(Store) \ |
V(ElementTransitionAndStore) \ |
V(Instanceof) \ |
+ V(VectorLoadICTrampoline) \ |
V(VectorLoadIC) \ |
V(FastNewClosure) \ |
V(FastNewContext) \ |
@@ -27,6 +28,7 @@ class PlatformInterfaceDescriptor; |
V(FastCloneShallowObject) \ |
V(CreateAllocationSite) \ |
V(CallFunction) \ |
+ V(CallFunctionWithFeedback) \ |
V(CallConstruct) \ |
V(RegExpConstructResult) \ |
V(TransitionElementsKind) \ |
@@ -43,7 +45,13 @@ class PlatformInterfaceDescriptor; |
V(Named) \ |
V(CallHandler) \ |
V(ArgumentAdaptor) \ |
- V(ApiFunction) |
+ V(ApiGetter) \ |
+ V(ApiFunction) \ |
+ V(ArgumentsAccessRead) \ |
+ V(StoreArrayLiteralElement) \ |
+ V(MathPowTagged) \ |
+ V(MathPowInteger) \ |
+ V(ContextOnly) |
class CallInterfaceDescriptorData { |
@@ -164,18 +172,24 @@ class CallInterfaceDescriptor { |
}; |
-#define DECLARE_DESCRIPTOR(name) \ |
- explicit name(Isolate* isolate) : CallInterfaceDescriptor(isolate, key()) { \ |
- if (!data()->IsInitialized()) \ |
- Initialize(isolate->call_descriptor_data(key())); \ |
- } \ |
- static inline CallDescriptors::Key key(); \ |
- void Initialize(CallInterfaceDescriptorData* data); |
+#define DECLARE_DESCRIPTOR(name, base) \ |
+ explicit name(Isolate* isolate) : base(isolate, key()) { \ |
+ if (!data()->IsInitialized()) \ |
+ Initialize(isolate->call_descriptor_data(key())); \ |
+ } \ |
+ \ |
+ protected: \ |
+ void Initialize(CallInterfaceDescriptorData* data); \ |
+ name(Isolate* isolate, CallDescriptors::Key key) : base(isolate, key) {} \ |
+ \ |
+ public: \ |
+ static inline CallDescriptors::Key key(); |
+// LoadDescriptor is used by all stubs that implement Load/KeyedLoad ICs. |
class LoadDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(LoadDescriptor) |
+ DECLARE_DESCRIPTOR(LoadDescriptor, CallInterfaceDescriptor) |
enum ParameterIndices { kReceiverIndex, kNameIndex }; |
static const Register ReceiverRegister(); |
@@ -185,7 +199,7 @@ class LoadDescriptor : public CallInterfaceDescriptor { |
class StoreDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(StoreDescriptor) |
+ DECLARE_DESCRIPTOR(StoreDescriptor, CallInterfaceDescriptor) |
enum ParameterIndices { |
kReceiverIndex, |
@@ -199,20 +213,17 @@ class StoreDescriptor : public CallInterfaceDescriptor { |
}; |
-class ElementTransitionAndStoreDescriptor : public CallInterfaceDescriptor { |
+class ElementTransitionAndStoreDescriptor : public StoreDescriptor { |
public: |
- DECLARE_DESCRIPTOR(ElementTransitionAndStoreDescriptor) |
+ DECLARE_DESCRIPTOR(ElementTransitionAndStoreDescriptor, StoreDescriptor) |
- static const Register ReceiverRegister(); |
- static const Register NameRegister(); |
- static const Register ValueRegister(); |
static const Register MapRegister(); |
}; |
class InstanceofDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(InstanceofDescriptor) |
+ DECLARE_DESCRIPTOR(InstanceofDescriptor, CallInterfaceDescriptor) |
enum ParameterIndices { kLeftIndex, kRightIndex, kParameterCount }; |
static const Register left(); |
@@ -220,174 +231,237 @@ class InstanceofDescriptor : public CallInterfaceDescriptor { |
}; |
-class VectorLoadICDescriptor : public CallInterfaceDescriptor { |
+class VectorLoadICTrampolineDescriptor : public LoadDescriptor { |
+ public: |
+ DECLARE_DESCRIPTOR(VectorLoadICTrampolineDescriptor, LoadDescriptor) |
+ |
+ enum ParameterIndices { kReceiverIndex, kNameIndex, kSlotIndex }; |
+ |
+ static const Register SlotRegister(); |
+}; |
+ |
+ |
+class VectorLoadICDescriptor : public VectorLoadICTrampolineDescriptor { |
public: |
- DECLARE_DESCRIPTOR(VectorLoadICDescriptor) |
+ DECLARE_DESCRIPTOR(VectorLoadICDescriptor, VectorLoadICTrampolineDescriptor) |
enum ParameterIndices { |
kReceiverIndex, |
kNameIndex, |
kSlotIndex, |
- kVectorIndex, |
- kParameterCount |
+ kVectorIndex |
}; |
- static const Register ReceiverRegister(); |
- static const Register NameRegister(); |
- static const Register SlotRegister(); |
static const Register VectorRegister(); |
}; |
class FastNewClosureDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(FastNewClosureDescriptor) |
+ DECLARE_DESCRIPTOR(FastNewClosureDescriptor, CallInterfaceDescriptor) |
}; |
class FastNewContextDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(FastNewContextDescriptor) |
+ DECLARE_DESCRIPTOR(FastNewContextDescriptor, CallInterfaceDescriptor) |
}; |
class ToNumberDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(ToNumberDescriptor) |
+ DECLARE_DESCRIPTOR(ToNumberDescriptor, CallInterfaceDescriptor) |
}; |
class NumberToStringDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(NumberToStringDescriptor) |
+ DECLARE_DESCRIPTOR(NumberToStringDescriptor, CallInterfaceDescriptor) |
}; |
class FastCloneShallowArrayDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(FastCloneShallowArrayDescriptor) |
+ DECLARE_DESCRIPTOR(FastCloneShallowArrayDescriptor, CallInterfaceDescriptor) |
}; |
class FastCloneShallowObjectDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(FastCloneShallowObjectDescriptor) |
+ DECLARE_DESCRIPTOR(FastCloneShallowObjectDescriptor, CallInterfaceDescriptor) |
}; |
class CreateAllocationSiteDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(CreateAllocationSiteDescriptor) |
+ DECLARE_DESCRIPTOR(CreateAllocationSiteDescriptor, CallInterfaceDescriptor) |
}; |
class CallFunctionDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(CallFunctionDescriptor) |
+ DECLARE_DESCRIPTOR(CallFunctionDescriptor, CallInterfaceDescriptor) |
+}; |
+ |
+ |
+class CallFunctionWithFeedbackDescriptor : public CallInterfaceDescriptor { |
+ public: |
+ DECLARE_DESCRIPTOR(CallFunctionWithFeedbackDescriptor, |
+ CallInterfaceDescriptor) |
}; |
class CallConstructDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(CallConstructDescriptor) |
+ DECLARE_DESCRIPTOR(CallConstructDescriptor, CallInterfaceDescriptor) |
}; |
class RegExpConstructResultDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(RegExpConstructResultDescriptor) |
+ DECLARE_DESCRIPTOR(RegExpConstructResultDescriptor, CallInterfaceDescriptor) |
}; |
class TransitionElementsKindDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(TransitionElementsKindDescriptor) |
+ DECLARE_DESCRIPTOR(TransitionElementsKindDescriptor, CallInterfaceDescriptor) |
}; |
class ArrayConstructorConstantArgCountDescriptor |
: public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(ArrayConstructorConstantArgCountDescriptor) |
+ DECLARE_DESCRIPTOR(ArrayConstructorConstantArgCountDescriptor, |
+ CallInterfaceDescriptor) |
}; |
class ArrayConstructorDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(ArrayConstructorDescriptor) |
+ DECLARE_DESCRIPTOR(ArrayConstructorDescriptor, CallInterfaceDescriptor) |
}; |
class InternalArrayConstructorConstantArgCountDescriptor |
: public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(InternalArrayConstructorConstantArgCountDescriptor) |
+ DECLARE_DESCRIPTOR(InternalArrayConstructorConstantArgCountDescriptor, |
+ CallInterfaceDescriptor) |
}; |
class InternalArrayConstructorDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(InternalArrayConstructorDescriptor) |
+ DECLARE_DESCRIPTOR(InternalArrayConstructorDescriptor, |
+ CallInterfaceDescriptor) |
}; |
class CompareNilDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(CompareNilDescriptor) |
+ DECLARE_DESCRIPTOR(CompareNilDescriptor, CallInterfaceDescriptor) |
}; |
class ToBooleanDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(ToBooleanDescriptor) |
+ DECLARE_DESCRIPTOR(ToBooleanDescriptor, CallInterfaceDescriptor) |
}; |
class BinaryOpDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(BinaryOpDescriptor) |
+ DECLARE_DESCRIPTOR(BinaryOpDescriptor, CallInterfaceDescriptor) |
}; |
class BinaryOpWithAllocationSiteDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(BinaryOpWithAllocationSiteDescriptor) |
+ DECLARE_DESCRIPTOR(BinaryOpWithAllocationSiteDescriptor, |
+ CallInterfaceDescriptor) |
}; |
class StringAddDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(StringAddDescriptor) |
+ DECLARE_DESCRIPTOR(StringAddDescriptor, CallInterfaceDescriptor) |
}; |
class KeyedDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(KeyedDescriptor) |
+ DECLARE_DESCRIPTOR(KeyedDescriptor, CallInterfaceDescriptor) |
}; |
class NamedDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(NamedDescriptor) |
+ DECLARE_DESCRIPTOR(NamedDescriptor, CallInterfaceDescriptor) |
}; |
class CallHandlerDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(CallHandlerDescriptor) |
+ DECLARE_DESCRIPTOR(CallHandlerDescriptor, CallInterfaceDescriptor) |
}; |
class ArgumentAdaptorDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(ArgumentAdaptorDescriptor) |
+ DECLARE_DESCRIPTOR(ArgumentAdaptorDescriptor, CallInterfaceDescriptor) |
}; |
class ApiFunctionDescriptor : public CallInterfaceDescriptor { |
public: |
- DECLARE_DESCRIPTOR(ApiFunctionDescriptor) |
+ DECLARE_DESCRIPTOR(ApiFunctionDescriptor, CallInterfaceDescriptor) |
+}; |
+ |
+ |
+class ApiGetterDescriptor : public CallInterfaceDescriptor { |
+ public: |
+ DECLARE_DESCRIPTOR(ApiGetterDescriptor, CallInterfaceDescriptor) |
+ |
+ static const Register function_address(); |
+}; |
+ |
+ |
+class ArgumentsAccessReadDescriptor : public CallInterfaceDescriptor { |
+ public: |
+ DECLARE_DESCRIPTOR(ArgumentsAccessReadDescriptor, CallInterfaceDescriptor) |
+ |
+ static const Register index(); |
+ static const Register parameter_count(); |
+}; |
+ |
+ |
+class StoreArrayLiteralElementDescriptor : public CallInterfaceDescriptor { |
+ public: |
+ DECLARE_DESCRIPTOR(StoreArrayLiteralElementDescriptor, |
+ CallInterfaceDescriptor) |
+}; |
+ |
+ |
+class MathPowTaggedDescriptor : public CallInterfaceDescriptor { |
+ public: |
+ DECLARE_DESCRIPTOR(MathPowTaggedDescriptor, CallInterfaceDescriptor) |
+ |
+ static const Register exponent(); |
+}; |
+ |
+ |
+class MathPowIntegerDescriptor : public CallInterfaceDescriptor { |
+ public: |
+ DECLARE_DESCRIPTOR(MathPowIntegerDescriptor, CallInterfaceDescriptor) |
+ |
+ static const Register exponent(); |
+}; |
+ |
+ |
+class ContextOnlyDescriptor : public CallInterfaceDescriptor { |
+ public: |
+ DECLARE_DESCRIPTOR(ContextOnlyDescriptor, CallInterfaceDescriptor) |
}; |
#undef DECLARE_DESCRIPTOR |