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

Side by Side Diff: src/ic/arm/ic-arm.cc

Issue 1424153003: VectorICs: Remove --vector-stores flag. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Response to Hannes comment. Created 5 years, 1 month 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/arm/handler-compiler-arm.cc ('k') | src/ic/arm/ic-compiler-arm.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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_ARM 5 #if V8_TARGET_ARCH_ARM
6 6
7 #include "src/codegen.h" 7 #include "src/codegen.h"
8 #include "src/ic/ic.h" 8 #include "src/ic/ic.h"
9 #include "src/ic/ic-compiler.h" 9 #include "src/ic/ic-compiler.h"
10 #include "src/ic/stub-cache.h" 10 #include "src/ic/stub-cache.h"
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 __ Ret(); 455 __ Ret();
456 456
457 __ bind(&index_name); 457 __ bind(&index_name);
458 __ IndexFromHash(r3, key); 458 __ IndexFromHash(r3, key);
459 // Now jump to the place where smi keys are handled. 459 // Now jump to the place where smi keys are handled.
460 __ jmp(&index_smi); 460 __ jmp(&index_smi);
461 } 461 }
462 462
463 463
464 static void StoreIC_PushArgs(MacroAssembler* masm) { 464 static void StoreIC_PushArgs(MacroAssembler* masm) {
465 if (FLAG_vector_stores) { 465 __ Push(StoreDescriptor::ReceiverRegister(), StoreDescriptor::NameRegister(),
466 __ Push(StoreDescriptor::ReceiverRegister(), 466 StoreDescriptor::ValueRegister(),
467 StoreDescriptor::NameRegister(), StoreDescriptor::ValueRegister(), 467 VectorStoreICDescriptor::SlotRegister(),
468 VectorStoreICDescriptor::SlotRegister(), 468 VectorStoreICDescriptor::VectorRegister());
469 VectorStoreICDescriptor::VectorRegister());
470 } else {
471 __ Push(StoreDescriptor::ReceiverRegister(),
472 StoreDescriptor::NameRegister(), StoreDescriptor::ValueRegister());
473 }
474 } 469 }
475 470
476 471
477 void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) { 472 void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) {
478 StoreIC_PushArgs(masm); 473 StoreIC_PushArgs(masm);
479 474
480 int args = FLAG_vector_stores ? 5 : 3; 475 __ TailCallRuntime(Runtime::kKeyedStoreIC_Miss, 5, 1);
481 __ TailCallRuntime(Runtime::kKeyedStoreIC_Miss, args, 1);
482 } 476 }
483 477
484 478
485 static void KeyedStoreGenerateMegamorphicHelper( 479 static void KeyedStoreGenerateMegamorphicHelper(
486 MacroAssembler* masm, Label* fast_object, Label* fast_double, Label* slow, 480 MacroAssembler* masm, Label* fast_object, Label* fast_double, Label* slow,
487 KeyedStoreCheckMap check_map, KeyedStoreIncrementLength increment_length, 481 KeyedStoreCheckMap check_map, KeyedStoreIncrementLength increment_length,
488 Register value, Register key, Register receiver, Register receiver_map, 482 Register value, Register key, Register receiver, Register receiver_map,
489 Register elements_map, Register elements) { 483 Register elements_map, Register elements) {
490 Label transition_smi_elements; 484 Label transition_smi_elements;
491 Label finish_object_store, non_double_value, transition_double_elements; 485 Label finish_object_store, non_double_value, transition_double_elements;
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 // r1: key. 677 // r1: key.
684 // r2: receiver. 678 // r2: receiver.
685 PropertyICCompiler::GenerateRuntimeSetProperty(masm, language_mode); 679 PropertyICCompiler::GenerateRuntimeSetProperty(masm, language_mode);
686 // Never returns to here. 680 // Never returns to here.
687 681
688 __ bind(&maybe_name_key); 682 __ bind(&maybe_name_key);
689 __ ldr(r4, FieldMemOperand(key, HeapObject::kMapOffset)); 683 __ ldr(r4, FieldMemOperand(key, HeapObject::kMapOffset));
690 __ ldrb(r4, FieldMemOperand(r4, Map::kInstanceTypeOffset)); 684 __ ldrb(r4, FieldMemOperand(r4, Map::kInstanceTypeOffset));
691 __ JumpIfNotUniqueNameInstanceType(r4, &slow); 685 __ JumpIfNotUniqueNameInstanceType(r4, &slow);
692 686
693 // We use register r8 when FLAG_vector_stores is enabled, because otherwise 687 // We use register r8, because otherwise probing the megamorphic stub cache
694 // probing the megamorphic stub cache would require pushing temporaries on 688 // would require pushing temporaries on the stack.
695 // the stack.
696 // TODO(mvstanton): quit using register r8 when 689 // TODO(mvstanton): quit using register r8 when
697 // FLAG_enable_embedded_constant_pool is turned on. 690 // FLAG_enable_embedded_constant_pool is turned on.
698 DCHECK(!FLAG_vector_stores || !FLAG_enable_embedded_constant_pool); 691 DCHECK(!FLAG_enable_embedded_constant_pool);
699 Register temporary2 = FLAG_vector_stores ? r8 : r4; 692 Register temporary2 = r8;
700 if (FLAG_vector_stores) { 693 // The handlers in the stub cache expect a vector and slot. Since we won't
701 // The handlers in the stub cache expect a vector and slot. Since we won't 694 // change the IC from any downstream misses, a dummy vector can be used.
702 // change the IC from any downstream misses, a dummy vector can be used. 695 Register vector = VectorStoreICDescriptor::VectorRegister();
703 Register vector = VectorStoreICDescriptor::VectorRegister(); 696 Register slot = VectorStoreICDescriptor::SlotRegister();
704 Register slot = VectorStoreICDescriptor::SlotRegister();
705 697
706 DCHECK(!AreAliased(vector, slot, r5, temporary2, r6, r9)); 698 DCHECK(!AreAliased(vector, slot, r5, temporary2, r6, r9));
707 Handle<TypeFeedbackVector> dummy_vector = 699 Handle<TypeFeedbackVector> dummy_vector =
708 TypeFeedbackVector::DummyVector(masm->isolate()); 700 TypeFeedbackVector::DummyVector(masm->isolate());
709 int slot_index = dummy_vector->GetIndex( 701 int slot_index = dummy_vector->GetIndex(
710 FeedbackVectorSlot(TypeFeedbackVector::kDummyKeyedStoreICSlot)); 702 FeedbackVectorSlot(TypeFeedbackVector::kDummyKeyedStoreICSlot));
711 __ LoadRoot(vector, Heap::kDummyVectorRootIndex); 703 __ LoadRoot(vector, Heap::kDummyVectorRootIndex);
712 __ mov(slot, Operand(Smi::FromInt(slot_index))); 704 __ mov(slot, Operand(Smi::FromInt(slot_index)));
713 }
714 705
715 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags( 706 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags(
716 Code::ComputeHandlerFlags(Code::STORE_IC)); 707 Code::ComputeHandlerFlags(Code::STORE_IC));
717 masm->isolate()->stub_cache()->GenerateProbe( 708 masm->isolate()->stub_cache()->GenerateProbe(
718 masm, Code::STORE_IC, flags, receiver, key, r5, temporary2, r6, r9); 709 masm, Code::STORE_IC, flags, receiver, key, r5, temporary2, r6, r9);
719 // Cache miss. 710 // Cache miss.
720 __ b(&miss); 711 __ b(&miss);
721 712
722 // Extra capacity case: Check if there is extra capacity to 713 // Extra capacity case: Check if there is extra capacity to
723 // perform the store and update the length. Used for adding one 714 // perform the store and update the length. Used for adding one
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 772
782 // Cache miss: Jump to runtime. 773 // Cache miss: Jump to runtime.
783 GenerateMiss(masm); 774 GenerateMiss(masm);
784 } 775 }
785 776
786 777
787 void StoreIC::GenerateMiss(MacroAssembler* masm) { 778 void StoreIC::GenerateMiss(MacroAssembler* masm) {
788 StoreIC_PushArgs(masm); 779 StoreIC_PushArgs(masm);
789 780
790 // Perform tail call to the entry. 781 // Perform tail call to the entry.
791 int args = FLAG_vector_stores ? 5 : 3; 782 __ TailCallRuntime(Runtime::kStoreIC_Miss, 5, 1);
792 __ TailCallRuntime(Runtime::kStoreIC_Miss, args, 1);
793 } 783 }
794 784
795 785
796 void StoreIC::GenerateNormal(MacroAssembler* masm) { 786 void StoreIC::GenerateNormal(MacroAssembler* masm) {
797 Label miss; 787 Label miss;
798 Register receiver = StoreDescriptor::ReceiverRegister(); 788 Register receiver = StoreDescriptor::ReceiverRegister();
799 Register name = StoreDescriptor::NameRegister(); 789 Register name = StoreDescriptor::NameRegister();
800 Register value = StoreDescriptor::ValueRegister(); 790 Register value = StoreDescriptor::ValueRegister();
801 Register dictionary = r5; 791 Register dictionary = r5;
802 DCHECK(receiver.is(r1)); 792 DCHECK(receiver.is(r1));
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 patcher.EmitCondition(ne); 899 patcher.EmitCondition(ne);
910 } else { 900 } else {
911 DCHECK(Assembler::GetCondition(branch_instr) == ne); 901 DCHECK(Assembler::GetCondition(branch_instr) == ne);
912 patcher.EmitCondition(eq); 902 patcher.EmitCondition(eq);
913 } 903 }
914 } 904 }
915 } // namespace internal 905 } // namespace internal
916 } // namespace v8 906 } // namespace v8
917 907
918 #endif // V8_TARGET_ARCH_ARM 908 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/ic/arm/handler-compiler-arm.cc ('k') | src/ic/arm/ic-compiler-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698