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

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

Issue 2562393002: [wasm] Introduce the TrapIf and TrapUnless operators to generate trap code. (Closed)
Patch Set: Rename UseSourcePosition to IsSourcePositionUsed Created 4 years 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/common-operator.h ('k') | src/compiler/ia32/code-generator-ia32.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 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/common-operator.h" 5 #include "src/compiler/common-operator.h"
6 6
7 #include "src/assembler.h" 7 #include "src/assembler.h"
8 #include "src/base/lazy-instance.h" 8 #include "src/base/lazy-instance.h"
9 #include "src/compiler/linkage.h" 9 #include "src/compiler/linkage.h"
10 #include "src/compiler/opcodes.h" 10 #include "src/compiler/opcodes.h"
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 V(LostPrecision) \ 323 V(LostPrecision) \
324 V(LostPrecisionOrNaN) \ 324 V(LostPrecisionOrNaN) \
325 V(NoReason) \ 325 V(NoReason) \
326 V(NotAHeapNumber) \ 326 V(NotAHeapNumber) \
327 V(NotANumberOrOddball) \ 327 V(NotANumberOrOddball) \
328 V(NotASmi) \ 328 V(NotASmi) \
329 V(OutOfBounds) \ 329 V(OutOfBounds) \
330 V(WrongInstanceType) \ 330 V(WrongInstanceType) \
331 V(WrongMap) 331 V(WrongMap)
332 332
333 #define CACHED_TRAP_IF_LIST(V) \
334 V(TrapDivUnrepresentable) \
335 V(TrapFloatUnrepresentable)
336
337 // The reason for a trap.
338 #define CACHED_TRAP_UNLESS_LIST(V) \
339 V(TrapUnreachable) \
340 V(TrapMemOutOfBounds) \
341 V(TrapDivByZero) \
342 V(TrapDivUnrepresentable) \
343 V(TrapRemByZero) \
344 V(TrapFloatUnrepresentable) \
345 V(TrapFuncInvalid) \
346 V(TrapFuncSigMismatch)
347
333 #define CACHED_PARAMETER_LIST(V) \ 348 #define CACHED_PARAMETER_LIST(V) \
334 V(0) \ 349 V(0) \
335 V(1) \ 350 V(1) \
336 V(2) \ 351 V(2) \
337 V(3) \ 352 V(3) \
338 V(4) \ 353 V(4) \
339 V(5) \ 354 V(5) \
340 V(6) 355 V(6)
341 356
342 357
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 "DeoptimizeUnless", // name 537 "DeoptimizeUnless", // name
523 2, 1, 1, 0, 1, 1, // counts 538 2, 1, 1, 0, 1, 1, // counts
524 kReason) {} // parameter 539 kReason) {} // parameter
525 }; 540 };
526 #define CACHED_DEOPTIMIZE_UNLESS(Reason) \ 541 #define CACHED_DEOPTIMIZE_UNLESS(Reason) \
527 DeoptimizeUnlessOperator<DeoptimizeReason::k##Reason> \ 542 DeoptimizeUnlessOperator<DeoptimizeReason::k##Reason> \
528 kDeoptimizeUnless##Reason##Operator; 543 kDeoptimizeUnless##Reason##Operator;
529 CACHED_DEOPTIMIZE_UNLESS_LIST(CACHED_DEOPTIMIZE_UNLESS) 544 CACHED_DEOPTIMIZE_UNLESS_LIST(CACHED_DEOPTIMIZE_UNLESS)
530 #undef CACHED_DEOPTIMIZE_UNLESS 545 #undef CACHED_DEOPTIMIZE_UNLESS
531 546
547 template <int32_t trap_id>
548 struct TrapIfOperator final : public Operator1<int32_t> {
549 TrapIfOperator()
550 : Operator1<int32_t>( // --
551 IrOpcode::kTrapIf, // opcode
552 Operator::kFoldable | Operator::kNoThrow, // properties
553 "TrapIf", // name
554 1, 1, 1, 0, 0, 1, // counts
555 trap_id) {} // parameter
556 };
557 #define CACHED_TRAP_IF(Trap) \
558 TrapIfOperator<static_cast<int32_t>(Runtime::kThrowWasm##Trap)> \
559 kTrapIf##Trap##Operator;
560 CACHED_TRAP_IF_LIST(CACHED_TRAP_IF)
561 #undef CACHED_TRAP_IF
562
563 template <int32_t trap_id>
564 struct TrapUnlessOperator final : public Operator1<int32_t> {
565 TrapUnlessOperator()
566 : Operator1<int32_t>( // --
567 IrOpcode::kTrapUnless, // opcode
568 Operator::kFoldable | Operator::kNoThrow, // properties
569 "TrapUnless", // name
570 1, 1, 1, 0, 0, 1, // counts
571 trap_id) {} // parameter
572 };
573 #define CACHED_TRAP_UNLESS(Trap) \
574 TrapUnlessOperator<static_cast<int32_t>(Runtime::kThrowWasm##Trap)> \
575 kTrapUnless##Trap##Operator;
576 CACHED_TRAP_UNLESS_LIST(CACHED_TRAP_UNLESS)
577 #undef CACHED_TRAP_UNLESS
578
532 template <MachineRepresentation kRep, int kInputCount> 579 template <MachineRepresentation kRep, int kInputCount>
533 struct PhiOperator final : public Operator1<MachineRepresentation> { 580 struct PhiOperator final : public Operator1<MachineRepresentation> {
534 PhiOperator() 581 PhiOperator()
535 : Operator1<MachineRepresentation>( //-- 582 : Operator1<MachineRepresentation>( //--
536 IrOpcode::kPhi, Operator::kPure, // opcode 583 IrOpcode::kPhi, Operator::kPure, // opcode
537 "Phi", // name 584 "Phi", // name
538 kInputCount, 0, 1, 1, 0, 0, // counts 585 kInputCount, 0, 1, 1, 0, 0, // counts
539 kRep) {} // parameter 586 kRep) {} // parameter
540 }; 587 };
541 #define CACHED_PHI(rep, input_count) \ 588 #define CACHED_PHI(rep, input_count) \
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 } 767 }
721 // Uncached 768 // Uncached
722 return new (zone()) Operator1<DeoptimizeReason>( // -- 769 return new (zone()) Operator1<DeoptimizeReason>( // --
723 IrOpcode::kDeoptimizeUnless, // opcode 770 IrOpcode::kDeoptimizeUnless, // opcode
724 Operator::kFoldable | Operator::kNoThrow, // properties 771 Operator::kFoldable | Operator::kNoThrow, // properties
725 "DeoptimizeUnless", // name 772 "DeoptimizeUnless", // name
726 2, 1, 1, 0, 1, 1, // counts 773 2, 1, 1, 0, 1, 1, // counts
727 reason); // parameter 774 reason); // parameter
728 } 775 }
729 776
777 const Operator* CommonOperatorBuilder::TrapIf(int32_t trap_id) {
778 switch (trap_id) {
779 #define CACHED_TRAP_IF(Trap) \
780 case Runtime::kThrowWasm##Trap: \
781 return &cache_.kTrapIf##Trap##Operator;
782 CACHED_TRAP_IF_LIST(CACHED_TRAP_IF)
783 #undef CACHED_TRAP_IF
784 default:
785 break;
786 }
787 // Uncached
788 return new (zone()) Operator1<int>( // --
789 IrOpcode::kTrapIf, // opcode
790 Operator::kFoldable | Operator::kNoThrow, // properties
791 "TrapIf", // name
792 1, 1, 1, 0, 0, 1, // counts
793 trap_id); // parameter
794 }
795
796 const Operator* CommonOperatorBuilder::TrapUnless(int32_t trap_id) {
797 switch (trap_id) {
798 #define CACHED_TRAP_UNLESS(Trap) \
799 case Runtime::kThrowWasm##Trap: \
800 return &cache_.kTrapUnless##Trap##Operator;
801 CACHED_TRAP_UNLESS_LIST(CACHED_TRAP_UNLESS)
802 #undef CACHED_TRAP_UNLESS
803 default:
804 break;
805 }
806 // Uncached
807 return new (zone()) Operator1<int>( // --
808 IrOpcode::kTrapUnless, // opcode
809 Operator::kFoldable | Operator::kNoThrow, // properties
810 "TrapUnless", // name
811 1, 1, 1, 0, 0, 1, // counts
812 trap_id); // parameter
813 }
730 814
731 const Operator* CommonOperatorBuilder::Switch(size_t control_output_count) { 815 const Operator* CommonOperatorBuilder::Switch(size_t control_output_count) {
732 return new (zone()) Operator( // -- 816 return new (zone()) Operator( // --
733 IrOpcode::kSwitch, Operator::kKontrol, // opcode 817 IrOpcode::kSwitch, Operator::kKontrol, // opcode
734 "Switch", // name 818 "Switch", // name
735 1, 0, 1, 0, 0, control_output_count); // counts 819 1, 0, 1, 0, 0, control_output_count); // counts
736 } 820 }
737 821
738 822
739 const Operator* CommonOperatorBuilder::IfValue(int32_t index) { 823 const Operator* CommonOperatorBuilder::IfValue(int32_t index) {
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
1173 CommonOperatorBuilder::CreateFrameStateFunctionInfo( 1257 CommonOperatorBuilder::CreateFrameStateFunctionInfo(
1174 FrameStateType type, int parameter_count, int local_count, 1258 FrameStateType type, int parameter_count, int local_count,
1175 Handle<SharedFunctionInfo> shared_info) { 1259 Handle<SharedFunctionInfo> shared_info) {
1176 return new (zone()->New(sizeof(FrameStateFunctionInfo))) 1260 return new (zone()->New(sizeof(FrameStateFunctionInfo)))
1177 FrameStateFunctionInfo(type, parameter_count, local_count, shared_info); 1261 FrameStateFunctionInfo(type, parameter_count, local_count, shared_info);
1178 } 1262 }
1179 1263
1180 } // namespace compiler 1264 } // namespace compiler
1181 } // namespace internal 1265 } // namespace internal
1182 } // namespace v8 1266 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/common-operator.h ('k') | src/compiler/ia32/code-generator-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698