OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 } | 465 } |
466 | 466 |
467 Handle<Code> ic(code); | 467 Handle<Code> ic(code); |
468 __ Jump(ic, RelocInfo::CODE_TARGET); | 468 __ Jump(ic, RelocInfo::CODE_TARGET); |
469 } | 469 } |
470 | 470 |
471 | 471 |
472 static void GenerateCallFunction(MacroAssembler* masm, | 472 static void GenerateCallFunction(MacroAssembler* masm, |
473 Object* object, | 473 Object* object, |
474 const ParameterCount& arguments, | 474 const ParameterCount& arguments, |
475 Label* miss) { | 475 Label* miss, |
| 476 Code::ExtraICState extra_ic_state) { |
476 // ----------- S t a t e ------------- | 477 // ----------- S t a t e ------------- |
477 // -- a0: receiver | 478 // -- a0: receiver |
478 // -- a1: function to call | 479 // -- a1: function to call |
479 // ----------------------------------- | 480 // ----------------------------------- |
480 // Check that the function really is a function. | 481 // Check that the function really is a function. |
481 __ JumpIfSmi(a1, miss); | 482 __ JumpIfSmi(a1, miss); |
482 __ GetObjectType(a1, a3, a3); | 483 __ GetObjectType(a1, a3, a3); |
483 __ Branch(miss, ne, a3, Operand(JS_FUNCTION_TYPE)); | 484 __ Branch(miss, ne, a3, Operand(JS_FUNCTION_TYPE)); |
484 | 485 |
485 // Patch the receiver on the stack with the global proxy if | 486 // Patch the receiver on the stack with the global proxy if |
486 // necessary. | 487 // necessary. |
487 if (object->IsGlobalObject()) { | 488 if (object->IsGlobalObject()) { |
488 __ lw(a3, FieldMemOperand(a0, GlobalObject::kGlobalReceiverOffset)); | 489 __ lw(a3, FieldMemOperand(a0, GlobalObject::kGlobalReceiverOffset)); |
489 __ sw(a3, MemOperand(sp, arguments.immediate() * kPointerSize)); | 490 __ sw(a3, MemOperand(sp, arguments.immediate() * kPointerSize)); |
490 } | 491 } |
491 | 492 |
492 // Invoke the function. | 493 // Invoke the function. |
493 __ InvokeFunction(a1, arguments, JUMP_FUNCTION); | 494 CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state) |
| 495 ? CALL_AS_FUNCTION |
| 496 : CALL_AS_METHOD; |
| 497 __ InvokeFunction(a1, arguments, JUMP_FUNCTION, NullCallWrapper(), call_kind); |
494 } | 498 } |
495 | 499 |
496 | 500 |
497 static void PushInterceptorArguments(MacroAssembler* masm, | 501 static void PushInterceptorArguments(MacroAssembler* masm, |
498 Register receiver, | 502 Register receiver, |
499 Register holder, | 503 Register holder, |
500 Register name, | 504 Register name, |
501 JSObject* holder_obj) { | 505 JSObject* holder_obj) { |
502 __ push(name); | 506 __ push(name); |
503 InterceptorInfo* interceptor = holder_obj->GetNamedInterceptor(); | 507 InterceptorInfo* interceptor = holder_obj->GetNamedInterceptor(); |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
622 ExternalReference(&fun, | 626 ExternalReference(&fun, |
623 ExternalReference::DIRECT_API_CALL, | 627 ExternalReference::DIRECT_API_CALL, |
624 masm->isolate()); | 628 masm->isolate()); |
625 return masm->TryCallApiFunctionAndReturn(ref, kStackUnwindSpace); | 629 return masm->TryCallApiFunctionAndReturn(ref, kStackUnwindSpace); |
626 } | 630 } |
627 | 631 |
628 class CallInterceptorCompiler BASE_EMBEDDED { | 632 class CallInterceptorCompiler BASE_EMBEDDED { |
629 public: | 633 public: |
630 CallInterceptorCompiler(StubCompiler* stub_compiler, | 634 CallInterceptorCompiler(StubCompiler* stub_compiler, |
631 const ParameterCount& arguments, | 635 const ParameterCount& arguments, |
632 Register name) | 636 Register name, |
| 637 Code::ExtraICState extra_ic_state) |
633 : stub_compiler_(stub_compiler), | 638 : stub_compiler_(stub_compiler), |
634 arguments_(arguments), | 639 arguments_(arguments), |
635 name_(name) {} | 640 name_(name), |
| 641 extra_ic_state_(extra_ic_state) {} |
636 | 642 |
637 MaybeObject* Compile(MacroAssembler* masm, | 643 MaybeObject* Compile(MacroAssembler* masm, |
638 JSObject* object, | 644 JSObject* object, |
639 JSObject* holder, | 645 JSObject* holder, |
640 String* name, | 646 String* name, |
641 LookupResult* lookup, | 647 LookupResult* lookup, |
642 Register receiver, | 648 Register receiver, |
643 Register scratch1, | 649 Register scratch1, |
644 Register scratch2, | 650 Register scratch2, |
645 Register scratch3, | 651 Register scratch3, |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
753 ASSERT(depth2 == kInvalidProtoDepth); | 759 ASSERT(depth2 == kInvalidProtoDepth); |
754 } | 760 } |
755 | 761 |
756 // Invoke function. | 762 // Invoke function. |
757 if (can_do_fast_api_call) { | 763 if (can_do_fast_api_call) { |
758 MaybeObject* result = GenerateFastApiDirectCall(masm, | 764 MaybeObject* result = GenerateFastApiDirectCall(masm, |
759 optimization, | 765 optimization, |
760 arguments_.immediate()); | 766 arguments_.immediate()); |
761 if (result->IsFailure()) return result; | 767 if (result->IsFailure()) return result; |
762 } else { | 768 } else { |
| 769 CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state_) |
| 770 ? CALL_AS_FUNCTION |
| 771 : CALL_AS_METHOD; |
763 __ InvokeFunction(optimization.constant_function(), arguments_, | 772 __ InvokeFunction(optimization.constant_function(), arguments_, |
764 JUMP_FUNCTION); | 773 JUMP_FUNCTION, call_kind); |
765 } | 774 } |
766 | 775 |
767 // Deferred code for fast API call case---clean preallocated space. | 776 // Deferred code for fast API call case---clean preallocated space. |
768 if (can_do_fast_api_call) { | 777 if (can_do_fast_api_call) { |
769 __ bind(&miss_cleanup); | 778 __ bind(&miss_cleanup); |
770 FreeSpaceForFastApiCall(masm); | 779 FreeSpaceForFastApiCall(masm); |
771 __ Branch(miss_label); | 780 __ Branch(miss_label); |
772 } | 781 } |
773 | 782 |
774 // Invoke a regular function. | 783 // Invoke a regular function. |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
837 __ LeaveInternalFrame(); | 846 __ LeaveInternalFrame(); |
838 | 847 |
839 // If interceptor returns no-result sentinel, call the constant function. | 848 // If interceptor returns no-result sentinel, call the constant function. |
840 __ LoadRoot(scratch, Heap::kNoInterceptorResultSentinelRootIndex); | 849 __ LoadRoot(scratch, Heap::kNoInterceptorResultSentinelRootIndex); |
841 __ Branch(interceptor_succeeded, ne, v0, Operand(scratch)); | 850 __ Branch(interceptor_succeeded, ne, v0, Operand(scratch)); |
842 } | 851 } |
843 | 852 |
844 StubCompiler* stub_compiler_; | 853 StubCompiler* stub_compiler_; |
845 const ParameterCount& arguments_; | 854 const ParameterCount& arguments_; |
846 Register name_; | 855 Register name_; |
| 856 Code::ExtraICState extra_ic_state_; |
847 }; | 857 }; |
848 | 858 |
849 | 859 |
850 | 860 |
851 // Generate code to check that a global property cell is empty. Create | 861 // Generate code to check that a global property cell is empty. Create |
852 // the property cell at compilation time if no cell exists for the | 862 // the property cell at compilation time if no cell exists for the |
853 // property. | 863 // property. |
854 MUST_USE_RESULT static MaybeObject* GenerateCheckPropertyCell( | 864 MUST_USE_RESULT static MaybeObject* GenerateCheckPropertyCell( |
855 MacroAssembler* masm, | 865 MacroAssembler* masm, |
856 GlobalObject* global, | 866 GlobalObject* global, |
(...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1496 | 1506 |
1497 // Get the receiver of the function from the stack into a0. | 1507 // Get the receiver of the function from the stack into a0. |
1498 __ lw(a0, MemOperand(sp, argc * kPointerSize)); | 1508 __ lw(a0, MemOperand(sp, argc * kPointerSize)); |
1499 // Check that the receiver isn't a smi. | 1509 // Check that the receiver isn't a smi. |
1500 __ JumpIfSmi(a0, &miss, t0); | 1510 __ JumpIfSmi(a0, &miss, t0); |
1501 | 1511 |
1502 // Do the right check and compute the holder register. | 1512 // Do the right check and compute the holder register. |
1503 Register reg = CheckPrototypes(object, a0, holder, a1, a3, t0, name, &miss); | 1513 Register reg = CheckPrototypes(object, a0, holder, a1, a3, t0, name, &miss); |
1504 GenerateFastPropertyLoad(masm(), a1, reg, holder, index); | 1514 GenerateFastPropertyLoad(masm(), a1, reg, holder, index); |
1505 | 1515 |
1506 GenerateCallFunction(masm(), object, arguments(), &miss); | 1516 GenerateCallFunction(masm(), object, arguments(), &miss, extra_ic_state_); |
1507 | 1517 |
1508 // Handle call cache miss. | 1518 // Handle call cache miss. |
1509 __ bind(&miss); | 1519 __ bind(&miss); |
1510 MaybeObject* maybe_result = GenerateMissBranch(); | 1520 MaybeObject* maybe_result = GenerateMissBranch(); |
1511 if (maybe_result->IsFailure()) return maybe_result; | 1521 if (maybe_result->IsFailure()) return maybe_result; |
1512 | 1522 |
1513 // Return the generated code. | 1523 // Return the generated code. |
1514 return GetCode(FIELD, name); | 1524 return GetCode(FIELD, name); |
1515 } | 1525 } |
1516 | 1526 |
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1994 char_from_code_generator.GenerateFast(masm()); | 2004 char_from_code_generator.GenerateFast(masm()); |
1995 __ Drop(argc + 1); | 2005 __ Drop(argc + 1); |
1996 __ Ret(); | 2006 __ Ret(); |
1997 | 2007 |
1998 StubRuntimeCallHelper call_helper; | 2008 StubRuntimeCallHelper call_helper; |
1999 char_from_code_generator.GenerateSlow(masm(), call_helper); | 2009 char_from_code_generator.GenerateSlow(masm(), call_helper); |
2000 | 2010 |
2001 // Tail call the full function. We do not have to patch the receiver | 2011 // Tail call the full function. We do not have to patch the receiver |
2002 // because the function makes no use of it. | 2012 // because the function makes no use of it. |
2003 __ bind(&slow); | 2013 __ bind(&slow); |
2004 __ InvokeFunction(function, arguments(), JUMP_FUNCTION); | 2014 __ InvokeFunction(function, arguments(), JUMP_FUNCTION, CALL_AS_METHOD); |
2005 | 2015 |
2006 __ bind(&miss); | 2016 __ bind(&miss); |
2007 // a2: function name. | 2017 // a2: function name. |
2008 MaybeObject* maybe_result = GenerateMissBranch(); | 2018 MaybeObject* maybe_result = GenerateMissBranch(); |
2009 if (maybe_result->IsFailure()) return maybe_result; | 2019 if (maybe_result->IsFailure()) return maybe_result; |
2010 | 2020 |
2011 // Return the generated code. | 2021 // Return the generated code. |
2012 return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name); | 2022 return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name); |
2013 } | 2023 } |
2014 | 2024 |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2130 __ Drop(argc + 1); | 2140 __ Drop(argc + 1); |
2131 __ Ret(); | 2141 __ Ret(); |
2132 | 2142 |
2133 __ bind(&wont_fit_smi); | 2143 __ bind(&wont_fit_smi); |
2134 // Restore FCSR and fall to slow case. | 2144 // Restore FCSR and fall to slow case. |
2135 __ ctc1(a3, FCSR); | 2145 __ ctc1(a3, FCSR); |
2136 | 2146 |
2137 __ bind(&slow); | 2147 __ bind(&slow); |
2138 // Tail call the full function. We do not have to patch the receiver | 2148 // Tail call the full function. We do not have to patch the receiver |
2139 // because the function makes no use of it. | 2149 // because the function makes no use of it. |
2140 __ InvokeFunction(function, arguments(), JUMP_FUNCTION); | 2150 __ InvokeFunction(function, arguments(), JUMP_FUNCTION, CALL_AS_METHOD); |
2141 | 2151 |
2142 __ bind(&miss); | 2152 __ bind(&miss); |
2143 // a2: function name. | 2153 // a2: function name. |
2144 MaybeObject* obj = GenerateMissBranch(); | 2154 MaybeObject* obj = GenerateMissBranch(); |
2145 if (obj->IsFailure()) return obj; | 2155 if (obj->IsFailure()) return obj; |
2146 | 2156 |
2147 // Return the generated code. | 2157 // Return the generated code. |
2148 return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name); | 2158 return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name); |
2149 } | 2159 } |
2150 | 2160 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2232 __ LoadRoot(t2, Heap::kHeapNumberMapRootIndex); | 2242 __ LoadRoot(t2, Heap::kHeapNumberMapRootIndex); |
2233 __ AllocateHeapNumber(v0, t0, t1, t2, &slow); | 2243 __ AllocateHeapNumber(v0, t0, t1, t2, &slow); |
2234 __ sw(a1, FieldMemOperand(v0, HeapNumber::kExponentOffset)); | 2244 __ sw(a1, FieldMemOperand(v0, HeapNumber::kExponentOffset)); |
2235 __ sw(a3, FieldMemOperand(v0, HeapNumber::kMantissaOffset)); | 2245 __ sw(a3, FieldMemOperand(v0, HeapNumber::kMantissaOffset)); |
2236 __ Drop(argc + 1); | 2246 __ Drop(argc + 1); |
2237 __ Ret(); | 2247 __ Ret(); |
2238 | 2248 |
2239 // Tail call the full function. We do not have to patch the receiver | 2249 // Tail call the full function. We do not have to patch the receiver |
2240 // because the function makes no use of it. | 2250 // because the function makes no use of it. |
2241 __ bind(&slow); | 2251 __ bind(&slow); |
2242 __ InvokeFunction(function, arguments(), JUMP_FUNCTION); | 2252 __ InvokeFunction(function, arguments(), JUMP_FUNCTION, CALL_AS_METHOD); |
2243 | 2253 |
2244 __ bind(&miss); | 2254 __ bind(&miss); |
2245 // a2: function name. | 2255 // a2: function name. |
2246 MaybeObject* maybe_result = GenerateMissBranch(); | 2256 MaybeObject* maybe_result = GenerateMissBranch(); |
2247 if (maybe_result->IsFailure()) return maybe_result; | 2257 if (maybe_result->IsFailure()) return maybe_result; |
2248 | 2258 |
2249 // Return the generated code. | 2259 // Return the generated code. |
2250 return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name); | 2260 return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name); |
2251 } | 2261 } |
2252 | 2262 |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2418 CheckPrototypes(JSObject::cast(object->GetPrototype()), a0, holder, a3, | 2428 CheckPrototypes(JSObject::cast(object->GetPrototype()), a0, holder, a3, |
2419 a1, t0, name, &miss); | 2429 a1, t0, name, &miss); |
2420 } | 2430 } |
2421 break; | 2431 break; |
2422 } | 2432 } |
2423 | 2433 |
2424 default: | 2434 default: |
2425 UNREACHABLE(); | 2435 UNREACHABLE(); |
2426 } | 2436 } |
2427 | 2437 |
2428 __ InvokeFunction(function, arguments(), JUMP_FUNCTION); | 2438 CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state_) |
| 2439 ? CALL_AS_FUNCTION |
| 2440 : CALL_AS_METHOD; |
| 2441 __ InvokeFunction(function, arguments(), JUMP_FUNCTION, call_kind); |
2429 | 2442 |
2430 // Handle call cache miss. | 2443 // Handle call cache miss. |
2431 __ bind(&miss); | 2444 __ bind(&miss); |
2432 | 2445 |
2433 MaybeObject* maybe_result = GenerateMissBranch(); | 2446 MaybeObject* maybe_result = GenerateMissBranch(); |
2434 if (maybe_result->IsFailure()) return maybe_result; | 2447 if (maybe_result->IsFailure()) return maybe_result; |
2435 | 2448 |
2436 // Return the generated code. | 2449 // Return the generated code. |
2437 return GetCode(function); | 2450 return GetCode(function); |
2438 } | 2451 } |
(...skipping 13 matching lines...) Expand all Loading... |
2452 | 2465 |
2453 // Get the number of arguments. | 2466 // Get the number of arguments. |
2454 const int argc = arguments().immediate(); | 2467 const int argc = arguments().immediate(); |
2455 | 2468 |
2456 LookupResult lookup; | 2469 LookupResult lookup; |
2457 LookupPostInterceptor(holder, name, &lookup); | 2470 LookupPostInterceptor(holder, name, &lookup); |
2458 | 2471 |
2459 // Get the receiver from the stack. | 2472 // Get the receiver from the stack. |
2460 __ lw(a1, MemOperand(sp, argc * kPointerSize)); | 2473 __ lw(a1, MemOperand(sp, argc * kPointerSize)); |
2461 | 2474 |
2462 CallInterceptorCompiler compiler(this, arguments(), a2); | 2475 CallInterceptorCompiler compiler(this, arguments(), a2, extra_ic_state_); |
2463 MaybeObject* result = compiler.Compile(masm(), | 2476 MaybeObject* result = compiler.Compile(masm(), |
2464 object, | 2477 object, |
2465 holder, | 2478 holder, |
2466 name, | 2479 name, |
2467 &lookup, | 2480 &lookup, |
2468 a1, | 2481 a1, |
2469 a3, | 2482 a3, |
2470 t0, | 2483 t0, |
2471 a0, | 2484 a0, |
2472 &miss); | 2485 &miss); |
2473 if (result->IsFailure()) { | 2486 if (result->IsFailure()) { |
2474 return result; | 2487 return result; |
2475 } | 2488 } |
2476 | 2489 |
2477 // Move returned value, the function to call, to a1. | 2490 // Move returned value, the function to call, to a1. |
2478 __ mov(a1, v0); | 2491 __ mov(a1, v0); |
2479 // Restore receiver. | 2492 // Restore receiver. |
2480 __ lw(a0, MemOperand(sp, argc * kPointerSize)); | 2493 __ lw(a0, MemOperand(sp, argc * kPointerSize)); |
2481 | 2494 |
2482 GenerateCallFunction(masm(), object, arguments(), &miss); | 2495 GenerateCallFunction(masm(), object, arguments(), &miss, extra_ic_state_); |
2483 | 2496 |
2484 // Handle call cache miss. | 2497 // Handle call cache miss. |
2485 __ bind(&miss); | 2498 __ bind(&miss); |
2486 MaybeObject* maybe_result = GenerateMissBranch(); | 2499 MaybeObject* maybe_result = GenerateMissBranch(); |
2487 if (maybe_result->IsFailure()) return maybe_result; | 2500 if (maybe_result->IsFailure()) return maybe_result; |
2488 | 2501 |
2489 // Return the generated code. | 2502 // Return the generated code. |
2490 return GetCode(INTERCEPTOR, name); | 2503 return GetCode(INTERCEPTOR, name); |
2491 } | 2504 } |
2492 | 2505 |
2493 | 2506 |
2494 MaybeObject* CallStubCompiler::CompileCallGlobal( | 2507 MaybeObject* CallStubCompiler::CompileCallGlobal(JSObject* object, |
2495 JSObject* object, | 2508 GlobalObject* holder, |
2496 GlobalObject* holder, | 2509 JSGlobalPropertyCell* cell, |
2497 JSGlobalPropertyCell* cell, | 2510 JSFunction* function, |
2498 JSFunction* function, | 2511 String* name) { |
2499 String* name, | |
2500 Code::ExtraICState extra_ic_state) { | |
2501 // ----------- S t a t e ------------- | 2512 // ----------- S t a t e ------------- |
2502 // -- a2 : name | 2513 // -- a2 : name |
2503 // -- ra : return address | 2514 // -- ra : return address |
2504 // ----------------------------------- | 2515 // ----------------------------------- |
2505 | 2516 |
2506 if (HasCustomCallGenerator(function)) { | 2517 if (HasCustomCallGenerator(function)) { |
2507 MaybeObject* maybe_result = CompileCustomCall( | 2518 MaybeObject* maybe_result = CompileCustomCall( |
2508 object, holder, cell, function, name); | 2519 object, holder, cell, function, name); |
2509 Object* result; | 2520 Object* result; |
2510 if (!maybe_result->ToObject(&result)) return maybe_result; | 2521 if (!maybe_result->ToObject(&result)) return maybe_result; |
(...skipping 20 matching lines...) Expand all Loading... |
2531 | 2542 |
2532 // Setup the context (function already in r1). | 2543 // Setup the context (function already in r1). |
2533 __ lw(cp, FieldMemOperand(a1, JSFunction::kContextOffset)); | 2544 __ lw(cp, FieldMemOperand(a1, JSFunction::kContextOffset)); |
2534 | 2545 |
2535 // Jump to the cached code (tail call). | 2546 // Jump to the cached code (tail call). |
2536 Counters* counters = masm()->isolate()->counters(); | 2547 Counters* counters = masm()->isolate()->counters(); |
2537 __ IncrementCounter(counters->call_global_inline(), 1, a3, t0); | 2548 __ IncrementCounter(counters->call_global_inline(), 1, a3, t0); |
2538 ASSERT(function->is_compiled()); | 2549 ASSERT(function->is_compiled()); |
2539 Handle<Code> code(function->code()); | 2550 Handle<Code> code(function->code()); |
2540 ParameterCount expected(function->shared()->formal_parameter_count()); | 2551 ParameterCount expected(function->shared()->formal_parameter_count()); |
2541 CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state) | 2552 CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state_) |
2542 ? CALL_AS_FUNCTION | 2553 ? CALL_AS_FUNCTION |
2543 : CALL_AS_METHOD; | 2554 : CALL_AS_METHOD; |
2544 if (V8::UseCrankshaft()) { | 2555 if (V8::UseCrankshaft()) { |
2545 UNIMPLEMENTED_MIPS(); | 2556 UNIMPLEMENTED_MIPS(); |
2546 } else { | 2557 } else { |
2547 __ InvokeCode(code, expected, arguments(), RelocInfo::CODE_TARGET, | 2558 __ InvokeCode(code, expected, arguments(), RelocInfo::CODE_TARGET, |
2548 JUMP_FUNCTION, call_kind); | 2559 JUMP_FUNCTION, call_kind); |
2549 } | 2560 } |
2550 | 2561 |
2551 // Handle call cache miss. | 2562 // Handle call cache miss. |
(...skipping 1724 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4276 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric(); | 4287 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric(); |
4277 __ Jump(ic, RelocInfo::CODE_TARGET); | 4288 __ Jump(ic, RelocInfo::CODE_TARGET); |
4278 } | 4289 } |
4279 | 4290 |
4280 | 4291 |
4281 #undef __ | 4292 #undef __ |
4282 | 4293 |
4283 } } // namespace v8::internal | 4294 } } // namespace v8::internal |
4284 | 4295 |
4285 #endif // V8_TARGET_ARCH_MIPS | 4296 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |