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,25 +35,22 @@ static RecompiledCodeReserve* nVifUpkExec = NULL;
|
|||
|
||||
// Merges xmm vectors without modifying source reg
|
||||
void mergeVectors(xRegisterSSE dest, xRegisterSSE src, xRegisterSSE temp, int xyzw) {
|
||||
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.
|
||||
if(!(xyzw & 0x1)) xAND.PS( dest, ptr128[SSEXYZWMask[0]]);
|
||||
if(!(xyzw & 0x2)) xAND.PS( dest, ptr128[SSEXYZWMask[1]]);
|
||||
if(!(xyzw & 0x4)) xAND.PS( dest, ptr128[SSEXYZWMask[2]]);
|
||||
if(!(xyzw & 0x8)) xAND.PS( dest, ptr128[SSEXYZWMask[3]]);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (x86caps.hasStreamingSIMD4Extensions || (xyzw==15)
|
||||
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)
|
||||
{
|
||||
//VIF can sent the temp directory as the source and destination, just need to clear the ones we dont want in which case.
|
||||
if(!(xyzw & 0x1)) xAND.PS( dest, ptr128[SSEXYZWMask[0]]);
|
||||
if(!(xyzw & 0x2)) xAND.PS( dest, ptr128[SSEXYZWMask[1]]);
|
||||
if(!(xyzw & 0x4)) xAND.PS( dest, ptr128[SSEXYZWMask[2]]);
|
||||
if(!(xyzw & 0x8)) xAND.PS( dest, ptr128[SSEXYZWMask[3]]);
|
||||
}
|
||||
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