Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Side by Side Diff: runtime/vm/assembler_arm64.h

Issue 1722013002: Enable concurrent sweep on MIPS and ARM64. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | runtime/vm/assembler_mips.h » ('j') | runtime/vm/assembler_mips.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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_
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/assembler_mips.h » ('j') | runtime/vm/assembler_mips.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698