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 2087 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2098 private: | 2098 private: |
2099 StringCharCodeAtGenerator char_code_at_generator_; | 2099 StringCharCodeAtGenerator char_code_at_generator_; |
2100 StringCharFromCodeGenerator char_from_code_generator_; | 2100 StringCharFromCodeGenerator char_from_code_generator_; |
2101 | 2101 |
2102 DISALLOW_COPY_AND_ASSIGN(StringCharAtGenerator); | 2102 DISALLOW_COPY_AND_ASSIGN(StringCharAtGenerator); |
2103 }; | 2103 }; |
2104 | 2104 |
2105 | 2105 |
2106 class LoadDictionaryElementStub : public HydrogenCodeStub { | 2106 class LoadDictionaryElementStub : public HydrogenCodeStub { |
2107 public: | 2107 public: |
2108 explicit LoadDictionaryElementStub(Isolate* isolate) | 2108 explicit LoadDictionaryElementStub(Isolate* isolate, const LoadICState& state) |
2109 : HydrogenCodeStub(isolate) {} | 2109 : HydrogenCodeStub(isolate) { |
| 2110 minor_key_ = state.GetExtraICState(); |
| 2111 } |
2110 | 2112 |
2111 CallInterfaceDescriptor GetCallInterfaceDescriptor() override { | 2113 CallInterfaceDescriptor GetCallInterfaceDescriptor() override { |
2112 return LoadWithVectorDescriptor(isolate()); | 2114 return LoadWithVectorDescriptor(isolate()); |
2113 } | 2115 } |
2114 | 2116 |
| 2117 LanguageMode language_mode() const { |
| 2118 return LoadICState::GetLanguageMode(MinorKey()); |
| 2119 } |
| 2120 |
2115 DEFINE_HYDROGEN_CODE_STUB(LoadDictionaryElement, HydrogenCodeStub); | 2121 DEFINE_HYDROGEN_CODE_STUB(LoadDictionaryElement, HydrogenCodeStub); |
2116 }; | 2122 }; |
2117 | 2123 |
2118 | 2124 |
2119 class KeyedLoadGenericStub : public HydrogenCodeStub { | 2125 class KeyedLoadGenericStub : public HydrogenCodeStub { |
2120 public: | 2126 public: |
2121 explicit KeyedLoadGenericStub(Isolate* isolate) : HydrogenCodeStub(isolate) {} | 2127 explicit KeyedLoadGenericStub(Isolate* isolate, const LoadICState& state) |
| 2128 : HydrogenCodeStub(isolate) { |
| 2129 minor_key_ = state.GetExtraICState(); |
| 2130 } |
2122 | 2131 |
2123 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } | 2132 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } |
2124 InlineCacheState GetICState() const override { return GENERIC; } | 2133 InlineCacheState GetICState() const override { return GENERIC; } |
2125 | 2134 |
| 2135 LanguageMode language_mode() const { |
| 2136 return LoadICState::GetLanguageMode(MinorKey()); |
| 2137 } |
| 2138 |
2126 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); | 2139 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); |
2127 | 2140 |
2128 DEFINE_HYDROGEN_CODE_STUB(KeyedLoadGeneric, HydrogenCodeStub); | 2141 DEFINE_HYDROGEN_CODE_STUB(KeyedLoadGeneric, HydrogenCodeStub); |
2129 }; | 2142 }; |
2130 | 2143 |
2131 | 2144 |
2132 class LoadICTrampolineStub : public PlatformCodeStub { | 2145 class LoadICTrampolineStub : public PlatformCodeStub { |
2133 public: | 2146 public: |
2134 LoadICTrampolineStub(Isolate* isolate, const LoadICState& state) | 2147 LoadICTrampolineStub(Isolate* isolate, const LoadICState& state) |
2135 : PlatformCodeStub(isolate) { | 2148 : PlatformCodeStub(isolate) { |
2136 minor_key_ = state.GetExtraICState(); | 2149 minor_key_ = state.GetExtraICState(); |
2137 } | 2150 } |
2138 | 2151 |
2139 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; } | 2152 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; } |
2140 | 2153 |
2141 InlineCacheState GetICState() const final { return DEFAULT; } | 2154 InlineCacheState GetICState() const final { return DEFAULT; } |
2142 | 2155 |
2143 ExtraICState GetExtraICState() const final { | 2156 ExtraICState GetExtraICState() const final { |
2144 return static_cast<ExtraICState>(minor_key_); | 2157 return static_cast<ExtraICState>(minor_key_); |
2145 } | 2158 } |
2146 | 2159 |
2147 private: | 2160 protected: |
2148 LoadICState state() const { | 2161 LoadICState state() const { |
2149 return LoadICState(static_cast<ExtraICState>(minor_key_)); | 2162 return LoadICState(static_cast<ExtraICState>(minor_key_)); |
2150 } | 2163 } |
2151 | 2164 |
2152 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); | 2165 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); |
2153 DEFINE_PLATFORM_CODE_STUB(LoadICTrampoline, PlatformCodeStub); | 2166 DEFINE_PLATFORM_CODE_STUB(LoadICTrampoline, PlatformCodeStub); |
2154 }; | 2167 }; |
2155 | 2168 |
2156 | 2169 |
2157 class KeyedLoadICTrampolineStub : public LoadICTrampolineStub { | 2170 class KeyedLoadICTrampolineStub : public LoadICTrampolineStub { |
2158 public: | 2171 public: |
2159 explicit KeyedLoadICTrampolineStub(Isolate* isolate) | 2172 explicit KeyedLoadICTrampolineStub(Isolate* isolate, const LoadICState& state) |
2160 : LoadICTrampolineStub(isolate, LoadICState(0)) {} | 2173 : LoadICTrampolineStub(isolate, state) {} |
2161 | 2174 |
2162 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } | 2175 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } |
2163 | 2176 |
2164 DEFINE_PLATFORM_CODE_STUB(KeyedLoadICTrampoline, LoadICTrampolineStub); | 2177 DEFINE_PLATFORM_CODE_STUB(KeyedLoadICTrampoline, LoadICTrampolineStub); |
2165 }; | 2178 }; |
2166 | 2179 |
2167 | 2180 |
2168 class VectorStoreICTrampolineStub : public PlatformCodeStub { | 2181 class VectorStoreICTrampolineStub : public PlatformCodeStub { |
2169 public: | 2182 public: |
2170 VectorStoreICTrampolineStub(Isolate* isolate, const StoreICState& state) | 2183 VectorStoreICTrampolineStub(Isolate* isolate, const StoreICState& state) |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2256 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); | 2269 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); |
2257 DEFINE_PLATFORM_CODE_STUB(LoadIC, PlatformCodeStub); | 2270 DEFINE_PLATFORM_CODE_STUB(LoadIC, PlatformCodeStub); |
2258 | 2271 |
2259 protected: | 2272 protected: |
2260 void GenerateImpl(MacroAssembler* masm, bool in_frame); | 2273 void GenerateImpl(MacroAssembler* masm, bool in_frame); |
2261 }; | 2274 }; |
2262 | 2275 |
2263 | 2276 |
2264 class KeyedLoadICStub : public PlatformCodeStub { | 2277 class KeyedLoadICStub : public PlatformCodeStub { |
2265 public: | 2278 public: |
2266 explicit KeyedLoadICStub(Isolate* isolate) : PlatformCodeStub(isolate) {} | 2279 explicit KeyedLoadICStub(Isolate* isolate, const LoadICState& state) |
| 2280 : PlatformCodeStub(isolate) { |
| 2281 minor_key_ = state.GetExtraICState(); |
| 2282 } |
2267 | 2283 |
2268 void GenerateForTrampoline(MacroAssembler* masm); | 2284 void GenerateForTrampoline(MacroAssembler* masm); |
2269 | 2285 |
2270 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } | 2286 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } |
2271 InlineCacheState GetICState() const final { return DEFAULT; } | 2287 InlineCacheState GetICState() const final { return DEFAULT; } |
| 2288 ExtraICState GetExtraICState() const final { |
| 2289 return static_cast<ExtraICState>(minor_key_); |
| 2290 } |
2272 | 2291 |
2273 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); | 2292 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); |
2274 DEFINE_PLATFORM_CODE_STUB(KeyedLoadIC, PlatformCodeStub); | 2293 DEFINE_PLATFORM_CODE_STUB(KeyedLoadIC, PlatformCodeStub); |
2275 | 2294 |
2276 protected: | 2295 protected: |
2277 void GenerateImpl(MacroAssembler* masm, bool in_frame); | 2296 void GenerateImpl(MacroAssembler* masm, bool in_frame); |
2278 }; | 2297 }; |
2279 | 2298 |
2280 | 2299 |
2281 class VectorStoreICStub : public PlatformCodeStub { | 2300 class VectorStoreICStub : public PlatformCodeStub { |
(...skipping 23 matching lines...) Expand all Loading... |
2305 public: | 2324 public: |
2306 VectorKeyedStoreICStub(Isolate* isolate, const StoreICState& state) | 2325 VectorKeyedStoreICStub(Isolate* isolate, const StoreICState& state) |
2307 : PlatformCodeStub(isolate) { | 2326 : PlatformCodeStub(isolate) { |
2308 minor_key_ = state.GetExtraICState(); | 2327 minor_key_ = state.GetExtraICState(); |
2309 } | 2328 } |
2310 | 2329 |
2311 void GenerateForTrampoline(MacroAssembler* masm); | 2330 void GenerateForTrampoline(MacroAssembler* masm); |
2312 | 2331 |
2313 Code::Kind GetCodeKind() const final { return Code::KEYED_STORE_IC; } | 2332 Code::Kind GetCodeKind() const final { return Code::KEYED_STORE_IC; } |
2314 InlineCacheState GetICState() const final { return DEFAULT; } | 2333 InlineCacheState GetICState() const final { return DEFAULT; } |
| 2334 virtual ExtraICState GetExtraICState() const final { |
| 2335 return static_cast<ExtraICState>(minor_key_); |
| 2336 } |
2315 | 2337 |
2316 DEFINE_CALL_INTERFACE_DESCRIPTOR(VectorStoreIC); | 2338 DEFINE_CALL_INTERFACE_DESCRIPTOR(VectorStoreIC); |
2317 DEFINE_PLATFORM_CODE_STUB(VectorKeyedStoreIC, PlatformCodeStub); | 2339 DEFINE_PLATFORM_CODE_STUB(VectorKeyedStoreIC, PlatformCodeStub); |
2318 | 2340 |
2319 protected: | 2341 protected: |
2320 void GenerateImpl(MacroAssembler* masm, bool in_frame); | 2342 void GenerateImpl(MacroAssembler* masm, bool in_frame); |
2321 }; | 2343 }; |
2322 | 2344 |
2323 | 2345 |
2324 class DoubleToIStub : public PlatformCodeStub { | 2346 class DoubleToIStub : public PlatformCodeStub { |
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2961 #undef DEFINE_PLATFORM_CODE_STUB | 2983 #undef DEFINE_PLATFORM_CODE_STUB |
2962 #undef DEFINE_HANDLER_CODE_STUB | 2984 #undef DEFINE_HANDLER_CODE_STUB |
2963 #undef DEFINE_HYDROGEN_CODE_STUB | 2985 #undef DEFINE_HYDROGEN_CODE_STUB |
2964 #undef DEFINE_CODE_STUB | 2986 #undef DEFINE_CODE_STUB |
2965 #undef DEFINE_CODE_STUB_BASE | 2987 #undef DEFINE_CODE_STUB_BASE |
2966 | 2988 |
2967 extern Representation RepresentationFromType(Type* type); | 2989 extern Representation RepresentationFromType(Type* type); |
2968 } } // namespace v8::internal | 2990 } } // namespace v8::internal |
2969 | 2991 |
2970 #endif // V8_CODE_STUBS_H_ | 2992 #endif // V8_CODE_STUBS_H_ |
OLD | NEW |