| 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,
|
|
|