| OLD | NEW |
| 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 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 } | 328 } |
| 329 | 329 |
| 330 private: | 330 private: |
| 331 SetOncePointer<LEnvironment> environment_; | 331 SetOncePointer<LEnvironment> environment_; |
| 332 SetOncePointer<LPointerMap> pointer_map_; | 332 SetOncePointer<LPointerMap> pointer_map_; |
| 333 HValue* hydrogen_value_; | 333 HValue* hydrogen_value_; |
| 334 SetOncePointer<LEnvironment> deoptimization_environment_; | 334 SetOncePointer<LEnvironment> deoptimization_environment_; |
| 335 }; | 335 }; |
| 336 | 336 |
| 337 | 337 |
| 338 template<typename T, int N> | 338 template<typename ElementType, int NumElements> |
| 339 class OperandContainer { | 339 class OperandContainer { |
| 340 public: | 340 public: |
| 341 OperandContainer() { | 341 OperandContainer() { |
| 342 for (int i = 0; i < N; i++) elems_[i] = NULL; | 342 for (int i = 0; i < NumElements; i++) elems_[i] = NULL; |
| 343 } | 343 } |
| 344 int length() { return N; } | 344 int length() { return NumElements; } |
| 345 T& operator[](int i) { | 345 ElementType& operator[](int i) { |
| 346 ASSERT(i < length()); | 346 ASSERT(i < length()); |
| 347 return elems_[i]; | 347 return elems_[i]; |
| 348 } | 348 } |
| 349 void PrintOperandsTo(StringStream* stream); | 349 void PrintOperandsTo(StringStream* stream); |
| 350 | 350 |
| 351 private: | 351 private: |
| 352 T elems_[N]; | 352 ElementType elems_[NumElements]; |
| 353 }; | 353 }; |
| 354 | 354 |
| 355 | 355 |
| 356 template<typename T> | 356 template<typename ElementType> |
| 357 class OperandContainer<T, 0> { | 357 class OperandContainer<ElementType, 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 // R = number of result operands (0 or 1). |
| 365 // I = number of input operands. |
| 366 // T = number of temporary operands. |
| 367 template<int R, int I, int T> |
| 365 class LTemplateInstruction: public LInstruction { | 368 class LTemplateInstruction: public LInstruction { |
| 366 public: | 369 public: |
| 367 // Allow 0 or 1 output operands. | 370 // Allow 0 or 1 output operands. |
| 368 STATIC_ASSERT(R == 0 || R == 1); | 371 STATIC_ASSERT(R == 0 || R == 1); |
| 369 virtual bool HasResult() const { return R != 0; } | 372 virtual bool HasResult() const { return R != 0; } |
| 370 void set_result(LOperand* operand) { results_[0] = operand; } | 373 void set_result(LOperand* operand) { results_[0] = operand; } |
| 371 LOperand* result() { return results_[0]; } | 374 LOperand* result() { return results_[0]; } |
| 372 | 375 |
| 373 int InputCount() { return I; } | 376 int InputCount() { return I; } |
| 374 LOperand* InputAt(int i) { return inputs_[i]; } | 377 LOperand* InputAt(int i) { return inputs_[i]; } |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 } | 508 } |
| 506 }; | 509 }; |
| 507 | 510 |
| 508 | 511 |
| 509 class LUnknownOSRValue: public LTemplateInstruction<1, 0, 0> { | 512 class LUnknownOSRValue: public LTemplateInstruction<1, 0, 0> { |
| 510 public: | 513 public: |
| 511 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") | 514 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") |
| 512 }; | 515 }; |
| 513 | 516 |
| 514 | 517 |
| 515 template<int I, int T = 0> | 518 template<int I, int T> |
| 516 class LControlInstruction: public LTemplateInstruction<0, I, T> { | 519 class LControlInstruction: public LTemplateInstruction<0, I, T> { |
| 517 public: | 520 public: |
| 518 DECLARE_INSTRUCTION(ControlInstruction) | 521 DECLARE_INSTRUCTION(ControlInstruction) |
| 519 virtual bool IsControl() const { return true; } | 522 virtual bool IsControl() const { return true; } |
| 520 | 523 |
| 521 int true_block_id() const { return true_block_id_; } | 524 int true_block_id() const { return true_block_id_; } |
| 522 int false_block_id() const { return false_block_id_; } | 525 int false_block_id() const { return false_block_id_; } |
| 523 void SetBranchTargets(int true_block_id, int false_block_id) { | 526 void SetBranchTargets(int true_block_id, int false_block_id) { |
| 524 true_block_id_ = true_block_id; | 527 true_block_id_ = true_block_id; |
| 525 false_block_id_ = false_block_id; | 528 false_block_id_ = false_block_id; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 563 DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at") | 566 DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at") |
| 564 | 567 |
| 565 LOperand* arguments() { return inputs_[0]; } | 568 LOperand* arguments() { return inputs_[0]; } |
| 566 LOperand* length() { return inputs_[1]; } | 569 LOperand* length() { return inputs_[1]; } |
| 567 LOperand* index() { return inputs_[2]; } | 570 LOperand* index() { return inputs_[2]; } |
| 568 | 571 |
| 569 virtual void PrintDataTo(StringStream* stream); | 572 virtual void PrintDataTo(StringStream* stream); |
| 570 }; | 573 }; |
| 571 | 574 |
| 572 | 575 |
| 573 class LArgumentsLength: public LTemplateInstruction<1, 1> { | 576 class LArgumentsLength: public LTemplateInstruction<1, 1, 0> { |
| 574 public: | 577 public: |
| 575 explicit LArgumentsLength(LOperand* elements) { | 578 explicit LArgumentsLength(LOperand* elements) { |
| 576 inputs_[0] = elements; | 579 inputs_[0] = elements; |
| 577 } | 580 } |
| 578 | 581 |
| 579 DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length") | 582 DECLARE_CONCRETE_INSTRUCTION(ArgumentsLength, "arguments-length") |
| 580 }; | 583 }; |
| 581 | 584 |
| 582 | 585 |
| 583 class LArgumentsElements: public LTemplateInstruction<1, 0, 0> { | 586 class LArgumentsElements: public LTemplateInstruction<1, 0, 0> { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 inputs_[0] = left; | 623 inputs_[0] = left; |
| 621 inputs_[1] = right; | 624 inputs_[1] = right; |
| 622 temps_[0] = temp; | 625 temps_[0] = temp; |
| 623 } | 626 } |
| 624 | 627 |
| 625 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") | 628 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") |
| 626 DECLARE_HYDROGEN_ACCESSOR(Mul) | 629 DECLARE_HYDROGEN_ACCESSOR(Mul) |
| 627 }; | 630 }; |
| 628 | 631 |
| 629 | 632 |
| 630 class LCmpID: public LTemplateInstruction<1, 2> { | 633 class LCmpID: public LTemplateInstruction<1, 2, 0> { |
| 631 public: | 634 public: |
| 632 LCmpID(LOperand* left, LOperand* right) { | 635 LCmpID(LOperand* left, LOperand* right) { |
| 633 inputs_[0] = left; | 636 inputs_[0] = left; |
| 634 inputs_[1] = right; | 637 inputs_[1] = right; |
| 635 } | 638 } |
| 636 | 639 |
| 637 DECLARE_CONCRETE_INSTRUCTION(CmpID, "cmp-id") | 640 DECLARE_CONCRETE_INSTRUCTION(CmpID, "cmp-id") |
| 638 DECLARE_HYDROGEN_ACCESSOR(Compare) | 641 DECLARE_HYDROGEN_ACCESSOR(Compare) |
| 639 | 642 |
| 640 Token::Value op() const { return hydrogen()->token(); } | 643 Token::Value op() const { return hydrogen()->token(); } |
| 641 bool is_double() const { | 644 bool is_double() const { |
| 642 return hydrogen()->GetInputRepresentation().IsDouble(); | 645 return hydrogen()->GetInputRepresentation().IsDouble(); |
| 643 } | 646 } |
| 644 }; | 647 }; |
| 645 | 648 |
| 646 | 649 |
| 647 class LCmpIDAndBranch: public LControlInstruction<2> { | 650 class LCmpIDAndBranch: public LControlInstruction<2, 0> { |
| 648 public: | 651 public: |
| 649 LCmpIDAndBranch(LOperand* left, LOperand* right) { | 652 LCmpIDAndBranch(LOperand* left, LOperand* right) { |
| 650 inputs_[0] = left; | 653 inputs_[0] = left; |
| 651 inputs_[1] = right; | 654 inputs_[1] = right; |
| 652 } | 655 } |
| 653 | 656 |
| 654 DECLARE_CONCRETE_INSTRUCTION(CmpIDAndBranch, "cmp-id-and-branch") | 657 DECLARE_CONCRETE_INSTRUCTION(CmpIDAndBranch, "cmp-id-and-branch") |
| 655 DECLARE_HYDROGEN_ACCESSOR(Compare) | 658 DECLARE_HYDROGEN_ACCESSOR(Compare) |
| 656 | 659 |
| 657 Token::Value op() const { return hydrogen()->token(); } | 660 Token::Value op() const { return hydrogen()->token(); } |
| 658 bool is_double() const { | 661 bool is_double() const { |
| 659 return hydrogen()->GetInputRepresentation().IsDouble(); | 662 return hydrogen()->GetInputRepresentation().IsDouble(); |
| 660 } | 663 } |
| 661 | 664 |
| 662 virtual void PrintDataTo(StringStream* stream); | 665 virtual void PrintDataTo(StringStream* stream); |
| 663 }; | 666 }; |
| 664 | 667 |
| 665 | 668 |
| 666 class LUnaryMathOperation: public LTemplateInstruction<1, 1> { | 669 class LUnaryMathOperation: public LTemplateInstruction<1, 1, 0> { |
| 667 public: | 670 public: |
| 668 explicit LUnaryMathOperation(LOperand* value) { | 671 explicit LUnaryMathOperation(LOperand* value) { |
| 669 inputs_[0] = value; | 672 inputs_[0] = value; |
| 670 } | 673 } |
| 671 | 674 |
| 672 DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation") | 675 DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation") |
| 673 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) | 676 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) |
| 674 | 677 |
| 675 virtual void PrintDataTo(StringStream* stream); | 678 virtual void PrintDataTo(StringStream* stream); |
| 676 BuiltinFunctionId op() const { return hydrogen()->op(); } | 679 BuiltinFunctionId op() const { return hydrogen()->op(); } |
| 677 }; | 680 }; |
| 678 | 681 |
| 679 | 682 |
| 680 class LCmpJSObjectEq: public LTemplateInstruction<1, 2> { | 683 class LCmpJSObjectEq: public LTemplateInstruction<1, 2, 0> { |
| 681 public: | 684 public: |
| 682 LCmpJSObjectEq(LOperand* left, LOperand* right) { | 685 LCmpJSObjectEq(LOperand* left, LOperand* right) { |
| 683 inputs_[0] = left; | 686 inputs_[0] = left; |
| 684 inputs_[1] = right; | 687 inputs_[1] = right; |
| 685 } | 688 } |
| 686 | 689 |
| 687 DECLARE_CONCRETE_INSTRUCTION(CmpJSObjectEq, "cmp-jsobject-eq") | 690 DECLARE_CONCRETE_INSTRUCTION(CmpJSObjectEq, "cmp-jsobject-eq") |
| 688 }; | 691 }; |
| 689 | 692 |
| 690 | 693 |
| 691 class LCmpJSObjectEqAndBranch: public LControlInstruction<2> { | 694 class LCmpJSObjectEqAndBranch: public LControlInstruction<2, 0> { |
| 692 public: | 695 public: |
| 693 LCmpJSObjectEqAndBranch(LOperand* left, LOperand* right) { | 696 LCmpJSObjectEqAndBranch(LOperand* left, LOperand* right) { |
| 694 inputs_[0] = left; | 697 inputs_[0] = left; |
| 695 inputs_[1] = right; | 698 inputs_[1] = right; |
| 696 } | 699 } |
| 697 | 700 |
| 698 DECLARE_CONCRETE_INSTRUCTION(CmpJSObjectEqAndBranch, | 701 DECLARE_CONCRETE_INSTRUCTION(CmpJSObjectEqAndBranch, |
| 699 "cmp-jsobject-eq-and-branch") | 702 "cmp-jsobject-eq-and-branch") |
| 700 }; | 703 }; |
| 701 | 704 |
| 702 | 705 |
| 703 class LIsNull: public LTemplateInstruction<1, 1> { | 706 class LIsNull: public LTemplateInstruction<1, 1, 0> { |
| 704 public: | 707 public: |
| 705 explicit LIsNull(LOperand* value) { | 708 explicit LIsNull(LOperand* value) { |
| 706 inputs_[0] = value; | 709 inputs_[0] = value; |
| 707 } | 710 } |
| 708 | 711 |
| 709 DECLARE_CONCRETE_INSTRUCTION(IsNull, "is-null") | 712 DECLARE_CONCRETE_INSTRUCTION(IsNull, "is-null") |
| 710 DECLARE_HYDROGEN_ACCESSOR(IsNull) | 713 DECLARE_HYDROGEN_ACCESSOR(IsNull) |
| 711 | 714 |
| 712 bool is_strict() const { return hydrogen()->is_strict(); } | 715 bool is_strict() const { return hydrogen()->is_strict(); } |
| 713 }; | 716 }; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 747 temps_[0] = temp; | 750 temps_[0] = temp; |
| 748 temps_[1] = temp2; | 751 temps_[1] = temp2; |
| 749 } | 752 } |
| 750 | 753 |
| 751 DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") | 754 DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") |
| 752 | 755 |
| 753 virtual void PrintDataTo(StringStream* stream); | 756 virtual void PrintDataTo(StringStream* stream); |
| 754 }; | 757 }; |
| 755 | 758 |
| 756 | 759 |
| 757 class LIsSmi: public LTemplateInstruction<1, 1> { | 760 class LIsSmi: public LTemplateInstruction<1, 1, 0> { |
| 758 public: | 761 public: |
| 759 explicit LIsSmi(LOperand* value) { | 762 explicit LIsSmi(LOperand* value) { |
| 760 inputs_[0] = value; | 763 inputs_[0] = value; |
| 761 } | 764 } |
| 762 | 765 |
| 763 DECLARE_CONCRETE_INSTRUCTION(IsSmi, "is-smi") | 766 DECLARE_CONCRETE_INSTRUCTION(IsSmi, "is-smi") |
| 764 DECLARE_HYDROGEN_ACCESSOR(IsSmi) | 767 DECLARE_HYDROGEN_ACCESSOR(IsSmi) |
| 765 }; | 768 }; |
| 766 | 769 |
| 767 | 770 |
| 768 class LIsSmiAndBranch: public LControlInstruction<1> { | 771 class LIsSmiAndBranch: public LControlInstruction<1, 0> { |
| 769 public: | 772 public: |
| 770 explicit LIsSmiAndBranch(LOperand* value) { | 773 explicit LIsSmiAndBranch(LOperand* value) { |
| 771 inputs_[0] = value; | 774 inputs_[0] = value; |
| 772 } | 775 } |
| 773 | 776 |
| 774 DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") | 777 DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") |
| 775 | 778 |
| 776 virtual void PrintDataTo(StringStream* stream); | 779 virtual void PrintDataTo(StringStream* stream); |
| 777 }; | 780 }; |
| 778 | 781 |
| 779 | 782 |
| 780 class LHasInstanceType: public LTemplateInstruction<1, 1> { | 783 class LHasInstanceType: public LTemplateInstruction<1, 1, 0> { |
| 781 public: | 784 public: |
| 782 explicit LHasInstanceType(LOperand* value) { | 785 explicit LHasInstanceType(LOperand* value) { |
| 783 inputs_[0] = value; | 786 inputs_[0] = value; |
| 784 } | 787 } |
| 785 | 788 |
| 786 DECLARE_CONCRETE_INSTRUCTION(HasInstanceType, "has-instance-type") | 789 DECLARE_CONCRETE_INSTRUCTION(HasInstanceType, "has-instance-type") |
| 787 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType) | 790 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType) |
| 788 }; | 791 }; |
| 789 | 792 |
| 790 | 793 |
| 791 class LHasInstanceTypeAndBranch: public LControlInstruction<1, 1> { | 794 class LHasInstanceTypeAndBranch: public LControlInstruction<1, 0> { |
| 792 public: | 795 public: |
| 793 LHasInstanceTypeAndBranch(LOperand* value, LOperand* temp) { | 796 explicit LHasInstanceTypeAndBranch(LOperand* value) { |
| 794 inputs_[0] = value; | 797 inputs_[0] = value; |
| 795 temps_[0] = temp; | |
| 796 } | 798 } |
| 797 | 799 |
| 798 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, | 800 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, |
| 799 "has-instance-type-and-branch") | 801 "has-instance-type-and-branch") |
| 800 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType) | 802 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType) |
| 801 | 803 |
| 802 virtual void PrintDataTo(StringStream* stream); | 804 virtual void PrintDataTo(StringStream* stream); |
| 803 }; | 805 }; |
| 804 | 806 |
| 805 | 807 |
| 806 class LHasCachedArrayIndex: public LTemplateInstruction<1, 1> { | 808 class LHasCachedArrayIndex: public LTemplateInstruction<1, 1, 0> { |
| 807 public: | 809 public: |
| 808 explicit LHasCachedArrayIndex(LOperand* value) { | 810 explicit LHasCachedArrayIndex(LOperand* value) { |
| 809 inputs_[0] = value; | 811 inputs_[0] = value; |
| 810 } | 812 } |
| 811 | 813 |
| 812 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndex, "has-cached-array-index") | 814 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndex, "has-cached-array-index") |
| 813 DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndex) | 815 DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndex) |
| 814 }; | 816 }; |
| 815 | 817 |
| 816 | 818 |
| 817 class LHasCachedArrayIndexAndBranch: public LControlInstruction<1> { | 819 class LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> { |
| 818 public: | 820 public: |
| 819 explicit LHasCachedArrayIndexAndBranch(LOperand* value) { | 821 explicit LHasCachedArrayIndexAndBranch(LOperand* value) { |
| 820 inputs_[0] = value; | 822 inputs_[0] = value; |
| 821 } | 823 } |
| 822 | 824 |
| 823 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, | 825 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, |
| 824 "has-cached-array-index-and-branch") | 826 "has-cached-array-index-and-branch") |
| 825 virtual void PrintDataTo(StringStream* stream); | 827 virtual void PrintDataTo(StringStream* stream); |
| 826 }; | 828 }; |
| 827 | 829 |
| 828 | 830 |
| 829 class LClassOfTest: public LTemplateInstruction<1, 1, 1> { | 831 class LClassOfTest: public LTemplateInstruction<1, 1, 1> { |
| 830 public: | 832 public: |
| 831 LClassOfTest(LOperand* value, LOperand* temp) { | 833 LClassOfTest(LOperand* value, LOperand* temp) { |
| 832 inputs_[0] = value; | 834 inputs_[0] = value; |
| 833 temps_[0] = temp; | 835 temps_[0] = temp; |
| 834 } | 836 } |
| 835 | 837 |
| 836 DECLARE_CONCRETE_INSTRUCTION(ClassOfTest, "class-of-test") | 838 DECLARE_CONCRETE_INSTRUCTION(ClassOfTest, "class-of-test") |
| 837 DECLARE_HYDROGEN_ACCESSOR(ClassOfTest) | 839 DECLARE_HYDROGEN_ACCESSOR(ClassOfTest) |
| 838 | 840 |
| 839 virtual void PrintDataTo(StringStream* stream); | 841 virtual void PrintDataTo(StringStream* stream); |
| 840 }; | 842 }; |
| 841 | 843 |
| 842 | 844 |
| 843 class LClassOfTestAndBranch: public LControlInstruction<1, 2> { | 845 class LClassOfTestAndBranch: public LControlInstruction<1, 1> { |
| 844 public: | 846 public: |
| 845 LClassOfTestAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) { | 847 LClassOfTestAndBranch(LOperand* value, LOperand* temp) { |
| 846 inputs_[0] = value; | 848 inputs_[0] = value; |
| 847 temps_[0] = temp; | 849 temps_[0] = temp; |
| 848 temps_[1] = temp2; | |
| 849 } | 850 } |
| 850 | 851 |
| 851 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, | 852 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, |
| 852 "class-of-test-and-branch") | 853 "class-of-test-and-branch") |
| 853 DECLARE_HYDROGEN_ACCESSOR(ClassOfTest) | 854 DECLARE_HYDROGEN_ACCESSOR(ClassOfTest) |
| 854 | 855 |
| 855 virtual void PrintDataTo(StringStream* stream); | 856 virtual void PrintDataTo(StringStream* stream); |
| 856 }; | 857 }; |
| 857 | 858 |
| 858 | 859 |
| 859 class LCmpT: public LTemplateInstruction<1, 2> { | 860 class LCmpT: public LTemplateInstruction<1, 2, 0> { |
| 860 public: | 861 public: |
| 861 LCmpT(LOperand* left, LOperand* right) { | 862 LCmpT(LOperand* left, LOperand* right) { |
| 862 inputs_[0] = left; | 863 inputs_[0] = left; |
| 863 inputs_[1] = right; | 864 inputs_[1] = right; |
| 864 } | 865 } |
| 865 | 866 |
| 866 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") | 867 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") |
| 867 DECLARE_HYDROGEN_ACCESSOR(Compare) | 868 DECLARE_HYDROGEN_ACCESSOR(Compare) |
| 868 | 869 |
| 869 Token::Value op() const { return hydrogen()->token(); } | 870 Token::Value op() const { return hydrogen()->token(); } |
| 870 }; | 871 }; |
| 871 | 872 |
| 872 | 873 |
| 873 class LCmpTAndBranch: public LControlInstruction<2> { | 874 class LCmpTAndBranch: public LControlInstruction<2, 0> { |
| 874 public: | 875 public: |
| 875 LCmpTAndBranch(LOperand* left, LOperand* right) { | 876 LCmpTAndBranch(LOperand* left, LOperand* right) { |
| 876 inputs_[0] = left; | 877 inputs_[0] = left; |
| 877 inputs_[1] = right; | 878 inputs_[1] = right; |
| 878 } | 879 } |
| 879 | 880 |
| 880 DECLARE_CONCRETE_INSTRUCTION(CmpTAndBranch, "cmp-t-and-branch") | 881 DECLARE_CONCRETE_INSTRUCTION(CmpTAndBranch, "cmp-t-and-branch") |
| 881 DECLARE_HYDROGEN_ACCESSOR(Compare) | 882 DECLARE_HYDROGEN_ACCESSOR(Compare) |
| 882 | 883 |
| 883 Token::Value op() const { return hydrogen()->token(); } | 884 Token::Value op() const { return hydrogen()->token(); } |
| 884 }; | 885 }; |
| 885 | 886 |
| 886 | 887 |
| 887 class LInstanceOf: public LTemplateInstruction<1, 2> { | 888 class LInstanceOf: public LTemplateInstruction<1, 2, 0> { |
| 888 public: | 889 public: |
| 889 LInstanceOf(LOperand* left, LOperand* right) { | 890 LInstanceOf(LOperand* left, LOperand* right) { |
| 890 inputs_[0] = left; | 891 inputs_[0] = left; |
| 891 inputs_[1] = right; | 892 inputs_[1] = right; |
| 892 } | 893 } |
| 893 | 894 |
| 894 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") | 895 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") |
| 895 }; | 896 }; |
| 896 | 897 |
| 897 | 898 |
| 898 class LInstanceOfAndBranch: public LControlInstruction<2> { | 899 class LInstanceOfAndBranch: public LControlInstruction<2, 0> { |
| 899 public: | 900 public: |
| 900 LInstanceOfAndBranch(LOperand* left, LOperand* right) { | 901 LInstanceOfAndBranch(LOperand* left, LOperand* right) { |
| 901 inputs_[0] = left; | 902 inputs_[0] = left; |
| 902 inputs_[1] = right; | 903 inputs_[1] = right; |
| 903 } | 904 } |
| 904 | 905 |
| 905 DECLARE_CONCRETE_INSTRUCTION(InstanceOfAndBranch, "instance-of-and-branch") | 906 DECLARE_CONCRETE_INSTRUCTION(InstanceOfAndBranch, "instance-of-and-branch") |
| 906 }; | 907 }; |
| 907 | 908 |
| 908 | 909 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 928 inputs_[1] = length; | 929 inputs_[1] = length; |
| 929 } | 930 } |
| 930 | 931 |
| 931 LOperand* index() { return inputs_[0]; } | 932 LOperand* index() { return inputs_[0]; } |
| 932 LOperand* length() { return inputs_[1]; } | 933 LOperand* length() { return inputs_[1]; } |
| 933 | 934 |
| 934 DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check") | 935 DECLARE_CONCRETE_INSTRUCTION(BoundsCheck, "bounds-check") |
| 935 }; | 936 }; |
| 936 | 937 |
| 937 | 938 |
| 938 class LBitI: public LTemplateInstruction<1, 2> { | 939 class LBitI: public LTemplateInstruction<1, 2, 0> { |
| 939 public: | 940 public: |
| 940 LBitI(Token::Value op, LOperand* left, LOperand* right) | 941 LBitI(Token::Value op, LOperand* left, LOperand* right) |
| 941 : op_(op) { | 942 : op_(op) { |
| 942 inputs_[0] = left; | 943 inputs_[0] = left; |
| 943 inputs_[1] = right; | 944 inputs_[1] = right; |
| 944 } | 945 } |
| 945 | 946 |
| 946 Token::Value op() const { return op_; } | 947 Token::Value op() const { return op_; } |
| 947 | 948 |
| 948 DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i") | 949 DECLARE_CONCRETE_INSTRUCTION(BitI, "bit-i") |
| 949 | 950 |
| 950 private: | 951 private: |
| 951 Token::Value op_; | 952 Token::Value op_; |
| 952 }; | 953 }; |
| 953 | 954 |
| 954 | 955 |
| 955 class LShiftI: public LTemplateInstruction<1, 2> { | 956 class LShiftI: public LTemplateInstruction<1, 2, 0> { |
| 956 public: | 957 public: |
| 957 LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt) | 958 LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt) |
| 958 : op_(op), can_deopt_(can_deopt) { | 959 : op_(op), can_deopt_(can_deopt) { |
| 959 inputs_[0] = left; | 960 inputs_[0] = left; |
| 960 inputs_[1] = right; | 961 inputs_[1] = right; |
| 961 } | 962 } |
| 962 | 963 |
| 963 Token::Value op() const { return op_; } | 964 Token::Value op() const { return op_; } |
| 964 | 965 |
| 965 bool can_deopt() const { return can_deopt_; } | 966 bool can_deopt() const { return can_deopt_; } |
| 966 | 967 |
| 967 DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i") | 968 DECLARE_CONCRETE_INSTRUCTION(ShiftI, "shift-i") |
| 968 | 969 |
| 969 private: | 970 private: |
| 970 Token::Value op_; | 971 Token::Value op_; |
| 971 bool can_deopt_; | 972 bool can_deopt_; |
| 972 }; | 973 }; |
| 973 | 974 |
| 974 | 975 |
| 975 class LSubI: public LTemplateInstruction<1, 2> { | 976 class LSubI: public LTemplateInstruction<1, 2, 0> { |
| 976 public: | 977 public: |
| 977 LSubI(LOperand* left, LOperand* right) { | 978 LSubI(LOperand* left, LOperand* right) { |
| 978 inputs_[0] = left; | 979 inputs_[0] = left; |
| 979 inputs_[1] = right; | 980 inputs_[1] = right; |
| 980 } | 981 } |
| 981 | 982 |
| 982 DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i") | 983 DECLARE_CONCRETE_INSTRUCTION(SubI, "sub-i") |
| 983 DECLARE_HYDROGEN_ACCESSOR(Sub) | 984 DECLARE_HYDROGEN_ACCESSOR(Sub) |
| 984 }; | 985 }; |
| 985 | 986 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1021 explicit LConstantT(Handle<Object> value) : value_(value) { } | 1022 explicit LConstantT(Handle<Object> value) : value_(value) { } |
| 1022 Handle<Object> value() const { return value_; } | 1023 Handle<Object> value() const { return value_; } |
| 1023 | 1024 |
| 1024 DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t") | 1025 DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t") |
| 1025 | 1026 |
| 1026 private: | 1027 private: |
| 1027 Handle<Object> value_; | 1028 Handle<Object> value_; |
| 1028 }; | 1029 }; |
| 1029 | 1030 |
| 1030 | 1031 |
| 1031 class LBranch: public LControlInstruction<1> { | 1032 class LBranch: public LControlInstruction<1, 0> { |
| 1032 public: | 1033 public: |
| 1033 explicit LBranch(LOperand* value) { | 1034 explicit LBranch(LOperand* value) { |
| 1034 inputs_[0] = value; | 1035 inputs_[0] = value; |
| 1035 } | 1036 } |
| 1036 | 1037 |
| 1037 DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") | 1038 DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") |
| 1038 DECLARE_HYDROGEN_ACCESSOR(Value) | 1039 DECLARE_HYDROGEN_ACCESSOR(Value) |
| 1039 | 1040 |
| 1040 virtual void PrintDataTo(StringStream* stream); | 1041 virtual void PrintDataTo(StringStream* stream); |
| 1041 }; | 1042 }; |
| 1042 | 1043 |
| 1043 | 1044 |
| 1044 class LCmpMapAndBranch: public LTemplateInstruction<0, 1> { | 1045 class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> { |
| 1045 public: | 1046 public: |
| 1046 explicit LCmpMapAndBranch(LOperand* value) { | 1047 explicit LCmpMapAndBranch(LOperand* value) { |
| 1047 inputs_[0] = value; | 1048 inputs_[0] = value; |
| 1048 } | 1049 } |
| 1049 | 1050 |
| 1050 DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch") | 1051 DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch") |
| 1051 DECLARE_HYDROGEN_ACCESSOR(CompareMapAndBranch) | 1052 DECLARE_HYDROGEN_ACCESSOR(CompareMap) |
| 1052 | 1053 |
| 1053 virtual bool IsControl() const { return true; } | 1054 virtual bool IsControl() const { return true; } |
| 1054 | 1055 |
| 1055 Handle<Map> map() const { return hydrogen()->map(); } | 1056 Handle<Map> map() const { return hydrogen()->map(); } |
| 1056 int true_block_id() const { | 1057 int true_block_id() const { |
| 1057 return hydrogen()->true_destination()->block_id(); | 1058 return hydrogen()->FirstSuccessor()->block_id(); |
| 1058 } | 1059 } |
| 1059 int false_block_id() const { | 1060 int false_block_id() const { |
| 1060 return hydrogen()->false_destination()->block_id(); | 1061 return hydrogen()->SecondSuccessor()->block_id(); |
| 1061 } | 1062 } |
| 1062 }; | 1063 }; |
| 1063 | 1064 |
| 1064 | 1065 |
| 1065 class LJSArrayLength: public LTemplateInstruction<1, 1> { | 1066 class LJSArrayLength: public LTemplateInstruction<1, 1, 0> { |
| 1066 public: | 1067 public: |
| 1067 explicit LJSArrayLength(LOperand* value) { | 1068 explicit LJSArrayLength(LOperand* value) { |
| 1068 inputs_[0] = value; | 1069 inputs_[0] = value; |
| 1069 } | 1070 } |
| 1070 | 1071 |
| 1071 DECLARE_CONCRETE_INSTRUCTION(JSArrayLength, "js-array-length") | 1072 DECLARE_CONCRETE_INSTRUCTION(JSArrayLength, "js-array-length") |
| 1072 DECLARE_HYDROGEN_ACCESSOR(JSArrayLength) | 1073 DECLARE_HYDROGEN_ACCESSOR(JSArrayLength) |
| 1073 }; | 1074 }; |
| 1074 | 1075 |
| 1075 | 1076 |
| 1076 class LFixedArrayLength: public LTemplateInstruction<1, 1> { | 1077 class LFixedArrayLength: public LTemplateInstruction<1, 1, 0> { |
| 1077 public: | 1078 public: |
| 1078 explicit LFixedArrayLength(LOperand* value) { | 1079 explicit LFixedArrayLength(LOperand* value) { |
| 1079 inputs_[0] = value; | 1080 inputs_[0] = value; |
| 1080 } | 1081 } |
| 1081 | 1082 |
| 1082 DECLARE_CONCRETE_INSTRUCTION(FixedArrayLength, "fixed-array-length") | 1083 DECLARE_CONCRETE_INSTRUCTION(FixedArrayLength, "fixed-array-length") |
| 1083 DECLARE_HYDROGEN_ACCESSOR(FixedArrayLength) | 1084 DECLARE_HYDROGEN_ACCESSOR(FixedArrayLength) |
| 1084 }; | 1085 }; |
| 1085 | 1086 |
| 1086 | 1087 |
| 1087 class LValueOf: public LTemplateInstruction<1, 1, 1> { | 1088 class LValueOf: public LTemplateInstruction<1, 1, 1> { |
| 1088 public: | 1089 public: |
| 1089 LValueOf(LOperand* value, LOperand* temp) { | 1090 LValueOf(LOperand* value, LOperand* temp) { |
| 1090 inputs_[0] = value; | 1091 inputs_[0] = value; |
| 1091 temps_[0] = temp; | 1092 temps_[0] = temp; |
| 1092 } | 1093 } |
| 1093 | 1094 |
| 1094 DECLARE_CONCRETE_INSTRUCTION(ValueOf, "value-of") | 1095 DECLARE_CONCRETE_INSTRUCTION(ValueOf, "value-of") |
| 1095 DECLARE_HYDROGEN_ACCESSOR(ValueOf) | 1096 DECLARE_HYDROGEN_ACCESSOR(ValueOf) |
| 1096 }; | 1097 }; |
| 1097 | 1098 |
| 1098 | 1099 |
| 1099 class LThrow: public LTemplateInstruction<0, 1> { | 1100 class LThrow: public LTemplateInstruction<0, 1, 0> { |
| 1100 public: | 1101 public: |
| 1101 explicit LThrow(LOperand* value) { | 1102 explicit LThrow(LOperand* value) { |
| 1102 inputs_[0] = value; | 1103 inputs_[0] = value; |
| 1103 } | 1104 } |
| 1104 | 1105 |
| 1105 DECLARE_CONCRETE_INSTRUCTION(Throw, "throw") | 1106 DECLARE_CONCRETE_INSTRUCTION(Throw, "throw") |
| 1106 }; | 1107 }; |
| 1107 | 1108 |
| 1108 | 1109 |
| 1109 class LBitNotI: public LTemplateInstruction<1, 1> { | 1110 class LBitNotI: public LTemplateInstruction<1, 1, 0> { |
| 1110 public: | 1111 public: |
| 1111 explicit LBitNotI(LOperand* value) { | 1112 explicit LBitNotI(LOperand* value) { |
| 1112 inputs_[0] = value; | 1113 inputs_[0] = value; |
| 1113 } | 1114 } |
| 1114 | 1115 |
| 1115 DECLARE_CONCRETE_INSTRUCTION(BitNotI, "bit-not-i") | 1116 DECLARE_CONCRETE_INSTRUCTION(BitNotI, "bit-not-i") |
| 1116 }; | 1117 }; |
| 1117 | 1118 |
| 1118 | 1119 |
| 1119 class LAddI: public LTemplateInstruction<1, 2> { | 1120 class LAddI: public LTemplateInstruction<1, 2, 0> { |
| 1120 public: | 1121 public: |
| 1121 LAddI(LOperand* left, LOperand* right) { | 1122 LAddI(LOperand* left, LOperand* right) { |
| 1122 inputs_[0] = left; | 1123 inputs_[0] = left; |
| 1123 inputs_[1] = right; | 1124 inputs_[1] = right; |
| 1124 } | 1125 } |
| 1125 | 1126 |
| 1126 DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i") | 1127 DECLARE_CONCRETE_INSTRUCTION(AddI, "add-i") |
| 1127 DECLARE_HYDROGEN_ACCESSOR(Add) | 1128 DECLARE_HYDROGEN_ACCESSOR(Add) |
| 1128 }; | 1129 }; |
| 1129 | 1130 |
| 1130 | 1131 |
| 1131 class LPower: public LTemplateInstruction<1, 2> { | 1132 class LPower: public LTemplateInstruction<1, 2, 0> { |
| 1132 public: | 1133 public: |
| 1133 LPower(LOperand* left, LOperand* right) { | 1134 LPower(LOperand* left, LOperand* right) { |
| 1134 inputs_[0] = left; | 1135 inputs_[0] = left; |
| 1135 inputs_[1] = right; | 1136 inputs_[1] = right; |
| 1136 } | 1137 } |
| 1137 | 1138 |
| 1138 DECLARE_CONCRETE_INSTRUCTION(Power, "power") | 1139 DECLARE_CONCRETE_INSTRUCTION(Power, "power") |
| 1139 DECLARE_HYDROGEN_ACCESSOR(Power) | 1140 DECLARE_HYDROGEN_ACCESSOR(Power) |
| 1140 }; | 1141 }; |
| 1141 | 1142 |
| 1142 | 1143 |
| 1143 class LArithmeticD: public LTemplateInstruction<1, 2> { | 1144 class LArithmeticD: public LTemplateInstruction<1, 2, 0> { |
| 1144 public: | 1145 public: |
| 1145 LArithmeticD(Token::Value op, LOperand* left, LOperand* right) | 1146 LArithmeticD(Token::Value op, LOperand* left, LOperand* right) |
| 1146 : op_(op) { | 1147 : op_(op) { |
| 1147 inputs_[0] = left; | 1148 inputs_[0] = left; |
| 1148 inputs_[1] = right; | 1149 inputs_[1] = right; |
| 1149 } | 1150 } |
| 1150 | 1151 |
| 1151 Token::Value op() const { return op_; } | 1152 Token::Value op() const { return op_; } |
| 1152 | 1153 |
| 1153 virtual void CompileToNative(LCodeGen* generator); | 1154 virtual void CompileToNative(LCodeGen* generator); |
| 1154 virtual const char* Mnemonic() const; | 1155 virtual const char* Mnemonic() const; |
| 1155 | 1156 |
| 1156 private: | 1157 private: |
| 1157 Token::Value op_; | 1158 Token::Value op_; |
| 1158 }; | 1159 }; |
| 1159 | 1160 |
| 1160 | 1161 |
| 1161 class LArithmeticT: public LTemplateInstruction<1, 2> { | 1162 class LArithmeticT: public LTemplateInstruction<1, 2, 0> { |
| 1162 public: | 1163 public: |
| 1163 LArithmeticT(Token::Value op, LOperand* left, LOperand* right) | 1164 LArithmeticT(Token::Value op, LOperand* left, LOperand* right) |
| 1164 : op_(op) { | 1165 : op_(op) { |
| 1165 inputs_[0] = left; | 1166 inputs_[0] = left; |
| 1166 inputs_[1] = right; | 1167 inputs_[1] = right; |
| 1167 } | 1168 } |
| 1168 | 1169 |
| 1169 virtual void CompileToNative(LCodeGen* generator); | 1170 virtual void CompileToNative(LCodeGen* generator); |
| 1170 virtual const char* Mnemonic() const; | 1171 virtual const char* Mnemonic() const; |
| 1171 | 1172 |
| 1172 Token::Value op() const { return op_; } | 1173 Token::Value op() const { return op_; } |
| 1173 | 1174 |
| 1174 private: | 1175 private: |
| 1175 Token::Value op_; | 1176 Token::Value op_; |
| 1176 }; | 1177 }; |
| 1177 | 1178 |
| 1178 | 1179 |
| 1179 class LReturn: public LTemplateInstruction<0, 1> { | 1180 class LReturn: public LTemplateInstruction<0, 1, 0> { |
| 1180 public: | 1181 public: |
| 1181 explicit LReturn(LOperand* value) { | 1182 explicit LReturn(LOperand* value) { |
| 1182 inputs_[0] = value; | 1183 inputs_[0] = value; |
| 1183 } | 1184 } |
| 1184 | 1185 |
| 1185 DECLARE_CONCRETE_INSTRUCTION(Return, "return") | 1186 DECLARE_CONCRETE_INSTRUCTION(Return, "return") |
| 1186 }; | 1187 }; |
| 1187 | 1188 |
| 1188 | 1189 |
| 1189 class LLoadNamedField: public LTemplateInstruction<1, 1> { | 1190 class LLoadNamedField: public LTemplateInstruction<1, 1, 0> { |
| 1190 public: | 1191 public: |
| 1191 explicit LLoadNamedField(LOperand* object) { | 1192 explicit LLoadNamedField(LOperand* object) { |
| 1192 inputs_[0] = object; | 1193 inputs_[0] = object; |
| 1193 } | 1194 } |
| 1194 | 1195 |
| 1195 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") | 1196 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") |
| 1196 DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) | 1197 DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) |
| 1197 }; | 1198 }; |
| 1198 | 1199 |
| 1199 | 1200 |
| 1200 class LLoadNamedGeneric: public LTemplateInstruction<1, 1> { | 1201 class LLoadNamedGeneric: public LTemplateInstruction<1, 1, 0> { |
| 1201 public: | 1202 public: |
| 1202 explicit LLoadNamedGeneric(LOperand* object) { | 1203 explicit LLoadNamedGeneric(LOperand* object) { |
| 1203 inputs_[0] = object; | 1204 inputs_[0] = object; |
| 1204 } | 1205 } |
| 1205 | 1206 |
| 1206 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") | 1207 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") |
| 1207 DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) | 1208 DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) |
| 1208 | 1209 |
| 1209 LOperand* object() { return inputs_[0]; } | 1210 LOperand* object() { return inputs_[0]; } |
| 1210 Handle<Object> name() const { return hydrogen()->name(); } | 1211 Handle<Object> name() const { return hydrogen()->name(); } |
| 1211 }; | 1212 }; |
| 1212 | 1213 |
| 1213 | 1214 |
| 1214 class LLoadFunctionPrototype: public LTemplateInstruction<1, 1, 1> { | 1215 class LLoadFunctionPrototype: public LTemplateInstruction<1, 1, 1> { |
| 1215 public: | 1216 public: |
| 1216 LLoadFunctionPrototype(LOperand* function, LOperand* temp) { | 1217 LLoadFunctionPrototype(LOperand* function, LOperand* temp) { |
| 1217 inputs_[0] = function; | 1218 inputs_[0] = function; |
| 1218 temps_[0] = temp; | 1219 temps_[0] = temp; |
| 1219 } | 1220 } |
| 1220 | 1221 |
| 1221 DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype") | 1222 DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype, "load-function-prototype") |
| 1222 DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype) | 1223 DECLARE_HYDROGEN_ACCESSOR(LoadFunctionPrototype) |
| 1223 | 1224 |
| 1224 LOperand* function() { return inputs_[0]; } | 1225 LOperand* function() { return inputs_[0]; } |
| 1225 }; | 1226 }; |
| 1226 | 1227 |
| 1227 | 1228 |
| 1228 class LLoadElements: public LTemplateInstruction<1, 1> { | 1229 class LLoadElements: public LTemplateInstruction<1, 1, 0> { |
| 1229 public: | 1230 public: |
| 1230 explicit LLoadElements(LOperand* object) { | 1231 explicit LLoadElements(LOperand* object) { |
| 1231 inputs_[0] = object; | 1232 inputs_[0] = object; |
| 1232 } | 1233 } |
| 1233 | 1234 |
| 1234 DECLARE_CONCRETE_INSTRUCTION(LoadElements, "load-elements") | 1235 DECLARE_CONCRETE_INSTRUCTION(LoadElements, "load-elements") |
| 1235 }; | 1236 }; |
| 1236 | 1237 |
| 1237 | 1238 |
| 1238 class LLoadKeyedFastElement: public LTemplateInstruction<1, 2> { | 1239 class LLoadKeyedFastElement: public LTemplateInstruction<1, 2, 0> { |
| 1239 public: | 1240 public: |
| 1240 LLoadKeyedFastElement(LOperand* elements, LOperand* key) { | 1241 LLoadKeyedFastElement(LOperand* elements, LOperand* key) { |
| 1241 inputs_[0] = elements; | 1242 inputs_[0] = elements; |
| 1242 inputs_[1] = key; | 1243 inputs_[1] = key; |
| 1243 } | 1244 } |
| 1244 | 1245 |
| 1245 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastElement, "load-keyed-fast-element") | 1246 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFastElement, "load-keyed-fast-element") |
| 1246 DECLARE_HYDROGEN_ACCESSOR(LoadKeyedFastElement) | 1247 DECLARE_HYDROGEN_ACCESSOR(LoadKeyedFastElement) |
| 1247 | 1248 |
| 1248 LOperand* elements() { return inputs_[0]; } | 1249 LOperand* elements() { return inputs_[0]; } |
| 1249 LOperand* key() { return inputs_[1]; } | 1250 LOperand* key() { return inputs_[1]; } |
| 1250 }; | 1251 }; |
| 1251 | 1252 |
| 1252 | 1253 |
| 1253 class LLoadKeyedGeneric: public LTemplateInstruction<1, 2> { | 1254 class LLoadKeyedGeneric: public LTemplateInstruction<1, 2, 0> { |
| 1254 public: | 1255 public: |
| 1255 LLoadKeyedGeneric(LOperand* obj, LOperand* key) { | 1256 LLoadKeyedGeneric(LOperand* obj, LOperand* key) { |
| 1256 inputs_[0] = obj; | 1257 inputs_[0] = obj; |
| 1257 inputs_[1] = key; | 1258 inputs_[1] = key; |
| 1258 } | 1259 } |
| 1259 | 1260 |
| 1260 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") | 1261 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") |
| 1261 | 1262 |
| 1262 LOperand* object() { return inputs_[0]; } | 1263 LOperand* object() { return inputs_[0]; } |
| 1263 LOperand* key() { return inputs_[1]; } | 1264 LOperand* key() { return inputs_[1]; } |
| 1264 }; | 1265 }; |
| 1265 | 1266 |
| 1266 | 1267 |
| 1267 class LLoadGlobal: public LTemplateInstruction<1, 0, 0> { | 1268 class LLoadGlobal: public LTemplateInstruction<1, 0, 0> { |
| 1268 public: | 1269 public: |
| 1269 DECLARE_CONCRETE_INSTRUCTION(LoadGlobal, "load-global") | 1270 DECLARE_CONCRETE_INSTRUCTION(LoadGlobal, "load-global") |
| 1270 DECLARE_HYDROGEN_ACCESSOR(LoadGlobal) | 1271 DECLARE_HYDROGEN_ACCESSOR(LoadGlobal) |
| 1271 }; | 1272 }; |
| 1272 | 1273 |
| 1273 | 1274 |
| 1274 class LStoreGlobal: public LTemplateInstruction<0, 1> { | 1275 class LStoreGlobal: public LTemplateInstruction<0, 1, 0> { |
| 1275 public: | 1276 public: |
| 1276 explicit LStoreGlobal(LOperand* value) { | 1277 explicit LStoreGlobal(LOperand* value) { |
| 1277 inputs_[0] = value; | 1278 inputs_[0] = value; |
| 1278 } | 1279 } |
| 1279 | 1280 |
| 1280 DECLARE_CONCRETE_INSTRUCTION(StoreGlobal, "store-global") | 1281 DECLARE_CONCRETE_INSTRUCTION(StoreGlobal, "store-global") |
| 1281 DECLARE_HYDROGEN_ACCESSOR(StoreGlobal) | 1282 DECLARE_HYDROGEN_ACCESSOR(StoreGlobal) |
| 1282 }; | 1283 }; |
| 1283 | 1284 |
| 1284 | 1285 |
| 1285 class LLoadContextSlot: public LTemplateInstruction<1, 0, 0> { | 1286 class LLoadContextSlot: public LTemplateInstruction<1, 0, 0> { |
| 1286 public: | 1287 public: |
| 1287 DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot") | 1288 DECLARE_CONCRETE_INSTRUCTION(LoadContextSlot, "load-context-slot") |
| 1288 DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot) | 1289 DECLARE_HYDROGEN_ACCESSOR(LoadContextSlot) |
| 1289 | 1290 |
| 1290 int context_chain_length() { return hydrogen()->context_chain_length(); } | 1291 int context_chain_length() { return hydrogen()->context_chain_length(); } |
| 1291 int slot_index() { return hydrogen()->slot_index(); } | 1292 int slot_index() { return hydrogen()->slot_index(); } |
| 1292 | 1293 |
| 1293 virtual void PrintDataTo(StringStream* stream); | 1294 virtual void PrintDataTo(StringStream* stream); |
| 1294 }; | 1295 }; |
| 1295 | 1296 |
| 1296 | 1297 |
| 1297 class LPushArgument: public LTemplateInstruction<0, 1> { | 1298 class LPushArgument: public LTemplateInstruction<0, 1, 0> { |
| 1298 public: | 1299 public: |
| 1299 explicit LPushArgument(LOperand* value) { | 1300 explicit LPushArgument(LOperand* value) { |
| 1300 inputs_[0] = value; | 1301 inputs_[0] = value; |
| 1301 } | 1302 } |
| 1302 | 1303 |
| 1303 DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument") | 1304 DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument") |
| 1304 }; | 1305 }; |
| 1305 | 1306 |
| 1306 | 1307 |
| 1307 class LGlobalObject: public LTemplateInstruction<1, 0, 0> { | 1308 class LGlobalObject: public LTemplateInstruction<1, 0, 0> { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1321 DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call-constant-function") | 1322 DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call-constant-function") |
| 1322 DECLARE_HYDROGEN_ACCESSOR(CallConstantFunction) | 1323 DECLARE_HYDROGEN_ACCESSOR(CallConstantFunction) |
| 1323 | 1324 |
| 1324 virtual void PrintDataTo(StringStream* stream); | 1325 virtual void PrintDataTo(StringStream* stream); |
| 1325 | 1326 |
| 1326 Handle<JSFunction> function() { return hydrogen()->function(); } | 1327 Handle<JSFunction> function() { return hydrogen()->function(); } |
| 1327 int arity() const { return hydrogen()->argument_count() - 1; } | 1328 int arity() const { return hydrogen()->argument_count() - 1; } |
| 1328 }; | 1329 }; |
| 1329 | 1330 |
| 1330 | 1331 |
| 1331 class LCallKeyed: public LTemplateInstruction<1, 0, 1> { | 1332 class LCallKeyed: public LTemplateInstruction<1, 1, 0> { |
| 1332 public: | 1333 public: |
| 1333 explicit LCallKeyed(LOperand* temp) { | 1334 explicit LCallKeyed(LOperand* key) { |
| 1334 temps_[0] = temp; | 1335 inputs_[0] = key; |
| 1335 } | 1336 } |
| 1336 | 1337 |
| 1337 DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed") | 1338 DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed") |
| 1338 DECLARE_HYDROGEN_ACCESSOR(CallKeyed) | 1339 DECLARE_HYDROGEN_ACCESSOR(CallKeyed) |
| 1339 | 1340 |
| 1340 virtual void PrintDataTo(StringStream* stream); | 1341 virtual void PrintDataTo(StringStream* stream); |
| 1341 | 1342 |
| 1342 int arity() const { return hydrogen()->argument_count() - 1; } | 1343 int arity() const { return hydrogen()->argument_count() - 1; } |
| 1343 }; | 1344 }; |
| 1344 | 1345 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1381 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call-known-global") | 1382 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call-known-global") |
| 1382 DECLARE_HYDROGEN_ACCESSOR(CallKnownGlobal) | 1383 DECLARE_HYDROGEN_ACCESSOR(CallKnownGlobal) |
| 1383 | 1384 |
| 1384 virtual void PrintDataTo(StringStream* stream); | 1385 virtual void PrintDataTo(StringStream* stream); |
| 1385 | 1386 |
| 1386 Handle<JSFunction> target() const { return hydrogen()->target(); } | 1387 Handle<JSFunction> target() const { return hydrogen()->target(); } |
| 1387 int arity() const { return hydrogen()->argument_count() - 1; } | 1388 int arity() const { return hydrogen()->argument_count() - 1; } |
| 1388 }; | 1389 }; |
| 1389 | 1390 |
| 1390 | 1391 |
| 1391 class LCallNew: public LTemplateInstruction<1, 1> { | 1392 class LCallNew: public LTemplateInstruction<1, 1, 0> { |
| 1392 public: | 1393 public: |
| 1393 explicit LCallNew(LOperand* constructor) { | 1394 explicit LCallNew(LOperand* constructor) { |
| 1394 inputs_[0] = constructor; | 1395 inputs_[0] = constructor; |
| 1395 } | 1396 } |
| 1396 | 1397 |
| 1397 DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") | 1398 DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new") |
| 1398 DECLARE_HYDROGEN_ACCESSOR(CallNew) | 1399 DECLARE_HYDROGEN_ACCESSOR(CallNew) |
| 1399 | 1400 |
| 1400 virtual void PrintDataTo(StringStream* stream); | 1401 virtual void PrintDataTo(StringStream* stream); |
| 1401 | 1402 |
| 1402 int arity() const { return hydrogen()->argument_count() - 1; } | 1403 int arity() const { return hydrogen()->argument_count() - 1; } |
| 1403 }; | 1404 }; |
| 1404 | 1405 |
| 1405 | 1406 |
| 1406 class LCallRuntime: public LTemplateInstruction<1, 0, 0> { | 1407 class LCallRuntime: public LTemplateInstruction<1, 0, 0> { |
| 1407 public: | 1408 public: |
| 1408 DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") | 1409 DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") |
| 1409 DECLARE_HYDROGEN_ACCESSOR(CallRuntime) | 1410 DECLARE_HYDROGEN_ACCESSOR(CallRuntime) |
| 1410 | 1411 |
| 1411 Runtime::Function* function() const { return hydrogen()->function(); } | 1412 Runtime::Function* function() const { return hydrogen()->function(); } |
| 1412 int arity() const { return hydrogen()->argument_count(); } | 1413 int arity() const { return hydrogen()->argument_count(); } |
| 1413 }; | 1414 }; |
| 1414 | 1415 |
| 1415 | 1416 |
| 1416 class LInteger32ToDouble: public LTemplateInstruction<1, 1> { | 1417 class LInteger32ToDouble: public LTemplateInstruction<1, 1, 0> { |
| 1417 public: | 1418 public: |
| 1418 explicit LInteger32ToDouble(LOperand* value) { | 1419 explicit LInteger32ToDouble(LOperand* value) { |
| 1419 inputs_[0] = value; | 1420 inputs_[0] = value; |
| 1420 } | 1421 } |
| 1421 | 1422 |
| 1422 DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double") | 1423 DECLARE_CONCRETE_INSTRUCTION(Integer32ToDouble, "int32-to-double") |
| 1423 }; | 1424 }; |
| 1424 | 1425 |
| 1425 | 1426 |
| 1426 class LNumberTagI: public LTemplateInstruction<1, 1> { | 1427 class LNumberTagI: public LTemplateInstruction<1, 1, 0> { |
| 1427 public: | 1428 public: |
| 1428 explicit LNumberTagI(LOperand* value) { | 1429 explicit LNumberTagI(LOperand* value) { |
| 1429 inputs_[0] = value; | 1430 inputs_[0] = value; |
| 1430 } | 1431 } |
| 1431 | 1432 |
| 1432 DECLARE_CONCRETE_INSTRUCTION(NumberTagI, "number-tag-i") | 1433 DECLARE_CONCRETE_INSTRUCTION(NumberTagI, "number-tag-i") |
| 1433 }; | 1434 }; |
| 1434 | 1435 |
| 1435 | 1436 |
| 1436 class LNumberTagD: public LTemplateInstruction<1, 1, 1> { | 1437 class LNumberTagD: public LTemplateInstruction<1, 1, 1> { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1467 temps_[0] = temp; | 1468 temps_[0] = temp; |
| 1468 } | 1469 } |
| 1469 | 1470 |
| 1470 DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i") | 1471 DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i") |
| 1471 DECLARE_HYDROGEN_ACCESSOR(Change) | 1472 DECLARE_HYDROGEN_ACCESSOR(Change) |
| 1472 | 1473 |
| 1473 bool truncating() { return hydrogen()->CanTruncateToInt32(); } | 1474 bool truncating() { return hydrogen()->CanTruncateToInt32(); } |
| 1474 }; | 1475 }; |
| 1475 | 1476 |
| 1476 | 1477 |
| 1477 class LSmiTag: public LTemplateInstruction<1, 1> { | 1478 class LSmiTag: public LTemplateInstruction<1, 1, 0> { |
| 1478 public: | 1479 public: |
| 1479 explicit LSmiTag(LOperand* value) { | 1480 explicit LSmiTag(LOperand* value) { |
| 1480 inputs_[0] = value; | 1481 inputs_[0] = value; |
| 1481 } | 1482 } |
| 1482 | 1483 |
| 1483 DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag") | 1484 DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag") |
| 1484 }; | 1485 }; |
| 1485 | 1486 |
| 1486 | 1487 |
| 1487 class LNumberUntagD: public LTemplateInstruction<1, 1> { | 1488 class LNumberUntagD: public LTemplateInstruction<1, 1, 0> { |
| 1488 public: | 1489 public: |
| 1489 explicit LNumberUntagD(LOperand* value) { | 1490 explicit LNumberUntagD(LOperand* value) { |
| 1490 inputs_[0] = value; | 1491 inputs_[0] = value; |
| 1491 } | 1492 } |
| 1492 | 1493 |
| 1493 DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag") | 1494 DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag") |
| 1494 }; | 1495 }; |
| 1495 | 1496 |
| 1496 | 1497 |
| 1497 class LSmiUntag: public LTemplateInstruction<1, 1> { | 1498 class LSmiUntag: public LTemplateInstruction<1, 1, 0> { |
| 1498 public: | 1499 public: |
| 1499 LSmiUntag(LOperand* value, bool needs_check) | 1500 LSmiUntag(LOperand* value, bool needs_check) |
| 1500 : needs_check_(needs_check) { | 1501 : needs_check_(needs_check) { |
| 1501 inputs_[0] = value; | 1502 inputs_[0] = value; |
| 1502 } | 1503 } |
| 1503 | 1504 |
| 1504 DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag") | 1505 DECLARE_CONCRETE_INSTRUCTION(SmiUntag, "smi-untag") |
| 1505 | 1506 |
| 1506 bool needs_check() const { return needs_check_; } | 1507 bool needs_check() const { return needs_check_; } |
| 1507 | 1508 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1586 | 1587 |
| 1587 class LStoreKeyedGeneric: public LStoreKeyed { | 1588 class LStoreKeyedGeneric: public LStoreKeyed { |
| 1588 public: | 1589 public: |
| 1589 LStoreKeyedGeneric(LOperand* obj, LOperand* key, LOperand* val) | 1590 LStoreKeyedGeneric(LOperand* obj, LOperand* key, LOperand* val) |
| 1590 : LStoreKeyed(obj, key, val) { } | 1591 : LStoreKeyed(obj, key, val) { } |
| 1591 | 1592 |
| 1592 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") | 1593 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") |
| 1593 }; | 1594 }; |
| 1594 | 1595 |
| 1595 | 1596 |
| 1596 class LCheckFunction: public LTemplateInstruction<0, 1> { | 1597 class LCheckFunction: public LTemplateInstruction<0, 1, 0> { |
| 1597 public: | 1598 public: |
| 1598 explicit LCheckFunction(LOperand* value) { | 1599 explicit LCheckFunction(LOperand* value) { |
| 1599 inputs_[0] = value; | 1600 inputs_[0] = value; |
| 1600 } | 1601 } |
| 1601 | 1602 |
| 1602 DECLARE_CONCRETE_INSTRUCTION(CheckFunction, "check-function") | 1603 DECLARE_CONCRETE_INSTRUCTION(CheckFunction, "check-function") |
| 1603 DECLARE_HYDROGEN_ACCESSOR(CheckFunction) | 1604 DECLARE_HYDROGEN_ACCESSOR(CheckFunction) |
| 1604 }; | 1605 }; |
| 1605 | 1606 |
| 1606 | 1607 |
| 1607 class LCheckInstanceType: public LTemplateInstruction<0, 1, 1> { | 1608 class LCheckInstanceType: public LTemplateInstruction<0, 1, 1> { |
| 1608 public: | 1609 public: |
| 1609 LCheckInstanceType(LOperand* value, LOperand* temp) { | 1610 LCheckInstanceType(LOperand* value, LOperand* temp) { |
| 1610 inputs_[0] = value; | 1611 inputs_[0] = value; |
| 1611 temps_[0] = temp; | 1612 temps_[0] = temp; |
| 1612 } | 1613 } |
| 1613 | 1614 |
| 1614 DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type") | 1615 DECLARE_CONCRETE_INSTRUCTION(CheckInstanceType, "check-instance-type") |
| 1615 DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType) | 1616 DECLARE_HYDROGEN_ACCESSOR(CheckInstanceType) |
| 1616 }; | 1617 }; |
| 1617 | 1618 |
| 1618 | 1619 |
| 1619 class LCheckMap: public LTemplateInstruction<0, 1> { | 1620 class LCheckMap: public LTemplateInstruction<0, 1, 0> { |
| 1620 public: | 1621 public: |
| 1621 explicit LCheckMap(LOperand* value) { | 1622 explicit LCheckMap(LOperand* value) { |
| 1622 inputs_[0] = value; | 1623 inputs_[0] = value; |
| 1623 } | 1624 } |
| 1624 | 1625 |
| 1625 DECLARE_CONCRETE_INSTRUCTION(CheckMap, "check-map") | 1626 DECLARE_CONCRETE_INSTRUCTION(CheckMap, "check-map") |
| 1626 DECLARE_HYDROGEN_ACCESSOR(CheckMap) | 1627 DECLARE_HYDROGEN_ACCESSOR(CheckMap) |
| 1627 }; | 1628 }; |
| 1628 | 1629 |
| 1629 | 1630 |
| 1630 class LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 1> { | 1631 class LCheckPrototypeMaps: public LTemplateInstruction<0, 0, 1> { |
| 1631 public: | 1632 public: |
| 1632 explicit LCheckPrototypeMaps(LOperand* temp) { | 1633 explicit LCheckPrototypeMaps(LOperand* temp) { |
| 1633 temps_[0] = temp; | 1634 temps_[0] = temp; |
| 1634 } | 1635 } |
| 1635 | 1636 |
| 1636 DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps, "check-prototype-maps") | 1637 DECLARE_CONCRETE_INSTRUCTION(CheckPrototypeMaps, "check-prototype-maps") |
| 1637 DECLARE_HYDROGEN_ACCESSOR(CheckPrototypeMaps) | 1638 DECLARE_HYDROGEN_ACCESSOR(CheckPrototypeMaps) |
| 1638 | 1639 |
| 1639 Handle<JSObject> prototype() const { return hydrogen()->prototype(); } | 1640 Handle<JSObject> prototype() const { return hydrogen()->prototype(); } |
| 1640 Handle<JSObject> holder() const { return hydrogen()->holder(); } | 1641 Handle<JSObject> holder() const { return hydrogen()->holder(); } |
| 1641 }; | 1642 }; |
| 1642 | 1643 |
| 1643 | 1644 |
| 1644 class LCheckSmi: public LTemplateInstruction<0, 1> { | 1645 class LCheckSmi: public LTemplateInstruction<0, 1, 0> { |
| 1645 public: | 1646 public: |
| 1646 LCheckSmi(LOperand* value, Condition condition) | 1647 LCheckSmi(LOperand* value, Condition condition) |
| 1647 : condition_(condition) { | 1648 : condition_(condition) { |
| 1648 inputs_[0] = value; | 1649 inputs_[0] = value; |
| 1649 } | 1650 } |
| 1650 | 1651 |
| 1651 Condition condition() const { return condition_; } | 1652 Condition condition() const { return condition_; } |
| 1652 | 1653 |
| 1653 virtual void CompileToNative(LCodeGen* generator); | 1654 virtual void CompileToNative(LCodeGen* generator); |
| 1654 virtual const char* Mnemonic() const { | 1655 virtual const char* Mnemonic() const { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1683 | 1684 |
| 1684 class LFunctionLiteral: public LTemplateInstruction<1, 0, 0> { | 1685 class LFunctionLiteral: public LTemplateInstruction<1, 0, 0> { |
| 1685 public: | 1686 public: |
| 1686 DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") | 1687 DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") |
| 1687 DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) | 1688 DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) |
| 1688 | 1689 |
| 1689 Handle<SharedFunctionInfo> shared_info() { return hydrogen()->shared_info(); } | 1690 Handle<SharedFunctionInfo> shared_info() { return hydrogen()->shared_info(); } |
| 1690 }; | 1691 }; |
| 1691 | 1692 |
| 1692 | 1693 |
| 1693 class LTypeof: public LTemplateInstruction<1, 1> { | 1694 class LTypeof: public LTemplateInstruction<1, 1, 0> { |
| 1694 public: | 1695 public: |
| 1695 explicit LTypeof(LOperand* value) { | 1696 explicit LTypeof(LOperand* value) { |
| 1696 inputs_[0] = value; | 1697 inputs_[0] = value; |
| 1697 } | 1698 } |
| 1698 | 1699 |
| 1699 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") | 1700 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") |
| 1700 }; | 1701 }; |
| 1701 | 1702 |
| 1702 | 1703 |
| 1703 class LTypeofIs: public LTemplateInstruction<1, 1> { | 1704 class LTypeofIs: public LTemplateInstruction<1, 1, 0> { |
| 1704 public: | 1705 public: |
| 1705 explicit LTypeofIs(LOperand* value) { | 1706 explicit LTypeofIs(LOperand* value) { |
| 1706 inputs_[0] = value; | 1707 inputs_[0] = value; |
| 1707 } | 1708 } |
| 1708 | 1709 |
| 1709 DECLARE_CONCRETE_INSTRUCTION(TypeofIs, "typeof-is") | 1710 DECLARE_CONCRETE_INSTRUCTION(TypeofIs, "typeof-is") |
| 1710 DECLARE_HYDROGEN_ACCESSOR(TypeofIs) | 1711 DECLARE_HYDROGEN_ACCESSOR(TypeofIs) |
| 1711 | 1712 |
| 1712 Handle<String> type_literal() { return hydrogen()->type_literal(); } | 1713 Handle<String> type_literal() { return hydrogen()->type_literal(); } |
| 1713 | 1714 |
| 1714 virtual void PrintDataTo(StringStream* stream); | 1715 virtual void PrintDataTo(StringStream* stream); |
| 1715 }; | 1716 }; |
| 1716 | 1717 |
| 1717 | 1718 |
| 1718 class LTypeofIsAndBranch: public LControlInstruction<1> { | 1719 class LTypeofIsAndBranch: public LControlInstruction<1, 0> { |
| 1719 public: | 1720 public: |
| 1720 explicit LTypeofIsAndBranch(LOperand* value) { | 1721 explicit LTypeofIsAndBranch(LOperand* value) { |
| 1721 inputs_[0] = value; | 1722 inputs_[0] = value; |
| 1722 } | 1723 } |
| 1723 | 1724 |
| 1724 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") | 1725 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") |
| 1725 DECLARE_HYDROGEN_ACCESSOR(TypeofIs) | 1726 DECLARE_HYDROGEN_ACCESSOR(TypeofIs) |
| 1726 | 1727 |
| 1727 Handle<String> type_literal() { return hydrogen()->type_literal(); } | 1728 Handle<String> type_literal() { return hydrogen()->type_literal(); } |
| 1728 | 1729 |
| 1729 virtual void PrintDataTo(StringStream* stream); | 1730 virtual void PrintDataTo(StringStream* stream); |
| 1730 }; | 1731 }; |
| 1731 | 1732 |
| 1732 | 1733 |
| 1733 class LDeleteProperty: public LTemplateInstruction<1, 2> { | 1734 class LDeleteProperty: public LTemplateInstruction<1, 2, 0> { |
| 1734 public: | 1735 public: |
| 1735 LDeleteProperty(LOperand* obj, LOperand* key) { | 1736 LDeleteProperty(LOperand* obj, LOperand* key) { |
| 1736 inputs_[0] = obj; | 1737 inputs_[0] = obj; |
| 1737 inputs_[1] = key; | 1738 inputs_[1] = key; |
| 1738 } | 1739 } |
| 1739 | 1740 |
| 1740 DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete-property") | 1741 DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete-property") |
| 1741 | 1742 |
| 1742 LOperand* object() { return inputs_[0]; } | 1743 LOperand* object() { return inputs_[0]; } |
| 1743 LOperand* key() { return inputs_[1]; } | 1744 LOperand* key() { return inputs_[1]; } |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1893 // Operand created by UseRegister is guaranteed to be live until the end of | 1894 // Operand created by UseRegister is guaranteed to be live until the end of |
| 1894 // instruction. This means that register allocator will not reuse it's | 1895 // instruction. This means that register allocator will not reuse it's |
| 1895 // register for any other operand inside instruction. | 1896 // register for any other operand inside instruction. |
| 1896 // Operand created by UseRegisterAtStart is guaranteed to be live only at | 1897 // Operand created by UseRegisterAtStart is guaranteed to be live only at |
| 1897 // instruction start. Register allocator is free to assign the same register | 1898 // instruction start. Register allocator is free to assign the same register |
| 1898 // to some other operand used inside instruction (i.e. temporary or | 1899 // to some other operand used inside instruction (i.e. temporary or |
| 1899 // output). | 1900 // output). |
| 1900 MUST_USE_RESULT LOperand* UseRegister(HValue* value); | 1901 MUST_USE_RESULT LOperand* UseRegister(HValue* value); |
| 1901 MUST_USE_RESULT LOperand* UseRegisterAtStart(HValue* value); | 1902 MUST_USE_RESULT LOperand* UseRegisterAtStart(HValue* value); |
| 1902 | 1903 |
| 1903 // A value in a register that may be trashed. | 1904 // An input operand in a register that may be trashed. |
| 1904 MUST_USE_RESULT LOperand* UseTempRegister(HValue* value); | 1905 MUST_USE_RESULT LOperand* UseTempRegister(HValue* value); |
| 1905 | 1906 |
| 1906 // An operand value in a register or stack slot. | 1907 // An input operand in a register or stack slot. |
| 1907 MUST_USE_RESULT LOperand* Use(HValue* value); | 1908 MUST_USE_RESULT LOperand* Use(HValue* value); |
| 1908 MUST_USE_RESULT LOperand* UseAtStart(HValue* value); | 1909 MUST_USE_RESULT LOperand* UseAtStart(HValue* value); |
| 1909 | 1910 |
| 1910 // An operand value in a register, stack slot or a constant operand. | 1911 // An input operand in a register, stack slot or a constant operand. |
| 1911 MUST_USE_RESULT LOperand* UseOrConstant(HValue* value); | 1912 MUST_USE_RESULT LOperand* UseOrConstant(HValue* value); |
| 1912 MUST_USE_RESULT LOperand* UseOrConstantAtStart(HValue* value); | 1913 MUST_USE_RESULT LOperand* UseOrConstantAtStart(HValue* value); |
| 1913 | 1914 |
| 1914 // An operand value in a register or a constant operand. | 1915 // An input operand in a register or a constant operand. |
| 1915 MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value); | 1916 MUST_USE_RESULT LOperand* UseRegisterOrConstant(HValue* value); |
| 1916 MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value); | 1917 MUST_USE_RESULT LOperand* UseRegisterOrConstantAtStart(HValue* value); |
| 1917 | 1918 |
| 1919 // An input operand in register, stack slot or a constant operand. |
| 1920 // Will not be moved to a register even if one is freely available. |
| 1921 MUST_USE_RESULT LOperand* UseAny(HValue* value); |
| 1922 |
| 1918 // Temporary operand that must be in a register. | 1923 // Temporary operand that must be in a register. |
| 1919 MUST_USE_RESULT LUnallocated* TempRegister(); | 1924 MUST_USE_RESULT LUnallocated* TempRegister(); |
| 1920 MUST_USE_RESULT LOperand* FixedTemp(Register reg); | 1925 MUST_USE_RESULT LOperand* FixedTemp(Register reg); |
| 1921 MUST_USE_RESULT LOperand* FixedTemp(XMMRegister reg); | 1926 MUST_USE_RESULT LOperand* FixedTemp(XMMRegister reg); |
| 1922 | 1927 |
| 1923 // An operand value in register, stack slot or a constant operand. | |
| 1924 // Will not be moved to a register even if one is freely available. | |
| 1925 LOperand* UseAny(HValue* value); | |
| 1926 | |
| 1927 // Methods for setting up define-use relationships. | 1928 // Methods for setting up define-use relationships. |
| 1928 // Return the same instruction that they are passed. | 1929 // Return the same instruction that they are passed. |
| 1929 template<int I, int T> | 1930 template<int I, int T> |
| 1930 LInstruction* Define(LTemplateInstruction<1, I, T>* instr, | 1931 LInstruction* Define(LTemplateInstruction<1, I, T>* instr, |
| 1931 LUnallocated* result); | 1932 LUnallocated* result); |
| 1932 template<int I, int T> | 1933 template<int I, int T> |
| 1933 LInstruction* Define(LTemplateInstruction<1, I, T>* instr); | 1934 LInstruction* Define(LTemplateInstruction<1, I, T>* instr); |
| 1934 template<int I, int T> | 1935 template<int I, int T> |
| 1935 LInstruction* DefineAsRegister(LTemplateInstruction<1, I, T>* instr); | 1936 LInstruction* DefineAsRegister(LTemplateInstruction<1, I, T>* instr); |
| 1936 template<int I, int T> | 1937 template<int I, int T> |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1989 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); | 1990 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); |
| 1990 }; | 1991 }; |
| 1991 | 1992 |
| 1992 #undef DECLARE_HYDROGEN_ACCESSOR | 1993 #undef DECLARE_HYDROGEN_ACCESSOR |
| 1993 #undef DECLARE_INSTRUCTION | 1994 #undef DECLARE_INSTRUCTION |
| 1994 #undef DECLARE_CONCRETE_INSTRUCTION | 1995 #undef DECLARE_CONCRETE_INSTRUCTION |
| 1995 | 1996 |
| 1996 } } // namespace v8::int | 1997 } } // namespace v8::int |
| 1997 | 1998 |
| 1998 #endif // V8_X64_LITHIUM_X64_H_ | 1999 #endif // V8_X64_LITHIUM_X64_H_ |
| OLD | NEW |