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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_ARM | 7 #if V8_TARGET_ARCH_ARM |
8 | 8 |
9 #include "src/codegen.h" | 9 #include "src/codegen.h" |
10 #include "src/ic/ic.h" | 10 #include "src/ic/ic.h" |
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
715 receiver_map, r4, slow); | 715 receiver_map, r4, slow); |
716 mode = AllocationSite::GetMode(FAST_DOUBLE_ELEMENTS, FAST_ELEMENTS); | 716 mode = AllocationSite::GetMode(FAST_DOUBLE_ELEMENTS, FAST_ELEMENTS); |
717 ElementsTransitionGenerator::GenerateDoubleToObject( | 717 ElementsTransitionGenerator::GenerateDoubleToObject( |
718 masm, receiver, key, value, receiver_map, mode, slow); | 718 masm, receiver, key, value, receiver_map, mode, slow); |
719 __ ldr(elements, FieldMemOperand(receiver, JSObject::kElementsOffset)); | 719 __ ldr(elements, FieldMemOperand(receiver, JSObject::kElementsOffset)); |
720 __ jmp(&finish_object_store); | 720 __ jmp(&finish_object_store); |
721 } | 721 } |
722 | 722 |
723 | 723 |
724 void KeyedStoreIC::GenerateMegamorphic(MacroAssembler* masm, | 724 void KeyedStoreIC::GenerateMegamorphic(MacroAssembler* masm, |
725 StrictMode strict_mode) { | 725 LanguageMode language_mode) { |
726 // ---------- S t a t e -------------- | 726 // ---------- S t a t e -------------- |
727 // -- r0 : value | 727 // -- r0 : value |
728 // -- r1 : key | 728 // -- r1 : key |
729 // -- r2 : receiver | 729 // -- r2 : receiver |
730 // -- lr : return address | 730 // -- lr : return address |
731 // ----------------------------------- | 731 // ----------------------------------- |
732 Label slow, fast_object, fast_object_grow; | 732 Label slow, fast_object, fast_object_grow; |
733 Label fast_double, fast_double_grow; | 733 Label fast_double, fast_double_grow; |
734 Label array, extra, check_if_double_array, maybe_name_key, miss; | 734 Label array, extra, check_if_double_array, maybe_name_key, miss; |
735 | 735 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
770 __ ldr(ip, FieldMemOperand(elements, FixedArray::kLengthOffset)); | 770 __ ldr(ip, FieldMemOperand(elements, FixedArray::kLengthOffset)); |
771 __ cmp(key, Operand(ip)); | 771 __ cmp(key, Operand(ip)); |
772 __ b(lo, &fast_object); | 772 __ b(lo, &fast_object); |
773 | 773 |
774 // Slow case, handle jump to runtime. | 774 // Slow case, handle jump to runtime. |
775 __ bind(&slow); | 775 __ bind(&slow); |
776 // Entry registers are intact. | 776 // Entry registers are intact. |
777 // r0: value. | 777 // r0: value. |
778 // r1: key. | 778 // r1: key. |
779 // r2: receiver. | 779 // r2: receiver. |
780 PropertyICCompiler::GenerateRuntimeSetProperty(masm, strict_mode); | 780 PropertyICCompiler::GenerateRuntimeSetProperty(masm, language_mode); |
781 // Never returns to here. | 781 // Never returns to here. |
782 | 782 |
783 __ bind(&maybe_name_key); | 783 __ bind(&maybe_name_key); |
784 __ ldr(r4, FieldMemOperand(key, HeapObject::kMapOffset)); | 784 __ ldr(r4, FieldMemOperand(key, HeapObject::kMapOffset)); |
785 __ ldrb(r4, FieldMemOperand(r4, Map::kInstanceTypeOffset)); | 785 __ ldrb(r4, FieldMemOperand(r4, Map::kInstanceTypeOffset)); |
786 __ JumpIfNotUniqueNameInstanceType(r4, &slow); | 786 __ JumpIfNotUniqueNameInstanceType(r4, &slow); |
787 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags( | 787 Code::Flags flags = Code::RemoveTypeAndHolderFromFlags( |
788 Code::ComputeHandlerFlags(Code::STORE_IC)); | 788 Code::ComputeHandlerFlags(Code::STORE_IC)); |
789 masm->isolate()->stub_cache()->GenerateProbe( | 789 masm->isolate()->stub_cache()->GenerateProbe( |
790 masm, Code::STORE_IC, flags, false, receiver, key, r3, r4, r5, r6); | 790 masm, Code::STORE_IC, flags, false, receiver, key, r3, r4, r5, r6); |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
981 patcher.EmitCondition(ne); | 981 patcher.EmitCondition(ne); |
982 } else { | 982 } else { |
983 DCHECK(Assembler::GetCondition(branch_instr) == ne); | 983 DCHECK(Assembler::GetCondition(branch_instr) == ne); |
984 patcher.EmitCondition(eq); | 984 patcher.EmitCondition(eq); |
985 } | 985 } |
986 } | 986 } |
987 } | 987 } |
988 } // namespace v8::internal | 988 } // namespace v8::internal |
989 | 989 |
990 #endif // V8_TARGET_ARCH_ARM | 990 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |