| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_CODE_STUBS_H_ | 5 #ifndef V8_CODE_STUBS_H_ |
| 6 #define V8_CODE_STUBS_H_ | 6 #define V8_CODE_STUBS_H_ |
| 7 | 7 |
| 8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
| 9 #include "src/assembler.h" | 9 #include "src/assembler.h" |
| 10 #include "src/code-stub-assembler.h" | 10 #include "src/code-stub-assembler.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 /* These are only called from FCG */ \ | 60 /* These are only called from FCG */ \ |
| 61 /* They can be removed when only the TF */ \ | 61 /* They can be removed when only the TF */ \ |
| 62 /* version of the corresponding stub is */ \ | 62 /* version of the corresponding stub is */ \ |
| 63 /* used universally */ \ | 63 /* used universally */ \ |
| 64 V(CallICTrampoline) \ | 64 V(CallICTrampoline) \ |
| 65 V(LoadICTrampoline) \ | 65 V(LoadICTrampoline) \ |
| 66 V(KeyedLoadICTrampoline) \ | 66 V(KeyedLoadICTrampoline) \ |
| 67 V(KeyedStoreICTrampoline) \ | 67 V(KeyedStoreICTrampoline) \ |
| 68 V(StoreICTrampoline) \ | 68 V(StoreICTrampoline) \ |
| 69 /* --- HydrogenCodeStubs --- */ \ | 69 /* --- HydrogenCodeStubs --- */ \ |
| 70 V(ElementsTransitionAndStore) \ | |
| 71 V(FastCloneShallowArray) \ | 70 V(FastCloneShallowArray) \ |
| 72 V(NumberToString) \ | 71 V(NumberToString) \ |
| 73 V(StringAdd) \ | 72 V(StringAdd) \ |
| 74 V(ToObject) \ | 73 V(ToObject) \ |
| 75 V(Typeof) \ | 74 V(Typeof) \ |
| 76 /* These builtins w/ JS linkage are */ \ | 75 /* These builtins w/ JS linkage are */ \ |
| 77 /* just fast-cases of C++ builtins. They */ \ | 76 /* just fast-cases of C++ builtins. They */ \ |
| 78 /* require varg support from TF */ \ | 77 /* require varg support from TF */ \ |
| 79 V(FastArrayPush) \ | 78 V(FastArrayPush) \ |
| 80 V(FastFunctionBind) \ | 79 V(FastFunctionBind) \ |
| 81 /* These will be ported/eliminated */ \ | 80 /* These will be ported/eliminated */ \ |
| 82 /* as part of the new IC system, ask */ \ | 81 /* as part of the new IC system, ask */ \ |
| 83 /* ishell before doing anything */ \ | 82 /* ishell before doing anything */ \ |
| 84 V(KeyedLoadGeneric) \ | 83 V(KeyedLoadGeneric) \ |
| 85 V(LoadConstant) \ | 84 V(LoadConstant) \ |
| 86 V(LoadDictionaryElement) \ | 85 V(LoadDictionaryElement) \ |
| 87 V(LoadFastElement) \ | 86 V(LoadFastElement) \ |
| 88 V(LoadField) \ | 87 V(LoadField) \ |
| 89 V(StoreTransition) \ | |
| 90 /* These should never be ported to TF */ \ | 88 /* These should never be ported to TF */ \ |
| 91 /* because they are either used only by */ \ | 89 /* because they are either used only by */ \ |
| 92 /* FCG/Crankshaft or are deprecated */ \ | 90 /* FCG/Crankshaft or are deprecated */ \ |
| 93 V(BinaryOpIC) \ | 91 V(BinaryOpIC) \ |
| 94 V(BinaryOpWithAllocationSite) \ | 92 V(BinaryOpWithAllocationSite) \ |
| 95 V(ToBooleanIC) \ | 93 V(ToBooleanIC) \ |
| 96 V(RegExpConstructResult) \ | 94 V(RegExpConstructResult) \ |
| 97 V(TransitionElementsKind) \ | 95 V(TransitionElementsKind) \ |
| 98 V(StoreGlobalViaContext) \ | 96 V(StoreGlobalViaContext) \ |
| 99 /* --- TurboFanCodeStubs --- */ \ | 97 /* --- TurboFanCodeStubs --- */ \ |
| (...skipping 27 matching lines...) Expand all Loading... |
| 127 V(ShiftRight) \ | 125 V(ShiftRight) \ |
| 128 V(ShiftRightLogical) \ | 126 V(ShiftRightLogical) \ |
| 129 V(ShiftLeft) \ | 127 V(ShiftLeft) \ |
| 130 V(BitwiseAnd) \ | 128 V(BitwiseAnd) \ |
| 131 V(BitwiseOr) \ | 129 V(BitwiseOr) \ |
| 132 V(BitwiseXor) \ | 130 V(BitwiseXor) \ |
| 133 V(Inc) \ | 131 V(Inc) \ |
| 134 V(InternalArrayNoArgumentConstructor) \ | 132 V(InternalArrayNoArgumentConstructor) \ |
| 135 V(InternalArraySingleArgumentConstructor) \ | 133 V(InternalArraySingleArgumentConstructor) \ |
| 136 V(Dec) \ | 134 V(Dec) \ |
| 135 V(ElementsTransitionAndStore) \ |
| 137 V(FastCloneShallowObject) \ | 136 V(FastCloneShallowObject) \ |
| 138 V(FastCloneRegExp) \ | 137 V(FastCloneRegExp) \ |
| 139 V(FastNewClosure) \ | 138 V(FastNewClosure) \ |
| 140 V(FastNewFunctionContext) \ | 139 V(FastNewFunctionContext) \ |
| 141 V(InstanceOf) \ | 140 V(InstanceOf) \ |
| 142 V(LessThan) \ | 141 V(LessThan) \ |
| 143 V(LessThanOrEqual) \ | 142 V(LessThanOrEqual) \ |
| 144 V(GreaterThan) \ | 143 V(GreaterThan) \ |
| 145 V(GreaterThanOrEqual) \ | 144 V(GreaterThanOrEqual) \ |
| 146 V(Equal) \ | 145 V(Equal) \ |
| (...skipping 14 matching lines...) Expand all Loading... |
| 161 V(ToLength) \ | 160 V(ToLength) \ |
| 162 V(HasProperty) \ | 161 V(HasProperty) \ |
| 163 V(ForInFilter) \ | 162 V(ForInFilter) \ |
| 164 V(GetProperty) \ | 163 V(GetProperty) \ |
| 165 V(LoadICTF) \ | 164 V(LoadICTF) \ |
| 166 V(KeyedLoadICTF) \ | 165 V(KeyedLoadICTF) \ |
| 167 V(StoreFastElement) \ | 166 V(StoreFastElement) \ |
| 168 V(StoreField) \ | 167 V(StoreField) \ |
| 169 V(StoreGlobal) \ | 168 V(StoreGlobal) \ |
| 170 V(StoreInterceptor) \ | 169 V(StoreInterceptor) \ |
| 170 V(StoreTransition) \ |
| 171 V(LoadApiGetter) \ | 171 V(LoadApiGetter) \ |
| 172 V(LoadIndexedInterceptor) \ | 172 V(LoadIndexedInterceptor) \ |
| 173 V(GrowArrayElements) \ | 173 V(GrowArrayElements) \ |
| 174 /* These are only called from FGC and */ \ | 174 /* These are only called from FGC and */ \ |
| 175 /* can be removed when we use ignition */ \ | 175 /* can be removed when we use ignition */ \ |
| 176 /* only */ \ | 176 /* only */ \ |
| 177 V(LoadICTrampolineTF) \ | 177 V(LoadICTrampolineTF) \ |
| 178 V(LoadGlobalICTrampoline) \ | 178 V(LoadGlobalICTrampoline) \ |
| 179 V(KeyedLoadICTrampolineTF) | 179 V(KeyedLoadICTrampolineTF) |
| 180 | 180 |
| (...skipping 1478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1659 class RepresentationBits | 1659 class RepresentationBits |
| 1660 : public BitField<Representation::Kind, StoreFieldByIndexBits::kNext, 4> { | 1660 : public BitField<Representation::Kind, StoreFieldByIndexBits::kNext, 4> { |
| 1661 }; | 1661 }; |
| 1662 STATIC_ASSERT(Representation::kNumRepresentations - 1 < | 1662 STATIC_ASSERT(Representation::kNumRepresentations - 1 < |
| 1663 RepresentationBits::kMax); | 1663 RepresentationBits::kMax); |
| 1664 | 1664 |
| 1665 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreWithVector); | 1665 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreWithVector); |
| 1666 DEFINE_TURBOFAN_CODE_STUB(StoreField, TurboFanCodeStub); | 1666 DEFINE_TURBOFAN_CODE_STUB(StoreField, TurboFanCodeStub); |
| 1667 }; | 1667 }; |
| 1668 | 1668 |
| 1669 | 1669 class StoreTransitionStub : public TurboFanCodeStub { |
| 1670 // Register and parameter access methods are specified here instead of in | |
| 1671 // the CallInterfaceDescriptor because the stub uses a different descriptor | |
| 1672 // if FLAG_vector_stores is on. | |
| 1673 class StoreTransitionHelper { | |
| 1674 public: | |
| 1675 static Register ReceiverRegister() { | |
| 1676 return StoreTransitionDescriptor::ReceiverRegister(); | |
| 1677 } | |
| 1678 | |
| 1679 static Register NameRegister() { | |
| 1680 return StoreTransitionDescriptor::NameRegister(); | |
| 1681 } | |
| 1682 | |
| 1683 static Register ValueRegister() { | |
| 1684 return StoreTransitionDescriptor::ValueRegister(); | |
| 1685 } | |
| 1686 | |
| 1687 static Register SlotRegister() { | |
| 1688 return VectorStoreTransitionDescriptor::SlotRegister(); | |
| 1689 } | |
| 1690 | |
| 1691 static Register VectorRegister() { | |
| 1692 return VectorStoreTransitionDescriptor::VectorRegister(); | |
| 1693 } | |
| 1694 | |
| 1695 static Register MapRegister() { | |
| 1696 return VectorStoreTransitionDescriptor::MapRegister(); | |
| 1697 } | |
| 1698 | |
| 1699 static int ReceiverIndex() { return StoreTransitionDescriptor::kReceiver; } | |
| 1700 | |
| 1701 static int NameIndex() { return StoreTransitionDescriptor::kReceiver; } | |
| 1702 | |
| 1703 static int ValueIndex() { return StoreTransitionDescriptor::kValue; } | |
| 1704 | |
| 1705 static int MapIndex() { | |
| 1706 DCHECK(static_cast<int>(VectorStoreTransitionDescriptor::kMap) == | |
| 1707 static_cast<int>(StoreTransitionDescriptor::kMap)); | |
| 1708 return StoreTransitionDescriptor::kMap; | |
| 1709 } | |
| 1710 | |
| 1711 static int VectorIndex() { | |
| 1712 if (HasVirtualSlotArg()) { | |
| 1713 return VectorStoreTransitionDescriptor::kVirtualSlotVector; | |
| 1714 } | |
| 1715 return VectorStoreTransitionDescriptor::kVector; | |
| 1716 } | |
| 1717 | |
| 1718 // Some platforms don't have a slot arg. | |
| 1719 static bool HasVirtualSlotArg() { | |
| 1720 return SlotRegister().is(no_reg); | |
| 1721 } | |
| 1722 }; | |
| 1723 | |
| 1724 | |
| 1725 class StoreTransitionStub : public HandlerStub { | |
| 1726 public: | 1670 public: |
| 1727 enum StoreMode { | 1671 enum StoreMode { |
| 1728 StoreMapOnly, | 1672 StoreMapOnly, |
| 1729 StoreMapAndValue, | 1673 StoreMapAndValue, |
| 1730 ExtendStorageAndStoreMapAndValue | 1674 ExtendStorageAndStoreMapAndValue |
| 1731 }; | 1675 }; |
| 1732 | 1676 |
| 1733 explicit StoreTransitionStub(Isolate* isolate) : HandlerStub(isolate) { | 1677 explicit StoreTransitionStub(Isolate* isolate) : TurboFanCodeStub(isolate) { |
| 1734 set_sub_minor_key(StoreModeBits::encode(StoreMapOnly)); | 1678 minor_key_ = StoreModeBits::encode(StoreMapOnly); |
| 1735 } | 1679 } |
| 1736 | 1680 |
| 1737 StoreTransitionStub(Isolate* isolate, FieldIndex index, | 1681 StoreTransitionStub(Isolate* isolate, FieldIndex index, |
| 1738 Representation representation, StoreMode store_mode) | 1682 Representation representation, StoreMode store_mode) |
| 1739 : HandlerStub(isolate) { | 1683 : TurboFanCodeStub(isolate) { |
| 1740 DCHECK(store_mode != StoreMapOnly); | 1684 DCHECK(store_mode != StoreMapOnly); |
| 1741 int property_index_key = index.GetFieldAccessStubKey(); | 1685 int property_index_key = index.GetFieldAccessStubKey(); |
| 1742 uint8_t repr = PropertyDetails::EncodeRepresentation(representation); | 1686 minor_key_ = StoreFieldByIndexBits::encode(property_index_key) | |
| 1743 set_sub_minor_key(StoreFieldByIndexBits::encode(property_index_key) | | 1687 RepresentationBits::encode(representation.kind()) | |
| 1744 RepresentationBits::encode(repr) | | 1688 StoreModeBits::encode(store_mode); |
| 1745 StoreModeBits::encode(store_mode)); | |
| 1746 } | 1689 } |
| 1747 | 1690 |
| 1691 Code::Kind GetCodeKind() const override { return Code::HANDLER; } |
| 1692 ExtraICState GetExtraICState() const override { return Code::STORE_IC; } |
| 1693 |
| 1748 FieldIndex index() const { | 1694 FieldIndex index() const { |
| 1749 DCHECK(store_mode() != StoreMapOnly); | 1695 DCHECK(store_mode() != StoreMapOnly); |
| 1750 int property_index_key = StoreFieldByIndexBits::decode(sub_minor_key()); | 1696 int property_index_key = StoreFieldByIndexBits::decode(minor_key_); |
| 1751 return FieldIndex::FromFieldAccessStubKey(property_index_key); | 1697 return FieldIndex::FromFieldAccessStubKey(property_index_key); |
| 1752 } | 1698 } |
| 1753 | 1699 |
| 1754 Representation representation() { | 1700 Representation representation() const { |
| 1755 DCHECK(store_mode() != StoreMapOnly); | 1701 DCHECK(store_mode() != StoreMapOnly); |
| 1756 uint8_t repr = RepresentationBits::decode(sub_minor_key()); | 1702 return Representation::FromKind(RepresentationBits::decode(minor_key_)); |
| 1757 return PropertyDetails::DecodeRepresentation(repr); | |
| 1758 } | 1703 } |
| 1759 | 1704 |
| 1760 StoreMode store_mode() const { | 1705 StoreMode store_mode() const { return StoreModeBits::decode(minor_key_); } |
| 1761 return StoreModeBits::decode(sub_minor_key()); | |
| 1762 } | |
| 1763 | |
| 1764 protected: | |
| 1765 Code::Kind kind() const override { return Code::STORE_IC; } | |
| 1766 void InitializeDescriptor(CodeStubDescriptor* descriptor) override; | |
| 1767 | 1706 |
| 1768 private: | 1707 private: |
| 1769 class StoreFieldByIndexBits : public BitField<int, 0, 13> {}; | 1708 class StoreFieldByIndexBits : public BitField<int, 0, 13> {}; |
| 1770 class RepresentationBits : public BitField<uint8_t, 13, 4> {}; | 1709 class RepresentationBits : public BitField<Representation::Kind, 13, 4> {}; |
| 1710 STATIC_ASSERT(Representation::kNumRepresentations - 1 < |
| 1711 RepresentationBits::kMax); |
| 1771 class StoreModeBits : public BitField<StoreMode, 17, 2> {}; | 1712 class StoreModeBits : public BitField<StoreMode, 17, 2> {}; |
| 1772 | 1713 |
| 1773 DEFINE_CALL_INTERFACE_DESCRIPTOR(VectorStoreTransition); | 1714 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreTransition); |
| 1774 DEFINE_HANDLER_CODE_STUB(StoreTransition, HandlerStub); | 1715 DEFINE_TURBOFAN_CODE_STUB(StoreTransition, TurboFanCodeStub); |
| 1775 }; | 1716 }; |
| 1776 | 1717 |
| 1777 class StoreGlobalStub : public TurboFanCodeStub { | 1718 class StoreGlobalStub : public TurboFanCodeStub { |
| 1778 public: | 1719 public: |
| 1779 StoreGlobalStub(Isolate* isolate, PropertyCellType type, | 1720 StoreGlobalStub(Isolate* isolate, PropertyCellType type, |
| 1780 Maybe<PropertyCellConstantType> constant_type, | 1721 Maybe<PropertyCellConstantType> constant_type, |
| 1781 bool check_global) | 1722 bool check_global) |
| 1782 : TurboFanCodeStub(isolate) { | 1723 : TurboFanCodeStub(isolate) { |
| 1783 PropertyCellConstantType encoded_constant_type = | 1724 PropertyCellConstantType encoded_constant_type = |
| 1784 constant_type.FromMaybe(PropertyCellConstantType::kSmi); | 1725 constant_type.FromMaybe(PropertyCellConstantType::kSmi); |
| (...skipping 1200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2985 StoreElementStub(Isolate* isolate, ElementsKind elements_kind, | 2926 StoreElementStub(Isolate* isolate, ElementsKind elements_kind, |
| 2986 KeyedAccessStoreMode mode) | 2927 KeyedAccessStoreMode mode) |
| 2987 : PlatformCodeStub(isolate) { | 2928 : PlatformCodeStub(isolate) { |
| 2988 // TODO(jkummerow): Rename this stub to StoreSlowElementStub, | 2929 // TODO(jkummerow): Rename this stub to StoreSlowElementStub, |
| 2989 // drop elements_kind parameter. | 2930 // drop elements_kind parameter. |
| 2990 DCHECK_EQ(DICTIONARY_ELEMENTS, elements_kind); | 2931 DCHECK_EQ(DICTIONARY_ELEMENTS, elements_kind); |
| 2991 minor_key_ = ElementsKindBits::encode(elements_kind) | | 2932 minor_key_ = ElementsKindBits::encode(elements_kind) | |
| 2992 CommonStoreModeBits::encode(mode); | 2933 CommonStoreModeBits::encode(mode); |
| 2993 } | 2934 } |
| 2994 | 2935 |
| 2995 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override { | |
| 2996 return StoreWithVectorDescriptor(isolate()); | |
| 2997 } | |
| 2998 | |
| 2999 Code::Kind GetCodeKind() const override { return Code::HANDLER; } | 2936 Code::Kind GetCodeKind() const override { return Code::HANDLER; } |
| 3000 ExtraICState GetExtraICState() const override { return Code::KEYED_STORE_IC; } | 2937 ExtraICState GetExtraICState() const override { return Code::KEYED_STORE_IC; } |
| 3001 | 2938 |
| 3002 private: | 2939 private: |
| 3003 ElementsKind elements_kind() const { | 2940 ElementsKind elements_kind() const { |
| 3004 return ElementsKindBits::decode(minor_key_); | 2941 return ElementsKindBits::decode(minor_key_); |
| 3005 } | 2942 } |
| 3006 | 2943 |
| 3007 class ElementsKindBits | 2944 class ElementsKindBits |
| 3008 : public BitField<ElementsKind, CommonStoreModeBits::kNext, 8> {}; | 2945 : public BitField<ElementsKind, CommonStoreModeBits::kNext, 8> {}; |
| 3009 | 2946 |
| 2947 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreWithVector); |
| 3010 DEFINE_PLATFORM_CODE_STUB(StoreElement, PlatformCodeStub); | 2948 DEFINE_PLATFORM_CODE_STUB(StoreElement, PlatformCodeStub); |
| 3011 }; | 2949 }; |
| 3012 | 2950 |
| 3013 class ToBooleanICStub : public HydrogenCodeStub { | 2951 class ToBooleanICStub : public HydrogenCodeStub { |
| 3014 public: | 2952 public: |
| 3015 enum Type { | 2953 enum Type { |
| 3016 UNDEFINED, | 2954 UNDEFINED, |
| 3017 BOOLEAN, | 2955 BOOLEAN, |
| 3018 NULL_TYPE, | 2956 NULL_TYPE, |
| 3019 SMI, | 2957 SMI, |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3076 : HydrogenCodeStub(isolate, init_state) {} | 3014 : HydrogenCodeStub(isolate, init_state) {} |
| 3077 | 3015 |
| 3078 class TypesBits : public BitField<uint16_t, 0, NUMBER_OF_TYPES> {}; | 3016 class TypesBits : public BitField<uint16_t, 0, NUMBER_OF_TYPES> {}; |
| 3079 | 3017 |
| 3080 DEFINE_CALL_INTERFACE_DESCRIPTOR(TypeConversion); | 3018 DEFINE_CALL_INTERFACE_DESCRIPTOR(TypeConversion); |
| 3081 DEFINE_HYDROGEN_CODE_STUB(ToBooleanIC, HydrogenCodeStub); | 3019 DEFINE_HYDROGEN_CODE_STUB(ToBooleanIC, HydrogenCodeStub); |
| 3082 }; | 3020 }; |
| 3083 | 3021 |
| 3084 std::ostream& operator<<(std::ostream& os, const ToBooleanICStub::Types& t); | 3022 std::ostream& operator<<(std::ostream& os, const ToBooleanICStub::Types& t); |
| 3085 | 3023 |
| 3086 class ElementsTransitionAndStoreStub : public HydrogenCodeStub { | 3024 class ElementsTransitionAndStoreStub : public TurboFanCodeStub { |
| 3087 public: | 3025 public: |
| 3088 ElementsTransitionAndStoreStub(Isolate* isolate, ElementsKind from_kind, | 3026 ElementsTransitionAndStoreStub(Isolate* isolate, ElementsKind from_kind, |
| 3089 ElementsKind to_kind, bool is_jsarray, | 3027 ElementsKind to_kind, bool is_jsarray, |
| 3090 KeyedAccessStoreMode store_mode) | 3028 KeyedAccessStoreMode store_mode) |
| 3091 : HydrogenCodeStub(isolate) { | 3029 : TurboFanCodeStub(isolate) { |
| 3092 set_sub_minor_key(CommonStoreModeBits::encode(store_mode) | | 3030 minor_key_ = CommonStoreModeBits::encode(store_mode) | |
| 3093 FromBits::encode(from_kind) | ToBits::encode(to_kind) | | 3031 FromBits::encode(from_kind) | ToBits::encode(to_kind) | |
| 3094 IsJSArrayBits::encode(is_jsarray)); | 3032 IsJSArrayBits::encode(is_jsarray); |
| 3095 } | 3033 } |
| 3096 | 3034 |
| 3097 ElementsKind from_kind() const { return FromBits::decode(sub_minor_key()); } | 3035 ElementsKind from_kind() const { return FromBits::decode(minor_key_); } |
| 3098 ElementsKind to_kind() const { return ToBits::decode(sub_minor_key()); } | 3036 ElementsKind to_kind() const { return ToBits::decode(minor_key_); } |
| 3099 bool is_jsarray() const { return IsJSArrayBits::decode(sub_minor_key()); } | 3037 bool is_jsarray() const { return IsJSArrayBits::decode(minor_key_); } |
| 3100 KeyedAccessStoreMode store_mode() const { | 3038 KeyedAccessStoreMode store_mode() const { |
| 3101 return CommonStoreModeBits::decode(sub_minor_key()); | 3039 return CommonStoreModeBits::decode(minor_key_); |
| 3102 } | 3040 } |
| 3103 | 3041 |
| 3104 Code::Kind GetCodeKind() const override { return Code::HANDLER; } | 3042 Code::Kind GetCodeKind() const override { return Code::HANDLER; } |
| 3105 ExtraICState GetExtraICState() const override { return Code::KEYED_STORE_IC; } | 3043 ExtraICState GetExtraICState() const override { return Code::KEYED_STORE_IC; } |
| 3106 | 3044 |
| 3107 private: | 3045 private: |
| 3108 class FromBits | 3046 class FromBits |
| 3109 : public BitField<ElementsKind, CommonStoreModeBits::kNext, 8> {}; | 3047 : public BitField<ElementsKind, CommonStoreModeBits::kNext, 8> {}; |
| 3110 class ToBits : public BitField<ElementsKind, 11, 8> {}; | 3048 class ToBits : public BitField<ElementsKind, 11, 8> {}; |
| 3111 class IsJSArrayBits : public BitField<bool, 19, 1> {}; | 3049 class IsJSArrayBits : public BitField<bool, 19, 1> {}; |
| 3112 | 3050 |
| 3113 DEFINE_CALL_INTERFACE_DESCRIPTOR(VectorStoreTransition); | 3051 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreTransition); |
| 3114 DEFINE_HYDROGEN_CODE_STUB(ElementsTransitionAndStore, HydrogenCodeStub); | 3052 DEFINE_TURBOFAN_CODE_STUB(ElementsTransitionAndStore, TurboFanCodeStub); |
| 3115 }; | 3053 }; |
| 3116 | 3054 |
| 3117 | 3055 |
| 3118 class StubFailureTrampolineStub : public PlatformCodeStub { | 3056 class StubFailureTrampolineStub : public PlatformCodeStub { |
| 3119 public: | 3057 public: |
| 3120 StubFailureTrampolineStub(Isolate* isolate, StubFunctionMode function_mode) | 3058 StubFailureTrampolineStub(Isolate* isolate, StubFunctionMode function_mode) |
| 3121 : PlatformCodeStub(isolate) { | 3059 : PlatformCodeStub(isolate) { |
| 3122 minor_key_ = FunctionModeField::encode(function_mode); | 3060 minor_key_ = FunctionModeField::encode(function_mode); |
| 3123 } | 3061 } |
| 3124 | 3062 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3208 #undef DEFINE_HYDROGEN_CODE_STUB | 3146 #undef DEFINE_HYDROGEN_CODE_STUB |
| 3209 #undef DEFINE_CODE_STUB | 3147 #undef DEFINE_CODE_STUB |
| 3210 #undef DEFINE_CODE_STUB_BASE | 3148 #undef DEFINE_CODE_STUB_BASE |
| 3211 | 3149 |
| 3212 extern Representation RepresentationFromMachineType(MachineType type); | 3150 extern Representation RepresentationFromMachineType(MachineType type); |
| 3213 | 3151 |
| 3214 } // namespace internal | 3152 } // namespace internal |
| 3215 } // namespace v8 | 3153 } // namespace v8 |
| 3216 | 3154 |
| 3217 #endif // V8_CODE_STUBS_H_ | 3155 #endif // V8_CODE_STUBS_H_ |
| OLD | NEW |