mirror of https://github.com/PCSX2/pcsx2.git
nasty error... i was clamping incorrect reg-vectors in recUpdateFlags(), so this could have caused problems...
git-svn-id: http://pcsx2-playground.googlecode.com/svn/trunk@168 a6443dda-0b58-4228-96e9-037be469359c
This commit is contained in:
parent
0875c6ef55
commit
e5ca03fc17
|
@ -1395,6 +1395,7 @@ void recUpdateFlags(VURegs * VU, int reg, int info)
|
||||||
static u32 macaddr, stataddr, prevstataddr;
|
static u32 macaddr, stataddr, prevstataddr;
|
||||||
static int x86macflag, x86temp;
|
static int x86macflag, x86temp;
|
||||||
static int t1reg, t1regBoolean;
|
static int t1reg, t1regBoolean;
|
||||||
|
const static int flipMask[16] = {0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15};
|
||||||
|
|
||||||
if( !(info & PROCESS_VU_UPDATEFLAGS) ) return;
|
if( !(info & PROCESS_VU_UPDATEFLAGS) ) return;
|
||||||
|
|
||||||
|
@ -1443,7 +1444,7 @@ void recUpdateFlags(VURegs * VU, int reg, int info)
|
||||||
|
|
||||||
SSE_MOVAPS_XMM_to_XMM(t1reg, reg);
|
SSE_MOVAPS_XMM_to_XMM(t1reg, reg);
|
||||||
SSE_ANDPS_M128_to_XMM(t1reg, (uptr)VU_Zero_Helper_Mask);
|
SSE_ANDPS_M128_to_XMM(t1reg, (uptr)VU_Zero_Helper_Mask);
|
||||||
SSE_CMPEQPS_M128_to_XMM(t1reg, (uptr)VU_Pos_Infinity); // If infinity, then overflow has occured (NaN's don't report as overflow) (NaN's and Infinities report as overflow)
|
SSE_CMPEQPS_M128_to_XMM(t1reg, (uptr)VU_Pos_Infinity); // If infinity, then overflow has occured (NaN's don't report as overflow)
|
||||||
|
|
||||||
SSE_MOVMSKPS_XMM_to_R32(EAX, t1reg); // Move the sign bits of the previous calculation
|
SSE_MOVMSKPS_XMM_to_R32(EAX, t1reg); // Move the sign bits of the previous calculation
|
||||||
|
|
||||||
|
@ -1477,19 +1478,19 @@ void recUpdateFlags(VURegs * VU, int reg, int info)
|
||||||
|
|
||||||
//-------------------------Optional Code: Denormals Are Zero------------------------------
|
//-------------------------Optional Code: Denormals Are Zero------------------------------
|
||||||
if (CHECK_UNDERFLOW) { // Sets underflow/denormals to zero
|
if (CHECK_UNDERFLOW) { // Sets underflow/denormals to zero
|
||||||
/*
|
/*
|
||||||
SSE_ANDNPS_XMM_to_XMM(t1reg, reg); // t1reg = !t1reg & reg
|
SSE_ANDNPS_XMM_to_XMM(t1reg, reg); // t1reg = !t1reg & reg
|
||||||
// Now we have Denormals are Positive Zero in t1reg; the next two lines take Signed Zero into account
|
// Now we have Denormals are Positive Zero in t1reg; the next two lines take Signed Zero into account
|
||||||
SSE_ANDPS_M128_to_XMM(reg, (uptr)&VU_Signed_Zero_Mask[ 0 ]);
|
SSE_ANDPS_M128_to_XMM(reg, (uptr)&VU_Signed_Zero_Mask[ 0 ]);
|
||||||
SSE_ORPS_XMM_to_XMM(reg, t1reg);
|
SSE_ORPS_XMM_to_XMM(reg, t1reg);
|
||||||
*/
|
*/
|
||||||
// ToDO: Make it so that we only set modified vectors to zero! (the current code sets denormals to zero even if the vector isn't used in the calculation)
|
// ToDO: Make it so that we only set modified vectors to zero! (the current code sets denormals to zero even if the vector isn't used in the calculation)
|
||||||
}
|
}
|
||||||
|
|
||||||
x86SetJ32(pjmp32); // If we skipped the Underflow Flag Checking (when we had an Overflow), return here
|
x86SetJ32(pjmp32); // If we skipped the Underflow Flag Checking (when we had an Overflow), return here
|
||||||
}
|
}
|
||||||
|
|
||||||
vuFloat2(reg, t1reg, _X_Y_Z_W); // Clamp overflowed vectors that were modified
|
vuFloat2(reg, t1reg, flipMask[_X_Y_Z_W]); // Clamp overflowed vectors that were modified (remember reg's vectors have been flipped, so have to use a flipmask)
|
||||||
|
|
||||||
//-------------------------Check for Signed flags------------------------------
|
//-------------------------Check for Signed flags------------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue