Index: src/code-stubs.h |
diff --git a/src/code-stubs.h b/src/code-stubs.h |
index d651b2e624983105b41a1e39b2578ed09f8e4ad7..f3439140bed3888f9a24c134b6aae83e26163c12 100644 |
--- a/src/code-stubs.h |
+++ b/src/code-stubs.h |
@@ -55,7 +55,6 @@ namespace internal { |
V(VectorStoreIC) \ |
V(VectorKeyedStoreIC) \ |
/* HydrogenCodeStubs */ \ |
- V(ArrayNArgumentsConstructor) \ |
V(BinaryOpIC) \ |
V(BinaryOpWithAllocationSite) \ |
V(CreateAllocationSite) \ |
@@ -72,7 +71,6 @@ namespace internal { |
V(FastNewSloppyArguments) \ |
V(FastNewStrictArguments) \ |
V(GrowArrayElements) \ |
- V(InternalArrayNArgumentsConstructor) \ |
V(KeyedLoadGeneric) \ |
V(LoadGlobalViaContext) \ |
V(LoadScriptContextField) \ |
@@ -103,6 +101,7 @@ namespace internal { |
V(AllocateBool8x16) \ |
V(ArrayNoArgumentConstructor) \ |
V(ArraySingleArgumentConstructor) \ |
+ V(ArrayNArgumentsConstructor) \ |
V(StringLength) \ |
V(Add) \ |
V(Subtract) \ |
@@ -1307,7 +1306,7 @@ class ArrayConstructorStub: public PlatformCodeStub { |
class ArgumentCountBits : public BitField<ArgumentCountKey, 0, 2> {}; |
- DEFINE_CALL_INTERFACE_DESCRIPTOR(ArrayConstructor); |
+ DEFINE_CALL_INTERFACE_DESCRIPTOR(ArrayNArgumentsConstructor); |
DEFINE_PLATFORM_CODE_STUB(ArrayConstructor, PlatformCodeStub); |
}; |
@@ -1319,7 +1318,7 @@ class InternalArrayConstructorStub: public PlatformCodeStub { |
private: |
void GenerateCase(MacroAssembler* masm, ElementsKind kind); |
- DEFINE_CALL_INTERFACE_DESCRIPTOR(InternalArrayConstructor); |
+ DEFINE_CALL_INTERFACE_DESCRIPTOR(ArrayNArgumentsConstructor); |
DEFINE_PLATFORM_CODE_STUB(InternalArrayConstructor, PlatformCodeStub); |
}; |
@@ -2807,50 +2806,6 @@ class AllocateHeapNumberStub : public TurboFanCodeStub { |
SIMD128_TYPES(SIMD128_ALLOC_STUB) |
#undef SIMD128_ALLOC_STUB |
-class ArrayConstructorStubBase : public HydrogenCodeStub { |
- public: |
- ArrayConstructorStubBase(Isolate* isolate, |
- ElementsKind kind, |
- AllocationSiteOverrideMode override_mode) |
- : HydrogenCodeStub(isolate) { |
- // It only makes sense to override local allocation site behavior |
- // if there is a difference between the global allocation site policy |
- // for an ElementsKind and the desired usage of the stub. |
- DCHECK(override_mode != DISABLE_ALLOCATION_SITES || |
- AllocationSite::GetMode(kind) == TRACK_ALLOCATION_SITE); |
- set_sub_minor_key(ElementsKindBits::encode(kind) | |
- AllocationSiteOverrideModeBits::encode(override_mode)); |
- } |
- |
- ElementsKind elements_kind() const { |
- return ElementsKindBits::decode(sub_minor_key()); |
- } |
- |
- AllocationSiteOverrideMode override_mode() const { |
- return AllocationSiteOverrideModeBits::decode(sub_minor_key()); |
- } |
- |
- static void GenerateStubsAheadOfTime(Isolate* isolate); |
- |
- // Parameters accessed via CodeStubGraphBuilder::GetParameter() |
- static const int kConstructor = 0; |
- static const int kAllocationSite = 1; |
- |
- protected: |
- std::ostream& BasePrintName(std::ostream& os, |
- const char* name) const; // NOLINT |
- |
- private: |
- // Ensure data fits within available bits. |
- STATIC_ASSERT(LAST_ALLOCATION_SITE_OVERRIDE_MODE == 1); |
- |
- class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; |
- class AllocationSiteOverrideModeBits: public |
- BitField<AllocationSiteOverrideMode, 8, 1> {}; // NOLINT |
- |
- DEFINE_CODE_STUB_BASE(ArrayConstructorStubBase, HydrogenCodeStub); |
-}; |
- |
class CommonArrayConstructorStub : public TurboFanCodeStub { |
protected: |
CommonArrayConstructorStub(Isolate* isolate, ElementsKind kind, |
@@ -2881,6 +2836,8 @@ class CommonArrayConstructorStub : public TurboFanCodeStub { |
return AllocationSiteOverrideModeBits::decode(sub_minor_key()); |
} |
+ static void GenerateStubsAheadOfTime(Isolate* isolate); |
+ |
private: |
// Ensure data fits within available bits. |
STATIC_ASSERT(LAST_ALLOCATION_SITE_OVERRIDE_MODE == 1); |
@@ -2957,61 +2914,19 @@ class InternalArraySingleArgumentConstructorStub |
CommonArrayConstructorStub); |
}; |
-class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase { |
+class ArrayNArgumentsConstructorStub : public PlatformCodeStub { |
public: |
- ArrayNArgumentsConstructorStub( |
- Isolate* isolate, |
- ElementsKind kind, |
- AllocationSiteOverrideMode override_mode = DONT_OVERRIDE) |
- : ArrayConstructorStubBase(isolate, kind, override_mode) { |
- } |
- |
- private: |
- void PrintName(std::ostream& os) const override { // NOLINT |
- BasePrintName(os, "ArrayNArgumentsConstructorStub"); |
- } |
- |
- DEFINE_CALL_INTERFACE_DESCRIPTOR(ArrayConstructor); |
- DEFINE_HYDROGEN_CODE_STUB(ArrayNArgumentsConstructor, |
- ArrayConstructorStubBase); |
-}; |
- |
- |
-class InternalArrayConstructorStubBase : public HydrogenCodeStub { |
- public: |
- InternalArrayConstructorStubBase(Isolate* isolate, ElementsKind kind) |
- : HydrogenCodeStub(isolate) { |
- set_sub_minor_key(ElementsKindBits::encode(kind)); |
- } |
- |
- static void GenerateStubsAheadOfTime(Isolate* isolate); |
- |
- // Parameters accessed via CodeStubGraphBuilder::GetParameter() |
- static const int kConstructor = 0; |
+ explicit ArrayNArgumentsConstructorStub(Isolate* isolate) |
+ : PlatformCodeStub(isolate) {} |
- ElementsKind elements_kind() const { |
- return ElementsKindBits::decode(sub_minor_key()); |
+ CallInterfaceDescriptor GetCallInterfaceDescriptor() const override { |
+ return ArrayNArgumentsConstructorDescriptor(isolate()); |
} |
private: |
- class ElementsKindBits : public BitField<ElementsKind, 0, 8> {}; |
- |
- DEFINE_CODE_STUB_BASE(InternalArrayConstructorStubBase, HydrogenCodeStub); |
-}; |
- |
- |
-class InternalArrayNArgumentsConstructorStub : public |
- InternalArrayConstructorStubBase { |
- public: |
- InternalArrayNArgumentsConstructorStub(Isolate* isolate, ElementsKind kind) |
- : InternalArrayConstructorStubBase(isolate, kind) { } |
- |
- DEFINE_CALL_INTERFACE_DESCRIPTOR(InternalArrayConstructor); |
- DEFINE_HYDROGEN_CODE_STUB(InternalArrayNArgumentsConstructor, |
- InternalArrayConstructorStubBase); |
+ DEFINE_PLATFORM_CODE_STUB(ArrayNArgumentsConstructor, PlatformCodeStub); |
}; |
- |
class StoreElementStub : public PlatformCodeStub { |
public: |
StoreElementStub(Isolate* isolate, ElementsKind elements_kind, |