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

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

Issue 2350423002: [crankshaft] Remove HStoreKeyedGeneric and use HCallWithDescriptor instead to call KeyedStoreIC. (Closed)
Patch Set: Created 4 years, 3 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-codegen-arm64.h ('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 2998 matching lines...) Expand 10 before | Expand all | Expand 10 after
3009 AllowDeferredHandleDereference vector_structure_check; 3009 AllowDeferredHandleDereference vector_structure_check;
3010 Handle<TypeFeedbackVector> vector = instr->hydrogen()->feedback_vector(); 3010 Handle<TypeFeedbackVector> vector = instr->hydrogen()->feedback_vector();
3011 __ Mov(vector_register, vector); 3011 __ Mov(vector_register, vector);
3012 // No need to allocate this register. 3012 // No need to allocate this register.
3013 FeedbackVectorSlot slot = instr->hydrogen()->slot(); 3013 FeedbackVectorSlot slot = instr->hydrogen()->slot();
3014 int index = vector->GetIndex(slot); 3014 int index = vector->GetIndex(slot);
3015 __ Mov(slot_register, Smi::FromInt(index)); 3015 __ Mov(slot_register, Smi::FromInt(index));
3016 } 3016 }
3017 3017
3018 3018
3019 template <class T>
3020 void LCodeGen::EmitVectorStoreICRegisters(T* instr) {
3021 Register vector_register = ToRegister(instr->temp_vector());
3022 Register slot_register = ToRegister(instr->temp_slot());
3023
3024 AllowDeferredHandleDereference vector_structure_check;
3025 Handle<TypeFeedbackVector> vector = instr->hydrogen()->feedback_vector();
3026 __ Mov(vector_register, vector);
3027 FeedbackVectorSlot slot = instr->hydrogen()->slot();
3028 int index = vector->GetIndex(slot);
3029 __ Mov(slot_register, Smi::FromInt(index));
3030 }
3031
3032
3033 void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) { 3019 void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) {
3034 DCHECK(ToRegister(instr->context()).is(cp)); 3020 DCHECK(ToRegister(instr->context()).is(cp));
3035 DCHECK(ToRegister(instr->result()).Is(x0)); 3021 DCHECK(ToRegister(instr->result()).Is(x0));
3036 3022
3037 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr); 3023 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr);
3038 Handle<Code> ic = 3024 Handle<Code> ic =
3039 CodeFactory::LoadGlobalICInOptimizedCode(isolate(), instr->typeof_mode()) 3025 CodeFactory::LoadGlobalICInOptimizedCode(isolate(), instr->typeof_mode())
3040 .code(); 3026 .code();
3041 CallCode(ic, RelocInfo::CODE_TARGET, instr); 3027 CallCode(ic, RelocInfo::CODE_TARGET, instr);
3042 } 3028 }
(...skipping 1878 matching lines...) Expand 10 before | Expand all | Expand 10 after
4921 ? OMIT_SMI_CHECK : INLINE_SMI_CHECK; 4907 ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
4922 // Compute address of modified element and store it into key register. 4908 // Compute address of modified element and store it into key register.
4923 __ Add(element_addr, mem_op.base(), mem_op.OffsetAsOperand()); 4909 __ Add(element_addr, mem_op.base(), mem_op.OffsetAsOperand());
4924 __ RecordWrite(elements, element_addr, value, GetLinkRegisterState(), 4910 __ RecordWrite(elements, element_addr, value, GetLinkRegisterState(),
4925 kSaveFPRegs, EMIT_REMEMBERED_SET, check_needed, 4911 kSaveFPRegs, EMIT_REMEMBERED_SET, check_needed,
4926 instr->hydrogen()->PointersToHereCheckForValue()); 4912 instr->hydrogen()->PointersToHereCheckForValue());
4927 } 4913 }
4928 } 4914 }
4929 4915
4930 4916
4931 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) {
4932 DCHECK(ToRegister(instr->context()).is(cp));
4933 DCHECK(ToRegister(instr->object()).is(StoreDescriptor::ReceiverRegister()));
4934 DCHECK(ToRegister(instr->key()).is(StoreDescriptor::NameRegister()));
4935 DCHECK(ToRegister(instr->value()).is(StoreDescriptor::ValueRegister()));
4936
4937 EmitVectorStoreICRegisters<LStoreKeyedGeneric>(instr);
4938
4939 Handle<Code> ic = CodeFactory::KeyedStoreICInOptimizedCode(
4940 isolate(), instr->language_mode())
4941 .code();
4942 CallCode(ic, RelocInfo::CODE_TARGET, instr);
4943 }
4944
4945
4946 void LCodeGen::DoMaybeGrowElements(LMaybeGrowElements* instr) { 4917 void LCodeGen::DoMaybeGrowElements(LMaybeGrowElements* instr) {
4947 class DeferredMaybeGrowElements final : public LDeferredCode { 4918 class DeferredMaybeGrowElements final : public LDeferredCode {
4948 public: 4919 public:
4949 DeferredMaybeGrowElements(LCodeGen* codegen, LMaybeGrowElements* instr) 4920 DeferredMaybeGrowElements(LCodeGen* codegen, LMaybeGrowElements* instr)
4950 : LDeferredCode(codegen), instr_(instr) {} 4921 : LDeferredCode(codegen), instr_(instr) {}
4951 void Generate() override { codegen()->DoDeferredMaybeGrowElements(instr_); } 4922 void Generate() override { codegen()->DoDeferredMaybeGrowElements(instr_); }
4952 LInstruction* instr() override { return instr_; } 4923 LInstruction* instr() override { return instr_; }
4953 4924
4954 private: 4925 private:
4955 LMaybeGrowElements* instr_; 4926 LMaybeGrowElements* instr_;
(...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
5679 // Index is equal to negated out of object property index plus 1. 5650 // Index is equal to negated out of object property index plus 1.
5680 __ Sub(result, result, Operand::UntagSmiAndScale(index, kPointerSizeLog2)); 5651 __ Sub(result, result, Operand::UntagSmiAndScale(index, kPointerSizeLog2));
5681 __ Ldr(result, FieldMemOperand(result, 5652 __ Ldr(result, FieldMemOperand(result,
5682 FixedArray::kHeaderSize - kPointerSize)); 5653 FixedArray::kHeaderSize - kPointerSize));
5683 __ Bind(deferred->exit()); 5654 __ Bind(deferred->exit());
5684 __ Bind(&done); 5655 __ Bind(&done);
5685 } 5656 }
5686 5657
5687 } // namespace internal 5658 } // namespace internal
5688 } // namespace v8 5659 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/arm64/lithium-codegen-arm64.h ('k') | src/crankshaft/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698