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

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

Issue 6265019: Remove default template parameter T for the number of temps.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 9 years, 11 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
« no previous file with comments | « src/ia32/lithium-ia32.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 354
355 355
356 template<typename T> 356 template<typename T>
357 class OperandContainer<T, 0> { 357 class OperandContainer<T, 0> {
358 public: 358 public:
359 int length() { return 0; } 359 int length() { return 0; }
360 void PrintOperandsTo(StringStream* stream) { } 360 void PrintOperandsTo(StringStream* stream) { }
361 }; 361 };
362 362
363 363
364 template<int R, int I, int T = 0> 364 template<int R, int I, int T>
365 class LTemplateInstruction: public LInstruction { 365 class LTemplateInstruction: public LInstruction {
366 public: 366 public:
367 // Allow 0 or 1 output operands. 367 // Allow 0 or 1 output operands.
368 STATIC_ASSERT(R == 0 || R == 1); 368 STATIC_ASSERT(R == 0 || R == 1);
369 virtual bool HasResult() const { return R != 0; } 369 virtual bool HasResult() const { return R != 0; }
370 void set_result(LOperand* operand) { results_[0] = operand; } 370 void set_result(LOperand* operand) { results_[0] = operand; }
371 LOperand* result() { return results_[0]; } 371 LOperand* result() { return results_[0]; }
372 372
373 int InputCount() { return I; } 373 int InputCount() { return I; }
374 LOperand* InputAt(int i) { return inputs_[i]; } 374 LOperand* InputAt(int i) { return inputs_[i]; }
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 } 505 }
506 }; 506 };
507 507
508 508
509 class LUnknownOSRValue: public LTemplateInstruction<1, 0, 0> { 509 class LUnknownOSRValue: public LTemplateInstruction<1, 0, 0> {
510 public: 510 public:
511 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") 511 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value")
512 }; 512 };
513 513
514 514
515 template<int I, int T = 0> 515 template<int I, int T>
516 class LControlInstruction: public LTemplateInstruction<0, I, T> { 516 class LControlInstruction: public LTemplateInstruction<0, I, T> {
517 public: 517 public:
518 DECLARE_INSTRUCTION(ControlInstruction) 518 DECLARE_INSTRUCTION(ControlInstruction)
519 virtual bool IsControl() const { return true; } 519 virtual bool IsControl() const { return true; }
520 520
521 int true_block_id() const { return true_block_id_; } 521 int true_block_id() const { return true_block_id_; }
522 int false_block_id() const { return false_block_id_; } 522 int false_block_id() const { return false_block_id_; }
523 void SetBranchTargets(int true_block_id, int false_block_id) { 523 void SetBranchTargets(int true_block_id, int false_block_id) {
524 true_block_id_ = true_block_id; 524 true_block_id_ = true_block_id;
525 false_block_id_ = false_block_id; 525 false_block_id_ = false_block_id;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at") 563 DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at")
564 564
565 LOperand* arguments() { return inputs_[0]; } 565 LOperand* arguments() { return inputs_[0]; }
566 LOperand* length() { return inputs_[1]; } 566 LOperand* length() { return inputs_[1]; }
567 LOperand* index() { return inputs_[2]; } 567 LOperand* index() { return inputs_[2]; }
568 568
569 virtual void PrintDataTo(StringStream* stream); 569 virtual void PrintDataTo(StringStream* stream);
570 }; 570 };
571 571
572 572
573 class LArgumentsLength: public LTemplateInstruction<1, 1> { 573 class LArgumentsLength: public LTemplateInstruction<1, 1, 0> {
574 public: 574 public:
575 explicit LArgumentsLength(LOperand* elements) { 575 explicit LArgumentsLength(LOperand* elements) {
576 inputs_[0] = elements; 576 inputs_[0] = elements;
577 } 577 }
578 578
579 DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length") 579 DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length")
580 }; 580 };
581 581
582 582
583 class LArgumentsElements: public LTemplateInstruction<1, 0, 0> { 583 class LArgumentsElements: public LTemplateInstruction<1, 0, 0> {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 inputs_[0] = left; 620 inputs_[0] = left;
621 inputs_[1] = right; 621 inputs_[1] = right;
622 temps_[0] = temp; 622 temps_[0] = temp;
623 } 623 }
624 624
625 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") 625 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i")
626 DECLARE_HYDROGEN_ACCESSOR(Mul) 626 DECLARE_HYDROGEN_ACCESSOR(Mul)
627 }; 627 };
628 628
629 629
630 class LCmpID: public LTemplateInstruction<1, 2> { 630 class LCmpID: public LTemplateInstruction<1, 2, 0> {
631 public: 631 public:
632 LCmpID(LOperand* left, LOperand* right) { 632 LCmpID(LOperand* left, LOperand* right) {
633 inputs_[0] = left; 633 inputs_[0] = left;
634 inputs_[1] = right; 634 inputs_[1] = right;
635 } 635 }
636 636
637 DECLARE_CONCRETE_INSTRUCTION(CmpID, "cmp-id") 637 DECLARE_CONCRETE_INSTRUCTION(CmpID, "cmp-id")
638 DECLARE_HYDROGEN_ACCESSOR(Compare) 638 DECLARE_HYDROGEN_ACCESSOR(Compare)
639 639
640 Token::Value op() const { return hydrogen()->token(); } 640 Token::Value op() const { return hydrogen()->token(); }
641 bool is_double() const { 641 bool is_double() const {
642 return hydrogen()->GetInputRepresentation().IsDouble(); 642 return hydrogen()->GetInputRepresentation().IsDouble();
643 } 643 }
644 }; 644 };
645 645
646 646
647 class LCmpIDAndBranch: public LControlInstruction<2> { 647 class LCmpIDAndBranch: public LControlInstruction<2, 0> {
648 public: 648 public:
649 LCmpIDAndBranch(LOperand* left, LOperand* right) { 649 LCmpIDAndBranch(LOperand* left, LOperand* right) {
650 inputs_[0] = left; 650 inputs_[0] = left;
651 inputs_[1] = right; 651 inputs_[1] = right;
652 } 652 }
653 653
654 DECLARE_CONCRETE_INSTRUCTION(CmpIDAndBranch, "cmp-id-and-branch") 654 DECLARE_CONCRETE_INSTRUCTION(CmpIDAndBranch, "cmp-id-and-branch")
655 DECLARE_HYDROGEN_ACCESSOR(Compare) 655 DECLARE_HYDROGEN_ACCESSOR(Compare)
656 656
657 Token::Value op() const { return hydrogen()->token(); } 657 Token::Value op() const { return hydrogen()->token(); }
658 bool is_double() const { 658 bool is_double() const {
659 return hydrogen()->GetInputRepresentation().IsDouble(); 659 return hydrogen()->GetInputRepresentation().IsDouble();
660 } 660 }
661 661
662 virtual void PrintDataTo(StringStream* stream); 662 virtual void PrintDataTo(StringStream* stream);
663 }; 663 };
664 664
665 665
666 class LUnaryMathOperation: public LTemplateInstruction<1, 1> { 666 class LUnaryMathOperation: public LTemplateInstruction<1, 1, 0> {
667 public: 667 public:
668 explicit LUnaryMathOperation(LOperand* value) { 668 explicit LUnaryMathOperation(LOperand* value) {
669 inputs_[0] = value; 669 inputs_[0] = value;
670 } 670 }
671 671
672 DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation") 672 DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation")
673 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) 673 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation)
674 674
675 virtual void PrintDataTo(StringStream* stream); 675 virtual void PrintDataTo(StringStream* stream);
676 BuiltinFunctionId op() const { return hydrogen()->op(); } 676 BuiltinFunctionId op() const { return hydrogen()->op(); }
677 }; 677 };
678 678
679 679
680 class LCmpJSObjectEq: public LTemplateInstruction<1, 2> { 680 class LCmpJSObjectEq: public LTemplateInstruction<1, 2, 0> {
681 public: 681 public:
682 LCmpJSObjectEq(LOperand* left, LOperand* right) { 682 LCmpJSObjectEq(LOperand* left, LOperand* right) {
683 inputs_[0] = left; 683 inputs_[0] = left;
684 inputs_[1] = right; 684 inputs_[1] = right;
685 } 685 }
686 686
687 DECLARE_CONCRETE_INSTRUCTION(CmpJSObjectEq, "cmp-jsobject-eq") 687 DECLARE_CONCRETE_INSTRUCTION(CmpJSObjectEq, "cmp-jsobject-eq")
688 }; 688 };
689 689
690 690
691 class LCmpJSObjectEqAndBranch: public LControlInstruction<2> { 691 class LCmpJSObjectEqAndBranch: public LControlInstruction<2, 0> {
692 public: 692 public:
693 LCmpJSObjectEqAndBranch(LOperand* left, LOperand* right) { 693 LCmpJSObjectEqAndBranch(LOperand* left, LOperand* right) {
694 inputs_[0] = left; 694 inputs_[0] = left;
695 inputs_[1] = right; 695 inputs_[1] = right;
696 } 696 }
697 697
698 DECLARE_CONCRETE_INSTRUCTION(CmpJSObjectEqAndBranch, 698 DECLARE_CONCRETE_INSTRUCTION(CmpJSObjectEqAndBranch,
699 "cmp-jsobject-eq-and-branch") 699 "cmp-jsobject-eq-and-branch")
700 }; 700 };
701 701
702 702
703 class LIsNull: public LTemplateInstruction<1, 1> { 703 class LIsNull: public LTemplateInstruction<1, 1, 0> {
704 public: 704 public:
705 explicit LIsNull(LOperand* value) { 705 explicit LIsNull(LOperand* value) {
706 inputs_[0] = value; 706 inputs_[0] = value;
707 } 707 }
708 708
709 DECLARE_CONCRETE_INSTRUCTION(IsNull, "is-null") 709 DECLARE_CONCRETE_INSTRUCTION(IsNull, "is-null")
710 DECLARE_HYDROGEN_ACCESSOR(IsNull) 710 DECLARE_HYDROGEN_ACCESSOR(IsNull)
711 711
712 bool is_strict() const { return hydrogen()->is_strict(); } 712 bool is_strict() const { return hydrogen()->is_strict(); }
713 }; 713 };
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 temps_[0] = temp; 747 temps_[0] = temp;
748 temps_[1] = temp2; 748 temps_[1] = temp2;
749 } 749 }
750 750
751 DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") 751 DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch")
752 752
753 virtual void PrintDataTo(StringStream* stream); 753 virtual void PrintDataTo(StringStream* stream);
754 }; 754 };
755 755
756 756
757 class LIsSmi: public LTemplateInstruction<1, 1> { 757 class LIsSmi: public LTemplateInstruction<1, 1, 0> {
758 public: 758 public:
759 explicit LIsSmi(LOperand* value) { 759 explicit LIsSmi(LOperand* value) {
760 inputs_[0] = value; 760 inputs_[0] = value;
761 } 761 }
762 762
763 DECLARE_CONCRETE_INSTRUCTION(IsSmi, "is-smi") 763 DECLARE_CONCRETE_INSTRUCTION(IsSmi, "is-smi")
764 DECLARE_HYDROGEN_ACCESSOR(IsSmi) 764 DECLARE_HYDROGEN_ACCESSOR(IsSmi)
765 }; 765 };
766 766
767 767
768 class LIsSmiAndBranch: public LControlInstruction<1> { 768 class LIsSmiAndBranch: public LControlInstruction<1, 0> {
769 public: 769 public:
770 explicit LIsSmiAndBranch(LOperand* value) { 770 explicit LIsSmiAndBranch(LOperand* value) {
771 inputs_[0] = value; 771 inputs_[0] = value;
772 } 772 }
773 773
774 DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") 774 DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch")
775 775
776 virtual void PrintDataTo(StringStream* stream); 776 virtual void PrintDataTo(StringStream* stream);
777 }; 777 };
778 778
779 779
780 class LHasInstanceType: public LTemplateInstruction<1, 1> { 780 class LHasInstanceType: public LTemplateInstruction<1, 1, 0> {
781 public: 781 public:
782 explicit LHasInstanceType(LOperand* value) { 782 explicit LHasInstanceType(LOperand* value) {
783 inputs_[0] = value; 783 inputs_[0] = value;
784 } 784 }
785 785
786 DECLARE_CONCRETE_INSTRUCTION(HasInstanceType, "has-instance-type") 786 DECLARE_CONCRETE_INSTRUCTION(HasInstanceType, "has-instance-type")
787 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType) 787 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType)
788 }; 788 };
789 789
790 790
791 class LHasInstanceTypeAndBranch: public LControlInstruction<1, 0> { 791 class LHasInstanceTypeAndBranch: public LControlInstruction<1, 0> {
792 public: 792 public:
793 explicit LHasInstanceTypeAndBranch(LOperand* value) { 793 explicit LHasInstanceTypeAndBranch(LOperand* value) {
794 inputs_[0] = value; 794 inputs_[0] = value;
795 } 795 }
796 796
797 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, 797 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch,
798 "has-instance-type-and-branch") 798 "has-instance-type-and-branch")
799 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType) 799 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType)
800 800
801 virtual void PrintDataTo(StringStream* stream); 801 virtual void PrintDataTo(StringStream* stream);
802 }; 802 };
803 803
804 804
805 class LHasCachedArrayIndex: public LTemplateInstruction<1, 1> { 805 class LHasCachedArrayIndex: public LTemplateInstruction<1, 1, 0> {
806 public: 806 public:
807 explicit LHasCachedArrayIndex(LOperand* value) { 807 explicit LHasCachedArrayIndex(LOperand* value) {
808 inputs_[0] = value; 808 inputs_[0] = value;
809 } 809 }
810 810
811 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndex, "has-cached-array-index") 811 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndex, "has-cached-array-index")
812 DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndex) 812 DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndex)
813 }; 813 };
814 814
815 815
816 class LHasCachedArrayIndexAndBranch: public LControlInstruction<1> { 816 class LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> {
817 public: 817 public:
818 explicit LHasCachedArrayIndexAndBranch(LOperand* value) { 818 explicit LHasCachedArrayIndexAndBranch(LOperand* value) {
819 inputs_[0] = value; 819 inputs_[0] = value;
820 } 820 }
821 821
822 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, 822 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch,
823 "has-cached-array-index-and-branch") 823 "has-cached-array-index-and-branch")
824 virtual void PrintDataTo(StringStream* stream); 824 virtual void PrintDataTo(StringStream* stream);
825 }; 825 };
826 826
(...skipping 20 matching lines...) Expand all
847 } 847 }
848 848
849 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, 849 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch,
850 "class-of-test-and-branch") 850 "class-of-test-and-branch")
851 DECLARE_HYDROGEN_ACCESSOR(ClassOfTest) 851 DECLARE_HYDROGEN_ACCESSOR(ClassOfTest)
852 852
853 virtual void PrintDataTo(StringStream* stream); 853 virtual void PrintDataTo(StringStream* stream);
854 }; 854 };
855 855
856 856
857 class LCmpT: public LTemplateInstruction<1, 2> { 857 class LCmpT: public LTemplateInstruction<1, 2, 0> {
858 public: 858 public:
859 LCmpT(LOperand* left, LOperand* right) { 859 LCmpT(LOperand* left, LOperand* right) {
860 inputs_[0] = left; 860 inputs_[0] = left;
861 inputs_[1] = right; 861 inputs_[1] = right;
862 } 862 }
863 863
864 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") 864 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t")
865 DECLARE_HYDROGEN_ACCESSOR(Compare) 865 DECLARE_HYDROGEN_ACCESSOR(Compare)
866 866
867 Token::Value op() const { return hydrogen()->token(); } 867 Token::Value op() const { return hydrogen()->token(); }
868 }; 868 };
869 869
870 870
871 class LCmpTAndBranch: public LControlInstruction<2> { 871 class LCmpTAndBranch: public LControlInstruction<2, 0> {
872 public: 872 public:
873 LCmpTAndBranch(LOperand* left, LOperand* right) { 873 LCmpTAndBranch(LOperand* left, LOperand* right) {
874 inputs_[0] = left; 874 inputs_[0] = left;
875 inputs_[1] = right; 875 inputs_[1] = right;
876 } 876 }
877 877
878 DECLARE_CONCRETE_INSTRUCTION(CmpTAndBranch, "cmp-t-and-branch") 878 DECLARE_CONCRETE_INSTRUCTION(CmpTAndBranch, "cmp-t-and-branch")
879 DECLARE_HYDROGEN_ACCESSOR(Compare) 879 DECLARE_HYDROGEN_ACCESSOR(Compare)
880 880
881 Token::Value op() const { return hydrogen()->token(); } 881 Token::Value op() const { return hydrogen()->token(); }
882 }; 882 };
883 883
884 884
885 class LInstanceOf: public LTemplateInstruction<1, 2> { 885 class LInstanceOf: public LTemplateInstruction<1, 2, 0> {
886 public: 886 public:
887 LInstanceOf(LOperand* left, LOperand* right) { 887 LInstanceOf(LOperand* left, LOperand* right) {
888 inputs_[0] = left; 888 inputs_[0] = left;
889 inputs_[1] = right; 889 inputs_[1] = right;
890 } 890 }
891 891
892 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") 892 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of")
893 }; 893 };
894 894
895 895
896 class LInstanceOfAndBranch: public LControlInstruction<2> { 896 class LInstanceOfAndBranch: public LControlInstruction<2, 0> {
897 public: 897 public:
898 LInstanceOfAndBranch(LOperand* left, LOperand* right) { 898 LInstanceOfAndBranch(LOperand* left, LOperand* right) {
899 inputs_[0] = left; 899 inputs_[0] = left;
900 inputs_[1] = right; 900 inputs_[1] = right;
901 } 901 }
902 902
903 DECLARE_CONCRETE_INSTRUCTION(InstanceOfAndBranch, "instance-of-and-branch") 903 DECLARE_CONCRETE_INSTRUCTION(InstanceOfAndBranch, "instance-of-and-branch")
904 }; 904 };
905 905
906 906
(...skipping 19 matching lines...) Expand all
926 inputs_[1] = length; 926 inputs_[1] = length;
927 } 927 }
928 928
929 LOperand* index() { return inputs_[0]; } 929 LOperand* index() { return inputs_[0]; }
930 LOperand* length() { return inputs_[1]; } 930 LOperand* length() { return inputs_[1]; }
931 931
932 DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check") 932 DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check")
933 }; 933 };
934 934
935 935
936 class LBitI: public LTemplateInstruction<1, 2> { 936 class LBitI: public LTemplateInstruction<1, 2, 0> {
937 public: 937 public:
938 LBitI(Token::Value op, LOperand* left, LOperand* right) 938 LBitI(Token::Value op, LOperand* left, LOperand* right)
939 : op_(op) { 939 : op_(op) {
940 inputs_[0] = left; 940 inputs_[0] = left;
941 inputs_[1] = right; 941 inputs_[1] = right;
942 } 942 }
943 943
944 Token::Value op() const { return op_; } 944 Token::Value op() const { return op_; }
945 945
946 DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i") 946 DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i")
947 947
948 private: 948 private:
949 Token::Value op_; 949 Token::Value op_;
950 }; 950 };
951 951
952 952
953 class LShiftI: public LTemplateInstruction<1, 2> { 953 class LShiftI: public LTemplateInstruction<1, 2, 0> {
954 public: 954 public:
955 LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt) 955 LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt)
956 : op_(op), can_deopt_(can_deopt) { 956 : op_(op), can_deopt_(can_deopt) {
957 inputs_[0] = left; 957 inputs_[0] = left;
958 inputs_[1] = right; 958 inputs_[1] = right;
959 } 959 }
960 960
961 Token::Value op() const { return op_; } 961 Token::Value op() const { return op_; }
962 962
963 bool can_deopt() const { return can_deopt_; } 963 bool can_deopt() const { return can_deopt_; }
964 964
965 DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i") 965 DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i")
966 966
967 private: 967 private:
968 Token::Value op_; 968 Token::Value op_;
969 bool can_deopt_; 969 bool can_deopt_;
970 }; 970 };
971 971
972 972
973 class LSubI: public LTemplateInstruction<1, 2> { 973 class LSubI: public LTemplateInstruction<1, 2, 0> {
974 public: 974 public:
975 LSubI(LOperand* left, LOperand* right) { 975 LSubI(LOperand* left, LOperand* right) {
976 inputs_[0] = left; 976 inputs_[0] = left;
977 inputs_[1] = right; 977 inputs_[1] = right;
978 } 978 }
979 979
980 DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i") 980 DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i")
981 DECLARE_HYDROGEN_ACCESSOR(Sub) 981 DECLARE_HYDROGEN_ACCESSOR(Sub)
982 }; 982 };
983 983
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1019 explicit LConstantT(Handle<Object> value) : value_(value) { } 1019 explicit LConstantT(Handle<Object> value) : value_(value) { }
1020 Handle<Object> value() const { return value_; } 1020 Handle<Object> value() const { return value_; }
1021 1021
1022 DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t") 1022 DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t")
1023 1023
1024 private: 1024 private:
1025 Handle<Object> value_; 1025 Handle<Object> value_;
1026 }; 1026 };
1027 1027
1028 1028
1029 class LBranch: public LControlInstruction<1> { 1029 class LBranch: public LControlInstruction<1, 0> {
1030 public: 1030 public:
1031 explicit LBranch(LOperand* value) { 1031 explicit LBranch(LOperand* value) {
1032 inputs_[0] = value; 1032 inputs_[0] = value;
1033 } 1033 }
1034 1034
1035 DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") 1035 DECLARE_CONCRETE_INSTRUCTION(Branch, "branch")
1036 DECLARE_HYDROGEN_ACCESSOR(Value) 1036 DECLARE_HYDROGEN_ACCESSOR(Value)
1037 1037
1038 virtual void PrintDataTo(StringStream* stream); 1038 virtual void PrintDataTo(StringStream* stream);
1039 }; 1039 };
1040 1040
1041 1041
1042 class LCmpMapAndBranch: public LTemplateInstruction<0, 1> { 1042 class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> {
1043 public: 1043 public:
1044 explicit LCmpMapAndBranch(LOperand* value) { 1044 explicit LCmpMapAndBranch(LOperand* value) {
1045 inputs_[0] = value; 1045 inputs_[0] = value;
1046 } 1046 }
1047 1047
1048 DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch") 1048 DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch")
1049 DECLARE_HYDROGEN_ACCESSOR(CompareMap) 1049 DECLARE_HYDROGEN_ACCESSOR(CompareMap)
1050 1050
1051 virtual bool IsControl() const { return true; } 1051 virtual bool IsControl() const { return true; }
1052 1052
1053 Handle<Map> map() const { return hydrogen()->map(); } 1053 Handle<Map> map() const { return hydrogen()->map(); }
1054 int true_block_id() const { 1054 int true_block_id() const {
1055 return hydrogen()->FirstSuccessor()->block_id(); 1055 return hydrogen()->FirstSuccessor()->block_id();
1056 } 1056 }
1057 int false_block_id() const { 1057 int false_block_id() const {
1058 return hydrogen()->SecondSuccessor()->block_id(); 1058 return hydrogen()->SecondSuccessor()->block_id();
1059 } 1059 }
1060 }; 1060 };
1061 1061
1062 1062
1063 class LJSArrayLength: public LTemplateInstruction<1, 1> { 1063 class LJSArrayLength: public LTemplateInstruction<1, 1, 0> {
1064 public: 1064 public:
1065 explicit LJSArrayLength(LOperand* value) { 1065 explicit LJSArrayLength(LOperand* value) {
1066 inputs_[0] = value; 1066 inputs_[0] = value;
1067 } 1067 }
1068 1068
1069 DECLARE_CONCRETE_INSTRUCTION(JSArrayLength, "js-array-length") 1069 DECLARE_CONCRETE_INSTRUCTION(JSArrayLength, "js-array-length")
1070 DECLARE_HYDROGEN_ACCESSOR(JSArrayLength) 1070 DECLARE_HYDROGEN_ACCESSOR(JSArrayLength)
1071 }; 1071 };
1072 1072
1073 1073
1074 class LFixedArrayLength: public LTemplateInstruction<1, 1> { 1074 class LFixedArrayLength: public LTemplateInstruction<1, 1, 0> {
1075 public: 1075 public:
1076 explicit LFixedArrayLength(LOperand* value) { 1076 explicit LFixedArrayLength(LOperand* value) {
1077 inputs_[0] = value; 1077 inputs_[0] = value;
1078 } 1078 }
1079 1079
1080 DECLARE_CONCRETE_INSTRUCTION(FixedArrayLength, "fixed-array-length") 1080 DECLARE_CONCRETE_INSTRUCTION(FixedArrayLength, "fixed-array-length")
1081 DECLARE_HYDROGEN_ACCESSOR(FixedArrayLength) 1081 DECLARE_HYDROGEN_ACCESSOR(FixedArrayLength)
1082 }; 1082 };
1083 1083
1084 1084
1085 class LValueOf: public LTemplateInstruction<1, 1, 1> { 1085 class LValueOf: public LTemplateInstruction<1, 1, 1> {
1086 public: 1086 public:
1087 LValueOf(LOperand* value, LOperand* temp) { 1087 LValueOf(LOperand* value, LOperand* temp) {
1088 inputs_[0] = value; 1088 inputs_[0] = value;
1089 temps_[0] = temp; 1089 temps_[0] = temp;
1090 } 1090 }
1091 1091
1092 DECLARE_CONCRETE_INSTRUCTION(ValueOf, "value-of") 1092 DECLARE_CONCRETE_INSTRUCTION(ValueOf, "value-of")
1093 DECLARE_HYDROGEN_ACCESSOR(ValueOf) 1093 DECLARE_HYDROGEN_ACCESSOR(ValueOf)
1094 }; 1094 };
1095 1095
1096 1096
1097 class LThrow: public LTemplateInstruction<0, 1> { 1097 class LThrow: public LTemplateInstruction<0, 1, 0> {
1098 public: 1098 public:
1099 explicit LThrow(LOperand* value) { 1099 explicit LThrow(LOperand* value) {
1100 inputs_[0] = value; 1100 inputs_[0] = value;
1101 } 1101 }
1102 1102
1103 DECLARE_CONCRETE_INSTRUCTION(Throw, "throw") 1103 DECLARE_CONCRETE_INSTRUCTION(Throw, "throw")
1104 }; 1104 };
1105 1105
1106 1106
1107 class LBitNotI: public LTemplateInstruction<1, 1> { 1107 class LBitNotI: public LTemplateInstruction<1, 1, 0> {
1108 public: 1108 public:
1109 explicit LBitNotI(LOperand* value) { 1109 explicit LBitNotI(LOperand* value) {
1110 inputs_[0] = value; 1110 inputs_[0] = value;
1111 } 1111 }
1112 1112
1113 DECLARE_CONCRETE_INSTRUCTION(BitNotI, "bit-not-i") 1113 DECLARE_CONCRETE_INSTRUCTION(BitNotI, "bit-not-i")
1114 }; 1114 };
1115 1115
1116 1116
1117 class LAddI: public LTemplateInstruction<1, 2> { 1117 class LAddI: public LTemplateInstruction<1, 2, 0> {
1118 public: 1118 public:
1119 LAddI(LOperand* left, LOperand* right) { 1119 LAddI(LOperand* left, LOperand* right) {
1120 inputs_[0] = left; 1120 inputs_[0] = left;
1121 inputs_[1] = right; 1121 inputs_[1] = right;
1122 } 1122 }
1123 1123
1124 DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i") 1124 DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i")
1125 DECLARE_HYDROGEN_ACCESSOR(Add) 1125 DECLARE_HYDROGEN_ACCESSOR(Add)
1126 }; 1126 };
1127 1127
1128 1128
1129 class LPower: public LTemplateInstruction<1, 2> { 1129 class LPower: public LTemplateInstruction<1, 2, 0> {
1130 public: 1130 public:
1131 LPower(LOperand* left, LOperand* right) { 1131 LPower(LOperand* left, LOperand* right) {
1132 inputs_[0] = left; 1132 inputs_[0] = left;
1133 inputs_[1] = right; 1133 inputs_[1] = right;
1134 } 1134 }
1135 1135
1136 DECLARE_CONCRETE_INSTRUCTION(Power, "power") 1136 DECLARE_CONCRETE_INSTRUCTION(Power, "power")
1137 DECLARE_HYDROGEN_ACCESSOR(Power) 1137 DECLARE_HYDROGEN_ACCESSOR(Power)
1138 }; 1138 };
1139 1139
1140 1140
1141 class LArithmeticD: public LTemplateInstruction<1, 2> { 1141 class LArithmeticD: public LTemplateInstruction<1, 2, 0> {
1142 public: 1142 public:
1143 LArithmeticD(Token::Value op, LOperand* left, LOperand* right) 1143 LArithmeticD(Token::Value op, LOperand* left, LOperand* right)
1144 : op_(op) { 1144 : op_(op) {
1145 inputs_[0] = left; 1145 inputs_[0] = left;
1146 inputs_[1] = right; 1146 inputs_[1] = right;
1147 } 1147 }
1148 1148
1149 Token::Value op() const { return op_; } 1149 Token::Value op() const { return op_; }
1150 1150
1151 virtual void CompileToNative(LCodeGen* generator); 1151 virtual void CompileToNative(LCodeGen* generator);
1152 virtual const char* Mnemonic() const; 1152 virtual const char* Mnemonic() const;
1153 1153
1154 private: 1154 private:
1155 Token::Value op_; 1155 Token::Value op_;
1156 }; 1156 };
1157 1157
1158 1158
1159 class LArithmeticT: public LTemplateInstruction<1, 2> { 1159 class LArithmeticT: public LTemplateInstruction<1, 2, 0> {
1160 public: 1160 public:
1161 LArithmeticT(Token::Value op, LOperand* left, LOperand* right) 1161 LArithmeticT(Token::Value op, LOperand* left, LOperand* right)
1162 : op_(op) { 1162 : op_(op) {
1163 inputs_[0] = left; 1163 inputs_[0] = left;
1164 inputs_[1] = right; 1164 inputs_[1] = right;
1165 } 1165 }
1166 1166
1167 virtual void CompileToNative(LCodeGen* generator); 1167 virtual void CompileToNative(LCodeGen* generator);
1168 virtual const char* Mnemonic() const; 1168 virtual const char* Mnemonic() const;
1169 1169
1170 Token::Value op() const { return op_; } 1170 Token::Value op() const { return op_; }
1171 1171
1172 private: 1172 private:
1173 Token::Value op_; 1173 Token::Value op_;
1174 }; 1174 };
1175 1175
1176 1176
1177 class LReturn: public LTemplateInstruction<0, 1> { 1177 class LReturn: public LTemplateInstruction<0, 1, 0> {
1178 public: 1178 public:
1179 explicit LReturn(LOperand* value) { 1179 explicit LReturn(LOperand* value) {
1180 inputs_[0] = value; 1180 inputs_[0] = value;
1181 } 1181 }
1182 1182
1183 DECLARE_CONCRETE_INSTRUCTION(Return, "return") 1183 DECLARE_CONCRETE_INSTRUCTION(Return, "return")
1184 }; 1184 };
1185 1185
1186 1186
1187 class LLoadNamedField: public LTemplateInstruction<1, 1> { 1187 class LLoadNamedField: public LTemplateInstruction<1, 1, 0> {
1188 public: 1188 public:
1189 explicit LLoadNamedField(LOperand* object) { 1189 explicit LLoadNamedField(LOperand* object) {
1190 inputs_[0] = object; 1190 inputs_[0] = object;
1191 } 1191 }
1192 1192
1193 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") 1193 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field")
1194 DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) 1194 DECLARE_HYDROGEN_ACCESSOR(LoadNamedField)
1195 }; 1195 };
1196 1196
1197 1197
1198 class LLoadNamedGeneric: public LTemplateInstruction<1, 1> { 1198 class LLoadNamedGeneric: public LTemplateInstruction<1, 1, 0> {
1199 public: 1199 public:
1200 explicit LLoadNamedGeneric(LOperand* object) { 1200 explicit LLoadNamedGeneric(LOperand* object) {
1201 inputs_[0] = object; 1201 inputs_[0] = object;
1202 } 1202 }
1203 1203
1204 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") 1204 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic")
1205 DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) 1205 DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric)
1206 1206
1207 LOperand* object() { return inputs_[0]; } 1207 LOperand* object() { return inputs_[0]; }
1208 Handle<Object> name() const { return hydrogen()->name(); } 1208 Handle<Object> name() const { return hydrogen()->name(); }
1209 }; 1209 };
1210 1210
1211 1211
1212 class LLoadFunctionPrototype: public LTemplateInstruction<1, 1, 1> { 1212 class LLoadFunctionPrototype: public LTemplateInstruction<1, 1, 1> {
1213 public: 1213 public:
1214 LLoadFunctionPrototype(LOperand* function, LOperand* temp) { 1214 LLoadFunctionPrototype(LOperand* function, LOperand* temp) {
1215 inputs_[0] = function; 1215 inputs_[0] = function;
1216 temps_[0] = temp; 1216 temps_[0] = temp;
1217 } 1217 }
1218 1218
1219 DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype") 1219 DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype")
1220 DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype) 1220 DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype)
1221 1221
1222 LOperand* function() { return inputs_[0]; } 1222 LOperand* function() { return inputs_[0]; }
1223 }; 1223 };
1224 1224
1225 1225
1226 class LLoadElements: public LTemplateInstruction<1, 1> { 1226 class LLoadElements: public LTemplateInstruction<1, 1, 0> {
1227 public: 1227 public:
1228 explicit LLoadElements(LOperand* object) { 1228 explicit LLoadElements(LOperand* object) {
1229 inputs_[0] = object; 1229 inputs_[0] = object;
1230 } 1230 }
1231 1231
1232 DECLARE_CONCRETE_INSTRUCTION(LoadElements, "load-elements") 1232 DECLARE_CONCRETE_INSTRUCTION(LoadElements, "load-elements")
1233 }; 1233 };
1234 1234
1235 1235
1236 class LLoadKeyedFastElement: public LTemplateInstruction<1, 2> { 1236 class LLoadKeyedFastElement: public LTemplateInstruction<1, 2, 0> {
1237 public: 1237 public:
1238 LLoadKeyedFastElement(LOperand* elements, LOperand* key) { 1238 LLoadKeyedFastElement(LOperand* elements, LOperand* key) {
1239 inputs_[0] = elements; 1239 inputs_[0] = elements;
1240 inputs_[1] = key; 1240 inputs_[1] = key;
1241 } 1241 }
1242 1242
1243 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastElement, "load-keyed-fast-element") 1243 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastElement, "load-keyed-fast-element")
1244 DECLARE_HYDROGEN_ACCESSOR(LoadKeyedFastElement) 1244 DECLARE_HYDROGEN_ACCESSOR(LoadKeyedFastElement)
1245 1245
1246 LOperand* elements() { return inputs_[0]; } 1246 LOperand* elements() { return inputs_[0]; }
1247 LOperand* key() { return inputs_[1]; } 1247 LOperand* key() { return inputs_[1]; }
1248 }; 1248 };
1249 1249
1250 1250
1251 class LLoadKeyedGeneric: public LTemplateInstruction<1, 2> { 1251 class LLoadKeyedGeneric: public LTemplateInstruction<1, 2, 0> {
1252 public: 1252 public:
1253 LLoadKeyedGeneric(LOperand* obj, LOperand* key) { 1253 LLoadKeyedGeneric(LOperand* obj, LOperand* key) {
1254 inputs_[0] = obj; 1254 inputs_[0] = obj;
1255 inputs_[1] = key; 1255 inputs_[1] = key;
1256 } 1256 }
1257 1257
1258 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") 1258 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic")
1259 1259
1260 LOperand* object() { return inputs_[0]; } 1260 LOperand* object() { return inputs_[0]; }
1261 LOperand* key() { return inputs_[1]; } 1261 LOperand* key() { return inputs_[1]; }
1262 }; 1262 };
1263 1263
1264 1264
1265 class LLoadGlobal: public LTemplateInstruction<1, 0, 0> { 1265 class LLoadGlobal: public LTemplateInstruction<1, 0, 0> {
1266 public: 1266 public:
1267 DECLARE_CONCRETE_INSTRUCTION(LoadGlobal, "load-global") 1267 DECLARE_CONCRETE_INSTRUCTION(LoadGlobal, "load-global")
1268 DECLARE_HYDROGEN_ACCESSOR(LoadGlobal) 1268 DECLARE_HYDROGEN_ACCESSOR(LoadGlobal)
1269 }; 1269 };
1270 1270
1271 1271
1272 class LStoreGlobal: public LTemplateInstruction<0, 1> { 1272 class LStoreGlobal: public LTemplateInstruction<0, 1, 0> {
1273 public: 1273 public:
1274 explicit LStoreGlobal(LOperand* value) { 1274 explicit LStoreGlobal(LOperand* value) {
1275 inputs_[0] = value; 1275 inputs_[0] = value;
1276 } 1276 }
1277 1277
1278 DECLARE_CONCRETE_INSTRUCTION(StoreGlobal, "store-global") 1278 DECLARE_CONCRETE_INSTRUCTION(StoreGlobal, "store-global")
1279 DECLARE_HYDROGEN_ACCESSOR(StoreGlobal) 1279 DECLARE_HYDROGEN_ACCESSOR(StoreGlobal)
1280 }; 1280 };
1281 1281
1282 1282
1283 class LLoadContextSlot: public LTemplateInstruction<1, 0, 0> { 1283 class LLoadContextSlot: public LTemplateInstruction<1, 0, 0> {
1284 public: 1284 public:
1285 DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot") 1285 DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot")
1286 DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot) 1286 DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot)
1287 1287
1288 int context_chain_length() { return hydrogen()->context_chain_length(); } 1288 int context_chain_length() { return hydrogen()->context_chain_length(); }
1289 int slot_index() { return hydrogen()->slot_index(); } 1289 int slot_index() { return hydrogen()->slot_index(); }
1290 1290
1291 virtual void PrintDataTo(StringStream* stream); 1291 virtual void PrintDataTo(StringStream* stream);
1292 }; 1292 };
1293 1293
1294 1294
1295 class LPushArgument: public LTemplateInstruction<0, 1> { 1295 class LPushArgument: public LTemplateInstruction<0, 1, 0> {
1296 public: 1296 public:
1297 explicit LPushArgument(LOperand* value) { 1297 explicit LPushArgument(LOperand* value) {
1298 inputs_[0] = value; 1298 inputs_[0] = value;
1299 } 1299 }
1300 1300
1301 DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument") 1301 DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument")
1302 }; 1302 };
1303 1303
1304 1304
1305 class LGlobalObject: public LTemplateInstruction<1, 0, 0> { 1305 class LGlobalObject: public LTemplateInstruction<1, 0, 0> {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1379 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call-known-global") 1379 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call-known-global")
1380 DECLARE_HYDROGEN_ACCESSOR(CallKnownGlobal) 1380 DECLARE_HYDROGEN_ACCESSOR(CallKnownGlobal)
1381 1381
1382 virtual void PrintDataTo(StringStream* stream); 1382 virtual void PrintDataTo(StringStream* stream);
1383 1383
1384 Handle<JSFunction> target() const { return hydrogen()->target(); } 1384 Handle<JSFunction> target() const { return hydrogen()->target(); }
1385 int arity() const { return hydrogen()->argument_count() - 1; } 1385 int arity() const { return hydrogen()->argument_count() - 1; }
1386 }; 1386 };
1387 1387
1388 1388
1389 class LCallNew: public LTemplateInstruction<1, 1> { 1389 class LCallNew: public LTemplateInstruction<1, 1, 0> {
1390 public: 1390 public:
1391 explicit LCallNew(LOperand* constructor) { 1391 explicit LCallNew(LOperand* constructor) {
1392 inputs_[0] = constructor; 1392 inputs_[0] = constructor;
1393 } 1393 }
1394 1394
1395 DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") 1395 DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new")
1396 DECLARE_HYDROGEN_ACCESSOR(CallNew) 1396 DECLARE_HYDROGEN_ACCESSOR(CallNew)
1397 1397
1398 virtual void PrintDataTo(StringStream* stream); 1398 virtual void PrintDataTo(StringStream* stream);
1399 1399
1400 int arity() const { return hydrogen()->argument_count() - 1; } 1400 int arity() const { return hydrogen()->argument_count() - 1; }
1401 }; 1401 };
1402 1402
1403 1403
1404 class LCallRuntime: public LTemplateInstruction<1, 0, 0> { 1404 class LCallRuntime: public LTemplateInstruction<1, 0, 0> {
1405 public: 1405 public:
1406 DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") 1406 DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime")
1407 DECLARE_HYDROGEN_ACCESSOR(CallRuntime) 1407 DECLARE_HYDROGEN_ACCESSOR(CallRuntime)
1408 1408
1409 Runtime::Function* function() const { return hydrogen()->function(); } 1409 Runtime::Function* function() const { return hydrogen()->function(); }
1410 int arity() const { return hydrogen()->argument_count(); } 1410 int arity() const { return hydrogen()->argument_count(); }
1411 }; 1411 };
1412 1412
1413 1413
1414 class LInteger32ToDouble: public LTemplateInstruction<1, 1> { 1414 class LInteger32ToDouble: public LTemplateInstruction<1, 1, 0> {
1415 public: 1415 public:
1416 explicit LInteger32ToDouble(LOperand* value) { 1416 explicit LInteger32ToDouble(LOperand* value) {
1417 inputs_[0] = value; 1417 inputs_[0] = value;
1418 } 1418 }
1419 1419
1420 DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double") 1420 DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double")
1421 }; 1421 };
1422 1422
1423 1423
1424 class LNumberTagI: public LTemplateInstruction<1, 1> { 1424 class LNumberTagI: public LTemplateInstruction<1, 1, 0> {
1425 public: 1425 public:
1426 explicit LNumberTagI(LOperand* value) { 1426 explicit LNumberTagI(LOperand* value) {
1427 inputs_[0] = value; 1427 inputs_[0] = value;
1428 } 1428 }
1429 1429
1430 DECLARE_CONCRETE_INSTRUCTION(NumberTagI, "number-tag-i") 1430 DECLARE_CONCRETE_INSTRUCTION(NumberTagI, "number-tag-i")
1431 }; 1431 };
1432 1432
1433 1433
1434 class LNumberTagD: public LTemplateInstruction<1, 1, 1> { 1434 class LNumberTagD: public LTemplateInstruction<1, 1, 1> {
(...skipping 30 matching lines...) Expand all
1465 temps_[0] = temp; 1465 temps_[0] = temp;
1466 } 1466 }
1467 1467
1468 DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i") 1468 DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i")
1469 DECLARE_HYDROGEN_ACCESSOR(Change) 1469 DECLARE_HYDROGEN_ACCESSOR(Change)
1470 1470
1471 bool truncating() { return hydrogen()->CanTruncateToInt32(); } 1471 bool truncating() { return hydrogen()->CanTruncateToInt32(); }
1472 }; 1472 };
1473 1473
1474 1474
1475 class LSmiTag: public LTemplateInstruction<1, 1> { 1475 class LSmiTag: public LTemplateInstruction<1, 1, 0> {
1476 public: 1476 public:
1477 explicit LSmiTag(LOperand* value) { 1477 explicit LSmiTag(LOperand* value) {
1478 inputs_[0] = value; 1478 inputs_[0] = value;
1479 } 1479 }
1480 1480
1481 DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag") 1481 DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag")
1482 }; 1482 };
1483 1483
1484 1484
1485 class LNumberUntagD: public LTemplateInstruction<1, 1> { 1485 class LNumberUntagD: public LTemplateInstruction<1, 1, 0> {
1486 public: 1486 public:
1487 explicit LNumberUntagD(LOperand* value) { 1487 explicit LNumberUntagD(LOperand* value) {
1488 inputs_[0] = value; 1488 inputs_[0] = value;
1489 } 1489 }
1490 1490
1491 DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag") 1491 DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag")
1492 }; 1492 };
1493 1493
1494 1494
1495 class LSmiUntag: public LTemplateInstruction<1, 1> { 1495 class LSmiUntag: public LTemplateInstruction<1, 1, 0> {
1496 public: 1496 public:
1497 LSmiUntag(LOperand* value, bool needs_check) 1497 LSmiUntag(LOperand* value, bool needs_check)
1498 : needs_check_(needs_check) { 1498 : needs_check_(needs_check) {
1499 inputs_[0] = value; 1499 inputs_[0] = value;
1500 } 1500 }
1501 1501
1502 DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag") 1502 DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag")
1503 1503
1504 bool needs_check() const { return needs_check_; } 1504 bool needs_check() const { return needs_check_; }
1505 1505
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1584 1584
1585 class LStoreKeyedGeneric: public LStoreKeyed { 1585 class LStoreKeyedGeneric: public LStoreKeyed {
1586 public: 1586 public:
1587 LStoreKeyedGeneric(LOperand* obj, LOperand* key, LOperand* val) 1587 LStoreKeyedGeneric(LOperand* obj, LOperand* key, LOperand* val)
1588 : LStoreKeyed(obj, key, val) { } 1588 : LStoreKeyed(obj, key, val) { }
1589 1589
1590 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") 1590 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic")
1591 }; 1591 };
1592 1592
1593 1593
1594 class LCheckFunction: public LTemplateInstruction<0, 1> { 1594 class LCheckFunction: public LTemplateInstruction<0, 1, 0> {
1595 public: 1595 public:
1596 explicit LCheckFunction(LOperand* value) { 1596 explicit LCheckFunction(LOperand* value) {
1597 inputs_[0] = value; 1597 inputs_[0] = value;
1598 } 1598 }
1599 1599
1600 DECLARE_CONCRETE_INSTRUCTION(CheckFunction, "check-function") 1600 DECLARE_CONCRETE_INSTRUCTION(CheckFunction, "check-function")
1601 DECLARE_HYDROGEN_ACCESSOR(CheckFunction) 1601 DECLARE_HYDROGEN_ACCESSOR(CheckFunction)
1602 }; 1602 };
1603 1603
1604 1604
1605 class LCheckInstanceType: public LTemplateInstruction<0, 1, 1> { 1605 class LCheckInstanceType: public LTemplateInstruction<0, 1, 1> {
1606 public: 1606 public:
1607 LCheckInstanceType(LOperand* value, LOperand* temp) { 1607 LCheckInstanceType(LOperand* value, LOperand* temp) {
1608 inputs_[0] = value; 1608 inputs_[0] = value;
1609 temps_[0] = temp; 1609 temps_[0] = temp;
1610 } 1610 }
1611 1611
1612 DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type") 1612 DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type")
1613 DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType) 1613 DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType)
1614 }; 1614 };
1615 1615
1616 1616
1617 class LCheckMap: public LTemplateInstruction<0, 1> { 1617 class LCheckMap: public LTemplateInstruction<0, 1, 0> {
1618 public: 1618 public:
1619 explicit LCheckMap(LOperand* value) { 1619 explicit LCheckMap(LOperand* value) {
1620 inputs_[0] = value; 1620 inputs_[0] = value;
1621 } 1621 }
1622 1622
1623 DECLARE_CONCRETE_INSTRUCTION(CheckMap, "check-map") 1623 DECLARE_CONCRETE_INSTRUCTION(CheckMap, "check-map")
1624 DECLARE_HYDROGEN_ACCESSOR(CheckMap) 1624 DECLARE_HYDROGEN_ACCESSOR(CheckMap)
1625 }; 1625 };
1626 1626
1627 1627
1628 class LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 1> { 1628 class LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 1> {
1629 public: 1629 public:
1630 explicit LCheckPrototypeMaps(LOperand* temp) { 1630 explicit LCheckPrototypeMaps(LOperand* temp) {
1631 temps_[0] = temp; 1631 temps_[0] = temp;
1632 } 1632 }
1633 1633
1634 DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps, "check-prototype-maps") 1634 DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps, "check-prototype-maps")
1635 DECLARE_HYDROGEN_ACCESSOR(CheckPrototypeMaps) 1635 DECLARE_HYDROGEN_ACCESSOR(CheckPrototypeMaps)
1636 1636
1637 Handle<JSObject> prototype() const { return hydrogen()->prototype(); } 1637 Handle<JSObject> prototype() const { return hydrogen()->prototype(); }
1638 Handle<JSObject> holder() const { return hydrogen()->holder(); } 1638 Handle<JSObject> holder() const { return hydrogen()->holder(); }
1639 }; 1639 };
1640 1640
1641 1641
1642 class LCheckSmi: public LTemplateInstruction<0, 1> { 1642 class LCheckSmi: public LTemplateInstruction<0, 1, 0> {
1643 public: 1643 public:
1644 LCheckSmi(LOperand* value, Condition condition) 1644 LCheckSmi(LOperand* value, Condition condition)
1645 : condition_(condition) { 1645 : condition_(condition) {
1646 inputs_[0] = value; 1646 inputs_[0] = value;
1647 } 1647 }
1648 1648
1649 Condition condition() const { return condition_; } 1649 Condition condition() const { return condition_; }
1650 1650
1651 virtual void CompileToNative(LCodeGen* generator); 1651 virtual void CompileToNative(LCodeGen* generator);
1652 virtual const char* Mnemonic() const { 1652 virtual const char* Mnemonic() const {
(...skipping 28 matching lines...) Expand all
1681 1681
1682 class LFunctionLiteral: public LTemplateInstruction<1, 0, 0> { 1682 class LFunctionLiteral: public LTemplateInstruction<1, 0, 0> {
1683 public: 1683 public:
1684 DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") 1684 DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal")
1685 DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) 1685 DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral)
1686 1686
1687 Handle<SharedFunctionInfo> shared_info() { return hydrogen()->shared_info(); } 1687 Handle<SharedFunctionInfo> shared_info() { return hydrogen()->shared_info(); }
1688 }; 1688 };
1689 1689
1690 1690
1691 class LTypeof: public LTemplateInstruction<1, 1> { 1691 class LTypeof: public LTemplateInstruction<1, 1, 0> {
1692 public: 1692 public:
1693 explicit LTypeof(LOperand* value) { 1693 explicit LTypeof(LOperand* value) {
1694 inputs_[0] = value; 1694 inputs_[0] = value;
1695 } 1695 }
1696 1696
1697 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") 1697 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof")
1698 }; 1698 };
1699 1699
1700 1700
1701 class LTypeofIs: public LTemplateInstruction<1, 1> { 1701 class LTypeofIs: public LTemplateInstruction<1, 1, 0> {
1702 public: 1702 public:
1703 explicit LTypeofIs(LOperand* value) { 1703 explicit LTypeofIs(LOperand* value) {
1704 inputs_[0] = value; 1704 inputs_[0] = value;
1705 } 1705 }
1706 1706
1707 DECLARE_CONCRETE_INSTRUCTION(TypeofIs, "typeof-is") 1707 DECLARE_CONCRETE_INSTRUCTION(TypeofIs, "typeof-is")
1708 DECLARE_HYDROGEN_ACCESSOR(TypeofIs) 1708 DECLARE_HYDROGEN_ACCESSOR(TypeofIs)
1709 1709
1710 Handle<String> type_literal() { return hydrogen()->type_literal(); } 1710 Handle<String> type_literal() { return hydrogen()->type_literal(); }
1711 1711
1712 virtual void PrintDataTo(StringStream* stream); 1712 virtual void PrintDataTo(StringStream* stream);
1713 }; 1713 };
1714 1714
1715 1715
1716 class LTypeofIsAndBranch: public LControlInstruction<1> { 1716 class LTypeofIsAndBranch: public LControlInstruction<1, 0> {
1717 public: 1717 public:
1718 explicit LTypeofIsAndBranch(LOperand* value) { 1718 explicit LTypeofIsAndBranch(LOperand* value) {
1719 inputs_[0] = value; 1719 inputs_[0] = value;
1720 } 1720 }
1721 1721
1722 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") 1722 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch")
1723 DECLARE_HYDROGEN_ACCESSOR(TypeofIs) 1723 DECLARE_HYDROGEN_ACCESSOR(TypeofIs)
1724 1724
1725 Handle<String> type_literal() { return hydrogen()->type_literal(); } 1725 Handle<String> type_literal() { return hydrogen()->type_literal(); }
1726 1726
1727 virtual void PrintDataTo(StringStream* stream); 1727 virtual void PrintDataTo(StringStream* stream);
1728 }; 1728 };
1729 1729
1730 1730
1731 class LDeleteProperty: public LTemplateInstruction<1, 2> { 1731 class LDeleteProperty: public LTemplateInstruction<1, 2, 0> {
1732 public: 1732 public:
1733 LDeleteProperty(LOperand* obj, LOperand* key) { 1733 LDeleteProperty(LOperand* obj, LOperand* key) {
1734 inputs_[0] = obj; 1734 inputs_[0] = obj;
1735 inputs_[1] = key; 1735 inputs_[1] = key;
1736 } 1736 }
1737 1737
1738 DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete-property") 1738 DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete-property")
1739 1739
1740 LOperand* object() { return inputs_[0]; } 1740 LOperand* object() { return inputs_[0]; }
1741 LOperand* key() { return inputs_[1]; } 1741 LOperand* key() { return inputs_[1]; }
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
1987 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); 1987 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder);
1988 }; 1988 };
1989 1989
1990 #undef DECLARE_HYDROGEN_ACCESSOR 1990 #undef DECLARE_HYDROGEN_ACCESSOR
1991 #undef DECLARE_INSTRUCTION 1991 #undef DECLARE_INSTRUCTION
1992 #undef DECLARE_CONCRETE_INSTRUCTION 1992 #undef DECLARE_CONCRETE_INSTRUCTION
1993 1993
1994 } } // namespace v8::int 1994 } } // namespace v8::int
1995 1995
1996 #endif // V8_X64_LITHIUM_X64_H_ 1996 #endif // V8_X64_LITHIUM_X64_H_
OLDNEW
« no previous file with comments | « src/ia32/lithium-ia32.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698