diff options
| author | LC <mathew1800@gmail.com> | 2021-01-18 05:26:22 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-18 05:26:22 -0500 |
| commit | 04ccd4cb8073eaa90f75a3992bc82f969a819705 (patch) | |
| tree | ab3d242dbec18b3eb1884d40556c917e2be2d380 /Source/Core/Common | |
| parent | e62fa1ea9facffd4123fe407ecb9b3ae90693bd9 (diff) | |
| parent | e3237661ecccf5c47469d9a33f864b6db4667c45 (diff) | |
Merge pull request #9446 from Dentomologist/convert_shifttype_to_enum_class
Arm64Emitter: Convert ShiftType to enum class
Diffstat (limited to 'Source/Core/Common')
| -rw-r--r-- | Source/Core/Common/Arm64Emitter.cpp | 18 | ||||
| -rw-r--r-- | Source/Core/Common/Arm64Emitter.h | 58 |
2 files changed, 52 insertions, 24 deletions
diff --git a/Source/Core/Common/Arm64Emitter.cpp b/Source/Core/Common/Arm64Emitter.cpp index 0a2be67732..fa95589db1 100644 --- a/Source/Core/Common/Arm64Emitter.cpp +++ b/Source/Core/Common/Arm64Emitter.cpp @@ -1263,7 +1263,7 @@ void ARM64XEmitter::ISB(BarrierType type) // Add/Subtract (extended register) void ARM64XEmitter::ADD(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) { - ADD(Rd, Rn, Rm, ArithOption(Rd, ST_LSL, 0)); + ADD(Rd, Rn, Rm, ArithOption(Rd, ShiftType::LSL, 0)); } void ARM64XEmitter::ADD(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm, ArithOption Option) @@ -1273,7 +1273,7 @@ void ARM64XEmitter::ADD(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm, ArithOption Optio void ARM64XEmitter::ADDS(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) { - EncodeArithmeticInst(0, true, Rd, Rn, Rm, ArithOption(Rd, ST_LSL, 0)); + EncodeArithmeticInst(0, true, Rd, Rn, Rm, ArithOption(Rd, ShiftType::LSL, 0)); } void ARM64XEmitter::ADDS(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm, ArithOption Option) @@ -1283,7 +1283,7 @@ void ARM64XEmitter::ADDS(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm, ArithOption Opti void ARM64XEmitter::SUB(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) { - SUB(Rd, Rn, Rm, ArithOption(Rd, ST_LSL, 0)); + SUB(Rd, Rn, Rm, ArithOption(Rd, ShiftType::LSL, 0)); } void ARM64XEmitter::SUB(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm, ArithOption Option) @@ -1293,7 +1293,7 @@ void ARM64XEmitter::SUB(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm, ArithOption Optio void ARM64XEmitter::SUBS(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) { - EncodeArithmeticInst(1, true, Rd, Rn, Rm, ArithOption(Rd, ST_LSL, 0)); + EncodeArithmeticInst(1, true, Rd, Rn, Rm, ArithOption(Rd, ShiftType::LSL, 0)); } void ARM64XEmitter::SUBS(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm, ArithOption Option) @@ -1303,7 +1303,7 @@ void ARM64XEmitter::SUBS(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm, ArithOption Opti void ARM64XEmitter::CMN(ARM64Reg Rn, ARM64Reg Rm) { - CMN(Rn, Rm, ArithOption(Rn, ST_LSL, 0)); + CMN(Rn, Rm, ArithOption(Rn, ShiftType::LSL, 0)); } void ARM64XEmitter::CMN(ARM64Reg Rn, ARM64Reg Rm, ArithOption Option) @@ -1313,7 +1313,7 @@ void ARM64XEmitter::CMN(ARM64Reg Rn, ARM64Reg Rm, ArithOption Option) void ARM64XEmitter::CMP(ARM64Reg Rn, ARM64Reg Rm) { - CMP(Rn, Rm, ArithOption(Rn, ST_LSL, 0)); + CMP(Rn, Rm, ArithOption(Rn, ShiftType::LSL, 0)); } void ARM64XEmitter::CMP(ARM64Reg Rn, ARM64Reg Rm, ArithOption Option) @@ -1553,13 +1553,13 @@ void ARM64XEmitter::MOV(ARM64Reg Rd, ARM64Reg Rm, ArithOption Shift) void ARM64XEmitter::MOV(ARM64Reg Rd, ARM64Reg Rm) { if (IsGPR(Rd) && IsGPR(Rm)) - ORR(Rd, Is64Bit(Rd) ? ZR : WZR, Rm, ArithOption(Rm, ST_LSL, 0)); + ORR(Rd, Is64Bit(Rd) ? ZR : WZR, Rm, ArithOption(Rm, ShiftType::LSL, 0)); else ASSERT_MSG(DYNA_REC, false, "Non-GPRs not supported in MOV"); } void ARM64XEmitter::MVN(ARM64Reg Rd, ARM64Reg Rm) { - ORN(Rd, Is64Bit(Rd) ? ZR : WZR, Rm, ArithOption(Rm, ST_LSL, 0)); + ORN(Rd, Is64Bit(Rd) ? ZR : WZR, Rm, ArithOption(Rm, ShiftType::LSL, 0)); } void ARM64XEmitter::LSL(ARM64Reg Rd, ARM64Reg Rm, int shift) { @@ -2016,7 +2016,7 @@ void ARM64XEmitter::MOVI2R(ARM64Reg Rd, u64 imm, bool optimize) // Max unsigned value (or if signed, -1) // Set to ~ZR ARM64Reg ZR = Is64Bit(Rd) ? SP : WSP; - ORN(Rd, ZR, ZR, ArithOption(ZR, ST_LSL, 0)); + ORN(Rd, ZR, ZR, ArithOption(ZR, ShiftType::LSL, 0)); return; } diff --git a/Source/Core/Common/Arm64Emitter.h b/Source/Core/Common/Arm64Emitter.h index 23150f1bad..3aa5942b88 100644 --- a/Source/Core/Common/Arm64Emitter.h +++ b/Source/Core/Common/Arm64Emitter.h @@ -277,12 +277,16 @@ constexpr ARM64Reg EncodeRegToQuad(ARM64Reg reg) return static_cast<ARM64Reg>(reg | 0xC0); } -enum ShiftType +enum class ShiftType { - ST_LSL = 0, - ST_LSR = 1, - ST_ASR = 2, - ST_ROR = 3, + // Logical Shift Left + LSL = 0, + // Logical Shift Right + LSR = 1, + // Arithmetic Shift Right + ASR = 2, + // Rotate Right + ROR = 3, }; enum class IndexType @@ -437,7 +441,7 @@ public: m_width = WidthSpecifier::Width32Bit; m_extend = ExtendSpecifier::UXTW; } - m_shifttype = ST_LSL; + m_shifttype = ShiftType::LSL; } ArithOption(ARM64Reg Rd, ShiftType shift_type, u32 shift) { @@ -466,7 +470,7 @@ public: case TypeSpecifier::ExtendedReg: return (static_cast<u32>(m_extend) << 13) | (m_shift << 10); case TypeSpecifier::ShiftedReg: - return (m_shifttype << 22) | (m_shift << 10); + return (static_cast<u32>(m_shifttype) << 22) | (m_shift << 10); default: DEBUG_ASSERT_MSG(DYNA_REC, false, "Invalid type in GetData"); break; @@ -699,14 +703,38 @@ public: void BICS(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm, ArithOption Shift); // Wrap the above for saner syntax - void AND(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) { AND(Rd, Rn, Rm, ArithOption(Rd, ST_LSL, 0)); } - void BIC(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) { BIC(Rd, Rn, Rm, ArithOption(Rd, ST_LSL, 0)); } - void ORR(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) { ORR(Rd, Rn, Rm, ArithOption(Rd, ST_LSL, 0)); } - void ORN(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) { ORN(Rd, Rn, Rm, ArithOption(Rd, ST_LSL, 0)); } - void EOR(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) { EOR(Rd, Rn, Rm, ArithOption(Rd, ST_LSL, 0)); } - void EON(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) { EON(Rd, Rn, Rm, ArithOption(Rd, ST_LSL, 0)); } - void ANDS(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) { ANDS(Rd, Rn, Rm, ArithOption(Rd, ST_LSL, 0)); } - void BICS(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) { BICS(Rd, Rn, Rm, ArithOption(Rd, ST_LSL, 0)); } + void AND(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) + { + AND(Rd, Rn, Rm, ArithOption(Rd, ShiftType::LSL, 0)); + } + void BIC(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) + { + BIC(Rd, Rn, Rm, ArithOption(Rd, ShiftType::LSL, 0)); + } + void ORR(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) + { + ORR(Rd, Rn, Rm, ArithOption(Rd, ShiftType::LSL, 0)); + } + void ORN(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) + { + ORN(Rd, Rn, Rm, ArithOption(Rd, ShiftType::LSL, 0)); + } + void EOR(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) + { + EOR(Rd, Rn, Rm, ArithOption(Rd, ShiftType::LSL, 0)); + } + void EON(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) + { + EON(Rd, Rn, Rm, ArithOption(Rd, ShiftType::LSL, 0)); + } + void ANDS(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) + { + ANDS(Rd, Rn, Rm, ArithOption(Rd, ShiftType::LSL, 0)); + } + void BICS(ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm) + { + BICS(Rd, Rn, Rm, ArithOption(Rd, ShiftType::LSL, 0)); + } // Convenience wrappers around ORR. These match the official convenience syntax. void MOV(ARM64Reg Rd, ARM64Reg Rm, ArithOption Shift); void MOV(ARM64Reg Rd, ARM64Reg Rm); |
