| 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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 V(CallStub) \ | 64 V(CallStub) \ |
| 65 V(CheckFunction) \ | 65 V(CheckFunction) \ |
| 66 V(CheckInstanceType) \ | 66 V(CheckInstanceType) \ |
| 67 V(CheckMap) \ | 67 V(CheckMap) \ |
| 68 V(CheckNonSmi) \ | 68 V(CheckNonSmi) \ |
| 69 V(CheckPrototypeMaps) \ | 69 V(CheckPrototypeMaps) \ |
| 70 V(CheckSmi) \ | 70 V(CheckSmi) \ |
| 71 V(ClampDToUint8) \ | 71 V(ClampDToUint8) \ |
| 72 V(ClampIToUint8) \ | 72 V(ClampIToUint8) \ |
| 73 V(ClampTToUint8) \ | 73 V(ClampTToUint8) \ |
| 74 V(ClassOfTest) \ | |
| 75 V(ClassOfTestAndBranch) \ | 74 V(ClassOfTestAndBranch) \ |
| 76 V(CmpID) \ | |
| 77 V(CmpIDAndBranch) \ | 75 V(CmpIDAndBranch) \ |
| 78 V(CmpObjectEq) \ | |
| 79 V(CmpObjectEqAndBranch) \ | 76 V(CmpObjectEqAndBranch) \ |
| 80 V(CmpMapAndBranch) \ | 77 V(CmpMapAndBranch) \ |
| 81 V(CmpT) \ | 78 V(CmpT) \ |
| 82 V(CmpConstantEq) \ | |
| 83 V(CmpConstantEqAndBranch) \ | 79 V(CmpConstantEqAndBranch) \ |
| 84 V(ConstantD) \ | 80 V(ConstantD) \ |
| 85 V(ConstantI) \ | 81 V(ConstantI) \ |
| 86 V(ConstantT) \ | 82 V(ConstantT) \ |
| 87 V(Context) \ | 83 V(Context) \ |
| 88 V(DeleteProperty) \ | 84 V(DeleteProperty) \ |
| 89 V(Deoptimize) \ | 85 V(Deoptimize) \ |
| 90 V(DivI) \ | 86 V(DivI) \ |
| 91 V(DoubleToI) \ | 87 V(DoubleToI) \ |
| 92 V(ElementsKind) \ | 88 V(ElementsKind) \ |
| 93 V(ExternalArrayLength) \ | 89 V(ExternalArrayLength) \ |
| 94 V(FixedArrayLength) \ | 90 V(FixedArrayLength) \ |
| 95 V(FunctionLiteral) \ | 91 V(FunctionLiteral) \ |
| 96 V(GetCachedArrayIndex) \ | 92 V(GetCachedArrayIndex) \ |
| 97 V(GlobalObject) \ | 93 V(GlobalObject) \ |
| 98 V(GlobalReceiver) \ | 94 V(GlobalReceiver) \ |
| 99 V(Goto) \ | 95 V(Goto) \ |
| 100 V(HasCachedArrayIndex) \ | |
| 101 V(HasCachedArrayIndexAndBranch) \ | 96 V(HasCachedArrayIndexAndBranch) \ |
| 102 V(HasInstanceType) \ | |
| 103 V(HasInstanceTypeAndBranch) \ | 97 V(HasInstanceTypeAndBranch) \ |
| 104 V(In) \ | 98 V(In) \ |
| 105 V(InstanceOf) \ | 99 V(InstanceOf) \ |
| 106 V(InstanceOfKnownGlobal) \ | 100 V(InstanceOfKnownGlobal) \ |
| 107 V(InstructionGap) \ | 101 V(InstructionGap) \ |
| 108 V(Integer32ToDouble) \ | 102 V(Integer32ToDouble) \ |
| 109 V(InvokeFunction) \ | 103 V(InvokeFunction) \ |
| 110 V(IsConstructCall) \ | |
| 111 V(IsConstructCallAndBranch) \ | 104 V(IsConstructCallAndBranch) \ |
| 112 V(IsNull) \ | |
| 113 V(IsNullAndBranch) \ | 105 V(IsNullAndBranch) \ |
| 114 V(IsObject) \ | |
| 115 V(IsObjectAndBranch) \ | 106 V(IsObjectAndBranch) \ |
| 116 V(IsSmi) \ | |
| 117 V(IsSmiAndBranch) \ | 107 V(IsSmiAndBranch) \ |
| 118 V(IsUndetectable) \ | |
| 119 V(IsUndetectableAndBranch) \ | 108 V(IsUndetectableAndBranch) \ |
| 120 V(JSArrayLength) \ | 109 V(JSArrayLength) \ |
| 121 V(Label) \ | 110 V(Label) \ |
| 122 V(LazyBailout) \ | 111 V(LazyBailout) \ |
| 123 V(LoadContextSlot) \ | 112 V(LoadContextSlot) \ |
| 124 V(LoadElements) \ | 113 V(LoadElements) \ |
| 125 V(LoadExternalArrayPointer) \ | 114 V(LoadExternalArrayPointer) \ |
| 126 V(LoadFunctionPrototype) \ | 115 V(LoadFunctionPrototype) \ |
| 127 V(LoadGlobalCell) \ | 116 V(LoadGlobalCell) \ |
| 128 V(LoadGlobalGeneric) \ | 117 V(LoadGlobalGeneric) \ |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 V(StringAdd) \ | 149 V(StringAdd) \ |
| 161 V(StringCharCodeAt) \ | 150 V(StringCharCodeAt) \ |
| 162 V(StringCharFromCode) \ | 151 V(StringCharFromCode) \ |
| 163 V(StringLength) \ | 152 V(StringLength) \ |
| 164 V(SubI) \ | 153 V(SubI) \ |
| 165 V(TaggedToI) \ | 154 V(TaggedToI) \ |
| 166 V(ThisFunction) \ | 155 V(ThisFunction) \ |
| 167 V(Throw) \ | 156 V(Throw) \ |
| 168 V(ToFastProperties) \ | 157 V(ToFastProperties) \ |
| 169 V(Typeof) \ | 158 V(Typeof) \ |
| 170 V(TypeofIs) \ | |
| 171 V(TypeofIsAndBranch) \ | 159 V(TypeofIsAndBranch) \ |
| 172 V(UnaryMathOperation) \ | 160 V(UnaryMathOperation) \ |
| 173 V(UnknownOSRValue) \ | 161 V(UnknownOSRValue) \ |
| 174 V(ValueOf) | 162 V(ValueOf) |
| 175 | 163 |
| 176 | 164 |
| 177 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ | 165 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ |
| 178 virtual Opcode opcode() const { return LInstruction::k##type; } \ | 166 virtual Opcode opcode() const { return LInstruction::k##type; } \ |
| 179 virtual void CompileToNative(LCodeGen* generator); \ | 167 virtual void CompileToNative(LCodeGen* generator); \ |
| 180 virtual const char* Mnemonic() const { return mnemonic; } \ | 168 virtual const char* Mnemonic() const { return mnemonic; } \ |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 #define DECLARE_PREDICATE(type) \ | 207 #define DECLARE_PREDICATE(type) \ |
| 220 bool Is##type() const { return opcode() == k##type; } | 208 bool Is##type() const { return opcode() == k##type; } |
| 221 LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE) | 209 LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE) |
| 222 #undef DECLARE_PREDICATE | 210 #undef DECLARE_PREDICATE |
| 223 | 211 |
| 224 // Declare virtual predicates for instructions that don't have | 212 // Declare virtual predicates for instructions that don't have |
| 225 // an opcode. | 213 // an opcode. |
| 226 virtual bool IsGap() const { return false; } | 214 virtual bool IsGap() const { return false; } |
| 227 | 215 |
| 228 virtual bool IsControl() const { return false; } | 216 virtual bool IsControl() const { return false; } |
| 229 virtual void SetBranchTargets(int true_block_id, int false_block_id) { } | |
| 230 | 217 |
| 231 void set_environment(LEnvironment* env) { environment_ = env; } | 218 void set_environment(LEnvironment* env) { environment_ = env; } |
| 232 LEnvironment* environment() const { return environment_; } | 219 LEnvironment* environment() const { return environment_; } |
| 233 bool HasEnvironment() const { return environment_ != NULL; } | 220 bool HasEnvironment() const { return environment_ != NULL; } |
| 234 | 221 |
| 235 void set_pointer_map(LPointerMap* p) { pointer_map_.set(p); } | 222 void set_pointer_map(LPointerMap* p) { pointer_map_.set(p); } |
| 236 LPointerMap* pointer_map() const { return pointer_map_.get(); } | 223 LPointerMap* pointer_map() const { return pointer_map_.get(); } |
| 237 bool HasPointerMap() const { return pointer_map_.is_set(); } | 224 bool HasPointerMap() const { return pointer_map_.is_set(); } |
| 238 | 225 |
| 239 | 226 |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 public: | 436 public: |
| 450 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") | 437 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") |
| 451 }; | 438 }; |
| 452 | 439 |
| 453 | 440 |
| 454 template<int I, int T> | 441 template<int I, int T> |
| 455 class LControlInstruction: public LTemplateInstruction<0, I, T> { | 442 class LControlInstruction: public LTemplateInstruction<0, I, T> { |
| 456 public: | 443 public: |
| 457 virtual bool IsControl() const { return true; } | 444 virtual bool IsControl() const { return true; } |
| 458 | 445 |
| 459 int true_block_id() const { return true_block_id_; } | 446 int SuccessorCount() { return hydrogen()->SuccessorCount(); } |
| 460 int false_block_id() const { return false_block_id_; } | 447 HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); } |
| 461 void SetBranchTargets(int true_block_id, int false_block_id) { | 448 int true_block_id() { return hydrogen()->SuccessorAt(0)->block_id(); } |
| 462 true_block_id_ = true_block_id; | 449 int false_block_id() { return hydrogen()->SuccessorAt(1)->block_id(); } |
| 463 false_block_id_ = false_block_id; | |
| 464 } | |
| 465 | 450 |
| 466 private: | 451 private: |
| 467 int true_block_id_; | 452 HControlInstruction* hydrogen() { |
| 468 int false_block_id_; | 453 return HControlInstruction::cast(this->hydrogen_value()); |
| 454 } |
| 469 }; | 455 }; |
| 470 | 456 |
| 471 | 457 |
| 472 class LApplyArguments: public LTemplateInstruction<1, 4, 1> { | 458 class LApplyArguments: public LTemplateInstruction<1, 4, 1> { |
| 473 public: | 459 public: |
| 474 LApplyArguments(LOperand* function, | 460 LApplyArguments(LOperand* function, |
| 475 LOperand* receiver, | 461 LOperand* receiver, |
| 476 LOperand* length, | 462 LOperand* length, |
| 477 LOperand* elements, | 463 LOperand* elements, |
| 478 LOperand* temp) { | 464 LOperand* temp) { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 560 inputs_[0] = left; | 546 inputs_[0] = left; |
| 561 inputs_[1] = right; | 547 inputs_[1] = right; |
| 562 temps_[0] = temp; | 548 temps_[0] = temp; |
| 563 } | 549 } |
| 564 | 550 |
| 565 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") | 551 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") |
| 566 DECLARE_HYDROGEN_ACCESSOR(Mul) | 552 DECLARE_HYDROGEN_ACCESSOR(Mul) |
| 567 }; | 553 }; |
| 568 | 554 |
| 569 | 555 |
| 570 class LCmpID: public LTemplateInstruction<1, 2, 0> { | |
| 571 public: | |
| 572 LCmpID(LOperand* left, LOperand* right) { | |
| 573 inputs_[0] = left; | |
| 574 inputs_[1] = right; | |
| 575 } | |
| 576 | |
| 577 DECLARE_CONCRETE_INSTRUCTION(CmpID, "cmp-id") | |
| 578 DECLARE_HYDROGEN_ACCESSOR(Compare) | |
| 579 | |
| 580 Token::Value op() const { return hydrogen()->token(); } | |
| 581 bool is_double() const { | |
| 582 return hydrogen()->GetInputRepresentation().IsDouble(); | |
| 583 } | |
| 584 }; | |
| 585 | |
| 586 | |
| 587 class LCmpIDAndBranch: public LControlInstruction<2, 0> { | 556 class LCmpIDAndBranch: public LControlInstruction<2, 0> { |
| 588 public: | 557 public: |
| 589 LCmpIDAndBranch(LOperand* left, LOperand* right) { | 558 LCmpIDAndBranch(LOperand* left, LOperand* right) { |
| 590 inputs_[0] = left; | 559 inputs_[0] = left; |
| 591 inputs_[1] = right; | 560 inputs_[1] = right; |
| 592 } | 561 } |
| 593 | 562 |
| 594 DECLARE_CONCRETE_INSTRUCTION(CmpIDAndBranch, "cmp-id-and-branch") | 563 DECLARE_CONCRETE_INSTRUCTION(CmpIDAndBranch, "cmp-id-and-branch") |
| 595 DECLARE_HYDROGEN_ACCESSOR(Compare) | 564 DECLARE_HYDROGEN_ACCESSOR(CompareIDAndBranch) |
| 596 | 565 |
| 597 Token::Value op() const { return hydrogen()->token(); } | 566 Token::Value op() const { return hydrogen()->token(); } |
| 598 bool is_double() const { | 567 bool is_double() const { |
| 599 return hydrogen()->GetInputRepresentation().IsDouble(); | 568 return hydrogen()->GetInputRepresentation().IsDouble(); |
| 600 } | 569 } |
| 601 | 570 |
| 602 virtual void PrintDataTo(StringStream* stream); | 571 virtual void PrintDataTo(StringStream* stream); |
| 603 }; | 572 }; |
| 604 | 573 |
| 605 | 574 |
| 606 class LUnaryMathOperation: public LTemplateInstruction<1, 1, 0> { | 575 class LUnaryMathOperation: public LTemplateInstruction<1, 1, 0> { |
| 607 public: | 576 public: |
| 608 explicit LUnaryMathOperation(LOperand* value) { | 577 explicit LUnaryMathOperation(LOperand* value) { |
| 609 inputs_[0] = value; | 578 inputs_[0] = value; |
| 610 } | 579 } |
| 611 | 580 |
| 612 DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation") | 581 DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation") |
| 613 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) | 582 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) |
| 614 | 583 |
| 615 virtual void PrintDataTo(StringStream* stream); | 584 virtual void PrintDataTo(StringStream* stream); |
| 616 BuiltinFunctionId op() const { return hydrogen()->op(); } | 585 BuiltinFunctionId op() const { return hydrogen()->op(); } |
| 617 }; | 586 }; |
| 618 | 587 |
| 619 | 588 |
| 620 class LCmpObjectEq: public LTemplateInstruction<1, 2, 0> { | |
| 621 public: | |
| 622 LCmpObjectEq(LOperand* left, LOperand* right) { | |
| 623 inputs_[0] = left; | |
| 624 inputs_[1] = right; | |
| 625 } | |
| 626 | |
| 627 DECLARE_CONCRETE_INSTRUCTION(CmpObjectEq, "cmp-object-eq") | |
| 628 }; | |
| 629 | |
| 630 | |
| 631 class LCmpObjectEqAndBranch: public LControlInstruction<2, 0> { | 589 class LCmpObjectEqAndBranch: public LControlInstruction<2, 0> { |
| 632 public: | 590 public: |
| 633 LCmpObjectEqAndBranch(LOperand* left, LOperand* right) { | 591 LCmpObjectEqAndBranch(LOperand* left, LOperand* right) { |
| 634 inputs_[0] = left; | 592 inputs_[0] = left; |
| 635 inputs_[1] = right; | 593 inputs_[1] = right; |
| 636 } | 594 } |
| 637 | 595 |
| 638 DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch, | 596 DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch, |
| 639 "cmp-object-eq-and-branch") | 597 "cmp-object-eq-and-branch") |
| 640 }; | 598 }; |
| 641 | 599 |
| 642 | 600 |
| 643 class LCmpConstantEq: public LTemplateInstruction<1, 1, 0> { | |
| 644 public: | |
| 645 explicit LCmpConstantEq(LOperand* left) { | |
| 646 inputs_[0] = left; | |
| 647 } | |
| 648 | |
| 649 DECLARE_CONCRETE_INSTRUCTION(CmpConstantEq, "cmp-constant-eq") | |
| 650 DECLARE_HYDROGEN_ACCESSOR(CompareConstantEq) | |
| 651 }; | |
| 652 | |
| 653 | |
| 654 class LCmpConstantEqAndBranch: public LControlInstruction<1, 0> { | 601 class LCmpConstantEqAndBranch: public LControlInstruction<1, 0> { |
| 655 public: | 602 public: |
| 656 explicit LCmpConstantEqAndBranch(LOperand* left) { | 603 explicit LCmpConstantEqAndBranch(LOperand* left) { |
| 657 inputs_[0] = left; | 604 inputs_[0] = left; |
| 658 } | 605 } |
| 659 | 606 |
| 660 DECLARE_CONCRETE_INSTRUCTION(CmpConstantEqAndBranch, | 607 DECLARE_CONCRETE_INSTRUCTION(CmpConstantEqAndBranch, |
| 661 "cmp-constant-eq-and-branch") | 608 "cmp-constant-eq-and-branch") |
| 662 DECLARE_HYDROGEN_ACCESSOR(CompareConstantEq) | 609 DECLARE_HYDROGEN_ACCESSOR(CompareConstantEqAndBranch) |
| 663 }; | |
| 664 | |
| 665 | |
| 666 class LIsNull: public LTemplateInstruction<1, 1, 0> { | |
| 667 public: | |
| 668 explicit LIsNull(LOperand* value) { | |
| 669 inputs_[0] = value; | |
| 670 } | |
| 671 | |
| 672 DECLARE_CONCRETE_INSTRUCTION(IsNull, "is-null") | |
| 673 DECLARE_HYDROGEN_ACCESSOR(IsNull) | |
| 674 | |
| 675 bool is_strict() const { return hydrogen()->is_strict(); } | |
| 676 }; | 610 }; |
| 677 | 611 |
| 678 | 612 |
| 679 class LIsNullAndBranch: public LControlInstruction<1, 1> { | 613 class LIsNullAndBranch: public LControlInstruction<1, 1> { |
| 680 public: | 614 public: |
| 681 LIsNullAndBranch(LOperand* value, LOperand* temp) { | 615 LIsNullAndBranch(LOperand* value, LOperand* temp) { |
| 682 inputs_[0] = value; | 616 inputs_[0] = value; |
| 683 temps_[0] = temp; | 617 temps_[0] = temp; |
| 684 } | 618 } |
| 685 | 619 |
| 686 DECLARE_CONCRETE_INSTRUCTION(IsNullAndBranch, "is-null-and-branch") | 620 DECLARE_CONCRETE_INSTRUCTION(IsNullAndBranch, "is-null-and-branch") |
| 687 DECLARE_HYDROGEN_ACCESSOR(IsNull) | 621 DECLARE_HYDROGEN_ACCESSOR(IsNullAndBranch) |
| 688 | 622 |
| 689 bool is_strict() const { return hydrogen()->is_strict(); } | 623 bool is_strict() const { return hydrogen()->is_strict(); } |
| 690 | 624 |
| 691 virtual void PrintDataTo(StringStream* stream); | 625 virtual void PrintDataTo(StringStream* stream); |
| 692 }; | 626 }; |
| 693 | 627 |
| 694 | 628 |
| 695 class LIsObject: public LTemplateInstruction<1, 1, 0> { | |
| 696 public: | |
| 697 explicit LIsObject(LOperand* value) { | |
| 698 inputs_[0] = value; | |
| 699 } | |
| 700 | |
| 701 DECLARE_CONCRETE_INSTRUCTION(IsObject, "is-object") | |
| 702 }; | |
| 703 | |
| 704 | |
| 705 class LIsObjectAndBranch: public LControlInstruction<1, 1> { | 629 class LIsObjectAndBranch: public LControlInstruction<1, 1> { |
| 706 public: | 630 public: |
| 707 LIsObjectAndBranch(LOperand* value, LOperand* temp) { | 631 LIsObjectAndBranch(LOperand* value, LOperand* temp) { |
| 708 inputs_[0] = value; | 632 inputs_[0] = value; |
| 709 temps_[0] = temp; | 633 temps_[0] = temp; |
| 710 } | 634 } |
| 711 | 635 |
| 712 DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") | 636 DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") |
| 713 | 637 |
| 714 virtual void PrintDataTo(StringStream* stream); | 638 virtual void PrintDataTo(StringStream* stream); |
| 715 }; | 639 }; |
| 716 | 640 |
| 717 | 641 |
| 718 class LIsSmi: public LTemplateInstruction<1, 1, 0> { | |
| 719 public: | |
| 720 explicit LIsSmi(LOperand* value) { | |
| 721 inputs_[0] = value; | |
| 722 } | |
| 723 | |
| 724 DECLARE_CONCRETE_INSTRUCTION(IsSmi, "is-smi") | |
| 725 DECLARE_HYDROGEN_ACCESSOR(IsSmi) | |
| 726 }; | |
| 727 | |
| 728 | |
| 729 class LIsSmiAndBranch: public LControlInstruction<1, 0> { | 642 class LIsSmiAndBranch: public LControlInstruction<1, 0> { |
| 730 public: | 643 public: |
| 731 explicit LIsSmiAndBranch(LOperand* value) { | 644 explicit LIsSmiAndBranch(LOperand* value) { |
| 732 inputs_[0] = value; | 645 inputs_[0] = value; |
| 733 } | 646 } |
| 734 | 647 |
| 735 DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") | 648 DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") |
| 649 DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch) |
| 736 | 650 |
| 737 virtual void PrintDataTo(StringStream* stream); | 651 virtual void PrintDataTo(StringStream* stream); |
| 738 }; | 652 }; |
| 739 | 653 |
| 740 | 654 |
| 741 class LIsUndetectable: public LTemplateInstruction<1, 1, 0> { | |
| 742 public: | |
| 743 explicit LIsUndetectable(LOperand* value) { | |
| 744 inputs_[0] = value; | |
| 745 } | |
| 746 | |
| 747 DECLARE_CONCRETE_INSTRUCTION(IsUndetectable, "is-undetectable") | |
| 748 DECLARE_HYDROGEN_ACCESSOR(IsUndetectable) | |
| 749 }; | |
| 750 | |
| 751 | |
| 752 class LIsUndetectableAndBranch: public LControlInstruction<1, 1> { | 655 class LIsUndetectableAndBranch: public LControlInstruction<1, 1> { |
| 753 public: | 656 public: |
| 754 explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { | 657 explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { |
| 755 inputs_[0] = value; | 658 inputs_[0] = value; |
| 756 temps_[0] = temp; | 659 temps_[0] = temp; |
| 757 } | 660 } |
| 758 | 661 |
| 759 DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, | 662 DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, |
| 760 "is-undetectable-and-branch") | 663 "is-undetectable-and-branch") |
| 761 | 664 |
| 762 virtual void PrintDataTo(StringStream* stream); | 665 virtual void PrintDataTo(StringStream* stream); |
| 763 }; | 666 }; |
| 764 | 667 |
| 765 | 668 |
| 766 class LHasInstanceType: public LTemplateInstruction<1, 1, 0> { | |
| 767 public: | |
| 768 explicit LHasInstanceType(LOperand* value) { | |
| 769 inputs_[0] = value; | |
| 770 } | |
| 771 | |
| 772 DECLARE_CONCRETE_INSTRUCTION(HasInstanceType, "has-instance-type") | |
| 773 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType) | |
| 774 }; | |
| 775 | |
| 776 | |
| 777 class LHasInstanceTypeAndBranch: public LControlInstruction<1, 1> { | 669 class LHasInstanceTypeAndBranch: public LControlInstruction<1, 1> { |
| 778 public: | 670 public: |
| 779 LHasInstanceTypeAndBranch(LOperand* value, LOperand* temp) { | 671 LHasInstanceTypeAndBranch(LOperand* value, LOperand* temp) { |
| 780 inputs_[0] = value; | 672 inputs_[0] = value; |
| 781 temps_[0] = temp; | 673 temps_[0] = temp; |
| 782 } | 674 } |
| 783 | 675 |
| 784 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, | 676 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, |
| 785 "has-instance-type-and-branch") | 677 "has-instance-type-and-branch") |
| 786 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType) | 678 DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch) |
| 787 | 679 |
| 788 virtual void PrintDataTo(StringStream* stream); | 680 virtual void PrintDataTo(StringStream* stream); |
| 789 }; | 681 }; |
| 790 | 682 |
| 791 | 683 |
| 792 class LGetCachedArrayIndex: public LTemplateInstruction<1, 1, 0> { | 684 class LGetCachedArrayIndex: public LTemplateInstruction<1, 1, 0> { |
| 793 public: | 685 public: |
| 794 explicit LGetCachedArrayIndex(LOperand* value) { | 686 explicit LGetCachedArrayIndex(LOperand* value) { |
| 795 inputs_[0] = value; | 687 inputs_[0] = value; |
| 796 } | 688 } |
| 797 | 689 |
| 798 DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") | 690 DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") |
| 799 DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) | 691 DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) |
| 800 }; | 692 }; |
| 801 | 693 |
| 802 | 694 |
| 803 class LHasCachedArrayIndex: public LTemplateInstruction<1, 1, 0> { | |
| 804 public: | |
| 805 explicit LHasCachedArrayIndex(LOperand* value) { | |
| 806 inputs_[0] = value; | |
| 807 } | |
| 808 | |
| 809 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndex, "has-cached-array-index") | |
| 810 DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndex) | |
| 811 }; | |
| 812 | |
| 813 | |
| 814 class LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> { | 695 class LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> { |
| 815 public: | 696 public: |
| 816 explicit LHasCachedArrayIndexAndBranch(LOperand* value) { | 697 explicit LHasCachedArrayIndexAndBranch(LOperand* value) { |
| 817 inputs_[0] = value; | 698 inputs_[0] = value; |
| 818 } | 699 } |
| 819 | 700 |
| 820 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, | 701 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, |
| 821 "has-cached-array-index-and-branch") | 702 "has-cached-array-index-and-branch") |
| 822 virtual void PrintDataTo(StringStream* stream); | 703 virtual void PrintDataTo(StringStream* stream); |
| 823 }; | 704 }; |
| 824 | 705 |
| 825 | 706 |
| 826 class LIsConstructCall: public LTemplateInstruction<1, 0, 0> { | |
| 827 public: | |
| 828 DECLARE_CONCRETE_INSTRUCTION(IsConstructCall, "is-construct-call") | |
| 829 DECLARE_HYDROGEN_ACCESSOR(IsConstructCall) | |
| 830 }; | |
| 831 | |
| 832 | |
| 833 class LIsConstructCallAndBranch: public LControlInstruction<0, 1> { | 707 class LIsConstructCallAndBranch: public LControlInstruction<0, 1> { |
| 834 public: | 708 public: |
| 835 explicit LIsConstructCallAndBranch(LOperand* temp) { | 709 explicit LIsConstructCallAndBranch(LOperand* temp) { |
| 836 temps_[0] = temp; | 710 temps_[0] = temp; |
| 837 } | 711 } |
| 838 | 712 |
| 839 DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch, | 713 DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch, |
| 840 "is-construct-call-and-branch") | 714 "is-construct-call-and-branch") |
| 841 }; | 715 }; |
| 842 | 716 |
| 843 | 717 |
| 844 class LClassOfTest: public LTemplateInstruction<1, 1, 1> { | |
| 845 public: | |
| 846 LClassOfTest(LOperand* value, LOperand* temp) { | |
| 847 inputs_[0] = value; | |
| 848 temps_[0] = temp; | |
| 849 } | |
| 850 | |
| 851 DECLARE_CONCRETE_INSTRUCTION(ClassOfTest, "class-of-test") | |
| 852 DECLARE_HYDROGEN_ACCESSOR(ClassOfTest) | |
| 853 | |
| 854 virtual void PrintDataTo(StringStream* stream); | |
| 855 }; | |
| 856 | |
| 857 | |
| 858 class LClassOfTestAndBranch: public LControlInstruction<1, 2> { | 718 class LClassOfTestAndBranch: public LControlInstruction<1, 2> { |
| 859 public: | 719 public: |
| 860 LClassOfTestAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) { | 720 LClassOfTestAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) { |
| 861 inputs_[0] = value; | 721 inputs_[0] = value; |
| 862 temps_[0] = temp; | 722 temps_[0] = temp; |
| 863 temps_[1] = temp2; | 723 temps_[1] = temp2; |
| 864 } | 724 } |
| 865 | 725 |
| 866 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, | 726 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, |
| 867 "class-of-test-and-branch") | 727 "class-of-test-and-branch") |
| 868 DECLARE_HYDROGEN_ACCESSOR(ClassOfTest) | 728 DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) |
| 869 | 729 |
| 870 virtual void PrintDataTo(StringStream* stream); | 730 virtual void PrintDataTo(StringStream* stream); |
| 871 }; | 731 }; |
| 872 | 732 |
| 873 | 733 |
| 874 class LCmpT: public LTemplateInstruction<1, 2, 0> { | 734 class LCmpT: public LTemplateInstruction<1, 2, 0> { |
| 875 public: | 735 public: |
| 876 LCmpT(LOperand* left, LOperand* right) { | 736 LCmpT(LOperand* left, LOperand* right) { |
| 877 inputs_[0] = left; | 737 inputs_[0] = left; |
| 878 inputs_[1] = right; | 738 inputs_[1] = right; |
| 879 } | 739 } |
| 880 | 740 |
| 881 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") | 741 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") |
| 882 DECLARE_HYDROGEN_ACCESSOR(Compare) | 742 DECLARE_HYDROGEN_ACCESSOR(CompareGeneric) |
| 883 | 743 |
| 884 Token::Value op() const { return hydrogen()->token(); } | 744 Token::Value op() const { return hydrogen()->token(); } |
| 885 }; | 745 }; |
| 886 | 746 |
| 887 | 747 |
| 888 class LInstanceOf: public LTemplateInstruction<1, 3, 0> { | 748 class LInstanceOf: public LTemplateInstruction<1, 3, 0> { |
| 889 public: | 749 public: |
| 890 LInstanceOf(LOperand* context, LOperand* left, LOperand* right) { | 750 LInstanceOf(LOperand* context, LOperand* left, LOperand* right) { |
| 891 inputs_[0] = context; | 751 inputs_[0] = context; |
| 892 inputs_[1] = left; | 752 inputs_[1] = left; |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1008 }; | 868 }; |
| 1009 | 869 |
| 1010 | 870 |
| 1011 class LBranch: public LControlInstruction<1, 0> { | 871 class LBranch: public LControlInstruction<1, 0> { |
| 1012 public: | 872 public: |
| 1013 explicit LBranch(LOperand* value) { | 873 explicit LBranch(LOperand* value) { |
| 1014 inputs_[0] = value; | 874 inputs_[0] = value; |
| 1015 } | 875 } |
| 1016 | 876 |
| 1017 DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") | 877 DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") |
| 1018 DECLARE_HYDROGEN_ACCESSOR(Value) | 878 DECLARE_HYDROGEN_ACCESSOR(Branch) |
| 1019 | 879 |
| 1020 virtual void PrintDataTo(StringStream* stream); | 880 virtual void PrintDataTo(StringStream* stream); |
| 1021 }; | 881 }; |
| 1022 | 882 |
| 1023 | 883 |
| 1024 class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> { | 884 class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> { |
| 1025 public: | 885 public: |
| 1026 explicit LCmpMapAndBranch(LOperand* value) { | 886 explicit LCmpMapAndBranch(LOperand* value) { |
| 1027 inputs_[0] = value; | 887 inputs_[0] = value; |
| 1028 } | 888 } |
| (...skipping 998 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2027 class LTypeof: public LTemplateInstruction<1, 1, 0> { | 1887 class LTypeof: public LTemplateInstruction<1, 1, 0> { |
| 2028 public: | 1888 public: |
| 2029 explicit LTypeof(LOperand* value) { | 1889 explicit LTypeof(LOperand* value) { |
| 2030 inputs_[0] = value; | 1890 inputs_[0] = value; |
| 2031 } | 1891 } |
| 2032 | 1892 |
| 2033 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") | 1893 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") |
| 2034 }; | 1894 }; |
| 2035 | 1895 |
| 2036 | 1896 |
| 2037 class LTypeofIs: public LTemplateInstruction<1, 1, 0> { | |
| 2038 public: | |
| 2039 explicit LTypeofIs(LOperand* value) { | |
| 2040 inputs_[0] = value; | |
| 2041 } | |
| 2042 | |
| 2043 DECLARE_CONCRETE_INSTRUCTION(TypeofIs, "typeof-is") | |
| 2044 DECLARE_HYDROGEN_ACCESSOR(TypeofIs) | |
| 2045 | |
| 2046 Handle<String> type_literal() { return hydrogen()->type_literal(); } | |
| 2047 | |
| 2048 virtual void PrintDataTo(StringStream* stream); | |
| 2049 }; | |
| 2050 | |
| 2051 | |
| 2052 class LTypeofIsAndBranch: public LControlInstruction<1, 0> { | 1897 class LTypeofIsAndBranch: public LControlInstruction<1, 0> { |
| 2053 public: | 1898 public: |
| 2054 explicit LTypeofIsAndBranch(LOperand* value) { | 1899 explicit LTypeofIsAndBranch(LOperand* value) { |
| 2055 inputs_[0] = value; | 1900 inputs_[0] = value; |
| 2056 } | 1901 } |
| 2057 | 1902 |
| 2058 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") | 1903 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") |
| 2059 DECLARE_HYDROGEN_ACCESSOR(TypeofIs) | 1904 DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch) |
| 2060 | 1905 |
| 2061 Handle<String> type_literal() { return hydrogen()->type_literal(); } | 1906 Handle<String> type_literal() { return hydrogen()->type_literal(); } |
| 2062 | 1907 |
| 2063 virtual void PrintDataTo(StringStream* stream); | 1908 virtual void PrintDataTo(StringStream* stream); |
| 2064 }; | 1909 }; |
| 2065 | 1910 |
| 2066 | 1911 |
| 2067 class LDeleteProperty: public LTemplateInstruction<1, 2, 0> { | 1912 class LDeleteProperty: public LTemplateInstruction<1, 2, 0> { |
| 2068 public: | 1913 public: |
| 2069 LDeleteProperty(LOperand* obj, LOperand* key) { | 1914 LDeleteProperty(LOperand* obj, LOperand* key) { |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2348 | 2193 |
| 2349 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); | 2194 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); |
| 2350 }; | 2195 }; |
| 2351 | 2196 |
| 2352 #undef DECLARE_HYDROGEN_ACCESSOR | 2197 #undef DECLARE_HYDROGEN_ACCESSOR |
| 2353 #undef DECLARE_CONCRETE_INSTRUCTION | 2198 #undef DECLARE_CONCRETE_INSTRUCTION |
| 2354 | 2199 |
| 2355 } } // namespace v8::internal | 2200 } } // namespace v8::internal |
| 2356 | 2201 |
| 2357 #endif // V8_IA32_LITHIUM_IA32_H_ | 2202 #endif // V8_IA32_LITHIUM_IA32_H_ |
| OLD | NEW |