Index: src/code-stubs.h |
diff --git a/src/code-stubs.h b/src/code-stubs.h |
index 646aee23eb2b87c4ae6ba26c901dd84fdb773cf2..69444597221a712e63f794eb68af9e54ceef1615 100644 |
--- a/src/code-stubs.h |
+++ b/src/code-stubs.h |
@@ -77,6 +77,9 @@ namespace internal { |
V(ArrayNoArgumentConstructor) \ |
V(ArraySingleArgumentConstructor) \ |
V(ArrayNArgumentsConstructor) \ |
+ V(InternalArrayNoArgumentConstructor) \ |
+ V(InternalArraySingleArgumentConstructor) \ |
+ V(InternalArrayNArgumentsConstructor) \ |
V(KeyedStoreElement) \ |
V(DebuggerStatement) \ |
V(NameDictionaryLookup) \ |
@@ -85,6 +88,7 @@ namespace internal { |
V(StoreArrayLiteralElement) \ |
V(StubFailureTrampoline) \ |
V(ArrayConstructor) \ |
+ V(InternalArrayConstructor) \ |
V(ProfileEntryHook) \ |
/* IC Handler stubs */ \ |
V(LoadField) \ |
@@ -655,6 +659,20 @@ class ArrayConstructorStub: public PlatformCodeStub { |
}; |
+class InternalArrayConstructorStub: public PlatformCodeStub { |
+ public: |
+ explicit InternalArrayConstructorStub(Isolate* isolate); |
+ |
+ void Generate(MacroAssembler* masm); |
+ |
+ private: |
+ virtual CodeStub::Major MajorKey() { return InternalArrayConstructor; } |
+ virtual int MinorKey() { return 0; } |
+ |
+ void GenerateCase(MacroAssembler* masm, ElementsKind kind); |
+}; |
+ |
+ |
class MathPowStub: public PlatformCodeStub { |
public: |
enum ExponentType { INTEGER, DOUBLE, TAGGED, ON_STACK}; |
@@ -1644,7 +1662,9 @@ class TransitionElementsKindStub : public HydrogenCodeStub { |
class ArrayConstructorStubBase : public HydrogenCodeStub { |
public: |
- ArrayConstructorStubBase(ElementsKind kind, AllocationSiteMode mode) |
+ ArrayConstructorStubBase( |
+ ElementsKind kind, |
+ AllocationSiteMode mode) |
: HydrogenCodeStub(CODE_STUB_IS_NOT_MISS) { |
bit_field_ = ElementsKindBits::encode(kind) | |
AllocationSiteModeBits::encode(mode == TRACK_ALLOCATION_SITE); |
@@ -1673,6 +1693,7 @@ class ArrayConstructorStubBase : public HydrogenCodeStub { |
class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; |
class AllocationSiteModeBits: public BitField<bool, 8, 1> {}; |
+ |
uint32_t bit_field_; |
DISALLOW_COPY_AND_ASSIGN(ArrayConstructorStubBase); |
@@ -1725,8 +1746,8 @@ class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase { |
public: |
ArrayNArgumentsConstructorStub( |
ElementsKind kind, |
- AllocationSiteMode mode = TRACK_ALLOCATION_SITE) : |
- ArrayConstructorStubBase(kind, mode) { |
+ AllocationSiteMode mode = TRACK_ALLOCATION_SITE) |
+ : ArrayConstructorStubBase(kind, mode) { |
} |
virtual Handle<Code> GenerateCode(); |
@@ -1742,6 +1763,88 @@ class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase { |
}; |
+class InternalArrayConstructorStubBase : public HydrogenCodeStub { |
+ public: |
+ explicit InternalArrayConstructorStubBase(ElementsKind kind) |
+ : HydrogenCodeStub(CODE_STUB_IS_NOT_MISS) { |
+ kind_ = kind; |
+ } |
+ |
+ virtual bool IsPregenerated() { return true; } |
+ static void GenerateStubsAheadOfTime(Isolate* isolate); |
+ static void InstallDescriptors(Isolate* isolate); |
+ |
+ // Parameters accessed via CodeStubGraphBuilder::GetParameter() |
+ static const int kConstructor = 0; |
+ |
+ ElementsKind elements_kind() const { return kind_; } |
+ |
+ private: |
+ int NotMissMinorKey() { return kind_; } |
+ |
+ ElementsKind kind_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(InternalArrayConstructorStubBase); |
+}; |
+ |
+ |
+class InternalArrayNoArgumentConstructorStub : public |
+ InternalArrayConstructorStubBase { |
+ public: |
+ explicit InternalArrayNoArgumentConstructorStub(ElementsKind kind) |
+ : InternalArrayConstructorStubBase(kind) { } |
+ |
+ virtual Handle<Code> GenerateCode(); |
+ |
+ virtual void InitializeInterfaceDescriptor( |
+ Isolate* isolate, |
+ CodeStubInterfaceDescriptor* descriptor); |
+ |
+ private: |
+ Major MajorKey() { return InternalArrayNoArgumentConstructor; } |
+ |
+ DISALLOW_COPY_AND_ASSIGN(InternalArrayNoArgumentConstructorStub); |
+}; |
+ |
+ |
+class InternalArraySingleArgumentConstructorStub : public |
+ InternalArrayConstructorStubBase { |
+ public: |
+ explicit InternalArraySingleArgumentConstructorStub(ElementsKind kind) |
+ : InternalArrayConstructorStubBase(kind) { } |
+ |
+ virtual Handle<Code> GenerateCode(); |
+ |
+ virtual void InitializeInterfaceDescriptor( |
+ Isolate* isolate, |
+ CodeStubInterfaceDescriptor* descriptor); |
+ |
+ private: |
+ Major MajorKey() { return InternalArraySingleArgumentConstructor; } |
+ |
+ DISALLOW_COPY_AND_ASSIGN(InternalArraySingleArgumentConstructorStub); |
+}; |
+ |
+ |
+class InternalArrayNArgumentsConstructorStub : public |
+ InternalArrayConstructorStubBase { |
+ public: |
+ explicit InternalArrayNArgumentsConstructorStub(ElementsKind kind) |
+ : InternalArrayConstructorStubBase(kind) { } |
+ |
+ virtual Handle<Code> GenerateCode(); |
+ |
+ virtual void InitializeInterfaceDescriptor( |
+ Isolate* isolate, |
+ CodeStubInterfaceDescriptor* descriptor); |
+ |
+ private: |
+ Major MajorKey() { return InternalArrayNArgumentsConstructor; } |
+ |
+ DISALLOW_COPY_AND_ASSIGN(InternalArrayNArgumentsConstructorStub); |
+}; |
+ |
+ |
class KeyedStoreElementStub : public PlatformCodeStub { |
public: |
KeyedStoreElementStub(bool is_js_array, |