OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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_ARM64 | 5 #if V8_TARGET_ARCH_ARM64 |
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 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 StoreWithVectorDescriptor::VectorRegister()); | 451 StoreWithVectorDescriptor::VectorRegister()); |
452 } | 452 } |
453 | 453 |
454 | 454 |
455 void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) { | 455 void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) { |
456 ASM_LOCATION("KeyedStoreIC::GenerateMiss"); | 456 ASM_LOCATION("KeyedStoreIC::GenerateMiss"); |
457 StoreIC_PushArgs(masm); | 457 StoreIC_PushArgs(masm); |
458 __ TailCallRuntime(Runtime::kKeyedStoreIC_Miss); | 458 __ TailCallRuntime(Runtime::kKeyedStoreIC_Miss); |
459 } | 459 } |
460 | 460 |
| 461 void KeyedStoreIC::GenerateSlow(MacroAssembler* masm) { |
| 462 ASM_LOCATION("KeyedStoreIC::GenerateSlow"); |
| 463 StoreIC_PushArgs(masm); |
| 464 |
| 465 // The slow case calls into the runtime to complete the store without causing |
| 466 // an IC miss that would otherwise cause a transition to the generic stub. |
| 467 __ TailCallRuntime(Runtime::kKeyedStoreIC_Slow); |
| 468 } |
461 | 469 |
462 static void KeyedStoreGenerateMegamorphicHelper( | 470 static void KeyedStoreGenerateMegamorphicHelper( |
463 MacroAssembler* masm, Label* fast_object, Label* fast_double, Label* slow, | 471 MacroAssembler* masm, Label* fast_object, Label* fast_double, Label* slow, |
464 KeyedStoreCheckMap check_map, KeyedStoreIncrementLength increment_length, | 472 KeyedStoreCheckMap check_map, KeyedStoreIncrementLength increment_length, |
465 Register value, Register key, Register receiver, Register receiver_map, | 473 Register value, Register key, Register receiver, Register receiver_map, |
466 Register elements_map, Register elements) { | 474 Register elements_map, Register elements) { |
467 DCHECK(!AreAliased(value, key, receiver, receiver_map, elements_map, elements, | 475 DCHECK(!AreAliased(value, key, receiver, receiver_map, elements_map, elements, |
468 x10, x11)); | 476 x10, x11)); |
469 | 477 |
470 Label transition_smi_elements; | 478 Label transition_smi_elements; |
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
835 } else { | 843 } else { |
836 DCHECK(to_patch->Mask(TestBranchMask) == TBNZ); | 844 DCHECK(to_patch->Mask(TestBranchMask) == TBNZ); |
837 // This is JumpIfSmi(smi_reg, branch_imm). | 845 // This is JumpIfSmi(smi_reg, branch_imm). |
838 patcher.tbz(smi_reg, 0, branch_imm); | 846 patcher.tbz(smi_reg, 0, branch_imm); |
839 } | 847 } |
840 } | 848 } |
841 } // namespace internal | 849 } // namespace internal |
842 } // namespace v8 | 850 } // namespace v8 |
843 | 851 |
844 #endif // V8_TARGET_ARCH_ARM64 | 852 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |