[AArch64] Make sure to load the full destination register on float instructions.
With the float instructions that only affect the lower 64bits of the destination register, we need to make sure to load the full 128bit register. This ensures that we aren't saving garbage in to the top 64bits.
This commit is contained in:
parent
2483f7b359
commit
e4e08b0596
|
@ -22,7 +22,6 @@ void JitArm64::fabsx(UGeckoInstruction inst)
|
|||
JITDISABLE(bJITFloatingPointOff);
|
||||
FALLBACK_IF(inst.Rc);
|
||||
|
||||
fpr.BindToRegister(inst.FD, inst.FD == inst.FB);
|
||||
ARM64Reg VB = fpr.R(inst.FB);
|
||||
ARM64Reg VD = fpr.R(inst.FD);
|
||||
ARM64Reg V0 = fpr.GetReg();
|
||||
|
@ -54,7 +53,6 @@ void JitArm64::faddx(UGeckoInstruction inst)
|
|||
JITDISABLE(bJITFloatingPointOff);
|
||||
FALLBACK_IF(inst.Rc);
|
||||
|
||||
fpr.BindToRegister(inst.FD, inst.FD == inst.FA || inst.FD == inst.FB);
|
||||
ARM64Reg VA = fpr.R(inst.FA);
|
||||
ARM64Reg VB = fpr.R(inst.FB);
|
||||
ARM64Reg VD = fpr.R(inst.FD);
|
||||
|
@ -94,7 +92,6 @@ void JitArm64::fmaddx(UGeckoInstruction inst)
|
|||
FALLBACK_IF(inst.Rc);
|
||||
|
||||
u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD;
|
||||
fpr.BindToRegister(d, d == a || d == b || d == c);
|
||||
|
||||
ARM64Reg VA = fpr.R(a);
|
||||
ARM64Reg VB = fpr.R(b);
|
||||
|
@ -114,7 +111,6 @@ void JitArm64::fmrx(UGeckoInstruction inst)
|
|||
JITDISABLE(bJITFloatingPointOff);
|
||||
FALLBACK_IF(inst.Rc);
|
||||
|
||||
fpr.BindToRegister(inst.FD, inst.FD == inst.FB);
|
||||
ARM64Reg VB = fpr.R(inst.FB);
|
||||
ARM64Reg VD = fpr.R(inst.FD);
|
||||
|
||||
|
@ -149,7 +145,6 @@ void JitArm64::fmsubx(UGeckoInstruction inst)
|
|||
FALLBACK_IF(inst.Rc);
|
||||
|
||||
u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD;
|
||||
fpr.BindToRegister(d, d == a || d == b || d == c);
|
||||
|
||||
ARM64Reg VA = fpr.R(a);
|
||||
ARM64Reg VB = fpr.R(b);
|
||||
|
@ -184,7 +179,6 @@ void JitArm64::fmulx(UGeckoInstruction inst)
|
|||
JITDISABLE(bJITFloatingPointOff);
|
||||
FALLBACK_IF(inst.Rc);
|
||||
|
||||
fpr.BindToRegister(inst.FD, inst.FD == inst.FA || inst.FD == inst.FC);
|
||||
ARM64Reg VA = fpr.R(inst.FA);
|
||||
ARM64Reg VC = fpr.R(inst.FC);
|
||||
ARM64Reg VD = fpr.R(inst.FD);
|
||||
|
@ -202,7 +196,6 @@ void JitArm64::fnabsx(UGeckoInstruction inst)
|
|||
JITDISABLE(bJITFloatingPointOff);
|
||||
FALLBACK_IF(inst.Rc);
|
||||
|
||||
fpr.BindToRegister(inst.FD, inst.FD == inst.FB);
|
||||
ARM64Reg VB = fpr.R(inst.FB);
|
||||
ARM64Reg VD = fpr.R(inst.FD);
|
||||
ARM64Reg V0 = fpr.GetReg();
|
||||
|
@ -220,7 +213,6 @@ void JitArm64::fnegx(UGeckoInstruction inst)
|
|||
JITDISABLE(bJITFloatingPointOff);
|
||||
FALLBACK_IF(inst.Rc);
|
||||
|
||||
fpr.BindToRegister(inst.FD, inst.FD == inst.FB);
|
||||
ARM64Reg VB = fpr.R(inst.FB);
|
||||
ARM64Reg VD = fpr.R(inst.FD);
|
||||
ARM64Reg V0 = fpr.GetReg();
|
||||
|
@ -260,7 +252,6 @@ void JitArm64::fnmaddx(UGeckoInstruction inst)
|
|||
FALLBACK_IF(inst.Rc);
|
||||
|
||||
u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD;
|
||||
fpr.BindToRegister(d, d == a || d == b || d == c);
|
||||
|
||||
ARM64Reg VA = fpr.R(a);
|
||||
ARM64Reg VB = fpr.R(b);
|
||||
|
@ -304,7 +295,6 @@ void JitArm64::fnmsubx(UGeckoInstruction inst)
|
|||
FALLBACK_IF(inst.Rc);
|
||||
|
||||
u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD;
|
||||
fpr.BindToRegister(d, d == a || d == b || d == c);
|
||||
|
||||
ARM64Reg VA = fpr.R(a);
|
||||
ARM64Reg VB = fpr.R(b);
|
||||
|
@ -324,16 +314,12 @@ void JitArm64::fselx(UGeckoInstruction inst)
|
|||
INSTRUCTION_START
|
||||
JITDISABLE(bJITFloatingPointOff);
|
||||
FALLBACK_IF(inst.Rc);
|
||||
fpr.BindToRegister(inst.FD,
|
||||
inst.FD == inst.FA ||
|
||||
inst.FD == inst.FB ||
|
||||
inst.FD == inst.FC);
|
||||
|
||||
ARM64Reg V0 = fpr.GetReg();
|
||||
ARM64Reg VD = fpr.R(inst.FD);
|
||||
ARM64Reg VA = fpr.R(inst.FA);
|
||||
ARM64Reg VB = fpr.R(inst.FB);
|
||||
ARM64Reg VC = gpr.R(inst.FC);
|
||||
ARM64Reg VC = fpr.R(inst.FC);
|
||||
|
||||
m_float_emit.FCMPE(VA);
|
||||
m_float_emit.FCSEL(V0, VC, VB, CC_GE);
|
||||
|
@ -363,7 +349,6 @@ void JitArm64::fsubx(UGeckoInstruction inst)
|
|||
JITDISABLE(bJITFloatingPointOff);
|
||||
FALLBACK_IF(inst.Rc);
|
||||
|
||||
fpr.BindToRegister(inst.FD, inst.FD == inst.FA || inst.FD == inst.FB);
|
||||
ARM64Reg VA = fpr.R(inst.FA);
|
||||
ARM64Reg VB = fpr.R(inst.FB);
|
||||
ARM64Reg VD = fpr.R(inst.FD);
|
||||
|
|
Loading…
Reference in New Issue