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

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

Issue 2052763003: [ic] [stubs] Remove InlineCacheState field from the code flags. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebasing Created 4 years, 6 months 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 | « src/builtins.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »
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 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 282
283 static MaybeHandle<Code> GetCode(Isolate* isolate, uint32_t key); 283 static MaybeHandle<Code> GetCode(Isolate* isolate, uint32_t key);
284 284
285 // Returns information for computing the number key. 285 // Returns information for computing the number key.
286 virtual Major MajorKey() const = 0; 286 virtual Major MajorKey() const = 0;
287 uint32_t MinorKey() const { return minor_key_; } 287 uint32_t MinorKey() const { return minor_key_; }
288 288
289 // BinaryOpStub needs to override this. 289 // BinaryOpStub needs to override this.
290 virtual Code::Kind GetCodeKind() const; 290 virtual Code::Kind GetCodeKind() const;
291 291
292 virtual InlineCacheState GetICState() const { return UNINITIALIZED; }
293 virtual ExtraICState GetExtraICState() const { return kNoExtraICState; } 292 virtual ExtraICState GetExtraICState() const { return kNoExtraICState; }
294 293
295 Code::Flags GetCodeFlags() const; 294 Code::Flags GetCodeFlags() const;
296 295
297 friend std::ostream& operator<<(std::ostream& os, const CodeStub& s) { 296 friend std::ostream& operator<<(std::ostream& os, const CodeStub& s) {
298 s.PrintName(os); 297 s.PrintName(os);
299 return os; 298 return os;
300 } 299 }
301 300
302 Isolate* isolate() const { return isolate_; } 301 Isolate* isolate() const { return isolate_; }
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 683
685 void AfterCall(MacroAssembler* masm) const override {} 684 void AfterCall(MacroAssembler* masm) const override {}
686 }; 685 };
687 686
688 687
689 class StringLengthStub : public TurboFanCodeStub { 688 class StringLengthStub : public TurboFanCodeStub {
690 public: 689 public:
691 explicit StringLengthStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} 690 explicit StringLengthStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
692 691
693 Code::Kind GetCodeKind() const override { return Code::HANDLER; } 692 Code::Kind GetCodeKind() const override { return Code::HANDLER; }
694 InlineCacheState GetICState() const override { return MONOMORPHIC; }
695 ExtraICState GetExtraICState() const override { return Code::LOAD_IC; } 693 ExtraICState GetExtraICState() const override { return Code::LOAD_IC; }
696 694
697 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); 695 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector);
698 DEFINE_TURBOFAN_CODE_STUB(StringLength, TurboFanCodeStub); 696 DEFINE_TURBOFAN_CODE_STUB(StringLength, TurboFanCodeStub);
699 }; 697 };
700 698
701 class AddStub final : public TurboFanCodeStub { 699 class AddStub final : public TurboFanCodeStub {
702 public: 700 public:
703 explicit AddStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} 701 explicit AddStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
704 702
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
953 }; 951 };
954 952
955 class StoreInterceptorStub : public TurboFanCodeStub { 953 class StoreInterceptorStub : public TurboFanCodeStub {
956 public: 954 public:
957 explicit StoreInterceptorStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} 955 explicit StoreInterceptorStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
958 956
959 void GenerateAssembly(CodeStubAssembler* assember) const override; 957 void GenerateAssembly(CodeStubAssembler* assember) const override;
960 958
961 Code::Kind GetCodeKind() const override { return Code::HANDLER; } 959 Code::Kind GetCodeKind() const override { return Code::HANDLER; }
962 ExtraICState GetExtraICState() const override { return Code::STORE_IC; } 960 ExtraICState GetExtraICState() const override { return Code::STORE_IC; }
963 InlineCacheState GetICState() const override { return MONOMORPHIC; }
964 961
965 DEFINE_CALL_INTERFACE_DESCRIPTOR(Store); 962 DEFINE_CALL_INTERFACE_DESCRIPTOR(Store);
966 DEFINE_CODE_STUB(StoreInterceptor, TurboFanCodeStub); 963 DEFINE_CODE_STUB(StoreInterceptor, TurboFanCodeStub);
967 }; 964 };
968 965
969 class LoadIndexedInterceptorStub : public TurboFanCodeStub { 966 class LoadIndexedInterceptorStub : public TurboFanCodeStub {
970 public: 967 public:
971 explicit LoadIndexedInterceptorStub(Isolate* isolate) 968 explicit LoadIndexedInterceptorStub(Isolate* isolate)
972 : TurboFanCodeStub(isolate) {} 969 : TurboFanCodeStub(isolate) {}
973 970
974 Code::Kind GetCodeKind() const override { return Code::HANDLER; } 971 Code::Kind GetCodeKind() const override { return Code::HANDLER; }
975 ExtraICState GetExtraICState() const override { return Code::KEYED_LOAD_IC; } 972 ExtraICState GetExtraICState() const override { return Code::KEYED_LOAD_IC; }
976 InlineCacheState GetICState() const override { return MONOMORPHIC; }
977 973
978 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); 974 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector);
979 DEFINE_TURBOFAN_CODE_STUB(LoadIndexedInterceptor, TurboFanCodeStub); 975 DEFINE_TURBOFAN_CODE_STUB(LoadIndexedInterceptor, TurboFanCodeStub);
980 }; 976 };
981 977
982 // ES6 section 12.10.3 "in" operator evaluation. 978 // ES6 section 12.10.3 "in" operator evaluation.
983 class HasPropertyStub : public TurboFanCodeStub { 979 class HasPropertyStub : public TurboFanCodeStub {
984 public: 980 public:
985 explicit HasPropertyStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} 981 explicit HasPropertyStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
986 982
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
1354 1350
1355 class CallICStub: public PlatformCodeStub { 1351 class CallICStub: public PlatformCodeStub {
1356 public: 1352 public:
1357 CallICStub(Isolate* isolate, const CallICState& state) 1353 CallICStub(Isolate* isolate, const CallICState& state)
1358 : PlatformCodeStub(isolate) { 1354 : PlatformCodeStub(isolate) {
1359 minor_key_ = state.GetExtraICState(); 1355 minor_key_ = state.GetExtraICState();
1360 } 1356 }
1361 1357
1362 Code::Kind GetCodeKind() const override { return Code::CALL_IC; } 1358 Code::Kind GetCodeKind() const override { return Code::CALL_IC; }
1363 1359
1364 InlineCacheState GetICState() const override { return GENERIC; }
1365
1366 ExtraICState GetExtraICState() const final { 1360 ExtraICState GetExtraICState() const final {
1367 return static_cast<ExtraICState>(minor_key_); 1361 return static_cast<ExtraICState>(minor_key_);
1368 } 1362 }
1369 1363
1370 protected: 1364 protected:
1371 int arg_count() const { return state().argc(); } 1365 int arg_count() const { return state().argc(); }
1372 ConvertReceiverMode convert_mode() const { return state().convert_mode(); } 1366 ConvertReceiverMode convert_mode() const { return state().convert_mode(); }
1373 TailCallMode tail_call_mode() const { return state().tail_call_mode(); } 1367 TailCallMode tail_call_mode() const { return state().tail_call_mode(); }
1374 1368
1375 CallICState state() const { 1369 CallICState state() const { return CallICState(GetExtraICState()); }
1376 return CallICState(static_cast<ExtraICState>(minor_key_));
1377 }
1378 1370
1379 // Code generation helpers. 1371 // Code generation helpers.
1380 void GenerateMiss(MacroAssembler* masm); 1372 void GenerateMiss(MacroAssembler* masm);
1381 void HandleArrayCase(MacroAssembler* masm, Label* miss); 1373 void HandleArrayCase(MacroAssembler* masm, Label* miss);
1382 1374
1383 private: 1375 private:
1384 void PrintState(std::ostream& os) const override; // NOLINT 1376 void PrintState(std::ostream& os) const override; // NOLINT
1385 1377
1386 DEFINE_CALL_INTERFACE_DESCRIPTOR(CallFunctionWithFeedbackAndVector); 1378 DEFINE_CALL_INTERFACE_DESCRIPTOR(CallFunctionWithFeedbackAndVector);
1387 DEFINE_PLATFORM_CODE_STUB(CallIC, PlatformCodeStub); 1379 DEFINE_PLATFORM_CODE_STUB(CallIC, PlatformCodeStub);
(...skipping 28 matching lines...) Expand all
1416 1408
1417 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); 1409 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load);
1418 DEFINE_PLATFORM_CODE_STUB(LoadIndexedString, PlatformCodeStub); 1410 DEFINE_PLATFORM_CODE_STUB(LoadIndexedString, PlatformCodeStub);
1419 }; 1411 };
1420 1412
1421 1413
1422 class HandlerStub : public HydrogenCodeStub { 1414 class HandlerStub : public HydrogenCodeStub {
1423 public: 1415 public:
1424 Code::Kind GetCodeKind() const override { return Code::HANDLER; } 1416 Code::Kind GetCodeKind() const override { return Code::HANDLER; }
1425 ExtraICState GetExtraICState() const override { return kind(); } 1417 ExtraICState GetExtraICState() const override { return kind(); }
1426 InlineCacheState GetICState() const override { return MONOMORPHIC; }
1427 1418
1428 void InitializeDescriptor(CodeStubDescriptor* descriptor) override; 1419 void InitializeDescriptor(CodeStubDescriptor* descriptor) override;
1429 1420
1430 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override; 1421 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override;
1431 1422
1432 protected: 1423 protected:
1433 explicit HandlerStub(Isolate* isolate) : HydrogenCodeStub(isolate) {} 1424 explicit HandlerStub(Isolate* isolate) : HydrogenCodeStub(isolate) {}
1434 1425
1435 virtual Code::Kind kind() const = 0; 1426 virtual Code::Kind kind() const = 0;
1436 1427
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1517 : TurboFanCodeStub(isolate) { 1508 : TurboFanCodeStub(isolate) {
1518 // If that's not true, we need to ensure that the receiver is actually a 1509 // If that's not true, we need to ensure that the receiver is actually a
1519 // JSReceiver. http://crbug.com/609134 1510 // JSReceiver. http://crbug.com/609134
1520 DCHECK(receiver_is_holder); 1511 DCHECK(receiver_is_holder);
1521 minor_key_ = IndexBits::encode(index) | 1512 minor_key_ = IndexBits::encode(index) |
1522 ReceiverIsHolderBits::encode(receiver_is_holder); 1513 ReceiverIsHolderBits::encode(receiver_is_holder);
1523 } 1514 }
1524 1515
1525 Code::Kind GetCodeKind() const override { return Code::HANDLER; } 1516 Code::Kind GetCodeKind() const override { return Code::HANDLER; }
1526 ExtraICState GetExtraICState() const override { return Code::LOAD_IC; } 1517 ExtraICState GetExtraICState() const override { return Code::LOAD_IC; }
1527 InlineCacheState GetICState() const override { return MONOMORPHIC; }
1528 1518
1529 int index() const { return IndexBits::decode(minor_key_); } 1519 int index() const { return IndexBits::decode(minor_key_); }
1530 bool receiver_is_holder() const { 1520 bool receiver_is_holder() const {
1531 return ReceiverIsHolderBits::decode(minor_key_); 1521 return ReceiverIsHolderBits::decode(minor_key_);
1532 } 1522 }
1533 1523
1534 private: 1524 private:
1535 class ReceiverIsHolderBits : public BitField<bool, 0, 1> {}; 1525 class ReceiverIsHolderBits : public BitField<bool, 0, 1> {};
1536 class IndexBits : public BitField<int, 1, kDescriptorIndexBitCount> {}; 1526 class IndexBits : public BitField<int, 1, kDescriptorIndexBitCount> {};
1537 1527
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
1857 1847
1858 BinaryOpICStub(Isolate* isolate, const BinaryOpICState& state) 1848 BinaryOpICStub(Isolate* isolate, const BinaryOpICState& state)
1859 : HydrogenCodeStub(isolate) { 1849 : HydrogenCodeStub(isolate) {
1860 set_sub_minor_key(state.GetExtraICState()); 1850 set_sub_minor_key(state.GetExtraICState());
1861 } 1851 }
1862 1852
1863 static void GenerateAheadOfTime(Isolate* isolate); 1853 static void GenerateAheadOfTime(Isolate* isolate);
1864 1854
1865 Code::Kind GetCodeKind() const override { return Code::BINARY_OP_IC; } 1855 Code::Kind GetCodeKind() const override { return Code::BINARY_OP_IC; }
1866 1856
1867 InlineCacheState GetICState() const final { return state().GetICState(); }
1868
1869 ExtraICState GetExtraICState() const final { 1857 ExtraICState GetExtraICState() const final {
1870 return static_cast<ExtraICState>(sub_minor_key()); 1858 return static_cast<ExtraICState>(sub_minor_key());
1871 } 1859 }
1872 1860
1873 BinaryOpICState state() const { 1861 BinaryOpICState state() const {
1874 return BinaryOpICState(isolate(), GetExtraICState()); 1862 return BinaryOpICState(isolate(), GetExtraICState());
1875 } 1863 }
1876 1864
1877 void PrintState(std::ostream& os) const final; // NOLINT 1865 void PrintState(std::ostream& os) const final; // NOLINT
1878 1866
(...skipping 23 matching lines...) Expand all
1902 static void GenerateAheadOfTime(Isolate* isolate); 1890 static void GenerateAheadOfTime(Isolate* isolate);
1903 1891
1904 Handle<Code> GetCodeCopyFromTemplate(Handle<AllocationSite> allocation_site) { 1892 Handle<Code> GetCodeCopyFromTemplate(Handle<AllocationSite> allocation_site) {
1905 Code::FindAndReplacePattern pattern; 1893 Code::FindAndReplacePattern pattern;
1906 pattern.Add(isolate()->factory()->undefined_map(), allocation_site); 1894 pattern.Add(isolate()->factory()->undefined_map(), allocation_site);
1907 return CodeStub::GetCodeCopy(pattern); 1895 return CodeStub::GetCodeCopy(pattern);
1908 } 1896 }
1909 1897
1910 Code::Kind GetCodeKind() const override { return Code::BINARY_OP_IC; } 1898 Code::Kind GetCodeKind() const override { return Code::BINARY_OP_IC; }
1911 1899
1912 InlineCacheState GetICState() const override { return state().GetICState(); }
1913
1914 ExtraICState GetExtraICState() const override { 1900 ExtraICState GetExtraICState() const override {
1915 return static_cast<ExtraICState>(minor_key_); 1901 return static_cast<ExtraICState>(minor_key_);
1916 } 1902 }
1917 1903
1918 void PrintState(std::ostream& os) const override; // NOLINT 1904 void PrintState(std::ostream& os) const override; // NOLINT
1919 1905
1920 private: 1906 private:
1921 BinaryOpICState state() const { 1907 BinaryOpICState state() const {
1922 return BinaryOpICState(isolate(), static_cast<ExtraICState>(minor_key_)); 1908 return BinaryOpICState(isolate(), GetExtraICState());
1923 } 1909 }
1924 1910
1925 static void GenerateAheadOfTime(Isolate* isolate, 1911 static void GenerateAheadOfTime(Isolate* isolate,
1926 const BinaryOpICState& state); 1912 const BinaryOpICState& state);
1927 1913
1928 DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOpWithAllocationSite); 1914 DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOpWithAllocationSite);
1929 DEFINE_PLATFORM_CODE_STUB(BinaryOpICWithAllocationSite, PlatformCodeStub); 1915 DEFINE_PLATFORM_CODE_STUB(BinaryOpICWithAllocationSite, PlatformCodeStub);
1930 }; 1916 };
1931 1917
1932 1918
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1981 DEFINE_HYDROGEN_CODE_STUB(StringAdd, HydrogenCodeStub); 1967 DEFINE_HYDROGEN_CODE_STUB(StringAdd, HydrogenCodeStub);
1982 }; 1968 };
1983 1969
1984 1970
1985 class CompareICStub : public PlatformCodeStub { 1971 class CompareICStub : public PlatformCodeStub {
1986 public: 1972 public:
1987 CompareICStub(Isolate* isolate, Token::Value op, CompareICState::State left, 1973 CompareICStub(Isolate* isolate, Token::Value op, CompareICState::State left,
1988 CompareICState::State right, CompareICState::State state) 1974 CompareICState::State right, CompareICState::State state)
1989 : PlatformCodeStub(isolate) { 1975 : PlatformCodeStub(isolate) {
1990 DCHECK(Token::IsCompareOp(op)); 1976 DCHECK(Token::IsCompareOp(op));
1977 DCHECK(OpBits::is_valid(op - Token::EQ));
1991 minor_key_ = OpBits::encode(op - Token::EQ) | 1978 minor_key_ = OpBits::encode(op - Token::EQ) |
1992 LeftStateBits::encode(left) | RightStateBits::encode(right) | 1979 LeftStateBits::encode(left) | RightStateBits::encode(right) |
1993 StateBits::encode(state); 1980 StateBits::encode(state);
1994 } 1981 }
1982 CompareICStub(Isolate* isolate, ExtraICState extra_ic_state)
1983 : PlatformCodeStub(isolate) {
1984 minor_key_ = extra_ic_state;
1985 }
1995 1986
1996 void set_known_map(Handle<Map> map) { known_map_ = map; } 1987 void set_known_map(Handle<Map> map) { known_map_ = map; }
1997 1988
1998 InlineCacheState GetICState() const override; 1989 InlineCacheState GetICState() const;
1999 1990
2000 Token::Value op() const { 1991 Token::Value op() const {
2001 return static_cast<Token::Value>(Token::EQ + OpBits::decode(minor_key_)); 1992 return static_cast<Token::Value>(Token::EQ + OpBits::decode(minor_key_));
2002 } 1993 }
2003 1994
2004 CompareICState::State left() const { 1995 CompareICState::State left() const {
2005 return LeftStateBits::decode(minor_key_); 1996 return LeftStateBits::decode(minor_key_);
2006 } 1997 }
2007 CompareICState::State right() const { 1998 CompareICState::State right() const {
2008 return RightStateBits::decode(minor_key_); 1999 return RightStateBits::decode(minor_key_);
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
2328 2319
2329 2320
2330 class KeyedLoadGenericStub : public HydrogenCodeStub { 2321 class KeyedLoadGenericStub : public HydrogenCodeStub {
2331 public: 2322 public:
2332 explicit KeyedLoadGenericStub(Isolate* isolate, const LoadICState& state) 2323 explicit KeyedLoadGenericStub(Isolate* isolate, const LoadICState& state)
2333 : HydrogenCodeStub(isolate) { 2324 : HydrogenCodeStub(isolate) {
2334 minor_key_ = state.GetExtraICState(); 2325 minor_key_ = state.GetExtraICState();
2335 } 2326 }
2336 2327
2337 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } 2328 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; }
2338 InlineCacheState GetICState() const override { return GENERIC; }
2339 2329
2340 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); 2330 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load);
2341 2331
2342 DEFINE_HYDROGEN_CODE_STUB(KeyedLoadGeneric, HydrogenCodeStub); 2332 DEFINE_HYDROGEN_CODE_STUB(KeyedLoadGeneric, HydrogenCodeStub);
2343 }; 2333 };
2344 2334
2345 2335
2346 class LoadICTrampolineStub : public PlatformCodeStub { 2336 class LoadICTrampolineStub : public PlatformCodeStub {
2347 public: 2337 public:
2348 LoadICTrampolineStub(Isolate* isolate, const LoadICState& state) 2338 LoadICTrampolineStub(Isolate* isolate, const LoadICState& state)
2349 : PlatformCodeStub(isolate) { 2339 : PlatformCodeStub(isolate) {
2350 minor_key_ = state.GetExtraICState(); 2340 minor_key_ = state.GetExtraICState();
2351 } 2341 }
2352 2342
2353 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; } 2343 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; }
2354 2344
2355 InlineCacheState GetICState() const final { return GENERIC; }
2356
2357 ExtraICState GetExtraICState() const final { 2345 ExtraICState GetExtraICState() const final {
2358 return static_cast<ExtraICState>(minor_key_); 2346 return static_cast<ExtraICState>(minor_key_);
2359 } 2347 }
2360 2348
2361 protected: 2349 protected:
2362 LoadICState state() const { 2350 LoadICState state() const {
2363 return LoadICState(static_cast<ExtraICState>(minor_key_)); 2351 return LoadICState(static_cast<ExtraICState>(minor_key_));
2364 } 2352 }
2365 2353
2366 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); 2354 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load);
2367 DEFINE_PLATFORM_CODE_STUB(LoadICTrampoline, PlatformCodeStub); 2355 DEFINE_PLATFORM_CODE_STUB(LoadICTrampoline, PlatformCodeStub);
2368 }; 2356 };
2369 2357
2370 class LoadICTrampolineTFStub : public TurboFanCodeStub { 2358 class LoadICTrampolineTFStub : public TurboFanCodeStub {
2371 public: 2359 public:
2372 LoadICTrampolineTFStub(Isolate* isolate, const LoadICState& state) 2360 LoadICTrampolineTFStub(Isolate* isolate, const LoadICState& state)
2373 : TurboFanCodeStub(isolate) { 2361 : TurboFanCodeStub(isolate) {
2374 minor_key_ = state.GetExtraICState(); 2362 minor_key_ = state.GetExtraICState();
2375 } 2363 }
2376 2364
2377 void GenerateAssembly(CodeStubAssembler* assembler) const override; 2365 void GenerateAssembly(CodeStubAssembler* assembler) const override;
2378 2366
2379 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; } 2367 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; }
2380 2368
2381 InlineCacheState GetICState() const final { return GENERIC; }
2382
2383 ExtraICState GetExtraICState() const final { 2369 ExtraICState GetExtraICState() const final {
2384 return static_cast<ExtraICState>(minor_key_); 2370 return static_cast<ExtraICState>(minor_key_);
2385 } 2371 }
2386 2372
2387 protected: 2373 protected:
2388 LoadICState state() const { 2374 LoadICState state() const {
2389 return LoadICState(static_cast<ExtraICState>(minor_key_)); 2375 return LoadICState(static_cast<ExtraICState>(minor_key_));
2390 } 2376 }
2391 2377
2392 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); 2378 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load);
(...skipping 13 matching lines...) Expand all
2406 2392
2407 class VectorStoreICTrampolineStub : public PlatformCodeStub { 2393 class VectorStoreICTrampolineStub : public PlatformCodeStub {
2408 public: 2394 public:
2409 VectorStoreICTrampolineStub(Isolate* isolate, const StoreICState& state) 2395 VectorStoreICTrampolineStub(Isolate* isolate, const StoreICState& state)
2410 : PlatformCodeStub(isolate) { 2396 : PlatformCodeStub(isolate) {
2411 minor_key_ = state.GetExtraICState(); 2397 minor_key_ = state.GetExtraICState();
2412 } 2398 }
2413 2399
2414 Code::Kind GetCodeKind() const override { return Code::STORE_IC; } 2400 Code::Kind GetCodeKind() const override { return Code::STORE_IC; }
2415 2401
2416 InlineCacheState GetICState() const final { return GENERIC; }
2417
2418 ExtraICState GetExtraICState() const final { 2402 ExtraICState GetExtraICState() const final {
2419 return static_cast<ExtraICState>(minor_key_); 2403 return static_cast<ExtraICState>(minor_key_);
2420 } 2404 }
2421 2405
2422 protected: 2406 protected:
2423 StoreICState state() const { 2407 StoreICState state() const {
2424 return StoreICState(static_cast<ExtraICState>(minor_key_)); 2408 return StoreICState(static_cast<ExtraICState>(minor_key_));
2425 } 2409 }
2426 2410
2427 private: 2411 private:
(...skipping 16 matching lines...) Expand all
2444 2428
2445 class CallICTrampolineStub : public PlatformCodeStub { 2429 class CallICTrampolineStub : public PlatformCodeStub {
2446 public: 2430 public:
2447 CallICTrampolineStub(Isolate* isolate, const CallICState& state) 2431 CallICTrampolineStub(Isolate* isolate, const CallICState& state)
2448 : PlatformCodeStub(isolate) { 2432 : PlatformCodeStub(isolate) {
2449 minor_key_ = state.GetExtraICState(); 2433 minor_key_ = state.GetExtraICState();
2450 } 2434 }
2451 2435
2452 Code::Kind GetCodeKind() const override { return Code::CALL_IC; } 2436 Code::Kind GetCodeKind() const override { return Code::CALL_IC; }
2453 2437
2454 InlineCacheState GetICState() const final { return GENERIC; }
2455
2456 ExtraICState GetExtraICState() const final { 2438 ExtraICState GetExtraICState() const final {
2457 return static_cast<ExtraICState>(minor_key_); 2439 return static_cast<ExtraICState>(minor_key_);
2458 } 2440 }
2459 2441
2460 protected: 2442 protected:
2461 CallICState state() const { 2443 CallICState state() const {
2462 return CallICState(static_cast<ExtraICState>(minor_key_)); 2444 return CallICState(static_cast<ExtraICState>(minor_key_));
2463 } 2445 }
2464 2446
2465 DEFINE_CALL_INTERFACE_DESCRIPTOR(CallFunctionWithFeedback); 2447 DEFINE_CALL_INTERFACE_DESCRIPTOR(CallFunctionWithFeedback);
2466 DEFINE_PLATFORM_CODE_STUB(CallICTrampoline, PlatformCodeStub); 2448 DEFINE_PLATFORM_CODE_STUB(CallICTrampoline, PlatformCodeStub);
2467 }; 2449 };
2468 2450
2469 2451
2470 class LoadICStub : public PlatformCodeStub { 2452 class LoadICStub : public PlatformCodeStub {
2471 public: 2453 public:
2472 explicit LoadICStub(Isolate* isolate, const LoadICState& state) 2454 explicit LoadICStub(Isolate* isolate, const LoadICState& state)
2473 : PlatformCodeStub(isolate) { 2455 : PlatformCodeStub(isolate) {
2474 minor_key_ = state.GetExtraICState(); 2456 minor_key_ = state.GetExtraICState();
2475 } 2457 }
2476 2458
2477 void GenerateForTrampoline(MacroAssembler* masm); 2459 void GenerateForTrampoline(MacroAssembler* masm);
2478 2460
2479 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; } 2461 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; }
2480 InlineCacheState GetICState() const final { return GENERIC; } 2462
2481 ExtraICState GetExtraICState() const final { 2463 ExtraICState GetExtraICState() const final {
2482 return static_cast<ExtraICState>(minor_key_); 2464 return static_cast<ExtraICState>(minor_key_);
2483 } 2465 }
2484 2466
2485 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); 2467 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector);
2486 DEFINE_PLATFORM_CODE_STUB(LoadIC, PlatformCodeStub); 2468 DEFINE_PLATFORM_CODE_STUB(LoadIC, PlatformCodeStub);
2487 2469
2488 protected: 2470 protected:
2489 void GenerateImpl(MacroAssembler* masm, bool in_frame); 2471 void GenerateImpl(MacroAssembler* masm, bool in_frame);
2490 }; 2472 };
2491 2473
2492 class LoadICTFStub : public TurboFanCodeStub { 2474 class LoadICTFStub : public TurboFanCodeStub {
2493 public: 2475 public:
2494 explicit LoadICTFStub(Isolate* isolate, const LoadICState& state) 2476 explicit LoadICTFStub(Isolate* isolate, const LoadICState& state)
2495 : TurboFanCodeStub(isolate) { 2477 : TurboFanCodeStub(isolate) {
2496 minor_key_ = state.GetExtraICState(); 2478 minor_key_ = state.GetExtraICState();
2497 } 2479 }
2498 2480
2499 void GenerateAssembly(CodeStubAssembler* assembler) const override; 2481 void GenerateAssembly(CodeStubAssembler* assembler) const override;
2500 2482
2501 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; } 2483 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; }
2502 InlineCacheState GetICState() const final { return GENERIC; } 2484
2503 ExtraICState GetExtraICState() const final { 2485 ExtraICState GetExtraICState() const final {
2504 return static_cast<ExtraICState>(minor_key_); 2486 return static_cast<ExtraICState>(minor_key_);
2505 } 2487 }
2506 2488
2507 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); 2489 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector);
2508 DEFINE_CODE_STUB(LoadICTF, TurboFanCodeStub); 2490 DEFINE_CODE_STUB(LoadICTF, TurboFanCodeStub);
2509 }; 2491 };
2510 2492
2511 class KeyedLoadICStub : public PlatformCodeStub { 2493 class KeyedLoadICStub : public PlatformCodeStub {
2512 public: 2494 public:
2513 explicit KeyedLoadICStub(Isolate* isolate, const LoadICState& state) 2495 explicit KeyedLoadICStub(Isolate* isolate, const LoadICState& state)
2514 : PlatformCodeStub(isolate) { 2496 : PlatformCodeStub(isolate) {
2515 minor_key_ = state.GetExtraICState(); 2497 minor_key_ = state.GetExtraICState();
2516 } 2498 }
2517 2499
2518 void GenerateForTrampoline(MacroAssembler* masm); 2500 void GenerateForTrampoline(MacroAssembler* masm);
2519 2501
2520 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } 2502 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; }
2521 InlineCacheState GetICState() const final { return GENERIC; } 2503
2522 ExtraICState GetExtraICState() const final { 2504 ExtraICState GetExtraICState() const final {
2523 return static_cast<ExtraICState>(minor_key_); 2505 return static_cast<ExtraICState>(minor_key_);
2524 } 2506 }
2525 2507
2526 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); 2508 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector);
2527 DEFINE_PLATFORM_CODE_STUB(KeyedLoadIC, PlatformCodeStub); 2509 DEFINE_PLATFORM_CODE_STUB(KeyedLoadIC, PlatformCodeStub);
2528 2510
2529 protected: 2511 protected:
2530 void GenerateImpl(MacroAssembler* masm, bool in_frame); 2512 void GenerateImpl(MacroAssembler* masm, bool in_frame);
2531 }; 2513 };
2532 2514
2533 2515
2534 class VectorStoreICStub : public PlatformCodeStub { 2516 class VectorStoreICStub : public PlatformCodeStub {
2535 public: 2517 public:
2536 VectorStoreICStub(Isolate* isolate, const StoreICState& state) 2518 VectorStoreICStub(Isolate* isolate, const StoreICState& state)
2537 : PlatformCodeStub(isolate) { 2519 : PlatformCodeStub(isolate) {
2538 minor_key_ = state.GetExtraICState(); 2520 minor_key_ = state.GetExtraICState();
2539 } 2521 }
2540 2522
2541 void GenerateForTrampoline(MacroAssembler* masm); 2523 void GenerateForTrampoline(MacroAssembler* masm);
2542 2524
2543 Code::Kind GetCodeKind() const final { return Code::STORE_IC; } 2525 Code::Kind GetCodeKind() const final { return Code::STORE_IC; }
2544 InlineCacheState GetICState() const final { return GENERIC; } 2526
2545 ExtraICState GetExtraICState() const final { 2527 ExtraICState GetExtraICState() const final {
2546 return static_cast<ExtraICState>(minor_key_); 2528 return static_cast<ExtraICState>(minor_key_);
2547 } 2529 }
2548 2530
2549 DEFINE_CALL_INTERFACE_DESCRIPTOR(VectorStoreIC); 2531 DEFINE_CALL_INTERFACE_DESCRIPTOR(VectorStoreIC);
2550 DEFINE_PLATFORM_CODE_STUB(VectorStoreIC, PlatformCodeStub); 2532 DEFINE_PLATFORM_CODE_STUB(VectorStoreIC, PlatformCodeStub);
2551 2533
2552 protected: 2534 protected:
2553 void GenerateImpl(MacroAssembler* masm, bool in_frame); 2535 void GenerateImpl(MacroAssembler* masm, bool in_frame);
2554 }; 2536 };
2555 2537
2556 2538
2557 class VectorKeyedStoreICStub : public PlatformCodeStub { 2539 class VectorKeyedStoreICStub : public PlatformCodeStub {
2558 public: 2540 public:
2559 VectorKeyedStoreICStub(Isolate* isolate, const StoreICState& state) 2541 VectorKeyedStoreICStub(Isolate* isolate, const StoreICState& state)
2560 : PlatformCodeStub(isolate) { 2542 : PlatformCodeStub(isolate) {
2561 minor_key_ = state.GetExtraICState(); 2543 minor_key_ = state.GetExtraICState();
2562 } 2544 }
2563 2545
2564 void GenerateForTrampoline(MacroAssembler* masm); 2546 void GenerateForTrampoline(MacroAssembler* masm);
2565 2547
2566 Code::Kind GetCodeKind() const final { return Code::KEYED_STORE_IC; } 2548 Code::Kind GetCodeKind() const final { return Code::KEYED_STORE_IC; }
2567 InlineCacheState GetICState() const final { return GENERIC; } 2549
2568 ExtraICState GetExtraICState() const final { 2550 ExtraICState GetExtraICState() const final {
2569 return static_cast<ExtraICState>(minor_key_); 2551 return static_cast<ExtraICState>(minor_key_);
2570 } 2552 }
2571 2553
2572 DEFINE_CALL_INTERFACE_DESCRIPTOR(VectorStoreIC); 2554 DEFINE_CALL_INTERFACE_DESCRIPTOR(VectorStoreIC);
2573 DEFINE_PLATFORM_CODE_STUB(VectorKeyedStoreIC, PlatformCodeStub); 2555 DEFINE_PLATFORM_CODE_STUB(VectorKeyedStoreIC, PlatformCodeStub);
2574 2556
2575 protected: 2557 protected:
2576 void GenerateImpl(MacroAssembler* masm, bool in_frame); 2558 void GenerateImpl(MacroAssembler* masm, bool in_frame);
2577 }; 2559 };
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
3085 void PrintState(std::ostream& os) const override; // NOLINT 3067 void PrintState(std::ostream& os) const override; // NOLINT
3086 3068
3087 bool SometimesSetsUpAFrame() override { return false; } 3069 bool SometimesSetsUpAFrame() override { return false; }
3088 3070
3089 static Handle<Code> GetUninitialized(Isolate* isolate) { 3071 static Handle<Code> GetUninitialized(Isolate* isolate) {
3090 return ToBooleanICStub(isolate, UNINITIALIZED).GetCode(); 3072 return ToBooleanICStub(isolate, UNINITIALIZED).GetCode();
3091 } 3073 }
3092 3074
3093 ExtraICState GetExtraICState() const override { return types().ToIntegral(); } 3075 ExtraICState GetExtraICState() const override { return types().ToIntegral(); }
3094 3076
3095 InlineCacheState GetICState() const override { 3077 InlineCacheState GetICState() const {
3096 if (types().IsEmpty()) { 3078 if (types().IsEmpty()) {
3097 return ::v8::internal::UNINITIALIZED; 3079 return ::v8::internal::UNINITIALIZED;
3098 } else { 3080 } else {
3099 return MONOMORPHIC; 3081 return MONOMORPHIC;
3100 } 3082 }
3101 } 3083 }
3102 3084
3103 private: 3085 private:
3104 ToBooleanICStub(Isolate* isolate, InitializationState init_state) 3086 ToBooleanICStub(Isolate* isolate, InitializationState init_state)
3105 : HydrogenCodeStub(isolate, init_state) {} 3087 : HydrogenCodeStub(isolate, init_state) {}
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
3244 #undef DEFINE_HYDROGEN_CODE_STUB 3226 #undef DEFINE_HYDROGEN_CODE_STUB
3245 #undef DEFINE_CODE_STUB 3227 #undef DEFINE_CODE_STUB
3246 #undef DEFINE_CODE_STUB_BASE 3228 #undef DEFINE_CODE_STUB_BASE
3247 3229
3248 extern Representation RepresentationFromType(Type* type); 3230 extern Representation RepresentationFromType(Type* type);
3249 3231
3250 } // namespace internal 3232 } // namespace internal
3251 } // namespace v8 3233 } // namespace v8
3252 3234
3253 #endif // V8_CODE_STUBS_H_ 3235 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « src/builtins.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698