mirror of https://github.com/PCSX2/pcsx2.git
Fix from refraction for the recent VIF changes: Unbreaks Sega Superstar Tennis.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5420 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
893c5a5c1e
commit
c26f684a65
|
@ -35,6 +35,13 @@ static RecompiledCodeReserve* nVifUpkExec = NULL;
|
||||||
|
|
||||||
// Merges xmm vectors without modifying source reg
|
// Merges xmm vectors without modifying source reg
|
||||||
void mergeVectors(xRegisterSSE dest, xRegisterSSE src, xRegisterSSE temp, int xyzw) {
|
void mergeVectors(xRegisterSSE dest, xRegisterSSE src, xRegisterSSE temp, int xyzw) {
|
||||||
|
if (x86caps.hasStreamingSIMD4Extensions || (xyzw==15)
|
||||||
|
|| (xyzw==12) || (xyzw==11) || (xyzw==8) || (xyzw==3)) {
|
||||||
|
mVUmergeRegs(dest, src, xyzw);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(temp != src) xMOVAPS(temp, src); //Sometimes we don't care if the source is modified and is temp reg.
|
||||||
if(dest == temp)
|
if(dest == temp)
|
||||||
{
|
{
|
||||||
//VIF can sent the temp directory as the source and destination, just need to clear the ones we dont want in which case.
|
//VIF can sent the temp directory as the source and destination, just need to clear the ones we dont want in which case.
|
||||||
|
@ -42,18 +49,8 @@ void mergeVectors(xRegisterSSE dest, xRegisterSSE src, xRegisterSSE temp, int xy
|
||||||
if(!(xyzw & 0x2)) xAND.PS( dest, ptr128[SSEXYZWMask[1]]);
|
if(!(xyzw & 0x2)) xAND.PS( dest, ptr128[SSEXYZWMask[1]]);
|
||||||
if(!(xyzw & 0x4)) xAND.PS( dest, ptr128[SSEXYZWMask[2]]);
|
if(!(xyzw & 0x4)) xAND.PS( dest, ptr128[SSEXYZWMask[2]]);
|
||||||
if(!(xyzw & 0x8)) xAND.PS( dest, ptr128[SSEXYZWMask[3]]);
|
if(!(xyzw & 0x8)) xAND.PS( dest, ptr128[SSEXYZWMask[3]]);
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (x86caps.hasStreamingSIMD4Extensions || (xyzw==15)
|
|
||||||
|| (xyzw==12) || (xyzw==11) || (xyzw==8) || (xyzw==3)) {
|
|
||||||
mVUmergeRegs(dest, src, xyzw);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if(temp != src) xMOVAPS(temp, src); //Sometimes we don't care if the source is modified and is temp reg.
|
|
||||||
mVUmergeRegs(dest, temp, xyzw);
|
|
||||||
}
|
}
|
||||||
|
else mVUmergeRegs(dest, temp, xyzw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue