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

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

Powered by Google App Engine
This is Rietveld 408576698