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 #ifndef V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ | 5 #ifndef V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ |
6 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ | 6 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "src/globals.h" | 10 #include "src/globals.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 if (kBranchTypeFirstCondition <= type && type <= kBranchTypeLastCondition) { | 82 if (kBranchTypeFirstCondition <= type && type <= kBranchTypeLastCondition) { |
83 return static_cast<BranchType>( | 83 return static_cast<BranchType>( |
84 InvertCondition(static_cast<Condition>(type))); | 84 InvertCondition(static_cast<Condition>(type))); |
85 } else { | 85 } else { |
86 return static_cast<BranchType>(type ^ 1); | 86 return static_cast<BranchType>(type ^ 1); |
87 } | 87 } |
88 } | 88 } |
89 | 89 |
90 enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; | 90 enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; |
91 enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; | 91 enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; |
| 92 enum PointersToHereCheck { |
| 93 kPointersToHereMaybeInteresting, |
| 94 kPointersToHereAreAlwaysInteresting |
| 95 }; |
92 enum LinkRegisterStatus { kLRHasNotBeenSaved, kLRHasBeenSaved }; | 96 enum LinkRegisterStatus { kLRHasNotBeenSaved, kLRHasBeenSaved }; |
93 enum TargetAddressStorageMode { | 97 enum TargetAddressStorageMode { |
94 CAN_INLINE_TARGET_ADDRESS, | 98 CAN_INLINE_TARGET_ADDRESS, |
95 NEVER_INLINE_TARGET_ADDRESS | 99 NEVER_INLINE_TARGET_ADDRESS |
96 }; | 100 }; |
97 enum UntagMode { kNotSpeculativeUntag, kSpeculativeUntag }; | 101 enum UntagMode { kNotSpeculativeUntag, kSpeculativeUntag }; |
98 enum ArrayHasHoles { kArrayCantHaveHoles, kArrayCanHaveHoles }; | 102 enum ArrayHasHoles { kArrayCantHaveHoles, kArrayCanHaveHoles }; |
99 enum CopyHint { kCopyUnknown, kCopyShort, kCopyLong }; | 103 enum CopyHint { kCopyUnknown, kCopyShort, kCopyLong }; |
100 enum DiscardMoveMode { kDontDiscardForSameWReg, kDiscardForSameWReg }; | 104 enum DiscardMoveMode { kDontDiscardForSameWReg, kDiscardForSameWReg }; |
101 enum SeqStringSetCharCheckIndexType { kIndexIsSmi, kIndexIsInteger32 }; | 105 enum SeqStringSetCharCheckIndexType { kIndexIsSmi, kIndexIsInteger32 }; |
(...skipping 1678 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1780 // The offset is the offset from the start of the object, not the offset from | 1784 // The offset is the offset from the start of the object, not the offset from |
1781 // the tagged HeapObject pointer. For use with FieldOperand(reg, off). | 1785 // the tagged HeapObject pointer. For use with FieldOperand(reg, off). |
1782 void RecordWriteField( | 1786 void RecordWriteField( |
1783 Register object, | 1787 Register object, |
1784 int offset, | 1788 int offset, |
1785 Register value, | 1789 Register value, |
1786 Register scratch, | 1790 Register scratch, |
1787 LinkRegisterStatus lr_status, | 1791 LinkRegisterStatus lr_status, |
1788 SaveFPRegsMode save_fp, | 1792 SaveFPRegsMode save_fp, |
1789 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 1793 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
1790 SmiCheck smi_check = INLINE_SMI_CHECK); | 1794 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 1795 PointersToHereCheck pointers_to_here_check_for_value = |
| 1796 kPointersToHereMaybeInteresting); |
1791 | 1797 |
1792 // As above, but the offset has the tag presubtracted. For use with | 1798 // As above, but the offset has the tag presubtracted. For use with |
1793 // MemOperand(reg, off). | 1799 // MemOperand(reg, off). |
1794 inline void RecordWriteContextSlot( | 1800 inline void RecordWriteContextSlot( |
1795 Register context, | 1801 Register context, |
1796 int offset, | 1802 int offset, |
1797 Register value, | 1803 Register value, |
1798 Register scratch, | 1804 Register scratch, |
1799 LinkRegisterStatus lr_status, | 1805 LinkRegisterStatus lr_status, |
1800 SaveFPRegsMode save_fp, | 1806 SaveFPRegsMode save_fp, |
1801 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 1807 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
1802 SmiCheck smi_check = INLINE_SMI_CHECK) { | 1808 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 1809 PointersToHereCheck pointers_to_here_check_for_value = |
| 1810 kPointersToHereMaybeInteresting) { |
1803 RecordWriteField(context, | 1811 RecordWriteField(context, |
1804 offset + kHeapObjectTag, | 1812 offset + kHeapObjectTag, |
1805 value, | 1813 value, |
1806 scratch, | 1814 scratch, |
1807 lr_status, | 1815 lr_status, |
1808 save_fp, | 1816 save_fp, |
1809 remembered_set_action, | 1817 remembered_set_action, |
1810 smi_check); | 1818 smi_check, |
| 1819 pointers_to_here_check_for_value); |
1811 } | 1820 } |
1812 | 1821 |
| 1822 void RecordWriteForMap( |
| 1823 Register object, |
| 1824 Register map, |
| 1825 Register dst, |
| 1826 LinkRegisterStatus lr_status, |
| 1827 SaveFPRegsMode save_fp); |
| 1828 |
1813 // For a given |object| notify the garbage collector that the slot |address| | 1829 // For a given |object| notify the garbage collector that the slot |address| |
1814 // has been written. |value| is the object being stored. The value and | 1830 // has been written. |value| is the object being stored. The value and |
1815 // address registers are clobbered by the operation. | 1831 // address registers are clobbered by the operation. |
1816 void RecordWrite( | 1832 void RecordWrite( |
1817 Register object, | 1833 Register object, |
1818 Register address, | 1834 Register address, |
1819 Register value, | 1835 Register value, |
1820 LinkRegisterStatus lr_status, | 1836 LinkRegisterStatus lr_status, |
1821 SaveFPRegsMode save_fp, | 1837 SaveFPRegsMode save_fp, |
1822 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 1838 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
1823 SmiCheck smi_check = INLINE_SMI_CHECK); | 1839 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 1840 PointersToHereCheck pointers_to_here_check_for_value = |
| 1841 kPointersToHereMaybeInteresting); |
1824 | 1842 |
1825 // Checks the color of an object. If the object is already grey or black | 1843 // Checks the color of an object. If the object is already grey or black |
1826 // then we just fall through, since it is already live. If it is white and | 1844 // then we just fall through, since it is already live. If it is white and |
1827 // we can determine that it doesn't need to be scanned, then we just mark it | 1845 // we can determine that it doesn't need to be scanned, then we just mark it |
1828 // black and fall through. For the rest we jump to the label so the | 1846 // black and fall through. For the rest we jump to the label so the |
1829 // incremental marker can fix its assumptions. | 1847 // incremental marker can fix its assumptions. |
1830 void EnsureNotWhite(Register object, | 1848 void EnsureNotWhite(Register object, |
1831 Register scratch1, | 1849 Register scratch1, |
1832 Register scratch2, | 1850 Register scratch2, |
1833 Register scratch3, | 1851 Register scratch3, |
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2299 #error "Unsupported option" | 2317 #error "Unsupported option" |
2300 #define CODE_COVERAGE_STRINGIFY(x) #x | 2318 #define CODE_COVERAGE_STRINGIFY(x) #x |
2301 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) | 2319 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) |
2302 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) | 2320 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) |
2303 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> | 2321 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> |
2304 #else | 2322 #else |
2305 #define ACCESS_MASM(masm) masm-> | 2323 #define ACCESS_MASM(masm) masm-> |
2306 #endif | 2324 #endif |
2307 | 2325 |
2308 #endif // V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ | 2326 #endif // V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ |
OLD | NEW |