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

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

Issue 6696042: Adding 'isolates' argument to LOG to get rid of multiple TLS fetches in profiling. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/isolates
Patch Set: Addressing code review feedback + rebase Created 9 years, 9 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
« no previous file with comments | « src/stub-cache.h ('k') | src/top.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-2009 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 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 // name specific if there are global objects involved. 119 // name specific if there are global objects involved.
120 Code::Flags flags = 120 Code::Flags flags =
121 Code::ComputeMonomorphicFlags(Code::LOAD_IC, NONEXISTENT); 121 Code::ComputeMonomorphicFlags(Code::LOAD_IC, NONEXISTENT);
122 Object* code = receiver->map()->FindInCodeCache(cache_name, flags); 122 Object* code = receiver->map()->FindInCodeCache(cache_name, flags);
123 if (code->IsUndefined()) { 123 if (code->IsUndefined()) {
124 LoadStubCompiler compiler; 124 LoadStubCompiler compiler;
125 { MaybeObject* maybe_code = 125 { MaybeObject* maybe_code =
126 compiler.CompileLoadNonexistent(cache_name, receiver, last); 126 compiler.CompileLoadNonexistent(cache_name, receiver, last);
127 if (!maybe_code->ToObject(&code)) return maybe_code; 127 if (!maybe_code->ToObject(&code)) return maybe_code;
128 } 128 }
129 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), cache_name)); 129 PROFILE(isolate_,
130 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), cache_name));
130 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, cache_name, Code::cast(code))); 131 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, cache_name, Code::cast(code)));
131 Object* result; 132 Object* result;
132 { MaybeObject* maybe_result = 133 { MaybeObject* maybe_result =
133 receiver->UpdateMapCodeCache(cache_name, Code::cast(code)); 134 receiver->UpdateMapCodeCache(cache_name, Code::cast(code));
134 if (!maybe_result->ToObject(&result)) return maybe_result; 135 if (!maybe_result->ToObject(&result)) return maybe_result;
135 } 136 }
136 } 137 }
137 return code; 138 return code;
138 } 139 }
139 140
140 141
141 MaybeObject* StubCache::ComputeLoadField(String* name, 142 MaybeObject* StubCache::ComputeLoadField(String* name,
142 JSObject* receiver, 143 JSObject* receiver,
143 JSObject* holder, 144 JSObject* holder,
144 int field_index) { 145 int field_index) {
145 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 146 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
146 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, FIELD); 147 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, FIELD);
147 Object* code = receiver->map()->FindInCodeCache(name, flags); 148 Object* code = receiver->map()->FindInCodeCache(name, flags);
148 if (code->IsUndefined()) { 149 if (code->IsUndefined()) {
149 LoadStubCompiler compiler; 150 LoadStubCompiler compiler;
150 { MaybeObject* maybe_code = 151 { MaybeObject* maybe_code =
151 compiler.CompileLoadField(receiver, holder, field_index, name); 152 compiler.CompileLoadField(receiver, holder, field_index, name);
152 if (!maybe_code->ToObject(&code)) return maybe_code; 153 if (!maybe_code->ToObject(&code)) return maybe_code;
153 } 154 }
154 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 155 PROFILE(isolate_,
156 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
155 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code))); 157 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
156 Object* result; 158 Object* result;
157 { MaybeObject* maybe_result = 159 { MaybeObject* maybe_result =
158 receiver->UpdateMapCodeCache(name, Code::cast(code)); 160 receiver->UpdateMapCodeCache(name, Code::cast(code));
159 if (!maybe_result->ToObject(&result)) return maybe_result; 161 if (!maybe_result->ToObject(&result)) return maybe_result;
160 } 162 }
161 } 163 }
162 return code; 164 return code;
163 } 165 }
164 166
165 167
166 MaybeObject* StubCache::ComputeLoadCallback(String* name, 168 MaybeObject* StubCache::ComputeLoadCallback(String* name,
167 JSObject* receiver, 169 JSObject* receiver,
168 JSObject* holder, 170 JSObject* holder,
169 AccessorInfo* callback) { 171 AccessorInfo* callback) {
170 ASSERT(v8::ToCData<Address>(callback->getter()) != 0); 172 ASSERT(v8::ToCData<Address>(callback->getter()) != 0);
171 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 173 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
172 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, CALLBACKS); 174 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, CALLBACKS);
173 Object* code = receiver->map()->FindInCodeCache(name, flags); 175 Object* code = receiver->map()->FindInCodeCache(name, flags);
174 if (code->IsUndefined()) { 176 if (code->IsUndefined()) {
175 LoadStubCompiler compiler; 177 LoadStubCompiler compiler;
176 { MaybeObject* maybe_code = 178 { MaybeObject* maybe_code =
177 compiler.CompileLoadCallback(name, receiver, holder, callback); 179 compiler.CompileLoadCallback(name, receiver, holder, callback);
178 if (!maybe_code->ToObject(&code)) return maybe_code; 180 if (!maybe_code->ToObject(&code)) return maybe_code;
179 } 181 }
180 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 182 PROFILE(isolate_,
183 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
181 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code))); 184 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
182 Object* result; 185 Object* result;
183 { MaybeObject* maybe_result = 186 { MaybeObject* maybe_result =
184 receiver->UpdateMapCodeCache(name, Code::cast(code)); 187 receiver->UpdateMapCodeCache(name, Code::cast(code));
185 if (!maybe_result->ToObject(&result)) return maybe_result; 188 if (!maybe_result->ToObject(&result)) return maybe_result;
186 } 189 }
187 } 190 }
188 return code; 191 return code;
189 } 192 }
190 193
191 194
192 MaybeObject* StubCache::ComputeLoadConstant(String* name, 195 MaybeObject* StubCache::ComputeLoadConstant(String* name,
193 JSObject* receiver, 196 JSObject* receiver,
194 JSObject* holder, 197 JSObject* holder,
195 Object* value) { 198 Object* value) {
196 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 199 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
197 Code::Flags flags = 200 Code::Flags flags =
198 Code::ComputeMonomorphicFlags(Code::LOAD_IC, CONSTANT_FUNCTION); 201 Code::ComputeMonomorphicFlags(Code::LOAD_IC, CONSTANT_FUNCTION);
199 Object* code = receiver->map()->FindInCodeCache(name, flags); 202 Object* code = receiver->map()->FindInCodeCache(name, flags);
200 if (code->IsUndefined()) { 203 if (code->IsUndefined()) {
201 LoadStubCompiler compiler; 204 LoadStubCompiler compiler;
202 { MaybeObject* maybe_code = 205 { MaybeObject* maybe_code =
203 compiler.CompileLoadConstant(receiver, holder, value, name); 206 compiler.CompileLoadConstant(receiver, holder, value, name);
204 if (!maybe_code->ToObject(&code)) return maybe_code; 207 if (!maybe_code->ToObject(&code)) return maybe_code;
205 } 208 }
206 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 209 PROFILE(isolate_,
210 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
207 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code))); 211 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
208 Object* result; 212 Object* result;
209 { MaybeObject* maybe_result = 213 { MaybeObject* maybe_result =
210 receiver->UpdateMapCodeCache(name, Code::cast(code)); 214 receiver->UpdateMapCodeCache(name, Code::cast(code));
211 if (!maybe_result->ToObject(&result)) return maybe_result; 215 if (!maybe_result->ToObject(&result)) return maybe_result;
212 } 216 }
213 } 217 }
214 return code; 218 return code;
215 } 219 }
216 220
217 221
218 MaybeObject* StubCache::ComputeLoadInterceptor(String* name, 222 MaybeObject* StubCache::ComputeLoadInterceptor(String* name,
219 JSObject* receiver, 223 JSObject* receiver,
220 JSObject* holder) { 224 JSObject* holder) {
221 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 225 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
222 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, INTERCEPTOR); 226 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, INTERCEPTOR);
223 Object* code = receiver->map()->FindInCodeCache(name, flags); 227 Object* code = receiver->map()->FindInCodeCache(name, flags);
224 if (code->IsUndefined()) { 228 if (code->IsUndefined()) {
225 LoadStubCompiler compiler; 229 LoadStubCompiler compiler;
226 { MaybeObject* maybe_code = 230 { MaybeObject* maybe_code =
227 compiler.CompileLoadInterceptor(receiver, holder, name); 231 compiler.CompileLoadInterceptor(receiver, holder, name);
228 if (!maybe_code->ToObject(&code)) return maybe_code; 232 if (!maybe_code->ToObject(&code)) return maybe_code;
229 } 233 }
230 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 234 PROFILE(isolate_,
235 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
231 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code))); 236 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
232 Object* result; 237 Object* result;
233 { MaybeObject* maybe_result = 238 { MaybeObject* maybe_result =
234 receiver->UpdateMapCodeCache(name, Code::cast(code)); 239 receiver->UpdateMapCodeCache(name, Code::cast(code));
235 if (!maybe_result->ToObject(&result)) return maybe_result; 240 if (!maybe_result->ToObject(&result)) return maybe_result;
236 } 241 }
237 } 242 }
238 return code; 243 return code;
239 } 244 }
240 245
(...skipping 13 matching lines...) Expand all
254 Object* code = receiver->map()->FindInCodeCache(name, flags); 259 Object* code = receiver->map()->FindInCodeCache(name, flags);
255 if (code->IsUndefined()) { 260 if (code->IsUndefined()) {
256 LoadStubCompiler compiler; 261 LoadStubCompiler compiler;
257 { MaybeObject* maybe_code = compiler.CompileLoadGlobal(receiver, 262 { MaybeObject* maybe_code = compiler.CompileLoadGlobal(receiver,
258 holder, 263 holder,
259 cell, 264 cell,
260 name, 265 name,
261 is_dont_delete); 266 is_dont_delete);
262 if (!maybe_code->ToObject(&code)) return maybe_code; 267 if (!maybe_code->ToObject(&code)) return maybe_code;
263 } 268 }
264 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 269 PROFILE(isolate_,
270 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
265 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code))); 271 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
266 Object* result; 272 Object* result;
267 { MaybeObject* maybe_result = 273 { MaybeObject* maybe_result =
268 receiver->UpdateMapCodeCache(name, Code::cast(code)); 274 receiver->UpdateMapCodeCache(name, Code::cast(code));
269 if (!maybe_result->ToObject(&result)) return maybe_result; 275 if (!maybe_result->ToObject(&result)) return maybe_result;
270 } 276 }
271 } 277 }
272 return code; 278 return code;
273 } 279 }
274 280
275 281
276 MaybeObject* StubCache::ComputeKeyedLoadField(String* name, 282 MaybeObject* StubCache::ComputeKeyedLoadField(String* name,
277 JSObject* receiver, 283 JSObject* receiver,
278 JSObject* holder, 284 JSObject* holder,
279 int field_index) { 285 int field_index) {
280 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 286 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
281 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, FIELD); 287 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, FIELD);
282 Object* code = receiver->map()->FindInCodeCache(name, flags); 288 Object* code = receiver->map()->FindInCodeCache(name, flags);
283 if (code->IsUndefined()) { 289 if (code->IsUndefined()) {
284 KeyedLoadStubCompiler compiler; 290 KeyedLoadStubCompiler compiler;
285 { MaybeObject* maybe_code = 291 { MaybeObject* maybe_code =
286 compiler.CompileLoadField(name, receiver, holder, field_index); 292 compiler.CompileLoadField(name, receiver, holder, field_index);
287 if (!maybe_code->ToObject(&code)) return maybe_code; 293 if (!maybe_code->ToObject(&code)) return maybe_code;
288 } 294 }
289 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 295 PROFILE(isolate_,
296 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
290 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 297 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
291 Object* result; 298 Object* result;
292 { MaybeObject* maybe_result = 299 { MaybeObject* maybe_result =
293 receiver->UpdateMapCodeCache(name, Code::cast(code)); 300 receiver->UpdateMapCodeCache(name, Code::cast(code));
294 if (!maybe_result->ToObject(&result)) return maybe_result; 301 if (!maybe_result->ToObject(&result)) return maybe_result;
295 } 302 }
296 } 303 }
297 return code; 304 return code;
298 } 305 }
299 306
300 307
301 MaybeObject* StubCache::ComputeKeyedLoadConstant(String* name, 308 MaybeObject* StubCache::ComputeKeyedLoadConstant(String* name,
302 JSObject* receiver, 309 JSObject* receiver,
303 JSObject* holder, 310 JSObject* holder,
304 Object* value) { 311 Object* value) {
305 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 312 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
306 Code::Flags flags = 313 Code::Flags flags =
307 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CONSTANT_FUNCTION); 314 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CONSTANT_FUNCTION);
308 Object* code = receiver->map()->FindInCodeCache(name, flags); 315 Object* code = receiver->map()->FindInCodeCache(name, flags);
309 if (code->IsUndefined()) { 316 if (code->IsUndefined()) {
310 KeyedLoadStubCompiler compiler; 317 KeyedLoadStubCompiler compiler;
311 { MaybeObject* maybe_code = 318 { MaybeObject* maybe_code =
312 compiler.CompileLoadConstant(name, receiver, holder, value); 319 compiler.CompileLoadConstant(name, receiver, holder, value);
313 if (!maybe_code->ToObject(&code)) return maybe_code; 320 if (!maybe_code->ToObject(&code)) return maybe_code;
314 } 321 }
315 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 322 PROFILE(isolate_,
323 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
316 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 324 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
317 Object* result; 325 Object* result;
318 { MaybeObject* maybe_result = 326 { MaybeObject* maybe_result =
319 receiver->UpdateMapCodeCache(name, Code::cast(code)); 327 receiver->UpdateMapCodeCache(name, Code::cast(code));
320 if (!maybe_result->ToObject(&result)) return maybe_result; 328 if (!maybe_result->ToObject(&result)) return maybe_result;
321 } 329 }
322 } 330 }
323 return code; 331 return code;
324 } 332 }
325 333
326 334
327 MaybeObject* StubCache::ComputeKeyedLoadInterceptor(String* name, 335 MaybeObject* StubCache::ComputeKeyedLoadInterceptor(String* name,
328 JSObject* receiver, 336 JSObject* receiver,
329 JSObject* holder) { 337 JSObject* holder) {
330 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 338 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
331 Code::Flags flags = 339 Code::Flags flags =
332 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, INTERCEPTOR); 340 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, INTERCEPTOR);
333 Object* code = receiver->map()->FindInCodeCache(name, flags); 341 Object* code = receiver->map()->FindInCodeCache(name, flags);
334 if (code->IsUndefined()) { 342 if (code->IsUndefined()) {
335 KeyedLoadStubCompiler compiler; 343 KeyedLoadStubCompiler compiler;
336 { MaybeObject* maybe_code = 344 { MaybeObject* maybe_code =
337 compiler.CompileLoadInterceptor(receiver, holder, name); 345 compiler.CompileLoadInterceptor(receiver, holder, name);
338 if (!maybe_code->ToObject(&code)) return maybe_code; 346 if (!maybe_code->ToObject(&code)) return maybe_code;
339 } 347 }
340 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 348 PROFILE(isolate_,
349 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
341 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 350 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
342 Object* result; 351 Object* result;
343 { MaybeObject* maybe_result = 352 { MaybeObject* maybe_result =
344 receiver->UpdateMapCodeCache(name, Code::cast(code)); 353 receiver->UpdateMapCodeCache(name, Code::cast(code));
345 if (!maybe_result->ToObject(&result)) return maybe_result; 354 if (!maybe_result->ToObject(&result)) return maybe_result;
346 } 355 }
347 } 356 }
348 return code; 357 return code;
349 } 358 }
350 359
351 360
352 MaybeObject* StubCache::ComputeKeyedLoadCallback(String* name, 361 MaybeObject* StubCache::ComputeKeyedLoadCallback(String* name,
353 JSObject* receiver, 362 JSObject* receiver,
354 JSObject* holder, 363 JSObject* holder,
355 AccessorInfo* callback) { 364 AccessorInfo* callback) {
356 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 365 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
357 Code::Flags flags = 366 Code::Flags flags =
358 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 367 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
359 Object* code = receiver->map()->FindInCodeCache(name, flags); 368 Object* code = receiver->map()->FindInCodeCache(name, flags);
360 if (code->IsUndefined()) { 369 if (code->IsUndefined()) {
361 KeyedLoadStubCompiler compiler; 370 KeyedLoadStubCompiler compiler;
362 { MaybeObject* maybe_code = 371 { MaybeObject* maybe_code =
363 compiler.CompileLoadCallback(name, receiver, holder, callback); 372 compiler.CompileLoadCallback(name, receiver, holder, callback);
364 if (!maybe_code->ToObject(&code)) return maybe_code; 373 if (!maybe_code->ToObject(&code)) return maybe_code;
365 } 374 }
366 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 375 PROFILE(isolate_,
376 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
367 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 377 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
368 Object* result; 378 Object* result;
369 { MaybeObject* maybe_result = 379 { MaybeObject* maybe_result =
370 receiver->UpdateMapCodeCache(name, Code::cast(code)); 380 receiver->UpdateMapCodeCache(name, Code::cast(code));
371 if (!maybe_result->ToObject(&result)) return maybe_result; 381 if (!maybe_result->ToObject(&result)) return maybe_result;
372 } 382 }
373 } 383 }
374 return code; 384 return code;
375 } 385 }
376 386
377 387
378 388
379 MaybeObject* StubCache::ComputeKeyedLoadArrayLength(String* name, 389 MaybeObject* StubCache::ComputeKeyedLoadArrayLength(String* name,
380 JSArray* receiver) { 390 JSArray* receiver) {
381 Code::Flags flags = 391 Code::Flags flags =
382 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 392 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
383 ASSERT(receiver->IsJSObject()); 393 ASSERT(receiver->IsJSObject());
384 Object* code = receiver->map()->FindInCodeCache(name, flags); 394 Object* code = receiver->map()->FindInCodeCache(name, flags);
385 if (code->IsUndefined()) { 395 if (code->IsUndefined()) {
386 KeyedLoadStubCompiler compiler; 396 KeyedLoadStubCompiler compiler;
387 { MaybeObject* maybe_code = compiler.CompileLoadArrayLength(name); 397 { MaybeObject* maybe_code = compiler.CompileLoadArrayLength(name);
388 if (!maybe_code->ToObject(&code)) return maybe_code; 398 if (!maybe_code->ToObject(&code)) return maybe_code;
389 } 399 }
390 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 400 PROFILE(isolate_,
401 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
391 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 402 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
392 Object* result; 403 Object* result;
393 { MaybeObject* maybe_result = 404 { MaybeObject* maybe_result =
394 receiver->UpdateMapCodeCache(name, Code::cast(code)); 405 receiver->UpdateMapCodeCache(name, Code::cast(code));
395 if (!maybe_result->ToObject(&result)) return maybe_result; 406 if (!maybe_result->ToObject(&result)) return maybe_result;
396 } 407 }
397 } 408 }
398 return code; 409 return code;
399 } 410 }
400 411
401 412
402 MaybeObject* StubCache::ComputeKeyedLoadStringLength(String* name, 413 MaybeObject* StubCache::ComputeKeyedLoadStringLength(String* name,
403 String* receiver) { 414 String* receiver) {
404 Code::Flags flags = 415 Code::Flags flags =
405 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 416 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
406 Map* map = receiver->map(); 417 Map* map = receiver->map();
407 Object* code = map->FindInCodeCache(name, flags); 418 Object* code = map->FindInCodeCache(name, flags);
408 if (code->IsUndefined()) { 419 if (code->IsUndefined()) {
409 KeyedLoadStubCompiler compiler; 420 KeyedLoadStubCompiler compiler;
410 { MaybeObject* maybe_code = compiler.CompileLoadStringLength(name); 421 { MaybeObject* maybe_code = compiler.CompileLoadStringLength(name);
411 if (!maybe_code->ToObject(&code)) return maybe_code; 422 if (!maybe_code->ToObject(&code)) return maybe_code;
412 } 423 }
413 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 424 PROFILE(isolate_,
425 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
414 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 426 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
415 Object* result; 427 Object* result;
416 { MaybeObject* maybe_result = map->UpdateCodeCache(name, Code::cast(code)); 428 { MaybeObject* maybe_result = map->UpdateCodeCache(name, Code::cast(code));
417 if (!maybe_result->ToObject(&result)) return maybe_result; 429 if (!maybe_result->ToObject(&result)) return maybe_result;
418 } 430 }
419 } 431 }
420 return code; 432 return code;
421 } 433 }
422 434
423 435
424 MaybeObject* StubCache::ComputeKeyedLoadFunctionPrototype( 436 MaybeObject* StubCache::ComputeKeyedLoadFunctionPrototype(
425 String* name, 437 String* name,
426 JSFunction* receiver) { 438 JSFunction* receiver) {
427 Code::Flags flags = 439 Code::Flags flags =
428 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 440 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
429 Object* code = receiver->map()->FindInCodeCache(name, flags); 441 Object* code = receiver->map()->FindInCodeCache(name, flags);
430 if (code->IsUndefined()) { 442 if (code->IsUndefined()) {
431 KeyedLoadStubCompiler compiler; 443 KeyedLoadStubCompiler compiler;
432 { MaybeObject* maybe_code = compiler.CompileLoadFunctionPrototype(name); 444 { MaybeObject* maybe_code = compiler.CompileLoadFunctionPrototype(name);
433 if (!maybe_code->ToObject(&code)) return maybe_code; 445 if (!maybe_code->ToObject(&code)) return maybe_code;
434 } 446 }
435 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 447 PROFILE(isolate_,
448 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
436 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 449 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
437 Object* result; 450 Object* result;
438 { MaybeObject* maybe_result = 451 { MaybeObject* maybe_result =
439 receiver->UpdateMapCodeCache(name, Code::cast(code)); 452 receiver->UpdateMapCodeCache(name, Code::cast(code));
440 if (!maybe_result->ToObject(&result)) return maybe_result; 453 if (!maybe_result->ToObject(&result)) return maybe_result;
441 } 454 }
442 } 455 }
443 return code; 456 return code;
444 } 457 }
445 458
446 459
447 MaybeObject* StubCache::ComputeKeyedLoadSpecialized(JSObject* receiver) { 460 MaybeObject* StubCache::ComputeKeyedLoadSpecialized(JSObject* receiver) {
448 // Using NORMAL as the PropertyType for array element loads is a misuse. The 461 // Using NORMAL as the PropertyType for array element loads is a misuse. The
449 // generated stub always accesses fast elements, not slow-mode fields, but 462 // generated stub always accesses fast elements, not slow-mode fields, but
450 // some property type is required for the stub lookup. Note that overloading 463 // some property type is required for the stub lookup. Note that overloading
451 // the NORMAL PropertyType is only safe as long as no stubs are generated for 464 // the NORMAL PropertyType is only safe as long as no stubs are generated for
452 // other keyed field loads. This is guaranteed to be the case since all field 465 // other keyed field loads. This is guaranteed to be the case since all field
453 // keyed loads that are not array elements go through a generic builtin stub. 466 // keyed loads that are not array elements go through a generic builtin stub.
454 Code::Flags flags = 467 Code::Flags flags =
455 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, NORMAL); 468 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, NORMAL);
456 String* name = isolate_->heap()->KeyedLoadSpecialized_symbol(); 469 String* name = isolate_->heap()->KeyedLoadSpecialized_symbol();
457 Object* code = receiver->map()->FindInCodeCache(name, flags); 470 Object* code = receiver->map()->FindInCodeCache(name, flags);
458 if (code->IsUndefined()) { 471 if (code->IsUndefined()) {
459 KeyedLoadStubCompiler compiler; 472 KeyedLoadStubCompiler compiler;
460 { MaybeObject* maybe_code = compiler.CompileLoadSpecialized(receiver); 473 { MaybeObject* maybe_code = compiler.CompileLoadSpecialized(receiver);
461 if (!maybe_code->ToObject(&code)) return maybe_code; 474 if (!maybe_code->ToObject(&code)) return maybe_code;
462 } 475 }
463 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), 0)); 476 PROFILE(isolate_,
477 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), 0));
464 Object* result; 478 Object* result;
465 { MaybeObject* maybe_result = 479 { MaybeObject* maybe_result =
466 receiver->UpdateMapCodeCache(name, Code::cast(code)); 480 receiver->UpdateMapCodeCache(name, Code::cast(code));
467 if (!maybe_result->ToObject(&result)) return maybe_result; 481 if (!maybe_result->ToObject(&result)) return maybe_result;
468 } 482 }
469 } 483 }
470 return code; 484 return code;
471 } 485 }
472 486
473 487
474 MaybeObject* StubCache::ComputeStoreField(String* name, 488 MaybeObject* StubCache::ComputeStoreField(String* name,
475 JSObject* receiver, 489 JSObject* receiver,
476 int field_index, 490 int field_index,
477 Map* transition, 491 Map* transition,
478 StrictModeFlag strict_mode) { 492 StrictModeFlag strict_mode) {
479 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION; 493 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION;
480 Code::Flags flags = Code::ComputeMonomorphicFlags( 494 Code::Flags flags = Code::ComputeMonomorphicFlags(
481 Code::STORE_IC, type, strict_mode); 495 Code::STORE_IC, type, strict_mode);
482 Object* code = receiver->map()->FindInCodeCache(name, flags); 496 Object* code = receiver->map()->FindInCodeCache(name, flags);
483 if (code->IsUndefined()) { 497 if (code->IsUndefined()) {
484 StoreStubCompiler compiler(strict_mode); 498 StoreStubCompiler compiler(strict_mode);
485 { MaybeObject* maybe_code = 499 { MaybeObject* maybe_code =
486 compiler.CompileStoreField(receiver, field_index, transition, name); 500 compiler.CompileStoreField(receiver, field_index, transition, name);
487 if (!maybe_code->ToObject(&code)) return maybe_code; 501 if (!maybe_code->ToObject(&code)) return maybe_code;
488 } 502 }
489 PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 503 PROFILE(isolate_,
504 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
490 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 505 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
491 Object* result; 506 Object* result;
492 { MaybeObject* maybe_result = 507 { MaybeObject* maybe_result =
493 receiver->UpdateMapCodeCache(name, Code::cast(code)); 508 receiver->UpdateMapCodeCache(name, Code::cast(code));
494 if (!maybe_result->ToObject(&result)) return maybe_result; 509 if (!maybe_result->ToObject(&result)) return maybe_result;
495 } 510 }
496 } 511 }
497 return code; 512 return code;
498 } 513 }
499 514
500 515
501 MaybeObject* StubCache::ComputeKeyedStoreSpecialized( 516 MaybeObject* StubCache::ComputeKeyedStoreSpecialized(
502 JSObject* receiver, 517 JSObject* receiver,
503 StrictModeFlag strict_mode) { 518 StrictModeFlag strict_mode) {
504 Code::Flags flags = 519 Code::Flags flags =
505 Code::ComputeMonomorphicFlags(Code::KEYED_STORE_IC, NORMAL, strict_mode); 520 Code::ComputeMonomorphicFlags(Code::KEYED_STORE_IC, NORMAL, strict_mode);
506 String* name = isolate_->heap()->KeyedStoreSpecialized_symbol(); 521 String* name = isolate_->heap()->KeyedStoreSpecialized_symbol();
507 Object* code = receiver->map()->FindInCodeCache(name, flags); 522 Object* code = receiver->map()->FindInCodeCache(name, flags);
508 if (code->IsUndefined()) { 523 if (code->IsUndefined()) {
509 KeyedStoreStubCompiler compiler(strict_mode); 524 KeyedStoreStubCompiler compiler(strict_mode);
510 { MaybeObject* maybe_code = compiler.CompileStoreSpecialized(receiver); 525 { MaybeObject* maybe_code = compiler.CompileStoreSpecialized(receiver);
511 if (!maybe_code->ToObject(&code)) return maybe_code; 526 if (!maybe_code->ToObject(&code)) return maybe_code;
512 } 527 }
513 PROFILE(CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, Code::cast(code), 0)); 528 PROFILE(isolate_,
529 CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, Code::cast(code), 0));
514 Object* result; 530 Object* result;
515 { MaybeObject* maybe_result = 531 { MaybeObject* maybe_result =
516 receiver->UpdateMapCodeCache(name, Code::cast(code)); 532 receiver->UpdateMapCodeCache(name, Code::cast(code));
517 if (!maybe_result->ToObject(&result)) return maybe_result; 533 if (!maybe_result->ToObject(&result)) return maybe_result;
518 } 534 }
519 } 535 }
520 return code; 536 return code;
521 } 537 }
522 538
523 539
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 if (code->IsUndefined()) { 632 if (code->IsUndefined()) {
617 ExternalArrayStubCompiler compiler; 633 ExternalArrayStubCompiler compiler;
618 { MaybeObject* maybe_code = 634 { MaybeObject* maybe_code =
619 is_store ? 635 is_store ?
620 compiler.CompileKeyedStoreStub(receiver, array_type, flags) : 636 compiler.CompileKeyedStoreStub(receiver, array_type, flags) :
621 compiler.CompileKeyedLoadStub(receiver, array_type, flags); 637 compiler.CompileKeyedLoadStub(receiver, array_type, flags);
622 if (!maybe_code->ToObject(&code)) return maybe_code; 638 if (!maybe_code->ToObject(&code)) return maybe_code;
623 } 639 }
624 Code::cast(code)->set_external_array_type(array_type); 640 Code::cast(code)->set_external_array_type(array_type);
625 if (is_store) { 641 if (is_store) {
626 PROFILE( 642 PROFILE(isolate_,
627 CodeCreateEvent(Logger::KEYED_EXTERNAL_ARRAY_STORE_IC_TAG, 643 CodeCreateEvent(Logger::KEYED_EXTERNAL_ARRAY_STORE_IC_TAG,
628 Code::cast(code), 0)); 644 Code::cast(code), 0));
629 } else { 645 } else {
630 PROFILE( 646 PROFILE(isolate_,
631 CodeCreateEvent(Logger::KEYED_EXTERNAL_ARRAY_LOAD_IC_TAG, 647 CodeCreateEvent(Logger::KEYED_EXTERNAL_ARRAY_LOAD_IC_TAG,
632 Code::cast(code), 0)); 648 Code::cast(code), 0));
633 } 649 }
634 Object* result; 650 Object* result;
635 { MaybeObject* maybe_result = 651 { MaybeObject* maybe_result =
636 receiver->map()->UpdateCodeCache(name, Code::cast(code)); 652 receiver->map()->UpdateCodeCache(name, Code::cast(code));
637 if (!maybe_result->ToObject(&result)) return maybe_result; 653 if (!maybe_result->ToObject(&result)) return maybe_result;
638 } 654 }
639 } 655 }
640 return code; 656 return code;
(...skipping 13 matching lines...) Expand all
654 StrictModeFlag strict_mode) { 670 StrictModeFlag strict_mode) {
655 Code::Flags flags = Code::ComputeMonomorphicFlags( 671 Code::Flags flags = Code::ComputeMonomorphicFlags(
656 Code::STORE_IC, NORMAL, strict_mode); 672 Code::STORE_IC, NORMAL, strict_mode);
657 Object* code = receiver->map()->FindInCodeCache(name, flags); 673 Object* code = receiver->map()->FindInCodeCache(name, flags);
658 if (code->IsUndefined()) { 674 if (code->IsUndefined()) {
659 StoreStubCompiler compiler(strict_mode); 675 StoreStubCompiler compiler(strict_mode);
660 { MaybeObject* maybe_code = 676 { MaybeObject* maybe_code =
661 compiler.CompileStoreGlobal(receiver, cell, name); 677 compiler.CompileStoreGlobal(receiver, cell, name);
662 if (!maybe_code->ToObject(&code)) return maybe_code; 678 if (!maybe_code->ToObject(&code)) return maybe_code;
663 } 679 }
664 PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 680 PROFILE(isolate_,
681 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
665 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 682 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
666 Object* result; 683 Object* result;
667 { MaybeObject* maybe_result = 684 { MaybeObject* maybe_result =
668 receiver->UpdateMapCodeCache(name, Code::cast(code)); 685 receiver->UpdateMapCodeCache(name, Code::cast(code));
669 if (!maybe_result->ToObject(&result)) return maybe_result; 686 if (!maybe_result->ToObject(&result)) return maybe_result;
670 } 687 }
671 } 688 }
672 return code; 689 return code;
673 } 690 }
674 691
675 692
676 MaybeObject* StubCache::ComputeStoreCallback( 693 MaybeObject* StubCache::ComputeStoreCallback(
677 String* name, 694 String* name,
678 JSObject* receiver, 695 JSObject* receiver,
679 AccessorInfo* callback, 696 AccessorInfo* callback,
680 StrictModeFlag strict_mode) { 697 StrictModeFlag strict_mode) {
681 ASSERT(v8::ToCData<Address>(callback->setter()) != 0); 698 ASSERT(v8::ToCData<Address>(callback->setter()) != 0);
682 Code::Flags flags = Code::ComputeMonomorphicFlags( 699 Code::Flags flags = Code::ComputeMonomorphicFlags(
683 Code::STORE_IC, CALLBACKS, strict_mode); 700 Code::STORE_IC, CALLBACKS, strict_mode);
684 Object* code = receiver->map()->FindInCodeCache(name, flags); 701 Object* code = receiver->map()->FindInCodeCache(name, flags);
685 if (code->IsUndefined()) { 702 if (code->IsUndefined()) {
686 StoreStubCompiler compiler(strict_mode); 703 StoreStubCompiler compiler(strict_mode);
687 { MaybeObject* maybe_code = 704 { MaybeObject* maybe_code =
688 compiler.CompileStoreCallback(receiver, callback, name); 705 compiler.CompileStoreCallback(receiver, callback, name);
689 if (!maybe_code->ToObject(&code)) return maybe_code; 706 if (!maybe_code->ToObject(&code)) return maybe_code;
690 } 707 }
691 PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 708 PROFILE(isolate_,
709 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
692 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 710 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
693 Object* result; 711 Object* result;
694 { MaybeObject* maybe_result = 712 { MaybeObject* maybe_result =
695 receiver->UpdateMapCodeCache(name, Code::cast(code)); 713 receiver->UpdateMapCodeCache(name, Code::cast(code));
696 if (!maybe_result->ToObject(&result)) return maybe_result; 714 if (!maybe_result->ToObject(&result)) return maybe_result;
697 } 715 }
698 } 716 }
699 return code; 717 return code;
700 } 718 }
701 719
702 720
703 MaybeObject* StubCache::ComputeStoreInterceptor( 721 MaybeObject* StubCache::ComputeStoreInterceptor(
704 String* name, 722 String* name,
705 JSObject* receiver, 723 JSObject* receiver,
706 StrictModeFlag strict_mode) { 724 StrictModeFlag strict_mode) {
707 Code::Flags flags = Code::ComputeMonomorphicFlags( 725 Code::Flags flags = Code::ComputeMonomorphicFlags(
708 Code::STORE_IC, INTERCEPTOR, strict_mode); 726 Code::STORE_IC, INTERCEPTOR, strict_mode);
709 Object* code = receiver->map()->FindInCodeCache(name, flags); 727 Object* code = receiver->map()->FindInCodeCache(name, flags);
710 if (code->IsUndefined()) { 728 if (code->IsUndefined()) {
711 StoreStubCompiler compiler(strict_mode); 729 StoreStubCompiler compiler(strict_mode);
712 { MaybeObject* maybe_code = 730 { MaybeObject* maybe_code =
713 compiler.CompileStoreInterceptor(receiver, name); 731 compiler.CompileStoreInterceptor(receiver, name);
714 if (!maybe_code->ToObject(&code)) return maybe_code; 732 if (!maybe_code->ToObject(&code)) return maybe_code;
715 } 733 }
716 PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 734 PROFILE(isolate_,
735 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
717 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 736 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
718 Object* result; 737 Object* result;
719 { MaybeObject* maybe_result = 738 { MaybeObject* maybe_result =
720 receiver->UpdateMapCodeCache(name, Code::cast(code)); 739 receiver->UpdateMapCodeCache(name, Code::cast(code));
721 if (!maybe_result->ToObject(&result)) return maybe_result; 740 if (!maybe_result->ToObject(&result)) return maybe_result;
722 } 741 }
723 } 742 }
724 return code; 743 return code;
725 } 744 }
726 745
727 746
728 MaybeObject* StubCache::ComputeKeyedStoreField(String* name, 747 MaybeObject* StubCache::ComputeKeyedStoreField(String* name,
729 JSObject* receiver, 748 JSObject* receiver,
730 int field_index, 749 int field_index,
731 Map* transition, 750 Map* transition,
732 StrictModeFlag strict_mode) { 751 StrictModeFlag strict_mode) {
733 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION; 752 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION;
734 Code::Flags flags = Code::ComputeMonomorphicFlags( 753 Code::Flags flags = Code::ComputeMonomorphicFlags(
735 Code::KEYED_STORE_IC, type, strict_mode); 754 Code::KEYED_STORE_IC, type, strict_mode);
736 Object* code = receiver->map()->FindInCodeCache(name, flags); 755 Object* code = receiver->map()->FindInCodeCache(name, flags);
737 if (code->IsUndefined()) { 756 if (code->IsUndefined()) {
738 KeyedStoreStubCompiler compiler(strict_mode); 757 KeyedStoreStubCompiler compiler(strict_mode);
739 { MaybeObject* maybe_code = 758 { MaybeObject* maybe_code =
740 compiler.CompileStoreField(receiver, field_index, transition, name); 759 compiler.CompileStoreField(receiver, field_index, transition, name);
741 if (!maybe_code->ToObject(&code)) return maybe_code; 760 if (!maybe_code->ToObject(&code)) return maybe_code;
742 } 761 }
743 PROFILE(CodeCreateEvent( 762 PROFILE(isolate_,
744 Logger::KEYED_STORE_IC_TAG, Code::cast(code), name)); 763 CodeCreateEvent(Logger::KEYED_STORE_IC_TAG,
764 Code::cast(code), name));
745 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC, name, Code::cast(code))); 765 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC, name, Code::cast(code)));
746 Object* result; 766 Object* result;
747 { MaybeObject* maybe_result = 767 { MaybeObject* maybe_result =
748 receiver->UpdateMapCodeCache(name, Code::cast(code)); 768 receiver->UpdateMapCodeCache(name, Code::cast(code));
749 if (!maybe_result->ToObject(&result)) return maybe_result; 769 if (!maybe_result->ToObject(&result)) return maybe_result;
750 } 770 }
751 } 771 }
752 return code; 772 return code;
753 } 773 }
754 774
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 if (!function->is_compiled()) return Failure::InternalError(); 813 if (!function->is_compiled()) return Failure::InternalError();
794 // Compile the stub - only create stubs for fully compiled functions. 814 // Compile the stub - only create stubs for fully compiled functions.
795 CallStubCompiler compiler( 815 CallStubCompiler compiler(
796 argc, in_loop, kind, extra_ic_state, cache_holder); 816 argc, in_loop, kind, extra_ic_state, cache_holder);
797 { MaybeObject* maybe_code = 817 { MaybeObject* maybe_code =
798 compiler.CompileCallConstant(object, holder, function, name, check); 818 compiler.CompileCallConstant(object, holder, function, name, check);
799 if (!maybe_code->ToObject(&code)) return maybe_code; 819 if (!maybe_code->ToObject(&code)) return maybe_code;
800 } 820 }
801 Code::cast(code)->set_check_type(check); 821 Code::cast(code)->set_check_type(check);
802 ASSERT_EQ(flags, Code::cast(code)->flags()); 822 ASSERT_EQ(flags, Code::cast(code)->flags());
803 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 823 PROFILE(isolate_,
824 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
804 Code::cast(code), name)); 825 Code::cast(code), name));
805 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 826 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
806 Object* result; 827 Object* result;
807 { MaybeObject* maybe_result = 828 { MaybeObject* maybe_result =
808 map_holder->UpdateMapCodeCache(name, Code::cast(code)); 829 map_holder->UpdateMapCodeCache(name, Code::cast(code));
809 if (!maybe_result->ToObject(&result)) return maybe_result; 830 if (!maybe_result->ToObject(&result)) return maybe_result;
810 } 831 }
811 } 832 }
812 return code; 833 return code;
813 } 834 }
(...skipping 29 matching lines...) Expand all
843 CallStubCompiler compiler( 864 CallStubCompiler compiler(
844 argc, in_loop, kind, Code::kNoExtraICState, cache_holder); 865 argc, in_loop, kind, Code::kNoExtraICState, cache_holder);
845 { MaybeObject* maybe_code = 866 { MaybeObject* maybe_code =
846 compiler.CompileCallField(JSObject::cast(object), 867 compiler.CompileCallField(JSObject::cast(object),
847 holder, 868 holder,
848 index, 869 index,
849 name); 870 name);
850 if (!maybe_code->ToObject(&code)) return maybe_code; 871 if (!maybe_code->ToObject(&code)) return maybe_code;
851 } 872 }
852 ASSERT_EQ(flags, Code::cast(code)->flags()); 873 ASSERT_EQ(flags, Code::cast(code)->flags());
853 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 874 PROFILE(isolate_,
875 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
854 Code::cast(code), name)); 876 Code::cast(code), name));
855 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 877 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
856 Object* result; 878 Object* result;
857 { MaybeObject* maybe_result = 879 { MaybeObject* maybe_result =
858 map_holder->UpdateMapCodeCache(name, Code::cast(code)); 880 map_holder->UpdateMapCodeCache(name, Code::cast(code));
859 if (!maybe_result->ToObject(&result)) return maybe_result; 881 if (!maybe_result->ToObject(&result)) return maybe_result;
860 } 882 }
861 } 883 }
862 return code; 884 return code;
863 } 885 }
(...skipping 24 matching lines...) Expand all
888 argc); 910 argc);
889 Object* code = map_holder->map()->FindInCodeCache(name, flags); 911 Object* code = map_holder->map()->FindInCodeCache(name, flags);
890 if (code->IsUndefined()) { 912 if (code->IsUndefined()) {
891 CallStubCompiler compiler( 913 CallStubCompiler compiler(
892 argc, NOT_IN_LOOP, kind, Code::kNoExtraICState, cache_holder); 914 argc, NOT_IN_LOOP, kind, Code::kNoExtraICState, cache_holder);
893 { MaybeObject* maybe_code = 915 { MaybeObject* maybe_code =
894 compiler.CompileCallInterceptor(JSObject::cast(object), holder, name); 916 compiler.CompileCallInterceptor(JSObject::cast(object), holder, name);
895 if (!maybe_code->ToObject(&code)) return maybe_code; 917 if (!maybe_code->ToObject(&code)) return maybe_code;
896 } 918 }
897 ASSERT_EQ(flags, Code::cast(code)->flags()); 919 ASSERT_EQ(flags, Code::cast(code)->flags());
898 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 920 PROFILE(isolate_,
921 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
899 Code::cast(code), name)); 922 Code::cast(code), name));
900 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 923 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
901 Object* result; 924 Object* result;
902 { MaybeObject* maybe_result = 925 { MaybeObject* maybe_result =
903 map_holder->UpdateMapCodeCache(name, Code::cast(code)); 926 map_holder->UpdateMapCodeCache(name, Code::cast(code));
904 if (!maybe_result->ToObject(&result)) return maybe_result; 927 if (!maybe_result->ToObject(&result)) return maybe_result;
905 } 928 }
906 } 929 }
907 return code; 930 return code;
908 } 931 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
945 // internal error which will make sure we do not update any 968 // internal error which will make sure we do not update any
946 // caches. 969 // caches.
947 if (!function->is_compiled()) return Failure::InternalError(); 970 if (!function->is_compiled()) return Failure::InternalError();
948 CallStubCompiler compiler( 971 CallStubCompiler compiler(
949 argc, in_loop, kind, Code::kNoExtraICState, cache_holder); 972 argc, in_loop, kind, Code::kNoExtraICState, cache_holder);
950 { MaybeObject* maybe_code = 973 { MaybeObject* maybe_code =
951 compiler.CompileCallGlobal(receiver, holder, cell, function, name); 974 compiler.CompileCallGlobal(receiver, holder, cell, function, name);
952 if (!maybe_code->ToObject(&code)) return maybe_code; 975 if (!maybe_code->ToObject(&code)) return maybe_code;
953 } 976 }
954 ASSERT_EQ(flags, Code::cast(code)->flags()); 977 ASSERT_EQ(flags, Code::cast(code)->flags());
955 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 978 PROFILE(isolate_,
979 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
956 Code::cast(code), name)); 980 Code::cast(code), name));
957 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 981 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
958 Object* result; 982 Object* result;
959 { MaybeObject* maybe_result = 983 { MaybeObject* maybe_result =
960 map_holder->UpdateMapCodeCache(name, Code::cast(code)); 984 map_holder->UpdateMapCodeCache(name, Code::cast(code));
961 if (!maybe_result->ToObject(&result)) return maybe_result; 985 if (!maybe_result->ToObject(&result)) return maybe_result;
962 } 986 }
963 } 987 }
964 return code; 988 return code;
965 } 989 }
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
1279 MaybeObject* StoreCallbackProperty(RUNTIME_CALLING_CONVENTION) { 1303 MaybeObject* StoreCallbackProperty(RUNTIME_CALLING_CONVENTION) {
1280 RUNTIME_GET_ISOLATE; 1304 RUNTIME_GET_ISOLATE;
1281 JSObject* recv = JSObject::cast(args[0]); 1305 JSObject* recv = JSObject::cast(args[0]);
1282 AccessorInfo* callback = AccessorInfo::cast(args[1]); 1306 AccessorInfo* callback = AccessorInfo::cast(args[1]);
1283 Address setter_address = v8::ToCData<Address>(callback->setter()); 1307 Address setter_address = v8::ToCData<Address>(callback->setter());
1284 v8::AccessorSetter fun = FUNCTION_CAST<v8::AccessorSetter>(setter_address); 1308 v8::AccessorSetter fun = FUNCTION_CAST<v8::AccessorSetter>(setter_address);
1285 ASSERT(fun != NULL); 1309 ASSERT(fun != NULL);
1286 Handle<String> name = args.at<String>(2); 1310 Handle<String> name = args.at<String>(2);
1287 Handle<Object> value = args.at<Object>(3); 1311 Handle<Object> value = args.at<Object>(3);
1288 HandleScope scope(isolate); 1312 HandleScope scope(isolate);
1289 LOG(ApiNamedPropertyAccess("store", recv, *name)); 1313 LOG(isolate, ApiNamedPropertyAccess("store", recv, *name));
1290 CustomArguments custom_args(isolate, callback->data(), recv, recv); 1314 CustomArguments custom_args(isolate, callback->data(), recv, recv);
1291 v8::AccessorInfo info(custom_args.end()); 1315 v8::AccessorInfo info(custom_args.end());
1292 { 1316 {
1293 // Leaving JavaScript. 1317 // Leaving JavaScript.
1294 VMState state(isolate, EXTERNAL); 1318 VMState state(isolate, EXTERNAL);
1295 ExternalCallbackScope call_scope(isolate, setter_address); 1319 ExternalCallbackScope call_scope(isolate, setter_address);
1296 fun(v8::Utils::ToLocal(name), v8::Utils::ToLocal(value), info); 1320 fun(v8::Utils::ToLocal(name), v8::Utils::ToLocal(value), info);
1297 } 1321 }
1298 RETURN_IF_SCHEDULED_EXCEPTION(isolate); 1322 RETURN_IF_SCHEDULED_EXCEPTION(isolate);
1299 return *value; 1323 return *value;
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 MaybeObject* KeyedLoadPropertyWithInterceptor(RUNTIME_CALLING_CONVENTION) { 1480 MaybeObject* KeyedLoadPropertyWithInterceptor(RUNTIME_CALLING_CONVENTION) {
1457 RUNTIME_GET_ISOLATE; 1481 RUNTIME_GET_ISOLATE;
1458 JSObject* receiver = JSObject::cast(args[0]); 1482 JSObject* receiver = JSObject::cast(args[0]);
1459 ASSERT(Smi::cast(args[1])->value() >= 0); 1483 ASSERT(Smi::cast(args[1])->value() >= 0);
1460 uint32_t index = Smi::cast(args[1])->value(); 1484 uint32_t index = Smi::cast(args[1])->value();
1461 return receiver->GetElementWithInterceptor(receiver, index); 1485 return receiver->GetElementWithInterceptor(receiver, index);
1462 } 1486 }
1463 1487
1464 1488
1465 MaybeObject* StubCompiler::CompileCallInitialize(Code::Flags flags) { 1489 MaybeObject* StubCompiler::CompileCallInitialize(Code::Flags flags) {
1466 HandleScope scope; 1490 HandleScope scope(isolate());
1467 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1491 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1468 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1492 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1469 if (kind == Code::CALL_IC) { 1493 if (kind == Code::CALL_IC) {
1470 CallIC::GenerateInitialize(masm(), argc); 1494 CallIC::GenerateInitialize(masm(), argc);
1471 } else { 1495 } else {
1472 KeyedCallIC::GenerateInitialize(masm(), argc); 1496 KeyedCallIC::GenerateInitialize(masm(), argc);
1473 } 1497 }
1474 Object* result; 1498 Object* result;
1475 { MaybeObject* maybe_result = 1499 { MaybeObject* maybe_result =
1476 GetCodeWithFlags(flags, "CompileCallInitialize"); 1500 GetCodeWithFlags(flags, "CompileCallInitialize");
1477 if (!maybe_result->ToObject(&result)) return maybe_result; 1501 if (!maybe_result->ToObject(&result)) return maybe_result;
1478 } 1502 }
1479 COUNTERS->call_initialize_stubs()->Increment(); 1503 COUNTERS->call_initialize_stubs()->Increment();
1480 Code* code = Code::cast(result); 1504 Code* code = Code::cast(result);
1481 USE(code); 1505 USE(code);
1482 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_INITIALIZE_TAG), 1506 PROFILE(isolate(),
1507 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_INITIALIZE_TAG),
1483 code, code->arguments_count())); 1508 code, code->arguments_count()));
1484 GDBJIT(AddCode(GDBJITInterface::CALL_INITIALIZE, Code::cast(code))); 1509 GDBJIT(AddCode(GDBJITInterface::CALL_INITIALIZE, Code::cast(code)));
1485 return result; 1510 return result;
1486 } 1511 }
1487 1512
1488 1513
1489 MaybeObject* StubCompiler::CompileCallPreMonomorphic(Code::Flags flags) { 1514 MaybeObject* StubCompiler::CompileCallPreMonomorphic(Code::Flags flags) {
1490 HandleScope scope; 1515 HandleScope scope(isolate());
1491 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1516 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1492 // The code of the PreMonomorphic stub is the same as the code 1517 // The code of the PreMonomorphic stub is the same as the code
1493 // of the Initialized stub. They just differ on the code object flags. 1518 // of the Initialized stub. They just differ on the code object flags.
1494 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1519 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1495 if (kind == Code::CALL_IC) { 1520 if (kind == Code::CALL_IC) {
1496 CallIC::GenerateInitialize(masm(), argc); 1521 CallIC::GenerateInitialize(masm(), argc);
1497 } else { 1522 } else {
1498 KeyedCallIC::GenerateInitialize(masm(), argc); 1523 KeyedCallIC::GenerateInitialize(masm(), argc);
1499 } 1524 }
1500 Object* result; 1525 Object* result;
1501 { MaybeObject* maybe_result = 1526 { MaybeObject* maybe_result =
1502 GetCodeWithFlags(flags, "CompileCallPreMonomorphic"); 1527 GetCodeWithFlags(flags, "CompileCallPreMonomorphic");
1503 if (!maybe_result->ToObject(&result)) return maybe_result; 1528 if (!maybe_result->ToObject(&result)) return maybe_result;
1504 } 1529 }
1505 COUNTERS->call_premonomorphic_stubs()->Increment(); 1530 COUNTERS->call_premonomorphic_stubs()->Increment();
1506 Code* code = Code::cast(result); 1531 Code* code = Code::cast(result);
1507 USE(code); 1532 USE(code);
1508 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_PRE_MONOMORPHIC_TAG), 1533 PROFILE(isolate(),
1534 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_PRE_MONOMORPHIC_TAG),
1509 code, code->arguments_count())); 1535 code, code->arguments_count()));
1510 GDBJIT(AddCode(GDBJITInterface::CALL_PRE_MONOMORPHIC, Code::cast(code))); 1536 GDBJIT(AddCode(GDBJITInterface::CALL_PRE_MONOMORPHIC, Code::cast(code)));
1511 return result; 1537 return result;
1512 } 1538 }
1513 1539
1514 1540
1515 MaybeObject* StubCompiler::CompileCallNormal(Code::Flags flags) { 1541 MaybeObject* StubCompiler::CompileCallNormal(Code::Flags flags) {
1516 HandleScope scope; 1542 HandleScope scope(isolate());
1517 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1543 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1518 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1544 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1519 if (kind == Code::CALL_IC) { 1545 if (kind == Code::CALL_IC) {
1520 CallIC::GenerateNormal(masm(), argc); 1546 CallIC::GenerateNormal(masm(), argc);
1521 } else { 1547 } else {
1522 KeyedCallIC::GenerateNormal(masm(), argc); 1548 KeyedCallIC::GenerateNormal(masm(), argc);
1523 } 1549 }
1524 Object* result; 1550 Object* result;
1525 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "CompileCallNormal"); 1551 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "CompileCallNormal");
1526 if (!maybe_result->ToObject(&result)) return maybe_result; 1552 if (!maybe_result->ToObject(&result)) return maybe_result;
1527 } 1553 }
1528 COUNTERS->call_normal_stubs()->Increment(); 1554 COUNTERS->call_normal_stubs()->Increment();
1529 Code* code = Code::cast(result); 1555 Code* code = Code::cast(result);
1530 USE(code); 1556 USE(code);
1531 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_NORMAL_TAG), 1557 PROFILE(isolate(),
1558 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_NORMAL_TAG),
1532 code, code->arguments_count())); 1559 code, code->arguments_count()));
1533 GDBJIT(AddCode(GDBJITInterface::CALL_NORMAL, Code::cast(code))); 1560 GDBJIT(AddCode(GDBJITInterface::CALL_NORMAL, Code::cast(code)));
1534 return result; 1561 return result;
1535 } 1562 }
1536 1563
1537 1564
1538 MaybeObject* StubCompiler::CompileCallMegamorphic(Code::Flags flags) { 1565 MaybeObject* StubCompiler::CompileCallMegamorphic(Code::Flags flags) {
1539 HandleScope scope; 1566 HandleScope scope(isolate());
1540 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1567 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1541 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1568 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1542 if (kind == Code::CALL_IC) { 1569 if (kind == Code::CALL_IC) {
1543 CallIC::GenerateMegamorphic(masm(), argc); 1570 CallIC::GenerateMegamorphic(masm(), argc);
1544 } else { 1571 } else {
1545 KeyedCallIC::GenerateMegamorphic(masm(), argc); 1572 KeyedCallIC::GenerateMegamorphic(masm(), argc);
1546 } 1573 }
1547 Object* result; 1574 Object* result;
1548 { MaybeObject* maybe_result = 1575 { MaybeObject* maybe_result =
1549 GetCodeWithFlags(flags, "CompileCallMegamorphic"); 1576 GetCodeWithFlags(flags, "CompileCallMegamorphic");
1550 if (!maybe_result->ToObject(&result)) return maybe_result; 1577 if (!maybe_result->ToObject(&result)) return maybe_result;
1551 } 1578 }
1552 COUNTERS->call_megamorphic_stubs()->Increment(); 1579 COUNTERS->call_megamorphic_stubs()->Increment();
1553 Code* code = Code::cast(result); 1580 Code* code = Code::cast(result);
1554 USE(code); 1581 USE(code);
1555 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MEGAMORPHIC_TAG), 1582 PROFILE(isolate(),
1583 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MEGAMORPHIC_TAG),
1556 code, code->arguments_count())); 1584 code, code->arguments_count()));
1557 GDBJIT(AddCode(GDBJITInterface::CALL_MEGAMORPHIC, Code::cast(code))); 1585 GDBJIT(AddCode(GDBJITInterface::CALL_MEGAMORPHIC, Code::cast(code)));
1558 return result; 1586 return result;
1559 } 1587 }
1560 1588
1561 1589
1562 MaybeObject* StubCompiler::CompileCallMiss(Code::Flags flags) { 1590 MaybeObject* StubCompiler::CompileCallMiss(Code::Flags flags) {
1563 HandleScope scope; 1591 HandleScope scope(isolate());
1564 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1592 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1565 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1593 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1566 if (kind == Code::CALL_IC) { 1594 if (kind == Code::CALL_IC) {
1567 CallIC::GenerateMiss(masm(), argc); 1595 CallIC::GenerateMiss(masm(), argc);
1568 } else { 1596 } else {
1569 KeyedCallIC::GenerateMiss(masm(), argc); 1597 KeyedCallIC::GenerateMiss(masm(), argc);
1570 } 1598 }
1571 Object* result; 1599 Object* result;
1572 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "CompileCallMiss"); 1600 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "CompileCallMiss");
1573 if (!maybe_result->ToObject(&result)) return maybe_result; 1601 if (!maybe_result->ToObject(&result)) return maybe_result;
1574 } 1602 }
1575 COUNTERS->call_megamorphic_stubs()->Increment(); 1603 COUNTERS->call_megamorphic_stubs()->Increment();
1576 Code* code = Code::cast(result); 1604 Code* code = Code::cast(result);
1577 USE(code); 1605 USE(code);
1578 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MISS_TAG), 1606 PROFILE(isolate(),
1607 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MISS_TAG),
1579 code, code->arguments_count())); 1608 code, code->arguments_count()));
1580 GDBJIT(AddCode(GDBJITInterface::CALL_MISS, Code::cast(code))); 1609 GDBJIT(AddCode(GDBJITInterface::CALL_MISS, Code::cast(code)));
1581 return result; 1610 return result;
1582 } 1611 }
1583 1612
1584 1613
1585 #ifdef ENABLE_DEBUGGER_SUPPORT 1614 #ifdef ENABLE_DEBUGGER_SUPPORT
1586 MaybeObject* StubCompiler::CompileCallDebugBreak(Code::Flags flags) { 1615 MaybeObject* StubCompiler::CompileCallDebugBreak(Code::Flags flags) {
1587 HandleScope scope; 1616 HandleScope scope(isolate());
1588 Debug::GenerateCallICDebugBreak(masm()); 1617 Debug::GenerateCallICDebugBreak(masm());
1589 Object* result; 1618 Object* result;
1590 { MaybeObject* maybe_result = 1619 { MaybeObject* maybe_result =
1591 GetCodeWithFlags(flags, "CompileCallDebugBreak"); 1620 GetCodeWithFlags(flags, "CompileCallDebugBreak");
1592 if (!maybe_result->ToObject(&result)) return maybe_result; 1621 if (!maybe_result->ToObject(&result)) return maybe_result;
1593 } 1622 }
1594 Code* code = Code::cast(result); 1623 Code* code = Code::cast(result);
1595 USE(code); 1624 USE(code);
1596 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1625 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1597 USE(kind); 1626 USE(kind);
1598 PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_DEBUG_BREAK_TAG), 1627 PROFILE(isolate(),
1628 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_DEBUG_BREAK_TAG),
1599 code, code->arguments_count())); 1629 code, code->arguments_count()));
1600 return result; 1630 return result;
1601 } 1631 }
1602 1632
1603 1633
1604 MaybeObject* StubCompiler::CompileCallDebugPrepareStepIn(Code::Flags flags) { 1634 MaybeObject* StubCompiler::CompileCallDebugPrepareStepIn(Code::Flags flags) {
1605 HandleScope scope; 1635 HandleScope scope(isolate());
1606 // Use the same code for the the step in preparations as we do for 1636 // Use the same code for the the step in preparations as we do for
1607 // the miss case. 1637 // the miss case.
1608 int argc = Code::ExtractArgumentsCountFromFlags(flags); 1638 int argc = Code::ExtractArgumentsCountFromFlags(flags);
1609 Code::Kind kind = Code::ExtractKindFromFlags(flags); 1639 Code::Kind kind = Code::ExtractKindFromFlags(flags);
1610 if (kind == Code::CALL_IC) { 1640 if (kind == Code::CALL_IC) {
1611 CallIC::GenerateMiss(masm(), argc); 1641 CallIC::GenerateMiss(masm(), argc);
1612 } else { 1642 } else {
1613 KeyedCallIC::GenerateMiss(masm(), argc); 1643 KeyedCallIC::GenerateMiss(masm(), argc);
1614 } 1644 }
1615 Object* result; 1645 Object* result;
1616 { MaybeObject* maybe_result = 1646 { MaybeObject* maybe_result =
1617 GetCodeWithFlags(flags, "CompileCallDebugPrepareStepIn"); 1647 GetCodeWithFlags(flags, "CompileCallDebugPrepareStepIn");
1618 if (!maybe_result->ToObject(&result)) return maybe_result; 1648 if (!maybe_result->ToObject(&result)) return maybe_result;
1619 } 1649 }
1620 Code* code = Code::cast(result); 1650 Code* code = Code::cast(result);
1621 USE(code); 1651 USE(code);
1622 PROFILE(CodeCreateEvent( 1652 PROFILE(isolate(),
1623 CALL_LOGGER_TAG(kind, CALL_DEBUG_PREPARE_STEP_IN_TAG), 1653 CodeCreateEvent(
1624 code, 1654 CALL_LOGGER_TAG(kind, CALL_DEBUG_PREPARE_STEP_IN_TAG),
1625 code->arguments_count())); 1655 code,
1656 code->arguments_count()));
1626 return result; 1657 return result;
1627 } 1658 }
1628 #endif 1659 #endif
1629 1660
1630 #undef CALL_LOGGER_TAG 1661 #undef CALL_LOGGER_TAG
1631 1662
1632 MaybeObject* StubCompiler::GetCodeWithFlags(Code::Flags flags, 1663 MaybeObject* StubCompiler::GetCodeWithFlags(Code::Flags flags,
1633 const char* name) { 1664 const char* name) {
1634 // Check for allocation failures during stub compilation. 1665 // Check for allocation failures during stub compilation.
1635 if (failure_->IsFailure()) return failure_; 1666 if (failure_->IsFailure()) return failure_;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1667 } 1698 }
1668 } 1699 }
1669 } 1700 }
1670 1701
1671 1702
1672 1703
1673 MaybeObject* LoadStubCompiler::GetCode(PropertyType type, String* name) { 1704 MaybeObject* LoadStubCompiler::GetCode(PropertyType type, String* name) {
1674 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, type); 1705 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, type);
1675 MaybeObject* result = GetCodeWithFlags(flags, name); 1706 MaybeObject* result = GetCodeWithFlags(flags, name);
1676 if (!result->IsFailure()) { 1707 if (!result->IsFailure()) {
1677 PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, 1708 PROFILE(isolate(),
1709 CodeCreateEvent(Logger::LOAD_IC_TAG,
1678 Code::cast(result->ToObjectUnchecked()), 1710 Code::cast(result->ToObjectUnchecked()),
1679 name)); 1711 name));
1680 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, 1712 GDBJIT(AddCode(GDBJITInterface::LOAD_IC,
1681 name, 1713 name,
1682 Code::cast(result->ToObjectUnchecked()))); 1714 Code::cast(result->ToObjectUnchecked())));
1683 } 1715 }
1684 return result; 1716 return result;
1685 } 1717 }
1686 1718
1687 1719
1688 MaybeObject* KeyedLoadStubCompiler::GetCode(PropertyType type, String* name) { 1720 MaybeObject* KeyedLoadStubCompiler::GetCode(PropertyType type, String* name) {
1689 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, type); 1721 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, type);
1690 MaybeObject* result = GetCodeWithFlags(flags, name); 1722 MaybeObject* result = GetCodeWithFlags(flags, name);
1691 if (!result->IsFailure()) { 1723 if (!result->IsFailure()) {
1692 PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, 1724 PROFILE(isolate(),
1725 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG,
1693 Code::cast(result->ToObjectUnchecked()), 1726 Code::cast(result->ToObjectUnchecked()),
1694 name)); 1727 name));
1695 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, 1728 GDBJIT(AddCode(GDBJITInterface::LOAD_IC,
1696 name, 1729 name,
1697 Code::cast(result->ToObjectUnchecked()))); 1730 Code::cast(result->ToObjectUnchecked())));
1698 } 1731 }
1699 return result; 1732 return result;
1700 } 1733 }
1701 1734
1702 1735
1703 MaybeObject* StoreStubCompiler::GetCode(PropertyType type, String* name) { 1736 MaybeObject* StoreStubCompiler::GetCode(PropertyType type, String* name) {
1704 Code::Flags flags = Code::ComputeMonomorphicFlags( 1737 Code::Flags flags = Code::ComputeMonomorphicFlags(
1705 Code::STORE_IC, type, strict_mode_); 1738 Code::STORE_IC, type, strict_mode_);
1706 MaybeObject* result = GetCodeWithFlags(flags, name); 1739 MaybeObject* result = GetCodeWithFlags(flags, name);
1707 if (!result->IsFailure()) { 1740 if (!result->IsFailure()) {
1708 PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, 1741 PROFILE(isolate(),
1742 CodeCreateEvent(Logger::STORE_IC_TAG,
1709 Code::cast(result->ToObjectUnchecked()), 1743 Code::cast(result->ToObjectUnchecked()),
1710 name)); 1744 name));
1711 GDBJIT(AddCode(GDBJITInterface::STORE_IC, 1745 GDBJIT(AddCode(GDBJITInterface::STORE_IC,
1712 name, 1746 name,
1713 Code::cast(result->ToObjectUnchecked()))); 1747 Code::cast(result->ToObjectUnchecked())));
1714 } 1748 }
1715 return result; 1749 return result;
1716 } 1750 }
1717 1751
1718 1752
1719 MaybeObject* KeyedStoreStubCompiler::GetCode(PropertyType type, String* name) { 1753 MaybeObject* KeyedStoreStubCompiler::GetCode(PropertyType type, String* name) {
1720 Code::Flags flags = Code::ComputeMonomorphicFlags( 1754 Code::Flags flags = Code::ComputeMonomorphicFlags(
1721 Code::KEYED_STORE_IC, type, strict_mode_); 1755 Code::KEYED_STORE_IC, type, strict_mode_);
1722 MaybeObject* result = GetCodeWithFlags(flags, name); 1756 MaybeObject* result = GetCodeWithFlags(flags, name);
1723 if (!result->IsFailure()) { 1757 if (!result->IsFailure()) {
1724 PROFILE(CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, 1758 PROFILE(isolate(),
1759 CodeCreateEvent(Logger::KEYED_STORE_IC_TAG,
1725 Code::cast(result->ToObjectUnchecked()), 1760 Code::cast(result->ToObjectUnchecked()),
1726 name)); 1761 name));
1727 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC, 1762 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC,
1728 name, 1763 name,
1729 Code::cast(result->ToObjectUnchecked()))); 1764 Code::cast(result->ToObjectUnchecked())));
1730 } 1765 }
1731 return result; 1766 return result;
1732 } 1767 }
1733 1768
1734 1769
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1796 1831
1797 1832
1798 MaybeObject* ConstructStubCompiler::GetCode() { 1833 MaybeObject* ConstructStubCompiler::GetCode() {
1799 Code::Flags flags = Code::ComputeFlags(Code::STUB); 1834 Code::Flags flags = Code::ComputeFlags(Code::STUB);
1800 Object* result; 1835 Object* result;
1801 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "ConstructStub"); 1836 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "ConstructStub");
1802 if (!maybe_result->ToObject(&result)) return maybe_result; 1837 if (!maybe_result->ToObject(&result)) return maybe_result;
1803 } 1838 }
1804 Code* code = Code::cast(result); 1839 Code* code = Code::cast(result);
1805 USE(code); 1840 USE(code);
1806 PROFILE(CodeCreateEvent(Logger::STUB_TAG, code, "ConstructStub")); 1841 PROFILE(isolate(), CodeCreateEvent(Logger::STUB_TAG, code, "ConstructStub"));
1807 GDBJIT(AddCode(GDBJITInterface::STUB, "ConstructStub", Code::cast(code))); 1842 GDBJIT(AddCode(GDBJITInterface::STUB, "ConstructStub", Code::cast(code)));
1808 return result; 1843 return result;
1809 } 1844 }
1810 1845
1811 1846
1812 CallOptimization::CallOptimization(LookupResult* lookup) { 1847 CallOptimization::CallOptimization(LookupResult* lookup) {
1813 if (!lookup->IsProperty() || !lookup->IsCacheable() || 1848 if (!lookup->IsProperty() || !lookup->IsCacheable() ||
1814 lookup->type() != CONSTANT_FUNCTION) { 1849 lookup->type() != CONSTANT_FUNCTION) {
1815 Initialize(NULL); 1850 Initialize(NULL);
1816 } else { 1851 } else {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1876 } 1911 }
1877 1912
1878 1913
1879 MaybeObject* ExternalArrayStubCompiler::GetCode(Code::Flags flags) { 1914 MaybeObject* ExternalArrayStubCompiler::GetCode(Code::Flags flags) {
1880 Object* result; 1915 Object* result;
1881 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "ExternalArrayStub"); 1916 { MaybeObject* maybe_result = GetCodeWithFlags(flags, "ExternalArrayStub");
1882 if (!maybe_result->ToObject(&result)) return maybe_result; 1917 if (!maybe_result->ToObject(&result)) return maybe_result;
1883 } 1918 }
1884 Code* code = Code::cast(result); 1919 Code* code = Code::cast(result);
1885 USE(code); 1920 USE(code);
1886 PROFILE(CodeCreateEvent(Logger::STUB_TAG, code, "ExternalArrayStub")); 1921 PROFILE(isolate(),
1922 CodeCreateEvent(Logger::STUB_TAG, code, "ExternalArrayStub"));
1887 return result; 1923 return result;
1888 } 1924 }
1889 1925
1890 1926
1891 } } // namespace v8::internal 1927 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/stub-cache.h ('k') | src/top.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698