Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VM_ASSEMBLER_ARM64_H_ | 5 #ifndef VM_ASSEMBLER_ARM64_H_ |
| 6 #define VM_ASSEMBLER_ARM64_H_ | 6 #define VM_ASSEMBLER_ARM64_H_ |
| 7 | 7 |
| 8 #ifndef VM_ASSEMBLER_H_ | 8 #ifndef VM_ASSEMBLER_H_ |
| 9 #error Do not include assembler_arm64.h directly; use assembler.h instead. | 9 #error Do not include assembler_arm64.h directly; use assembler.h instead. |
| 10 #endif | 10 #endif |
| (...skipping 739 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 750 (a.type() == Address::PairPreIndex)); | 750 (a.type() == Address::PairPreIndex)); |
| 751 EmitLoadStoreRegPair(LDP, rt, rt2, a, sz); | 751 EmitLoadStoreRegPair(LDP, rt, rt2, a, sz); |
| 752 } | 752 } |
| 753 void stp(Register rt, Register rt2, Address a, OperandSize sz = kDoubleWord) { | 753 void stp(Register rt, Register rt2, Address a, OperandSize sz = kDoubleWord) { |
| 754 ASSERT((a.type() == Address::PairOffset) || | 754 ASSERT((a.type() == Address::PairOffset) || |
| 755 (a.type() == Address::PairPostIndex) || | 755 (a.type() == Address::PairPostIndex) || |
| 756 (a.type() == Address::PairPreIndex)); | 756 (a.type() == Address::PairPreIndex)); |
| 757 EmitLoadStoreRegPair(STP, rt, rt2, a, sz); | 757 EmitLoadStoreRegPair(STP, rt, rt2, a, sz); |
| 758 } | 758 } |
| 759 | 759 |
| 760 void ldxr(Register rt, Register rn) { | |
|
zra
2016/02/25 04:02:35
As on ARM, clrex looks like it would be useful to
rmacnak
2016/02/25 23:31:46
Done.
| |
| 761 // rt = value | |
| 762 // rn = address | |
| 763 EmitLoadStoreExclusive(LDXR, R31, rn, rt, kDoubleWord); | |
| 764 } | |
| 765 void stxr(Register rs, Register rt, Register rn) { | |
| 766 // rs = status (1 = failure, 0 = success) | |
| 767 // rt = value | |
| 768 // rn = address | |
| 769 EmitLoadStoreExclusive(STXR, rs, rn, rt, kDoubleWord); | |
| 770 } | |
| 771 | |
| 760 // Conditional select. | 772 // Conditional select. |
| 761 void csel(Register rd, Register rn, Register rm, Condition cond) { | 773 void csel(Register rd, Register rn, Register rm, Condition cond) { |
| 762 EmitConditionalSelect(CSEL, rd, rn, rm, cond, kDoubleWord); | 774 EmitConditionalSelect(CSEL, rd, rn, rm, cond, kDoubleWord); |
| 763 } | 775 } |
| 764 void csinc(Register rd, Register rn, Register rm, Condition cond) { | 776 void csinc(Register rd, Register rn, Register rm, Condition cond) { |
| 765 EmitConditionalSelect(CSINC, rd, rn, rm, cond, kDoubleWord); | 777 EmitConditionalSelect(CSINC, rd, rn, rm, cond, kDoubleWord); |
| 766 } | 778 } |
| 767 void cinc(Register rd, Register rn, Condition cond) { | 779 void cinc(Register rd, Register rn, Condition cond) { |
| 768 csinc(rd, rn, rn, InvertCondition(cond)); | 780 csinc(rd, rn, rn, InvertCondition(cond)); |
| 769 } | 781 } |
| (...skipping 937 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1707 ASSERT((sz == kDoubleWord) || (sz == kWord) || (sz == kUnsignedWord)); | 1719 ASSERT((sz == kDoubleWord) || (sz == kWord) || (sz == kUnsignedWord)); |
| 1708 const int32_t size = (sz == kDoubleWord) ? B31 : 0; | 1720 const int32_t size = (sz == kDoubleWord) ? B31 : 0; |
| 1709 const int32_t encoding = | 1721 const int32_t encoding = |
| 1710 op | size | | 1722 op | size | |
| 1711 (static_cast<int32_t>(rd) << kRdShift) | | 1723 (static_cast<int32_t>(rd) << kRdShift) | |
| 1712 (static_cast<int32_t>(hw_idx) << kHWShift) | | 1724 (static_cast<int32_t>(hw_idx) << kHWShift) | |
| 1713 (static_cast<int32_t>(imm.value() & 0xffff) << kImm16Shift); | 1725 (static_cast<int32_t>(imm.value() & 0xffff) << kImm16Shift); |
| 1714 Emit(encoding); | 1726 Emit(encoding); |
| 1715 } | 1727 } |
| 1716 | 1728 |
| 1729 void EmitLoadStoreExclusive(LoadStoreExclusiveOp op, Register rs, Register rn, | |
| 1730 Register rt, OperandSize sz = kDoubleWord) { | |
| 1731 ASSERT(sz == kDoubleWord); | |
| 1732 const int32_t size = B31 | B30; | |
| 1733 | |
| 1734 ASSERT(rs != kNoRegister); | |
| 1735 ASSERT(rn != kNoRegister); | |
| 1736 ASSERT(rt != kNoRegister); | |
| 1737 | |
| 1738 const int32_t encoding = | |
| 1739 op | size | | |
| 1740 (static_cast<int32_t>(rs) << kRsShift) | | |
| 1741 (static_cast<int32_t>(rn) << kRnShift) | | |
| 1742 (static_cast<int32_t>(rt) << kRtShift); | |
| 1743 | |
| 1744 Emit(encoding); | |
| 1745 } | |
| 1746 | |
| 1717 void EmitLoadStoreReg(LoadStoreRegOp op, Register rt, Address a, | 1747 void EmitLoadStoreReg(LoadStoreRegOp op, Register rt, Address a, |
| 1718 OperandSize sz) { | 1748 OperandSize sz) { |
| 1719 const Register crt = ConcreteRegister(rt); | 1749 const Register crt = ConcreteRegister(rt); |
| 1720 const int32_t size = Log2OperandSizeBytes(sz); | 1750 const int32_t size = Log2OperandSizeBytes(sz); |
| 1721 const int32_t encoding = | 1751 const int32_t encoding = |
| 1722 op | ((size & 0x3) << kSzShift) | | 1752 op | ((size & 0x3) << kSzShift) | |
| 1723 (static_cast<int32_t>(crt) << kRtShift) | | 1753 (static_cast<int32_t>(crt) << kRtShift) | |
| 1724 a.encoding(); | 1754 a.encoding(); |
| 1725 Emit(encoding); | 1755 Emit(encoding); |
| 1726 } | 1756 } |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1927 Register value, | 1957 Register value, |
| 1928 Label* no_update); | 1958 Label* no_update); |
| 1929 | 1959 |
| 1930 DISALLOW_ALLOCATION(); | 1960 DISALLOW_ALLOCATION(); |
| 1931 DISALLOW_COPY_AND_ASSIGN(Assembler); | 1961 DISALLOW_COPY_AND_ASSIGN(Assembler); |
| 1932 }; | 1962 }; |
| 1933 | 1963 |
| 1934 } // namespace dart | 1964 } // namespace dart |
| 1935 | 1965 |
| 1936 #endif // VM_ASSEMBLER_ARM64_H_ | 1966 #endif // VM_ASSEMBLER_ARM64_H_ |
| OLD | NEW |