mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-01 14:58:14 +00:00
arm64 JIT: mtvc to the VFPU condition register keeps six bits
The other control registers were masked already; the CC path wasn't, so a value with bits 6 or 7 set made bvt 6 and bvt 7 branch. Hardware never sets those (cpu/vfpu/vbranch), and the IR masks them. Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
1 parent
ffc32d02fe
commit
ae81a20c74
1 file changed
+3
-2
@@ -1128,11 +1128,12 @@ namespace MIPSComp {
|
||||
}
|
||||
} else if (imm < 128 + VFPU_CTRL_MAX) { //mtvc //currentMIPS->vfpuCtrl[imm - 128] = R(rt);
|
||||
if (imm - 128 == VFPU_CTRL_CC) {
|
||||
// Six condition bits, the rest don't stick (cpu/vfpu/vbranch).
|
||||
if (gpr.IsImm(rt)) {
|
||||
gpr.SetImm(MIPS_REG_VFPUCC, gpr.GetImm(rt));
|
||||
gpr.SetImm(MIPS_REG_VFPUCC, gpr.GetImm(rt) & 0x3F);
|
||||
} else {
|
||||
gpr.MapDirtyIn(MIPS_REG_VFPUCC, rt);
|
||||
MOV(gpr.R(MIPS_REG_VFPUCC), gpr.R(rt));
|
||||
ANDI2R(gpr.R(MIPS_REG_VFPUCC), gpr.R(rt), 0x3F, SCRATCH1);
|
||||
}
|
||||
} else {
|
||||
// Only some of the bits stick (the low 20 of a prefix, say), same as the IR does it.
|
||||
|
||||
Reference in new issue
Block a user