JitArm64: Add function for setting constant overflow

This commit is contained in:
JosJuice 2023-08-23 22:41:03 +02:00
parent be8e3fc5ae
commit ff965f1937
2 changed files with 20 additions and 0 deletions

View File

@ -362,6 +362,7 @@ protected:
void ComputeRC0(Arm64Gen::ARM64Reg reg);
void ComputeRC0(u32 imm);
void GenerateConstantOverflow(bool overflow);
void ComputeCarry(Arm64Gen::ARM64Reg reg); // reg must contain 0 or 1
void ComputeCarry(bool carry);
void ComputeCarry();

View File

@ -43,6 +43,25 @@ void JitArm64::ComputeRC0(u32 imm)
MOVI2R(gpr.CR(0), s64(s32(imm)));
}
void JitArm64::GenerateConstantOverflow(bool overflow)
{
ARM64Reg WA = gpr.GetReg();
if (overflow)
{
MOVI2R(WA, XER_OV_MASK | XER_SO_MASK);
STRB(IndexType::Unsigned, WA, PPC_REG, PPCSTATE_OFF(xer_so_ov));
}
else
{
LDRB(IndexType::Unsigned, WA, PPC_REG, PPCSTATE_OFF(xer_so_ov));
AND(WA, WA, LogicalImm(~XER_OV_MASK, GPRSize::B32));
STRB(IndexType::Unsigned, WA, PPC_REG, PPCSTATE_OFF(xer_so_ov));
}
gpr.Unlock(WA);
}
void JitArm64::ComputeCarry(ARM64Reg reg)
{
js.carryFlag = CarryFlag::InPPCState;