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

Side by Side Diff: src/ic/accessor-assembler-impl.h

Issue 2511603002: [ic] Support data handlers in LoadGlobalIC. (Closed)
Patch Set: fix Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_SRC_IC_ACCESSOR_ASSEMBLER_IMPL_H_ 5 #ifndef V8_SRC_IC_ACCESSOR_ASSEMBLER_IMPL_H_
6 #define V8_SRC_IC_ACCESSOR_ASSEMBLER_IMPL_H_ 6 #define V8_SRC_IC_ACCESSOR_ASSEMBLER_IMPL_H_
7 7
8 #include "src/code-stub-assembler.h" 8 #include "src/code-stub-assembler.h"
9 9
10 namespace v8 { 10 namespace v8 {
11 namespace internal { 11 namespace internal {
12 12
13 namespace compiler { 13 namespace compiler {
14 class CodeAssemblerState; 14 class CodeAssemblerState;
15 } 15 }
16 16
17 using compiler::Node; 17 using compiler::Node;
18 18
19 #define ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE(V) \ 19 #define ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE(V) \
20 V(LoadIC) \ 20 V(LoadIC) \
21 V(LoadICTrampoline) \ 21 V(LoadICTrampoline) \
22 V(LoadICProtoArray) \
23 V(LoadGlobalIC) \
24 V(LoadGlobalICTrampoline) \
25 V(KeyedLoadICTF) \ 22 V(KeyedLoadICTF) \
26 V(KeyedLoadICTrampolineTF) \ 23 V(KeyedLoadICTrampolineTF) \
27 V(KeyedLoadICMegamorphic) \ 24 V(KeyedLoadICMegamorphic) \
28 V(StoreIC) \ 25 V(StoreIC) \
29 V(StoreICTrampoline) 26 V(StoreICTrampoline)
30 // KeyedStoreIC and KeyedStoreICTrampoline need custom handling because of 27 // The other IC entry points need custom handling because of additional
31 // their "language_mode" parameter. 28 // parameters like "typeof_mode" or "language_mode".
32 29
33 class AccessorAssemblerImpl : public CodeStubAssembler { 30 class AccessorAssemblerImpl : public CodeStubAssembler {
34 public: 31 public:
35 explicit AccessorAssemblerImpl(compiler::CodeAssemblerState* state) 32 explicit AccessorAssemblerImpl(compiler::CodeAssemblerState* state)
36 : CodeStubAssembler(state) {} 33 : CodeStubAssembler(state) {}
37 34
38 #define DECLARE_PUBLIC_METHOD(Name) void Generate##Name(); 35 #define DECLARE_PUBLIC_METHOD(Name) void Generate##Name();
39 36
40 ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE(DECLARE_PUBLIC_METHOD) 37 ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE(DECLARE_PUBLIC_METHOD)
41 #undef DECLARE_PUBLIC_METHOD 38 #undef DECLARE_PUBLIC_METHOD
42 39
40 void GenerateLoadICProtoArray(bool throw_reference_error_if_nonexistent);
41
42 void GenerateLoadGlobalIC(TypeofMode typeof_mode);
43 void GenerateLoadGlobalICTrampoline(TypeofMode typeof_mode);
44
43 void GenerateKeyedStoreICTF(LanguageMode language_mode); 45 void GenerateKeyedStoreICTF(LanguageMode language_mode);
44 void GenerateKeyedStoreICTrampolineTF(LanguageMode language_mode); 46 void GenerateKeyedStoreICTrampolineTF(LanguageMode language_mode);
45 47
46 void TryProbeStubCache(StubCache* stub_cache, Node* receiver, Node* name, 48 void TryProbeStubCache(StubCache* stub_cache, Node* receiver, Node* name,
47 Label* if_handler, Variable* var_handler, 49 Label* if_handler, Variable* var_handler,
48 Label* if_miss); 50 Label* if_miss);
49 51
50 Node* StubCachePrimaryOffsetForTesting(Node* name, Node* map) { 52 Node* StubCachePrimaryOffsetForTesting(Node* name, Node* map) {
51 return StubCachePrimaryOffset(name, map); 53 return StubCachePrimaryOffset(name, map);
52 } 54 }
(...skipping 28 matching lines...) Expand all
81 83
82 void HandleStoreICHandlerCase(const StoreICParameters* p, Node* handler, 84 void HandleStoreICHandlerCase(const StoreICParameters* p, Node* handler,
83 Label* miss); 85 Label* miss);
84 86
85 private: 87 private:
86 enum ElementSupport { kOnlyProperties, kSupportElements }; 88 enum ElementSupport { kOnlyProperties, kSupportElements };
87 89
88 // Stub generation entry points. 90 // Stub generation entry points.
89 91
90 void LoadIC(const LoadICParameters* p); 92 void LoadIC(const LoadICParameters* p);
91 void LoadICProtoArray(const LoadICParameters* p, Node* handler); 93 void LoadICProtoArray(const LoadICParameters* p, Node* handler,
92 void LoadGlobalIC(const LoadICParameters* p); 94 bool throw_reference_error_if_nonexistent);
95 void LoadGlobalIC(const LoadICParameters* p, TypeofMode typeof_mode);
93 void KeyedLoadIC(const LoadICParameters* p); 96 void KeyedLoadIC(const LoadICParameters* p);
94 void KeyedLoadICGeneric(const LoadICParameters* p); 97 void KeyedLoadICGeneric(const LoadICParameters* p);
95 void StoreIC(const StoreICParameters* p); 98 void StoreIC(const StoreICParameters* p);
96 void KeyedStoreIC(const StoreICParameters* p, LanguageMode language_mode); 99 void KeyedStoreIC(const StoreICParameters* p, LanguageMode language_mode);
97 100
98 // IC dispatcher behavior. 101 // IC dispatcher behavior.
99 102
100 // Checks monomorphic case. Returns {feedback} entry of the vector. 103 // Checks monomorphic case. Returns {feedback} entry of the vector.
101 Node* TryMonomorphicCase(Node* slot, Node* vector, Node* receiver_map, 104 Node* TryMonomorphicCase(Node* slot, Node* vector, Node* receiver_map,
102 Label* if_handler, Variable* var_handler, 105 Label* if_handler, Variable* var_handler,
(...skipping 10 matching lines...) Expand all
113 // LoadIC implementation. 116 // LoadIC implementation.
114 117
115 void HandleLoadICHandlerCase( 118 void HandleLoadICHandlerCase(
116 const LoadICParameters* p, Node* handler, Label* miss, 119 const LoadICParameters* p, Node* handler, Label* miss,
117 ElementSupport support_elements = kOnlyProperties); 120 ElementSupport support_elements = kOnlyProperties);
118 121
119 void HandleLoadICSmiHandlerCase(const LoadICParameters* p, Node* holder, 122 void HandleLoadICSmiHandlerCase(const LoadICParameters* p, Node* holder,
120 Node* smi_handler, Label* miss, 123 Node* smi_handler, Label* miss,
121 ElementSupport support_elements); 124 ElementSupport support_elements);
122 125
123 void HandleLoadICProtoHandler(const LoadICParameters* p, Node* handler, 126 void HandleLoadICProtoHandlerCase(const LoadICParameters* p, Node* handler,
124 Variable* var_holder, Variable* var_smi_handler, 127 Variable* var_holder,
125 Label* if_smi_handler, Label* miss); 128 Variable* var_smi_handler,
129 Label* if_smi_handler, Label* miss,
130 bool throw_reference_error_if_nonexistent);
126 131
127 Node* EmitLoadICProtoArrayCheck(const LoadICParameters* p, Node* handler, 132 Node* EmitLoadICProtoArrayCheck(const LoadICParameters* p, Node* handler,
128 Node* handler_length, Node* handler_flags, 133 Node* handler_length, Node* handler_flags,
129 Label* miss); 134 Label* miss,
135 bool throw_reference_error_if_nonexistent);
136
137 // LoadGlobalIC implementation.
138
139 void HandleLoadGlobalICHandlerCase(const LoadICParameters* p, Node* handler,
140 Label* miss,
141 bool throw_reference_error_if_nonexistent);
130 142
131 // StoreIC implementation. 143 // StoreIC implementation.
132 144
133 void HandleStoreICProtoHandler(const StoreICParameters* p, Node* handler, 145 void HandleStoreICProtoHandler(const StoreICParameters* p, Node* handler,
134 Label* miss); 146 Label* miss);
135 // If |transition| is nullptr then the normal field store is generated or 147 // If |transition| is nullptr then the normal field store is generated or
136 // transitioning store otherwise. 148 // transitioning store otherwise.
137 void HandleStoreICSmiHandlerCase(Node* handler_word, Node* holder, 149 void HandleStoreICSmiHandlerCase(Node* handler_word, Node* holder,
138 Node* value, Node* transition, Label* miss); 150 Node* value, Node* transition, Label* miss);
139 // If |transition| is nullptr then the normal field store is generated or 151 // If |transition| is nullptr then the normal field store is generated or
(...skipping 27 matching lines...) Expand all
167 void TryProbeStubCacheTable(StubCache* stub_cache, StubCacheTable table_id, 179 void TryProbeStubCacheTable(StubCache* stub_cache, StubCacheTable table_id,
168 Node* entry_offset, Node* name, Node* map, 180 Node* entry_offset, Node* name, Node* map,
169 Label* if_handler, Variable* var_handler, 181 Label* if_handler, Variable* var_handler,
170 Label* if_miss); 182 Label* if_miss);
171 }; 183 };
172 184
173 } // namespace internal 185 } // namespace internal
174 } // namespace v8 186 } // namespace v8
175 187
176 #endif // V8_SRC_IC_ACCESSOR_ASSEMBLER_IMPL_H_ 188 #endif // V8_SRC_IC_ACCESSOR_ASSEMBLER_IMPL_H_
OLDNEW
« src/ic/accessor-assembler.cc ('K') | « src/ic/accessor-assembler.cc ('k') | src/ic/ic.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698