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

Side by Side Diff: src/arm/code-stubs-arm.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 | « no previous file | src/arm64/code-stubs-arm64.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_ARM 5 #if V8_TARGET_ARCH_ARM
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 3214 matching lines...) Expand 10 before | Expand all | Expand 10 after
3225 HandleArrayCases(masm, feedback, receiver_map, scratch1, r9, false, &miss); 3225 HandleArrayCases(masm, feedback, receiver_map, scratch1, r9, false, &miss);
3226 3226
3227 __ bind(&miss); 3227 __ bind(&miss);
3228 KeyedLoadIC::GenerateMiss(masm); 3228 KeyedLoadIC::GenerateMiss(masm);
3229 3229
3230 __ bind(&load_smi_map); 3230 __ bind(&load_smi_map);
3231 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); 3231 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex);
3232 __ jmp(&compare_map); 3232 __ jmp(&compare_map);
3233 } 3233 }
3234 3234
3235 void StoreICTrampolineStub::Generate(MacroAssembler* masm) {
3236 __ EmitLoadTypeFeedbackVector(StoreWithVectorDescriptor::VectorRegister());
3237 StoreICStub stub(isolate(), state());
3238 stub.GenerateForTrampoline(masm);
3239 }
3240
3241 void KeyedStoreICTrampolineStub::Generate(MacroAssembler* masm) { 3235 void KeyedStoreICTrampolineStub::Generate(MacroAssembler* masm) {
3242 __ EmitLoadTypeFeedbackVector(StoreWithVectorDescriptor::VectorRegister()); 3236 __ EmitLoadTypeFeedbackVector(StoreWithVectorDescriptor::VectorRegister());
3243 KeyedStoreICStub stub(isolate(), state()); 3237 KeyedStoreICStub stub(isolate(), state());
3244 stub.GenerateForTrampoline(masm); 3238 stub.GenerateForTrampoline(masm);
3245 } 3239 }
3246 3240
3247 void StoreICStub::Generate(MacroAssembler* masm) { GenerateImpl(masm, false); }
3248
3249 void StoreICStub::GenerateForTrampoline(MacroAssembler* masm) {
3250 GenerateImpl(masm, true);
3251 }
3252
3253 void StoreICStub::GenerateImpl(MacroAssembler* masm, bool in_frame) {
3254 Register receiver = StoreWithVectorDescriptor::ReceiverRegister(); // r1
3255 Register key = StoreWithVectorDescriptor::NameRegister(); // r2
3256 Register vector = StoreWithVectorDescriptor::VectorRegister(); // r3
3257 Register slot = StoreWithVectorDescriptor::SlotRegister(); // r4
3258 DCHECK(StoreWithVectorDescriptor::ValueRegister().is(r0)); // r0
3259 Register feedback = r5;
3260 Register receiver_map = r6;
3261 Register scratch1 = r9;
3262
3263 __ add(feedback, vector, Operand::PointerOffsetFromSmiKey(slot));
3264 __ ldr(feedback, FieldMemOperand(feedback, FixedArray::kHeaderSize));
3265
3266 // Try to quickly handle the monomorphic case without knowing for sure
3267 // if we have a weak cell in feedback. We do know it's safe to look
3268 // at WeakCell::kValueOffset.
3269 Label try_array, load_smi_map, compare_map;
3270 Label not_array, miss;
3271 HandleMonomorphicCase(masm, receiver, receiver_map, feedback, vector, slot,
3272 scratch1, &compare_map, &load_smi_map, &try_array);
3273
3274 // Is it a fixed array?
3275 __ bind(&try_array);
3276 __ ldr(scratch1, FieldMemOperand(feedback, HeapObject::kMapOffset));
3277 __ CompareRoot(scratch1, Heap::kFixedArrayMapRootIndex);
3278 __ b(ne, &not_array);
3279
3280 // We are using register r8, which is used for the embedded constant pool
3281 // when FLAG_enable_embedded_constant_pool is true.
3282 DCHECK(!FLAG_enable_embedded_constant_pool);
3283 Register scratch2 = r8;
3284 HandleArrayCases(masm, feedback, receiver_map, scratch1, scratch2, true,
3285 &miss);
3286
3287 __ bind(&not_array);
3288 __ CompareRoot(feedback, Heap::kmegamorphic_symbolRootIndex);
3289 __ b(ne, &miss);
3290 masm->isolate()->store_stub_cache()->GenerateProbe(
3291 masm, receiver, key, feedback, receiver_map, scratch1, scratch2);
3292
3293 __ bind(&miss);
3294 StoreIC::GenerateMiss(masm);
3295
3296 __ bind(&load_smi_map);
3297 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex);
3298 __ jmp(&compare_map);
3299 }
3300
3301 void KeyedStoreICStub::Generate(MacroAssembler* masm) { 3241 void KeyedStoreICStub::Generate(MacroAssembler* masm) {
3302 GenerateImpl(masm, false); 3242 GenerateImpl(masm, false);
3303 } 3243 }
3304 3244
3305 void KeyedStoreICStub::GenerateForTrampoline(MacroAssembler* masm) { 3245 void KeyedStoreICStub::GenerateForTrampoline(MacroAssembler* masm) {
3306 GenerateImpl(masm, true); 3246 GenerateImpl(masm, true);
3307 } 3247 }
3308 3248
3309 3249
3310 static void HandlePolymorphicStoreCase(MacroAssembler* masm, Register feedback, 3250 static void HandlePolymorphicStoreCase(MacroAssembler* masm, Register feedback,
(...skipping 1545 matching lines...) Expand 10 before | Expand all | Expand 10 after
4856 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, 4796 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref,
4857 kStackUnwindSpace, NULL, return_value_operand, NULL); 4797 kStackUnwindSpace, NULL, return_value_operand, NULL);
4858 } 4798 }
4859 4799
4860 #undef __ 4800 #undef __
4861 4801
4862 } // namespace internal 4802 } // namespace internal
4863 } // namespace v8 4803 } // namespace v8
4864 4804
4865 #endif // V8_TARGET_ARCH_ARM 4805 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/arm64/code-stubs-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698