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/code-factory.h" | 7 #include "src/code-factory.h" |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 #include "src/codegen.h" | 9 #include "src/codegen.h" |
10 #include "src/debug/debug.h" | 10 #include "src/debug/debug.h" |
(...skipping 1767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1778 // is already set in the cloned array. | 1778 // is already set in the cloned array. |
1779 if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue; | 1779 if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue; |
1780 | 1780 |
1781 if (!result_saved) { | 1781 if (!result_saved) { |
1782 __ Mov(x1, Smi::FromInt(expr->literal_index())); | 1782 __ Mov(x1, Smi::FromInt(expr->literal_index())); |
1783 __ Push(x0, x1); | 1783 __ Push(x0, x1); |
1784 result_saved = true; | 1784 result_saved = true; |
1785 } | 1785 } |
1786 VisitForAccumulatorValue(subexpr); | 1786 VisitForAccumulatorValue(subexpr); |
1787 | 1787 |
1788 if (has_fast_elements) { | 1788 if (FLAG_vector_stores) { |
| 1789 __ Mov(StoreDescriptor::NameRegister(), Smi::FromInt(array_index)); |
| 1790 __ Peek(StoreDescriptor::ReceiverRegister(), kPointerSize); |
| 1791 EmitLoadStoreICSlot(expr->LiteralFeedbackSlot()); |
| 1792 Handle<Code> ic = |
| 1793 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code(); |
| 1794 CallIC(ic); |
| 1795 } else if (has_fast_elements) { |
1789 int offset = FixedArray::kHeaderSize + (array_index * kPointerSize); | 1796 int offset = FixedArray::kHeaderSize + (array_index * kPointerSize); |
1790 __ Peek(x6, kPointerSize); // Copy of array literal. | 1797 __ Peek(x6, kPointerSize); // Copy of array literal. |
1791 __ Ldr(x1, FieldMemOperand(x6, JSObject::kElementsOffset)); | 1798 __ Ldr(x1, FieldMemOperand(x6, JSObject::kElementsOffset)); |
1792 __ Str(result_register(), FieldMemOperand(x1, offset)); | 1799 __ Str(result_register(), FieldMemOperand(x1, offset)); |
1793 // Update the write barrier for the array store. | 1800 // Update the write barrier for the array store. |
1794 __ RecordWriteField(x1, offset, result_register(), x10, | 1801 __ RecordWriteField(x1, offset, result_register(), x10, |
1795 kLRHasBeenSaved, kDontSaveFPRegs, | 1802 kLRHasBeenSaved, kDontSaveFPRegs, |
1796 EMIT_REMEMBERED_SET, INLINE_SMI_CHECK); | 1803 EMIT_REMEMBERED_SET, INLINE_SMI_CHECK); |
1797 } else { | 1804 } else { |
1798 __ Mov(x3, Smi::FromInt(array_index)); | 1805 __ Mov(x3, Smi::FromInt(array_index)); |
(...skipping 3468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5267 } | 5274 } |
5268 | 5275 |
5269 return INTERRUPT; | 5276 return INTERRUPT; |
5270 } | 5277 } |
5271 | 5278 |
5272 | 5279 |
5273 } // namespace internal | 5280 } // namespace internal |
5274 } // namespace v8 | 5281 } // namespace v8 |
5275 | 5282 |
5276 #endif // V8_TARGET_ARCH_ARM64 | 5283 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |