Index: src/arm64/constants-arm64.h |
diff --git a/src/arm64/constants-arm64.h b/src/arm64/constants-arm64.h |
index 00b24e9375908229a963d489e2b9609e8f63e002..65b8b30610ef0548d73e4153283bcdd173a4b7c4 100644 |
--- a/src/arm64/constants-arm64.h |
+++ b/src/arm64/constants-arm64.h |
@@ -117,89 +117,89 @@ const unsigned kDoubleExponentBias = 1023; |
const unsigned kFloatMantissaBits = 23; |
const unsigned kFloatExponentBits = 8; |
-#define INSTRUCTION_FIELDS_LIST(V_) \ |
-/* Register fields */ \ |
-V_(Rd, 4, 0, Bits) /* Destination register. */ \ |
-V_(Rn, 9, 5, Bits) /* First source register. */ \ |
-V_(Rm, 20, 16, Bits) /* Second source register. */ \ |
-V_(Ra, 14, 10, Bits) /* Third source register. */ \ |
-V_(Rt, 4, 0, Bits) /* Load dest / store source. */ \ |
-V_(Rt2, 14, 10, Bits) /* Load second dest / */ \ |
- /* store second source. */ \ |
-V_(PrefetchMode, 4, 0, Bits) \ |
- \ |
-/* Common bits */ \ |
-V_(SixtyFourBits, 31, 31, Bits) \ |
-V_(FlagsUpdate, 29, 29, Bits) \ |
- \ |
-/* PC relative addressing */ \ |
-V_(ImmPCRelHi, 23, 5, SignedBits) \ |
-V_(ImmPCRelLo, 30, 29, Bits) \ |
- \ |
-/* Add/subtract/logical shift register */ \ |
-V_(ShiftDP, 23, 22, Bits) \ |
-V_(ImmDPShift, 15, 10, Bits) \ |
- \ |
-/* Add/subtract immediate */ \ |
-V_(ImmAddSub, 21, 10, Bits) \ |
-V_(ShiftAddSub, 23, 22, Bits) \ |
- \ |
-/* Add/substract extend */ \ |
-V_(ImmExtendShift, 12, 10, Bits) \ |
-V_(ExtendMode, 15, 13, Bits) \ |
- \ |
-/* Move wide */ \ |
-V_(ImmMoveWide, 20, 5, Bits) \ |
-V_(ShiftMoveWide, 22, 21, Bits) \ |
- \ |
-/* Logical immediate, bitfield and extract */ \ |
-V_(BitN, 22, 22, Bits) \ |
-V_(ImmRotate, 21, 16, Bits) \ |
-V_(ImmSetBits, 15, 10, Bits) \ |
-V_(ImmR, 21, 16, Bits) \ |
-V_(ImmS, 15, 10, Bits) \ |
- \ |
-/* Test and branch immediate */ \ |
-V_(ImmTestBranch, 18, 5, SignedBits) \ |
-V_(ImmTestBranchBit40, 23, 19, Bits) \ |
-V_(ImmTestBranchBit5, 31, 31, Bits) \ |
- \ |
-/* Conditionals */ \ |
-V_(Condition, 15, 12, Bits) \ |
-V_(ConditionBranch, 3, 0, Bits) \ |
-V_(Nzcv, 3, 0, Bits) \ |
-V_(ImmCondCmp, 20, 16, Bits) \ |
-V_(ImmCondBranch, 23, 5, SignedBits) \ |
- \ |
-/* Floating point */ \ |
-V_(FPType, 23, 22, Bits) \ |
-V_(ImmFP, 20, 13, Bits) \ |
-V_(FPScale, 15, 10, Bits) \ |
- \ |
-/* Load Store */ \ |
-V_(ImmLS, 20, 12, SignedBits) \ |
-V_(ImmLSUnsigned, 21, 10, Bits) \ |
-V_(ImmLSPair, 21, 15, SignedBits) \ |
-V_(SizeLS, 31, 30, Bits) \ |
-V_(ImmShiftLS, 12, 12, Bits) \ |
- \ |
-/* Other immediates */ \ |
-V_(ImmUncondBranch, 25, 0, SignedBits) \ |
-V_(ImmCmpBranch, 23, 5, SignedBits) \ |
-V_(ImmLLiteral, 23, 5, SignedBits) \ |
-V_(ImmException, 20, 5, Bits) \ |
-V_(ImmHint, 11, 5, Bits) \ |
-V_(ImmBarrierDomain, 11, 10, Bits) \ |
-V_(ImmBarrierType, 9, 8, Bits) \ |
- \ |
-/* System (MRS, MSR) */ \ |
-V_(ImmSystemRegister, 19, 5, Bits) \ |
-V_(SysO0, 19, 19, Bits) \ |
-V_(SysOp1, 18, 16, Bits) \ |
-V_(SysOp2, 7, 5, Bits) \ |
-V_(CRn, 15, 12, Bits) \ |
-V_(CRm, 11, 8, Bits) \ |
- |
+#define INSTRUCTION_FIELDS_LIST(V_) \ |
+ /* Register fields */ \ |
+ V_(Rd, 4, 0, Bits) /* Destination register. */ \ |
+ V_(Rn, 9, 5, Bits) /* First source register. */ \ |
+ V_(Rm, 20, 16, Bits) /* Second source register. */ \ |
+ V_(Ra, 14, 10, Bits) /* Third source register. */ \ |
+ V_(Rt, 4, 0, Bits) /* Load dest / store source. */ \ |
+ V_(Rt2, 14, 10, Bits) /* Load second dest / */ \ |
+ /* store second source. */ \ |
+ V_(Rs, 20, 16, Bits) /* Store-exclusive status */ \ |
+ V_(PrefetchMode, 4, 0, Bits) \ |
+ \ |
+ /* Common bits */ \ |
+ V_(SixtyFourBits, 31, 31, Bits) \ |
+ V_(FlagsUpdate, 29, 29, Bits) \ |
+ \ |
+ /* PC relative addressing */ \ |
+ V_(ImmPCRelHi, 23, 5, SignedBits) \ |
+ V_(ImmPCRelLo, 30, 29, Bits) \ |
+ \ |
+ /* Add/subtract/logical shift register */ \ |
+ V_(ShiftDP, 23, 22, Bits) \ |
+ V_(ImmDPShift, 15, 10, Bits) \ |
+ \ |
+ /* Add/subtract immediate */ \ |
+ V_(ImmAddSub, 21, 10, Bits) \ |
+ V_(ShiftAddSub, 23, 22, Bits) \ |
+ \ |
+ /* Add/substract extend */ \ |
+ V_(ImmExtendShift, 12, 10, Bits) \ |
+ V_(ExtendMode, 15, 13, Bits) \ |
+ \ |
+ /* Move wide */ \ |
+ V_(ImmMoveWide, 20, 5, Bits) \ |
+ V_(ShiftMoveWide, 22, 21, Bits) \ |
+ \ |
+ /* Logical immediate, bitfield and extract */ \ |
+ V_(BitN, 22, 22, Bits) \ |
+ V_(ImmRotate, 21, 16, Bits) \ |
+ V_(ImmSetBits, 15, 10, Bits) \ |
+ V_(ImmR, 21, 16, Bits) \ |
+ V_(ImmS, 15, 10, Bits) \ |
+ \ |
+ /* Test and branch immediate */ \ |
+ V_(ImmTestBranch, 18, 5, SignedBits) \ |
+ V_(ImmTestBranchBit40, 23, 19, Bits) \ |
+ V_(ImmTestBranchBit5, 31, 31, Bits) \ |
+ \ |
+ /* Conditionals */ \ |
+ V_(Condition, 15, 12, Bits) \ |
+ V_(ConditionBranch, 3, 0, Bits) \ |
+ V_(Nzcv, 3, 0, Bits) \ |
+ V_(ImmCondCmp, 20, 16, Bits) \ |
+ V_(ImmCondBranch, 23, 5, SignedBits) \ |
+ \ |
+ /* Floating point */ \ |
+ V_(FPType, 23, 22, Bits) \ |
+ V_(ImmFP, 20, 13, Bits) \ |
+ V_(FPScale, 15, 10, Bits) \ |
+ \ |
+ /* Load Store */ \ |
+ V_(ImmLS, 20, 12, SignedBits) \ |
+ V_(ImmLSUnsigned, 21, 10, Bits) \ |
+ V_(ImmLSPair, 21, 15, SignedBits) \ |
+ V_(SizeLS, 31, 30, Bits) \ |
+ V_(ImmShiftLS, 12, 12, Bits) \ |
+ \ |
+ /* Other immediates */ \ |
+ V_(ImmUncondBranch, 25, 0, SignedBits) \ |
+ V_(ImmCmpBranch, 23, 5, SignedBits) \ |
+ V_(ImmLLiteral, 23, 5, SignedBits) \ |
+ V_(ImmException, 20, 5, Bits) \ |
+ V_(ImmHint, 11, 5, Bits) \ |
+ V_(ImmBarrierDomain, 11, 10, Bits) \ |
+ V_(ImmBarrierType, 9, 8, Bits) \ |
+ \ |
+ /* System (MRS, MSR) */ \ |
+ V_(ImmSystemRegister, 19, 5, Bits) \ |
+ V_(SysO0, 19, 19, Bits) \ |
+ V_(SysOp1, 18, 16, Bits) \ |
+ V_(SysOp2, 7, 5, Bits) \ |
+ V_(CRn, 15, 12, Bits) \ |
+ V_(CRm, 11, 8, Bits) |
#define SYSTEM_REGISTER_FIELDS_LIST(V_, M_) \ |
/* NZCV */ \ |
@@ -857,6 +857,29 @@ enum LoadStoreRegisterOffset { |
#undef LOAD_STORE_REGISTER_OFFSET |
}; |
+// Load/store acquire/release |
+enum LoadStoreAcquireReleaseOp { |
+ LoadStoreAcquireReleaseFixed = 0x08000000, |
+ LoadStoreAcquireReleaseFMask = 0x3F000000, |
+ LoadStoreAcquireReleaseMask = 0xCFC08000, |
+ STLXR_b = LoadStoreAcquireReleaseFixed | 0x00008000, |
+ LDAXR_b = LoadStoreAcquireReleaseFixed | 0x00408000, |
+ STLR_b = LoadStoreAcquireReleaseFixed | 0x00808000, |
+ LDAR_b = LoadStoreAcquireReleaseFixed | 0x00C08000, |
+ STLXR_h = LoadStoreAcquireReleaseFixed | 0x40008000, |
+ LDAXR_h = LoadStoreAcquireReleaseFixed | 0x40408000, |
+ STLR_h = LoadStoreAcquireReleaseFixed | 0x40808000, |
+ LDAR_h = LoadStoreAcquireReleaseFixed | 0x40C08000, |
+ STLXR_w = LoadStoreAcquireReleaseFixed | 0x80008000, |
+ LDAXR_w = LoadStoreAcquireReleaseFixed | 0x80408000, |
+ STLR_w = LoadStoreAcquireReleaseFixed | 0x80808000, |
+ LDAR_w = LoadStoreAcquireReleaseFixed | 0x80C08000, |
+ STLXR_x = LoadStoreAcquireReleaseFixed | 0xC0008000, |
+ LDAXR_x = LoadStoreAcquireReleaseFixed | 0xC0408000, |
+ STLR_x = LoadStoreAcquireReleaseFixed | 0xC0808000, |
+ LDAR_x = LoadStoreAcquireReleaseFixed | 0xC0C08000, |
+}; |
+ |
// Conditional compare. |
enum ConditionalCompareOp { |
ConditionalCompareMask = 0x60000000, |