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

Side by Side Diff: src/ia32/stub-cache-ia32.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, 1 month 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
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 754 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 Code* code = masm->isolate()->builtins()->builtin( 765 Code* code = masm->isolate()->builtins()->builtin(
766 Builtins::kKeyedLoadIC_MissForceGeneric); 766 Builtins::kKeyedLoadIC_MissForceGeneric);
767 Handle<Code> ic(code); 767 Handle<Code> ic(code);
768 __ jmp(ic, RelocInfo::CODE_TARGET); 768 __ jmp(ic, RelocInfo::CODE_TARGET);
769 } 769 }
770 770
771 771
772 // Both name_reg and receiver_reg are preserved on jumps to miss_label, 772 // Both name_reg and receiver_reg are preserved on jumps to miss_label,
773 // but may be destroyed if store is successful. 773 // but may be destroyed if store is successful.
774 void StubCompiler::GenerateStoreField(MacroAssembler* masm, 774 void StubCompiler::GenerateStoreField(MacroAssembler* masm,
775 JSObject* object, 775 Handle<JSObject> object,
776 int index, 776 int index,
777 Map* transition, 777 Handle<Map> transition,
778 Register receiver_reg, 778 Register receiver_reg,
779 Register name_reg, 779 Register name_reg,
780 Register scratch, 780 Register scratch,
781 Label* miss_label) { 781 Label* miss_label) {
782 // Check that the object isn't a smi. 782 // Check that the object isn't a smi.
783 __ JumpIfSmi(receiver_reg, miss_label); 783 __ JumpIfSmi(receiver_reg, miss_label);
784 784
785 // Check that the map of the object hasn't changed. 785 // Check that the map of the object hasn't changed.
786 __ cmp(FieldOperand(receiver_reg, HeapObject::kMapOffset), 786 __ cmp(FieldOperand(receiver_reg, HeapObject::kMapOffset),
787 Immediate(Handle<Map>(object->map()))); 787 Immediate(Handle<Map>(object->map())));
788 __ j(not_equal, miss_label); 788 __ j(not_equal, miss_label);
789 789
790 // Perform global security token check if needed. 790 // Perform global security token check if needed.
791 if (object->IsJSGlobalProxy()) { 791 if (object->IsJSGlobalProxy()) {
792 __ CheckAccessGlobalProxy(receiver_reg, scratch, miss_label); 792 __ CheckAccessGlobalProxy(receiver_reg, scratch, miss_label);
793 } 793 }
794 794
795 // Stub never generated for non-global objects that require access 795 // Stub never generated for non-global objects that require access
796 // checks. 796 // checks.
797 ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded()); 797 ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());
798 798
799 // Perform map transition for the receiver if necessary. 799 // Perform map transition for the receiver if necessary.
800 if ((transition != NULL) && (object->map()->unused_property_fields() == 0)) { 800 if (!transition.is_null() && (object->map()->unused_property_fields() == 0)) {
801 // The properties must be extended before we can store the value. 801 // The properties must be extended before we can store the value.
802 // We jump to a runtime call that extends the properties array. 802 // We jump to a runtime call that extends the properties array.
803 __ pop(scratch); // Return address. 803 __ pop(scratch); // Return address.
804 __ push(receiver_reg); 804 __ push(receiver_reg);
805 __ push(Immediate(Handle<Map>(transition))); 805 __ push(Immediate(transition));
806 __ push(eax); 806 __ push(eax);
807 __ push(scratch); 807 __ push(scratch);
808 __ TailCallExternalReference( 808 __ TailCallExternalReference(
809 ExternalReference(IC_Utility(IC::kSharedStoreIC_ExtendStorage), 809 ExternalReference(IC_Utility(IC::kSharedStoreIC_ExtendStorage),
810 masm->isolate()), 810 masm->isolate()),
811 3, 811 3,
812 1); 812 1);
813 return; 813 return;
814 } 814 }
815 815
816 if (transition != NULL) { 816 if (!transition.is_null()) {
817 // Update the map of the object; no write barrier updating is 817 // Update the map of the object; no write barrier updating is
818 // needed because the map is never in new space. 818 // needed because the map is never in new space.
819 __ mov(FieldOperand(receiver_reg, HeapObject::kMapOffset), 819 __ mov(FieldOperand(receiver_reg, HeapObject::kMapOffset),
820 Immediate(Handle<Map>(transition))); 820 Immediate(transition));
821 } 821 }
822 822
823 // Adjust for the number of properties stored in the object. Even in the 823 // Adjust for the number of properties stored in the object. Even in the
824 // face of a transition we can use the old map here because the size of the 824 // face of a transition we can use the old map here because the size of the
825 // object and the number of in-object properties is not going to change. 825 // object and the number of in-object properties is not going to change.
826 index -= object->map()->inobject_properties(); 826 index -= object->map()->inobject_properties();
827 827
828 if (index < 0) { 828 if (index < 0) {
829 // Set the property straight into the object. 829 // Set the property straight into the object.
830 int offset = object->map()->instance_size() + (index * kPointerSize); 830 int offset = object->map()->instance_size() + (index * kPointerSize);
(...skipping 1861 matching lines...) Expand 10 before | Expand all | Expand 10 after
2692 __ bind(&miss); 2692 __ bind(&miss);
2693 __ IncrementCounter(counters->call_global_inline_miss(), 1); 2693 __ IncrementCounter(counters->call_global_inline_miss(), 1);
2694 MaybeObject* maybe_result = TryGenerateMissBranch(); 2694 MaybeObject* maybe_result = TryGenerateMissBranch();
2695 if (maybe_result->IsFailure()) return maybe_result; 2695 if (maybe_result->IsFailure()) return maybe_result;
2696 2696
2697 // Return the generated code. 2697 // Return the generated code.
2698 return TryGetCode(NORMAL, name); 2698 return TryGetCode(NORMAL, name);
2699 } 2699 }
2700 2700
2701 2701
2702 MaybeObject* StoreStubCompiler::CompileStoreField(JSObject* object, 2702 Handle<Code> StoreStubCompiler::CompileStoreField(Handle<JSObject> object,
2703 int index, 2703 int index,
2704 Map* transition, 2704 Handle<Map> transition,
2705 String* name) { 2705 Handle<String> name) {
2706 // ----------- S t a t e ------------- 2706 // ----------- S t a t e -------------
2707 // -- eax : value 2707 // -- eax : value
2708 // -- ecx : name 2708 // -- ecx : name
2709 // -- edx : receiver 2709 // -- edx : receiver
2710 // -- esp[0] : return address 2710 // -- esp[0] : return address
2711 // ----------------------------------- 2711 // -----------------------------------
2712 Label miss; 2712 Label miss;
2713 2713
2714 // Generate store field code. Trashes the name register. 2714 // Generate store field code. Trashes the name register.
2715 GenerateStoreField(masm(), 2715 GenerateStoreField(masm(), object, index, transition, edx, ecx, ebx, &miss);
2716 object,
2717 index,
2718 transition,
2719 edx, ecx, ebx,
2720 &miss);
2721 2716
2722 // Handle store cache miss. 2717 // Handle store cache miss.
2723 __ bind(&miss); 2718 __ bind(&miss);
2724 __ mov(ecx, Immediate(Handle<String>(name))); // restore name 2719 __ mov(ecx, Immediate(name)); // restore name
2725 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); 2720 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss();
2726 __ jmp(ic, RelocInfo::CODE_TARGET); 2721 __ jmp(ic, RelocInfo::CODE_TARGET);
2727 2722
2728 // Return the generated code. 2723 // Return the generated code.
2729 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name); 2724 return GetCode(transition.is_null() ? FIELD : MAP_TRANSITION, name);
2730 } 2725 }
2731 2726
2732 2727
2733 MaybeObject* StoreStubCompiler::CompileStoreCallback(JSObject* object, 2728 MaybeObject* StoreStubCompiler::CompileStoreCallback(JSObject* object,
2734 AccessorInfo* callback, 2729 AccessorInfo* callback,
2735 String* name) { 2730 String* name) {
2736 // ----------- S t a t e ------------- 2731 // ----------- S t a t e -------------
2737 // -- eax : value 2732 // -- eax : value
2738 // -- ecx : name 2733 // -- ecx : name
2739 // -- edx : receiver 2734 // -- edx : receiver
(...skipping 29 matching lines...) Expand all
2769 ExternalReference store_callback_property = 2764 ExternalReference store_callback_property =
2770 ExternalReference(IC_Utility(IC::kStoreCallbackProperty), isolate()); 2765 ExternalReference(IC_Utility(IC::kStoreCallbackProperty), isolate());
2771 __ TailCallExternalReference(store_callback_property, 4, 1); 2766 __ TailCallExternalReference(store_callback_property, 4, 1);
2772 2767
2773 // Handle store cache miss. 2768 // Handle store cache miss.
2774 __ bind(&miss); 2769 __ bind(&miss);
2775 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); 2770 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss();
2776 __ jmp(ic, RelocInfo::CODE_TARGET); 2771 __ jmp(ic, RelocInfo::CODE_TARGET);
2777 2772
2778 // Return the generated code. 2773 // Return the generated code.
2779 return GetCode(CALLBACKS, name); 2774 return TryGetCode(CALLBACKS, name);
2780 } 2775 }
2781 2776
2782 2777
2783 MaybeObject* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver, 2778 MaybeObject* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver,
2784 String* name) { 2779 String* name) {
2785 // ----------- S t a t e ------------- 2780 // ----------- S t a t e -------------
2786 // -- eax : value 2781 // -- eax : value
2787 // -- ecx : name 2782 // -- ecx : name
2788 // -- edx : receiver 2783 // -- edx : receiver
2789 // -- esp[0] : return address 2784 // -- esp[0] : return address
(...skipping 28 matching lines...) Expand all
2818 ExternalReference store_ic_property = 2813 ExternalReference store_ic_property =
2819 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty), isolate()); 2814 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty), isolate());
2820 __ TailCallExternalReference(store_ic_property, 4, 1); 2815 __ TailCallExternalReference(store_ic_property, 4, 1);
2821 2816
2822 // Handle store cache miss. 2817 // Handle store cache miss.
2823 __ bind(&miss); 2818 __ bind(&miss);
2824 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); 2819 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss();
2825 __ jmp(ic, RelocInfo::CODE_TARGET); 2820 __ jmp(ic, RelocInfo::CODE_TARGET);
2826 2821
2827 // Return the generated code. 2822 // Return the generated code.
2828 return GetCode(INTERCEPTOR, name); 2823 return TryGetCode(INTERCEPTOR, name);
2829 } 2824 }
2830 2825
2831 2826
2832 MaybeObject* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object, 2827 Handle<Code> StoreStubCompiler::CompileStoreGlobal(
2833 JSGlobalPropertyCell* cell, 2828 Handle<GlobalObject> object,
2834 String* name) { 2829 Handle<JSGlobalPropertyCell> cell,
2830 Handle<String> name) {
2835 // ----------- S t a t e ------------- 2831 // ----------- S t a t e -------------
2836 // -- eax : value 2832 // -- eax : value
2837 // -- ecx : name 2833 // -- ecx : name
2838 // -- edx : receiver 2834 // -- edx : receiver
2839 // -- esp[0] : return address 2835 // -- esp[0] : return address
2840 // ----------------------------------- 2836 // -----------------------------------
2841 Label miss; 2837 Label miss;
2842 2838
2843 // Check that the map of the global has not changed. 2839 // Check that the map of the global has not changed.
2844 __ cmp(FieldOperand(edx, HeapObject::kMapOffset), 2840 __ cmp(FieldOperand(edx, HeapObject::kMapOffset),
2845 Immediate(Handle<Map>(object->map()))); 2841 Immediate(Handle<Map>(object->map())));
2846 __ j(not_equal, &miss); 2842 __ j(not_equal, &miss);
2847 2843
2848 // Compute the cell operand to use. 2844 // Compute the cell operand to use.
2849 __ mov(ebx, Immediate(Handle<JSGlobalPropertyCell>(cell))); 2845 __ mov(ebx, Immediate(cell));
2850 Operand cell_operand = FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset); 2846 Operand cell_operand = FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset);
2851 2847
2852 // Check that the value in the cell is not the hole. If it is, this 2848 // Check that the value in the cell is not the hole. If it is, this
2853 // cell could have been deleted and reintroducing the global needs 2849 // cell could have been deleted and reintroducing the global needs
2854 // to update the property details in the property dictionary of the 2850 // to update the property details in the property dictionary of the
2855 // global object. We bail out to the runtime system to do that. 2851 // global object. We bail out to the runtime system to do that.
2856 __ cmp(cell_operand, factory()->the_hole_value()); 2852 __ cmp(cell_operand, factory()->the_hole_value());
2857 __ j(equal, &miss); 2853 __ j(equal, &miss);
2858 2854
2859 // Store the value in the cell. 2855 // Store the value in the cell.
(...skipping 23 matching lines...) Expand all
2883 __ bind(&miss); 2879 __ bind(&miss);
2884 __ IncrementCounter(counters->named_store_global_inline_miss(), 1); 2880 __ IncrementCounter(counters->named_store_global_inline_miss(), 1);
2885 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss(); 2881 Handle<Code> ic = isolate()->builtins()->StoreIC_Miss();
2886 __ jmp(ic, RelocInfo::CODE_TARGET); 2882 __ jmp(ic, RelocInfo::CODE_TARGET);
2887 2883
2888 // Return the generated code. 2884 // Return the generated code.
2889 return GetCode(NORMAL, name); 2885 return GetCode(NORMAL, name);
2890 } 2886 }
2891 2887
2892 2888
2893 MaybeObject* KeyedStoreStubCompiler::CompileStoreField(JSObject* object, 2889 Handle<Code> KeyedStoreStubCompiler::CompileStoreField(Handle<JSObject> object,
2894 int index, 2890 int index,
2895 Map* transition, 2891 Handle<Map> transition,
2896 String* name) { 2892 Handle<String> name) {
2897 // ----------- S t a t e ------------- 2893 // ----------- S t a t e -------------
2898 // -- eax : value 2894 // -- eax : value
2899 // -- ecx : key 2895 // -- ecx : key
2900 // -- edx : receiver 2896 // -- edx : receiver
2901 // -- esp[0] : return address 2897 // -- esp[0] : return address
2902 // ----------------------------------- 2898 // -----------------------------------
2903 Label miss; 2899 Label miss;
2904 2900
2905 Counters* counters = isolate()->counters(); 2901 Counters* counters = isolate()->counters();
2906 __ IncrementCounter(counters->keyed_store_field(), 1); 2902 __ IncrementCounter(counters->keyed_store_field(), 1);
2907 2903
2908 // Check that the name has not changed. 2904 // Check that the name has not changed.
2909 __ cmp(ecx, Immediate(Handle<String>(name))); 2905 __ cmp(ecx, Immediate(name));
2910 __ j(not_equal, &miss); 2906 __ j(not_equal, &miss);
2911 2907
2912 // Generate store field code. Trashes the name register. 2908 // Generate store field code. Trashes the name register.
2913 GenerateStoreField(masm(), 2909 GenerateStoreField(masm(), object, index, transition, edx, ecx, ebx, &miss);
2914 object,
2915 index,
2916 transition,
2917 edx, ecx, ebx,
2918 &miss);
2919 2910
2920 // Handle store cache miss. 2911 // Handle store cache miss.
2921 __ bind(&miss); 2912 __ bind(&miss);
2922 __ DecrementCounter(counters->keyed_store_field(), 1); 2913 __ DecrementCounter(counters->keyed_store_field(), 1);
2923 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss(); 2914 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss();
2924 __ jmp(ic, RelocInfo::CODE_TARGET); 2915 __ jmp(ic, RelocInfo::CODE_TARGET);
2925 2916
2926 // Return the generated code. 2917 // Return the generated code.
2927 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name); 2918 return GetCode(transition.is_null() ? FIELD : MAP_TRANSITION, name);
2928 } 2919 }
2929 2920
2930 2921
2931 MaybeObject* KeyedStoreStubCompiler::CompileStoreElement(Map* receiver_map) { 2922 Handle<Code> KeyedStoreStubCompiler::CompileStoreElement(
2923 Handle<Map> receiver_map) {
2932 // ----------- S t a t e ------------- 2924 // ----------- S t a t e -------------
2933 // -- eax : value 2925 // -- eax : value
2934 // -- ecx : key 2926 // -- ecx : key
2935 // -- edx : receiver 2927 // -- edx : receiver
2936 // -- esp[0] : return address 2928 // -- esp[0] : return address
2937 // ----------------------------------- 2929 // -----------------------------------
2938 Code* stub;
2939 ElementsKind elements_kind = receiver_map->elements_kind(); 2930 ElementsKind elements_kind = receiver_map->elements_kind();
2940 bool is_jsarray = receiver_map->instance_type() == JS_ARRAY_TYPE; 2931 bool is_jsarray = receiver_map->instance_type() == JS_ARRAY_TYPE;
2941 MaybeObject* maybe_stub = 2932 Handle<Code> stub =
2942 KeyedStoreElementStub(is_jsarray, elements_kind).TryGetCode(); 2933 KeyedStoreElementStub(is_jsarray, elements_kind).GetCode();
2943 if (!maybe_stub->To(&stub)) return maybe_stub; 2934
2944 __ DispatchMap(edx, 2935 __ DispatchMap(edx, receiver_map, stub, DO_SMI_CHECK);
2945 Handle<Map>(receiver_map),
2946 Handle<Code>(stub),
2947 DO_SMI_CHECK);
2948 2936
2949 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss(); 2937 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss();
2950 __ jmp(ic, RelocInfo::CODE_TARGET); 2938 __ jmp(ic, RelocInfo::CODE_TARGET);
2951 2939
2952 // Return the generated code. 2940 // Return the generated code.
2953 return GetCode(NORMAL, NULL); 2941 return GetCode(NORMAL, factory()->empty_string());
2954 } 2942 }
2955 2943
2956 2944
2957 MaybeObject* KeyedStoreStubCompiler::CompileStorePolymorphic( 2945 Handle<Code> KeyedStoreStubCompiler::CompileStorePolymorphic(
2958 MapList* receiver_maps, 2946 MapHandleList* receiver_maps,
2959 CodeList* handler_stubs, 2947 CodeHandleList* handler_stubs,
2960 MapList* transitioned_maps) { 2948 MapHandleList* transitioned_maps) {
2961 // ----------- S t a t e ------------- 2949 // ----------- S t a t e -------------
2962 // -- eax : value 2950 // -- eax : value
2963 // -- ecx : key 2951 // -- ecx : key
2964 // -- edx : receiver 2952 // -- edx : receiver
2965 // -- esp[0] : return address 2953 // -- esp[0] : return address
2966 // ----------------------------------- 2954 // -----------------------------------
2967 Label miss; 2955 Label miss;
2968 __ JumpIfSmi(edx, &miss, Label::kNear); 2956 __ JumpIfSmi(edx, &miss, Label::kNear);
2969 __ mov(edi, FieldOperand(edx, HeapObject::kMapOffset)); 2957 __ mov(edi, FieldOperand(edx, HeapObject::kMapOffset));
2970 // ebx: receiver->map(). 2958 // ebx: receiver->map().
2971 for (int i = 0; i < receiver_maps->length(); ++i) { 2959 for (int i = 0; i < receiver_maps->length(); ++i) {
2972 Handle<Map> map(receiver_maps->at(i)); 2960 __ cmp(edi, receiver_maps->at(i));
2973 __ cmp(edi, map); 2961 if (transitioned_maps->at(i).is_null()) {
2974 if (transitioned_maps->at(i) == NULL) { 2962 __ j(equal, handler_stubs->at(i));
2975 __ j(equal, Handle<Code>(handler_stubs->at(i)));
2976 } else { 2963 } else {
2977 Label next_map; 2964 Label next_map;
2978 __ j(not_equal, &next_map, Label::kNear); 2965 __ j(not_equal, &next_map, Label::kNear);
2979 __ mov(ebx, Immediate(Handle<Map>(transitioned_maps->at(i)))); 2966 __ mov(ebx, Immediate(transitioned_maps->at(i)));
2980 __ jmp(Handle<Code>(handler_stubs->at(i)), RelocInfo::CODE_TARGET); 2967 __ jmp(handler_stubs->at(i), RelocInfo::CODE_TARGET);
2981 __ bind(&next_map); 2968 __ bind(&next_map);
2982 } 2969 }
2983 } 2970 }
2984 __ bind(&miss); 2971 __ bind(&miss);
2985 Handle<Code> miss_ic = isolate()->builtins()->KeyedStoreIC_Miss(); 2972 Handle<Code> miss_ic = isolate()->builtins()->KeyedStoreIC_Miss();
2986 __ jmp(miss_ic, RelocInfo::CODE_TARGET); 2973 __ jmp(miss_ic, RelocInfo::CODE_TARGET);
2987 2974
2988 // Return the generated code. 2975 // Return the generated code.
2989 return GetCode(NORMAL, NULL, MEGAMORPHIC); 2976 return GetCode(NORMAL, factory()->empty_string(), MEGAMORPHIC);
2990 } 2977 }
2991 2978
2992 2979
2993 Handle<Code> LoadStubCompiler::CompileLoadNonexistent(Handle<String> name, 2980 Handle<Code> LoadStubCompiler::CompileLoadNonexistent(Handle<String> name,
2994 Handle<JSObject> object, 2981 Handle<JSObject> object,
2995 Handle<JSObject> last) { 2982 Handle<JSObject> last) {
2996 // ----------- S t a t e ------------- 2983 // ----------- S t a t e -------------
2997 // -- eax : receiver 2984 // -- eax : receiver
2998 // -- ecx : name 2985 // -- ecx : name
2999 // -- esp[0] : return address 2986 // -- esp[0] : return address
(...skipping 1223 matching lines...) Expand 10 before | Expand all | Expand 10 after
4223 Handle<Code> ic_miss = masm->isolate()->builtins()->KeyedStoreIC_Miss(); 4210 Handle<Code> ic_miss = masm->isolate()->builtins()->KeyedStoreIC_Miss();
4224 __ jmp(ic_miss, RelocInfo::CODE_TARGET); 4211 __ jmp(ic_miss, RelocInfo::CODE_TARGET);
4225 } 4212 }
4226 4213
4227 4214
4228 #undef __ 4215 #undef __
4229 4216
4230 } } // namespace v8::internal 4217 } } // namespace v8::internal
4231 4218
4232 #endif // V8_TARGET_ARCH_IA32 4219 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/arm/stub-cache-arm.cc ('k') | src/list.h » ('j') | src/list-inl.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698