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

Side by Side Diff: src/x64/lithium-codegen-x64.cc

Issue 1016803002: Remove PropertyCell space (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 9 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/serialize.cc ('k') | src/x64/lithium-x64.h » ('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/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_X64 7 #if V8_TARGET_ARCH_X64
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 2866 matching lines...) Expand 10 before | Expand all | Expand 10 after
2877 __ shlp(reg, Immediate(kPointerSizeLog2)); 2877 __ shlp(reg, Immediate(kPointerSizeLog2));
2878 __ addp(rsp, reg); 2878 __ addp(rsp, reg);
2879 __ jmp(return_addr_reg); 2879 __ jmp(return_addr_reg);
2880 } 2880 }
2881 if (no_frame_start != -1) { 2881 if (no_frame_start != -1) {
2882 info_->AddNoFrameRange(no_frame_start, masm_->pc_offset()); 2882 info_->AddNoFrameRange(no_frame_start, masm_->pc_offset());
2883 } 2883 }
2884 } 2884 }
2885 2885
2886 2886
2887 void LCodeGen::DoLoadGlobalCell(LLoadGlobalCell* instr) {
2888 Register result = ToRegister(instr->result());
2889 __ LoadGlobalCell(result, instr->hydrogen()->cell().handle());
2890 if (instr->hydrogen()->RequiresHoleCheck()) {
2891 __ CompareRoot(result, Heap::kTheHoleValueRootIndex);
2892 DeoptimizeIf(equal, instr, Deoptimizer::kHole);
2893 }
2894 }
2895
2896
2897 template <class T> 2887 template <class T>
2898 void LCodeGen::EmitVectorLoadICRegisters(T* instr) { 2888 void LCodeGen::EmitVectorLoadICRegisters(T* instr) {
2899 DCHECK(FLAG_vector_ics); 2889 DCHECK(FLAG_vector_ics);
2900 Register vector_register = ToRegister(instr->temp_vector()); 2890 Register vector_register = ToRegister(instr->temp_vector());
2901 Register slot_register = VectorLoadICDescriptor::SlotRegister(); 2891 Register slot_register = VectorLoadICDescriptor::SlotRegister();
2902 DCHECK(vector_register.is(VectorLoadICDescriptor::VectorRegister())); 2892 DCHECK(vector_register.is(VectorLoadICDescriptor::VectorRegister()));
2903 DCHECK(slot_register.is(rax)); 2893 DCHECK(slot_register.is(rax));
2904 2894
2905 AllowDeferredHandleDereference vector_structure_check; 2895 AllowDeferredHandleDereference vector_structure_check;
2906 Handle<TypeFeedbackVector> vector = instr->hydrogen()->feedback_vector(); 2896 Handle<TypeFeedbackVector> vector = instr->hydrogen()->feedback_vector();
(...skipping 15 matching lines...) Expand all
2922 if (FLAG_vector_ics) { 2912 if (FLAG_vector_ics) {
2923 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr); 2913 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr);
2924 } 2914 }
2925 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL; 2915 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL;
2926 Handle<Code> ic = CodeFactory::LoadICInOptimizedCode(isolate(), mode, 2916 Handle<Code> ic = CodeFactory::LoadICInOptimizedCode(isolate(), mode,
2927 PREMONOMORPHIC).code(); 2917 PREMONOMORPHIC).code();
2928 CallCode(ic, RelocInfo::CODE_TARGET, instr); 2918 CallCode(ic, RelocInfo::CODE_TARGET, instr);
2929 } 2919 }
2930 2920
2931 2921
2932 void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) {
2933 Register value = ToRegister(instr->value());
2934 Handle<Cell> cell_handle = instr->hydrogen()->cell().handle();
2935
2936 // If the cell we are storing to contains the hole it could have
2937 // been deleted from the property dictionary. In that case, we need
2938 // to update the property details in the property dictionary to mark
2939 // it as no longer deleted. We deoptimize in that case.
2940 if (instr->hydrogen()->RequiresHoleCheck()) {
2941 // We have a temp because CompareRoot might clobber kScratchRegister.
2942 Register cell = ToRegister(instr->temp());
2943 DCHECK(!value.is(cell));
2944 __ Move(cell, cell_handle, RelocInfo::CELL);
2945 __ CompareRoot(Operand(cell, 0), Heap::kTheHoleValueRootIndex);
2946 DeoptimizeIf(equal, instr, Deoptimizer::kHole);
2947 // Store the value.
2948 __ movp(Operand(cell, 0), value);
2949 } else {
2950 // Store the value.
2951 __ Move(kScratchRegister, cell_handle, RelocInfo::CELL);
2952 __ movp(Operand(kScratchRegister, 0), value);
2953 }
2954 // Cells are always rescanned, so no write barrier here.
2955 }
2956
2957
2958 void LCodeGen::DoLoadContextSlot(LLoadContextSlot* instr) { 2922 void LCodeGen::DoLoadContextSlot(LLoadContextSlot* instr) {
2959 Register context = ToRegister(instr->context()); 2923 Register context = ToRegister(instr->context());
2960 Register result = ToRegister(instr->result()); 2924 Register result = ToRegister(instr->result());
2961 __ movp(result, ContextOperand(context, instr->slot_index())); 2925 __ movp(result, ContextOperand(context, instr->slot_index()));
2962 if (instr->hydrogen()->RequiresHoleCheck()) { 2926 if (instr->hydrogen()->RequiresHoleCheck()) {
2963 __ CompareRoot(result, Heap::kTheHoleValueRootIndex); 2927 __ CompareRoot(result, Heap::kTheHoleValueRootIndex);
2964 if (instr->hydrogen()->DeoptimizesOnHole()) { 2928 if (instr->hydrogen()->DeoptimizesOnHole()) {
2965 DeoptimizeIf(equal, instr, Deoptimizer::kHole); 2929 DeoptimizeIf(equal, instr, Deoptimizer::kHole);
2966 } else { 2930 } else {
2967 Label is_not_hole; 2931 Label is_not_hole;
(...skipping 2999 matching lines...) Expand 10 before | Expand all | Expand 10 after
5967 CallRuntime(Runtime::kPushBlockContext, 2, instr); 5931 CallRuntime(Runtime::kPushBlockContext, 2, instr);
5968 RecordSafepoint(Safepoint::kNoLazyDeopt); 5932 RecordSafepoint(Safepoint::kNoLazyDeopt);
5969 } 5933 }
5970 5934
5971 5935
5972 #undef __ 5936 #undef __
5973 5937
5974 } } // namespace v8::internal 5938 } } // namespace v8::internal
5975 5939
5976 #endif // V8_TARGET_ARCH_X64 5940 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/serialize.cc ('k') | src/x64/lithium-x64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698