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