mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-29 17:19:44 -06:00
Arm64Emitter: Convert ShiftType to enum class
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user