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

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

Issue 8393003: Handlify simple functions of [keyed] store stub compiler. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 2 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
« src/list-inl.h ('K') | « src/stub-cache.cc ('k') | no next file » | 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 750 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 Code* code = masm->isolate()->builtins()->builtin( 761 Code* code = masm->isolate()->builtins()->builtin(
762 Builtins::kKeyedLoadIC_MissForceGeneric); 762 Builtins::kKeyedLoadIC_MissForceGeneric);
763 Handle<Code> ic(code); 763 Handle<Code> ic(code);
764 __ Jump(ic, RelocInfo::CODE_TARGET); 764 __ Jump(ic, RelocInfo::CODE_TARGET);
765 } 765 }
766 766
767 767
768 // Both name_reg and receiver_reg are preserved on jumps to miss_label, 768 // Both name_reg and receiver_reg are preserved on jumps to miss_label,
769 // but may be destroyed if store is successful. 769 // but may be destroyed if store is successful.
770 void StubCompiler::GenerateStoreField(MacroAssembler* masm, 770 void StubCompiler::GenerateStoreField(MacroAssembler* masm,
771 JSObject* object, 771 Handle<JSObject> object,
772 int index, 772 int index,
773 Map* transition, 773 Handle<Map> transition,
774 Register receiver_reg, 774 Register receiver_reg,
775 Register name_reg, 775 Register name_reg,
776 Register scratch, 776 Register scratch,
777 Label* miss_label) { 777 Label* miss_label) {
778 // Check that the object isn't a smi. 778 // Check that the object isn't a smi.
779 __ JumpIfSmi(receiver_reg, miss_label); 779 __ JumpIfSmi(receiver_reg, miss_label);
780 780
781 // Check that the map of the object hasn't changed. 781 // Check that the map of the object hasn't changed.
782 __ Cmp(FieldOperand(receiver_reg, HeapObject::kMapOffset), 782 __ Cmp(FieldOperand(receiver_reg, HeapObject::kMapOffset),
783 Handle<Map>(object->map())); 783 Handle<Map>(object->map()));
784 __ j(not_equal, miss_label); 784 __ j(not_equal, miss_label);
785 785
786 // Perform global security token check if needed. 786 // Perform global security token check if needed.
787 if (object->IsJSGlobalProxy()) { 787 if (object->IsJSGlobalProxy()) {
788 __ CheckAccessGlobalProxy(receiver_reg, scratch, miss_label); 788 __ CheckAccessGlobalProxy(receiver_reg, scratch, miss_label);
789 } 789 }
790 790
791 // Stub never generated for non-global objects that require access 791 // Stub never generated for non-global objects that require access
792 // checks. 792 // checks.
793 ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded()); 793 ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());
794 794
795 // Perform map transition for the receiver if necessary. 795 // Perform map transition for the receiver if necessary.
796 if ((transition != NULL) && (object->map()->unused_property_fields() == 0)) { 796 if (!transition.is_null() && (object->map()->unused_property_fields() == 0)) {
797 // The properties must be extended before we can store the value. 797 // The properties must be extended before we can store the value.
798 // We jump to a runtime call that extends the properties array. 798 // We jump to a runtime call that extends the properties array.
799 __ pop(scratch); // Return address. 799 __ pop(scratch); // Return address.
800 __ push(receiver_reg); 800 __ push(receiver_reg);
801 __ Push(Handle<Map>(transition)); 801 __ Push(transition);
802 __ push(rax); 802 __ push(rax);
803 __ push(scratch); 803 __ push(scratch);
804 __ TailCallExternalReference( 804 __ TailCallExternalReference(
805 ExternalReference(IC_Utility(IC::kSharedStoreIC_ExtendStorage), 805 ExternalReference(IC_Utility(IC::kSharedStoreIC_ExtendStorage),
806 masm->isolate()), 806 masm->isolate()),
807 3, 807 3,
808 1); 808 1);
809 return; 809 return;
810 } 810 }
811 811
812 if (transition != NULL) { 812 if (!transition.is_null()) {
813 // Update the map of the object; no write barrier updating is 813 // Update the map of the object; no write barrier updating is
814 // needed because the map is never in new space. 814 // needed because the map is never in new space.
815 __ Move(FieldOperand(receiver_reg, HeapObject::kMapOffset), 815 __ Move(FieldOperand(receiver_reg, HeapObject::kMapOffset), transition);
816 Handle<Map>(transition));
817 } 816 }
818 817
819 // Adjust for the number of properties stored in the object. Even in the 818 // Adjust for the number of properties stored in the object. Even in the
820 // face of a transition we can use the old map here because the size of the 819 // face of a transition we can use the old map here because the size of the
821 // object and the number of in-object properties is not going to change. 820 // object and the number of in-object properties is not going to change.
822 index -= object->map()->inobject_properties(); 821 index -= object->map()->inobject_properties();
823 822
824 if (index < 0) { 823 if (index < 0) {
825 // Set the property straight into the object. 824 // Set the property straight into the object.
826 int offset = object->map()->instance_size() + (index * kPointerSize); 825 int offset = object->map()->instance_size() + (index * kPointerSize);
(...skipping 1735 matching lines...) Expand 10 before | Expand all | Expand 10 after
2562 __ bind(&miss); 2561 __ bind(&miss);
2563 __ IncrementCounter(counters->call_global_inline_miss(), 1); 2562 __ IncrementCounter(counters->call_global_inline_miss(), 1);
2564 MaybeObject* maybe_result = TryGenerateMissBranch(); 2563 MaybeObject* maybe_result = TryGenerateMissBranch();
2565 if (maybe_result->IsFailure()) return maybe_result; 2564 if (maybe_result->IsFailure()) return maybe_result;
2566 2565
2567 // Return the generated code. 2566 // Return the generated code.
2568 return TryGetCode(NORMAL, name); 2567 return TryGetCode(NORMAL, name);
2569 } 2568 }
2570 2569
2571 2570
2572 MaybeObject* StoreStubCompiler::CompileStoreField(JSObject* object, 2571 Handle<Code> StoreStubCompiler::CompileStoreField(Handle<JSObject> object,
2573 int index, 2572 int index,
2574 Map* transition, 2573 Handle<Map> transition,
2575 String* name) { 2574 Handle<String> name) {
2576 // ----------- S t a t e ------------- 2575 // ----------- S t a t e -------------
2577 // -- rax : value 2576 // -- rax : value
2578 // -- rcx : name 2577 // -- rcx : name
2579 // -- rdx : receiver 2578 // -- rdx : receiver
2580 // -- rsp[0] : return address 2579 // -- rsp[0] : return address
2581 // ----------------------------------- 2580 // -----------------------------------
2582 Label miss; 2581 Label miss;
2583 2582
2584 // Generate store field code. Preserves receiver and name on jump to miss. 2583 // Generate store field code. Preserves receiver and name on jump to miss.
2585 GenerateStoreField(masm(), 2584 GenerateStoreField(masm(), object, index, transition, rdx, rcx, rbx, &miss);
2586 object,
2587 index,
2588 transition,
2589 rdx, rcx, rbx,
2590 &miss);
2591 2585
2592 // Handle store cache miss. 2586 // Handle store cache miss.
2593 __ bind(&miss); 2587 __ bind(&miss);
2594 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); 2588 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss();
2595 __ Jump(ic, RelocInfo::CODE_TARGET); 2589 __ Jump(ic, RelocInfo::CODE_TARGET);
2596 2590
2597 // Return the generated code. 2591 // Return the generated code.
2598 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name); 2592 return GetCode(transition.is_null() ? FIELD : MAP_TRANSITION, name);
2599 } 2593 }
2600 2594
2601 2595
2602 MaybeObject* StoreStubCompiler::CompileStoreCallback(JSObject* object, 2596 MaybeObject* StoreStubCompiler::CompileStoreCallback(JSObject* object,
2603 AccessorInfo* callback, 2597 AccessorInfo* callback,
2604 String* name) { 2598 String* name) {
2605 // ----------- S t a t e ------------- 2599 // ----------- S t a t e -------------
2606 // -- rax : value 2600 // -- rax : value
2607 // -- rcx : name 2601 // -- rcx : name
2608 // -- rdx : receiver 2602 // -- rdx : receiver
(...skipping 29 matching lines...) Expand all
2638 ExternalReference store_callback_property = 2632 ExternalReference store_callback_property =
2639 ExternalReference(IC_Utility(IC::kStoreCallbackProperty), isolate()); 2633 ExternalReference(IC_Utility(IC::kStoreCallbackProperty), isolate());
2640 __ TailCallExternalReference(store_callback_property, 4, 1); 2634 __ TailCallExternalReference(store_callback_property, 4, 1);
2641 2635
2642 // Handle store cache miss. 2636 // Handle store cache miss.
2643 __ bind(&miss); 2637 __ bind(&miss);
2644 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); 2638 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss();
2645 __ Jump(ic, RelocInfo::CODE_TARGET); 2639 __ Jump(ic, RelocInfo::CODE_TARGET);
2646 2640
2647 // Return the generated code. 2641 // Return the generated code.
2648 return GetCode(CALLBACKS, name); 2642 return TryGetCode(CALLBACKS, name);
2649 } 2643 }
2650 2644
2651 2645
2652 MaybeObject* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver, 2646 MaybeObject* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver,
2653 String* name) { 2647 String* name) {
2654 // ----------- S t a t e ------------- 2648 // ----------- S t a t e -------------
2655 // -- rax : value 2649 // -- rax : value
2656 // -- rcx : name 2650 // -- rcx : name
2657 // -- rdx : receiver 2651 // -- rdx : receiver
2658 // -- rsp[0] : return address 2652 // -- rsp[0] : return address
(...skipping 28 matching lines...) Expand all
2687 ExternalReference store_ic_property = 2681 ExternalReference store_ic_property =
2688 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty), isolate()); 2682 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty), isolate());
2689 __ TailCallExternalReference(store_ic_property, 4, 1); 2683 __ TailCallExternalReference(store_ic_property, 4, 1);
2690 2684
2691 // Handle store cache miss. 2685 // Handle store cache miss.
2692 __ bind(&miss); 2686 __ bind(&miss);
2693 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); 2687 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss();
2694 __ Jump(ic, RelocInfo::CODE_TARGET); 2688 __ Jump(ic, RelocInfo::CODE_TARGET);
2695 2689
2696 // Return the generated code. 2690 // Return the generated code.
2697 return GetCode(INTERCEPTOR, name); 2691 return TryGetCode(INTERCEPTOR, name);
2698 } 2692 }
2699 2693
2700 2694
2701 MaybeObject* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object, 2695 Handle<Code> StoreStubCompiler::CompileStoreGlobal(
2702 JSGlobalPropertyCell* cell, 2696 Handle<GlobalObject> object,
2703 String* name) { 2697 Handle<JSGlobalPropertyCell> cell,
2698 Handle<String> name) {
2704 // ----------- S t a t e ------------- 2699 // ----------- S t a t e -------------
2705 // -- rax : value 2700 // -- rax : value
2706 // -- rcx : name 2701 // -- rcx : name
2707 // -- rdx : receiver 2702 // -- rdx : receiver
2708 // -- rsp[0] : return address 2703 // -- rsp[0] : return address
2709 // ----------------------------------- 2704 // -----------------------------------
2710 Label miss; 2705 Label miss;
2711 2706
2712 // Check that the map of the global has not changed. 2707 // Check that the map of the global has not changed.
2713 __ Cmp(FieldOperand(rdx, HeapObject::kMapOffset), 2708 __ Cmp(FieldOperand(rdx, HeapObject::kMapOffset),
2714 Handle<Map>(object->map())); 2709 Handle<Map>(object->map()));
2715 __ j(not_equal, &miss); 2710 __ j(not_equal, &miss);
2716 2711
2717 // Compute the cell operand to use. 2712 // Compute the cell operand to use.
2718 __ Move(rbx, Handle<JSGlobalPropertyCell>(cell)); 2713 __ Move(rbx, cell);
2719 Operand cell_operand = FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset); 2714 Operand cell_operand = FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset);
2720 2715
2721 // Check that the value in the cell is not the hole. If it is, this 2716 // Check that the value in the cell is not the hole. If it is, this
2722 // cell could have been deleted and reintroducing the global needs 2717 // cell could have been deleted and reintroducing the global needs
2723 // to update the property details in the property dictionary of the 2718 // to update the property details in the property dictionary of the
2724 // global object. We bail out to the runtime system to do that. 2719 // global object. We bail out to the runtime system to do that.
2725 __ CompareRoot(cell_operand, Heap::kTheHoleValueRootIndex); 2720 __ CompareRoot(cell_operand, Heap::kTheHoleValueRootIndex);
2726 __ j(equal, &miss); 2721 __ j(equal, &miss);
2727 2722
2728 // Store the value in the cell. 2723 // Store the value in the cell.
(...skipping 23 matching lines...) Expand all
2752 __ bind(&miss); 2747 __ bind(&miss);
2753 __ IncrementCounter(counters->named_store_global_inline_miss(), 1); 2748 __ IncrementCounter(counters->named_store_global_inline_miss(), 1);
2754 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); 2749 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss();
2755 __ Jump(ic, RelocInfo::CODE_TARGET); 2750 __ Jump(ic, RelocInfo::CODE_TARGET);
2756 2751
2757 // Return the generated code. 2752 // Return the generated code.
2758 return GetCode(NORMAL, name); 2753 return GetCode(NORMAL, name);
2759 } 2754 }
2760 2755
2761 2756
2762 MaybeObject* KeyedStoreStubCompiler::CompileStoreField(JSObject* object, 2757 Handle<Code> KeyedStoreStubCompiler::CompileStoreField(Handle<JSObject> object,
2763 int index, 2758 int index,
2764 Map* transition, 2759 Handle<Map> transition,
2765 String* name) { 2760 Handle<String> name) {
2766 // ----------- S t a t e ------------- 2761 // ----------- S t a t e -------------
2767 // -- rax : value 2762 // -- rax : value
2768 // -- rcx : key 2763 // -- rcx : key
2769 // -- rdx : receiver 2764 // -- rdx : receiver
2770 // -- rsp[0] : return address 2765 // -- rsp[0] : return address
2771 // ----------------------------------- 2766 // -----------------------------------
2772 Label miss; 2767 Label miss;
2773 2768
2774 Counters* counters = isolate()->counters(); 2769 Counters* counters = isolate()->counters();
2775 __ IncrementCounter(counters->keyed_store_field(), 1); 2770 __ IncrementCounter(counters->keyed_store_field(), 1);
2776 2771
2777 // Check that the name has not changed. 2772 // Check that the name has not changed.
2778 __ Cmp(rcx, Handle<String>(name)); 2773 __ Cmp(rcx, name);
2779 __ j(not_equal, &miss); 2774 __ j(not_equal, &miss);
2780 2775
2781 // Generate store field code. Preserves receiver and name on jump to miss. 2776 // Generate store field code. Preserves receiver and name on jump to miss.
2782 GenerateStoreField(masm(), 2777 GenerateStoreField(masm(), object, index, transition, rdx, rcx, rbx, &miss);
2783 object,
2784 index,
2785 transition,
2786 rdx, rcx, rbx,
2787 &miss);
2788 2778
2789 // Handle store cache miss. 2779 // Handle store cache miss.
2790 __ bind(&miss); 2780 __ bind(&miss);
2791 __ DecrementCounter(counters->keyed_store_field(), 1); 2781 __ DecrementCounter(counters->keyed_store_field(), 1);
2792 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss(); 2782 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss();
2793 __ Jump(ic, RelocInfo::CODE_TARGET); 2783 __ Jump(ic, RelocInfo::CODE_TARGET);
2794 2784
2795 // Return the generated code. 2785 // Return the generated code.
2796 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name); 2786 return GetCode(transition.is_null() ? FIELD : MAP_TRANSITION, name);
2797 } 2787 }
2798 2788
2799 2789
2800 MaybeObject* KeyedStoreStubCompiler::CompileStoreElement(Map* receiver_map) { 2790 Handle<Code> KeyedStoreStubCompiler::CompileStoreElement(
2791 Handle<Map> receiver_map) {
2801 // ----------- S t a t e ------------- 2792 // ----------- S t a t e -------------
2802 // -- rax : value 2793 // -- rax : value
2803 // -- rcx : key 2794 // -- rcx : key
2804 // -- rdx : receiver 2795 // -- rdx : receiver
2805 // -- rsp[0] : return address 2796 // -- rsp[0] : return address
2806 // ----------------------------------- 2797 // -----------------------------------
2807 Code* stub; 2798
2808 ElementsKind elements_kind = receiver_map->elements_kind(); 2799 ElementsKind elements_kind = receiver_map->elements_kind();
2809 bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE; 2800 bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE;
2810 MaybeObject* maybe_stub = 2801 Handle<Code> stub =
2811 KeyedStoreElementStub(is_js_array, elements_kind).TryGetCode(); 2802 KeyedStoreElementStub(is_js_array, elements_kind).GetCode();
2812 if (!maybe_stub->To(&stub)) return maybe_stub; 2803
2813 __ DispatchMap(rdx, 2804 __ DispatchMap(rdx, receiver_map, stub, DO_SMI_CHECK);
2814 Handle<Map>(receiver_map),
2815 Handle<Code>(stub),
2816 DO_SMI_CHECK);
2817 2805
2818 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss(); 2806 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss();
2819 __ jmp(ic, RelocInfo::CODE_TARGET); 2807 __ jmp(ic, RelocInfo::CODE_TARGET);
2820 2808
2821 // Return the generated code. 2809 // Return the generated code.
2822 return GetCode(NORMAL, NULL); 2810 return GetCode(NORMAL, factory()->empty_string());
2823 } 2811 }
2824 2812
2825 2813
2826 MaybeObject* KeyedStoreStubCompiler::CompileStorePolymorphic( 2814 Handle<Code> KeyedStoreStubCompiler::CompileStorePolymorphic(
2827 MapList* receiver_maps, 2815 MapHandleList* receiver_maps,
2828 CodeList* handler_stubs, 2816 CodeHandleList* handler_stubs,
2829 MapList* transitioned_maps) { 2817 MapHandleList* transitioned_maps) {
2830 // ----------- S t a t e ------------- 2818 // ----------- S t a t e -------------
2831 // -- rax : value 2819 // -- rax : value
2832 // -- rcx : key 2820 // -- rcx : key
2833 // -- rdx : receiver 2821 // -- rdx : receiver
2834 // -- rsp[0] : return address 2822 // -- rsp[0] : return address
2835 // ----------------------------------- 2823 // -----------------------------------
2836 Label miss; 2824 Label miss;
2837 __ JumpIfSmi(rdx, &miss, Label::kNear); 2825 __ JumpIfSmi(rdx, &miss, Label::kNear);
2838 2826
2839 __ movq(rdi, FieldOperand(rdx, HeapObject::kMapOffset)); 2827 __ movq(rdi, FieldOperand(rdx, HeapObject::kMapOffset));
2840 int receiver_count = receiver_maps->length(); 2828 int receiver_count = receiver_maps->length();
2841 for (int i = 0; i < receiver_count; ++i) { 2829 for (int i = 0; i < receiver_count; ++i) {
2842 // Check map and tail call if there's a match 2830 // Check map and tail call if there's a match
2843 Handle<Map> map(receiver_maps->at(i)); 2831 __ Cmp(rdi, receiver_maps->at(i));
2844 __ Cmp(rdi, map); 2832 if (transitioned_maps->at(i).is_null()) {
2845 if (transitioned_maps->at(i) == NULL) { 2833 __ j(equal, handler_stubs->at(i), RelocInfo::CODE_TARGET);
2846 __ j(equal, Handle<Code>(handler_stubs->at(i)), RelocInfo::CODE_TARGET);
2847 } else { 2834 } else {
2848 Label next_map; 2835 Label next_map;
2849 __ j(not_equal, &next_map, Label::kNear); 2836 __ j(not_equal, &next_map, Label::kNear);
2850 __ movq(rbx, 2837 __ movq(rbx, transitioned_maps->at(i), RelocInfo::EMBEDDED_OBJECT);
2851 Handle<Map>(transitioned_maps->at(i)), 2838 __ jmp(handler_stubs->at(i), RelocInfo::CODE_TARGET);
2852 RelocInfo::EMBEDDED_OBJECT);
2853 __ jmp(Handle<Code>(handler_stubs->at(i)), RelocInfo::CODE_TARGET);
2854 __ bind(&next_map); 2839 __ bind(&next_map);
2855 } 2840 }
2856 } 2841 }
2857 2842
2858 __ bind(&miss); 2843 __ bind(&miss);
2859 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss(); 2844 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss();
2860 __ jmp(ic, RelocInfo::CODE_TARGET); 2845 __ jmp(ic, RelocInfo::CODE_TARGET);
2861 2846
2862 // Return the generated code. 2847 // Return the generated code.
2863 return GetCode(NORMAL, NULL, MEGAMORPHIC); 2848 return GetCode(NORMAL, factory()->empty_string(), MEGAMORPHIC);
2864 } 2849 }
2865 2850
2866 2851
2867 Handle<Code> LoadStubCompiler::CompileLoadNonexistent(Handle<String> name, 2852 Handle<Code> LoadStubCompiler::CompileLoadNonexistent(Handle<String> name,
2868 Handle<JSObject> object, 2853 Handle<JSObject> object,
2869 Handle<JSObject> last) { 2854 Handle<JSObject> last) {
2870 // ----------- S t a t e ------------- 2855 // ----------- S t a t e -------------
2871 // -- rax : receiver 2856 // -- rax : receiver
2872 // -- rcx : name 2857 // -- rcx : name
2873 // -- rsp[0] : return address 2858 // -- rsp[0] : return address
(...skipping 1145 matching lines...) Expand 10 before | Expand all | Expand 10 after
4019 Handle<Code> ic_miss = masm->isolate()->builtins()->KeyedStoreIC_Miss(); 4004 Handle<Code> ic_miss = masm->isolate()->builtins()->KeyedStoreIC_Miss();
4020 __ jmp(ic_miss, RelocInfo::CODE_TARGET); 4005 __ jmp(ic_miss, RelocInfo::CODE_TARGET);
4021 } 4006 }
4022 4007
4023 4008
4024 #undef __ 4009 #undef __
4025 4010
4026 } } // namespace v8::internal 4011 } } // namespace v8::internal
4027 4012
4028 #endif // V8_TARGET_ARCH_X64 4013 #endif // V8_TARGET_ARCH_X64
OLDNEW
« src/list-inl.h ('K') | « src/stub-cache.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698