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

Side by Side Diff: src/ic/ic.cc

Issue 1248303002: Unify runtime-style IC functions with Runtime intrinsics (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Make mips work Created 5 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
« no previous file with comments | « src/ic/ic.h ('k') | src/ic/mips/handler-compiler-mips.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/arguments.h" 9 #include "src/arguments.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 2311 matching lines...) Expand 10 before | Expand all | Expand 10 after
2322 2322
2323 2323
2324 #undef TRACE_IC 2324 #undef TRACE_IC
2325 2325
2326 2326
2327 // ---------------------------------------------------------------------------- 2327 // ----------------------------------------------------------------------------
2328 // Static IC stub generators. 2328 // Static IC stub generators.
2329 // 2329 //
2330 2330
2331 // Used from ic-<arch>.cc. 2331 // Used from ic-<arch>.cc.
2332 RUNTIME_FUNCTION(CallIC_Miss) { 2332 RUNTIME_FUNCTION(Runtime_CallIC_Miss) {
2333 TimerEventScope<TimerEventIcMiss> timer(isolate); 2333 TimerEventScope<TimerEventIcMiss> timer(isolate);
2334 HandleScope scope(isolate); 2334 HandleScope scope(isolate);
2335 DCHECK(args.length() == 3); 2335 DCHECK(args.length() == 3);
2336 Handle<Object> function = args.at<Object>(0); 2336 Handle<Object> function = args.at<Object>(0);
2337 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(1); 2337 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(1);
2338 Handle<Smi> slot = args.at<Smi>(2); 2338 Handle<Smi> slot = args.at<Smi>(2);
2339 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); 2339 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value());
2340 CallICNexus nexus(vector, vector_slot); 2340 CallICNexus nexus(vector, vector_slot);
2341 CallIC ic(isolate, &nexus); 2341 CallIC ic(isolate, &nexus);
2342 ic.HandleMiss(function); 2342 ic.HandleMiss(function);
2343 return *function; 2343 return *function;
2344 } 2344 }
2345 2345
2346 2346
2347 RUNTIME_FUNCTION(CallIC_Customization_Miss) { 2347 RUNTIME_FUNCTION(Runtime_CallIC_Customization_Miss) {
2348 TimerEventScope<TimerEventIcMiss> timer(isolate); 2348 TimerEventScope<TimerEventIcMiss> timer(isolate);
2349 HandleScope scope(isolate); 2349 HandleScope scope(isolate);
2350 DCHECK(args.length() == 3); 2350 DCHECK(args.length() == 3);
2351 Handle<Object> function = args.at<Object>(0); 2351 Handle<Object> function = args.at<Object>(0);
2352 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(1); 2352 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(1);
2353 Handle<Smi> slot = args.at<Smi>(2); 2353 Handle<Smi> slot = args.at<Smi>(2);
2354 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); 2354 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value());
2355 CallICNexus nexus(vector, vector_slot); 2355 CallICNexus nexus(vector, vector_slot);
2356 // A miss on a custom call ic always results in going megamorphic. 2356 // A miss on a custom call ic always results in going megamorphic.
2357 CallIC ic(isolate, &nexus); 2357 CallIC ic(isolate, &nexus);
2358 ic.PatchMegamorphic(function); 2358 ic.PatchMegamorphic(function);
2359 return *function; 2359 return *function;
2360 } 2360 }
2361 2361
2362 2362
2363 // Used from ic-<arch>.cc. 2363 // Used from ic-<arch>.cc.
2364 RUNTIME_FUNCTION(LoadIC_Miss) { 2364 RUNTIME_FUNCTION(Runtime_LoadIC_Miss) {
2365 TimerEventScope<TimerEventIcMiss> timer(isolate); 2365 TimerEventScope<TimerEventIcMiss> timer(isolate);
2366 HandleScope scope(isolate); 2366 HandleScope scope(isolate);
2367 Handle<Object> receiver = args.at<Object>(0); 2367 Handle<Object> receiver = args.at<Object>(0);
2368 Handle<Name> key = args.at<Name>(1); 2368 Handle<Name> key = args.at<Name>(1);
2369 Handle<Object> result; 2369 Handle<Object> result;
2370 2370
2371 DCHECK(args.length() == 4); 2371 DCHECK(args.length() == 4);
2372 Handle<Smi> slot = args.at<Smi>(2); 2372 Handle<Smi> slot = args.at<Smi>(2);
2373 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3); 2373 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3);
2374 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); 2374 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value());
(...skipping 10 matching lines...) Expand all
2385 KeyedLoadICNexus nexus(vector, vector_slot); 2385 KeyedLoadICNexus nexus(vector, vector_slot);
2386 KeyedLoadIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); 2386 KeyedLoadIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus);
2387 ic.UpdateState(receiver, key); 2387 ic.UpdateState(receiver, key);
2388 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); 2388 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key));
2389 } 2389 }
2390 return *result; 2390 return *result;
2391 } 2391 }
2392 2392
2393 2393
2394 // Used from ic-<arch>.cc 2394 // Used from ic-<arch>.cc
2395 RUNTIME_FUNCTION(KeyedLoadIC_Miss) { 2395 RUNTIME_FUNCTION(Runtime_KeyedLoadIC_Miss) {
2396 TimerEventScope<TimerEventIcMiss> timer(isolate); 2396 TimerEventScope<TimerEventIcMiss> timer(isolate);
2397 HandleScope scope(isolate); 2397 HandleScope scope(isolate);
2398 Handle<Object> receiver = args.at<Object>(0); 2398 Handle<Object> receiver = args.at<Object>(0);
2399 Handle<Object> key = args.at<Object>(1); 2399 Handle<Object> key = args.at<Object>(1);
2400 Handle<Object> result; 2400 Handle<Object> result;
2401 2401
2402 DCHECK(args.length() == 4); 2402 DCHECK(args.length() == 4);
2403 Handle<Smi> slot = args.at<Smi>(2); 2403 Handle<Smi> slot = args.at<Smi>(2);
2404 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3); 2404 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3);
2405 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); 2405 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value());
2406 KeyedLoadICNexus nexus(vector, vector_slot); 2406 KeyedLoadICNexus nexus(vector, vector_slot);
2407 KeyedLoadIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); 2407 KeyedLoadIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus);
2408 ic.UpdateState(receiver, key); 2408 ic.UpdateState(receiver, key);
2409 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); 2409 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key));
2410 return *result; 2410 return *result;
2411 } 2411 }
2412 2412
2413 2413
2414 RUNTIME_FUNCTION(KeyedLoadIC_MissFromStubFailure) { 2414 RUNTIME_FUNCTION(Runtime_KeyedLoadIC_MissFromStubFailure) {
2415 TimerEventScope<TimerEventIcMiss> timer(isolate); 2415 TimerEventScope<TimerEventIcMiss> timer(isolate);
2416 HandleScope scope(isolate); 2416 HandleScope scope(isolate);
2417 Handle<Object> receiver = args.at<Object>(0); 2417 Handle<Object> receiver = args.at<Object>(0);
2418 Handle<Object> key = args.at<Object>(1); 2418 Handle<Object> key = args.at<Object>(1);
2419 Handle<Object> result; 2419 Handle<Object> result;
2420 2420
2421 DCHECK(args.length() == 4); 2421 DCHECK(args.length() == 4);
2422 Handle<Smi> slot = args.at<Smi>(2); 2422 Handle<Smi> slot = args.at<Smi>(2);
2423 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3); 2423 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3);
2424 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); 2424 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value());
2425 KeyedLoadICNexus nexus(vector, vector_slot); 2425 KeyedLoadICNexus nexus(vector, vector_slot);
2426 KeyedLoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); 2426 KeyedLoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus);
2427 ic.UpdateState(receiver, key); 2427 ic.UpdateState(receiver, key);
2428 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); 2428 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key));
2429 2429
2430 return *result; 2430 return *result;
2431 } 2431 }
2432 2432
2433 2433
2434 // Used from ic-<arch>.cc. 2434 // Used from ic-<arch>.cc.
2435 RUNTIME_FUNCTION(StoreIC_Miss) { 2435 RUNTIME_FUNCTION(Runtime_StoreIC_Miss) {
2436 TimerEventScope<TimerEventIcMiss> timer(isolate); 2436 TimerEventScope<TimerEventIcMiss> timer(isolate);
2437 HandleScope scope(isolate); 2437 HandleScope scope(isolate);
2438 Handle<Object> receiver = args.at<Object>(0); 2438 Handle<Object> receiver = args.at<Object>(0);
2439 Handle<Name> key = args.at<Name>(1); 2439 Handle<Name> key = args.at<Name>(1);
2440 Handle<Object> value = args.at<Object>(2); 2440 Handle<Object> value = args.at<Object>(2);
2441 Handle<Object> result; 2441 Handle<Object> result;
2442 2442
2443 if (FLAG_vector_stores) { 2443 if (FLAG_vector_stores) {
2444 DCHECK(args.length() == 5); 2444 DCHECK(args.length() == 5);
2445 Handle<Smi> slot = args.at<Smi>(3); 2445 Handle<Smi> slot = args.at<Smi>(3);
(...skipping 17 matching lines...) Expand all
2463 DCHECK(args.length() == 3); 2463 DCHECK(args.length() == 3);
2464 StoreIC ic(IC::NO_EXTRA_FRAME, isolate); 2464 StoreIC ic(IC::NO_EXTRA_FRAME, isolate);
2465 ic.UpdateState(receiver, key); 2465 ic.UpdateState(receiver, key);
2466 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, 2466 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
2467 ic.Store(receiver, key, value)); 2467 ic.Store(receiver, key, value));
2468 } 2468 }
2469 return *result; 2469 return *result;
2470 } 2470 }
2471 2471
2472 2472
2473 RUNTIME_FUNCTION(StoreIC_MissFromStubFailure) { 2473 RUNTIME_FUNCTION(Runtime_StoreIC_MissFromStubFailure) {
2474 TimerEventScope<TimerEventIcMiss> timer(isolate); 2474 TimerEventScope<TimerEventIcMiss> timer(isolate);
2475 HandleScope scope(isolate); 2475 HandleScope scope(isolate);
2476 Handle<Object> receiver = args.at<Object>(0); 2476 Handle<Object> receiver = args.at<Object>(0);
2477 Handle<Name> key = args.at<Name>(1); 2477 Handle<Name> key = args.at<Name>(1);
2478 Handle<Object> value = args.at<Object>(2); 2478 Handle<Object> value = args.at<Object>(2);
2479 Handle<Object> result; 2479 Handle<Object> result;
2480 2480
2481 if (FLAG_vector_stores) { 2481 if (FLAG_vector_stores) {
2482 DCHECK(args.length() == 5); 2482 DCHECK(args.length() == 5);
2483 Handle<Smi> slot = args.at<Smi>(3); 2483 Handle<Smi> slot = args.at<Smi>(3);
(...skipping 18 matching lines...) Expand all
2502 StoreIC ic(IC::EXTRA_CALL_FRAME, isolate); 2502 StoreIC ic(IC::EXTRA_CALL_FRAME, isolate);
2503 ic.UpdateState(receiver, key); 2503 ic.UpdateState(receiver, key);
2504 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, 2504 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
2505 ic.Store(receiver, key, value)); 2505 ic.Store(receiver, key, value));
2506 } 2506 }
2507 return *result; 2507 return *result;
2508 } 2508 }
2509 2509
2510 2510
2511 // Used from ic-<arch>.cc. 2511 // Used from ic-<arch>.cc.
2512 RUNTIME_FUNCTION(KeyedStoreIC_Miss) { 2512 RUNTIME_FUNCTION(Runtime_KeyedStoreIC_Miss) {
2513 TimerEventScope<TimerEventIcMiss> timer(isolate); 2513 TimerEventScope<TimerEventIcMiss> timer(isolate);
2514 HandleScope scope(isolate); 2514 HandleScope scope(isolate);
2515 Handle<Object> receiver = args.at<Object>(0); 2515 Handle<Object> receiver = args.at<Object>(0);
2516 Handle<Object> key = args.at<Object>(1); 2516 Handle<Object> key = args.at<Object>(1);
2517 Handle<Object> value = args.at<Object>(2); 2517 Handle<Object> value = args.at<Object>(2);
2518 Handle<Object> result; 2518 Handle<Object> result;
2519 2519
2520 if (FLAG_vector_stores) { 2520 if (FLAG_vector_stores) {
2521 DCHECK(args.length() == 5); 2521 DCHECK(args.length() == 5);
2522 Handle<Smi> slot = args.at<Smi>(3); 2522 Handle<Smi> slot = args.at<Smi>(3);
2523 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); 2523 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4);
2524 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); 2524 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value());
2525 KeyedStoreICNexus nexus(vector, vector_slot); 2525 KeyedStoreICNexus nexus(vector, vector_slot);
2526 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); 2526 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus);
2527 ic.UpdateState(receiver, key); 2527 ic.UpdateState(receiver, key);
2528 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, 2528 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
2529 ic.Store(receiver, key, value)); 2529 ic.Store(receiver, key, value));
2530 } else { 2530 } else {
2531 DCHECK(args.length() == 3); 2531 DCHECK(args.length() == 3);
2532 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate); 2532 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate);
2533 ic.UpdateState(receiver, key); 2533 ic.UpdateState(receiver, key);
2534 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, 2534 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
2535 ic.Store(receiver, key, value)); 2535 ic.Store(receiver, key, value));
2536 } 2536 }
2537 return *result; 2537 return *result;
2538 } 2538 }
2539 2539
2540 2540
2541 RUNTIME_FUNCTION(KeyedStoreIC_MissFromStubFailure) { 2541 RUNTIME_FUNCTION(Runtime_KeyedStoreIC_MissFromStubFailure) {
2542 TimerEventScope<TimerEventIcMiss> timer(isolate); 2542 TimerEventScope<TimerEventIcMiss> timer(isolate);
2543 HandleScope scope(isolate); 2543 HandleScope scope(isolate);
2544 Handle<Object> receiver = args.at<Object>(0); 2544 Handle<Object> receiver = args.at<Object>(0);
2545 Handle<Object> key = args.at<Object>(1); 2545 Handle<Object> key = args.at<Object>(1);
2546 Handle<Object> value = args.at<Object>(2); 2546 Handle<Object> value = args.at<Object>(2);
2547 Handle<Object> result; 2547 Handle<Object> result;
2548 2548
2549 if (FLAG_vector_stores) { 2549 if (FLAG_vector_stores) {
2550 DCHECK(args.length() == 5); 2550 DCHECK(args.length() == 5);
2551 Handle<Smi> slot = args.at<Smi>(3); 2551 Handle<Smi> slot = args.at<Smi>(3);
2552 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); 2552 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4);
2553 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); 2553 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value());
2554 KeyedStoreICNexus nexus(vector, vector_slot); 2554 KeyedStoreICNexus nexus(vector, vector_slot);
2555 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); 2555 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus);
2556 ic.UpdateState(receiver, key); 2556 ic.UpdateState(receiver, key);
2557 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, 2557 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
2558 ic.Store(receiver, key, value)); 2558 ic.Store(receiver, key, value));
2559 } else { 2559 } else {
2560 DCHECK(args.length() == 3); 2560 DCHECK(args.length() == 3);
2561 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate); 2561 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate);
2562 ic.UpdateState(receiver, key); 2562 ic.UpdateState(receiver, key);
2563 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 2563 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2564 isolate, result, ic.Store(receiver, key, args.at<Object>(2))); 2564 isolate, result, ic.Store(receiver, key, args.at<Object>(2)));
2565 } 2565 }
2566 return *result; 2566 return *result;
2567 } 2567 }
2568 2568
2569 2569
2570 RUNTIME_FUNCTION(StoreIC_Slow) { 2570 RUNTIME_FUNCTION(Runtime_StoreIC_Slow) {
2571 HandleScope scope(isolate); 2571 HandleScope scope(isolate);
2572 DCHECK(args.length() == 3); 2572 DCHECK(args.length() == 3);
2573 StoreIC ic(IC::NO_EXTRA_FRAME, isolate); 2573 StoreIC ic(IC::NO_EXTRA_FRAME, isolate);
2574 Handle<Object> object = args.at<Object>(0); 2574 Handle<Object> object = args.at<Object>(0);
2575 Handle<Object> key = args.at<Object>(1); 2575 Handle<Object> key = args.at<Object>(1);
2576 Handle<Object> value = args.at<Object>(2); 2576 Handle<Object> value = args.at<Object>(2);
2577 LanguageMode language_mode = ic.language_mode(); 2577 LanguageMode language_mode = ic.language_mode();
2578 Handle<Object> result; 2578 Handle<Object> result;
2579 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 2579 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2580 isolate, result, 2580 isolate, result,
2581 Runtime::SetObjectProperty(isolate, object, key, value, language_mode)); 2581 Runtime::SetObjectProperty(isolate, object, key, value, language_mode));
2582 return *result; 2582 return *result;
2583 } 2583 }
2584 2584
2585 2585
2586 RUNTIME_FUNCTION(KeyedStoreIC_Slow) { 2586 RUNTIME_FUNCTION(Runtime_KeyedStoreIC_Slow) {
2587 HandleScope scope(isolate); 2587 HandleScope scope(isolate);
2588 DCHECK(args.length() == 3); 2588 DCHECK(args.length() == 3);
2589 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate); 2589 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate);
2590 Handle<Object> object = args.at<Object>(0); 2590 Handle<Object> object = args.at<Object>(0);
2591 Handle<Object> key = args.at<Object>(1); 2591 Handle<Object> key = args.at<Object>(1);
2592 Handle<Object> value = args.at<Object>(2); 2592 Handle<Object> value = args.at<Object>(2);
2593 LanguageMode language_mode = ic.language_mode(); 2593 LanguageMode language_mode = ic.language_mode();
2594 Handle<Object> result; 2594 Handle<Object> result;
2595 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 2595 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2596 isolate, result, 2596 isolate, result,
2597 Runtime::SetObjectProperty(isolate, object, key, value, language_mode)); 2597 Runtime::SetObjectProperty(isolate, object, key, value, language_mode));
2598 return *result; 2598 return *result;
2599 } 2599 }
2600 2600
2601 2601
2602 RUNTIME_FUNCTION(ElementsTransitionAndStoreIC_Miss) { 2602 RUNTIME_FUNCTION(Runtime_ElementsTransitionAndStoreIC_Miss) {
2603 TimerEventScope<TimerEventIcMiss> timer(isolate); 2603 TimerEventScope<TimerEventIcMiss> timer(isolate);
2604 HandleScope scope(isolate); 2604 HandleScope scope(isolate);
2605 DCHECK(args.length() == 4); 2605 DCHECK(args.length() == 4);
2606 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate); 2606 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate);
2607 Handle<Object> value = args.at<Object>(0); 2607 Handle<Object> value = args.at<Object>(0);
2608 Handle<Map> map = args.at<Map>(1); 2608 Handle<Map> map = args.at<Map>(1);
2609 Handle<Object> key = args.at<Object>(2); 2609 Handle<Object> key = args.at<Object>(2);
2610 Handle<Object> object = args.at<Object>(3); 2610 Handle<Object> object = args.at<Object>(3);
2611 LanguageMode language_mode = ic.language_mode(); 2611 LanguageMode language_mode = ic.language_mode();
2612 if (object->IsJSObject()) { 2612 if (object->IsJSObject()) {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
2689 if (!old_state.UseInlinedSmiCode() && state.UseInlinedSmiCode()) { 2689 if (!old_state.UseInlinedSmiCode() && state.UseInlinedSmiCode()) {
2690 PatchInlinedSmiCode(address(), ENABLE_INLINED_SMI_CHECK); 2690 PatchInlinedSmiCode(address(), ENABLE_INLINED_SMI_CHECK);
2691 } else if (old_state.UseInlinedSmiCode() && !state.UseInlinedSmiCode()) { 2691 } else if (old_state.UseInlinedSmiCode() && !state.UseInlinedSmiCode()) {
2692 PatchInlinedSmiCode(address(), DISABLE_INLINED_SMI_CHECK); 2692 PatchInlinedSmiCode(address(), DISABLE_INLINED_SMI_CHECK);
2693 } 2693 }
2694 2694
2695 return result; 2695 return result;
2696 } 2696 }
2697 2697
2698 2698
2699 RUNTIME_FUNCTION(BinaryOpIC_Miss) { 2699 RUNTIME_FUNCTION(Runtime_BinaryOpIC_Miss) {
2700 TimerEventScope<TimerEventIcMiss> timer(isolate); 2700 TimerEventScope<TimerEventIcMiss> timer(isolate);
2701 HandleScope scope(isolate); 2701 HandleScope scope(isolate);
2702 DCHECK_EQ(2, args.length()); 2702 DCHECK_EQ(2, args.length());
2703 Handle<Object> left = args.at<Object>(BinaryOpICStub::kLeft); 2703 Handle<Object> left = args.at<Object>(BinaryOpICStub::kLeft);
2704 Handle<Object> right = args.at<Object>(BinaryOpICStub::kRight); 2704 Handle<Object> right = args.at<Object>(BinaryOpICStub::kRight);
2705 BinaryOpIC ic(isolate); 2705 BinaryOpIC ic(isolate);
2706 Handle<Object> result; 2706 Handle<Object> result;
2707 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 2707 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2708 isolate, result, 2708 isolate, result,
2709 ic.Transition(Handle<AllocationSite>::null(), left, right)); 2709 ic.Transition(Handle<AllocationSite>::null(), left, right));
2710 return *result; 2710 return *result;
2711 } 2711 }
2712 2712
2713 2713
2714 RUNTIME_FUNCTION(BinaryOpIC_MissWithAllocationSite) { 2714 RUNTIME_FUNCTION(Runtime_BinaryOpIC_MissWithAllocationSite) {
2715 TimerEventScope<TimerEventIcMiss> timer(isolate); 2715 TimerEventScope<TimerEventIcMiss> timer(isolate);
2716 HandleScope scope(isolate); 2716 HandleScope scope(isolate);
2717 DCHECK_EQ(3, args.length()); 2717 DCHECK_EQ(3, args.length());
2718 Handle<AllocationSite> allocation_site = 2718 Handle<AllocationSite> allocation_site =
2719 args.at<AllocationSite>(BinaryOpWithAllocationSiteStub::kAllocationSite); 2719 args.at<AllocationSite>(BinaryOpWithAllocationSiteStub::kAllocationSite);
2720 Handle<Object> left = args.at<Object>(BinaryOpWithAllocationSiteStub::kLeft); 2720 Handle<Object> left = args.at<Object>(BinaryOpWithAllocationSiteStub::kLeft);
2721 Handle<Object> right = 2721 Handle<Object> right =
2722 args.at<Object>(BinaryOpWithAllocationSiteStub::kRight); 2722 args.at<Object>(BinaryOpWithAllocationSiteStub::kRight);
2723 BinaryOpIC ic(isolate); 2723 BinaryOpIC ic(isolate);
2724 Handle<Object> result; 2724 Handle<Object> result;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
2783 // Activate inlined smi code. 2783 // Activate inlined smi code.
2784 if (old_stub.state() == CompareICState::UNINITIALIZED) { 2784 if (old_stub.state() == CompareICState::UNINITIALIZED) {
2785 PatchInlinedSmiCode(address(), ENABLE_INLINED_SMI_CHECK); 2785 PatchInlinedSmiCode(address(), ENABLE_INLINED_SMI_CHECK);
2786 } 2786 }
2787 2787
2788 return *new_target; 2788 return *new_target;
2789 } 2789 }
2790 2790
2791 2791
2792 // Used from CompareICStub::GenerateMiss in code-stubs-<arch>.cc. 2792 // Used from CompareICStub::GenerateMiss in code-stubs-<arch>.cc.
2793 RUNTIME_FUNCTION(CompareIC_Miss) { 2793 RUNTIME_FUNCTION(Runtime_CompareIC_Miss) {
2794 TimerEventScope<TimerEventIcMiss> timer(isolate); 2794 TimerEventScope<TimerEventIcMiss> timer(isolate);
2795 HandleScope scope(isolate); 2795 HandleScope scope(isolate);
2796 DCHECK(args.length() == 3); 2796 DCHECK(args.length() == 3);
2797 CompareIC ic(isolate, static_cast<Token::Value>(args.smi_at(2))); 2797 CompareIC ic(isolate, static_cast<Token::Value>(args.smi_at(2)));
2798 return ic.UpdateCaches(args.at<Object>(0), args.at<Object>(1)); 2798 return ic.UpdateCaches(args.at<Object>(0), args.at<Object>(1));
2799 } 2799 }
2800 2800
2801 2801
2802 void CompareNilIC::Clear(Address address, Code* target, Address constant_pool) { 2802 void CompareNilIC::Clear(Address address, Code* target, Address constant_pool) {
2803 if (IsCleared(target)) return; 2803 if (IsCleared(target)) return;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2844 : HeapObject::cast(*object)->map()); 2844 : HeapObject::cast(*object)->map());
2845 code = PropertyICCompiler::ComputeCompareNil(monomorphic_map, &stub); 2845 code = PropertyICCompiler::ComputeCompareNil(monomorphic_map, &stub);
2846 } else { 2846 } else {
2847 code = stub.GetCode(); 2847 code = stub.GetCode();
2848 } 2848 }
2849 set_target(*code); 2849 set_target(*code);
2850 return DoCompareNilSlow(isolate(), nil, object); 2850 return DoCompareNilSlow(isolate(), nil, object);
2851 } 2851 }
2852 2852
2853 2853
2854 RUNTIME_FUNCTION(CompareNilIC_Miss) { 2854 RUNTIME_FUNCTION(Runtime_CompareNilIC_Miss) {
2855 TimerEventScope<TimerEventIcMiss> timer(isolate); 2855 TimerEventScope<TimerEventIcMiss> timer(isolate);
2856 HandleScope scope(isolate); 2856 HandleScope scope(isolate);
2857 Handle<Object> object = args.at<Object>(0); 2857 Handle<Object> object = args.at<Object>(0);
2858 CompareNilIC ic(isolate); 2858 CompareNilIC ic(isolate);
2859 return *ic.CompareNil(object); 2859 return *ic.CompareNil(object);
2860 } 2860 }
2861 2861
2862 2862
2863 RUNTIME_FUNCTION(Unreachable) { 2863 RUNTIME_FUNCTION(Runtime_Unreachable) {
2864 UNREACHABLE(); 2864 UNREACHABLE();
2865 CHECK(false); 2865 CHECK(false);
2866 return isolate->heap()->undefined_value(); 2866 return isolate->heap()->undefined_value();
2867 } 2867 }
2868 2868
2869 2869
2870 Builtins::JavaScript BinaryOpIC::TokenToJSBuiltin(Token::Value op, 2870 Builtins::JavaScript BinaryOpIC::TokenToJSBuiltin(Token::Value op,
2871 Strength strength) { 2871 Strength strength) {
2872 if (is_strong(strength)) { 2872 if (is_strong(strength)) {
2873 switch (op) { 2873 switch (op) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2905 2905
2906 Handle<Object> ToBooleanIC::ToBoolean(Handle<Object> object) { 2906 Handle<Object> ToBooleanIC::ToBoolean(Handle<Object> object) {
2907 ToBooleanStub stub(isolate(), target()->extra_ic_state()); 2907 ToBooleanStub stub(isolate(), target()->extra_ic_state());
2908 bool to_boolean_value = stub.UpdateStatus(object); 2908 bool to_boolean_value = stub.UpdateStatus(object);
2909 Handle<Code> code = stub.GetCode(); 2909 Handle<Code> code = stub.GetCode();
2910 set_target(*code); 2910 set_target(*code);
2911 return handle(Smi::FromInt(to_boolean_value ? 1 : 0), isolate()); 2911 return handle(Smi::FromInt(to_boolean_value ? 1 : 0), isolate());
2912 } 2912 }
2913 2913
2914 2914
2915 RUNTIME_FUNCTION(ToBooleanIC_Miss) { 2915 RUNTIME_FUNCTION(Runtime_ToBooleanIC_Miss) {
2916 TimerEventScope<TimerEventIcMiss> timer(isolate); 2916 TimerEventScope<TimerEventIcMiss> timer(isolate);
2917 DCHECK(args.length() == 1); 2917 DCHECK(args.length() == 1);
2918 HandleScope scope(isolate); 2918 HandleScope scope(isolate);
2919 Handle<Object> object = args.at<Object>(0); 2919 Handle<Object> object = args.at<Object>(0);
2920 ToBooleanIC ic(isolate); 2920 ToBooleanIC ic(isolate);
2921 return *ic.ToBoolean(object); 2921 return *ic.ToBoolean(object);
2922 } 2922 }
2923 2923
2924 2924
2925 RUNTIME_FUNCTION(StoreCallbackProperty) { 2925 RUNTIME_FUNCTION(Runtime_StoreCallbackProperty) {
2926 Handle<JSObject> receiver = args.at<JSObject>(0); 2926 Handle<JSObject> receiver = args.at<JSObject>(0);
2927 Handle<JSObject> holder = args.at<JSObject>(1); 2927 Handle<JSObject> holder = args.at<JSObject>(1);
2928 Handle<HeapObject> callback_or_cell = args.at<HeapObject>(2); 2928 Handle<HeapObject> callback_or_cell = args.at<HeapObject>(2);
2929 Handle<Name> name = args.at<Name>(3); 2929 Handle<Name> name = args.at<Name>(3);
2930 Handle<Object> value = args.at<Object>(4); 2930 Handle<Object> value = args.at<Object>(4);
2931 HandleScope scope(isolate); 2931 HandleScope scope(isolate);
2932 2932
2933 Handle<ExecutableAccessorInfo> callback( 2933 Handle<ExecutableAccessorInfo> callback(
2934 callback_or_cell->IsWeakCell() 2934 callback_or_cell->IsWeakCell()
2935 ? ExecutableAccessorInfo::cast( 2935 ? ExecutableAccessorInfo::cast(
(...skipping 16 matching lines...) Expand all
2952 } 2952 }
2953 2953
2954 2954
2955 /** 2955 /**
2956 * Attempts to load a property with an interceptor (which must be present), 2956 * Attempts to load a property with an interceptor (which must be present),
2957 * but doesn't search the prototype chain. 2957 * but doesn't search the prototype chain.
2958 * 2958 *
2959 * Returns |Heap::no_interceptor_result_sentinel()| if interceptor doesn't 2959 * Returns |Heap::no_interceptor_result_sentinel()| if interceptor doesn't
2960 * provide any value for the given name. 2960 * provide any value for the given name.
2961 */ 2961 */
2962 RUNTIME_FUNCTION(LoadPropertyWithInterceptorOnly) { 2962 RUNTIME_FUNCTION(Runtime_LoadPropertyWithInterceptorOnly) {
2963 DCHECK(args.length() == NamedLoadHandlerCompiler::kInterceptorArgsLength); 2963 DCHECK(args.length() == NamedLoadHandlerCompiler::kInterceptorArgsLength);
2964 Handle<Name> name = 2964 Handle<Name> name =
2965 args.at<Name>(NamedLoadHandlerCompiler::kInterceptorArgsNameIndex); 2965 args.at<Name>(NamedLoadHandlerCompiler::kInterceptorArgsNameIndex);
2966 Handle<JSObject> receiver = 2966 Handle<JSObject> receiver =
2967 args.at<JSObject>(NamedLoadHandlerCompiler::kInterceptorArgsThisIndex); 2967 args.at<JSObject>(NamedLoadHandlerCompiler::kInterceptorArgsThisIndex);
2968 Handle<JSObject> holder = 2968 Handle<JSObject> holder =
2969 args.at<JSObject>(NamedLoadHandlerCompiler::kInterceptorArgsHolderIndex); 2969 args.at<JSObject>(NamedLoadHandlerCompiler::kInterceptorArgsHolderIndex);
2970 HandleScope scope(isolate); 2970 HandleScope scope(isolate);
2971 LookupIterator it(receiver, name, holder, LookupIterator::OWN); 2971 LookupIterator it(receiver, name, holder, LookupIterator::OWN);
2972 bool done; 2972 bool done;
2973 Handle<Object> result; 2973 Handle<Object> result;
2974 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 2974 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2975 isolate, result, JSObject::GetPropertyWithInterceptor(&it, &done)); 2975 isolate, result, JSObject::GetPropertyWithInterceptor(&it, &done));
2976 if (done) return *result; 2976 if (done) return *result;
2977 return isolate->heap()->no_interceptor_result_sentinel(); 2977 return isolate->heap()->no_interceptor_result_sentinel();
2978 } 2978 }
2979 2979
2980 2980
2981 /** 2981 /**
2982 * Loads a property with an interceptor performing post interceptor 2982 * Loads a property with an interceptor performing post interceptor
2983 * lookup if interceptor failed. 2983 * lookup if interceptor failed.
2984 */ 2984 */
2985 RUNTIME_FUNCTION(LoadPropertyWithInterceptor) { 2985 RUNTIME_FUNCTION(Runtime_LoadPropertyWithInterceptor) {
2986 HandleScope scope(isolate); 2986 HandleScope scope(isolate);
2987 DCHECK(args.length() == NamedLoadHandlerCompiler::kInterceptorArgsLength); 2987 DCHECK(args.length() == NamedLoadHandlerCompiler::kInterceptorArgsLength);
2988 Handle<Name> name = 2988 Handle<Name> name =
2989 args.at<Name>(NamedLoadHandlerCompiler::kInterceptorArgsNameIndex); 2989 args.at<Name>(NamedLoadHandlerCompiler::kInterceptorArgsNameIndex);
2990 Handle<JSObject> receiver = 2990 Handle<JSObject> receiver =
2991 args.at<JSObject>(NamedLoadHandlerCompiler::kInterceptorArgsThisIndex); 2991 args.at<JSObject>(NamedLoadHandlerCompiler::kInterceptorArgsThisIndex);
2992 Handle<JSObject> holder = 2992 Handle<JSObject> holder =
2993 args.at<JSObject>(NamedLoadHandlerCompiler::kInterceptorArgsHolderIndex); 2993 args.at<JSObject>(NamedLoadHandlerCompiler::kInterceptorArgsHolderIndex);
2994 2994
2995 Handle<Object> result; 2995 Handle<Object> result;
(...skipping 10 matching lines...) Expand all
3006 if (!ic.ShouldThrowReferenceError(it.GetReceiver())) { 3006 if (!ic.ShouldThrowReferenceError(it.GetReceiver())) {
3007 return isolate->heap()->undefined_value(); 3007 return isolate->heap()->undefined_value();
3008 } 3008 }
3009 3009
3010 // Throw a reference error. 3010 // Throw a reference error.
3011 THROW_NEW_ERROR_RETURN_FAILURE( 3011 THROW_NEW_ERROR_RETURN_FAILURE(
3012 isolate, NewReferenceError(MessageTemplate::kNotDefined, it.name())); 3012 isolate, NewReferenceError(MessageTemplate::kNotDefined, it.name()));
3013 } 3013 }
3014 3014
3015 3015
3016 RUNTIME_FUNCTION(StorePropertyWithInterceptor) { 3016 RUNTIME_FUNCTION(Runtime_StorePropertyWithInterceptor) {
3017 HandleScope scope(isolate); 3017 HandleScope scope(isolate);
3018 DCHECK(args.length() == 3); 3018 DCHECK(args.length() == 3);
3019 StoreIC ic(IC::NO_EXTRA_FRAME, isolate); 3019 StoreIC ic(IC::NO_EXTRA_FRAME, isolate);
3020 Handle<JSObject> receiver = args.at<JSObject>(0); 3020 Handle<JSObject> receiver = args.at<JSObject>(0);
3021 Handle<Name> name = args.at<Name>(1); 3021 Handle<Name> name = args.at<Name>(1);
3022 Handle<Object> value = args.at<Object>(2); 3022 Handle<Object> value = args.at<Object>(2);
3023 #ifdef DEBUG 3023 #ifdef DEBUG
3024 PrototypeIterator iter(isolate, receiver, 3024 PrototypeIterator iter(isolate, receiver,
3025 PrototypeIterator::START_AT_RECEIVER); 3025 PrototypeIterator::START_AT_RECEIVER);
3026 bool found = false; 3026 bool found = false;
3027 for (; !iter.IsAtEnd(PrototypeIterator::END_AT_NON_HIDDEN); iter.Advance()) { 3027 for (; !iter.IsAtEnd(PrototypeIterator::END_AT_NON_HIDDEN); iter.Advance()) {
3028 Handle<Object> current = PrototypeIterator::GetCurrent(iter); 3028 Handle<Object> current = PrototypeIterator::GetCurrent(iter);
3029 if (current->IsJSObject() && 3029 if (current->IsJSObject() &&
3030 Handle<JSObject>::cast(current)->HasNamedInterceptor()) { 3030 Handle<JSObject>::cast(current)->HasNamedInterceptor()) {
3031 found = true; 3031 found = true;
3032 break; 3032 break;
3033 } 3033 }
3034 } 3034 }
3035 DCHECK(found); 3035 DCHECK(found);
3036 #endif 3036 #endif
3037 Handle<Object> result; 3037 Handle<Object> result;
3038 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 3038 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
3039 isolate, result, 3039 isolate, result,
3040 JSObject::SetProperty(receiver, name, value, ic.language_mode())); 3040 JSObject::SetProperty(receiver, name, value, ic.language_mode()));
3041 return *result; 3041 return *result;
3042 } 3042 }
3043 3043
3044 3044
3045 RUNTIME_FUNCTION(LoadElementWithInterceptor) { 3045 RUNTIME_FUNCTION(Runtime_LoadElementWithInterceptor) {
3046 // TODO(verwaest): This should probably get the holder and receiver as input. 3046 // TODO(verwaest): This should probably get the holder and receiver as input.
3047 HandleScope scope(isolate); 3047 HandleScope scope(isolate);
3048 Handle<JSObject> receiver = args.at<JSObject>(0); 3048 Handle<JSObject> receiver = args.at<JSObject>(0);
3049 DCHECK(args.smi_at(1) >= 0); 3049 DCHECK(args.smi_at(1) >= 0);
3050 uint32_t index = args.smi_at(1); 3050 uint32_t index = args.smi_at(1);
3051 Handle<Object> result; 3051 Handle<Object> result;
3052 // TODO(conradw): Investigate strong mode semantics for this. 3052 // TODO(conradw): Investigate strong mode semantics for this.
3053 LanguageMode language_mode = SLOPPY; 3053 LanguageMode language_mode = SLOPPY;
3054 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 3054 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
3055 isolate, result, 3055 isolate, result,
3056 Object::GetElement(isolate, receiver, index, language_mode)); 3056 Object::GetElement(isolate, receiver, index, language_mode));
3057 return *result; 3057 return *result;
3058 } 3058 }
3059 3059
3060 3060
3061 RUNTIME_FUNCTION(LoadIC_MissFromStubFailure) { 3061 RUNTIME_FUNCTION(Runtime_LoadIC_MissFromStubFailure) {
3062 TimerEventScope<TimerEventIcMiss> timer(isolate); 3062 TimerEventScope<TimerEventIcMiss> timer(isolate);
3063 HandleScope scope(isolate); 3063 HandleScope scope(isolate);
3064 Handle<Object> receiver = args.at<Object>(0); 3064 Handle<Object> receiver = args.at<Object>(0);
3065 Handle<Name> key = args.at<Name>(1); 3065 Handle<Name> key = args.at<Name>(1);
3066 Handle<Object> result; 3066 Handle<Object> result;
3067 3067
3068 DCHECK(args.length() == 4); 3068 DCHECK(args.length() == 4);
3069 Handle<Smi> slot = args.at<Smi>(2); 3069 Handle<Smi> slot = args.at<Smi>(2);
3070 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3); 3070 Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(3);
3071 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value()); 3071 FeedbackVectorICSlot vector_slot = vector->ToICSlot(slot->value());
3072 // A monomorphic or polymorphic KeyedLoadIC with a string key can call the 3072 // A monomorphic or polymorphic KeyedLoadIC with a string key can call the
3073 // LoadIC miss handler if the handler misses. Since the vector Nexus is 3073 // LoadIC miss handler if the handler misses. Since the vector Nexus is
3074 // set up outside the IC, handle that here. 3074 // set up outside the IC, handle that here.
3075 if (vector->GetKind(vector_slot) == Code::LOAD_IC) { 3075 if (vector->GetKind(vector_slot) == Code::LOAD_IC) {
3076 LoadICNexus nexus(vector, vector_slot); 3076 LoadICNexus nexus(vector, vector_slot);
3077 LoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); 3077 LoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus);
3078 ic.UpdateState(receiver, key); 3078 ic.UpdateState(receiver, key);
3079 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); 3079 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key));
3080 } else { 3080 } else {
3081 DCHECK(vector->GetKind(vector_slot) == Code::KEYED_LOAD_IC); 3081 DCHECK(vector->GetKind(vector_slot) == Code::KEYED_LOAD_IC);
3082 KeyedLoadICNexus nexus(vector, vector_slot); 3082 KeyedLoadICNexus nexus(vector, vector_slot);
3083 KeyedLoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); 3083 KeyedLoadIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus);
3084 ic.UpdateState(receiver, key); 3084 ic.UpdateState(receiver, key);
3085 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key)); 3085 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, ic.Load(receiver, key));
3086 } 3086 }
3087 3087
3088 return *result; 3088 return *result;
3089 } 3089 }
3090
3091
3092 static const Address IC_utilities[] = {
3093 #define ADDR(name) FUNCTION_ADDR(name),
3094 IC_UTIL_LIST(ADDR) NULL
3095 #undef ADDR
3096 };
3097
3098
3099 Address IC::AddressFromUtilityId(IC::UtilityId id) { return IC_utilities[id]; }
3100 } // namespace internal 3090 } // namespace internal
3101 } // namespace v8 3091 } // namespace v8
OLDNEW
« no previous file with comments | « src/ic/ic.h ('k') | src/ic/mips/handler-compiler-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698