OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 Name* key; | 70 Name* key; |
71 Code* value; | 71 Code* value; |
72 Map* map; | 72 Map* map; |
73 }; | 73 }; |
74 | 74 |
75 void Initialize(); | 75 void Initialize(); |
76 | 76 |
77 Handle<JSObject> StubHolder(Handle<JSObject> receiver, | 77 Handle<JSObject> StubHolder(Handle<JSObject> receiver, |
78 Handle<JSObject> holder); | 78 Handle<JSObject> holder); |
79 | 79 |
| 80 Handle<Code> FindIC(Handle<Name> name, |
| 81 Handle<JSObject> stub_holder, |
| 82 Code::Kind kind, |
| 83 Code::StubType type); |
| 84 |
80 Handle<Code> FindStub(Handle<Name> name, | 85 Handle<Code> FindStub(Handle<Name> name, |
81 Handle<JSObject> stub_holder, | 86 Handle<JSObject> stub_holder, |
82 Code::Kind kind, | 87 Code::Kind kind, |
83 Code::StubType type, | 88 Code::StubType type); |
84 Code::IcFragment fragment); | |
85 | |
86 Handle<Code> FindHandler(Handle<Name> name, | |
87 Handle<JSObject> stub_holder, | |
88 Code::Kind kind, | |
89 Code::StubType type); | |
90 | 89 |
91 Handle<Code> ComputeMonomorphicIC(Handle<JSObject> receiver, | 90 Handle<Code> ComputeMonomorphicIC(Handle<JSObject> receiver, |
92 Handle<Code> handler, | 91 Handle<Code> handler, |
93 Handle<Name> name); | 92 Handle<Name> name); |
94 Handle<Code> ComputeKeyedMonomorphicIC(Handle<JSObject> receiver, | 93 Handle<Code> ComputeKeyedMonomorphicIC(Handle<JSObject> receiver, |
95 Handle<Code> handler, | 94 Handle<Code> handler, |
96 Handle<Name> name); | 95 Handle<Name> name); |
97 | 96 |
98 // Computes the right stub matching. Inserts the result in the | 97 // Computes the right stub matching. Inserts the result in the |
99 // cache before returning. This might compile a stub if needed. | 98 // cache before returning. This might compile a stub if needed. |
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
659 void GenerateLoadInterceptor(Register holder_reg, | 658 void GenerateLoadInterceptor(Register holder_reg, |
660 Handle<JSObject> object, | 659 Handle<JSObject> object, |
661 Handle<JSObject> holder, | 660 Handle<JSObject> holder, |
662 LookupResult* lookup, | 661 LookupResult* lookup, |
663 Handle<Name> name); | 662 Handle<Name> name); |
664 void GenerateLoadPostInterceptor(Register reg, | 663 void GenerateLoadPostInterceptor(Register reg, |
665 Handle<JSObject> interceptor_holder, | 664 Handle<JSObject> interceptor_holder, |
666 Handle<Name> name, | 665 Handle<Name> name, |
667 LookupResult* lookup); | 666 LookupResult* lookup); |
668 | 667 |
669 Handle<Code> GetCode(Code::IcFragment fragment, | 668 Handle<Code> GetICCode(Code::Kind kind, |
| 669 Code::StubType type, |
| 670 Handle<Name> name, |
| 671 InlineCacheState state = MONOMORPHIC); |
| 672 |
| 673 Handle<Code> GetCode(Code::Kind kind, |
670 Code::StubType type, | 674 Code::StubType type, |
671 Handle<Name> name, | 675 Handle<Name> name); |
672 InlineCacheState state = MONOMORPHIC); | |
673 | 676 |
674 Register receiver() { return registers_[0]; } | 677 Register receiver() { return registers_[0]; } |
675 Register name() { return registers_[1]; } | 678 Register name() { return registers_[1]; } |
676 Register scratch1() { return registers_[2]; } | 679 Register scratch1() { return registers_[2]; } |
677 Register scratch2() { return registers_[3]; } | 680 Register scratch2() { return registers_[3]; } |
678 Register scratch3() { return registers_[4]; } | 681 Register scratch3() { return registers_[4]; } |
679 Register scratch4() { return registers_[5]; } | 682 Register scratch4() { return registers_[5]; } |
680 | 683 |
681 private: | 684 private: |
682 virtual Code::Kind kind() = 0; | 685 virtual Code::Kind kind() = 0; |
(...skipping 29 matching lines...) Expand all Loading... |
712 Handle<JSGlobalPropertyCell> cell, | 715 Handle<JSGlobalPropertyCell> cell, |
713 Handle<Name> name, | 716 Handle<Name> name, |
714 bool is_dont_delete); | 717 bool is_dont_delete); |
715 | 718 |
716 static Register receiver() { return registers()[0]; } | 719 static Register receiver() { return registers()[0]; } |
717 | 720 |
718 private: | 721 private: |
719 static Register* registers(); | 722 static Register* registers(); |
720 virtual Code::Kind kind() { return Code::LOAD_IC; } | 723 virtual Code::Kind kind() { return Code::LOAD_IC; } |
721 virtual Logger::LogEventsAndTags log_kind(Handle<Code> code) { | 724 virtual Logger::LogEventsAndTags log_kind(Handle<Code> code) { |
| 725 if (!code->is_inline_cache_stub()) return Logger::STUB_TAG; |
722 return code->ic_state() == MONOMORPHIC | 726 return code->ic_state() == MONOMORPHIC |
723 ? Logger::LOAD_IC_TAG : Logger::LOAD_POLYMORPHIC_IC_TAG; | 727 ? Logger::LOAD_IC_TAG : Logger::LOAD_POLYMORPHIC_IC_TAG; |
724 } | 728 } |
725 virtual void JitEvent(Handle<Name> name, Handle<Code> code); | 729 virtual void JitEvent(Handle<Name> name, Handle<Code> code); |
726 }; | 730 }; |
727 | 731 |
728 | 732 |
729 class KeyedLoadStubCompiler: public BaseLoadStubCompiler { | 733 class KeyedLoadStubCompiler: public BaseLoadStubCompiler { |
730 public: | 734 public: |
731 explicit KeyedLoadStubCompiler(Isolate* isolate) | 735 explicit KeyedLoadStubCompiler(Isolate* isolate) |
732 : BaseLoadStubCompiler(isolate, registers()) { } | 736 : BaseLoadStubCompiler(isolate, registers()) { } |
733 | 737 |
734 Handle<Code> CompileLoadElement(Handle<Map> receiver_map); | 738 Handle<Code> CompileLoadElement(Handle<Map> receiver_map); |
735 | 739 |
736 void CompileElementHandlers(MapHandleList* receiver_maps, | 740 void CompileElementHandlers(MapHandleList* receiver_maps, |
737 CodeHandleList* handlers); | 741 CodeHandleList* handlers); |
738 | 742 |
739 Handle<Code> CompileLoadElementPolymorphic(MapHandleList* receiver_maps); | 743 Handle<Code> CompileLoadElementPolymorphic(MapHandleList* receiver_maps); |
740 | 744 |
741 static void GenerateLoadDictionaryElement(MacroAssembler* masm); | 745 static void GenerateLoadDictionaryElement(MacroAssembler* masm); |
742 | 746 |
743 static Register receiver() { return registers()[0]; } | 747 static Register receiver() { return registers()[0]; } |
744 | 748 |
745 private: | 749 private: |
746 static Register* registers(); | 750 static Register* registers(); |
747 virtual Code::Kind kind() { return Code::KEYED_LOAD_IC; } | 751 virtual Code::Kind kind() { return Code::KEYED_LOAD_IC; } |
748 virtual Logger::LogEventsAndTags log_kind(Handle<Code> code) { | 752 virtual Logger::LogEventsAndTags log_kind(Handle<Code> code) { |
| 753 if (!code->is_inline_cache_stub()) return Logger::STUB_TAG; |
749 return code->ic_state() == MONOMORPHIC | 754 return code->ic_state() == MONOMORPHIC |
750 ? Logger::KEYED_LOAD_IC_TAG : Logger::KEYED_LOAD_POLYMORPHIC_IC_TAG; | 755 ? Logger::KEYED_LOAD_IC_TAG : Logger::KEYED_LOAD_POLYMORPHIC_IC_TAG; |
751 } | 756 } |
752 virtual void JitEvent(Handle<Name> name, Handle<Code> code); | 757 virtual void JitEvent(Handle<Name> name, Handle<Code> code); |
753 virtual void GenerateNameCheck(Handle<Name> name, | 758 virtual void GenerateNameCheck(Handle<Name> name, |
754 Register name_reg, | 759 Register name_reg, |
755 Label* miss); | 760 Label* miss); |
756 }; | 761 }; |
757 | 762 |
758 | 763 |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1003 Handle<JSFunction> constant_function_; | 1008 Handle<JSFunction> constant_function_; |
1004 bool is_simple_api_call_; | 1009 bool is_simple_api_call_; |
1005 Handle<FunctionTemplateInfo> expected_receiver_type_; | 1010 Handle<FunctionTemplateInfo> expected_receiver_type_; |
1006 Handle<CallHandlerInfo> api_call_info_; | 1011 Handle<CallHandlerInfo> api_call_info_; |
1007 }; | 1012 }; |
1008 | 1013 |
1009 | 1014 |
1010 } } // namespace v8::internal | 1015 } } // namespace v8::internal |
1011 | 1016 |
1012 #endif // V8_STUB_CACHE_H_ | 1017 #endif // V8_STUB_CACHE_H_ |
OLD | NEW |