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

Side by Side Diff: src/ic/s390/handler-compiler-s390.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/ppc/ic-ppc.cc ('k') | src/ic/s390/ic-s390.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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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_S390 5 #if V8_TARGET_ARCH_S390
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 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 MacroAssembler* masm = this->masm(); 118 MacroAssembler* masm = this->masm();
119 __ Pop(slot, vector); 119 __ Pop(slot, vector);
120 } 120 }
121 121
122 void PropertyHandlerCompiler::DiscardVectorAndSlot() { 122 void PropertyHandlerCompiler::DiscardVectorAndSlot() {
123 MacroAssembler* masm = this->masm(); 123 MacroAssembler* masm = this->masm();
124 // Remove vector and slot. 124 // Remove vector and slot.
125 __ la(sp, MemOperand(sp, 2 * kPointerSize)); 125 __ la(sp, MemOperand(sp, 2 * kPointerSize));
126 } 126 }
127 127
128 void PropertyHandlerCompiler::PushReturnAddress(Register tmp) {
129 // No-op. Return address is in lr register.
130 }
131
132 void PropertyHandlerCompiler::PopReturnAddress(Register tmp) {
133 // No-op. Return address is in lr register.
134 }
135
136 void PropertyHandlerCompiler::GenerateDictionaryNegativeLookup( 128 void PropertyHandlerCompiler::GenerateDictionaryNegativeLookup(
137 MacroAssembler* masm, Label* miss_label, Register receiver, 129 MacroAssembler* masm, Label* miss_label, Register receiver,
138 Handle<Name> name, Register scratch0, Register scratch1) { 130 Handle<Name> name, Register scratch0, Register scratch1) {
139 DCHECK(name->IsUniqueName()); 131 DCHECK(name->IsUniqueName());
140 DCHECK(!receiver.is(scratch0)); 132 DCHECK(!receiver.is(scratch0));
141 Counters* counters = masm->isolate()->counters(); 133 Counters* counters = masm->isolate()->counters();
142 __ IncrementCounter(counters->negative_lookups(), 1, scratch0, scratch1); 134 __ IncrementCounter(counters->negative_lookups(), 1, scratch0, scratch1);
143 __ IncrementCounter(counters->negative_lookups_miss(), 1, scratch0, scratch1); 135 __ IncrementCounter(counters->negative_lookups_miss(), 1, scratch0, scratch1);
144 136
145 Label done; 137 Label done;
(...skipping 24 matching lines...) Expand all
170 162
171 // Restore the temporarily used register. 163 // Restore the temporarily used register.
172 __ LoadP(properties, FieldMemOperand(receiver, JSObject::kPropertiesOffset)); 164 __ LoadP(properties, FieldMemOperand(receiver, JSObject::kPropertiesOffset));
173 165
174 NameDictionaryLookupStub::GenerateNegativeLookup( 166 NameDictionaryLookupStub::GenerateNegativeLookup(
175 masm, miss_label, &done, receiver, properties, name, scratch1); 167 masm, miss_label, &done, receiver, properties, name, scratch1);
176 __ bind(&done); 168 __ bind(&done);
177 __ DecrementCounter(counters->negative_lookups_miss(), 1, scratch0, scratch1); 169 __ DecrementCounter(counters->negative_lookups_miss(), 1, scratch0, scratch1);
178 } 170 }
179 171
180 void NamedLoadHandlerCompiler::GenerateDirectLoadGlobalFunctionPrototype(
181 MacroAssembler* masm, int index, Register result, Label* miss) {
182 __ LoadNativeContextSlot(index, result);
183 // Load its initial map. The global functions all have initial maps.
184 __ LoadP(result,
185 FieldMemOperand(result, JSFunction::kPrototypeOrInitialMapOffset));
186 // Load the prototype from the initial map.
187 __ LoadP(result, FieldMemOperand(result, Map::kPrototypeOffset));
188 }
189
190 void NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype( 172 void NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype(
191 MacroAssembler* masm, Register receiver, Register scratch1, 173 MacroAssembler* masm, Register receiver, Register scratch1,
192 Register scratch2, Label* miss_label) { 174 Register scratch2, Label* miss_label) {
193 __ TryGetFunctionPrototype(receiver, scratch1, scratch2, miss_label); 175 __ TryGetFunctionPrototype(receiver, scratch1, scratch2, miss_label);
194 __ LoadRR(r2, scratch1); 176 __ LoadRR(r2, scratch1);
195 __ Ret(); 177 __ Ret();
196 } 178 }
197 179
198 // Generate code to check that a global property cell is empty. Create 180 // Generate code to check that a global property cell is empty. Create
199 // the property cell at compilation time if no cell exists for the 181 // the property cell at compilation time if no cell exists for the
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 #define __ ACCESS_MASM(masm()) 310 #define __ ACCESS_MASM(masm())
329 311
330 void NamedStoreHandlerCompiler::GenerateRestoreName(Label* label, 312 void NamedStoreHandlerCompiler::GenerateRestoreName(Label* label,
331 Handle<Name> name) { 313 Handle<Name> name) {
332 if (!label->is_unused()) { 314 if (!label->is_unused()) {
333 __ bind(label); 315 __ bind(label);
334 __ mov(this->name(), Operand(name)); 316 __ mov(this->name(), Operand(name));
335 } 317 }
336 } 318 }
337 319
338 void NamedStoreHandlerCompiler::GenerateRestoreName(Handle<Name> name) {
339 __ mov(this->name(), Operand(name));
340 }
341
342 void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition,
343 Register map_reg,
344 Register scratch,
345 Label* miss) {
346 Handle<WeakCell> cell = Map::WeakCellForMap(transition);
347 DCHECK(!map_reg.is(scratch));
348 __ LoadWeakValue(map_reg, cell, miss);
349 if (transition->CanBeDeprecated()) {
350 __ LoadlW(scratch, FieldMemOperand(map_reg, Map::kBitField3Offset));
351 __ DecodeField<Map::Deprecated>(r0, scratch);
352 __ bne(miss);
353 }
354 }
355
356 void NamedStoreHandlerCompiler::GenerateConstantCheck(Register map_reg,
357 int descriptor,
358 Register value_reg,
359 Register scratch,
360 Label* miss_label) {
361 DCHECK(!map_reg.is(scratch));
362 DCHECK(!map_reg.is(value_reg));
363 DCHECK(!value_reg.is(scratch));
364 __ LoadInstanceDescriptors(map_reg, scratch);
365 __ CmpP(value_reg, FieldMemOperand(
366 scratch, DescriptorArray::GetValueOffset(descriptor)));
367 __ bne(miss_label);
368 }
369
370 void NamedStoreHandlerCompiler::GenerateFieldTypeChecks(FieldType* field_type,
371 Register value_reg,
372 Label* miss_label) {
373 Register map_reg = scratch1();
374 Register scratch = scratch2();
375 DCHECK(!value_reg.is(map_reg));
376 DCHECK(!value_reg.is(scratch));
377 __ JumpIfSmi(value_reg, miss_label);
378 if (field_type->IsClass()) {
379 __ LoadP(map_reg, FieldMemOperand(value_reg, HeapObject::kMapOffset));
380 __ CmpWeakValue(map_reg, Map::WeakCellForMap(field_type->AsClass()),
381 scratch);
382 __ bne(miss_label);
383 }
384 }
385
386 void PropertyHandlerCompiler::GenerateAccessCheck( 320 void PropertyHandlerCompiler::GenerateAccessCheck(
387 Handle<WeakCell> native_context_cell, Register scratch1, Register scratch2, 321 Handle<WeakCell> native_context_cell, Register scratch1, Register scratch2,
388 Label* miss, bool compare_native_contexts_only) { 322 Label* miss, bool compare_native_contexts_only) {
389 Label done; 323 Label done;
390 // Load current native context. 324 // Load current native context.
391 __ LoadP(scratch1, NativeContextMemOperand()); 325 __ LoadP(scratch1, NativeContextMemOperand());
392 // Load expected native context. 326 // Load expected native context.
393 __ LoadWeakValue(scratch2, native_context_cell, miss); 327 __ LoadWeakValue(scratch2, native_context_cell, miss);
394 __ CmpP(scratch1, scratch2); 328 __ CmpP(scratch1, scratch2);
395 329
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 if (!miss->is_unused()) { 439 if (!miss->is_unused()) {
506 Label success; 440 Label success;
507 __ b(&success); 441 __ b(&success);
508 GenerateRestoreName(miss, name); 442 GenerateRestoreName(miss, name);
509 if (IC::ICUseVector(kind())) PopVectorAndSlot(); 443 if (IC::ICUseVector(kind())) PopVectorAndSlot();
510 TailCallBuiltin(masm(), MissBuiltin(kind())); 444 TailCallBuiltin(masm(), MissBuiltin(kind()));
511 __ bind(&success); 445 __ bind(&success);
512 } 446 }
513 } 447 }
514 448
515 void NamedLoadHandlerCompiler::GenerateLoadConstant(Handle<Object> value) {
516 // Return the constant value.
517 __ Move(r2, value);
518 __ Ret();
519 }
520
521 void NamedLoadHandlerCompiler::GenerateLoadInterceptorWithFollowup( 449 void NamedLoadHandlerCompiler::GenerateLoadInterceptorWithFollowup(
522 LookupIterator* it, Register holder_reg) { 450 LookupIterator* it, Register holder_reg) {
523 DCHECK(holder()->HasNamedInterceptor()); 451 DCHECK(holder()->HasNamedInterceptor());
524 DCHECK(!holder()->GetNamedInterceptor()->getter()->IsUndefined(isolate())); 452 DCHECK(!holder()->GetNamedInterceptor()->getter()->IsUndefined(isolate()));
525 453
526 // Compile the interceptor call, followed by inline code to load the 454 // Compile the interceptor call, followed by inline code to load the
527 // property from further up the prototype chain if the call fails. 455 // property from further up the prototype chain if the call fails.
528 // Check that the maps haven't changed. 456 // Check that the maps haven't changed.
529 DCHECK(holder_reg.is(receiver()) || holder_reg.is(scratch1())); 457 DCHECK(holder_reg.is(receiver()) || holder_reg.is(scratch1()));
530 458
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 580
653 // Return the generated code. 581 // Return the generated code.
654 return GetCode(kind(), name); 582 return GetCode(kind(), name);
655 } 583 }
656 584
657 #undef __ 585 #undef __
658 } // namespace internal 586 } // namespace internal
659 } // namespace v8 587 } // namespace v8
660 588
661 #endif // V8_TARGET_ARCH_ARM 589 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/ic/ppc/ic-ppc.cc ('k') | src/ic/s390/ic-s390.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698