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

Side by Side Diff: src/compiler/machine-operator.cc

Issue 2082523002: [turbofan] Introduce CheckTaggedSigned and CheckTaggedPointer operators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix compile 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/compiler/js-native-context-specialization.cc ('k') | src/compiler/opcodes.h » ('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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 #include "src/compiler/machine-operator.h" 5 #include "src/compiler/machine-operator.h"
6 6
7 #include "src/base/lazy-instance.h" 7 #include "src/base/lazy-instance.h"
8 #include "src/compiler/opcodes.h" 8 #include "src/compiler/opcodes.h"
9 #include "src/compiler/operator.h" 9 #include "src/compiler/operator.h"
10 10
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 Name##Operator() \ 435 Name##Operator() \
436 : Operator(IrOpcode::k##Name, Operator::kPure | properties, #Name, \ 436 : Operator(IrOpcode::k##Name, Operator::kPure | properties, #Name, \
437 value_input_count, 0, control_input_count, output_count, 0, \ 437 value_input_count, 0, control_input_count, output_count, 0, \
438 0) {} \ 438 0) {} \
439 }; \ 439 }; \
440 Name##Operator k##Name; 440 Name##Operator k##Name;
441 PURE_OP_LIST(PURE) 441 PURE_OP_LIST(PURE)
442 PURE_OPTIONAL_OP_LIST(PURE) 442 PURE_OPTIONAL_OP_LIST(PURE)
443 #undef PURE 443 #undef PURE
444 444
445 #define LOAD(Type) \ 445 #define LOAD(Type) \
446 struct Load##Type##Operator final : public Operator1<LoadRepresentation> { \ 446 struct Load##Type##Operator final : public Operator1<LoadRepresentation> { \
447 Load##Type##Operator() \ 447 Load##Type##Operator() \
448 : Operator1<LoadRepresentation>( \ 448 : Operator1<LoadRepresentation>( \
449 IrOpcode::kLoad, Operator::kNoThrow | Operator::kNoWrite, \ 449 IrOpcode::kLoad, \
450 "Load", 2, 1, 1, 1, 1, 0, MachineType::Type()) {} \ 450 Operator::kNoDeopt | Operator::kNoThrow | Operator::kNoWrite, \
451 }; \ 451 "Load", 2, 1, 1, 1, 1, 0, MachineType::Type()) {} \
452 struct CheckedLoad##Type##Operator final \ 452 }; \
453 : public Operator1<CheckedLoadRepresentation> { \ 453 struct CheckedLoad##Type##Operator final \
454 CheckedLoad##Type##Operator() \ 454 : public Operator1<CheckedLoadRepresentation> { \
455 : Operator1<CheckedLoadRepresentation>( \ 455 CheckedLoad##Type##Operator() \
456 IrOpcode::kCheckedLoad, Operator::kNoThrow | Operator::kNoWrite, \ 456 : Operator1<CheckedLoadRepresentation>( \
457 "CheckedLoad", 3, 1, 1, 1, 1, 0, MachineType::Type()) {} \ 457 IrOpcode::kCheckedLoad, \
458 }; \ 458 Operator::kNoDeopt | Operator::kNoThrow | Operator::kNoWrite, \
459 Load##Type##Operator kLoad##Type; \ 459 "CheckedLoad", 3, 1, 1, 1, 1, 0, MachineType::Type()) {} \
460 }; \
461 Load##Type##Operator kLoad##Type; \
460 CheckedLoad##Type##Operator kCheckedLoad##Type; 462 CheckedLoad##Type##Operator kCheckedLoad##Type;
461 MACHINE_TYPE_LIST(LOAD) 463 MACHINE_TYPE_LIST(LOAD)
462 #undef LOAD 464 #undef LOAD
463 465
464 #define STACKSLOT(Type) \ 466 #define STACKSLOT(Type) \
465 struct StackSlot##Type##Operator final \ 467 struct StackSlot##Type##Operator final \
466 : public Operator1<MachineRepresentation> { \ 468 : public Operator1<MachineRepresentation> { \
467 StackSlot##Type##Operator() \ 469 StackSlot##Type##Operator() \
468 : Operator1<MachineRepresentation>( \ 470 : Operator1<MachineRepresentation>( \
469 IrOpcode::kStackSlot, Operator::kNoThrow, "StackSlot", 0, 0, 0, \ 471 IrOpcode::kStackSlot, Operator::kNoDeopt | Operator::kNoThrow, \
470 1, 0, 0, MachineType::Type().representation()) {} \ 472 "StackSlot", 0, 0, 0, 1, 0, 0, \
471 }; \ 473 MachineType::Type().representation()) {} \
474 }; \
472 StackSlot##Type##Operator kStackSlot##Type; 475 StackSlot##Type##Operator kStackSlot##Type;
473 MACHINE_TYPE_LIST(STACKSLOT) 476 MACHINE_TYPE_LIST(STACKSLOT)
474 #undef STACKSLOT 477 #undef STACKSLOT
475 478
476 #define STORE(Type) \ 479 #define STORE(Type) \
477 struct Store##Type##Operator : public Operator1<StoreRepresentation> { \ 480 struct Store##Type##Operator : public Operator1<StoreRepresentation> { \
478 explicit Store##Type##Operator(WriteBarrierKind write_barrier_kind) \ 481 explicit Store##Type##Operator(WriteBarrierKind write_barrier_kind) \
479 : Operator1<StoreRepresentation>( \ 482 : Operator1<StoreRepresentation>( \
480 IrOpcode::kStore, Operator::kNoRead | Operator::kNoThrow, \ 483 IrOpcode::kStore, \
484 Operator::kNoDeopt | Operator::kNoRead | Operator::kNoThrow, \
481 "Store", 3, 1, 1, 0, 1, 0, \ 485 "Store", 3, 1, 1, 0, 1, 0, \
482 StoreRepresentation(MachineRepresentation::Type, \ 486 StoreRepresentation(MachineRepresentation::Type, \
483 write_barrier_kind)) {} \ 487 write_barrier_kind)) {} \
484 }; \ 488 }; \
485 struct Store##Type##NoWriteBarrier##Operator final \ 489 struct Store##Type##NoWriteBarrier##Operator final \
486 : public Store##Type##Operator { \ 490 : public Store##Type##Operator { \
487 Store##Type##NoWriteBarrier##Operator() \ 491 Store##Type##NoWriteBarrier##Operator() \
488 : Store##Type##Operator(kNoWriteBarrier) {} \ 492 : Store##Type##Operator(kNoWriteBarrier) {} \
489 }; \ 493 }; \
490 struct Store##Type##MapWriteBarrier##Operator final \ 494 struct Store##Type##MapWriteBarrier##Operator final \
491 : public Store##Type##Operator { \ 495 : public Store##Type##Operator { \
492 Store##Type##MapWriteBarrier##Operator() \ 496 Store##Type##MapWriteBarrier##Operator() \
493 : Store##Type##Operator(kMapWriteBarrier) {} \ 497 : Store##Type##Operator(kMapWriteBarrier) {} \
494 }; \ 498 }; \
495 struct Store##Type##PointerWriteBarrier##Operator final \ 499 struct Store##Type##PointerWriteBarrier##Operator final \
496 : public Store##Type##Operator { \ 500 : public Store##Type##Operator { \
497 Store##Type##PointerWriteBarrier##Operator() \ 501 Store##Type##PointerWriteBarrier##Operator() \
498 : Store##Type##Operator(kPointerWriteBarrier) {} \ 502 : Store##Type##Operator(kPointerWriteBarrier) {} \
499 }; \ 503 }; \
500 struct Store##Type##FullWriteBarrier##Operator final \ 504 struct Store##Type##FullWriteBarrier##Operator final \
501 : public Store##Type##Operator { \ 505 : public Store##Type##Operator { \
502 Store##Type##FullWriteBarrier##Operator() \ 506 Store##Type##FullWriteBarrier##Operator() \
503 : Store##Type##Operator(kFullWriteBarrier) {} \ 507 : Store##Type##Operator(kFullWriteBarrier) {} \
504 }; \ 508 }; \
505 struct CheckedStore##Type##Operator final \ 509 struct CheckedStore##Type##Operator final \
506 : public Operator1<CheckedStoreRepresentation> { \ 510 : public Operator1<CheckedStoreRepresentation> { \
507 CheckedStore##Type##Operator() \ 511 CheckedStore##Type##Operator() \
508 : Operator1<CheckedStoreRepresentation>( \ 512 : Operator1<CheckedStoreRepresentation>( \
509 IrOpcode::kCheckedStore, Operator::kNoRead | Operator::kNoThrow, \ 513 IrOpcode::kCheckedStore, \
514 Operator::kNoDeopt | Operator::kNoRead | Operator::kNoThrow, \
510 "CheckedStore", 4, 1, 1, 0, 1, 0, MachineRepresentation::Type) { \ 515 "CheckedStore", 4, 1, 1, 0, 1, 0, MachineRepresentation::Type) { \
511 } \ 516 } \
512 }; \ 517 }; \
513 Store##Type##NoWriteBarrier##Operator kStore##Type##NoWriteBarrier; \ 518 Store##Type##NoWriteBarrier##Operator kStore##Type##NoWriteBarrier; \
514 Store##Type##MapWriteBarrier##Operator kStore##Type##MapWriteBarrier; \ 519 Store##Type##MapWriteBarrier##Operator kStore##Type##MapWriteBarrier; \
515 Store##Type##PointerWriteBarrier##Operator \ 520 Store##Type##PointerWriteBarrier##Operator \
516 kStore##Type##PointerWriteBarrier; \ 521 kStore##Type##PointerWriteBarrier; \
517 Store##Type##FullWriteBarrier##Operator kStore##Type##FullWriteBarrier; \ 522 Store##Type##FullWriteBarrier##Operator kStore##Type##FullWriteBarrier; \
518 CheckedStore##Type##Operator kCheckedStore##Type; 523 CheckedStore##Type##Operator kCheckedStore##Type;
519 MACHINE_REPRESENTATION_LIST(STORE) 524 MACHINE_REPRESENTATION_LIST(STORE)
520 #undef STORE 525 #undef STORE
521 526
522 #define ATOMIC_LOAD(Type) \ 527 #define ATOMIC_LOAD(Type) \
523 struct AtomicLoad##Type##Operator final \ 528 struct AtomicLoad##Type##Operator final \
524 : public Operator1<LoadRepresentation> { \ 529 : public Operator1<LoadRepresentation> { \
525 AtomicLoad##Type##Operator() \ 530 AtomicLoad##Type##Operator() \
526 : Operator1<LoadRepresentation>( \ 531 : Operator1<LoadRepresentation>( \
527 IrOpcode::kAtomicLoad, Operator::kNoThrow | Operator::kNoWrite, \ 532 IrOpcode::kAtomicLoad, \
528 "AtomicLoad", 2, 1, 1, 1, 1, 0, MachineType::Type()) {} \ 533 Operator::kNoDeopt | Operator::kNoThrow | Operator::kNoWrite, \
529 }; \ 534 "AtomicLoad", 2, 1, 1, 1, 1, 0, MachineType::Type()) {} \
535 }; \
530 AtomicLoad##Type##Operator kAtomicLoad##Type; 536 AtomicLoad##Type##Operator kAtomicLoad##Type;
531 ATOMIC_TYPE_LIST(ATOMIC_LOAD) 537 ATOMIC_TYPE_LIST(ATOMIC_LOAD)
532 #undef ATOMIC_LOAD 538 #undef ATOMIC_LOAD
533 539
534 #define ATOMIC_STORE(Type) \ 540 #define ATOMIC_STORE(Type) \
535 struct AtomicStore##Type##Operator \ 541 struct AtomicStore##Type##Operator \
536 : public Operator1<MachineRepresentation> { \ 542 : public Operator1<MachineRepresentation> { \
537 AtomicStore##Type##Operator() \ 543 AtomicStore##Type##Operator() \
538 : Operator1<MachineRepresentation>( \ 544 : Operator1<MachineRepresentation>( \
539 IrOpcode::kAtomicStore, Operator::kNoRead | Operator::kNoThrow, \ 545 IrOpcode::kAtomicStore, \
546 Operator::kNoDeopt | Operator::kNoRead | Operator::kNoThrow, \
540 "AtomicStore", 3, 1, 1, 0, 1, 0, MachineRepresentation::Type) {} \ 547 "AtomicStore", 3, 1, 1, 0, 1, 0, MachineRepresentation::Type) {} \
541 }; \ 548 }; \
542 AtomicStore##Type##Operator kAtomicStore##Type; 549 AtomicStore##Type##Operator kAtomicStore##Type;
543 ATOMIC_REPRESENTATION_LIST(ATOMIC_STORE) 550 ATOMIC_REPRESENTATION_LIST(ATOMIC_STORE)
544 #undef STORE 551 #undef STORE
545 552
546 struct DebugBreakOperator : public Operator { 553 struct DebugBreakOperator : public Operator {
547 DebugBreakOperator() 554 DebugBreakOperator()
548 : Operator(IrOpcode::kDebugBreak, Operator::kNoThrow, "DebugBreak", 0, 555 : Operator(IrOpcode::kDebugBreak, Operator::kNoThrow, "DebugBreak", 0,
549 0, 0, 0, 0, 0) {} 556 0, 0, 0, 0, 0) {}
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
704 } 711 }
705 ATOMIC_REPRESENTATION_LIST(STORE) 712 ATOMIC_REPRESENTATION_LIST(STORE)
706 #undef STORE 713 #undef STORE
707 UNREACHABLE(); 714 UNREACHABLE();
708 return nullptr; 715 return nullptr;
709 } 716 }
710 717
711 } // namespace compiler 718 } // namespace compiler
712 } // namespace internal 719 } // namespace internal
713 } // namespace v8 720 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-native-context-specialization.cc ('k') | src/compiler/opcodes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698