summaryrefslogtreecommitdiff
path: root/Source/Core/Common
diff options
context:
space:
mode:
authorLC <mathew1800@gmail.com>2021-01-18 05:26:22 -0500
committerGitHub <noreply@github.com>2021-01-18 05:26:22 -0500
commit04ccd4cb8073eaa90f75a3992bc82f969a819705 (patch)
treeab3d242dbec18b3eb1884d40556c917e2be2d380 /Source/Core/Common
parente62fa1ea9facffd4123fe407ecb9b3ae90693bd9 (diff)
parente3237661ecccf5c47469d9a33f864b6db4667c45 (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.cpp18
-rw-r--r--Source/Core/Common/Arm64Emitter.h58
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);