interp: Apply T prefix to D in vcmov.

This commit is contained in:
Unknown W. Brackets 2019-02-24 08:42:14 -08:00
parent fef8e71b8f
commit 30223cb17f

View File

@ -1643,7 +1643,6 @@ namespace MIPSInt
int vt = _VT; int vt = _VT;
int vs = _VS; int vs = _VS;
int vd = _VD; int vd = _VD;
int cond = op&15;
VectorSize sz = GetVecSize(op); VectorSize sz = GetVecSize(op);
int numElements = GetNumVectorElements(sz); int numElements = GetNumVectorElements(sz);
float s[4]; float s[4];
@ -1669,7 +1668,6 @@ namespace MIPSInt
int vt = _VT; int vt = _VT;
int vs = _VS; int vs = _VS;
int vd = _VD; int vd = _VD;
int cond = op&15;
VectorSize sz = GetVecSize(op); VectorSize sz = GetVecSize(op);
int numElements = GetNumVectorElements(sz); int numElements = GetNumVectorElements(sz);
float s[4]; float s[4];
@ -1692,8 +1690,7 @@ namespace MIPSInt
} }
void Int_Vcmov(MIPSOpcode op) void Int_Vcmov(MIPSOpcode op) {
{
int vs = _VS; int vs = _VS;
int vd = _VD; int vd = _VD;
int tf = (op >> 19) & 1; int tf = (op >> 19) & 1;
@ -1704,28 +1701,23 @@ namespace MIPSInt
float d[4]; float d[4];
ReadVector(s, sz, vs); ReadVector(s, sz, vs);
ApplySwizzleS(s, sz); ApplySwizzleS(s, sz);
ReadVector(d, sz, vd); //Yes! // Not only is D read (as T), but the T prefix applies to it.
ReadVector(d, sz, vd);
ApplySwizzleT(d, sz);
int CC = currentMIPS->vfpuCtrl[VFPU_CTRL_CC]; int CC = currentMIPS->vfpuCtrl[VFPU_CTRL_CC];
if (imm3 < 6) if (imm3 < 6) {
{ if (((CC >> imm3) & 1) == !tf) {
if (((CC >> imm3) & 1) == !tf)
{
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
d[i] = s[i]; d[i] = s[i];
} }
} } else if (imm3 == 6) {
else if (imm3 == 6) for (int i = 0; i < n; i++) {
{
for (int i = 0; i < n; i++)
{
if (((CC >> i) & 1) == !tf) if (((CC >> i) & 1) == !tf)
d[i] = s[i]; d[i] = s[i];
} }
} } else {
else
{
ERROR_LOG_REPORT(CPU, "Bad Imm3 in cmov: %d", imm3); ERROR_LOG_REPORT(CPU, "Bad Imm3 in cmov: %d", imm3);
} }
ApplyPrefixD(d, sz); ApplyPrefixD(d, sz);