Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(159)

Side by Side Diff: src/code-stubs.h

Issue 2511603002: [ic] Support data handlers in LoadGlobalIC. (Closed)
Patch Set: fix Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/code-stubs.cc » ('j') | src/ic/accessor-assembler.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1938 matching lines...) Expand 10 before | Expand all | Expand 10 after
1949 class LoadGlobalICTrampolineStub : public TurboFanCodeStub { 1949 class LoadGlobalICTrampolineStub : public TurboFanCodeStub {
1950 public: 1950 public:
1951 explicit LoadGlobalICTrampolineStub(Isolate* isolate, 1951 explicit LoadGlobalICTrampolineStub(Isolate* isolate,
1952 const LoadGlobalICState& state) 1952 const LoadGlobalICState& state)
1953 : TurboFanCodeStub(isolate) { 1953 : TurboFanCodeStub(isolate) {
1954 minor_key_ = state.GetExtraICState(); 1954 minor_key_ = state.GetExtraICState();
1955 } 1955 }
1956 1956
1957 Code::Kind GetCodeKind() const override { return Code::LOAD_GLOBAL_IC; } 1957 Code::Kind GetCodeKind() const override { return Code::LOAD_GLOBAL_IC; }
1958 1958
1959 TypeofMode typeof_mode() const {
1960 LoadGlobalICState state(GetExtraICState());
1961 return state.typeof_mode();
1962 }
1963
1959 ExtraICState GetExtraICState() const final { 1964 ExtraICState GetExtraICState() const final {
1960 return static_cast<ExtraICState>(minor_key_); 1965 return static_cast<ExtraICState>(minor_key_);
1961 } 1966 }
1962 1967
1963 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadGlobal); 1968 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadGlobal);
1964 DEFINE_TURBOFAN_CODE_STUB(LoadGlobalICTrampoline, TurboFanCodeStub); 1969 DEFINE_TURBOFAN_CODE_STUB(LoadGlobalICTrampoline, TurboFanCodeStub);
1965 }; 1970 };
1966 1971
1967 class KeyedLoadICTrampolineTFStub : public LoadICTrampolineStub { 1972 class KeyedLoadICTrampolineTFStub : public LoadICTrampolineStub {
1968 public: 1973 public:
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
2015 DEFINE_PLATFORM_CODE_STUB(KeyedStoreICTrampoline, PlatformCodeStub); 2020 DEFINE_PLATFORM_CODE_STUB(KeyedStoreICTrampoline, PlatformCodeStub);
2016 }; 2021 };
2017 2022
2018 class KeyedStoreICTrampolineTFStub : public StoreICTrampolineStub { 2023 class KeyedStoreICTrampolineTFStub : public StoreICTrampolineStub {
2019 public: 2024 public:
2020 KeyedStoreICTrampolineTFStub(Isolate* isolate, const StoreICState& state) 2025 KeyedStoreICTrampolineTFStub(Isolate* isolate, const StoreICState& state)
2021 : StoreICTrampolineStub(isolate, state) {} 2026 : StoreICTrampolineStub(isolate, state) {}
2022 2027
2023 Code::Kind GetCodeKind() const override { return Code::KEYED_STORE_IC; } 2028 Code::Kind GetCodeKind() const override { return Code::KEYED_STORE_IC; }
2024 2029
2030 LanguageMode language_mode() const {
2031 return StoreICState(GetExtraICState()).language_mode();
2032 }
2033
2025 DEFINE_TURBOFAN_CODE_STUB(KeyedStoreICTrampolineTF, StoreICTrampolineStub); 2034 DEFINE_TURBOFAN_CODE_STUB(KeyedStoreICTrampolineTF, StoreICTrampolineStub);
2026 }; 2035 };
2027 2036
2028 class CallICTrampolineStub : public PlatformCodeStub { 2037 class CallICTrampolineStub : public PlatformCodeStub {
2029 public: 2038 public:
2030 CallICTrampolineStub(Isolate* isolate, const CallICState& state) 2039 CallICTrampolineStub(Isolate* isolate, const CallICState& state)
2031 : PlatformCodeStub(isolate) { 2040 : PlatformCodeStub(isolate) {
2032 minor_key_ = state.GetExtraICState(); 2041 minor_key_ = state.GetExtraICState();
2033 } 2042 }
2034 2043
(...skipping 17 matching lines...) Expand all
2052 explicit LoadICStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} 2061 explicit LoadICStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
2053 2062
2054 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; } 2063 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; }
2055 2064
2056 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); 2065 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector);
2057 DEFINE_TURBOFAN_CODE_STUB(LoadIC, TurboFanCodeStub); 2066 DEFINE_TURBOFAN_CODE_STUB(LoadIC, TurboFanCodeStub);
2058 }; 2067 };
2059 2068
2060 class LoadICProtoArrayStub : public TurboFanCodeStub { 2069 class LoadICProtoArrayStub : public TurboFanCodeStub {
2061 public: 2070 public:
2062 explicit LoadICProtoArrayStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} 2071 explicit LoadICProtoArrayStub(Isolate* isolate,
2072 bool throw_reference_error_if_nonexistent)
2073 : TurboFanCodeStub(isolate) {
2074 minor_key_ = ThrowReferenceErrorIfNonexistentBits::encode(
2075 throw_reference_error_if_nonexistent);
2076 }
2077
2078 bool throw_reference_error_if_nonexistent() const {
2079 return ThrowReferenceErrorIfNonexistentBits::decode(minor_key_);
2080 }
2081
2082 ExtraICState GetExtraICState() const final {
2083 return static_cast<ExtraICState>(minor_key_);
2084 }
2085
2086 private:
2087 class ThrowReferenceErrorIfNonexistentBits : public BitField<bool, 0, 1> {};
2063 2088
2064 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadICProtoArray); 2089 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadICProtoArray);
2065 DEFINE_TURBOFAN_CODE_STUB(LoadICProtoArray, TurboFanCodeStub); 2090 DEFINE_TURBOFAN_CODE_STUB(LoadICProtoArray, TurboFanCodeStub);
2066 }; 2091 };
2067 2092
2068 class LoadGlobalICStub : public TurboFanCodeStub { 2093 class LoadGlobalICStub : public TurboFanCodeStub {
2069 public: 2094 public:
2070 explicit LoadGlobalICStub(Isolate* isolate, const LoadGlobalICState& state) 2095 explicit LoadGlobalICStub(Isolate* isolate, const LoadGlobalICState& state)
2071 : TurboFanCodeStub(isolate) { 2096 : TurboFanCodeStub(isolate) {
2072 minor_key_ = state.GetExtraICState(); 2097 minor_key_ = state.GetExtraICState();
2073 } 2098 }
2074 2099
2075 Code::Kind GetCodeKind() const override { return Code::LOAD_GLOBAL_IC; } 2100 Code::Kind GetCodeKind() const override { return Code::LOAD_GLOBAL_IC; }
2076 2101
2102 TypeofMode typeof_mode() const {
2103 LoadGlobalICState state(GetExtraICState());
2104 return state.typeof_mode();
2105 }
2106
2077 ExtraICState GetExtraICState() const final { 2107 ExtraICState GetExtraICState() const final {
2078 return static_cast<ExtraICState>(minor_key_); 2108 return static_cast<ExtraICState>(minor_key_);
2079 } 2109 }
2080 2110
2081 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadGlobalWithVector); 2111 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadGlobalWithVector);
2082 DEFINE_TURBOFAN_CODE_STUB(LoadGlobalIC, TurboFanCodeStub); 2112 DEFINE_TURBOFAN_CODE_STUB(LoadGlobalIC, TurboFanCodeStub);
2083 }; 2113 };
2084 2114
2085 class KeyedLoadICTFStub : public LoadICStub { 2115 class KeyedLoadICTFStub : public LoadICStub {
2086 public: 2116 public:
2087 explicit KeyedLoadICTFStub(Isolate* isolate) : LoadICStub(isolate) {} 2117 explicit KeyedLoadICTFStub(Isolate* isolate) : LoadICStub(isolate) {}
2088 2118
2089 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } 2119 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; }
2090 2120
2091 DEFINE_TURBOFAN_CODE_STUB(KeyedLoadICTF, LoadICStub); 2121 DEFINE_TURBOFAN_CODE_STUB(KeyedLoadICTF, LoadICStub);
2092 }; 2122 };
2093 2123
2094 class StoreICStub : public TurboFanCodeStub { 2124 class StoreICStub : public TurboFanCodeStub {
2095 public: 2125 public:
2096 StoreICStub(Isolate* isolate, const StoreICState& state) 2126 StoreICStub(Isolate* isolate, const StoreICState& state)
2097 : TurboFanCodeStub(isolate) { 2127 : TurboFanCodeStub(isolate) {
2098 minor_key_ = state.GetExtraICState(); 2128 minor_key_ = state.GetExtraICState();
2099 } 2129 }
2100 2130
2101 Code::Kind GetCodeKind() const override { return Code::STORE_IC; } 2131 Code::Kind GetCodeKind() const override { return Code::STORE_IC; }
2132
2133 LanguageMode language_mode() const {
2134 return StoreICState(GetExtraICState()).language_mode();
2135 }
2136
2102 ExtraICState GetExtraICState() const final { 2137 ExtraICState GetExtraICState() const final {
2103 return static_cast<ExtraICState>(minor_key_); 2138 return static_cast<ExtraICState>(minor_key_);
2104 } 2139 }
2105 2140
2106 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreWithVector); 2141 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreWithVector);
2107 DEFINE_TURBOFAN_CODE_STUB(StoreIC, TurboFanCodeStub); 2142 DEFINE_TURBOFAN_CODE_STUB(StoreIC, TurboFanCodeStub);
2108 }; 2143 };
2109 2144
2110 class KeyedStoreICStub : public PlatformCodeStub { 2145 class KeyedStoreICStub : public PlatformCodeStub {
2111 public: 2146 public:
(...skipping 17 matching lines...) Expand all
2129 void GenerateImpl(MacroAssembler* masm, bool in_frame); 2164 void GenerateImpl(MacroAssembler* masm, bool in_frame);
2130 }; 2165 };
2131 2166
2132 class KeyedStoreICTFStub : public StoreICStub { 2167 class KeyedStoreICTFStub : public StoreICStub {
2133 public: 2168 public:
2134 KeyedStoreICTFStub(Isolate* isolate, const StoreICState& state) 2169 KeyedStoreICTFStub(Isolate* isolate, const StoreICState& state)
2135 : StoreICStub(isolate, state) {} 2170 : StoreICStub(isolate, state) {}
2136 2171
2137 Code::Kind GetCodeKind() const override { return Code::KEYED_STORE_IC; } 2172 Code::Kind GetCodeKind() const override { return Code::KEYED_STORE_IC; }
2138 2173
2174 LanguageMode language_mode() const {
2175 return StoreICState(GetExtraICState()).language_mode();
2176 }
2177
2139 DEFINE_TURBOFAN_CODE_STUB(KeyedStoreICTF, StoreICStub); 2178 DEFINE_TURBOFAN_CODE_STUB(KeyedStoreICTF, StoreICStub);
2140 }; 2179 };
2141 2180
2142 class DoubleToIStub : public PlatformCodeStub { 2181 class DoubleToIStub : public PlatformCodeStub {
2143 public: 2182 public:
2144 DoubleToIStub(Isolate* isolate, Register source, Register destination, 2183 DoubleToIStub(Isolate* isolate, Register source, Register destination,
2145 int offset, bool is_truncating, bool skip_fastpath = false) 2184 int offset, bool is_truncating, bool skip_fastpath = false)
2146 : PlatformCodeStub(isolate) { 2185 : PlatformCodeStub(isolate) {
2147 minor_key_ = SourceRegisterBits::encode(source.code()) | 2186 minor_key_ = SourceRegisterBits::encode(source.code()) |
2148 DestinationRegisterBits::encode(destination.code()) | 2187 DestinationRegisterBits::encode(destination.code()) |
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after
2664 #undef DEFINE_PLATFORM_CODE_STUB 2703 #undef DEFINE_PLATFORM_CODE_STUB
2665 #undef DEFINE_HANDLER_CODE_STUB 2704 #undef DEFINE_HANDLER_CODE_STUB
2666 #undef DEFINE_HYDROGEN_CODE_STUB 2705 #undef DEFINE_HYDROGEN_CODE_STUB
2667 #undef DEFINE_CODE_STUB 2706 #undef DEFINE_CODE_STUB
2668 #undef DEFINE_CODE_STUB_BASE 2707 #undef DEFINE_CODE_STUB_BASE
2669 2708
2670 } // namespace internal 2709 } // namespace internal
2671 } // namespace v8 2710 } // namespace v8
2672 2711
2673 #endif // V8_CODE_STUBS_H_ 2712 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « no previous file | src/code-stubs.cc » ('j') | src/ic/accessor-assembler.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698