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

Side by Side Diff: src/stub-cache.cc

Issue 10795074: Add a new API V8::SetJitCodeEventHandler to push code name and location to users such as profilers. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Ready for review Created 8 years, 5 months 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 | Annotate | Revision Log
OLDNEW
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 12 matching lines...) Expand all
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 #include "v8.h" 28 #include "v8.h"
29 29
30 #include "api.h" 30 #include "api.h"
31 #include "arguments.h" 31 #include "arguments.h"
32 #include "ast.h" 32 #include "ast.h"
33 #include "code-events.h"
33 #include "code-stubs.h" 34 #include "code-stubs.h"
34 #include "gdb-jit.h"
35 #include "ic-inl.h" 35 #include "ic-inl.h"
36 #include "stub-cache.h" 36 #include "stub-cache.h"
37 #include "vm-state-inl.h" 37 #include "vm-state-inl.h"
38 38
39 namespace v8 { 39 namespace v8 {
40 namespace internal { 40 namespace internal {
41 41
42 // ----------------------------------------------------------------------- 42 // -----------------------------------------------------------------------
43 // StubCache implementation. 43 // StubCache implementation.
44 44
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 // name specific if there are global objects involved. 120 // name specific if there are global objects involved.
121 Code::Flags flags = 121 Code::Flags flags =
122 Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::NONEXISTENT); 122 Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::NONEXISTENT);
123 Handle<Object> probe(receiver->map()->FindInCodeCache(*cache_name, flags)); 123 Handle<Object> probe(receiver->map()->FindInCodeCache(*cache_name, flags));
124 if (probe->IsCode()) return Handle<Code>::cast(probe); 124 if (probe->IsCode()) return Handle<Code>::cast(probe);
125 125
126 LoadStubCompiler compiler(isolate_); 126 LoadStubCompiler compiler(isolate_);
127 Handle<Code> code = 127 Handle<Code> code =
128 compiler.CompileLoadNonexistent(cache_name, receiver, last); 128 compiler.CompileLoadNonexistent(cache_name, receiver, last);
129 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *cache_name)); 129 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *cache_name));
130 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *cache_name, *code)); 130 JIT_CODE_EVENT(AddCode(*cache_name, *code));
131 JSObject::UpdateMapCodeCache(receiver, cache_name, code); 131 JSObject::UpdateMapCodeCache(receiver, cache_name, code);
132 return code; 132 return code;
133 } 133 }
134 134
135 135
136 Handle<Code> StubCache::ComputeLoadField(Handle<String> name, 136 Handle<Code> StubCache::ComputeLoadField(Handle<String> name,
137 Handle<JSObject> receiver, 137 Handle<JSObject> receiver,
138 Handle<JSObject> holder, 138 Handle<JSObject> holder,
139 int field_index) { 139 int field_index) {
140 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP); 140 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
141 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::FIELD); 141 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::FIELD);
142 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 142 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
143 if (probe->IsCode()) return Handle<Code>::cast(probe); 143 if (probe->IsCode()) return Handle<Code>::cast(probe);
144 144
145 LoadStubCompiler compiler(isolate_); 145 LoadStubCompiler compiler(isolate_);
146 Handle<Code> code = 146 Handle<Code> code =
147 compiler.CompileLoadField(receiver, holder, field_index, name); 147 compiler.CompileLoadField(receiver, holder, field_index, name);
148 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name)); 148 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
149 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code)); 149 JIT_CODE_EVENT(AddCode(*name, *code));
150 JSObject::UpdateMapCodeCache(receiver, name, code); 150 JSObject::UpdateMapCodeCache(receiver, name, code);
151 return code; 151 return code;
152 } 152 }
153 153
154 154
155 Handle<Code> StubCache::ComputeLoadCallback(Handle<String> name, 155 Handle<Code> StubCache::ComputeLoadCallback(Handle<String> name,
156 Handle<JSObject> receiver, 156 Handle<JSObject> receiver,
157 Handle<JSObject> holder, 157 Handle<JSObject> holder,
158 Handle<AccessorInfo> callback) { 158 Handle<AccessorInfo> callback) {
159 ASSERT(v8::ToCData<Address>(callback->getter()) != 0); 159 ASSERT(v8::ToCData<Address>(callback->getter()) != 0);
160 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP); 160 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
161 Code::Flags flags = 161 Code::Flags flags =
162 Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::CALLBACKS); 162 Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::CALLBACKS);
163 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 163 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
164 if (probe->IsCode()) return Handle<Code>::cast(probe); 164 if (probe->IsCode()) return Handle<Code>::cast(probe);
165 165
166 LoadStubCompiler compiler(isolate_); 166 LoadStubCompiler compiler(isolate_);
167 Handle<Code> code = 167 Handle<Code> code =
168 compiler.CompileLoadCallback(name, receiver, holder, callback); 168 compiler.CompileLoadCallback(name, receiver, holder, callback);
169 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name)); 169 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
170 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code)); 170 JIT_CODE_EVENT(AddCode(*name, *code));
171 JSObject::UpdateMapCodeCache(receiver, name, code); 171 JSObject::UpdateMapCodeCache(receiver, name, code);
172 return code; 172 return code;
173 } 173 }
174 174
175 175
176 Handle<Code> StubCache::ComputeLoadViaGetter(Handle<String> name, 176 Handle<Code> StubCache::ComputeLoadViaGetter(Handle<String> name,
177 Handle<JSObject> receiver, 177 Handle<JSObject> receiver,
178 Handle<JSObject> holder, 178 Handle<JSObject> holder,
179 Handle<JSFunction> getter) { 179 Handle<JSFunction> getter) {
180 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP); 180 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
181 Code::Flags flags = 181 Code::Flags flags =
182 Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::CALLBACKS); 182 Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::CALLBACKS);
183 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 183 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
184 if (probe->IsCode()) return Handle<Code>::cast(probe); 184 if (probe->IsCode()) return Handle<Code>::cast(probe);
185 185
186 LoadStubCompiler compiler(isolate_); 186 LoadStubCompiler compiler(isolate_);
187 Handle<Code> code = 187 Handle<Code> code =
188 compiler.CompileLoadViaGetter(name, receiver, holder, getter); 188 compiler.CompileLoadViaGetter(name, receiver, holder, getter);
189 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name)); 189 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
190 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code)); 190 JIT_CODE_EVENT(AddCode(*name, *code));
191 JSObject::UpdateMapCodeCache(receiver, name, code); 191 JSObject::UpdateMapCodeCache(receiver, name, code);
192 return code; 192 return code;
193 } 193 }
194 194
195 195
196 Handle<Code> StubCache::ComputeLoadConstant(Handle<String> name, 196 Handle<Code> StubCache::ComputeLoadConstant(Handle<String> name,
197 Handle<JSObject> receiver, 197 Handle<JSObject> receiver,
198 Handle<JSObject> holder, 198 Handle<JSObject> holder,
199 Handle<JSFunction> value) { 199 Handle<JSFunction> value) {
200 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP); 200 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
201 Code::Flags flags = 201 Code::Flags flags =
202 Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::CONSTANT_FUNCTION); 202 Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::CONSTANT_FUNCTION);
203 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 203 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
204 if (probe->IsCode()) return Handle<Code>::cast(probe); 204 if (probe->IsCode()) return Handle<Code>::cast(probe);
205 205
206 LoadStubCompiler compiler(isolate_); 206 LoadStubCompiler compiler(isolate_);
207 Handle<Code> code = 207 Handle<Code> code =
208 compiler.CompileLoadConstant(receiver, holder, value, name); 208 compiler.CompileLoadConstant(receiver, holder, value, name);
209 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name)); 209 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
210 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code)); 210 JIT_CODE_EVENT(AddCode(*name, *code));
211 JSObject::UpdateMapCodeCache(receiver, name, code); 211 JSObject::UpdateMapCodeCache(receiver, name, code);
212 return code; 212 return code;
213 } 213 }
214 214
215 215
216 Handle<Code> StubCache::ComputeLoadInterceptor(Handle<String> name, 216 Handle<Code> StubCache::ComputeLoadInterceptor(Handle<String> name,
217 Handle<JSObject> receiver, 217 Handle<JSObject> receiver,
218 Handle<JSObject> holder) { 218 Handle<JSObject> holder) {
219 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP); 219 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
220 Code::Flags flags = 220 Code::Flags flags =
221 Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::INTERCEPTOR); 221 Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::INTERCEPTOR);
222 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 222 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
223 if (probe->IsCode()) return Handle<Code>::cast(probe); 223 if (probe->IsCode()) return Handle<Code>::cast(probe);
224 224
225 LoadStubCompiler compiler(isolate_); 225 LoadStubCompiler compiler(isolate_);
226 Handle<Code> code = 226 Handle<Code> code =
227 compiler.CompileLoadInterceptor(receiver, holder, name); 227 compiler.CompileLoadInterceptor(receiver, holder, name);
228 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name)); 228 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
229 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code)); 229 JIT_CODE_EVENT(AddCode(*name, *code));
230 JSObject::UpdateMapCodeCache(receiver, name, code); 230 JSObject::UpdateMapCodeCache(receiver, name, code);
231 return code; 231 return code;
232 } 232 }
233 233
234 234
235 Handle<Code> StubCache::ComputeLoadNormal() { 235 Handle<Code> StubCache::ComputeLoadNormal() {
236 return isolate_->builtins()->LoadIC_Normal(); 236 return isolate_->builtins()->LoadIC_Normal();
237 } 237 }
238 238
239 239
240 Handle<Code> StubCache::ComputeLoadGlobal(Handle<String> name, 240 Handle<Code> StubCache::ComputeLoadGlobal(Handle<String> name,
241 Handle<JSObject> receiver, 241 Handle<JSObject> receiver,
242 Handle<GlobalObject> holder, 242 Handle<GlobalObject> holder,
243 Handle<JSGlobalPropertyCell> cell, 243 Handle<JSGlobalPropertyCell> cell,
244 bool is_dont_delete) { 244 bool is_dont_delete) {
245 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP); 245 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
246 Code::Flags flags = 246 Code::Flags flags =
247 Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::NORMAL); 247 Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::NORMAL);
248 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 248 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
249 if (probe->IsCode()) return Handle<Code>::cast(probe); 249 if (probe->IsCode()) return Handle<Code>::cast(probe);
250 250
251 LoadStubCompiler compiler(isolate_); 251 LoadStubCompiler compiler(isolate_);
252 Handle<Code> code = 252 Handle<Code> code =
253 compiler.CompileLoadGlobal(receiver, holder, cell, name, is_dont_delete); 253 compiler.CompileLoadGlobal(receiver, holder, cell, name, is_dont_delete);
254 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name)); 254 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
255 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code)); 255 JIT_CODE_EVENT(AddCode(*name, *code));
256 JSObject::UpdateMapCodeCache(receiver, name, code); 256 JSObject::UpdateMapCodeCache(receiver, name, code);
257 return code; 257 return code;
258 } 258 }
259 259
260 260
261 Handle<Code> StubCache::ComputeKeyedLoadField(Handle<String> name, 261 Handle<Code> StubCache::ComputeKeyedLoadField(Handle<String> name,
262 Handle<JSObject> receiver, 262 Handle<JSObject> receiver,
263 Handle<JSObject> holder, 263 Handle<JSObject> holder,
264 int field_index) { 264 int field_index) {
265 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP); 265 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
266 Code::Flags flags = 266 Code::Flags flags =
267 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::FIELD); 267 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::FIELD);
268 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 268 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
269 if (probe->IsCode()) return Handle<Code>::cast(probe); 269 if (probe->IsCode()) return Handle<Code>::cast(probe);
270 270
271 KeyedLoadStubCompiler compiler(isolate_); 271 KeyedLoadStubCompiler compiler(isolate_);
272 Handle<Code> code = 272 Handle<Code> code =
273 compiler.CompileLoadField(name, receiver, holder, field_index); 273 compiler.CompileLoadField(name, receiver, holder, field_index);
274 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name)); 274 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name));
275 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, *name, *code)); 275 JIT_CODE_EVENT(AddCode(*name, *code));
276 JSObject::UpdateMapCodeCache(receiver, name, code); 276 JSObject::UpdateMapCodeCache(receiver, name, code);
277 return code; 277 return code;
278 } 278 }
279 279
280 280
281 Handle<Code> StubCache::ComputeKeyedLoadConstant(Handle<String> name, 281 Handle<Code> StubCache::ComputeKeyedLoadConstant(Handle<String> name,
282 Handle<JSObject> receiver, 282 Handle<JSObject> receiver,
283 Handle<JSObject> holder, 283 Handle<JSObject> holder,
284 Handle<JSFunction> value) { 284 Handle<JSFunction> value) {
285 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP); 285 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
286 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, 286 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC,
287 Code::CONSTANT_FUNCTION); 287 Code::CONSTANT_FUNCTION);
288 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 288 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
289 if (probe->IsCode()) return Handle<Code>::cast(probe); 289 if (probe->IsCode()) return Handle<Code>::cast(probe);
290 290
291 KeyedLoadStubCompiler compiler(isolate_); 291 KeyedLoadStubCompiler compiler(isolate_);
292 Handle<Code> code = 292 Handle<Code> code =
293 compiler.CompileLoadConstant(name, receiver, holder, value); 293 compiler.CompileLoadConstant(name, receiver, holder, value);
294 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name)); 294 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name));
295 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, *name, *code)); 295 JIT_CODE_EVENT(AddCode(*name, *code));
296 JSObject::UpdateMapCodeCache(receiver, name, code); 296 JSObject::UpdateMapCodeCache(receiver, name, code);
297 return code; 297 return code;
298 } 298 }
299 299
300 300
301 Handle<Code> StubCache::ComputeKeyedLoadInterceptor(Handle<String> name, 301 Handle<Code> StubCache::ComputeKeyedLoadInterceptor(Handle<String> name,
302 Handle<JSObject> receiver, 302 Handle<JSObject> receiver,
303 Handle<JSObject> holder) { 303 Handle<JSObject> holder) {
304 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP); 304 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
305 Code::Flags flags = 305 Code::Flags flags =
306 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::INTERCEPTOR); 306 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::INTERCEPTOR);
307 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 307 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
308 if (probe->IsCode()) return Handle<Code>::cast(probe); 308 if (probe->IsCode()) return Handle<Code>::cast(probe);
309 309
310 KeyedLoadStubCompiler compiler(isolate_); 310 KeyedLoadStubCompiler compiler(isolate_);
311 Handle<Code> code = compiler.CompileLoadInterceptor(receiver, holder, name); 311 Handle<Code> code = compiler.CompileLoadInterceptor(receiver, holder, name);
312 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name)); 312 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name));
313 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, *name, *code)); 313 JIT_CODE_EVENT(AddCode(*name, *code));
314 JSObject::UpdateMapCodeCache(receiver, name, code); 314 JSObject::UpdateMapCodeCache(receiver, name, code);
315 return code; 315 return code;
316 } 316 }
317 317
318 318
319 Handle<Code> StubCache::ComputeKeyedLoadCallback( 319 Handle<Code> StubCache::ComputeKeyedLoadCallback(
320 Handle<String> name, 320 Handle<String> name,
321 Handle<JSObject> receiver, 321 Handle<JSObject> receiver,
322 Handle<JSObject> holder, 322 Handle<JSObject> holder,
323 Handle<AccessorInfo> callback) { 323 Handle<AccessorInfo> callback) {
324 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP); 324 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
325 Code::Flags flags = 325 Code::Flags flags =
326 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::CALLBACKS); 326 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::CALLBACKS);
327 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 327 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
328 if (probe->IsCode()) return Handle<Code>::cast(probe); 328 if (probe->IsCode()) return Handle<Code>::cast(probe);
329 329
330 KeyedLoadStubCompiler compiler(isolate_); 330 KeyedLoadStubCompiler compiler(isolate_);
331 Handle<Code> code = 331 Handle<Code> code =
332 compiler.CompileLoadCallback(name, receiver, holder, callback); 332 compiler.CompileLoadCallback(name, receiver, holder, callback);
333 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name)); 333 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name));
334 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, *name, *code)); 334 JIT_CODE_EVENT(AddCode(*name, *code));
335 JSObject::UpdateMapCodeCache(receiver, name, code); 335 JSObject::UpdateMapCodeCache(receiver, name, code);
336 return code; 336 return code;
337 } 337 }
338 338
339 339
340 Handle<Code> StubCache::ComputeKeyedLoadArrayLength(Handle<String> name, 340 Handle<Code> StubCache::ComputeKeyedLoadArrayLength(Handle<String> name,
341 Handle<JSArray> receiver) { 341 Handle<JSArray> receiver) {
342 Code::Flags flags = 342 Code::Flags flags =
343 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::CALLBACKS); 343 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::CALLBACKS);
344 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 344 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
345 if (probe->IsCode()) return Handle<Code>::cast(probe); 345 if (probe->IsCode()) return Handle<Code>::cast(probe);
346 346
347 KeyedLoadStubCompiler compiler(isolate_); 347 KeyedLoadStubCompiler compiler(isolate_);
348 Handle<Code> code = compiler.CompileLoadArrayLength(name); 348 Handle<Code> code = compiler.CompileLoadArrayLength(name);
349 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name)); 349 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name));
350 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, *name, *code)); 350 JIT_CODE_EVENT(AddCode(*name, *code));
351 JSObject::UpdateMapCodeCache(receiver, name, code); 351 JSObject::UpdateMapCodeCache(receiver, name, code);
352 return code; 352 return code;
353 } 353 }
354 354
355 355
356 Handle<Code> StubCache::ComputeKeyedLoadStringLength(Handle<String> name, 356 Handle<Code> StubCache::ComputeKeyedLoadStringLength(Handle<String> name,
357 Handle<String> receiver) { 357 Handle<String> receiver) {
358 Code::Flags flags = 358 Code::Flags flags =
359 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::CALLBACKS); 359 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::CALLBACKS);
360 Handle<Map> map(receiver->map()); 360 Handle<Map> map(receiver->map());
361 Handle<Object> probe(map->FindInCodeCache(*name, flags)); 361 Handle<Object> probe(map->FindInCodeCache(*name, flags));
362 if (probe->IsCode()) return Handle<Code>::cast(probe); 362 if (probe->IsCode()) return Handle<Code>::cast(probe);
363 363
364 KeyedLoadStubCompiler compiler(isolate_); 364 KeyedLoadStubCompiler compiler(isolate_);
365 Handle<Code> code = compiler.CompileLoadStringLength(name); 365 Handle<Code> code = compiler.CompileLoadStringLength(name);
366 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name)); 366 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name));
367 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, *name, *code)); 367 JIT_CODE_EVENT(AddCode(*name, *code));
368 Map::UpdateCodeCache(map, name, code); 368 Map::UpdateCodeCache(map, name, code);
369 return code; 369 return code;
370 } 370 }
371 371
372 372
373 Handle<Code> StubCache::ComputeKeyedLoadFunctionPrototype( 373 Handle<Code> StubCache::ComputeKeyedLoadFunctionPrototype(
374 Handle<String> name, 374 Handle<String> name,
375 Handle<JSFunction> receiver) { 375 Handle<JSFunction> receiver) {
376 Code::Flags flags = 376 Code::Flags flags =
377 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::CALLBACKS); 377 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::CALLBACKS);
378 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 378 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
379 if (probe->IsCode()) return Handle<Code>::cast(probe); 379 if (probe->IsCode()) return Handle<Code>::cast(probe);
380 380
381 KeyedLoadStubCompiler compiler(isolate_); 381 KeyedLoadStubCompiler compiler(isolate_);
382 Handle<Code> code = compiler.CompileLoadFunctionPrototype(name); 382 Handle<Code> code = compiler.CompileLoadFunctionPrototype(name);
383 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name)); 383 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name));
384 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, *name, *code)); 384 JIT_CODE_EVENT(AddCode(*name, *code));
385 JSObject::UpdateMapCodeCache(receiver, name, code); 385 JSObject::UpdateMapCodeCache(receiver, name, code);
386 return code; 386 return code;
387 } 387 }
388 388
389 389
390 Handle<Code> StubCache::ComputeStoreField(Handle<String> name, 390 Handle<Code> StubCache::ComputeStoreField(Handle<String> name,
391 Handle<JSObject> receiver, 391 Handle<JSObject> receiver,
392 int field_index, 392 int field_index,
393 Handle<Map> transition, 393 Handle<Map> transition,
394 StrictModeFlag strict_mode) { 394 StrictModeFlag strict_mode) {
395 Code::StubType type = 395 Code::StubType type =
396 (transition.is_null()) ? Code::FIELD : Code::MAP_TRANSITION; 396 (transition.is_null()) ? Code::FIELD : Code::MAP_TRANSITION;
397 Code::Flags flags = Code::ComputeMonomorphicFlags( 397 Code::Flags flags = Code::ComputeMonomorphicFlags(
398 Code::STORE_IC, type, strict_mode); 398 Code::STORE_IC, type, strict_mode);
399 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 399 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
400 if (probe->IsCode()) return Handle<Code>::cast(probe); 400 if (probe->IsCode()) return Handle<Code>::cast(probe);
401 401
402 StoreStubCompiler compiler(isolate_, strict_mode); 402 StoreStubCompiler compiler(isolate_, strict_mode);
403 Handle<Code> code = 403 Handle<Code> code =
404 compiler.CompileStoreField(receiver, field_index, transition, name); 404 compiler.CompileStoreField(receiver, field_index, transition, name);
405 PROFILE(isolate_, CodeCreateEvent(Logger::STORE_IC_TAG, *code, *name)); 405 PROFILE(isolate_, CodeCreateEvent(Logger::STORE_IC_TAG, *code, *name));
406 GDBJIT(AddCode(GDBJITInterface::STORE_IC, *name, *code)); 406 JIT_CODE_EVENT(AddCode(*name, *code));
407 JSObject::UpdateMapCodeCache(receiver, name, code); 407 JSObject::UpdateMapCodeCache(receiver, name, code);
408 return code; 408 return code;
409 } 409 }
410 410
411 411
412 Handle<Code> StubCache::ComputeKeyedLoadOrStoreElement( 412 Handle<Code> StubCache::ComputeKeyedLoadOrStoreElement(
413 Handle<Map> receiver_map, 413 Handle<Map> receiver_map,
414 KeyedIC::StubKind stub_kind, 414 KeyedIC::StubKind stub_kind,
415 StrictModeFlag strict_mode) { 415 StrictModeFlag strict_mode) {
416 KeyedAccessGrowMode grow_mode = 416 KeyedAccessGrowMode grow_mode =
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 } 462 }
463 default: 463 default:
464 UNREACHABLE(); 464 UNREACHABLE();
465 break; 465 break;
466 } 466 }
467 467
468 ASSERT(!code.is_null()); 468 ASSERT(!code.is_null());
469 469
470 if (stub_kind == KeyedIC::LOAD) { 470 if (stub_kind == KeyedIC::LOAD) {
471 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, 0)); 471 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, 0));
472 JIT_CODE_EVENT(AddCode(*name, *code));
472 } else { 473 } else {
473 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, *code, 0)); 474 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, *code, 0));
475 JIT_CODE_EVENT(AddCode(*name, *code));
474 } 476 }
475 Map::UpdateCodeCache(receiver_map, name, code); 477 Map::UpdateCodeCache(receiver_map, name, code);
476 return code; 478 return code;
477 } 479 }
478 480
479 481
480 Handle<Code> StubCache::ComputeStoreNormal(StrictModeFlag strict_mode) { 482 Handle<Code> StubCache::ComputeStoreNormal(StrictModeFlag strict_mode) {
481 return (strict_mode == kStrictMode) 483 return (strict_mode == kStrictMode)
482 ? isolate_->builtins()->Builtins::StoreIC_Normal_Strict() 484 ? isolate_->builtins()->Builtins::StoreIC_Normal_Strict()
483 : isolate_->builtins()->Builtins::StoreIC_Normal(); 485 : isolate_->builtins()->Builtins::StoreIC_Normal();
484 } 486 }
485 487
486 488
487 Handle<Code> StubCache::ComputeStoreGlobal(Handle<String> name, 489 Handle<Code> StubCache::ComputeStoreGlobal(Handle<String> name,
488 Handle<GlobalObject> receiver, 490 Handle<GlobalObject> receiver,
489 Handle<JSGlobalPropertyCell> cell, 491 Handle<JSGlobalPropertyCell> cell,
490 StrictModeFlag strict_mode) { 492 StrictModeFlag strict_mode) {
491 Code::Flags flags = Code::ComputeMonomorphicFlags( 493 Code::Flags flags = Code::ComputeMonomorphicFlags(
492 Code::STORE_IC, Code::NORMAL, strict_mode); 494 Code::STORE_IC, Code::NORMAL, strict_mode);
493 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 495 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
494 if (probe->IsCode()) return Handle<Code>::cast(probe); 496 if (probe->IsCode()) return Handle<Code>::cast(probe);
495 497
496 StoreStubCompiler compiler(isolate_, strict_mode); 498 StoreStubCompiler compiler(isolate_, strict_mode);
497 Handle<Code> code = compiler.CompileStoreGlobal(receiver, cell, name); 499 Handle<Code> code = compiler.CompileStoreGlobal(receiver, cell, name);
498 PROFILE(isolate_, CodeCreateEvent(Logger::STORE_IC_TAG, *code, *name)); 500 PROFILE(isolate_, CodeCreateEvent(Logger::STORE_IC_TAG, *code, *name));
499 GDBJIT(AddCode(GDBJITInterface::STORE_IC, *name, *code)); 501 JIT_CODE_EVENT(AddCode(*name, *code));
500 JSObject::UpdateMapCodeCache(receiver, name, code); 502 JSObject::UpdateMapCodeCache(receiver, name, code);
501 return code; 503 return code;
502 } 504 }
503 505
504 506
505 Handle<Code> StubCache::ComputeStoreCallback(Handle<String> name, 507 Handle<Code> StubCache::ComputeStoreCallback(Handle<String> name,
506 Handle<JSObject> receiver, 508 Handle<JSObject> receiver,
507 Handle<AccessorInfo> callback, 509 Handle<AccessorInfo> callback,
508 StrictModeFlag strict_mode) { 510 StrictModeFlag strict_mode) {
509 ASSERT(v8::ToCData<Address>(callback->setter()) != 0); 511 ASSERT(v8::ToCData<Address>(callback->setter()) != 0);
510 Code::Flags flags = Code::ComputeMonomorphicFlags( 512 Code::Flags flags = Code::ComputeMonomorphicFlags(
511 Code::STORE_IC, Code::CALLBACKS, strict_mode); 513 Code::STORE_IC, Code::CALLBACKS, strict_mode);
512 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 514 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
513 if (probe->IsCode()) return Handle<Code>::cast(probe); 515 if (probe->IsCode()) return Handle<Code>::cast(probe);
514 516
515 StoreStubCompiler compiler(isolate_, strict_mode); 517 StoreStubCompiler compiler(isolate_, strict_mode);
516 Handle<Code> code = compiler.CompileStoreCallback(receiver, callback, name); 518 Handle<Code> code = compiler.CompileStoreCallback(receiver, callback, name);
517 PROFILE(isolate_, CodeCreateEvent(Logger::STORE_IC_TAG, *code, *name)); 519 PROFILE(isolate_, CodeCreateEvent(Logger::STORE_IC_TAG, *code, *name));
518 GDBJIT(AddCode(GDBJITInterface::STORE_IC, *name, *code)); 520 JIT_CODE_EVENT(AddCode(*name, *code));
519 JSObject::UpdateMapCodeCache(receiver, name, code); 521 JSObject::UpdateMapCodeCache(receiver, name, code);
520 return code; 522 return code;
521 } 523 }
522 524
523 525
524 Handle<Code> StubCache::ComputeStoreViaSetter(Handle<String> name, 526 Handle<Code> StubCache::ComputeStoreViaSetter(Handle<String> name,
525 Handle<JSObject> receiver, 527 Handle<JSObject> receiver,
526 Handle<JSObject> holder, 528 Handle<JSObject> holder,
527 Handle<JSFunction> setter, 529 Handle<JSFunction> setter,
528 StrictModeFlag strict_mode) { 530 StrictModeFlag strict_mode) {
529 Code::Flags flags = Code::ComputeMonomorphicFlags( 531 Code::Flags flags = Code::ComputeMonomorphicFlags(
530 Code::STORE_IC, Code::CALLBACKS, strict_mode); 532 Code::STORE_IC, Code::CALLBACKS, strict_mode);
531 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 533 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
532 if (probe->IsCode()) return Handle<Code>::cast(probe); 534 if (probe->IsCode()) return Handle<Code>::cast(probe);
533 535
534 StoreStubCompiler compiler(isolate_, strict_mode); 536 StoreStubCompiler compiler(isolate_, strict_mode);
535 Handle<Code> code = 537 Handle<Code> code =
536 compiler.CompileStoreViaSetter(name, receiver, holder, setter); 538 compiler.CompileStoreViaSetter(name, receiver, holder, setter);
537 PROFILE(isolate_, CodeCreateEvent(Logger::STORE_IC_TAG, *code, *name)); 539 PROFILE(isolate_, CodeCreateEvent(Logger::STORE_IC_TAG, *code, *name));
538 GDBJIT(AddCode(GDBJITInterface::STORE_IC, *name, *code)); 540 JIT_CODE_EVENT(AddCode(*name, *code));
539 JSObject::UpdateMapCodeCache(receiver, name, code); 541 JSObject::UpdateMapCodeCache(receiver, name, code);
540 return code; 542 return code;
541 } 543 }
542 544
543 545
544 Handle<Code> StubCache::ComputeStoreInterceptor(Handle<String> name, 546 Handle<Code> StubCache::ComputeStoreInterceptor(Handle<String> name,
545 Handle<JSObject> receiver, 547 Handle<JSObject> receiver,
546 StrictModeFlag strict_mode) { 548 StrictModeFlag strict_mode) {
547 Code::Flags flags = Code::ComputeMonomorphicFlags( 549 Code::Flags flags = Code::ComputeMonomorphicFlags(
548 Code::STORE_IC, Code::INTERCEPTOR, strict_mode); 550 Code::STORE_IC, Code::INTERCEPTOR, strict_mode);
549 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 551 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
550 if (probe->IsCode()) return Handle<Code>::cast(probe); 552 if (probe->IsCode()) return Handle<Code>::cast(probe);
551 553
552 StoreStubCompiler compiler(isolate_, strict_mode); 554 StoreStubCompiler compiler(isolate_, strict_mode);
553 Handle<Code> code = compiler.CompileStoreInterceptor(receiver, name); 555 Handle<Code> code = compiler.CompileStoreInterceptor(receiver, name);
554 PROFILE(isolate_, CodeCreateEvent(Logger::STORE_IC_TAG, *code, *name)); 556 PROFILE(isolate_, CodeCreateEvent(Logger::STORE_IC_TAG, *code, *name));
555 GDBJIT(AddCode(GDBJITInterface::STORE_IC, *name, *code)); 557 JIT_CODE_EVENT(AddCode(*name, *code));
556 JSObject::UpdateMapCodeCache(receiver, name, code); 558 JSObject::UpdateMapCodeCache(receiver, name, code);
557 return code; 559 return code;
558 } 560 }
559 561
560 Handle<Code> StubCache::ComputeKeyedStoreField(Handle<String> name, 562 Handle<Code> StubCache::ComputeKeyedStoreField(Handle<String> name,
561 Handle<JSObject> receiver, 563 Handle<JSObject> receiver,
562 int field_index, 564 int field_index,
563 Handle<Map> transition, 565 Handle<Map> transition,
564 StrictModeFlag strict_mode) { 566 StrictModeFlag strict_mode) {
565 Code::StubType type = 567 Code::StubType type =
566 (transition.is_null()) ? Code::FIELD : Code::MAP_TRANSITION; 568 (transition.is_null()) ? Code::FIELD : Code::MAP_TRANSITION;
567 Code::Flags flags = Code::ComputeMonomorphicFlags( 569 Code::Flags flags = Code::ComputeMonomorphicFlags(
568 Code::KEYED_STORE_IC, type, strict_mode); 570 Code::KEYED_STORE_IC, type, strict_mode);
569 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); 571 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
570 if (probe->IsCode()) return Handle<Code>::cast(probe); 572 if (probe->IsCode()) return Handle<Code>::cast(probe);
571 573
572 KeyedStoreStubCompiler compiler(isolate(), strict_mode, 574 KeyedStoreStubCompiler compiler(isolate(), strict_mode,
573 DO_NOT_ALLOW_JSARRAY_GROWTH); 575 DO_NOT_ALLOW_JSARRAY_GROWTH);
574 Handle<Code> code = 576 Handle<Code> code =
575 compiler.CompileStoreField(receiver, field_index, transition, name); 577 compiler.CompileStoreField(receiver, field_index, transition, name);
576 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, *code, *name)); 578 PROFILE(isolate_, CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, *code, *name));
577 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC, *name, *code)); 579 JIT_CODE_EVENT(AddCode(*name, *code));
578 JSObject::UpdateMapCodeCache(receiver, name, code); 580 JSObject::UpdateMapCodeCache(receiver, name, code);
579 return code; 581 return code;
580 } 582 }
581 583
582 584
583 #define CALL_LOGGER_TAG(kind, type) \ 585 #define CALL_LOGGER_TAG(kind, type) \
584 (kind == Code::CALL_IC ? Logger::type : Logger::KEYED_##type) 586 (kind == Code::CALL_IC ? Logger::type : Logger::KEYED_##type)
585 587
586 Handle<Code> StubCache::ComputeCallConstant(int argc, 588 Handle<Code> StubCache::ComputeCallConstant(int argc,
587 Code::Kind kind, 589 Code::Kind kind,
(...skipping 23 matching lines...) Expand all
611 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags)); 613 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags));
612 if (probe->IsCode()) return Handle<Code>::cast(probe); 614 if (probe->IsCode()) return Handle<Code>::cast(probe);
613 615
614 CallStubCompiler compiler(isolate_, argc, kind, extra_state, cache_holder); 616 CallStubCompiler compiler(isolate_, argc, kind, extra_state, cache_holder);
615 Handle<Code> code = 617 Handle<Code> code =
616 compiler.CompileCallConstant(object, holder, function, name, check); 618 compiler.CompileCallConstant(object, holder, function, name, check);
617 code->set_check_type(check); 619 code->set_check_type(check);
618 ASSERT_EQ(flags, code->flags()); 620 ASSERT_EQ(flags, code->flags());
619 PROFILE(isolate_, 621 PROFILE(isolate_,
620 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name)); 622 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name));
621 GDBJIT(AddCode(GDBJITInterface::CALL_IC, *name, *code)); 623 JIT_CODE_EVENT(AddCode(*name, *code));
622 JSObject::UpdateMapCodeCache(map_holder, name, code); 624 JSObject::UpdateMapCodeCache(map_holder, name, code);
623 return code; 625 return code;
624 } 626 }
625 627
626 628
627 Handle<Code> StubCache::ComputeCallField(int argc, 629 Handle<Code> StubCache::ComputeCallField(int argc,
628 Code::Kind kind, 630 Code::Kind kind,
629 Code::ExtraICState extra_state, 631 Code::ExtraICState extra_state,
630 Handle<String> name, 632 Handle<String> name,
631 Handle<Object> object, 633 Handle<Object> object,
(...skipping 17 matching lines...) Expand all
649 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags)); 651 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags));
650 if (probe->IsCode()) return Handle<Code>::cast(probe); 652 if (probe->IsCode()) return Handle<Code>::cast(probe);
651 653
652 CallStubCompiler compiler(isolate_, argc, kind, extra_state, cache_holder); 654 CallStubCompiler compiler(isolate_, argc, kind, extra_state, cache_holder);
653 Handle<Code> code = 655 Handle<Code> code =
654 compiler.CompileCallField(Handle<JSObject>::cast(object), 656 compiler.CompileCallField(Handle<JSObject>::cast(object),
655 holder, index, name); 657 holder, index, name);
656 ASSERT_EQ(flags, code->flags()); 658 ASSERT_EQ(flags, code->flags());
657 PROFILE(isolate_, 659 PROFILE(isolate_,
658 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name)); 660 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name));
659 GDBJIT(AddCode(GDBJITInterface::CALL_IC, *name, *code)); 661 JIT_CODE_EVENT(AddCode(*name, *code));
660 JSObject::UpdateMapCodeCache(map_holder, name, code); 662 JSObject::UpdateMapCodeCache(map_holder, name, code);
661 return code; 663 return code;
662 } 664 }
663 665
664 666
665 Handle<Code> StubCache::ComputeCallInterceptor(int argc, 667 Handle<Code> StubCache::ComputeCallInterceptor(int argc,
666 Code::Kind kind, 668 Code::Kind kind,
667 Code::ExtraICState extra_state, 669 Code::ExtraICState extra_state,
668 Handle<String> name, 670 Handle<String> name,
669 Handle<Object> object, 671 Handle<Object> object,
(...skipping 16 matching lines...) Expand all
686 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags)); 688 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags));
687 if (probe->IsCode()) return Handle<Code>::cast(probe); 689 if (probe->IsCode()) return Handle<Code>::cast(probe);
688 690
689 CallStubCompiler compiler(isolate(), argc, kind, extra_state, cache_holder); 691 CallStubCompiler compiler(isolate(), argc, kind, extra_state, cache_holder);
690 Handle<Code> code = 692 Handle<Code> code =
691 compiler.CompileCallInterceptor(Handle<JSObject>::cast(object), 693 compiler.CompileCallInterceptor(Handle<JSObject>::cast(object),
692 holder, name); 694 holder, name);
693 ASSERT_EQ(flags, code->flags()); 695 ASSERT_EQ(flags, code->flags());
694 PROFILE(isolate(), 696 PROFILE(isolate(),
695 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name)); 697 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name));
696 GDBJIT(AddCode(GDBJITInterface::CALL_IC, *name, *code)); 698 JIT_CODE_EVENT(AddCode(*name, *code));
697 JSObject::UpdateMapCodeCache(map_holder, name, code); 699 JSObject::UpdateMapCodeCache(map_holder, name, code);
698 return code; 700 return code;
699 } 701 }
700 702
701 703
702 Handle<Code> StubCache::ComputeCallGlobal(int argc, 704 Handle<Code> StubCache::ComputeCallGlobal(int argc,
703 Code::Kind kind, 705 Code::Kind kind,
704 Code::ExtraICState extra_state, 706 Code::ExtraICState extra_state,
705 Handle<String> name, 707 Handle<String> name,
706 Handle<JSObject> receiver, 708 Handle<JSObject> receiver,
707 Handle<GlobalObject> holder, 709 Handle<GlobalObject> holder,
708 Handle<JSGlobalPropertyCell> cell, 710 Handle<JSGlobalPropertyCell> cell,
709 Handle<JSFunction> function) { 711 Handle<JSFunction> function) {
710 InlineCacheHolderFlag cache_holder = 712 InlineCacheHolderFlag cache_holder =
711 IC::GetCodeCacheForObject(*receiver, *holder); 713 IC::GetCodeCacheForObject(*receiver, *holder);
712 Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*receiver, cache_holder)); 714 Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*receiver, cache_holder));
713 Code::Flags flags = 715 Code::Flags flags =
714 Code::ComputeMonomorphicFlags(kind, Code::NORMAL, extra_state, 716 Code::ComputeMonomorphicFlags(kind, Code::NORMAL, extra_state,
715 cache_holder, argc); 717 cache_holder, argc);
716 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags)); 718 Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags));
717 if (probe->IsCode()) return Handle<Code>::cast(probe); 719 if (probe->IsCode()) return Handle<Code>::cast(probe);
718 720
719 CallStubCompiler compiler(isolate(), argc, kind, extra_state, cache_holder); 721 CallStubCompiler compiler(isolate(), argc, kind, extra_state, cache_holder);
720 Handle<Code> code = 722 Handle<Code> code =
721 compiler.CompileCallGlobal(receiver, holder, cell, function, name); 723 compiler.CompileCallGlobal(receiver, holder, cell, function, name);
722 ASSERT_EQ(flags, code->flags()); 724 ASSERT_EQ(flags, code->flags());
723 PROFILE(isolate(), 725 PROFILE(isolate(),
724 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name)); 726 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name));
725 GDBJIT(AddCode(GDBJITInterface::CALL_IC, *name, *code)); 727 JIT_CODE_EVENT(AddCode(*name, *code));
726 JSObject::UpdateMapCodeCache(map_holder, name, code); 728 JSObject::UpdateMapCodeCache(map_holder, name, code);
727 return code; 729 return code;
728 } 730 }
729 731
730 732
731 static void FillCache(Isolate* isolate, Handle<Code> code) { 733 static void FillCache(Isolate* isolate, Handle<Code> code) {
732 Handle<UnseededNumberDictionary> dictionary = 734 Handle<UnseededNumberDictionary> dictionary =
733 UnseededNumberDictionary::Set(isolate->factory()->non_monomorphic_cache(), 735 UnseededNumberDictionary::Set(isolate->factory()->non_monomorphic_cache(),
734 code->flags(), 736 code->flags(),
735 code); 737 code);
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
1195 if (kind == Code::CALL_IC) { 1197 if (kind == Code::CALL_IC) {
1196 CallIC::GenerateInitialize(masm(), argc, extra_state); 1198 CallIC::GenerateInitialize(masm(), argc, extra_state);
1197 } else { 1199 } else {
1198 KeyedCallIC::GenerateInitialize(masm(), argc); 1200 KeyedCallIC::GenerateInitialize(masm(), argc);
1199 } 1201 }
1200 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallInitialize"); 1202 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallInitialize");
1201 isolate()->counters()->call_initialize_stubs()->Increment(); 1203 isolate()->counters()->call_initialize_stubs()->Increment();
1202 PROFILE(isolate(), 1204 PROFILE(isolate(),
1203 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_INITIALIZE_TAG), 1205 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_INITIALIZE_TAG),
1204 *code, code->arguments_count())); 1206 *code, code->arguments_count()));
1205 GDBJIT(AddCode(GDBJITInterface::CALL_INITIALIZE, *code)); 1207 JIT_CODE_EVENT(AddCode(*code));
1206 return code; 1208 return code;
1207 } 1209 }
1208 1210
1209 1211
1210 Handle<Code> StubCompiler::CompileCallPreMonomorphic(Code::Flags flags) { 1212 Handle<Code> StubCompiler::CompileCallPreMonomorphic(Code::Flags flags) {
1211 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1213 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1212 // The code of the PreMonomorphic stub is the same as the code 1214 // The code of the PreMonomorphic stub is the same as the code
1213 // of the Initialized stub. They just differ on the code object flags. 1215 // of the Initialized stub. They just differ on the code object flags.
1214 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1216 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1215 Code::ExtraICState extra_state = Code::ExtractExtraICStateFromFlags(flags); 1217 Code::ExtraICState extra_state = Code::ExtractExtraICStateFromFlags(flags);
1216 if (kind == Code::CALL_IC) { 1218 if (kind == Code::CALL_IC) {
1217 CallIC::GenerateInitialize(masm(), argc, extra_state); 1219 CallIC::GenerateInitialize(masm(), argc, extra_state);
1218 } else { 1220 } else {
1219 KeyedCallIC::GenerateInitialize(masm(), argc); 1221 KeyedCallIC::GenerateInitialize(masm(), argc);
1220 } 1222 }
1221 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallPreMonomorphic"); 1223 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallPreMonomorphic");
1222 isolate()->counters()->call_premonomorphic_stubs()->Increment(); 1224 isolate()->counters()->call_premonomorphic_stubs()->Increment();
1223 PROFILE(isolate(), 1225 PROFILE(isolate(),
1224 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_PRE_MONOMORPHIC_TAG), 1226 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_PRE_MONOMORPHIC_TAG),
1225 *code, code->arguments_count())); 1227 *code, code->arguments_count()));
1226 GDBJIT(AddCode(GDBJITInterface::CALL_PRE_MONOMORPHIC, *code)); 1228 JIT_CODE_EVENT(AddCode(*code));
1227 return code; 1229 return code;
1228 } 1230 }
1229 1231
1230 1232
1231 Handle<Code> StubCompiler::CompileCallNormal(Code::Flags flags) { 1233 Handle<Code> StubCompiler::CompileCallNormal(Code::Flags flags) {
1232 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1234 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1233 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1235 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1234 if (kind == Code::CALL_IC) { 1236 if (kind == Code::CALL_IC) {
1235 // Call normal is always with a explict receiver. 1237 // Call normal is always with a explict receiver.
1236 ASSERT(!CallIC::Contextual::decode( 1238 ASSERT(!CallIC::Contextual::decode(
1237 Code::ExtractExtraICStateFromFlags(flags))); 1239 Code::ExtractExtraICStateFromFlags(flags)));
1238 CallIC::GenerateNormal(masm(), argc); 1240 CallIC::GenerateNormal(masm(), argc);
1239 } else { 1241 } else {
1240 KeyedCallIC::GenerateNormal(masm(), argc); 1242 KeyedCallIC::GenerateNormal(masm(), argc);
1241 } 1243 }
1242 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallNormal"); 1244 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallNormal");
1243 isolate()->counters()->call_normal_stubs()->Increment(); 1245 isolate()->counters()->call_normal_stubs()->Increment();
1244 PROFILE(isolate(), 1246 PROFILE(isolate(),
1245 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_NORMAL_TAG), 1247 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_NORMAL_TAG),
1246 *code, code->arguments_count())); 1248 *code, code->arguments_count()));
1247 GDBJIT(AddCode(GDBJITInterface::CALL_NORMAL, *code)); 1249 JIT_CODE_EVENT(AddCode(*code));
1248 return code; 1250 return code;
1249 } 1251 }
1250 1252
1251 1253
1252 Handle<Code> StubCompiler::CompileCallMegamorphic(Code::Flags flags) { 1254 Handle<Code> StubCompiler::CompileCallMegamorphic(Code::Flags flags) {
1253 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1255 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1254 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1256 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1255 Code::ExtraICState extra_state = Code::ExtractExtraICStateFromFlags(flags); 1257 Code::ExtraICState extra_state = Code::ExtractExtraICStateFromFlags(flags);
1256 if (kind == Code::CALL_IC) { 1258 if (kind == Code::CALL_IC) {
1257 CallIC::GenerateMegamorphic(masm(), argc, extra_state); 1259 CallIC::GenerateMegamorphic(masm(), argc, extra_state);
1258 } else { 1260 } else {
1259 KeyedCallIC::GenerateMegamorphic(masm(), argc); 1261 KeyedCallIC::GenerateMegamorphic(masm(), argc);
1260 } 1262 }
1261 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallMegamorphic"); 1263 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallMegamorphic");
1262 isolate()->counters()->call_megamorphic_stubs()->Increment(); 1264 isolate()->counters()->call_megamorphic_stubs()->Increment();
1263 PROFILE(isolate(), 1265 PROFILE(isolate(),
1264 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MEGAMORPHIC_TAG), 1266 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MEGAMORPHIC_TAG),
1265 *code, code->arguments_count())); 1267 *code, code->arguments_count()));
1266 GDBJIT(AddCode(GDBJITInterface::CALL_MEGAMORPHIC, *code)); 1268 JIT_CODE_EVENT(AddCode(*code));
1267 return code; 1269 return code;
1268 } 1270 }
1269 1271
1270 1272
1271 Handle<Code> StubCompiler::CompileCallArguments(Code::Flags flags) { 1273 Handle<Code> StubCompiler::CompileCallArguments(Code::Flags flags) {
1272 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1274 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1273 KeyedCallIC::GenerateNonStrictArguments(masm(), argc); 1275 KeyedCallIC::GenerateNonStrictArguments(masm(), argc);
1274 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallArguments"); 1276 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallArguments");
1275 PROFILE(isolate(), 1277 PROFILE(isolate(),
1276 CodeCreateEvent(CALL_LOGGER_TAG(Code::ExtractKindFromFlags(flags), 1278 CodeCreateEvent(CALL_LOGGER_TAG(Code::ExtractKindFromFlags(flags),
1277 CALL_MEGAMORPHIC_TAG), 1279 CALL_MEGAMORPHIC_TAG),
1278 *code, code->arguments_count())); 1280 *code, code->arguments_count()));
1279 GDBJIT(AddCode(GDBJITInterface::CALL_MEGAMORPHIC, *code)); 1281 JIT_CODE_EVENT(AddCode(*code));
1280 return code; 1282 return code;
1281 } 1283 }
1282 1284
1283 1285
1284 Handle<Code> StubCompiler::CompileCallMiss(Code::Flags flags) { 1286 Handle<Code> StubCompiler::CompileCallMiss(Code::Flags flags) {
1285 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1287 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1286 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1288 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1287 Code::ExtraICState extra_state = Code::ExtractExtraICStateFromFlags(flags); 1289 Code::ExtraICState extra_state = Code::ExtractExtraICStateFromFlags(flags);
1288 if (kind == Code::CALL_IC) { 1290 if (kind == Code::CALL_IC) {
1289 CallIC::GenerateMiss(masm(), argc, extra_state); 1291 CallIC::GenerateMiss(masm(), argc, extra_state);
1290 } else { 1292 } else {
1291 KeyedCallIC::GenerateMiss(masm(), argc); 1293 KeyedCallIC::GenerateMiss(masm(), argc);
1292 } 1294 }
1293 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallMiss"); 1295 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallMiss");
1294 isolate()->counters()->call_megamorphic_stubs()->Increment(); 1296 isolate()->counters()->call_megamorphic_stubs()->Increment();
1295 PROFILE(isolate(), 1297 PROFILE(isolate(),
1296 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MISS_TAG), 1298 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MISS_TAG),
1297 *code, code->arguments_count())); 1299 *code, code->arguments_count()));
1298 GDBJIT(AddCode(GDBJITInterface::CALL_MISS, *code)); 1300 JIT_CODE_EVENT(AddCode(*code));
1299 return code; 1301 return code;
1300 } 1302 }
1301 1303
1302 1304
1303 #ifdef ENABLE_DEBUGGER_SUPPORT 1305 #ifdef ENABLE_DEBUGGER_SUPPORT
1304 Handle<Code> StubCompiler::CompileCallDebugBreak(Code::Flags flags) { 1306 Handle<Code> StubCompiler::CompileCallDebugBreak(Code::Flags flags) {
1305 Debug::GenerateCallICDebugBreak(masm()); 1307 Debug::GenerateCallICDebugBreak(masm());
1306 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallDebugBreak"); 1308 Handle<Code> code = GetCodeWithFlags(flags, "CompileCallDebugBreak");
1307 PROFILE(isolate(), 1309 PROFILE(isolate(),
1308 CodeCreateEvent(CALL_LOGGER_TAG(Code::ExtractKindFromFlags(flags), 1310 CodeCreateEvent(CALL_LOGGER_TAG(Code::ExtractKindFromFlags(flags),
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1365 if (holder->GetPrototype()->IsNull()) return; 1367 if (holder->GetPrototype()->IsNull()) return;
1366 holder->GetPrototype()->Lookup(*name, lookup); 1368 holder->GetPrototype()->Lookup(*name, lookup);
1367 } 1369 }
1368 1370
1369 1371
1370 Handle<Code> LoadStubCompiler::GetCode(Code::StubType type, 1372 Handle<Code> LoadStubCompiler::GetCode(Code::StubType type,
1371 Handle<String> name) { 1373 Handle<String> name) {
1372 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, type); 1374 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, type);
1373 Handle<Code> code = GetCodeWithFlags(flags, name); 1375 Handle<Code> code = GetCodeWithFlags(flags, name);
1374 PROFILE(isolate(), CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name)); 1376 PROFILE(isolate(), CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
1375 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code)); 1377 JIT_CODE_EVENT(AddCode(*name, *code));
1376 return code; 1378 return code;
1377 } 1379 }
1378 1380
1379 1381
1380 Handle<Code> KeyedLoadStubCompiler::GetCode(Code::StubType type, 1382 Handle<Code> KeyedLoadStubCompiler::GetCode(Code::StubType type,
1381 Handle<String> name, 1383 Handle<String> name,
1382 InlineCacheState state) { 1384 InlineCacheState state) {
1383 Code::Flags flags = Code::ComputeFlags( 1385 Code::Flags flags = Code::ComputeFlags(
1384 Code::KEYED_LOAD_IC, state, Code::kNoExtraICState, type); 1386 Code::KEYED_LOAD_IC, state, Code::kNoExtraICState, type);
1385 Handle<Code> code = GetCodeWithFlags(flags, name); 1387 Handle<Code> code = GetCodeWithFlags(flags, name);
1386 PROFILE(isolate(), CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name)); 1388 PROFILE(isolate(), CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, *code, *name));
1387 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code)); 1389 JIT_CODE_EVENT(AddCode(*name, *code));
1388 return code; 1390 return code;
1389 } 1391 }
1390 1392
1391 1393
1392 Handle<Code> StoreStubCompiler::GetCode(Code::StubType type, 1394 Handle<Code> StoreStubCompiler::GetCode(Code::StubType type,
1393 Handle<String> name) { 1395 Handle<String> name) {
1394 Code::Flags flags = 1396 Code::Flags flags =
1395 Code::ComputeMonomorphicFlags(Code::STORE_IC, type, strict_mode_); 1397 Code::ComputeMonomorphicFlags(Code::STORE_IC, type, strict_mode_);
1396 Handle<Code> code = GetCodeWithFlags(flags, name); 1398 Handle<Code> code = GetCodeWithFlags(flags, name);
1397 PROFILE(isolate(), CodeCreateEvent(Logger::STORE_IC_TAG, *code, *name)); 1399 PROFILE(isolate(), CodeCreateEvent(Logger::STORE_IC_TAG, *code, *name));
1398 GDBJIT(AddCode(GDBJITInterface::STORE_IC, *name, *code)); 1400 JIT_CODE_EVENT(AddCode(*name, *code));
1399 return code; 1401 return code;
1400 } 1402 }
1401 1403
1402 1404
1403 Handle<Code> KeyedStoreStubCompiler::GetCode(Code::StubType type, 1405 Handle<Code> KeyedStoreStubCompiler::GetCode(Code::StubType type,
1404 Handle<String> name, 1406 Handle<String> name,
1405 InlineCacheState state) { 1407 InlineCacheState state) {
1406 Code::ExtraICState extra_state = 1408 Code::ExtraICState extra_state =
1407 Code::ComputeExtraICState(grow_mode_, strict_mode_); 1409 Code::ComputeExtraICState(grow_mode_, strict_mode_);
1408 Code::Flags flags = 1410 Code::Flags flags =
1409 Code::ComputeFlags(Code::KEYED_STORE_IC, state, extra_state, type); 1411 Code::ComputeFlags(Code::KEYED_STORE_IC, state, extra_state, type);
1410 Handle<Code> code = GetCodeWithFlags(flags, name); 1412 Handle<Code> code = GetCodeWithFlags(flags, name);
1411 PROFILE(isolate(), CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, *code, *name)); 1413 PROFILE(isolate(), CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, *code, *name));
1412 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC, *name, *code)); 1414 JIT_CODE_EVENT(AddCode(*name, *code));
1413 return code; 1415 return code;
1414 } 1416 }
1415 1417
1416 1418
1417 void KeyedStoreStubCompiler::GenerateStoreDictionaryElement( 1419 void KeyedStoreStubCompiler::GenerateStoreDictionaryElement(
1418 MacroAssembler* masm) { 1420 MacroAssembler* masm) {
1419 KeyedStoreIC::GenerateSlow(masm); 1421 KeyedStoreIC::GenerateSlow(masm);
1420 } 1422 }
1421 1423
1422 1424
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1496 function_name = Handle<String>(String::cast(function->shared()->name())); 1498 function_name = Handle<String>(String::cast(function->shared()->name()));
1497 } 1499 }
1498 return GetCode(Code::CONSTANT_FUNCTION, function_name); 1500 return GetCode(Code::CONSTANT_FUNCTION, function_name);
1499 } 1501 }
1500 1502
1501 1503
1502 Handle<Code> ConstructStubCompiler::GetCode() { 1504 Handle<Code> ConstructStubCompiler::GetCode() {
1503 Code::Flags flags = Code::ComputeFlags(Code::STUB); 1505 Code::Flags flags = Code::ComputeFlags(Code::STUB);
1504 Handle<Code> code = GetCodeWithFlags(flags, "ConstructStub"); 1506 Handle<Code> code = GetCodeWithFlags(flags, "ConstructStub");
1505 PROFILE(isolate(), CodeCreateEvent(Logger::STUB_TAG, *code, "ConstructStub")); 1507 PROFILE(isolate(), CodeCreateEvent(Logger::STUB_TAG, *code, "ConstructStub"));
1506 GDBJIT(AddCode(GDBJITInterface::STUB, "ConstructStub", *code)); 1508 JIT_CODE_EVENT(AddCode("ConstructStub", *code));
1507 return code; 1509 return code;
1508 } 1510 }
1509 1511
1510 1512
1511 CallOptimization::CallOptimization(LookupResult* lookup) { 1513 CallOptimization::CallOptimization(LookupResult* lookup) {
1512 if (lookup->IsFound() && 1514 if (lookup->IsFound() &&
1513 lookup->IsCacheable() && 1515 lookup->IsCacheable() &&
1514 lookup->type() == CONSTANT_FUNCTION) { 1516 lookup->type() == CONSTANT_FUNCTION) {
1515 // We only optimize constant function calls. 1517 // We only optimize constant function calls.
1516 Initialize(Handle<JSFunction>(lookup->GetConstantFunction())); 1518 Initialize(Handle<JSFunction>(lookup->GetConstantFunction()));
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1573 Handle<FunctionTemplateInfo>( 1575 Handle<FunctionTemplateInfo>(
1574 FunctionTemplateInfo::cast(signature->receiver())); 1576 FunctionTemplateInfo::cast(signature->receiver()));
1575 } 1577 }
1576 } 1578 }
1577 1579
1578 is_simple_api_call_ = true; 1580 is_simple_api_call_ = true;
1579 } 1581 }
1580 1582
1581 1583
1582 } } // namespace v8::internal 1584 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698