OLD | NEW |
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_MIPS | 5 #if V8_TARGET_ARCH_MIPS |
6 | 6 |
7 #include "src/code-stubs.h" | 7 #include "src/code-stubs.h" |
8 #include "src/api-arguments.h" | 8 #include "src/api-arguments.h" |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
(...skipping 3779 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3790 HandleArrayCases(masm, feedback, receiver_map, scratch1, t5, false, &miss); | 3790 HandleArrayCases(masm, feedback, receiver_map, scratch1, t5, false, &miss); |
3791 | 3791 |
3792 __ bind(&miss); | 3792 __ bind(&miss); |
3793 KeyedLoadIC::GenerateMiss(masm); | 3793 KeyedLoadIC::GenerateMiss(masm); |
3794 | 3794 |
3795 __ bind(&load_smi_map); | 3795 __ bind(&load_smi_map); |
3796 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); | 3796 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); |
3797 __ jmp(&compare_map); | 3797 __ jmp(&compare_map); |
3798 } | 3798 } |
3799 | 3799 |
3800 | 3800 void StoreICTrampolineStub::Generate(MacroAssembler* masm) { |
3801 void VectorStoreICTrampolineStub::Generate(MacroAssembler* masm) { | |
3802 __ EmitLoadTypeFeedbackVector(VectorStoreICDescriptor::VectorRegister()); | 3801 __ EmitLoadTypeFeedbackVector(VectorStoreICDescriptor::VectorRegister()); |
3803 VectorStoreICStub stub(isolate(), state()); | 3802 StoreICStub stub(isolate(), state()); |
3804 stub.GenerateForTrampoline(masm); | 3803 stub.GenerateForTrampoline(masm); |
3805 } | 3804 } |
3806 | 3805 |
3807 | 3806 void KeyedStoreICTrampolineStub::Generate(MacroAssembler* masm) { |
3808 void VectorKeyedStoreICTrampolineStub::Generate(MacroAssembler* masm) { | |
3809 __ EmitLoadTypeFeedbackVector(VectorStoreICDescriptor::VectorRegister()); | 3807 __ EmitLoadTypeFeedbackVector(VectorStoreICDescriptor::VectorRegister()); |
3810 VectorKeyedStoreICStub stub(isolate(), state()); | 3808 KeyedStoreICStub stub(isolate(), state()); |
3811 stub.GenerateForTrampoline(masm); | 3809 stub.GenerateForTrampoline(masm); |
3812 } | 3810 } |
3813 | 3811 |
| 3812 void StoreICStub::Generate(MacroAssembler* masm) { GenerateImpl(masm, false); } |
3814 | 3813 |
3815 void VectorStoreICStub::Generate(MacroAssembler* masm) { | 3814 void StoreICStub::GenerateForTrampoline(MacroAssembler* masm) { |
3816 GenerateImpl(masm, false); | |
3817 } | |
3818 | |
3819 | |
3820 void VectorStoreICStub::GenerateForTrampoline(MacroAssembler* masm) { | |
3821 GenerateImpl(masm, true); | 3815 GenerateImpl(masm, true); |
3822 } | 3816 } |
3823 | 3817 |
3824 | 3818 void StoreICStub::GenerateImpl(MacroAssembler* masm, bool in_frame) { |
3825 void VectorStoreICStub::GenerateImpl(MacroAssembler* masm, bool in_frame) { | |
3826 Register receiver = VectorStoreICDescriptor::ReceiverRegister(); // a1 | 3819 Register receiver = VectorStoreICDescriptor::ReceiverRegister(); // a1 |
3827 Register key = VectorStoreICDescriptor::NameRegister(); // a2 | 3820 Register key = VectorStoreICDescriptor::NameRegister(); // a2 |
3828 Register vector = VectorStoreICDescriptor::VectorRegister(); // a3 | 3821 Register vector = VectorStoreICDescriptor::VectorRegister(); // a3 |
3829 Register slot = VectorStoreICDescriptor::SlotRegister(); // t0 | 3822 Register slot = VectorStoreICDescriptor::SlotRegister(); // t0 |
3830 DCHECK(VectorStoreICDescriptor::ValueRegister().is(a0)); // a0 | 3823 DCHECK(VectorStoreICDescriptor::ValueRegister().is(a0)); // a0 |
3831 Register feedback = t1; | 3824 Register feedback = t1; |
3832 Register receiver_map = t2; | 3825 Register receiver_map = t2; |
3833 Register scratch1 = t5; | 3826 Register scratch1 = t5; |
3834 | 3827 |
3835 __ Lsa(feedback, vector, slot, kPointerSizeLog2 - kSmiTagSize); | 3828 __ Lsa(feedback, vector, slot, kPointerSizeLog2 - kSmiTagSize); |
(...skipping 24 matching lines...) Expand all Loading... |
3860 masm, receiver, key, feedback, receiver_map, scratch1, scratch2); | 3853 masm, receiver, key, feedback, receiver_map, scratch1, scratch2); |
3861 | 3854 |
3862 __ bind(&miss); | 3855 __ bind(&miss); |
3863 StoreIC::GenerateMiss(masm); | 3856 StoreIC::GenerateMiss(masm); |
3864 | 3857 |
3865 __ bind(&load_smi_map); | 3858 __ bind(&load_smi_map); |
3866 __ Branch(USE_DELAY_SLOT, &compare_map); | 3859 __ Branch(USE_DELAY_SLOT, &compare_map); |
3867 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); // In delay slot. | 3860 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); // In delay slot. |
3868 } | 3861 } |
3869 | 3862 |
3870 | 3863 void KeyedStoreICStub::Generate(MacroAssembler* masm) { |
3871 void VectorKeyedStoreICStub::Generate(MacroAssembler* masm) { | |
3872 GenerateImpl(masm, false); | 3864 GenerateImpl(masm, false); |
3873 } | 3865 } |
3874 | 3866 |
3875 | 3867 void KeyedStoreICStub::GenerateForTrampoline(MacroAssembler* masm) { |
3876 void VectorKeyedStoreICStub::GenerateForTrampoline(MacroAssembler* masm) { | |
3877 GenerateImpl(masm, true); | 3868 GenerateImpl(masm, true); |
3878 } | 3869 } |
3879 | 3870 |
3880 | 3871 |
3881 static void HandlePolymorphicStoreCase(MacroAssembler* masm, Register feedback, | 3872 static void HandlePolymorphicStoreCase(MacroAssembler* masm, Register feedback, |
3882 Register receiver_map, Register scratch1, | 3873 Register receiver_map, Register scratch1, |
3883 Register scratch2, Label* miss) { | 3874 Register scratch2, Label* miss) { |
3884 // feedback initially contains the feedback array | 3875 // feedback initially contains the feedback array |
3885 Label next_loop, prepare_next; | 3876 Label next_loop, prepare_next; |
3886 Label start_polymorphic; | 3877 Label start_polymorphic; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3932 __ Jump(t9); | 3923 __ Jump(t9); |
3933 | 3924 |
3934 __ bind(&prepare_next); | 3925 __ bind(&prepare_next); |
3935 __ Addu(pointer_reg, pointer_reg, Operand(kPointerSize * 3)); | 3926 __ Addu(pointer_reg, pointer_reg, Operand(kPointerSize * 3)); |
3936 __ Branch(&next_loop, lt, pointer_reg, Operand(too_far)); | 3927 __ Branch(&next_loop, lt, pointer_reg, Operand(too_far)); |
3937 | 3928 |
3938 // We exhausted our array of map handler pairs. | 3929 // We exhausted our array of map handler pairs. |
3939 __ jmp(miss); | 3930 __ jmp(miss); |
3940 } | 3931 } |
3941 | 3932 |
3942 | 3933 void KeyedStoreICStub::GenerateImpl(MacroAssembler* masm, bool in_frame) { |
3943 void VectorKeyedStoreICStub::GenerateImpl(MacroAssembler* masm, bool in_frame) { | |
3944 Register receiver = VectorStoreICDescriptor::ReceiverRegister(); // a1 | 3934 Register receiver = VectorStoreICDescriptor::ReceiverRegister(); // a1 |
3945 Register key = VectorStoreICDescriptor::NameRegister(); // a2 | 3935 Register key = VectorStoreICDescriptor::NameRegister(); // a2 |
3946 Register vector = VectorStoreICDescriptor::VectorRegister(); // a3 | 3936 Register vector = VectorStoreICDescriptor::VectorRegister(); // a3 |
3947 Register slot = VectorStoreICDescriptor::SlotRegister(); // t0 | 3937 Register slot = VectorStoreICDescriptor::SlotRegister(); // t0 |
3948 DCHECK(VectorStoreICDescriptor::ValueRegister().is(a0)); // a0 | 3938 DCHECK(VectorStoreICDescriptor::ValueRegister().is(a0)); // a0 |
3949 Register feedback = t1; | 3939 Register feedback = t1; |
3950 Register receiver_map = t2; | 3940 Register receiver_map = t2; |
3951 Register scratch1 = t5; | 3941 Register scratch1 = t5; |
3952 | 3942 |
3953 __ Lsa(feedback, vector, slot, kPointerSizeLog2 - kSmiTagSize); | 3943 __ Lsa(feedback, vector, slot, kPointerSizeLog2 - kSmiTagSize); |
(...skipping 1461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5415 kStackUnwindSpace, kInvalidStackOffset, | 5405 kStackUnwindSpace, kInvalidStackOffset, |
5416 return_value_operand, NULL); | 5406 return_value_operand, NULL); |
5417 } | 5407 } |
5418 | 5408 |
5419 #undef __ | 5409 #undef __ |
5420 | 5410 |
5421 } // namespace internal | 5411 } // namespace internal |
5422 } // namespace v8 | 5412 } // namespace v8 |
5423 | 5413 |
5424 #endif // V8_TARGET_ARCH_MIPS | 5414 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |