| 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/codegen.h" | 10 #include "src/codegen.h" |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 V(InternalArrayNoArgumentConstructor) \ | 95 V(InternalArrayNoArgumentConstructor) \ |
| 96 V(InternalArraySingleArgumentConstructor) \ | 96 V(InternalArraySingleArgumentConstructor) \ |
| 97 V(ElementsTransitionAndStore) \ | 97 V(ElementsTransitionAndStore) \ |
| 98 V(KeyedLoadSloppyArguments) \ | 98 V(KeyedLoadSloppyArguments) \ |
| 99 V(KeyedStoreSloppyArguments) \ | 99 V(KeyedStoreSloppyArguments) \ |
| 100 V(LoadScriptContextField) \ | 100 V(LoadScriptContextField) \ |
| 101 V(StoreScriptContextField) \ | 101 V(StoreScriptContextField) \ |
| 102 V(NumberToString) \ | 102 V(NumberToString) \ |
| 103 V(StringAdd) \ | 103 V(StringAdd) \ |
| 104 V(GetProperty) \ | 104 V(GetProperty) \ |
| 105 V(LoadICProtoArray) \ | |
| 106 V(StoreFastElement) \ | 105 V(StoreFastElement) \ |
| 107 V(StoreGlobal) \ | 106 V(StoreGlobal) \ |
| 108 V(StoreInterceptor) \ | 107 V(StoreInterceptor) \ |
| 109 V(LoadApiGetter) \ | 108 V(LoadApiGetter) \ |
| 110 V(LoadIndexedInterceptor) \ | 109 V(LoadIndexedInterceptor) \ |
| 111 V(LoadField) \ | |
| 112 V(GrowArrayElements) | 110 V(GrowArrayElements) |
| 113 | 111 |
| 114 // List of code stubs only used on ARM 32 bits platforms. | 112 // List of code stubs only used on ARM 32 bits platforms. |
| 115 #if V8_TARGET_ARCH_ARM | 113 #if V8_TARGET_ARCH_ARM |
| 116 #define CODE_STUB_LIST_ARM(V) V(DirectCEntry) | 114 #define CODE_STUB_LIST_ARM(V) V(DirectCEntry) |
| 117 | 115 |
| 118 #else | 116 #else |
| 119 #define CODE_STUB_LIST_ARM(V) | 117 #define CODE_STUB_LIST_ARM(V) |
| 120 #endif | 118 #endif |
| 121 | 119 |
| (...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 972 explicit LoadIndexedStringStub(Isolate* isolate) | 970 explicit LoadIndexedStringStub(Isolate* isolate) |
| 973 : PlatformCodeStub(isolate) {} | 971 : PlatformCodeStub(isolate) {} |
| 974 | 972 |
| 975 Code::Kind GetCodeKind() const override { return Code::HANDLER; } | 973 Code::Kind GetCodeKind() const override { return Code::HANDLER; } |
| 976 ExtraICState GetExtraICState() const override { return Code::KEYED_LOAD_IC; } | 974 ExtraICState GetExtraICState() const override { return Code::KEYED_LOAD_IC; } |
| 977 | 975 |
| 978 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); | 976 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); |
| 979 DEFINE_PLATFORM_CODE_STUB(LoadIndexedString, PlatformCodeStub); | 977 DEFINE_PLATFORM_CODE_STUB(LoadIndexedString, PlatformCodeStub); |
| 980 }; | 978 }; |
| 981 | 979 |
| 982 | |
| 983 class HandlerStub : public HydrogenCodeStub { | |
| 984 public: | |
| 985 Code::Kind GetCodeKind() const override { return Code::HANDLER; } | |
| 986 ExtraICState GetExtraICState() const override { return kind(); } | |
| 987 | |
| 988 void InitializeDescriptor(CodeStubDescriptor* descriptor) override; | |
| 989 | |
| 990 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override; | |
| 991 | |
| 992 protected: | |
| 993 explicit HandlerStub(Isolate* isolate) : HydrogenCodeStub(isolate) {} | |
| 994 | |
| 995 virtual Code::Kind kind() const = 0; | |
| 996 | |
| 997 DEFINE_CODE_STUB_BASE(HandlerStub, HydrogenCodeStub); | |
| 998 }; | |
| 999 | |
| 1000 class LoadFieldStub : public TurboFanCodeStub { | |
| 1001 public: | |
| 1002 explicit LoadFieldStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} | |
| 1003 | |
| 1004 Code::Kind GetCodeKind() const override { return Code::HANDLER; } | |
| 1005 ExtraICState GetExtraICState() const override { return GetCodeKind(); } | |
| 1006 | |
| 1007 private: | |
| 1008 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadField); | |
| 1009 DEFINE_TURBOFAN_CODE_STUB(LoadField, TurboFanCodeStub); | |
| 1010 }; | |
| 1011 | |
| 1012 class KeyedLoadSloppyArgumentsStub : public TurboFanCodeStub { | 980 class KeyedLoadSloppyArgumentsStub : public TurboFanCodeStub { |
| 1013 public: | 981 public: |
| 1014 explicit KeyedLoadSloppyArgumentsStub(Isolate* isolate) | 982 explicit KeyedLoadSloppyArgumentsStub(Isolate* isolate) |
| 1015 : TurboFanCodeStub(isolate) {} | 983 : TurboFanCodeStub(isolate) {} |
| 1016 | 984 |
| 1017 Code::Kind GetCodeKind() const override { return Code::HANDLER; } | 985 Code::Kind GetCodeKind() const override { return Code::HANDLER; } |
| 1018 ExtraICState GetExtraICState() const override { return Code::LOAD_IC; } | 986 ExtraICState GetExtraICState() const override { return Code::LOAD_IC; } |
| 1019 | 987 |
| 1020 protected: | 988 protected: |
| 1021 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); | 989 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); |
| (...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1642 | 1610 |
| 1643 protected: | 1611 protected: |
| 1644 CallICState state() const { | 1612 CallICState state() const { |
| 1645 return CallICState(static_cast<ExtraICState>(minor_key_)); | 1613 return CallICState(static_cast<ExtraICState>(minor_key_)); |
| 1646 } | 1614 } |
| 1647 | 1615 |
| 1648 DEFINE_CALL_INTERFACE_DESCRIPTOR(CallFunctionWithFeedback); | 1616 DEFINE_CALL_INTERFACE_DESCRIPTOR(CallFunctionWithFeedback); |
| 1649 DEFINE_PLATFORM_CODE_STUB(CallICTrampoline, PlatformCodeStub); | 1617 DEFINE_PLATFORM_CODE_STUB(CallICTrampoline, PlatformCodeStub); |
| 1650 }; | 1618 }; |
| 1651 | 1619 |
| 1652 class LoadICProtoArrayStub : public TurboFanCodeStub { | |
| 1653 public: | |
| 1654 explicit LoadICProtoArrayStub(Isolate* isolate, | |
| 1655 bool throw_reference_error_if_nonexistent) | |
| 1656 : TurboFanCodeStub(isolate) { | |
| 1657 minor_key_ = ThrowReferenceErrorIfNonexistentBits::encode( | |
| 1658 throw_reference_error_if_nonexistent); | |
| 1659 } | |
| 1660 | |
| 1661 bool throw_reference_error_if_nonexistent() const { | |
| 1662 return ThrowReferenceErrorIfNonexistentBits::decode(minor_key_); | |
| 1663 } | |
| 1664 | |
| 1665 ExtraICState GetExtraICState() const final { | |
| 1666 return static_cast<ExtraICState>(minor_key_); | |
| 1667 } | |
| 1668 | |
| 1669 private: | |
| 1670 class ThrowReferenceErrorIfNonexistentBits : public BitField<bool, 0, 1> {}; | |
| 1671 | |
| 1672 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadICProtoArray); | |
| 1673 DEFINE_TURBOFAN_CODE_STUB(LoadICProtoArray, TurboFanCodeStub); | |
| 1674 }; | |
| 1675 | |
| 1676 class DoubleToIStub : public PlatformCodeStub { | 1620 class DoubleToIStub : public PlatformCodeStub { |
| 1677 public: | 1621 public: |
| 1678 DoubleToIStub(Isolate* isolate, Register source, Register destination, | 1622 DoubleToIStub(Isolate* isolate, Register source, Register destination, |
| 1679 int offset, bool is_truncating, bool skip_fastpath = false) | 1623 int offset, bool is_truncating, bool skip_fastpath = false) |
| 1680 : PlatformCodeStub(isolate) { | 1624 : PlatformCodeStub(isolate) { |
| 1681 minor_key_ = SourceRegisterBits::encode(source.code()) | | 1625 minor_key_ = SourceRegisterBits::encode(source.code()) | |
| 1682 DestinationRegisterBits::encode(destination.code()) | | 1626 DestinationRegisterBits::encode(destination.code()) | |
| 1683 OffsetBits::encode(offset) | | 1627 OffsetBits::encode(offset) | |
| 1684 IsTruncatingBits::encode(is_truncating) | | 1628 IsTruncatingBits::encode(is_truncating) | |
| 1685 SkipFastPathBits::encode(skip_fastpath) | | 1629 SkipFastPathBits::encode(skip_fastpath) | |
| (...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2165 #undef DEFINE_PLATFORM_CODE_STUB | 2109 #undef DEFINE_PLATFORM_CODE_STUB |
| 2166 #undef DEFINE_HANDLER_CODE_STUB | 2110 #undef DEFINE_HANDLER_CODE_STUB |
| 2167 #undef DEFINE_HYDROGEN_CODE_STUB | 2111 #undef DEFINE_HYDROGEN_CODE_STUB |
| 2168 #undef DEFINE_CODE_STUB | 2112 #undef DEFINE_CODE_STUB |
| 2169 #undef DEFINE_CODE_STUB_BASE | 2113 #undef DEFINE_CODE_STUB_BASE |
| 2170 | 2114 |
| 2171 } // namespace internal | 2115 } // namespace internal |
| 2172 } // namespace v8 | 2116 } // namespace v8 |
| 2173 | 2117 |
| 2174 #endif // V8_CODE_STUBS_H_ | 2118 #endif // V8_CODE_STUBS_H_ |
| OLD | NEW |