| OLD | NEW |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_CODE_STUB_ASSEMBLER_H_ | 5 #ifndef V8_CODE_STUB_ASSEMBLER_H_ |
| 6 #define V8_CODE_STUB_ASSEMBLER_H_ | 6 #define V8_CODE_STUB_ASSEMBLER_H_ |
| 7 | 7 |
| 8 #include <functional> | 8 #include <functional> |
| 9 | 9 |
| 10 #include "src/compiler/code-assembler.h" | 10 #include "src/compiler/code-assembler.h" |
| (...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 LookupInHolder& lookup_property_in_holder, | 624 LookupInHolder& lookup_property_in_holder, |
| 625 LookupInHolder& lookup_element_in_holder, | 625 LookupInHolder& lookup_element_in_holder, |
| 626 Label* if_end, Label* if_bailout); | 626 Label* if_end, Label* if_bailout); |
| 627 | 627 |
| 628 // Instanceof helpers. | 628 // Instanceof helpers. |
| 629 // ES6 section 7.3.19 OrdinaryHasInstance (C, O) | 629 // ES6 section 7.3.19 OrdinaryHasInstance (C, O) |
| 630 compiler::Node* OrdinaryHasInstance(compiler::Node* context, | 630 compiler::Node* OrdinaryHasInstance(compiler::Node* context, |
| 631 compiler::Node* callable, | 631 compiler::Node* callable, |
| 632 compiler::Node* object); | 632 compiler::Node* object); |
| 633 | 633 |
| 634 // LoadIC helpers. | 634 // Load/StoreIC helpers. |
| 635 struct LoadICParameters { | 635 struct LoadICParameters { |
| 636 LoadICParameters(compiler::Node* context, compiler::Node* receiver, | 636 LoadICParameters(compiler::Node* context, compiler::Node* receiver, |
| 637 compiler::Node* name, compiler::Node* slot, | 637 compiler::Node* name, compiler::Node* slot, |
| 638 compiler::Node* vector) | 638 compiler::Node* vector) |
| 639 : context(context), | 639 : context(context), |
| 640 receiver(receiver), | 640 receiver(receiver), |
| 641 name(name), | 641 name(name), |
| 642 slot(slot), | 642 slot(slot), |
| 643 vector(vector) {} | 643 vector(vector) {} |
| 644 | 644 |
| 645 compiler::Node* context; | 645 compiler::Node* context; |
| 646 compiler::Node* receiver; | 646 compiler::Node* receiver; |
| 647 compiler::Node* name; | 647 compiler::Node* name; |
| 648 compiler::Node* slot; | 648 compiler::Node* slot; |
| 649 compiler::Node* vector; | 649 compiler::Node* vector; |
| 650 }; | 650 }; |
| 651 | 651 |
| 652 struct StoreICParameters : public LoadICParameters { |
| 653 StoreICParameters(compiler::Node* context, compiler::Node* receiver, |
| 654 compiler::Node* name, compiler::Node* value, |
| 655 compiler::Node* slot, compiler::Node* vector) |
| 656 : LoadICParameters(context, receiver, name, slot, vector), |
| 657 value(value) {} |
| 658 compiler::Node* value; |
| 659 }; |
| 660 |
| 652 // Load type feedback vector from the stub caller's frame. | 661 // Load type feedback vector from the stub caller's frame. |
| 653 compiler::Node* LoadTypeFeedbackVectorForStub(); | 662 compiler::Node* LoadTypeFeedbackVectorForStub(); |
| 654 | 663 |
| 655 // Update the type feedback vector. | 664 // Update the type feedback vector. |
| 656 void UpdateFeedback(compiler::Node* feedback, | 665 void UpdateFeedback(compiler::Node* feedback, |
| 657 compiler::Node* type_feedback_vector, | 666 compiler::Node* type_feedback_vector, |
| 658 compiler::Node* slot_id); | 667 compiler::Node* slot_id); |
| 659 | 668 |
| 660 compiler::Node* LoadReceiverMap(compiler::Node* receiver); | 669 compiler::Node* LoadReceiverMap(compiler::Node* receiver); |
| 661 | 670 |
| 662 // Checks monomorphic case. Returns {feedback} entry of the vector. | 671 // Checks monomorphic case. Returns {feedback} entry of the vector. |
| 663 compiler::Node* TryMonomorphicCase(const LoadICParameters* p, | 672 compiler::Node* TryMonomorphicCase(compiler::Node* slot, |
| 673 compiler::Node* vector, |
| 664 compiler::Node* receiver_map, | 674 compiler::Node* receiver_map, |
| 665 Label* if_handler, Variable* var_handler, | 675 Label* if_handler, Variable* var_handler, |
| 666 Label* if_miss); | 676 Label* if_miss); |
| 667 void HandlePolymorphicCase(const LoadICParameters* p, | 677 void HandlePolymorphicCase(compiler::Node* receiver_map, |
| 668 compiler::Node* receiver_map, | |
| 669 compiler::Node* feedback, Label* if_handler, | 678 compiler::Node* feedback, Label* if_handler, |
| 670 Variable* var_handler, Label* if_miss, | 679 Variable* var_handler, Label* if_miss, |
| 671 int unroll_count); | 680 int unroll_count); |
| 672 | 681 |
| 673 compiler::Node* StubCachePrimaryOffset(compiler::Node* name, | 682 compiler::Node* StubCachePrimaryOffset(compiler::Node* name, |
| 674 compiler::Node* map); | 683 compiler::Node* map); |
| 675 | 684 |
| 676 compiler::Node* StubCacheSecondaryOffset(compiler::Node* name, | 685 compiler::Node* StubCacheSecondaryOffset(compiler::Node* name, |
| 677 compiler::Node* seed); | 686 compiler::Node* seed); |
| 678 | 687 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 | 748 |
| 740 compiler::Node* CopyElementsOnWrite(compiler::Node* object, | 749 compiler::Node* CopyElementsOnWrite(compiler::Node* object, |
| 741 compiler::Node* elements, | 750 compiler::Node* elements, |
| 742 ElementsKind kind, compiler::Node* length, | 751 ElementsKind kind, compiler::Node* length, |
| 743 ParameterMode mode, Label* bailout); | 752 ParameterMode mode, Label* bailout); |
| 744 | 753 |
| 745 void LoadIC(const LoadICParameters* p); | 754 void LoadIC(const LoadICParameters* p); |
| 746 void LoadGlobalIC(const LoadICParameters* p); | 755 void LoadGlobalIC(const LoadICParameters* p); |
| 747 void KeyedLoadIC(const LoadICParameters* p); | 756 void KeyedLoadIC(const LoadICParameters* p); |
| 748 void KeyedLoadICGeneric(const LoadICParameters* p); | 757 void KeyedLoadICGeneric(const LoadICParameters* p); |
| 758 void StoreIC(const StoreICParameters* p); |
| 749 | 759 |
| 750 void TransitionElementsKind(compiler::Node* object, compiler::Node* map, | 760 void TransitionElementsKind(compiler::Node* object, compiler::Node* map, |
| 751 ElementsKind from_kind, ElementsKind to_kind, | 761 ElementsKind from_kind, ElementsKind to_kind, |
| 752 bool is_jsarray, Label* bailout); | 762 bool is_jsarray, Label* bailout); |
| 753 | 763 |
| 754 void TrapAllocationMemento(compiler::Node* object, Label* memento_found); | 764 void TrapAllocationMemento(compiler::Node* object, Label* memento_found); |
| 755 | 765 |
| 756 compiler::Node* PageFromAddress(compiler::Node* address); | 766 compiler::Node* PageFromAddress(compiler::Node* address); |
| 757 | 767 |
| 758 // Get the enumerable length from |map| and return the result as a Smi. | 768 // Get the enumerable length from |map| and return the result as a Smi. |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 843 Label* bailout); | 853 Label* bailout); |
| 844 | 854 |
| 845 static const int kElementLoopUnrollThreshold = 8; | 855 static const int kElementLoopUnrollThreshold = 8; |
| 846 }; | 856 }; |
| 847 | 857 |
| 848 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags); | 858 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags); |
| 849 | 859 |
| 850 } // namespace internal | 860 } // namespace internal |
| 851 } // namespace v8 | 861 } // namespace v8 |
| 852 #endif // V8_CODE_STUB_ASSEMBLER_H_ | 862 #endif // V8_CODE_STUB_ASSEMBLER_H_ |
| OLD | NEW |