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

Side by Side Diff: src/x87/code-stubs-x87.cc

Issue 2413653003: [stubs] Drop StoreICStub and StoreICTrampolineStub (the non-TurboFan implementations of StoreIC dis… (Closed)
Patch Set: Created 4 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
« no previous file with comments | « src/x64/code-stubs-x64.cc ('k') | test/cctest/test-api.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #if V8_TARGET_ARCH_X87 5 #if V8_TARGET_ARCH_X87
6 6
7 #include "src/code-stubs.h" 7 #include "src/code-stubs.h"
8 #include "src/api-arguments.h" 8 #include "src/api-arguments.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 2989 matching lines...) Expand 10 before | Expand all | Expand 10 after
3000 // If the name comparison succeeded, we know we have a fixed array with 3000 // If the name comparison succeeded, we know we have a fixed array with
3001 // at least one map/handler pair. 3001 // at least one map/handler pair.
3002 __ mov(feedback, FieldOperand(vector, slot, times_half_pointer_size, 3002 __ mov(feedback, FieldOperand(vector, slot, times_half_pointer_size,
3003 FixedArray::kHeaderSize + kPointerSize)); 3003 FixedArray::kHeaderSize + kPointerSize));
3004 HandleArrayCases(masm, receiver, key, vector, slot, feedback, false, &miss); 3004 HandleArrayCases(masm, receiver, key, vector, slot, feedback, false, &miss);
3005 3005
3006 __ bind(&miss); 3006 __ bind(&miss);
3007 KeyedLoadIC::GenerateMiss(masm); 3007 KeyedLoadIC::GenerateMiss(masm);
3008 } 3008 }
3009 3009
3010 void StoreICTrampolineStub::Generate(MacroAssembler* masm) {
3011 __ EmitLoadTypeFeedbackVector(StoreWithVectorDescriptor::VectorRegister());
3012 StoreICStub stub(isolate(), state());
3013 stub.GenerateForTrampoline(masm);
3014 }
3015
3016 void KeyedStoreICTrampolineStub::Generate(MacroAssembler* masm) { 3010 void KeyedStoreICTrampolineStub::Generate(MacroAssembler* masm) {
3017 __ EmitLoadTypeFeedbackVector(StoreWithVectorDescriptor::VectorRegister()); 3011 __ EmitLoadTypeFeedbackVector(StoreWithVectorDescriptor::VectorRegister());
3018 KeyedStoreICStub stub(isolate(), state()); 3012 KeyedStoreICStub stub(isolate(), state());
3019 stub.GenerateForTrampoline(masm); 3013 stub.GenerateForTrampoline(masm);
3020 } 3014 }
3021 3015
3022 void StoreICStub::Generate(MacroAssembler* masm) { GenerateImpl(masm, false); }
3023
3024 void StoreICStub::GenerateForTrampoline(MacroAssembler* masm) {
3025 GenerateImpl(masm, true);
3026 }
3027
3028
3029 // value is on the stack already. 3016 // value is on the stack already.
3030 static void HandlePolymorphicStoreCase(MacroAssembler* masm, Register receiver, 3017 static void HandlePolymorphicStoreCase(MacroAssembler* masm, Register receiver,
3031 Register key, Register vector, 3018 Register key, Register vector,
3032 Register slot, Register feedback, 3019 Register slot, Register feedback,
3033 bool is_polymorphic, Label* miss) { 3020 bool is_polymorphic, Label* miss) {
3034 // feedback initially contains the feedback array 3021 // feedback initially contains the feedback array
3035 Label next, next_loop, prepare_next; 3022 Label next, next_loop, prepare_next;
3036 Label load_smi_map, compare_map; 3023 Label load_smi_map, compare_map;
3037 Label start_polymorphic; 3024 Label start_polymorphic;
3038 Label pop_and_miss; 3025 Label pop_and_miss;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
3135 __ bind(&compare_smi_map); 3122 __ bind(&compare_smi_map);
3136 __ CompareRoot(ic_map, Heap::kHeapNumberMapRootIndex); 3123 __ CompareRoot(ic_map, Heap::kHeapNumberMapRootIndex);
3137 __ j(not_equal, miss); 3124 __ j(not_equal, miss);
3138 __ mov(weak_cell, FieldOperand(vector, slot, times_half_pointer_size, 3125 __ mov(weak_cell, FieldOperand(vector, slot, times_half_pointer_size,
3139 FixedArray::kHeaderSize + kPointerSize)); 3126 FixedArray::kHeaderSize + kPointerSize));
3140 __ lea(weak_cell, FieldOperand(weak_cell, Code::kHeaderSize)); 3127 __ lea(weak_cell, FieldOperand(weak_cell, Code::kHeaderSize));
3141 // jump to the handler. 3128 // jump to the handler.
3142 __ jmp(weak_cell); 3129 __ jmp(weak_cell);
3143 } 3130 }
3144 3131
3145 void StoreICStub::GenerateImpl(MacroAssembler* masm, bool in_frame) {
3146 Register receiver = StoreWithVectorDescriptor::ReceiverRegister(); // edx
3147 Register key = StoreWithVectorDescriptor::NameRegister(); // ecx
3148 Register value = StoreWithVectorDescriptor::ValueRegister(); // eax
3149 Register vector = StoreWithVectorDescriptor::VectorRegister(); // ebx
3150 Register slot = StoreWithVectorDescriptor::SlotRegister(); // edi
3151 Label miss;
3152
3153 if (StoreWithVectorDescriptor::kPassLastArgsOnStack) {
3154 // Current stack layout:
3155 // - esp[8] -- value
3156 // - esp[4] -- slot
3157 // - esp[0] -- return address
3158 STATIC_ASSERT(StoreDescriptor::kStackArgumentsCount == 2);
3159 STATIC_ASSERT(StoreWithVectorDescriptor::kStackArgumentsCount == 3);
3160 if (in_frame) {
3161 __ RecordComment("[ StoreDescriptor -> StoreWithVectorDescriptor");
3162 // If the vector is not on the stack, then insert the vector beneath
3163 // return address in order to prepare for calling handler with
3164 // StoreWithVector calling convention.
3165 __ push(Operand(esp, 0));
3166 __ mov(Operand(esp, 4), StoreWithVectorDescriptor::VectorRegister());
3167 __ RecordComment("]");
3168 } else {
3169 __ mov(vector, Operand(esp, 1 * kPointerSize));
3170 }
3171 __ mov(slot, Operand(esp, 2 * kPointerSize));
3172 }
3173
3174 Register scratch = value;
3175 __ mov(scratch, FieldOperand(vector, slot, times_half_pointer_size,
3176 FixedArray::kHeaderSize));
3177
3178 // Is it a weak cell?
3179 Label try_array;
3180 Label not_array, smi_key, key_okay;
3181 __ CompareRoot(FieldOperand(scratch, 0), Heap::kWeakCellMapRootIndex);
3182 __ j(not_equal, &try_array);
3183 HandleMonomorphicStoreCase(masm, receiver, key, vector, slot, scratch, &miss);
3184
3185 // Is it a fixed array?
3186 __ bind(&try_array);
3187 __ CompareRoot(FieldOperand(scratch, 0), Heap::kFixedArrayMapRootIndex);
3188 __ j(not_equal, &not_array);
3189 HandlePolymorphicStoreCase(masm, receiver, key, vector, slot, scratch, true,
3190 &miss);
3191
3192 __ bind(&not_array);
3193 __ CompareRoot(scratch, Heap::kmegamorphic_symbolRootIndex);
3194 __ j(not_equal, &miss);
3195
3196 masm->isolate()->store_stub_cache()->GenerateProbe(masm, receiver, key, slot,
3197 no_reg);
3198 __ bind(&miss);
3199 StoreIC::GenerateMiss(masm);
3200 }
3201
3202 void KeyedStoreICStub::Generate(MacroAssembler* masm) { 3132 void KeyedStoreICStub::Generate(MacroAssembler* masm) {
3203 GenerateImpl(masm, false); 3133 GenerateImpl(masm, false);
3204 } 3134 }
3205 3135
3206 void KeyedStoreICStub::GenerateForTrampoline(MacroAssembler* masm) { 3136 void KeyedStoreICStub::GenerateForTrampoline(MacroAssembler* masm) {
3207 GenerateImpl(masm, true); 3137 GenerateImpl(masm, true);
3208 } 3138 }
3209 3139
3210 3140
3211 static void HandlePolymorphicKeyedStoreCase(MacroAssembler* masm, 3141 static void HandlePolymorphicKeyedStoreCase(MacroAssembler* masm,
(...skipping 1730 matching lines...) Expand 10 before | Expand all | Expand 10 after
4942 kStackUnwindSpace, nullptr, return_value_operand, 4872 kStackUnwindSpace, nullptr, return_value_operand,
4943 NULL); 4873 NULL);
4944 } 4874 }
4945 4875
4946 #undef __ 4876 #undef __
4947 4877
4948 } // namespace internal 4878 } // namespace internal
4949 } // namespace v8 4879 } // namespace v8
4950 4880
4951 #endif // V8_TARGET_ARCH_X87 4881 #endif // V8_TARGET_ARCH_X87
OLDNEW
« no previous file with comments | « src/x64/code-stubs-x64.cc ('k') | test/cctest/test-api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698