Fixed the fix from rev339 (I hope) :p

git-svn-id: http://pcsx2-playground.googlecode.com/svn/trunk@353 a6443dda-0b58-4228-96e9-037be469359c
This commit is contained in:
ramapcsx2 2008-11-20 15:30:29 +00:00 committed by Gregory Hainaut
parent 958071dcf4
commit e47f14f4d5
1 changed files with 30 additions and 30 deletions

View File

@ -680,42 +680,42 @@ void rpropSPECIAL(EEINST* prev, EEINST* pinst)
rpropSetRead(_Rt_, EEINST_LIVE1|EEINST_MMX);
break;
//case 24: // mult
// // can do unsigned mult only if HI isn't used
// //using this allocation for temp causes the emu to crash
// //temp = (pinst->regs[XMMGPR_HI]&(EEINST_LIVE0|EEINST_LIVE1))?0:EEINST_MMX;
// temp = 0;
// rpropSetWrite(XMMGPR_LO, EEINST_LIVE1);
// rpropSetWrite(XMMGPR_HI, EEINST_LIVE1);
// rpropSetWrite(_Rd_, EEINST_LIVE1);
//
// // fixme - temp is always 0, so I doubt the next three lines are right. (arcum42)
// // Yep, its wrong. Using always 0 causes the wrong damage calculations in Soul Nomad.
// rpropSetRead(_Rs_, temp);
// rpropSetRead(_Rt_, temp);
// pinst->info |= temp;
// break;
//case 25: // multu
// rpropSetWrite(XMMGPR_LO, EEINST_LIVE1);
// rpropSetWrite(XMMGPR_HI, EEINST_LIVE1);
// rpropSetWrite(_Rd_, EEINST_LIVE1);
// rpropSetRead(_Rs_, EEINST_MMX);
// rpropSetRead(_Rt_, EEINST_MMX);
// pinst->info |= EEINST_MMX;
// break;
case 24: // mult
// can do unsigned mult only if HI isn't used
////using this allocation for temp causes the emu to crash
////temp = (pinst->regs[XMMGPR_HI]&(EEINST_LIVE0|EEINST_LIVE1))?0:EEINST_MMX;
//temp = 0;
//rpropSetWrite(XMMGPR_LO, EEINST_LIVE1);
//rpropSetWrite(XMMGPR_HI, EEINST_LIVE1);
//rpropSetWrite(_Rd_, EEINST_LIVE1);
//// fixme - temp is always 0, so I doubt the next three lines are right. (arcum42)
//// Yep, its wrong. Using always 0 causes the wrong damage calculations in Soul Nomad.
//// This bug i very important to fix!! (rama)
//rpropSetRead(_Rs_, temp);
//rpropSetRead(_Rt_, temp);
//pinst->info |= temp;
//break;
//using the code of rpropMMI's mult1 for now which works for 2 games that would fail before (rama)
temp = (pinst->regs[XMMGPR_HI]&(EEINST_LIVE2))?0:EEINST_MMX;
rpropSetWrite0(XMMGPR_LO, EEINST_LIVE2, 0);
rpropSetWrite0(XMMGPR_HI, EEINST_LIVE2, 0);
rpropSetWrite(_Rd_, EEINST_LIVE1);
rpropSetRead(_Rs_, temp);
rpropSetRead(_Rt_, temp);
pinst->info |= temp;
break;
case 25: // multu
rpropSetWrite(XMMGPR_LO, EEINST_LIVE1);
rpropSetWrite(XMMGPR_HI, EEINST_LIVE1);
rpropSetWrite(_Rd_, EEINST_LIVE1);
rpropSetRead(_Rs_, EEINST_MMX);
rpropSetRead(_Rt_, EEINST_MMX);
pinst->info |= EEINST_MMX;
rpropSetRead(_Rs_, EEINST_USED); //EEINST_MMX crashes on init, EEINST_XMM fails on Tales of Abyss, so EEINST_USED (rama)
rpropSetRead(_Rt_, EEINST_USED);
pinst->info |= EEINST_USED;
break;
case 26: // div