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

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

Issue 7086029: Fix a number of IC stubs to correctly set the call kind. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Load global object from rsi on x64. Created 9 years, 6 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/arm/macro-assembler-arm.cc ('k') | src/ia32/builtins-ia32.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 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 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 } 469 }
470 470
471 Handle<Code> ic(code); 471 Handle<Code> ic(code);
472 __ Jump(ic, RelocInfo::CODE_TARGET); 472 __ Jump(ic, RelocInfo::CODE_TARGET);
473 } 473 }
474 474
475 475
476 static void GenerateCallFunction(MacroAssembler* masm, 476 static void GenerateCallFunction(MacroAssembler* masm,
477 Object* object, 477 Object* object,
478 const ParameterCount& arguments, 478 const ParameterCount& arguments,
479 Label* miss) { 479 Label* miss,
480 Code::ExtraICState extra_ic_state) {
480 // ----------- S t a t e ------------- 481 // ----------- S t a t e -------------
481 // -- r0: receiver 482 // -- r0: receiver
482 // -- r1: function to call 483 // -- r1: function to call
483 // ----------------------------------- 484 // -----------------------------------
484 485
485 // Check that the function really is a function. 486 // Check that the function really is a function.
486 __ JumpIfSmi(r1, miss); 487 __ JumpIfSmi(r1, miss);
487 __ CompareObjectType(r1, r3, r3, JS_FUNCTION_TYPE); 488 __ CompareObjectType(r1, r3, r3, JS_FUNCTION_TYPE);
488 __ b(ne, miss); 489 __ b(ne, miss);
489 490
490 // Patch the receiver on the stack with the global proxy if 491 // Patch the receiver on the stack with the global proxy if
491 // necessary. 492 // necessary.
492 if (object->IsGlobalObject()) { 493 if (object->IsGlobalObject()) {
493 __ ldr(r3, FieldMemOperand(r0, GlobalObject::kGlobalReceiverOffset)); 494 __ ldr(r3, FieldMemOperand(r0, GlobalObject::kGlobalReceiverOffset));
494 __ str(r3, MemOperand(sp, arguments.immediate() * kPointerSize)); 495 __ str(r3, MemOperand(sp, arguments.immediate() * kPointerSize));
495 } 496 }
496 497
497 // Invoke the function. 498 // Invoke the function.
498 __ InvokeFunction(r1, arguments, JUMP_FUNCTION); 499 CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state)
500 ? CALL_AS_FUNCTION
501 : CALL_AS_METHOD;
502 __ InvokeFunction(r1, arguments, JUMP_FUNCTION, NullCallWrapper(), call_kind);
499 } 503 }
500 504
501 505
502 static void PushInterceptorArguments(MacroAssembler* masm, 506 static void PushInterceptorArguments(MacroAssembler* masm,
503 Register receiver, 507 Register receiver,
504 Register holder, 508 Register holder,
505 Register name, 509 Register name,
506 JSObject* holder_obj) { 510 JSObject* holder_obj) {
507 __ push(name); 511 __ push(name);
508 InterceptorInfo* interceptor = holder_obj->GetNamedInterceptor(); 512 InterceptorInfo* interceptor = holder_obj->GetNamedInterceptor();
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 ExternalReference ref = ExternalReference(&fun, 622 ExternalReference ref = ExternalReference(&fun,
619 ExternalReference::DIRECT_API_CALL, 623 ExternalReference::DIRECT_API_CALL,
620 masm->isolate()); 624 masm->isolate());
621 return masm->TryCallApiFunctionAndReturn(ref, kStackUnwindSpace); 625 return masm->TryCallApiFunctionAndReturn(ref, kStackUnwindSpace);
622 } 626 }
623 627
624 class CallInterceptorCompiler BASE_EMBEDDED { 628 class CallInterceptorCompiler BASE_EMBEDDED {
625 public: 629 public:
626 CallInterceptorCompiler(StubCompiler* stub_compiler, 630 CallInterceptorCompiler(StubCompiler* stub_compiler,
627 const ParameterCount& arguments, 631 const ParameterCount& arguments,
628 Register name) 632 Register name,
633 Code::ExtraICState extra_ic_state)
629 : stub_compiler_(stub_compiler), 634 : stub_compiler_(stub_compiler),
630 arguments_(arguments), 635 arguments_(arguments),
631 name_(name) {} 636 name_(name),
637 extra_ic_state_(extra_ic_state) {}
632 638
633 MaybeObject* Compile(MacroAssembler* masm, 639 MaybeObject* Compile(MacroAssembler* masm,
634 JSObject* object, 640 JSObject* object,
635 JSObject* holder, 641 JSObject* holder,
636 String* name, 642 String* name,
637 LookupResult* lookup, 643 LookupResult* lookup,
638 Register receiver, 644 Register receiver,
639 Register scratch1, 645 Register scratch1,
640 Register scratch2, 646 Register scratch2,
641 Register scratch3, 647 Register scratch3,
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
749 ASSERT(depth2 == kInvalidProtoDepth); 755 ASSERT(depth2 == kInvalidProtoDepth);
750 } 756 }
751 757
752 // Invoke function. 758 // Invoke function.
753 if (can_do_fast_api_call) { 759 if (can_do_fast_api_call) {
754 MaybeObject* result = GenerateFastApiDirectCall(masm, 760 MaybeObject* result = GenerateFastApiDirectCall(masm,
755 optimization, 761 optimization,
756 arguments_.immediate()); 762 arguments_.immediate());
757 if (result->IsFailure()) return result; 763 if (result->IsFailure()) return result;
758 } else { 764 } else {
765 CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state_)
766 ? CALL_AS_FUNCTION
767 : CALL_AS_METHOD;
759 __ InvokeFunction(optimization.constant_function(), arguments_, 768 __ InvokeFunction(optimization.constant_function(), arguments_,
760 JUMP_FUNCTION); 769 JUMP_FUNCTION, call_kind);
761 } 770 }
762 771
763 // Deferred code for fast API call case---clean preallocated space. 772 // Deferred code for fast API call case---clean preallocated space.
764 if (can_do_fast_api_call) { 773 if (can_do_fast_api_call) {
765 __ bind(&miss_cleanup); 774 __ bind(&miss_cleanup);
766 FreeSpaceForFastApiCall(masm); 775 FreeSpaceForFastApiCall(masm);
767 __ b(miss_label); 776 __ b(miss_label);
768 } 777 }
769 778
770 // Invoke a regular function. 779 // Invoke a regular function.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 841
833 // If interceptor returns no-result sentinel, call the constant function. 842 // If interceptor returns no-result sentinel, call the constant function.
834 __ LoadRoot(scratch, Heap::kNoInterceptorResultSentinelRootIndex); 843 __ LoadRoot(scratch, Heap::kNoInterceptorResultSentinelRootIndex);
835 __ cmp(r0, scratch); 844 __ cmp(r0, scratch);
836 __ b(ne, interceptor_succeeded); 845 __ b(ne, interceptor_succeeded);
837 } 846 }
838 847
839 StubCompiler* stub_compiler_; 848 StubCompiler* stub_compiler_;
840 const ParameterCount& arguments_; 849 const ParameterCount& arguments_;
841 Register name_; 850 Register name_;
851 Code::ExtraICState extra_ic_state_;
842 }; 852 };
843 853
844 854
845 // Generate code to check that a global property cell is empty. Create 855 // Generate code to check that a global property cell is empty. Create
846 // the property cell at compilation time if no cell exists for the 856 // the property cell at compilation time if no cell exists for the
847 // property. 857 // property.
848 MUST_USE_RESULT static MaybeObject* GenerateCheckPropertyCell( 858 MUST_USE_RESULT static MaybeObject* GenerateCheckPropertyCell(
849 MacroAssembler* masm, 859 MacroAssembler* masm,
850 GlobalObject* global, 860 GlobalObject* global,
851 String* name, 861 String* name,
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after
1485 // Get the receiver of the function from the stack into r0. 1495 // Get the receiver of the function from the stack into r0.
1486 __ ldr(r0, MemOperand(sp, argc * kPointerSize)); 1496 __ ldr(r0, MemOperand(sp, argc * kPointerSize));
1487 // Check that the receiver isn't a smi. 1497 // Check that the receiver isn't a smi.
1488 __ tst(r0, Operand(kSmiTagMask)); 1498 __ tst(r0, Operand(kSmiTagMask));
1489 __ b(eq, &miss); 1499 __ b(eq, &miss);
1490 1500
1491 // Do the right check and compute the holder register. 1501 // Do the right check and compute the holder register.
1492 Register reg = CheckPrototypes(object, r0, holder, r1, r3, r4, name, &miss); 1502 Register reg = CheckPrototypes(object, r0, holder, r1, r3, r4, name, &miss);
1493 GenerateFastPropertyLoad(masm(), r1, reg, holder, index); 1503 GenerateFastPropertyLoad(masm(), r1, reg, holder, index);
1494 1504
1495 GenerateCallFunction(masm(), object, arguments(), &miss); 1505 GenerateCallFunction(masm(), object, arguments(), &miss, extra_ic_state_);
1496 1506
1497 // Handle call cache miss. 1507 // Handle call cache miss.
1498 __ bind(&miss); 1508 __ bind(&miss);
1499 MaybeObject* maybe_result = GenerateMissBranch(); 1509 MaybeObject* maybe_result = GenerateMissBranch();
1500 if (maybe_result->IsFailure()) return maybe_result; 1510 if (maybe_result->IsFailure()) return maybe_result;
1501 1511
1502 // Return the generated code. 1512 // Return the generated code.
1503 return GetCode(FIELD, name); 1513 return GetCode(FIELD, name);
1504 } 1514 }
1505 1515
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
1985 char_from_code_generator.GenerateFast(masm()); 1995 char_from_code_generator.GenerateFast(masm());
1986 __ Drop(argc + 1); 1996 __ Drop(argc + 1);
1987 __ Ret(); 1997 __ Ret();
1988 1998
1989 StubRuntimeCallHelper call_helper; 1999 StubRuntimeCallHelper call_helper;
1990 char_from_code_generator.GenerateSlow(masm(), call_helper); 2000 char_from_code_generator.GenerateSlow(masm(), call_helper);
1991 2001
1992 // Tail call the full function. We do not have to patch the receiver 2002 // Tail call the full function. We do not have to patch the receiver
1993 // because the function makes no use of it. 2003 // because the function makes no use of it.
1994 __ bind(&slow); 2004 __ bind(&slow);
1995 __ InvokeFunction(function, arguments(), JUMP_FUNCTION); 2005 __ InvokeFunction(function, arguments(), JUMP_FUNCTION, CALL_AS_METHOD);
1996 2006
1997 __ bind(&miss); 2007 __ bind(&miss);
1998 // r2: function name. 2008 // r2: function name.
1999 MaybeObject* maybe_result = GenerateMissBranch(); 2009 MaybeObject* maybe_result = GenerateMissBranch();
2000 if (maybe_result->IsFailure()) return maybe_result; 2010 if (maybe_result->IsFailure()) return maybe_result;
2001 2011
2002 // Return the generated code. 2012 // Return the generated code.
2003 return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name); 2013 return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name);
2004 } 2014 }
2005 2015
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
2133 __ Drop(argc + 1); 2143 __ Drop(argc + 1);
2134 __ Ret(); 2144 __ Ret();
2135 2145
2136 __ bind(&wont_fit_smi); 2146 __ bind(&wont_fit_smi);
2137 // Restore FPCSR and fall to slow case. 2147 // Restore FPCSR and fall to slow case.
2138 __ vmsr(r3); 2148 __ vmsr(r3);
2139 2149
2140 __ bind(&slow); 2150 __ bind(&slow);
2141 // Tail call the full function. We do not have to patch the receiver 2151 // Tail call the full function. We do not have to patch the receiver
2142 // because the function makes no use of it. 2152 // because the function makes no use of it.
2143 __ InvokeFunction(function, arguments(), JUMP_FUNCTION); 2153 __ InvokeFunction(function, arguments(), JUMP_FUNCTION, CALL_AS_METHOD);
2144 2154
2145 __ bind(&miss); 2155 __ bind(&miss);
2146 // r2: function name. 2156 // r2: function name.
2147 MaybeObject* maybe_result = GenerateMissBranch(); 2157 MaybeObject* maybe_result = GenerateMissBranch();
2148 if (maybe_result->IsFailure()) return maybe_result; 2158 if (maybe_result->IsFailure()) return maybe_result;
2149 2159
2150 // Return the generated code. 2160 // Return the generated code.
2151 return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name); 2161 return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name);
2152 } 2162 }
2153 2163
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
2235 __ LoadRoot(r6, Heap::kHeapNumberMapRootIndex); 2245 __ LoadRoot(r6, Heap::kHeapNumberMapRootIndex);
2236 __ AllocateHeapNumber(r0, r4, r5, r6, &slow); 2246 __ AllocateHeapNumber(r0, r4, r5, r6, &slow);
2237 __ str(r1, FieldMemOperand(r0, HeapNumber::kExponentOffset)); 2247 __ str(r1, FieldMemOperand(r0, HeapNumber::kExponentOffset));
2238 __ str(r3, FieldMemOperand(r0, HeapNumber::kMantissaOffset)); 2248 __ str(r3, FieldMemOperand(r0, HeapNumber::kMantissaOffset));
2239 __ Drop(argc + 1); 2249 __ Drop(argc + 1);
2240 __ Ret(); 2250 __ Ret();
2241 2251
2242 // Tail call the full function. We do not have to patch the receiver 2252 // Tail call the full function. We do not have to patch the receiver
2243 // because the function makes no use of it. 2253 // because the function makes no use of it.
2244 __ bind(&slow); 2254 __ bind(&slow);
2245 __ InvokeFunction(function, arguments(), JUMP_FUNCTION); 2255 __ InvokeFunction(function, arguments(), JUMP_FUNCTION, CALL_AS_METHOD);
2246 2256
2247 __ bind(&miss); 2257 __ bind(&miss);
2248 // r2: function name. 2258 // r2: function name.
2249 MaybeObject* maybe_result = GenerateMissBranch(); 2259 MaybeObject* maybe_result = GenerateMissBranch();
2250 if (maybe_result->IsFailure()) return maybe_result; 2260 if (maybe_result->IsFailure()) return maybe_result;
2251 2261
2252 // Return the generated code. 2262 // Return the generated code.
2253 return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name); 2263 return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name);
2254 } 2264 }
2255 2265
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
2423 CheckPrototypes(JSObject::cast(object->GetPrototype()), r0, holder, r3, 2433 CheckPrototypes(JSObject::cast(object->GetPrototype()), r0, holder, r3,
2424 r1, r4, name, &miss); 2434 r1, r4, name, &miss);
2425 } 2435 }
2426 break; 2436 break;
2427 } 2437 }
2428 2438
2429 default: 2439 default:
2430 UNREACHABLE(); 2440 UNREACHABLE();
2431 } 2441 }
2432 2442
2433 __ InvokeFunction(function, arguments(), JUMP_FUNCTION); 2443 CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state_)
2444 ? CALL_AS_FUNCTION
2445 : CALL_AS_METHOD;
2446 __ InvokeFunction(function, arguments(), JUMP_FUNCTION, call_kind);
2434 2447
2435 // Handle call cache miss. 2448 // Handle call cache miss.
2436 __ bind(&miss); 2449 __ bind(&miss);
2437 MaybeObject* maybe_result = GenerateMissBranch(); 2450 MaybeObject* maybe_result = GenerateMissBranch();
2438 if (maybe_result->IsFailure()) return maybe_result; 2451 if (maybe_result->IsFailure()) return maybe_result;
2439 2452
2440 // Return the generated code. 2453 // Return the generated code.
2441 return GetCode(function); 2454 return GetCode(function);
2442 } 2455 }
2443 2456
(...skipping 12 matching lines...) Expand all
2456 2469
2457 // Get the number of arguments. 2470 // Get the number of arguments.
2458 const int argc = arguments().immediate(); 2471 const int argc = arguments().immediate();
2459 2472
2460 LookupResult lookup; 2473 LookupResult lookup;
2461 LookupPostInterceptor(holder, name, &lookup); 2474 LookupPostInterceptor(holder, name, &lookup);
2462 2475
2463 // Get the receiver from the stack. 2476 // Get the receiver from the stack.
2464 __ ldr(r1, MemOperand(sp, argc * kPointerSize)); 2477 __ ldr(r1, MemOperand(sp, argc * kPointerSize));
2465 2478
2466 CallInterceptorCompiler compiler(this, arguments(), r2); 2479 CallInterceptorCompiler compiler(this, arguments(), r2, extra_ic_state_);
2467 MaybeObject* result = compiler.Compile(masm(), 2480 MaybeObject* result = compiler.Compile(masm(),
2468 object, 2481 object,
2469 holder, 2482 holder,
2470 name, 2483 name,
2471 &lookup, 2484 &lookup,
2472 r1, 2485 r1,
2473 r3, 2486 r3,
2474 r4, 2487 r4,
2475 r0, 2488 r0,
2476 &miss); 2489 &miss);
2477 if (result->IsFailure()) { 2490 if (result->IsFailure()) {
2478 return result; 2491 return result;
2479 } 2492 }
2480 2493
2481 // Move returned value, the function to call, to r1. 2494 // Move returned value, the function to call, to r1.
2482 __ mov(r1, r0); 2495 __ mov(r1, r0);
2483 // Restore receiver. 2496 // Restore receiver.
2484 __ ldr(r0, MemOperand(sp, argc * kPointerSize)); 2497 __ ldr(r0, MemOperand(sp, argc * kPointerSize));
2485 2498
2486 GenerateCallFunction(masm(), object, arguments(), &miss); 2499 GenerateCallFunction(masm(), object, arguments(), &miss, extra_ic_state_);
2487 2500
2488 // Handle call cache miss. 2501 // Handle call cache miss.
2489 __ bind(&miss); 2502 __ bind(&miss);
2490 MaybeObject* maybe_result = GenerateMissBranch(); 2503 MaybeObject* maybe_result = GenerateMissBranch();
2491 if (maybe_result->IsFailure()) return maybe_result; 2504 if (maybe_result->IsFailure()) return maybe_result;
2492 2505
2493 // Return the generated code. 2506 // Return the generated code.
2494 return GetCode(INTERCEPTOR, name); 2507 return GetCode(INTERCEPTOR, name);
2495 } 2508 }
2496 2509
2497 2510
2498 MaybeObject* CallStubCompiler::CompileCallGlobal( 2511 MaybeObject* CallStubCompiler::CompileCallGlobal(JSObject* object,
2499 JSObject* object, 2512 GlobalObject* holder,
2500 GlobalObject* holder, 2513 JSGlobalPropertyCell* cell,
2501 JSGlobalPropertyCell* cell, 2514 JSFunction* function,
2502 JSFunction* function, 2515 String* name) {
2503 String* name,
2504 Code::ExtraICState extra_ic_state) {
2505 // ----------- S t a t e ------------- 2516 // ----------- S t a t e -------------
2506 // -- r2 : name 2517 // -- r2 : name
2507 // -- lr : return address 2518 // -- lr : return address
2508 // ----------------------------------- 2519 // -----------------------------------
2509 2520
2510 if (HasCustomCallGenerator(function)) { 2521 if (HasCustomCallGenerator(function)) {
2511 MaybeObject* maybe_result = CompileCustomCall( 2522 MaybeObject* maybe_result = CompileCustomCall(
2512 object, holder, cell, function, name); 2523 object, holder, cell, function, name);
2513 Object* result; 2524 Object* result;
2514 if (!maybe_result->ToObject(&result)) return maybe_result; 2525 if (!maybe_result->ToObject(&result)) return maybe_result;
(...skipping 21 matching lines...) Expand all
2536 2547
2537 // Setup the context (function already in r1). 2548 // Setup the context (function already in r1).
2538 __ ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset)); 2549 __ ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset));
2539 2550
2540 // Jump to the cached code (tail call). 2551 // Jump to the cached code (tail call).
2541 Counters* counters = masm()->isolate()->counters(); 2552 Counters* counters = masm()->isolate()->counters();
2542 __ IncrementCounter(counters->call_global_inline(), 1, r3, r4); 2553 __ IncrementCounter(counters->call_global_inline(), 1, r3, r4);
2543 ASSERT(function->is_compiled()); 2554 ASSERT(function->is_compiled());
2544 Handle<Code> code(function->code()); 2555 Handle<Code> code(function->code());
2545 ParameterCount expected(function->shared()->formal_parameter_count()); 2556 ParameterCount expected(function->shared()->formal_parameter_count());
2546 CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state) 2557 CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state_)
2547 ? CALL_AS_FUNCTION 2558 ? CALL_AS_FUNCTION
2548 : CALL_AS_METHOD; 2559 : CALL_AS_METHOD;
2549 if (V8::UseCrankshaft()) { 2560 if (V8::UseCrankshaft()) {
2550 // TODO(kasperl): For now, we always call indirectly through the 2561 // TODO(kasperl): For now, we always call indirectly through the
2551 // code field in the function to allow recompilation to take effect 2562 // code field in the function to allow recompilation to take effect
2552 // without changing any of the call sites. 2563 // without changing any of the call sites.
2553 __ ldr(r3, FieldMemOperand(r1, JSFunction::kCodeEntryOffset)); 2564 __ ldr(r3, FieldMemOperand(r1, JSFunction::kCodeEntryOffset));
2554 __ InvokeCode(r3, expected, arguments(), JUMP_FUNCTION, 2565 __ InvokeCode(r3, expected, arguments(), JUMP_FUNCTION,
2555 NullCallWrapper(), call_kind); 2566 NullCallWrapper(), call_kind);
2556 } else { 2567 } else {
(...skipping 1661 matching lines...) Expand 10 before | Expand all | Expand 10 after
4218 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric(); 4229 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric();
4219 __ Jump(ic, RelocInfo::CODE_TARGET); 4230 __ Jump(ic, RelocInfo::CODE_TARGET);
4220 } 4231 }
4221 4232
4222 4233
4223 #undef __ 4234 #undef __
4224 4235
4225 } } // namespace v8::internal 4236 } } // namespace v8::internal
4226 4237
4227 #endif // V8_TARGET_ARCH_ARM 4238 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/macro-assembler-arm.cc ('k') | src/ia32/builtins-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698