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

Side by Side Diff: src/ic/ppc/handler-compiler-ppc.cc

Issue 2623483002: [cleanup] Port KeyedLoadIC_{Slow,Miss} to TF and drop unused IC handler code (Closed)
Patch Set: rebased Created 3 years, 11 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/ic/mips64/ic-mips64.cc ('k') | src/ic/ppc/ic-ppc.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 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 #if V8_TARGET_ARCH_PPC 5 #if V8_TARGET_ARCH_PPC
6 6
7 #include "src/ic/handler-compiler.h" 7 #include "src/ic/handler-compiler.h"
8 8
9 #include "src/api-arguments.h" 9 #include "src/api-arguments.h"
10 #include "src/field-type.h" 10 #include "src/field-type.h"
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 __ Pop(slot, vector); 123 __ Pop(slot, vector);
124 } 124 }
125 125
126 126
127 void PropertyHandlerCompiler::DiscardVectorAndSlot() { 127 void PropertyHandlerCompiler::DiscardVectorAndSlot() {
128 MacroAssembler* masm = this->masm(); 128 MacroAssembler* masm = this->masm();
129 // Remove vector and slot. 129 // Remove vector and slot.
130 __ addi(sp, sp, Operand(2 * kPointerSize)); 130 __ addi(sp, sp, Operand(2 * kPointerSize));
131 } 131 }
132 132
133 void PropertyHandlerCompiler::PushReturnAddress(Register tmp) {
134 // No-op. Return address is in lr register.
135 }
136
137 void PropertyHandlerCompiler::PopReturnAddress(Register tmp) {
138 // No-op. Return address is in lr register.
139 }
140
141 void PropertyHandlerCompiler::GenerateDictionaryNegativeLookup( 133 void PropertyHandlerCompiler::GenerateDictionaryNegativeLookup(
142 MacroAssembler* masm, Label* miss_label, Register receiver, 134 MacroAssembler* masm, Label* miss_label, Register receiver,
143 Handle<Name> name, Register scratch0, Register scratch1) { 135 Handle<Name> name, Register scratch0, Register scratch1) {
144 DCHECK(name->IsUniqueName()); 136 DCHECK(name->IsUniqueName());
145 DCHECK(!receiver.is(scratch0)); 137 DCHECK(!receiver.is(scratch0));
146 Counters* counters = masm->isolate()->counters(); 138 Counters* counters = masm->isolate()->counters();
147 __ IncrementCounter(counters->negative_lookups(), 1, scratch0, scratch1); 139 __ IncrementCounter(counters->negative_lookups(), 1, scratch0, scratch1);
148 __ IncrementCounter(counters->negative_lookups_miss(), 1, scratch0, scratch1); 140 __ IncrementCounter(counters->negative_lookups_miss(), 1, scratch0, scratch1);
149 141
150 Label done; 142 Label done;
(...skipping 26 matching lines...) Expand all
177 // Restore the temporarily used register. 169 // Restore the temporarily used register.
178 __ LoadP(properties, FieldMemOperand(receiver, JSObject::kPropertiesOffset)); 170 __ LoadP(properties, FieldMemOperand(receiver, JSObject::kPropertiesOffset));
179 171
180 172
181 NameDictionaryLookupStub::GenerateNegativeLookup( 173 NameDictionaryLookupStub::GenerateNegativeLookup(
182 masm, miss_label, &done, receiver, properties, name, scratch1); 174 masm, miss_label, &done, receiver, properties, name, scratch1);
183 __ bind(&done); 175 __ bind(&done);
184 __ DecrementCounter(counters->negative_lookups_miss(), 1, scratch0, scratch1); 176 __ DecrementCounter(counters->negative_lookups_miss(), 1, scratch0, scratch1);
185 } 177 }
186 178
187
188 void NamedLoadHandlerCompiler::GenerateDirectLoadGlobalFunctionPrototype(
189 MacroAssembler* masm, int index, Register result, Label* miss) {
190 __ LoadNativeContextSlot(index, result);
191 // Load its initial map. The global functions all have initial maps.
192 __ LoadP(result,
193 FieldMemOperand(result, JSFunction::kPrototypeOrInitialMapOffset));
194 // Load the prototype from the initial map.
195 __ LoadP(result, FieldMemOperand(result, Map::kPrototypeOffset));
196 }
197
198
199 void NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype( 179 void NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype(
200 MacroAssembler* masm, Register receiver, Register scratch1, 180 MacroAssembler* masm, Register receiver, Register scratch1,
201 Register scratch2, Label* miss_label) { 181 Register scratch2, Label* miss_label) {
202 __ TryGetFunctionPrototype(receiver, scratch1, scratch2, miss_label); 182 __ TryGetFunctionPrototype(receiver, scratch1, scratch2, miss_label);
203 __ mr(r3, scratch1); 183 __ mr(r3, scratch1);
204 __ Ret(); 184 __ Ret();
205 } 185 }
206 186
207 187
208 // Generate code to check that a global property cell is empty. Create 188 // Generate code to check that a global property cell is empty. Create
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 323
344 324
345 void NamedStoreHandlerCompiler::GenerateRestoreName(Label* label, 325 void NamedStoreHandlerCompiler::GenerateRestoreName(Label* label,
346 Handle<Name> name) { 326 Handle<Name> name) {
347 if (!label->is_unused()) { 327 if (!label->is_unused()) {
348 __ bind(label); 328 __ bind(label);
349 __ mov(this->name(), Operand(name)); 329 __ mov(this->name(), Operand(name));
350 } 330 }
351 } 331 }
352 332
353
354 void NamedStoreHandlerCompiler::GenerateRestoreName(Handle<Name> name) {
355 __ mov(this->name(), Operand(name));
356 }
357
358
359 void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition,
360 Register map_reg,
361 Register scratch,
362 Label* miss) {
363 Handle<WeakCell> cell = Map::WeakCellForMap(transition);
364 DCHECK(!map_reg.is(scratch));
365 __ LoadWeakValue(map_reg, cell, miss);
366 if (transition->CanBeDeprecated()) {
367 __ lwz(scratch, FieldMemOperand(map_reg, Map::kBitField3Offset));
368 __ DecodeField<Map::Deprecated>(r0, scratch, SetRC);
369 __ bne(miss, cr0);
370 }
371 }
372
373
374 void NamedStoreHandlerCompiler::GenerateConstantCheck(Register map_reg,
375 int descriptor,
376 Register value_reg,
377 Register scratch,
378 Label* miss_label) {
379 DCHECK(!map_reg.is(scratch));
380 DCHECK(!map_reg.is(value_reg));
381 DCHECK(!value_reg.is(scratch));
382 __ LoadInstanceDescriptors(map_reg, scratch);
383 __ LoadP(scratch, FieldMemOperand(
384 scratch, DescriptorArray::GetValueOffset(descriptor)));
385 __ cmp(value_reg, scratch);
386 __ bne(miss_label);
387 }
388
389 void NamedStoreHandlerCompiler::GenerateFieldTypeChecks(FieldType* field_type,
390 Register value_reg,
391 Label* miss_label) {
392 Register map_reg = scratch1();
393 Register scratch = scratch2();
394 DCHECK(!value_reg.is(map_reg));
395 DCHECK(!value_reg.is(scratch));
396 __ JumpIfSmi(value_reg, miss_label);
397 if (field_type->IsClass()) {
398 __ LoadP(map_reg, FieldMemOperand(value_reg, HeapObject::kMapOffset));
399 __ CmpWeakValue(map_reg, Map::WeakCellForMap(field_type->AsClass()),
400 scratch);
401 __ bne(miss_label);
402 }
403 }
404
405 void PropertyHandlerCompiler::GenerateAccessCheck( 333 void PropertyHandlerCompiler::GenerateAccessCheck(
406 Handle<WeakCell> native_context_cell, Register scratch1, Register scratch2, 334 Handle<WeakCell> native_context_cell, Register scratch1, Register scratch2,
407 Label* miss, bool compare_native_contexts_only) { 335 Label* miss, bool compare_native_contexts_only) {
408 Label done; 336 Label done;
409 // Load current native context. 337 // Load current native context.
410 __ LoadP(scratch1, NativeContextMemOperand()); 338 __ LoadP(scratch1, NativeContextMemOperand());
411 // Load expected native context. 339 // Load expected native context.
412 __ LoadWeakValue(scratch2, native_context_cell, miss); 340 __ LoadWeakValue(scratch2, native_context_cell, miss);
413 __ cmp(scratch1, scratch2); 341 __ cmp(scratch1, scratch2);
414 342
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 if (!miss->is_unused()) { 459 if (!miss->is_unused()) {
532 Label success; 460 Label success;
533 __ b(&success); 461 __ b(&success);
534 GenerateRestoreName(miss, name); 462 GenerateRestoreName(miss, name);
535 if (IC::ICUseVector(kind())) PopVectorAndSlot(); 463 if (IC::ICUseVector(kind())) PopVectorAndSlot();
536 TailCallBuiltin(masm(), MissBuiltin(kind())); 464 TailCallBuiltin(masm(), MissBuiltin(kind()));
537 __ bind(&success); 465 __ bind(&success);
538 } 466 }
539 } 467 }
540 468
541
542 void NamedLoadHandlerCompiler::GenerateLoadConstant(Handle<Object> value) {
543 // Return the constant value.
544 __ Move(r3, value);
545 __ Ret();
546 }
547
548
549 void NamedLoadHandlerCompiler::GenerateLoadInterceptorWithFollowup( 469 void NamedLoadHandlerCompiler::GenerateLoadInterceptorWithFollowup(
550 LookupIterator* it, Register holder_reg) { 470 LookupIterator* it, Register holder_reg) {
551 DCHECK(holder()->HasNamedInterceptor()); 471 DCHECK(holder()->HasNamedInterceptor());
552 DCHECK(!holder()->GetNamedInterceptor()->getter()->IsUndefined(isolate())); 472 DCHECK(!holder()->GetNamedInterceptor()->getter()->IsUndefined(isolate()));
553 473
554 // Compile the interceptor call, followed by inline code to load the 474 // Compile the interceptor call, followed by inline code to load the
555 // property from further up the prototype chain if the call fails. 475 // property from further up the prototype chain if the call fails.
556 // Check that the maps haven't changed. 476 // Check that the maps haven't changed.
557 DCHECK(holder_reg.is(receiver()) || holder_reg.is(scratch1())); 477 DCHECK(holder_reg.is(receiver()) || holder_reg.is(scratch1()));
558 478
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 // Return the generated code. 606 // Return the generated code.
687 return GetCode(kind(), name); 607 return GetCode(kind(), name);
688 } 608 }
689 609
690 610
691 #undef __ 611 #undef __
692 } // namespace internal 612 } // namespace internal
693 } // namespace v8 613 } // namespace v8
694 614
695 #endif // V8_TARGET_ARCH_ARM 615 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/ic/mips64/ic-mips64.cc ('k') | src/ic/ppc/ic-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698