Index: src/code-stubs.h |
diff --git a/src/code-stubs.h b/src/code-stubs.h |
index 513ad9a7c2937912675eb389975a9e8bb465f077..4c0d4eee769d721d02b8549418d4b2ff81b4ea1e 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) \ |
@@ -670,6 +674,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 }; |
@@ -1712,6 +1730,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); |
@@ -1764,8 +1783,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(); |
@@ -1781,6 +1800,87 @@ class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase { |
}; |
+class InternalArrayConstructorStubBase : public HydrogenCodeStub { |
+ public: |
+ explicit InternalArrayConstructorStubBase(ElementsKind kind) { |
+ 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, |