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

Side by Side Diff: src/x64/lithium-x64.h

Issue 7237024: Refactor handling of test expressions in the graph builder. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 9 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 V(CallStub) \ 70 V(CallStub) \
71 V(CheckFunction) \ 71 V(CheckFunction) \
72 V(CheckInstanceType) \ 72 V(CheckInstanceType) \
73 V(CheckMap) \ 73 V(CheckMap) \
74 V(CheckNonSmi) \ 74 V(CheckNonSmi) \
75 V(CheckPrototypeMaps) \ 75 V(CheckPrototypeMaps) \
76 V(CheckSmi) \ 76 V(CheckSmi) \
77 V(ClampDToUint8) \ 77 V(ClampDToUint8) \
78 V(ClampIToUint8) \ 78 V(ClampIToUint8) \
79 V(ClampTToUint8) \ 79 V(ClampTToUint8) \
80 V(ClassOfTest) \
81 V(ClassOfTestAndBranch) \ 80 V(ClassOfTestAndBranch) \
82 V(CmpConstantEq) \
83 V(CmpConstantEqAndBranch) \ 81 V(CmpConstantEqAndBranch) \
84 V(CmpID) \
85 V(CmpIDAndBranch) \ 82 V(CmpIDAndBranch) \
86 V(CmpObjectEq) \
87 V(CmpObjectEqAndBranch) \ 83 V(CmpObjectEqAndBranch) \
88 V(CmpMapAndBranch) \ 84 V(CmpMapAndBranch) \
89 V(CmpT) \ 85 V(CmpT) \
90 V(ConstantD) \ 86 V(ConstantD) \
91 V(ConstantI) \ 87 V(ConstantI) \
92 V(ConstantT) \ 88 V(ConstantT) \
93 V(Context) \ 89 V(Context) \
94 V(DeleteProperty) \ 90 V(DeleteProperty) \
95 V(Deoptimize) \ 91 V(Deoptimize) \
96 V(DivI) \ 92 V(DivI) \
97 V(DoubleToI) \ 93 V(DoubleToI) \
98 V(ElementsKind) \ 94 V(ElementsKind) \
99 V(ExternalArrayLength) \ 95 V(ExternalArrayLength) \
100 V(FixedArrayLength) \ 96 V(FixedArrayLength) \
101 V(FunctionLiteral) \ 97 V(FunctionLiteral) \
102 V(GetCachedArrayIndex) \ 98 V(GetCachedArrayIndex) \
103 V(GlobalObject) \ 99 V(GlobalObject) \
104 V(GlobalReceiver) \ 100 V(GlobalReceiver) \
105 V(Goto) \ 101 V(Goto) \
106 V(HasCachedArrayIndex) \
107 V(HasCachedArrayIndexAndBranch) \ 102 V(HasCachedArrayIndexAndBranch) \
108 V(HasInstanceType) \
109 V(HasInstanceTypeAndBranch) \ 103 V(HasInstanceTypeAndBranch) \
110 V(In) \ 104 V(In) \
111 V(InstanceOf) \ 105 V(InstanceOf) \
112 V(InstanceOfKnownGlobal) \ 106 V(InstanceOfKnownGlobal) \
113 V(InstructionGap) \ 107 V(InstructionGap) \
114 V(Integer32ToDouble) \ 108 V(Integer32ToDouble) \
115 V(InvokeFunction) \ 109 V(InvokeFunction) \
116 V(IsConstructCall) \
117 V(IsConstructCallAndBranch) \ 110 V(IsConstructCallAndBranch) \
118 V(IsNull) \
119 V(IsNullAndBranch) \ 111 V(IsNullAndBranch) \
120 V(IsObject) \
121 V(IsObjectAndBranch) \ 112 V(IsObjectAndBranch) \
122 V(IsSmi) \
123 V(IsSmiAndBranch) \ 113 V(IsSmiAndBranch) \
124 V(IsUndetectable) \
125 V(IsUndetectableAndBranch) \ 114 V(IsUndetectableAndBranch) \
126 V(JSArrayLength) \ 115 V(JSArrayLength) \
127 V(Label) \ 116 V(Label) \
128 V(LazyBailout) \ 117 V(LazyBailout) \
129 V(LoadContextSlot) \ 118 V(LoadContextSlot) \
130 V(LoadElements) \ 119 V(LoadElements) \
131 V(LoadExternalArrayPointer) \ 120 V(LoadExternalArrayPointer) \
132 V(LoadFunctionPrototype) \ 121 V(LoadFunctionPrototype) \
133 V(LoadGlobalCell) \ 122 V(LoadGlobalCell) \
134 V(LoadGlobalGeneric) \ 123 V(LoadGlobalGeneric) \
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 V(StringAdd) \ 155 V(StringAdd) \
167 V(StringCharCodeAt) \ 156 V(StringCharCodeAt) \
168 V(StringCharFromCode) \ 157 V(StringCharFromCode) \
169 V(StringLength) \ 158 V(StringLength) \
170 V(SubI) \ 159 V(SubI) \
171 V(TaggedToI) \ 160 V(TaggedToI) \
172 V(ThisFunction) \ 161 V(ThisFunction) \
173 V(Throw) \ 162 V(Throw) \
174 V(ToFastProperties) \ 163 V(ToFastProperties) \
175 V(Typeof) \ 164 V(Typeof) \
176 V(TypeofIs) \
177 V(TypeofIsAndBranch) \ 165 V(TypeofIsAndBranch) \
178 V(UnaryMathOperation) \ 166 V(UnaryMathOperation) \
179 V(UnknownOSRValue) \ 167 V(UnknownOSRValue) \
180 V(ValueOf) 168 V(ValueOf)
181 169
182 170
183 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ 171 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \
184 virtual Opcode opcode() const { return LInstruction::k##type; } \ 172 virtual Opcode opcode() const { return LInstruction::k##type; } \
185 virtual void CompileToNative(LCodeGen* generator); \ 173 virtual void CompileToNative(LCodeGen* generator); \
186 virtual const char* Mnemonic() const { return mnemonic; } \ 174 virtual const char* Mnemonic() const { return mnemonic; } \
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 #define DECLARE_PREDICATE(type) \ 214 #define DECLARE_PREDICATE(type) \
227 bool Is##type() const { return opcode() == k##type; } 215 bool Is##type() const { return opcode() == k##type; }
228 LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE) 216 LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE)
229 #undef DECLARE_PREDICATE 217 #undef DECLARE_PREDICATE
230 218
231 // Declare virtual predicates for instructions that don't have 219 // Declare virtual predicates for instructions that don't have
232 // an opcode. 220 // an opcode.
233 virtual bool IsGap() const { return false; } 221 virtual bool IsGap() const { return false; }
234 222
235 virtual bool IsControl() const { return false; } 223 virtual bool IsControl() const { return false; }
236 virtual void SetBranchTargets(int true_block_id, int false_block_id) { }
237 224
238 void set_environment(LEnvironment* env) { environment_ = env; } 225 void set_environment(LEnvironment* env) { environment_ = env; }
239 LEnvironment* environment() const { return environment_; } 226 LEnvironment* environment() const { return environment_; }
240 bool HasEnvironment() const { return environment_ != NULL; } 227 bool HasEnvironment() const { return environment_ != NULL; }
241 228
242 void set_pointer_map(LPointerMap* p) { pointer_map_.set(p); } 229 void set_pointer_map(LPointerMap* p) { pointer_map_.set(p); }
243 LPointerMap* pointer_map() const { return pointer_map_.get(); } 230 LPointerMap* pointer_map() const { return pointer_map_.get(); }
244 bool HasPointerMap() const { return pointer_map_.is_set(); } 231 bool HasPointerMap() const { return pointer_map_.is_set(); }
245 232
246 void set_hydrogen_value(HValue* value) { hydrogen_value_ = value; } 233 void set_hydrogen_value(HValue* value) { hydrogen_value_ = value; }
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 public: 437 public:
451 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") 438 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value")
452 }; 439 };
453 440
454 441
455 template<int I, int T> 442 template<int I, int T>
456 class LControlInstruction: public LTemplateInstruction<0, I, T> { 443 class LControlInstruction: public LTemplateInstruction<0, I, T> {
457 public: 444 public:
458 virtual bool IsControl() const { return true; } 445 virtual bool IsControl() const { return true; }
459 446
460 int true_block_id() const { return true_block_id_; } 447 int SuccessorCount() { return hydrogen()->SuccessorCount(); }
461 int false_block_id() const { return false_block_id_; } 448 HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); }
462 void SetBranchTargets(int true_block_id, int false_block_id) { 449 int true_block_id() { return hydrogen()->SuccessorAt(0)->block_id(); }
463 true_block_id_ = true_block_id; 450 int false_block_id() { return hydrogen()->SuccessorAt(1)->block_id(); }
464 false_block_id_ = false_block_id;
465 }
466 451
467 private: 452 private:
468 int true_block_id_; 453 HControlInstruction* hydrogen() {
469 int false_block_id_; 454 return HControlInstruction::cast(this->hydrogen_value());
455 }
470 }; 456 };
471 457
472 458
473 class LApplyArguments: public LTemplateInstruction<1, 4, 0> { 459 class LApplyArguments: public LTemplateInstruction<1, 4, 0> {
474 public: 460 public:
475 LApplyArguments(LOperand* function, 461 LApplyArguments(LOperand* function,
476 LOperand* receiver, 462 LOperand* receiver,
477 LOperand* length, 463 LOperand* length,
478 LOperand* elements) { 464 LOperand* elements) {
479 inputs_[0] = function; 465 inputs_[0] = function;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 LMulI(LOperand* left, LOperand* right) { 544 LMulI(LOperand* left, LOperand* right) {
559 inputs_[0] = left; 545 inputs_[0] = left;
560 inputs_[1] = right; 546 inputs_[1] = right;
561 } 547 }
562 548
563 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") 549 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i")
564 DECLARE_HYDROGEN_ACCESSOR(Mul) 550 DECLARE_HYDROGEN_ACCESSOR(Mul)
565 }; 551 };
566 552
567 553
568 class LCmpID: public LTemplateInstruction<1, 2, 0> {
569 public:
570 LCmpID(LOperand* left, LOperand* right) {
571 inputs_[0] = left;
572 inputs_[1] = right;
573 }
574
575 DECLARE_CONCRETE_INSTRUCTION(CmpID, "cmp-id")
576 DECLARE_HYDROGEN_ACCESSOR(Compare)
577
578 Token::Value op() const { return hydrogen()->token(); }
579 bool is_double() const {
580 return hydrogen()->GetInputRepresentation().IsDouble();
581 }
582 };
583
584
585 class LCmpIDAndBranch: public LControlInstruction<2, 0> { 554 class LCmpIDAndBranch: public LControlInstruction<2, 0> {
586 public: 555 public:
587 LCmpIDAndBranch(LOperand* left, LOperand* right) { 556 LCmpIDAndBranch(LOperand* left, LOperand* right) {
588 inputs_[0] = left; 557 inputs_[0] = left;
589 inputs_[1] = right; 558 inputs_[1] = right;
590 } 559 }
591 560
592 DECLARE_CONCRETE_INSTRUCTION(CmpIDAndBranch, "cmp-id-and-branch") 561 DECLARE_CONCRETE_INSTRUCTION(CmpIDAndBranch, "cmp-id-and-branch")
593 DECLARE_HYDROGEN_ACCESSOR(Compare) 562 DECLARE_HYDROGEN_ACCESSOR(CompareIDAndBranch)
594 563
595 Token::Value op() const { return hydrogen()->token(); } 564 Token::Value op() const { return hydrogen()->token(); }
596 bool is_double() const { 565 bool is_double() const {
597 return hydrogen()->GetInputRepresentation().IsDouble(); 566 return hydrogen()->GetInputRepresentation().IsDouble();
598 } 567 }
599 568
600 virtual void PrintDataTo(StringStream* stream); 569 virtual void PrintDataTo(StringStream* stream);
601 }; 570 };
602 571
603 572
604 class LUnaryMathOperation: public LTemplateInstruction<1, 1, 0> { 573 class LUnaryMathOperation: public LTemplateInstruction<1, 1, 0> {
605 public: 574 public:
606 explicit LUnaryMathOperation(LOperand* value) { 575 explicit LUnaryMathOperation(LOperand* value) {
607 inputs_[0] = value; 576 inputs_[0] = value;
608 } 577 }
609 578
610 DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation") 579 DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation")
611 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 580 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
612 581
613 virtual void PrintDataTo(StringStream* stream); 582 virtual void PrintDataTo(StringStream* stream);
614 BuiltinFunctionId op() const { return hydrogen()->op(); } 583 BuiltinFunctionId op() const { return hydrogen()->op(); }
615 }; 584 };
616 585
617 586
618 class LCmpObjectEq: public LTemplateInstruction<1, 2, 0> {
619 public:
620 LCmpObjectEq(LOperand* left, LOperand* right) {
621 inputs_[0] = left;
622 inputs_[1] = right;
623 }
624
625 DECLARE_CONCRETE_INSTRUCTION(CmpObjectEq, "cmp-object-eq")
626 };
627
628
629 class LCmpObjectEqAndBranch: public LControlInstruction<2, 0> { 587 class LCmpObjectEqAndBranch: public LControlInstruction<2, 0> {
630 public: 588 public:
631 LCmpObjectEqAndBranch(LOperand* left, LOperand* right) { 589 LCmpObjectEqAndBranch(LOperand* left, LOperand* right) {
632 inputs_[0] = left; 590 inputs_[0] = left;
633 inputs_[1] = right; 591 inputs_[1] = right;
634 } 592 }
635 593
636 DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch, 594 DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch,
637 "cmp-object-eq-and-branch") 595 "cmp-object-eq-and-branch")
638 }; 596 };
639 597
640 598
641 class LCmpConstantEq: public LTemplateInstruction<1, 1, 0> {
642 public:
643 explicit LCmpConstantEq(LOperand* left) {
644 inputs_[0] = left;
645 }
646
647 DECLARE_CONCRETE_INSTRUCTION(CmpConstantEq, "cmp-constant-eq")
648 DECLARE_HYDROGEN_ACCESSOR(CompareConstantEq)
649 };
650
651
652 class LCmpConstantEqAndBranch: public LControlInstruction<1, 0> { 599 class LCmpConstantEqAndBranch: public LControlInstruction<1, 0> {
653 public: 600 public:
654 explicit LCmpConstantEqAndBranch(LOperand* left) { 601 explicit LCmpConstantEqAndBranch(LOperand* left) {
655 inputs_[0] = left; 602 inputs_[0] = left;
656 } 603 }
657 604
658 DECLARE_CONCRETE_INSTRUCTION(CmpConstantEqAndBranch, 605 DECLARE_CONCRETE_INSTRUCTION(CmpConstantEqAndBranch,
659 "cmp-constant-eq-and-branch") 606 "cmp-constant-eq-and-branch")
660 DECLARE_HYDROGEN_ACCESSOR(CompareConstantEq) 607 DECLARE_HYDROGEN_ACCESSOR(CompareConstantEqAndBranch)
661 };
662
663
664 class LIsNull: public LTemplateInstruction<1, 1, 0> {
665 public:
666 explicit LIsNull(LOperand* value) {
667 inputs_[0] = value;
668 }
669
670 DECLARE_CONCRETE_INSTRUCTION(IsNull, "is-null")
671 DECLARE_HYDROGEN_ACCESSOR(IsNull)
672
673 bool is_strict() const { return hydrogen()->is_strict(); }
674 }; 608 };
675 609
676 610
677 class LIsNullAndBranch: public LControlInstruction<1, 1> { 611 class LIsNullAndBranch: public LControlInstruction<1, 1> {
678 public: 612 public:
679 LIsNullAndBranch(LOperand* value, LOperand* temp) { 613 LIsNullAndBranch(LOperand* value, LOperand* temp) {
680 inputs_[0] = value; 614 inputs_[0] = value;
681 temps_[0] = temp; 615 temps_[0] = temp;
682 } 616 }
683 617
684 DECLARE_CONCRETE_INSTRUCTION(IsNullAndBranch, "is-null-and-branch") 618 DECLARE_CONCRETE_INSTRUCTION(IsNullAndBranch, "is-null-and-branch")
685 DECLARE_HYDROGEN_ACCESSOR(IsNull) 619 DECLARE_HYDROGEN_ACCESSOR(IsNullAndBranch)
686 620
687 bool is_strict() const { return hydrogen()->is_strict(); } 621 bool is_strict() const { return hydrogen()->is_strict(); }
688 622
689 virtual void PrintDataTo(StringStream* stream); 623 virtual void PrintDataTo(StringStream* stream);
690 }; 624 };
691 625
692 626
693 class LIsObject: public LTemplateInstruction<1, 1, 0> {
694 public:
695 explicit LIsObject(LOperand* value) {
696 inputs_[0] = value;
697 }
698
699 DECLARE_CONCRETE_INSTRUCTION(IsObject, "is-object")
700 };
701
702
703 class LIsObjectAndBranch: public LControlInstruction<1, 0> { 627 class LIsObjectAndBranch: public LControlInstruction<1, 0> {
704 public: 628 public:
705 explicit LIsObjectAndBranch(LOperand* value) { 629 explicit LIsObjectAndBranch(LOperand* value) {
706 inputs_[0] = value; 630 inputs_[0] = value;
707 } 631 }
708 632
709 DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") 633 DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch")
634 DECLARE_HYDROGEN_ACCESSOR(IsObjectAndBranch)
710 635
711 virtual void PrintDataTo(StringStream* stream); 636 virtual void PrintDataTo(StringStream* stream);
712 }; 637 };
713 638
714 639
715 class LIsSmi: public LTemplateInstruction<1, 1, 0> {
716 public:
717 explicit LIsSmi(LOperand* value) {
718 inputs_[0] = value;
719 }
720
721 DECLARE_CONCRETE_INSTRUCTION(IsSmi, "is-smi")
722 DECLARE_HYDROGEN_ACCESSOR(IsSmi)
723 };
724
725
726 class LIsSmiAndBranch: public LControlInstruction<1, 0> { 640 class LIsSmiAndBranch: public LControlInstruction<1, 0> {
727 public: 641 public:
728 explicit LIsSmiAndBranch(LOperand* value) { 642 explicit LIsSmiAndBranch(LOperand* value) {
729 inputs_[0] = value; 643 inputs_[0] = value;
730 } 644 }
731 645
732 DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") 646 DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch")
647 DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch)
733 648
734 virtual void PrintDataTo(StringStream* stream); 649 virtual void PrintDataTo(StringStream* stream);
735 }; 650 };
736 651
737 652
738 class LIsUndetectable: public LTemplateInstruction<1, 1, 0> {
739 public:
740 explicit LIsUndetectable(LOperand* value) {
741 inputs_[0] = value;
742 }
743
744 DECLARE_CONCRETE_INSTRUCTION(IsUndetectable, "is-undetectable")
745 DECLARE_HYDROGEN_ACCESSOR(IsUndetectable)
746 };
747
748
749 class LIsUndetectableAndBranch: public LControlInstruction<1, 1> { 653 class LIsUndetectableAndBranch: public LControlInstruction<1, 1> {
750 public: 654 public:
751 explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { 655 explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) {
752 inputs_[0] = value; 656 inputs_[0] = value;
753 temps_[0] = temp; 657 temps_[0] = temp;
754 } 658 }
755 659
756 DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, 660 DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch,
757 "is-undetectable-and-branch") 661 "is-undetectable-and-branch")
662 DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch)
758 663
759 virtual void PrintDataTo(StringStream* stream); 664 virtual void PrintDataTo(StringStream* stream);
760 }; 665 };
761 666
762 667
763 class LHasInstanceType: public LTemplateInstruction<1, 1, 0> {
764 public:
765 explicit LHasInstanceType(LOperand* value) {
766 inputs_[0] = value;
767 }
768
769 DECLARE_CONCRETE_INSTRUCTION(HasInstanceType, "has-instance-type")
770 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType)
771 };
772
773
774 class LHasInstanceTypeAndBranch: public LControlInstruction<1, 0> { 668 class LHasInstanceTypeAndBranch: public LControlInstruction<1, 0> {
775 public: 669 public:
776 explicit LHasInstanceTypeAndBranch(LOperand* value) { 670 explicit LHasInstanceTypeAndBranch(LOperand* value) {
777 inputs_[0] = value; 671 inputs_[0] = value;
778 } 672 }
779 673
780 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, 674 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch,
781 "has-instance-type-and-branch") 675 "has-instance-type-and-branch")
782 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType) 676 DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch)
783 677
784 virtual void PrintDataTo(StringStream* stream); 678 virtual void PrintDataTo(StringStream* stream);
785 }; 679 };
786 680
787 681
788 class LGetCachedArrayIndex: public LTemplateInstruction<1, 1, 0> { 682 class LGetCachedArrayIndex: public LTemplateInstruction<1, 1, 0> {
789 public: 683 public:
790 explicit LGetCachedArrayIndex(LOperand* value) { 684 explicit LGetCachedArrayIndex(LOperand* value) {
791 inputs_[0] = value; 685 inputs_[0] = value;
792 } 686 }
793 687
794 DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") 688 DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index")
795 DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) 689 DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex)
796 }; 690 };
797 691
798 692
799 class LHasCachedArrayIndex: public LTemplateInstruction<1, 1, 0> {
800 public:
801 explicit LHasCachedArrayIndex(LOperand* value) {
802 inputs_[0] = value;
803 }
804
805 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndex, "has-cached-array-index")
806 DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndex)
807 };
808
809
810 class LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> { 693 class LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> {
811 public: 694 public:
812 explicit LHasCachedArrayIndexAndBranch(LOperand* value) { 695 explicit LHasCachedArrayIndexAndBranch(LOperand* value) {
813 inputs_[0] = value; 696 inputs_[0] = value;
814 } 697 }
815 698
816 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, 699 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch,
817 "has-cached-array-index-and-branch") 700 "has-cached-array-index-and-branch")
818 virtual void PrintDataTo(StringStream* stream); 701 DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndexAndBranch)
819 };
820
821
822 class LClassOfTest: public LTemplateInstruction<1, 1, 1> {
823 public:
824 LClassOfTest(LOperand* value, LOperand* temp) {
825 inputs_[0] = value;
826 temps_[0] = temp;
827 }
828
829 DECLARE_CONCRETE_INSTRUCTION(ClassOfTest, "class-of-test")
830 DECLARE_HYDROGEN_ACCESSOR(ClassOfTest)
831 702
832 virtual void PrintDataTo(StringStream* stream); 703 virtual void PrintDataTo(StringStream* stream);
833 }; 704 };
834 705
835 706
836 class LClassOfTestAndBranch: public LControlInstruction<1, 1> { 707 class LClassOfTestAndBranch: public LControlInstruction<1, 1> {
837 public: 708 public:
838 LClassOfTestAndBranch(LOperand* value, LOperand* temp) { 709 LClassOfTestAndBranch(LOperand* value, LOperand* temp) {
839 inputs_[0] = value; 710 inputs_[0] = value;
840 temps_[0] = temp; 711 temps_[0] = temp;
841 } 712 }
842 713
843 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, 714 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch,
844 "class-of-test-and-branch") 715 "class-of-test-and-branch")
845 DECLARE_HYDROGEN_ACCESSOR(ClassOfTest) 716 DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch)
846 717
847 virtual void PrintDataTo(StringStream* stream); 718 virtual void PrintDataTo(StringStream* stream);
848 }; 719 };
849 720
850 721
851 class LCmpT: public LTemplateInstruction<1, 2, 0> { 722 class LCmpT: public LTemplateInstruction<1, 2, 0> {
852 public: 723 public:
853 LCmpT(LOperand* left, LOperand* right) { 724 LCmpT(LOperand* left, LOperand* right) {
854 inputs_[0] = left; 725 inputs_[0] = left;
855 inputs_[1] = right; 726 inputs_[1] = right;
856 } 727 }
857 728
858 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") 729 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t")
859 DECLARE_HYDROGEN_ACCESSOR(Compare) 730 DECLARE_HYDROGEN_ACCESSOR(CompareGeneric)
860 731
861 Token::Value op() const { return hydrogen()->token(); } 732 Token::Value op() const { return hydrogen()->token(); }
862 }; 733 };
863 734
864 735
865 class LIn: public LTemplateInstruction<1, 2, 0> { 736 class LIn: public LTemplateInstruction<1, 2, 0> {
866 public: 737 public:
867 LIn(LOperand* key, LOperand* object) { 738 LIn(LOperand* key, LOperand* object) {
868 inputs_[0] = key; 739 inputs_[0] = key;
869 inputs_[1] = object; 740 inputs_[1] = object;
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
995 }; 866 };
996 867
997 868
998 class LBranch: public LControlInstruction<1, 0> { 869 class LBranch: public LControlInstruction<1, 0> {
999 public: 870 public:
1000 explicit LBranch(LOperand* value) { 871 explicit LBranch(LOperand* value) {
1001 inputs_[0] = value; 872 inputs_[0] = value;
1002 } 873 }
1003 874
1004 DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") 875 DECLARE_CONCRETE_INSTRUCTION(Branch, "branch")
1005 DECLARE_HYDROGEN_ACCESSOR(Value) 876 DECLARE_HYDROGEN_ACCESSOR(Branch)
1006 877
1007 virtual void PrintDataTo(StringStream* stream); 878 virtual void PrintDataTo(StringStream* stream);
1008 }; 879 };
1009 880
1010 881
1011 class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> { 882 class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> {
1012 public: 883 public:
1013 explicit LCmpMapAndBranch(LOperand* value) { 884 explicit LCmpMapAndBranch(LOperand* value) {
1014 inputs_[0] = value; 885 inputs_[0] = value;
1015 } 886 }
(...skipping 949 matching lines...) Expand 10 before | Expand all | Expand 10 after
1965 class LTypeof: public LTemplateInstruction<1, 1, 0> { 1836 class LTypeof: public LTemplateInstruction<1, 1, 0> {
1966 public: 1837 public:
1967 explicit LTypeof(LOperand* value) { 1838 explicit LTypeof(LOperand* value) {
1968 inputs_[0] = value; 1839 inputs_[0] = value;
1969 } 1840 }
1970 1841
1971 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") 1842 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof")
1972 }; 1843 };
1973 1844
1974 1845
1975 class LTypeofIs: public LTemplateInstruction<1, 1, 0> {
1976 public:
1977 explicit LTypeofIs(LOperand* value) {
1978 inputs_[0] = value;
1979 }
1980
1981 DECLARE_CONCRETE_INSTRUCTION(TypeofIs, "typeof-is")
1982 DECLARE_HYDROGEN_ACCESSOR(TypeofIs)
1983
1984 Handle<String> type_literal() { return hydrogen()->type_literal(); }
1985
1986 virtual void PrintDataTo(StringStream* stream);
1987 };
1988
1989
1990 class LTypeofIsAndBranch: public LControlInstruction<1, 0> { 1846 class LTypeofIsAndBranch: public LControlInstruction<1, 0> {
1991 public: 1847 public:
1992 explicit LTypeofIsAndBranch(LOperand* value) { 1848 explicit LTypeofIsAndBranch(LOperand* value) {
1993 inputs_[0] = value; 1849 inputs_[0] = value;
1994 } 1850 }
1995 1851
1996 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") 1852 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch")
1997 DECLARE_HYDROGEN_ACCESSOR(TypeofIs) 1853 DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch)
1998 1854
1999 Handle<String> type_literal() { return hydrogen()->type_literal(); } 1855 Handle<String> type_literal() { return hydrogen()->type_literal(); }
2000 1856
2001 virtual void PrintDataTo(StringStream* stream); 1857 virtual void PrintDataTo(StringStream* stream);
2002 }; 1858 };
2003 1859
2004 1860
2005 class LIsConstructCall: public LTemplateInstruction<1, 0, 0> {
2006 public:
2007 DECLARE_CONCRETE_INSTRUCTION(IsConstructCall, "is-construct-call")
2008 DECLARE_HYDROGEN_ACCESSOR(IsConstructCall)
2009 };
2010
2011
2012 class LIsConstructCallAndBranch: public LControlInstruction<0, 1> { 1861 class LIsConstructCallAndBranch: public LControlInstruction<0, 1> {
2013 public: 1862 public:
2014 explicit LIsConstructCallAndBranch(LOperand* temp) { 1863 explicit LIsConstructCallAndBranch(LOperand* temp) {
2015 temps_[0] = temp; 1864 temps_[0] = temp;
2016 } 1865 }
2017 1866
2018 DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch, 1867 DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch,
2019 "is-construct-call-and-branch") 1868 "is-construct-call-and-branch")
1869 DECLARE_HYDROGEN_ACCESSOR(IsConstructCallAndBranch)
2020 }; 1870 };
2021 1871
2022 1872
2023 class LDeleteProperty: public LTemplateInstruction<1, 2, 0> { 1873 class LDeleteProperty: public LTemplateInstruction<1, 2, 0> {
2024 public: 1874 public:
2025 LDeleteProperty(LOperand* obj, LOperand* key) { 1875 LDeleteProperty(LOperand* obj, LOperand* key) {
2026 inputs_[0] = obj; 1876 inputs_[0] = obj;
2027 inputs_[1] = key; 1877 inputs_[1] = key;
2028 } 1878 }
2029 1879
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
2290 2140
2291 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); 2141 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder);
2292 }; 2142 };
2293 2143
2294 #undef DECLARE_HYDROGEN_ACCESSOR 2144 #undef DECLARE_HYDROGEN_ACCESSOR
2295 #undef DECLARE_CONCRETE_INSTRUCTION 2145 #undef DECLARE_CONCRETE_INSTRUCTION
2296 2146
2297 } } // namespace v8::int 2147 } } // namespace v8::int
2298 2148
2299 #endif // V8_X64_LITHIUM_X64_H_ 2149 #endif // V8_X64_LITHIUM_X64_H_
OLDNEW
« src/hydrogen.cc ('K') | « src/x64/lithium-codegen-x64.cc ('k') | src/x64/lithium-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698