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

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

Issue 1018333003: PPC: 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 | « no previous file | src/ppc/lithium-ppc.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 #include "src/base/bits.h" 7 #include "src/base/bits.h"
8 #include "src/code-factory.h" 8 #include "src/code-factory.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/cpu-profiler.h" 10 #include "src/cpu-profiler.h"
(...skipping 3024 matching lines...) Expand 10 before | Expand all | Expand 10 after
3035 } 3035 }
3036 3036
3037 __ blr(); 3037 __ blr();
3038 3038
3039 if (no_frame_start != -1) { 3039 if (no_frame_start != -1) {
3040 info_->AddNoFrameRange(no_frame_start, masm_->pc_offset()); 3040 info_->AddNoFrameRange(no_frame_start, masm_->pc_offset());
3041 } 3041 }
3042 } 3042 }
3043 3043
3044 3044
3045 void LCodeGen::DoLoadGlobalCell(LLoadGlobalCell* instr) {
3046 Register result = ToRegister(instr->result());
3047 __ mov(ip, Operand(Handle<Object>(instr->hydrogen()->cell().handle())));
3048 __ LoadP(result, FieldMemOperand(ip, Cell::kValueOffset));
3049 if (instr->hydrogen()->RequiresHoleCheck()) {
3050 __ LoadRoot(ip, Heap::kTheHoleValueRootIndex);
3051 __ cmp(result, ip);
3052 DeoptimizeIf(eq, instr, Deoptimizer::kHole);
3053 }
3054 }
3055
3056
3057 template <class T> 3045 template <class T>
3058 void LCodeGen::EmitVectorLoadICRegisters(T* instr) { 3046 void LCodeGen::EmitVectorLoadICRegisters(T* instr) {
3059 DCHECK(FLAG_vector_ics); 3047 DCHECK(FLAG_vector_ics);
3060 Register vector_register = ToRegister(instr->temp_vector()); 3048 Register vector_register = ToRegister(instr->temp_vector());
3061 Register slot_register = VectorLoadICDescriptor::SlotRegister(); 3049 Register slot_register = VectorLoadICDescriptor::SlotRegister();
3062 DCHECK(vector_register.is(VectorLoadICDescriptor::VectorRegister())); 3050 DCHECK(vector_register.is(VectorLoadICDescriptor::VectorRegister()));
3063 DCHECK(slot_register.is(r3)); 3051 DCHECK(slot_register.is(r3));
3064 3052
3065 AllowDeferredHandleDereference vector_structure_check; 3053 AllowDeferredHandleDereference vector_structure_check;
3066 Handle<TypeFeedbackVector> vector = instr->hydrogen()->feedback_vector(); 3054 Handle<TypeFeedbackVector> vector = instr->hydrogen()->feedback_vector();
(...skipping 15 matching lines...) Expand all
3082 if (FLAG_vector_ics) { 3070 if (FLAG_vector_ics) {
3083 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr); 3071 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr);
3084 } 3072 }
3085 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL; 3073 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL;
3086 Handle<Code> ic = CodeFactory::LoadICInOptimizedCode(isolate(), mode, 3074 Handle<Code> ic = CodeFactory::LoadICInOptimizedCode(isolate(), mode,
3087 PREMONOMORPHIC).code(); 3075 PREMONOMORPHIC).code();
3088 CallCode(ic, RelocInfo::CODE_TARGET, instr); 3076 CallCode(ic, RelocInfo::CODE_TARGET, instr);
3089 } 3077 }
3090 3078
3091 3079
3092 void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) {
3093 Register value = ToRegister(instr->value());
3094 Register cell = scratch0();
3095
3096 // Load the cell.
3097 __ mov(cell, Operand(instr->hydrogen()->cell().handle()));
3098
3099 // If the cell we are storing to contains the hole it could have
3100 // been deleted from the property dictionary. In that case, we need
3101 // to update the property details in the property dictionary to mark
3102 // it as no longer deleted.
3103 if (instr->hydrogen()->RequiresHoleCheck()) {
3104 // We use a temp to check the payload (CompareRoot might clobber ip).
3105 Register payload = ToRegister(instr->temp());
3106 __ LoadP(payload, FieldMemOperand(cell, Cell::kValueOffset));
3107 __ CompareRoot(payload, Heap::kTheHoleValueRootIndex);
3108 DeoptimizeIf(eq, instr, Deoptimizer::kHole);
3109 }
3110
3111 // Store the value.
3112 __ StoreP(value, FieldMemOperand(cell, Cell::kValueOffset), r0);
3113 // Cells are always rescanned, so no write barrier here.
3114 }
3115
3116
3117 void LCodeGen::DoLoadContextSlot(LLoadContextSlot* instr) { 3080 void LCodeGen::DoLoadContextSlot(LLoadContextSlot* instr) {
3118 Register context = ToRegister(instr->context()); 3081 Register context = ToRegister(instr->context());
3119 Register result = ToRegister(instr->result()); 3082 Register result = ToRegister(instr->result());
3120 __ LoadP(result, ContextOperand(context, instr->slot_index())); 3083 __ LoadP(result, ContextOperand(context, instr->slot_index()));
3121 if (instr->hydrogen()->RequiresHoleCheck()) { 3084 if (instr->hydrogen()->RequiresHoleCheck()) {
3122 __ LoadRoot(ip, Heap::kTheHoleValueRootIndex); 3085 __ LoadRoot(ip, Heap::kTheHoleValueRootIndex);
3123 if (instr->hydrogen()->DeoptimizesOnHole()) { 3086 if (instr->hydrogen()->DeoptimizesOnHole()) {
3124 __ cmp(result, ip); 3087 __ cmp(result, ip);
3125 DeoptimizeIf(eq, instr, Deoptimizer::kHole); 3088 DeoptimizeIf(eq, instr, Deoptimizer::kHole);
3126 } else { 3089 } else {
(...skipping 3103 matching lines...) Expand 10 before | Expand all | Expand 10 after
6230 __ Push(scope_info); 6193 __ Push(scope_info);
6231 __ push(ToRegister(instr->function())); 6194 __ push(ToRegister(instr->function()));
6232 CallRuntime(Runtime::kPushBlockContext, 2, instr); 6195 CallRuntime(Runtime::kPushBlockContext, 2, instr);
6233 RecordSafepoint(Safepoint::kNoLazyDeopt); 6196 RecordSafepoint(Safepoint::kNoLazyDeopt);
6234 } 6197 }
6235 6198
6236 6199
6237 #undef __ 6200 #undef __
6238 } 6201 }
6239 } // namespace v8::internal 6202 } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/ppc/lithium-ppc.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698