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

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

Issue 1846963002: Use a dictionary-mode code cache on the map rather than a dual system. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 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
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/codegen.h" 10 #include "src/codegen.h"
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 276
277 // Returns information for computing the number key. 277 // Returns information for computing the number key.
278 virtual Major MajorKey() const = 0; 278 virtual Major MajorKey() const = 0;
279 uint32_t MinorKey() const { return minor_key_; } 279 uint32_t MinorKey() const { return minor_key_; }
280 280
281 // BinaryOpStub needs to override this. 281 // BinaryOpStub needs to override this.
282 virtual Code::Kind GetCodeKind() const; 282 virtual Code::Kind GetCodeKind() const;
283 283
284 virtual InlineCacheState GetICState() const { return UNINITIALIZED; } 284 virtual InlineCacheState GetICState() const { return UNINITIALIZED; }
285 virtual ExtraICState GetExtraICState() const { return kNoExtraICState; } 285 virtual ExtraICState GetExtraICState() const { return kNoExtraICState; }
286 virtual Code::StubType GetStubType() const { return Code::NORMAL; }
287 286
288 Code::Flags GetCodeFlags() const; 287 Code::Flags GetCodeFlags() const;
289 288
290 friend std::ostream& operator<<(std::ostream& os, const CodeStub& s) { 289 friend std::ostream& operator<<(std::ostream& os, const CodeStub& s) {
291 s.PrintName(os); 290 s.PrintName(os);
292 return os; 291 return os;
293 } 292 }
294 293
295 Isolate* isolate() const { return isolate_; } 294 Isolate* isolate() const { return isolate_; }
296 295
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 570
572 class TurboFanCodeStub : public CodeStub { 571 class TurboFanCodeStub : public CodeStub {
573 public: 572 public:
574 // Retrieve the code for the stub. Generate the code if needed. 573 // Retrieve the code for the stub. Generate the code if needed.
575 Handle<Code> GenerateCode() override; 574 Handle<Code> GenerateCode() override;
576 575
577 int GetStackParameterCount() const override { 576 int GetStackParameterCount() const override {
578 return GetCallInterfaceDescriptor().GetStackParameterCount(); 577 return GetCallInterfaceDescriptor().GetStackParameterCount();
579 } 578 }
580 579
581 Code::StubType GetStubType() const override { return Code::FAST; }
582
583 protected: 580 protected:
584 explicit TurboFanCodeStub(Isolate* isolate) : CodeStub(isolate) {} 581 explicit TurboFanCodeStub(Isolate* isolate) : CodeStub(isolate) {}
585 582
586 virtual void GenerateAssembly( 583 virtual void GenerateAssembly(
587 compiler::CodeStubAssembler* assembler) const = 0; 584 compiler::CodeStubAssembler* assembler) const = 0;
588 585
589 private: 586 private:
590 DEFINE_CODE_STUB_BASE(TurboFanCodeStub, CodeStub); 587 DEFINE_CODE_STUB_BASE(TurboFanCodeStub, CodeStub);
591 }; 588 };
592 589
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after
1264 DEFINE_PLATFORM_CODE_STUB(FunctionPrototype, PlatformCodeStub); 1261 DEFINE_PLATFORM_CODE_STUB(FunctionPrototype, PlatformCodeStub);
1265 }; 1262 };
1266 1263
1267 1264
1268 class LoadIndexedStringStub : public PlatformCodeStub { 1265 class LoadIndexedStringStub : public PlatformCodeStub {
1269 public: 1266 public:
1270 explicit LoadIndexedStringStub(Isolate* isolate) 1267 explicit LoadIndexedStringStub(Isolate* isolate)
1271 : PlatformCodeStub(isolate) {} 1268 : PlatformCodeStub(isolate) {}
1272 1269
1273 Code::Kind GetCodeKind() const override { return Code::HANDLER; } 1270 Code::Kind GetCodeKind() const override { return Code::HANDLER; }
1274 Code::StubType GetStubType() const override { return Code::FAST; }
1275 1271
1276 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); 1272 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load);
1277 DEFINE_PLATFORM_CODE_STUB(LoadIndexedString, PlatformCodeStub); 1273 DEFINE_PLATFORM_CODE_STUB(LoadIndexedString, PlatformCodeStub);
1278 }; 1274 };
1279 1275
1280 1276
1281 class HandlerStub : public HydrogenCodeStub { 1277 class HandlerStub : public HydrogenCodeStub {
1282 public: 1278 public:
1283 Code::Kind GetCodeKind() const override { return Code::HANDLER; } 1279 Code::Kind GetCodeKind() const override { return Code::HANDLER; }
1284 ExtraICState GetExtraICState() const override { return kind(); } 1280 ExtraICState GetExtraICState() const override { return kind(); }
(...skipping 19 matching lines...) Expand all
1304 set_sub_minor_key(LoadFieldByIndexBits::encode(property_index_key)); 1300 set_sub_minor_key(LoadFieldByIndexBits::encode(property_index_key));
1305 } 1301 }
1306 1302
1307 FieldIndex index() const { 1303 FieldIndex index() const {
1308 int property_index_key = LoadFieldByIndexBits::decode(sub_minor_key()); 1304 int property_index_key = LoadFieldByIndexBits::decode(sub_minor_key());
1309 return FieldIndex::FromFieldAccessStubKey(property_index_key); 1305 return FieldIndex::FromFieldAccessStubKey(property_index_key);
1310 } 1306 }
1311 1307
1312 protected: 1308 protected:
1313 Code::Kind kind() const override { return Code::LOAD_IC; } 1309 Code::Kind kind() const override { return Code::LOAD_IC; }
1314 Code::StubType GetStubType() const override { return Code::FAST; }
1315 1310
1316 private: 1311 private:
1317 class LoadFieldByIndexBits : public BitField<int, 0, 13> {}; 1312 class LoadFieldByIndexBits : public BitField<int, 0, 13> {};
1318 1313
1319 DEFINE_HANDLER_CODE_STUB(LoadField, HandlerStub); 1314 DEFINE_HANDLER_CODE_STUB(LoadField, HandlerStub);
1320 }; 1315 };
1321 1316
1322 1317
1323 class ArrayBufferViewLoadFieldStub : public HandlerStub { 1318 class ArrayBufferViewLoadFieldStub : public HandlerStub {
1324 public: 1319 public:
1325 ArrayBufferViewLoadFieldStub(Isolate* isolate, FieldIndex index) 1320 ArrayBufferViewLoadFieldStub(Isolate* isolate, FieldIndex index)
1326 : HandlerStub(isolate) { 1321 : HandlerStub(isolate) {
1327 int property_index_key = index.GetFieldAccessStubKey(); 1322 int property_index_key = index.GetFieldAccessStubKey();
1328 set_sub_minor_key( 1323 set_sub_minor_key(
1329 ArrayBufferViewLoadFieldByIndexBits::encode(property_index_key)); 1324 ArrayBufferViewLoadFieldByIndexBits::encode(property_index_key));
1330 } 1325 }
1331 1326
1332 FieldIndex index() const { 1327 FieldIndex index() const {
1333 int property_index_key = 1328 int property_index_key =
1334 ArrayBufferViewLoadFieldByIndexBits::decode(sub_minor_key()); 1329 ArrayBufferViewLoadFieldByIndexBits::decode(sub_minor_key());
1335 return FieldIndex::FromFieldAccessStubKey(property_index_key); 1330 return FieldIndex::FromFieldAccessStubKey(property_index_key);
1336 } 1331 }
1337 1332
1338 protected: 1333 protected:
1339 Code::Kind kind() const override { return Code::LOAD_IC; } 1334 Code::Kind kind() const override { return Code::LOAD_IC; }
1340 Code::StubType GetStubType() const override { return Code::FAST; }
1341 1335
1342 private: 1336 private:
1343 class ArrayBufferViewLoadFieldByIndexBits : public BitField<int, 0, 13> {}; 1337 class ArrayBufferViewLoadFieldByIndexBits : public BitField<int, 0, 13> {};
1344 1338
1345 DEFINE_HANDLER_CODE_STUB(ArrayBufferViewLoadField, HandlerStub); 1339 DEFINE_HANDLER_CODE_STUB(ArrayBufferViewLoadField, HandlerStub);
1346 }; 1340 };
1347 1341
1348 1342
1349 class KeyedLoadSloppyArgumentsStub : public HandlerStub { 1343 class KeyedLoadSloppyArgumentsStub : public HandlerStub {
1350 public: 1344 public:
1351 explicit KeyedLoadSloppyArgumentsStub(Isolate* isolate) 1345 explicit KeyedLoadSloppyArgumentsStub(Isolate* isolate)
1352 : HandlerStub(isolate) {} 1346 : HandlerStub(isolate) {}
1353 1347
1354 protected: 1348 protected:
1355 Code::Kind kind() const override { return Code::KEYED_LOAD_IC; } 1349 Code::Kind kind() const override { return Code::KEYED_LOAD_IC; }
1356 Code::StubType GetStubType() const override { return Code::FAST; }
1357 1350
1358 private: 1351 private:
1359 DEFINE_HANDLER_CODE_STUB(KeyedLoadSloppyArguments, HandlerStub); 1352 DEFINE_HANDLER_CODE_STUB(KeyedLoadSloppyArguments, HandlerStub);
1360 }; 1353 };
1361 1354
1362 1355
1363 class CommonStoreModeBits : public BitField<KeyedAccessStoreMode, 0, 3> {}; 1356 class CommonStoreModeBits : public BitField<KeyedAccessStoreMode, 0, 3> {};
1364 1357
1365 class KeyedStoreSloppyArgumentsStub : public HandlerStub { 1358 class KeyedStoreSloppyArgumentsStub : public HandlerStub {
1366 public: 1359 public:
1367 explicit KeyedStoreSloppyArgumentsStub(Isolate* isolate, 1360 explicit KeyedStoreSloppyArgumentsStub(Isolate* isolate,
1368 KeyedAccessStoreMode mode) 1361 KeyedAccessStoreMode mode)
1369 : HandlerStub(isolate) { 1362 : HandlerStub(isolate) {
1370 set_sub_minor_key(CommonStoreModeBits::encode(mode)); 1363 set_sub_minor_key(CommonStoreModeBits::encode(mode));
1371 } 1364 }
1372 1365
1373 protected: 1366 protected:
1374 Code::Kind kind() const override { return Code::KEYED_STORE_IC; } 1367 Code::Kind kind() const override { return Code::KEYED_STORE_IC; }
1375 Code::StubType GetStubType() const override { return Code::FAST; }
1376 1368
1377 private: 1369 private:
1378 DEFINE_HANDLER_CODE_STUB(KeyedStoreSloppyArguments, HandlerStub); 1370 DEFINE_HANDLER_CODE_STUB(KeyedStoreSloppyArguments, HandlerStub);
1379 }; 1371 };
1380 1372
1381 1373
1382 class LoadConstantStub : public HandlerStub { 1374 class LoadConstantStub : public HandlerStub {
1383 public: 1375 public:
1384 LoadConstantStub(Isolate* isolate, int constant_index) 1376 LoadConstantStub(Isolate* isolate, int constant_index)
1385 : HandlerStub(isolate) { 1377 : HandlerStub(isolate) {
1386 set_sub_minor_key(ConstantIndexBits::encode(constant_index)); 1378 set_sub_minor_key(ConstantIndexBits::encode(constant_index));
1387 } 1379 }
1388 1380
1389 int constant_index() const { 1381 int constant_index() const {
1390 return ConstantIndexBits::decode(sub_minor_key()); 1382 return ConstantIndexBits::decode(sub_minor_key());
1391 } 1383 }
1392 1384
1393 protected: 1385 protected:
1394 Code::Kind kind() const override { return Code::LOAD_IC; } 1386 Code::Kind kind() const override { return Code::LOAD_IC; }
1395 Code::StubType GetStubType() const override { return Code::FAST; }
1396 1387
1397 private: 1388 private:
1398 class ConstantIndexBits : public BitField<int, 0, kSubMinorKeyBits> {}; 1389 class ConstantIndexBits : public BitField<int, 0, kSubMinorKeyBits> {};
1399 1390
1400 DEFINE_HANDLER_CODE_STUB(LoadConstant, HandlerStub); 1391 DEFINE_HANDLER_CODE_STUB(LoadConstant, HandlerStub);
1401 }; 1392 };
1402 1393
1403 1394
1404 class StoreFieldStub : public HandlerStub { 1395 class StoreFieldStub : public HandlerStub {
1405 public: 1396 public:
(...skipping 11 matching lines...) Expand all
1417 return FieldIndex::FromFieldAccessStubKey(property_index_key); 1408 return FieldIndex::FromFieldAccessStubKey(property_index_key);
1418 } 1409 }
1419 1410
1420 Representation representation() { 1411 Representation representation() {
1421 uint8_t repr = RepresentationBits::decode(sub_minor_key()); 1412 uint8_t repr = RepresentationBits::decode(sub_minor_key());
1422 return PropertyDetails::DecodeRepresentation(repr); 1413 return PropertyDetails::DecodeRepresentation(repr);
1423 } 1414 }
1424 1415
1425 protected: 1416 protected:
1426 Code::Kind kind() const override { return Code::STORE_IC; } 1417 Code::Kind kind() const override { return Code::STORE_IC; }
1427 Code::StubType GetStubType() const override { return Code::FAST; }
1428 1418
1429 private: 1419 private:
1430 class StoreFieldByIndexBits : public BitField<int, 0, 13> {}; 1420 class StoreFieldByIndexBits : public BitField<int, 0, 13> {};
1431 class RepresentationBits : public BitField<uint8_t, 13, 4> {}; 1421 class RepresentationBits : public BitField<uint8_t, 13, 4> {};
1432 1422
1433 DEFINE_HANDLER_CODE_STUB(StoreField, HandlerStub); 1423 DEFINE_HANDLER_CODE_STUB(StoreField, HandlerStub);
1434 }; 1424 };
1435 1425
1436 1426
1437 // Register and parameter access methods are specified here instead of in 1427 // Register and parameter access methods are specified here instead of in
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1527 } 1517 }
1528 1518
1529 StoreMode store_mode() const { 1519 StoreMode store_mode() const {
1530 return StoreModeBits::decode(sub_minor_key()); 1520 return StoreModeBits::decode(sub_minor_key());
1531 } 1521 }
1532 1522
1533 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override; 1523 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override;
1534 1524
1535 protected: 1525 protected:
1536 Code::Kind kind() const override { return Code::STORE_IC; } 1526 Code::Kind kind() const override { return Code::STORE_IC; }
1537 Code::StubType GetStubType() const override { return Code::FAST; }
1538 1527
1539 private: 1528 private:
1540 class StoreFieldByIndexBits : public BitField<int, 0, 13> {}; 1529 class StoreFieldByIndexBits : public BitField<int, 0, 13> {};
1541 class RepresentationBits : public BitField<uint8_t, 13, 4> {}; 1530 class RepresentationBits : public BitField<uint8_t, 13, 4> {};
1542 class StoreModeBits : public BitField<StoreMode, 17, 2> {}; 1531 class StoreModeBits : public BitField<StoreMode, 17, 2> {};
1543 1532
1544 DEFINE_HANDLER_CODE_STUB(StoreTransition, HandlerStub); 1533 DEFINE_HANDLER_CODE_STUB(StoreTransition, HandlerStub);
1545 }; 1534 };
1546 1535
1547 1536
(...skipping 933 matching lines...) Expand 10 before | Expand all | Expand 10 after
2481 SlotIndexBits::is_valid(lookup_result->slot_index); 2470 SlotIndexBits::is_valid(lookup_result->slot_index);
2482 } 2471 }
2483 2472
2484 private: 2473 private:
2485 static const int kContextIndexBits = 9; 2474 static const int kContextIndexBits = 9;
2486 static const int kSlotIndexBits = 13; 2475 static const int kSlotIndexBits = 13;
2487 class ContextIndexBits : public BitField<int, 0, kContextIndexBits> {}; 2476 class ContextIndexBits : public BitField<int, 0, kContextIndexBits> {};
2488 class SlotIndexBits 2477 class SlotIndexBits
2489 : public BitField<int, kContextIndexBits, kSlotIndexBits> {}; 2478 : public BitField<int, kContextIndexBits, kSlotIndexBits> {};
2490 2479
2491 Code::StubType GetStubType() const override { return Code::FAST; }
2492
2493 DEFINE_CODE_STUB_BASE(ScriptContextFieldStub, HandlerStub); 2480 DEFINE_CODE_STUB_BASE(ScriptContextFieldStub, HandlerStub);
2494 }; 2481 };
2495 2482
2496 2483
2497 class LoadScriptContextFieldStub : public ScriptContextFieldStub { 2484 class LoadScriptContextFieldStub : public ScriptContextFieldStub {
2498 public: 2485 public:
2499 LoadScriptContextFieldStub( 2486 LoadScriptContextFieldStub(
2500 Isolate* isolate, const ScriptContextTable::LookupResult* lookup_result) 2487 Isolate* isolate, const ScriptContextTable::LookupResult* lookup_result)
2501 : ScriptContextFieldStub(isolate, lookup_result) {} 2488 : ScriptContextFieldStub(isolate, lookup_result) {}
2502 2489
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
3094 #undef DEFINE_HYDROGEN_CODE_STUB 3081 #undef DEFINE_HYDROGEN_CODE_STUB
3095 #undef DEFINE_CODE_STUB 3082 #undef DEFINE_CODE_STUB
3096 #undef DEFINE_CODE_STUB_BASE 3083 #undef DEFINE_CODE_STUB_BASE
3097 3084
3098 extern Representation RepresentationFromType(Type* type); 3085 extern Representation RepresentationFromType(Type* type);
3099 3086
3100 } // namespace internal 3087 } // namespace internal
3101 } // namespace v8 3088 } // namespace v8
3102 3089
3103 #endif // V8_CODE_STUBS_H_ 3090 #endif // V8_CODE_STUBS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698