| OLD | NEW |
| 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 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 446 ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded()); | 446 ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded()); |
| 447 | 447 |
| 448 // Perform map transition for the receiver if necessary. | 448 // Perform map transition for the receiver if necessary. |
| 449 if ((transition != NULL) && (object->map()->unused_property_fields() == 0)) { | 449 if ((transition != NULL) && (object->map()->unused_property_fields() == 0)) { |
| 450 // The properties must be extended before we can store the value. | 450 // The properties must be extended before we can store the value. |
| 451 // We jump to a runtime call that extends the properties array. | 451 // We jump to a runtime call that extends the properties array. |
| 452 __ push(receiver_reg); | 452 __ push(receiver_reg); |
| 453 __ mov(r2, Operand(Handle<Map>(transition))); | 453 __ mov(r2, Operand(Handle<Map>(transition))); |
| 454 __ Push(r2, r0); | 454 __ Push(r2, r0); |
| 455 __ TailCallExternalReference( | 455 __ TailCallExternalReference( |
| 456 ExternalReference(IC_Utility(IC::kSharedStoreIC_ExtendStorage)), | 456 ExternalReference(IC_Utility(IC::kSharedStoreIC_ExtendStorage), |
| 457 3, 1); | 457 masm->isolate()), |
| 458 3, |
| 459 1); |
| 458 return; | 460 return; |
| 459 } | 461 } |
| 460 | 462 |
| 461 if (transition != NULL) { | 463 if (transition != NULL) { |
| 462 // Update the map of the object; no write barrier updating is | 464 // Update the map of the object; no write barrier updating is |
| 463 // needed because the map is never in new space. | 465 // needed because the map is never in new space. |
| 464 __ mov(ip, Operand(Handle<Map>(transition))); | 466 __ mov(ip, Operand(Handle<Map>(transition))); |
| 465 __ str(ip, FieldMemOperand(receiver_reg, HeapObject::kMapOffset)); | 467 __ str(ip, FieldMemOperand(receiver_reg, HeapObject::kMapOffset)); |
| 466 } | 468 } |
| 467 | 469 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 563 | 565 |
| 564 | 566 |
| 565 static void CompileCallLoadPropertyWithInterceptor(MacroAssembler* masm, | 567 static void CompileCallLoadPropertyWithInterceptor(MacroAssembler* masm, |
| 566 Register receiver, | 568 Register receiver, |
| 567 Register holder, | 569 Register holder, |
| 568 Register name, | 570 Register name, |
| 569 JSObject* holder_obj) { | 571 JSObject* holder_obj) { |
| 570 PushInterceptorArguments(masm, receiver, holder, name, holder_obj); | 572 PushInterceptorArguments(masm, receiver, holder, name, holder_obj); |
| 571 | 573 |
| 572 ExternalReference ref = | 574 ExternalReference ref = |
| 573 ExternalReference(IC_Utility(IC::kLoadPropertyWithInterceptorOnly)); | 575 ExternalReference(IC_Utility(IC::kLoadPropertyWithInterceptorOnly), |
| 576 masm->isolate()); |
| 574 __ mov(r0, Operand(5)); | 577 __ mov(r0, Operand(5)); |
| 575 __ mov(r1, Operand(ref)); | 578 __ mov(r1, Operand(ref)); |
| 576 | 579 |
| 577 CEntryStub stub(1); | 580 CEntryStub stub(1); |
| 578 __ CallStub(&stub); | 581 __ CallStub(&stub); |
| 579 } | 582 } |
| 580 | 583 |
| 581 static const int kFastApiCallArguments = 3; | 584 static const int kFastApiCallArguments = 3; |
| 582 | 585 |
| 583 // Reserves space for the extra arguments to FastHandleApiCall in the | 586 // Reserves space for the extra arguments to FastHandleApiCall in the |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 652 __ str(ip, MemOperand(r0, 2 * kPointerSize)); | 655 __ str(ip, MemOperand(r0, 2 * kPointerSize)); |
| 653 // v8::Arguments::is_construct_call = 0 | 656 // v8::Arguments::is_construct_call = 0 |
| 654 __ mov(ip, Operand(0)); | 657 __ mov(ip, Operand(0)); |
| 655 __ str(ip, MemOperand(r0, 3 * kPointerSize)); | 658 __ str(ip, MemOperand(r0, 3 * kPointerSize)); |
| 656 | 659 |
| 657 // Emitting a stub call may try to allocate (if the code is not | 660 // Emitting a stub call may try to allocate (if the code is not |
| 658 // already generated). Do not allow the assembler to perform a | 661 // already generated). Do not allow the assembler to perform a |
| 659 // garbage collection but instead return the allocation failure | 662 // garbage collection but instead return the allocation failure |
| 660 // object. | 663 // object. |
| 661 const int kStackUnwindSpace = argc + kFastApiCallArguments + 1; | 664 const int kStackUnwindSpace = argc + kFastApiCallArguments + 1; |
| 662 ExternalReference ref = | 665 ExternalReference ref = ExternalReference(&fun, |
| 663 ExternalReference(&fun, ExternalReference::DIRECT_API_CALL); | 666 ExternalReference::DIRECT_API_CALL, |
| 667 masm->isolate()); |
| 664 return masm->TryCallApiFunctionAndReturn(ref, kStackUnwindSpace); | 668 return masm->TryCallApiFunctionAndReturn(ref, kStackUnwindSpace); |
| 665 } | 669 } |
| 666 | 670 |
| 667 class CallInterceptorCompiler BASE_EMBEDDED { | 671 class CallInterceptorCompiler BASE_EMBEDDED { |
| 668 public: | 672 public: |
| 669 CallInterceptorCompiler(StubCompiler* stub_compiler, | 673 CallInterceptorCompiler(StubCompiler* stub_compiler, |
| 670 const ParameterCount& arguments, | 674 const ParameterCount& arguments, |
| 671 Register name) | 675 Register name) |
| 672 : stub_compiler_(stub_compiler), | 676 : stub_compiler_(stub_compiler), |
| 673 arguments_(arguments), | 677 arguments_(arguments), |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 836 // Save the name_ register across the call. | 840 // Save the name_ register across the call. |
| 837 __ push(name_); | 841 __ push(name_); |
| 838 | 842 |
| 839 PushInterceptorArguments(masm, | 843 PushInterceptorArguments(masm, |
| 840 receiver, | 844 receiver, |
| 841 holder, | 845 holder, |
| 842 name_, | 846 name_, |
| 843 interceptor_holder); | 847 interceptor_holder); |
| 844 | 848 |
| 845 __ CallExternalReference( | 849 __ CallExternalReference( |
| 846 ExternalReference( | 850 ExternalReference(IC_Utility(IC::kLoadPropertyWithInterceptorForCall), |
| 847 IC_Utility(IC::kLoadPropertyWithInterceptorForCall)), | 851 masm->isolate()), |
| 848 5); | 852 5); |
| 849 | 853 |
| 850 // Restore the name_ register. | 854 // Restore the name_ register. |
| 851 __ pop(name_); | 855 __ pop(name_); |
| 852 __ LeaveInternalFrame(); | 856 __ LeaveInternalFrame(); |
| 853 } | 857 } |
| 854 | 858 |
| 855 void LoadWithInterceptor(MacroAssembler* masm, | 859 void LoadWithInterceptor(MacroAssembler* masm, |
| 856 Register receiver, | 860 Register receiver, |
| 857 Register holder, | 861 Register holder, |
| 858 JSObject* holder_obj, | 862 JSObject* holder_obj, |
| (...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1269 // scratch2 (internal::Object **args_) as the data. | 1273 // scratch2 (internal::Object **args_) as the data. |
| 1270 __ str(scratch2, MemOperand(sp, 1 * kPointerSize)); | 1274 __ str(scratch2, MemOperand(sp, 1 * kPointerSize)); |
| 1271 __ add(r1, sp, Operand(1 * kPointerSize)); // r1 = AccessorInfo& | 1275 __ add(r1, sp, Operand(1 * kPointerSize)); // r1 = AccessorInfo& |
| 1272 | 1276 |
| 1273 // Emitting a stub call may try to allocate (if the code is not | 1277 // Emitting a stub call may try to allocate (if the code is not |
| 1274 // already generated). Do not allow the assembler to perform a | 1278 // already generated). Do not allow the assembler to perform a |
| 1275 // garbage collection but instead return the allocation failure | 1279 // garbage collection but instead return the allocation failure |
| 1276 // object. | 1280 // object. |
| 1277 const int kStackUnwindSpace = 4; | 1281 const int kStackUnwindSpace = 4; |
| 1278 ExternalReference ref = | 1282 ExternalReference ref = |
| 1279 ExternalReference(&fun, ExternalReference::DIRECT_GETTER_CALL); | 1283 ExternalReference(&fun, |
| 1284 ExternalReference::DIRECT_GETTER_CALL, |
| 1285 masm()->isolate()); |
| 1280 return masm()->TryCallApiFunctionAndReturn(ref, kStackUnwindSpace); | 1286 return masm()->TryCallApiFunctionAndReturn(ref, kStackUnwindSpace); |
| 1281 } | 1287 } |
| 1282 | 1288 |
| 1283 | 1289 |
| 1284 void StubCompiler::GenerateLoadInterceptor(JSObject* object, | 1290 void StubCompiler::GenerateLoadInterceptor(JSObject* object, |
| 1285 JSObject* interceptor_holder, | 1291 JSObject* interceptor_holder, |
| 1286 LookupResult* lookup, | 1292 LookupResult* lookup, |
| 1287 Register receiver, | 1293 Register receiver, |
| 1288 Register name_reg, | 1294 Register name_reg, |
| 1289 Register scratch1, | 1295 Register scratch1, |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1398 FieldMemOperand(scratch2, AccessorInfo::kDataOffset)); | 1404 FieldMemOperand(scratch2, AccessorInfo::kDataOffset)); |
| 1399 __ Push(scratch3, scratch2, name_reg); | 1405 __ Push(scratch3, scratch2, name_reg); |
| 1400 } else { | 1406 } else { |
| 1401 __ push(receiver); | 1407 __ push(receiver); |
| 1402 __ ldr(scratch3, | 1408 __ ldr(scratch3, |
| 1403 FieldMemOperand(scratch2, AccessorInfo::kDataOffset)); | 1409 FieldMemOperand(scratch2, AccessorInfo::kDataOffset)); |
| 1404 __ Push(holder_reg, scratch3, scratch2, name_reg); | 1410 __ Push(holder_reg, scratch3, scratch2, name_reg); |
| 1405 } | 1411 } |
| 1406 | 1412 |
| 1407 ExternalReference ref = | 1413 ExternalReference ref = |
| 1408 ExternalReference(IC_Utility(IC::kLoadCallbackProperty)); | 1414 ExternalReference(IC_Utility(IC::kLoadCallbackProperty), |
| 1415 masm()->isolate()); |
| 1409 __ TailCallExternalReference(ref, 5, 1); | 1416 __ TailCallExternalReference(ref, 5, 1); |
| 1410 } | 1417 } |
| 1411 } else { // !compile_followup_inline | 1418 } else { // !compile_followup_inline |
| 1412 // Call the runtime system to load the interceptor. | 1419 // Call the runtime system to load the interceptor. |
| 1413 // Check that the maps haven't changed. | 1420 // Check that the maps haven't changed. |
| 1414 Register holder_reg = CheckPrototypes(object, receiver, interceptor_holder, | 1421 Register holder_reg = CheckPrototypes(object, receiver, interceptor_holder, |
| 1415 scratch1, scratch2, scratch3, | 1422 scratch1, scratch2, scratch3, |
| 1416 name, miss); | 1423 name, miss); |
| 1417 PushInterceptorArguments(masm(), receiver, holder_reg, | 1424 PushInterceptorArguments(masm(), receiver, holder_reg, |
| 1418 name_reg, interceptor_holder); | 1425 name_reg, interceptor_holder); |
| 1419 | 1426 |
| 1420 ExternalReference ref = ExternalReference( | 1427 ExternalReference ref = |
| 1421 IC_Utility(IC::kLoadPropertyWithInterceptorForLoad)); | 1428 ExternalReference(IC_Utility(IC::kLoadPropertyWithInterceptorForLoad), |
| 1429 masm()->isolate()); |
| 1422 __ TailCallExternalReference(ref, 5, 1); | 1430 __ TailCallExternalReference(ref, 5, 1); |
| 1423 } | 1431 } |
| 1424 } | 1432 } |
| 1425 | 1433 |
| 1426 | 1434 |
| 1427 void CallStubCompiler::GenerateNameCheck(String* name, Label* miss) { | 1435 void CallStubCompiler::GenerateNameCheck(String* name, Label* miss) { |
| 1428 if (kind_ == Code::KEYED_CALL_IC) { | 1436 if (kind_ == Code::KEYED_CALL_IC) { |
| 1429 __ cmp(r2, Operand(Handle<String>(name))); | 1437 __ cmp(r2, Operand(Handle<String>(name))); |
| 1430 __ b(ne, miss); | 1438 __ b(ne, miss); |
| 1431 } | 1439 } |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1629 __ Ret(); | 1637 __ Ret(); |
| 1630 | 1638 |
| 1631 __ bind(&attempt_to_grow_elements); | 1639 __ bind(&attempt_to_grow_elements); |
| 1632 // r0: array's length + 1. | 1640 // r0: array's length + 1. |
| 1633 // r4: elements' length. | 1641 // r4: elements' length. |
| 1634 | 1642 |
| 1635 if (!FLAG_inline_new) { | 1643 if (!FLAG_inline_new) { |
| 1636 __ b(&call_builtin); | 1644 __ b(&call_builtin); |
| 1637 } | 1645 } |
| 1638 | 1646 |
| 1647 Isolate* isolate = masm()->isolate(); |
| 1639 ExternalReference new_space_allocation_top = | 1648 ExternalReference new_space_allocation_top = |
| 1640 ExternalReference::new_space_allocation_top_address(); | 1649 ExternalReference::new_space_allocation_top_address(isolate); |
| 1641 ExternalReference new_space_allocation_limit = | 1650 ExternalReference new_space_allocation_limit = |
| 1642 ExternalReference::new_space_allocation_limit_address(); | 1651 ExternalReference::new_space_allocation_limit_address(isolate); |
| 1643 | 1652 |
| 1644 const int kAllocationDelta = 4; | 1653 const int kAllocationDelta = 4; |
| 1645 // Load top and check if it is the end of elements. | 1654 // Load top and check if it is the end of elements. |
| 1646 __ add(end_elements, elements, | 1655 __ add(end_elements, elements, |
| 1647 Operand(r0, LSL, kPointerSizeLog2 - kSmiTagSize)); | 1656 Operand(r0, LSL, kPointerSizeLog2 - kSmiTagSize)); |
| 1648 __ add(end_elements, end_elements, Operand(kEndElementsOffset)); | 1657 __ add(end_elements, end_elements, Operand(kEndElementsOffset)); |
| 1649 __ mov(r7, Operand(new_space_allocation_top)); | 1658 __ mov(r7, Operand(new_space_allocation_top)); |
| 1650 __ ldr(r6, MemOperand(r7)); | 1659 __ ldr(r6, MemOperand(r7)); |
| 1651 __ cmp(end_elements, r6); | 1660 __ cmp(end_elements, r6); |
| 1652 __ b(ne, &call_builtin); | 1661 __ b(ne, &call_builtin); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1672 // Update elements' and array's sizes. | 1681 // Update elements' and array's sizes. |
| 1673 __ str(r0, FieldMemOperand(receiver, JSArray::kLengthOffset)); | 1682 __ str(r0, FieldMemOperand(receiver, JSArray::kLengthOffset)); |
| 1674 __ add(r4, r4, Operand(Smi::FromInt(kAllocationDelta))); | 1683 __ add(r4, r4, Operand(Smi::FromInt(kAllocationDelta))); |
| 1675 __ str(r4, FieldMemOperand(elements, FixedArray::kLengthOffset)); | 1684 __ str(r4, FieldMemOperand(elements, FixedArray::kLengthOffset)); |
| 1676 | 1685 |
| 1677 // Elements are in new space, so write barrier is not required. | 1686 // Elements are in new space, so write barrier is not required. |
| 1678 __ Drop(argc + 1); | 1687 __ Drop(argc + 1); |
| 1679 __ Ret(); | 1688 __ Ret(); |
| 1680 } | 1689 } |
| 1681 __ bind(&call_builtin); | 1690 __ bind(&call_builtin); |
| 1682 __ TailCallExternalReference(ExternalReference(Builtins::c_ArrayPush), | 1691 __ TailCallExternalReference(ExternalReference(Builtins::c_ArrayPush, |
| 1692 masm()->isolate()), |
| 1683 argc + 1, | 1693 argc + 1, |
| 1684 1); | 1694 1); |
| 1685 } | 1695 } |
| 1686 | 1696 |
| 1687 // Handle call cache miss. | 1697 // Handle call cache miss. |
| 1688 __ bind(&miss); | 1698 __ bind(&miss); |
| 1689 Object* obj; | 1699 Object* obj; |
| 1690 { MaybeObject* maybe_obj = GenerateMissBranch(); | 1700 { MaybeObject* maybe_obj = GenerateMissBranch(); |
| 1691 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 1701 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
| 1692 } | 1702 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1759 __ str(r6, MemOperand(elements, FixedArray::kHeaderSize - kHeapObjectTag)); | 1769 __ str(r6, MemOperand(elements, FixedArray::kHeaderSize - kHeapObjectTag)); |
| 1760 __ Drop(argc + 1); | 1770 __ Drop(argc + 1); |
| 1761 __ Ret(); | 1771 __ Ret(); |
| 1762 | 1772 |
| 1763 __ bind(&return_undefined); | 1773 __ bind(&return_undefined); |
| 1764 __ LoadRoot(r0, Heap::kUndefinedValueRootIndex); | 1774 __ LoadRoot(r0, Heap::kUndefinedValueRootIndex); |
| 1765 __ Drop(argc + 1); | 1775 __ Drop(argc + 1); |
| 1766 __ Ret(); | 1776 __ Ret(); |
| 1767 | 1777 |
| 1768 __ bind(&call_builtin); | 1778 __ bind(&call_builtin); |
| 1769 __ TailCallExternalReference(ExternalReference(Builtins::c_ArrayPop), | 1779 __ TailCallExternalReference(ExternalReference(Builtins::c_ArrayPop, |
| 1780 masm()->isolate()), |
| 1770 argc + 1, | 1781 argc + 1, |
| 1771 1); | 1782 1); |
| 1772 | 1783 |
| 1773 // Handle call cache miss. | 1784 // Handle call cache miss. |
| 1774 __ bind(&miss); | 1785 __ bind(&miss); |
| 1775 Object* obj; | 1786 Object* obj; |
| 1776 { MaybeObject* maybe_obj = GenerateMissBranch(); | 1787 { MaybeObject* maybe_obj = GenerateMissBranch(); |
| 1777 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 1788 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
| 1778 } | 1789 } |
| 1779 | 1790 |
| (...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2651 // Stub never generated for non-global objects that require access | 2662 // Stub never generated for non-global objects that require access |
| 2652 // checks. | 2663 // checks. |
| 2653 ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded()); | 2664 ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded()); |
| 2654 | 2665 |
| 2655 __ push(r1); // receiver | 2666 __ push(r1); // receiver |
| 2656 __ mov(ip, Operand(Handle<AccessorInfo>(callback))); // callback info | 2667 __ mov(ip, Operand(Handle<AccessorInfo>(callback))); // callback info |
| 2657 __ Push(ip, r2, r0); | 2668 __ Push(ip, r2, r0); |
| 2658 | 2669 |
| 2659 // Do tail-call to the runtime system. | 2670 // Do tail-call to the runtime system. |
| 2660 ExternalReference store_callback_property = | 2671 ExternalReference store_callback_property = |
| 2661 ExternalReference(IC_Utility(IC::kStoreCallbackProperty)); | 2672 ExternalReference(IC_Utility(IC::kStoreCallbackProperty), |
| 2673 masm()->isolate()); |
| 2662 __ TailCallExternalReference(store_callback_property, 4, 1); | 2674 __ TailCallExternalReference(store_callback_property, 4, 1); |
| 2663 | 2675 |
| 2664 // Handle store cache miss. | 2676 // Handle store cache miss. |
| 2665 __ bind(&miss); | 2677 __ bind(&miss); |
| 2666 Handle<Code> ic(Isolate::Current()->builtins()->builtin( | 2678 Handle<Code> ic(Isolate::Current()->builtins()->builtin( |
| 2667 Builtins::StoreIC_Miss)); | 2679 Builtins::StoreIC_Miss)); |
| 2668 __ Jump(ic, RelocInfo::CODE_TARGET); | 2680 __ Jump(ic, RelocInfo::CODE_TARGET); |
| 2669 | 2681 |
| 2670 // Return the generated code. | 2682 // Return the generated code. |
| 2671 return GetCode(CALLBACKS, name); | 2683 return GetCode(CALLBACKS, name); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 2700 // checks. | 2712 // checks. |
| 2701 ASSERT(receiver->IsJSGlobalProxy() || !receiver->IsAccessCheckNeeded()); | 2713 ASSERT(receiver->IsJSGlobalProxy() || !receiver->IsAccessCheckNeeded()); |
| 2702 | 2714 |
| 2703 __ Push(r1, r2, r0); // Receiver, name, value. | 2715 __ Push(r1, r2, r0); // Receiver, name, value. |
| 2704 | 2716 |
| 2705 __ mov(r0, Operand(Smi::FromInt(strict_mode_))); | 2717 __ mov(r0, Operand(Smi::FromInt(strict_mode_))); |
| 2706 __ push(r0); // strict mode | 2718 __ push(r0); // strict mode |
| 2707 | 2719 |
| 2708 // Do tail-call to the runtime system. | 2720 // Do tail-call to the runtime system. |
| 2709 ExternalReference store_ic_property = | 2721 ExternalReference store_ic_property = |
| 2710 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty)); | 2722 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty), |
| 2723 masm()->isolate()); |
| 2711 __ TailCallExternalReference(store_ic_property, 4, 1); | 2724 __ TailCallExternalReference(store_ic_property, 4, 1); |
| 2712 | 2725 |
| 2713 // Handle store cache miss. | 2726 // Handle store cache miss. |
| 2714 __ bind(&miss); | 2727 __ bind(&miss); |
| 2715 Handle<Code> ic(Isolate::Current()->builtins()->builtin( | 2728 Handle<Code> ic(Isolate::Current()->builtins()->builtin( |
| 2716 Builtins::StoreIC_Miss)); | 2729 Builtins::StoreIC_Miss)); |
| 2717 __ Jump(ic, RelocInfo::CODE_TARGET); | 2730 __ Jump(ic, RelocInfo::CODE_TARGET); |
| 2718 | 2731 |
| 2719 // Return the generated code. | 2732 // Return the generated code. |
| 2720 return GetCode(INTERCEPTOR, name); | 2733 return GetCode(INTERCEPTOR, name); |
| (...skipping 1305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4026 | 4039 |
| 4027 return GetCode(flags); | 4040 return GetCode(flags); |
| 4028 } | 4041 } |
| 4029 | 4042 |
| 4030 | 4043 |
| 4031 #undef __ | 4044 #undef __ |
| 4032 | 4045 |
| 4033 } } // namespace v8::internal | 4046 } } // namespace v8::internal |
| 4034 | 4047 |
| 4035 #endif // V8_TARGET_ARCH_ARM | 4048 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |