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

Side by Side Diff: src/crankshaft/arm64/lithium-codegen-arm64.cc

Issue 2391043005: [crankshaft] Remove HLoadKeyedGeneric and use HCallWithDescriptor to call KeyedLoadIC. (Closed)
Patch Set: Rebasing 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/crankshaft/arm64/lithium-arm64.cc ('k') | src/crankshaft/hydrogen.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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 #include "src/crankshaft/arm64/lithium-codegen-arm64.h" 5 #include "src/crankshaft/arm64/lithium-codegen-arm64.h"
6 6
7 #include "src/arm64/frames-arm64.h" 7 #include "src/arm64/frames-arm64.h"
8 #include "src/base/bits.h" 8 #include "src/base/bits.h"
9 #include "src/code-factory.h" 9 #include "src/code-factory.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 2990 matching lines...) Expand 10 before | Expand all | Expand 10 after
3001 __ B(ne, &done); 3001 __ B(ne, &done);
3002 3002
3003 // Get the prototype from the initial map. 3003 // Get the prototype from the initial map.
3004 __ Ldr(result, FieldMemOperand(result, Map::kPrototypeOffset)); 3004 __ Ldr(result, FieldMemOperand(result, Map::kPrototypeOffset));
3005 3005
3006 // All done. 3006 // All done.
3007 __ Bind(&done); 3007 __ Bind(&done);
3008 } 3008 }
3009 3009
3010 3010
3011 template <class T>
3012 void LCodeGen::EmitVectorLoadICRegisters(T* instr) {
3013 Register vector_register = ToRegister(instr->temp_vector());
3014 Register slot_register = LoadWithVectorDescriptor::SlotRegister();
3015 DCHECK(vector_register.is(LoadWithVectorDescriptor::VectorRegister()));
3016 DCHECK(slot_register.is(x0));
3017
3018 AllowDeferredHandleDereference vector_structure_check;
3019 Handle<TypeFeedbackVector> vector = instr->hydrogen()->feedback_vector();
3020 __ Mov(vector_register, vector);
3021 // No need to allocate this register.
3022 FeedbackVectorSlot slot = instr->hydrogen()->slot();
3023 int index = vector->GetIndex(slot);
3024 __ Mov(slot_register, Smi::FromInt(index));
3025 }
3026
3027
3028 MemOperand LCodeGen::PrepareKeyedExternalArrayOperand( 3011 MemOperand LCodeGen::PrepareKeyedExternalArrayOperand(
3029 Register key, 3012 Register key,
3030 Register base, 3013 Register base,
3031 Register scratch, 3014 Register scratch,
3032 bool key_is_smi, 3015 bool key_is_smi,
3033 bool key_is_constant, 3016 bool key_is_constant,
3034 int constant_key, 3017 int constant_key,
3035 ElementsKind elements_kind, 3018 ElementsKind elements_kind,
3036 int base_offset) { 3019 int base_offset) {
3037 int element_size_shift = ElementsKindToShiftSize(elements_kind); 3020 int element_size_shift = ElementsKindToShiftSize(elements_kind);
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
3266 __ Ldr(result, FieldMemOperand(result, Cell::kValueOffset)); 3249 __ Ldr(result, FieldMemOperand(result, Cell::kValueOffset));
3267 __ Cmp(result, Operand(Smi::FromInt(Isolate::kArrayProtectorValid))); 3250 __ Cmp(result, Operand(Smi::FromInt(Isolate::kArrayProtectorValid)));
3268 DeoptimizeIf(ne, instr, DeoptimizeReason::kHole); 3251 DeoptimizeIf(ne, instr, DeoptimizeReason::kHole);
3269 } 3252 }
3270 __ LoadRoot(result, Heap::kUndefinedValueRootIndex); 3253 __ LoadRoot(result, Heap::kUndefinedValueRootIndex);
3271 __ Bind(&done); 3254 __ Bind(&done);
3272 } 3255 }
3273 } 3256 }
3274 3257
3275 3258
3276 void LCodeGen::DoLoadKeyedGeneric(LLoadKeyedGeneric* instr) {
3277 DCHECK(ToRegister(instr->context()).is(cp));
3278 DCHECK(ToRegister(instr->object()).is(LoadDescriptor::ReceiverRegister()));
3279 DCHECK(ToRegister(instr->key()).is(LoadDescriptor::NameRegister()));
3280
3281 EmitVectorLoadICRegisters<LLoadKeyedGeneric>(instr);
3282
3283 Handle<Code> ic = CodeFactory::KeyedLoadICInOptimizedCode(isolate()).code();
3284 CallCode(ic, RelocInfo::CODE_TARGET, instr);
3285
3286 DCHECK(ToRegister(instr->result()).Is(x0));
3287 }
3288
3289
3290 void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) { 3259 void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) {
3291 HObjectAccess access = instr->hydrogen()->access(); 3260 HObjectAccess access = instr->hydrogen()->access();
3292 int offset = access.offset(); 3261 int offset = access.offset();
3293 Register object = ToRegister(instr->object()); 3262 Register object = ToRegister(instr->object());
3294 3263
3295 if (access.IsExternalMemory()) { 3264 if (access.IsExternalMemory()) {
3296 Register result = ToRegister(instr->result()); 3265 Register result = ToRegister(instr->result());
3297 __ Load(result, MemOperand(object, offset), access.representation()); 3266 __ Load(result, MemOperand(object, offset), access.representation());
3298 return; 3267 return;
3299 } 3268 }
(...skipping 2334 matching lines...) Expand 10 before | Expand all | Expand 10 after
5634 // Index is equal to negated out of object property index plus 1. 5603 // Index is equal to negated out of object property index plus 1.
5635 __ Sub(result, result, Operand::UntagSmiAndScale(index, kPointerSizeLog2)); 5604 __ Sub(result, result, Operand::UntagSmiAndScale(index, kPointerSizeLog2));
5636 __ Ldr(result, FieldMemOperand(result, 5605 __ Ldr(result, FieldMemOperand(result,
5637 FixedArray::kHeaderSize - kPointerSize)); 5606 FixedArray::kHeaderSize - kPointerSize));
5638 __ Bind(deferred->exit()); 5607 __ Bind(deferred->exit());
5639 __ Bind(&done); 5608 __ Bind(&done);
5640 } 5609 }
5641 5610
5642 } // namespace internal 5611 } // namespace internal
5643 } // namespace v8 5612 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/arm64/lithium-arm64.cc ('k') | src/crankshaft/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698