Added SysPrintfs to each VU opcode, to make debugging easier (phew..) :p

git-svn-id: http://pcsx2-playground.googlecode.com/svn/trunk@571 a6443dda-0b58-4228-96e9-037be469359c
This commit is contained in:
ramapcsx2 2009-01-09 19:29:12 +00:00 committed by Gregory Hainaut
parent a89d71f9bc
commit c77d4d007a
2 changed files with 107 additions and 37 deletions

View File

@ -282,7 +282,7 @@ void recVUMI_IADDI(VURegs *VU, int info)
s16 imm;
if ( _Ft_ == 0 ) return;
//SysPrintf("recVUMI_IADDI \n");
imm = ( VU->code >> 6 ) & 0x1f;
imm = ( imm & 0x10 ? 0xfff0 : 0) | ( imm & 0xf );
_addISIMMtoIT(VU, imm, info);
@ -298,7 +298,7 @@ void recVUMI_IADDIU(VURegs *VU, int info)
s16 imm;
if ( _Ft_ == 0 ) return;
//SysPrintf("recVUMI_IADDIU \n");
imm = ( ( VU->code >> 10 ) & 0x7800 ) | ( VU->code & 0x7ff );
_addISIMMtoIT(VU, imm, info);
}
@ -312,7 +312,7 @@ void recVUMI_IADD( VURegs *VU, int info )
{
int fdreg, fsreg = -1, ftreg = -1;
if ( _Fd_ == 0 ) return;
//SysPrintf("recVUMI_IADD \n");
if ( ( _Ft_ == 0 ) && ( _Fs_ == 0 ) ) {
fdreg = ALLOCVI(_Fd_, MODE_WRITE);
XOR32RtoR(fdreg, fdreg);
@ -358,7 +358,7 @@ void recVUMI_IAND( VURegs *VU, int info )
{
int fdreg, fsreg = -1, ftreg = -1;
if ( _Fd_ == 0 ) return;
//SysPrintf("recVUMI_IAND \n");
if ( ( _Fs_ == 0 ) || ( _Ft_ == 0 ) ) {
fdreg = ALLOCVI(_Fd_, MODE_WRITE);
XOR32RtoR(fdreg, fdreg);
@ -389,7 +389,7 @@ void recVUMI_IOR( VURegs *VU, int info )
{
int fdreg, fsreg = -1, ftreg = -1;
if ( _Fd_ == 0 ) return;
//SysPrintf("recVUMI_IOR \n");
if ( ( _Ft_ == 0 ) && ( _Fs_ == 0 ) ) {
fdreg = ALLOCVI(_Fd_, MODE_WRITE);
XOR32RtoR(fdreg, fdreg);
@ -437,7 +437,7 @@ void recVUMI_ISUB( VURegs *VU, int info )
{
int fdreg, fsreg = -1, ftreg = -1;
if ( _Fd_ == 0 ) return;
//SysPrintf("recVUMI_ISUB \n");
if ( ( _Ft_ == 0 ) && ( _Fs_ == 0 ) ) {
fdreg = ALLOCVI(_Fd_, MODE_WRITE);
XOR32RtoR(fdreg, fdreg);
@ -489,7 +489,7 @@ void recVUMI_ISUBIU( VURegs *VU, int info )
s16 imm;
if ( _Ft_ == 0 ) return;
//SysPrintf("recVUMI_ISUBIU \n");
imm = ( ( VU->code >> 10 ) & 0x7800 ) | ( VU->code & 0x7ff );
imm = -imm;
_addISIMMtoIT(VU, imm, info);
@ -503,7 +503,7 @@ void recVUMI_ISUBIU( VURegs *VU, int info )
void recVUMI_MOVE( VURegs *VU, int info )
{
if ( (_Ft_ == 0) || (_X_Y_Z_W == 0) ) return;
//SysPrintf("recVUMI_MOVE \n");
if (_X_Y_Z_W == 0x8) SSE_MOVSS_XMM_to_XMM(EEREC_T, EEREC_S);
else if (_X_Y_Z_W == 0xf) SSE_MOVAPS_XMM_to_XMM(EEREC_T, EEREC_S);
else {
@ -520,7 +520,7 @@ void recVUMI_MOVE( VURegs *VU, int info )
void recVUMI_MFIR( VURegs *VU, int info )
{
if ( (_Ft_ == 0) || (_X_Y_Z_W == 0) ) return;
//SysPrintf("recVUMI_MFIR \n");
_deleteX86reg(X86TYPE_VI|((VU==&VU1)?X86TYPE_VU1:0), _Fs_, 1);
if( _XYZW_SS ) {
@ -551,7 +551,7 @@ void recVUMI_MFIR( VURegs *VU, int info )
void recVUMI_MTIR( VURegs *VU, int info )
{
if ( _Ft_ == 0 ) return;
//SysPrintf("recVUMI_MTIR \n");
_deleteX86reg(X86TYPE_VI|((VU==&VU1)?X86TYPE_VU1:0), _Ft_, 2);
if( _Fsf_ == 0 ) {
@ -573,7 +573,7 @@ void recVUMI_MTIR( VURegs *VU, int info )
void recVUMI_MR32( VURegs *VU, int info )
{
if ( (_Ft_ == 0) || (_X_Y_Z_W == 0) ) return;
//SysPrintf("recVUMI_MR32 \n");
if (_X_Y_Z_W != 0xf) {
SSE_MOVAPS_XMM_to_XMM(EEREC_TEMP, EEREC_S);
SSE_SHUFPS_XMM_to_XMM(EEREC_TEMP, EEREC_TEMP, 0x39);
@ -711,7 +711,7 @@ void recVUMI_LQ(VURegs *VU, int info)
s16 imm;
if ( _Ft_ == 0 ) return;
//SysPrintf("recVUMI_LQ \n");
imm = (VU->code & 0x400) ? (VU->code & 0x3ff) | 0xfc00 : (VU->code & 0x3ff);
if (_Fs_ == 0) {
_loadEAX(VU, -1, (uptr)GET_VU_MEM(VU, (u32)imm*16), info);
@ -729,7 +729,7 @@ void recVUMI_LQ(VURegs *VU, int info)
void recVUMI_LQD( VURegs *VU, int info )
{
int fsreg;
//SysPrintf("recVUMI_LQD \n");
if ( _Fs_ != 0 ) {
fsreg = ALLOCVI(_Fs_, MODE_READ|MODE_WRITE);
SUB16ItoR( fsreg, 1 );
@ -749,7 +749,7 @@ void recVUMI_LQD( VURegs *VU, int info )
void recVUMI_LQI(VURegs *VU, int info)
{
int fsreg;
//SysPrintf("recVUMI_LQI \n");
if ( _Ft_ == 0 ) {
if( _Fs_ != 0 ) {
if( (fsreg = _checkX86reg(X86TYPE_VI|(VU==&VU1?X86TYPE_VU1:0), _Fs_, MODE_WRITE|MODE_READ)) >= 0 ) {
@ -992,7 +992,7 @@ void _saveEAX(VURegs *VU, int x86reg, uptr offset, int info)
void recVUMI_SQ(VURegs *VU, int info)
{
s16 imm;
//SysPrintf("recVUMI_SQ \n");
imm = ( VU->code & 0x400) ? ( VU->code & 0x3ff) | 0xfc00 : ( VU->code & 0x3ff);
if ( _Ft_ == 0 ) _saveEAX(VU, -1, (uptr)GET_VU_MEM(VU, (int)imm * 16), info);
else {
@ -1008,6 +1008,7 @@ void recVUMI_SQ(VURegs *VU, int info)
//------------------------------------------------------------------
void recVUMI_SQD(VURegs *VU, int info)
{
//SysPrintf("recVUMI_SQD \n");
if (_Ft_ == 0) _saveEAX(VU, -1, (uptr)VU->Mem, info);
else {
int ftreg = ALLOCVI(_Ft_, MODE_READ|MODE_WRITE);
@ -1023,6 +1024,7 @@ void recVUMI_SQD(VURegs *VU, int info)
//------------------------------------------------------------------
void recVUMI_SQI(VURegs *VU, int info)
{
//SysPrintf("recVUMI_SQI \n");
if (_Ft_ == 0) _saveEAX(VU, -1, (uptr)VU->Mem, info);
else {
int ftreg = ALLOCVI(_Ft_, MODE_READ|MODE_WRITE);
@ -1043,7 +1045,7 @@ void recVUMI_ILW(VURegs *VU, int info)
s16 imm, off;
if ( ( _Ft_ == 0 ) || ( _X_Y_Z_W == 0 ) ) return;
//SysPrintf("recVUMI_ILW \n");
imm = ( VU->code & 0x400) ? ( VU->code & 0x3ff) | 0xfc00 : ( VU->code & 0x3ff);
if (_X) off = 0;
else if (_Y) off = 4;
@ -1070,7 +1072,7 @@ void recVUMI_ILW(VURegs *VU, int info)
void recVUMI_ISW( VURegs *VU, int info )
{
s16 imm;
//SysPrintf("recVUMI_ISW \n");
imm = ( VU->code & 0x400) ? ( VU->code & 0x3ff) | 0xfc00 : ( VU->code & 0x3ff);
if (_Fs_ == 0) {
@ -1108,7 +1110,7 @@ void recVUMI_ILWR( VURegs *VU, int info )
int off, ftreg;
if ( ( _Ft_ == 0 ) || ( _X_Y_Z_W == 0 ) ) return;
//SysPrintf("recVUMI_ILWR \n");
if (_X) off = 0;
else if (_Y) off = 4;
else if (_Z) off = 8;
@ -1134,6 +1136,7 @@ void recVUMI_ILWR( VURegs *VU, int info )
void recVUMI_ISWR( VURegs *VU, int info )
{
int ftreg;
//SysPrintf("recVUMI_ISWR \n");
ADD_VI_NEEDED(_Fs_);
ftreg = ALLOCVI(_Ft_, MODE_READ);
@ -1292,6 +1295,7 @@ void recVUMI_RXOR( VURegs *VU, int info )
//------------------------------------------------------------------
void recVUMI_WAITQ( VURegs *VU, int info )
{
//SysPrintf("recVUMI_WAITQ \n");
// if( info & PROCESS_VU_SUPER ) {
// //CALLFunc(waitqfn);
// SuperVUFlush(0, 1);
@ -1307,6 +1311,7 @@ void recVUMI_FSAND( VURegs *VU, int info )
{
int ftreg;
u16 imm;
//SysPrintf("recVUMI_FSAND \n");
imm = (((VU->code >> 21 ) & 0x1) << 11) | (VU->code & 0x7ff);
if(_Ft_ == 0) return;
@ -1325,7 +1330,7 @@ void recVUMI_FSEQ( VURegs *VU, int info )
int ftreg;
u32 imm;
if ( _Ft_ == 0 ) return;
//SysPrintf("recVUMI_FSEQ \n");
imm = (((VU->code >> 21 ) & 0x1) << 11) | (VU->code & 0x7ff);
ftreg = ALLOCVI(_Ft_, MODE_WRITE);
@ -1347,7 +1352,7 @@ void recVUMI_FSOR( VURegs *VU, int info )
int ftreg;
u32 imm;
if(_Ft_ == 0) return;
//SysPrintf("recVUMI_FSOR \n");
imm = (((VU->code >> 21 ) & 0x1) << 11) | (VU->code & 0x7ff);
ftreg = ALLOCVI(_Ft_, MODE_WRITE);
@ -1367,6 +1372,7 @@ void recVUMI_FSSET(VURegs *VU, int info)
u32 prevaddr = VU_VI_ADDR(REG_STATUS_FLAG, 2);
u16 imm = 0;
//SysPrintf("recVUMI_FSSET \n");
imm = (((VU->code >> 21 ) & 0x1) << 11) | (VU->code & 0x7FF);
// keep the low 6 bits ONLY if the upper instruction is an fmac instruction (otherwise rewrite) - metal gear solid 3
@ -1390,7 +1396,7 @@ void recVUMI_FMAND( VURegs *VU, int info )
{
int fsreg, ftreg;
if ( _Ft_ == 0 ) return;
//SysPrintf("recVUMI_FMAND \n");
fsreg = _checkX86reg(X86TYPE_VI|(VU==&VU1?X86TYPE_VU1:0), _Fs_, MODE_READ);
ftreg = ALLOCVI(_Ft_, MODE_WRITE);//|MODE_8BITREG);
@ -1412,7 +1418,7 @@ void recVUMI_FMEQ( VURegs *VU, int info )
{
int ftreg, fsreg;
if ( _Ft_ == 0 ) return;
//SysPrintf("recVUMI_FMEQ \n");
if( _Ft_ == _Fs_ ) {
ftreg = ALLOCVI(_Ft_, MODE_WRITE|MODE_READ);//|MODE_8BITREG);
@ -1441,7 +1447,7 @@ void recVUMI_FMOR( VURegs *VU, int info )
{
int fsreg, ftreg;
if ( _Ft_ == 0 ) return;
//SysPrintf("recVUMI_FMOR \n");
if( _Fs_ == 0 ) {
ftreg = ALLOCVI(_Ft_, MODE_WRITE);//|MODE_8BITREG);
MOVZX32M16toR( ftreg, VU_VI_ADDR(REG_MAC_FLAG, 1) );
@ -1471,7 +1477,7 @@ void recVUMI_FMOR( VURegs *VU, int info )
void recVUMI_FCAND( VURegs *VU, int info )
{
int ftreg = ALLOCVI(1, MODE_WRITE|MODE_8BITREG);
//SysPrintf("recVUMI_FCAND \n");
MOV32MtoR( EAX, VU_VI_ADDR(REG_CLIP_FLAG, 1) );
XOR32RtoR( ftreg, ftreg );
AND32ItoR( EAX, VU->code & 0xFFFFFF );
@ -1487,7 +1493,7 @@ void recVUMI_FCAND( VURegs *VU, int info )
void recVUMI_FCEQ( VURegs *VU, int info )
{
int ftreg = ALLOCVI(1, MODE_WRITE|MODE_8BITREG);
//SysPrintf("recVUMI_FCEQ \n");
MOV32MtoR( EAX, VU_VI_ADDR(REG_CLIP_FLAG, 1) );
AND32ItoR( EAX, 0xffffff );
XOR32RtoR( ftreg, ftreg );
@ -1504,7 +1510,7 @@ void recVUMI_FCEQ( VURegs *VU, int info )
void recVUMI_FCOR( VURegs *VU, int info )
{
int ftreg = ALLOCVI(1, MODE_WRITE|MODE_8BITREG);
//SysPrintf("recVUMI_FCOR \n");
MOV32MtoR( EAX, VU_VI_ADDR(REG_CLIP_FLAG, 1) );
XOR32RtoR( ftreg, ftreg );
OR32ItoR( EAX, VU->code );
@ -1522,7 +1528,7 @@ void recVUMI_FCOR( VURegs *VU, int info )
void recVUMI_FCSET( VURegs *VU, int info )
{
u32 addr = VU_VI_ADDR(REG_CLIP_FLAG, 0);
//SysPrintf("recVUMI_FCSET \n");
MOV32ItoM(addr ? addr : VU_VI_ADDR(REG_CLIP_FLAG, 2), VU->code&0xffffff );
if( !(info & (PROCESS_VU_SUPER|PROCESS_VU_COP2)) )
@ -1538,7 +1544,7 @@ void recVUMI_FCGET( VURegs *VU, int info )
{
int ftreg;
if(_Ft_ == 0) return;
//SysPrintf("recVUMI_FCGET \n");
ftreg = ALLOCVI(_Ft_, MODE_WRITE);
MOV32MtoR(ftreg, VU_VI_ADDR(REG_CLIP_FLAG, 1));
@ -1560,7 +1566,7 @@ void recVUMI_FCGET( VURegs *VU, int info )
void recVUMI_MFP(VURegs *VU, int info)
{
if ( (_Ft_ == 0) || (_X_Y_Z_W == 0) ) return;
//SysPrintf("recVUMI_MFP \n");
if( _XYZW_SS ) {
_vuFlipRegSS(VU, EEREC_T);
SSE_MOVSS_M32_to_XMM(EEREC_TEMP, VU_VI_ADDR(REG_P, 1));
@ -1586,6 +1592,7 @@ void recVUMI_MFP(VURegs *VU, int info)
static PCSX2_ALIGNED16(float s_tempmem[4]);
void recVUMI_WAITP(VURegs *VU, int info)
{
//SysPrintf("recVUMI_WAITP \n");
// if( info & PROCESS_VU_SUPER )
// SuperVUFlush(1, 1);
}
@ -1704,7 +1711,7 @@ void recVUMI_ERLENG( VURegs *VU, int info )
void recVUMI_EATANxy( VURegs *VU, int info )
{
assert( VU == &VU1 );
//SysPrintf("recVUMI_EATANxy \n");
if( (xmmregs[EEREC_S].mode & MODE_WRITE) && (xmmregs[EEREC_S].mode&MODE_NOFLUSH) ) {
SSE_MOVLPS_XMM_to_M64((uptr)s_tempmem, EEREC_S);
FLD32((uptr)&s_tempmem[0]);
@ -1732,7 +1739,7 @@ void recVUMI_EATANxy( VURegs *VU, int info )
void recVUMI_EATANxz( VURegs *VU, int info )
{
assert( VU == &VU1 );
//SysPrintf("recVUMI_EATANxz \n");
if( (xmmregs[EEREC_S].mode & MODE_WRITE) && (xmmregs[EEREC_S].mode&MODE_NOFLUSH) ) {
SSE_MOVLPS_XMM_to_M64((uptr)s_tempmem, EEREC_S);
FLD32((uptr)&s_tempmem[0]);
@ -1885,6 +1892,7 @@ void recVUMI_ESIN( VURegs *VU, int info )
{
assert( VU == &VU1 );
//SysPrintf("recVUMI_ESIN \n");
if( (xmmregs[EEREC_S].mode & MODE_WRITE) && (xmmregs[EEREC_S].mode&MODE_NOFLUSH) ) {
switch(_Fsf_) {
case 0: SSE_MOVSS_XMM_to_M32((uptr)s_tempmem, EEREC_S);
@ -1915,6 +1923,7 @@ void recVUMI_EATAN( VURegs *VU, int info )
{
assert( VU == &VU1 );
//SysPrintf("recVUMI_EATAN \n");
if( (xmmregs[EEREC_S].mode & MODE_WRITE) && (xmmregs[EEREC_S].mode&MODE_NOFLUSH) ) {
switch(_Fsf_) {
case 0: SSE_MOVSS_XMM_to_M32((uptr)s_tempmem, EEREC_S);
@ -1944,7 +1953,7 @@ void recVUMI_EATAN( VURegs *VU, int info )
void recVUMI_EEXP( VURegs *VU, int info )
{
assert( VU == &VU1 );
//SysPrintf("recVUMI_EEXP \n");
FLDL2E();
if( (xmmregs[EEREC_S].mode & MODE_WRITE) && (xmmregs[EEREC_S].mode&MODE_NOFLUSH) ) {
@ -1987,7 +1996,7 @@ void recVUMI_XITOP( VURegs *VU, int info )
{
int ftreg;
if (_Ft_ == 0) return;
//SysPrintf("recVUMI_XITOP \n");
ftreg = ALLOCVI(_Ft_, MODE_WRITE);
MOVZX32M16toR( ftreg, (uptr)&VU->vifRegs->itop );
}
@ -2001,7 +2010,7 @@ void recVUMI_XTOP( VURegs *VU, int info )
{
int ftreg;
if ( _Ft_ == 0 ) return;
//SysPrintf("recVUMI_XTOP \n");
ftreg = ALLOCVI(_Ft_, MODE_WRITE);
MOVZX32M16toR( ftreg, (uptr)&VU->vifRegs->top );
}

View File

@ -153,6 +153,8 @@ void recUpdateFlags(VURegs * VU, int reg, int info)
static const 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;
//SysPrintf ("recUpdateFlags \n");
macaddr = VU_VI_ADDR(REG_MAC_FLAG, 0);
stataddr = VU_VI_ADDR(REG_STATUS_FLAG, 0); // write address
@ -898,6 +900,7 @@ flagUpdate:
void recVUMI_SUBA_iq(VURegs *VU, uptr addr, int info)
{
//SysPrintf ("recVUMI_SUBA_iq \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat3(addr);
if (_Fs_) vuFloat5( EEREC_S, EEREC_TEMP, _X_Y_Z_W);
@ -954,6 +957,7 @@ void recVUMI_SUBA_iq(VURegs *VU, uptr addr, int info)
void recVUMI_SUBA_xyzw(VURegs *VU, int xyzw, int info)
{
//SysPrintf ("recVUMI_SUBA_xyzw \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
if (_Fs_) vuFloat5( EEREC_S, EEREC_TEMP, _X_Y_Z_W);
if (_Ft_) vuFloat5( EEREC_T, EEREC_TEMP, ( 1 << (3 - xyzw) ) );
@ -1012,6 +1016,7 @@ void recVUMI_SUBAw(VURegs *VU, int info) { recVUMI_SUBA_xyzw(VU, 3, info); }
//------------------------------------------------------------------
void recVUMI_MUL_toD(VURegs *VU, int regd, int info)
{
//SysPrintf ("recVUMI_MUL_toD \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
//using vuFloat instead of vuFloat2 incase regd == EEREC_TEMP
if (_Fs_) vuFloat( info, EEREC_S, _X_Y_Z_W);
@ -1053,6 +1058,7 @@ void recVUMI_MUL_toD(VURegs *VU, int regd, int info)
void recVUMI_MUL_iq_toD(VURegs *VU, uptr addr, int regd, int info)
{
//SysPrintf ("recVUMI_MUL_iq_toD \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat3(addr);
if (_Fs_) vuFloat( info, EEREC_S, _X_Y_Z_W);
@ -1107,6 +1113,7 @@ void recVUMI_MUL_iq_toD(VURegs *VU, uptr addr, int regd, int info)
void recVUMI_MUL_xyzw_toD(VURegs *VU, int xyzw, int regd, int info)
{
//SysPrintf ("recVUMI_MUL_xyzw_toD \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
if (_Ft_) vuFloat( info, EEREC_T, ( 1 << (3 - xyzw) ) );
}
@ -1173,6 +1180,7 @@ void recVUMI_MUL_xyzw_toD(VURegs *VU, int xyzw, int regd, int info)
void recVUMI_MUL(VURegs *VU, int info)
{
//SysPrintf ("recVUMI_MUL \n");
if( !_Fd_ ) info |= PROCESS_EE_SET_D(EEREC_TEMP);
recVUMI_MUL_toD(VU, EEREC_D, info);
recUpdateFlags(VU, EEREC_D, info);
@ -1180,6 +1188,7 @@ void recVUMI_MUL(VURegs *VU, int info)
void recVUMI_MUL_iq(VURegs *VU, int addr, int info)
{
//SysPrintf ("recVUMI_MUL_iq \n");
if( !_Fd_ ) info |= PROCESS_EE_SET_D(EEREC_TEMP);
recVUMI_MUL_iq_toD(VU, addr, EEREC_D, info);
recUpdateFlags(VU, EEREC_D, info);
@ -1188,6 +1197,7 @@ void recVUMI_MUL_iq(VURegs *VU, int addr, int info)
void recVUMI_MUL_xyzw(VURegs *VU, int xyzw, int info)
{
//SysPrintf ("recVUMI_MUL_xyzw \n");
if( !_Fd_ ) info |= PROCESS_EE_SET_D(EEREC_TEMP);
recVUMI_MUL_xyzw_toD(VU, xyzw, EEREC_D, info);
recUpdateFlags(VU, EEREC_D, info);
@ -1207,18 +1217,21 @@ void recVUMI_MULw(VURegs *VU, int info) { recVUMI_MUL_xyzw(VU, 3, info); }
//------------------------------------------------------------------
void recVUMI_MULA( VURegs *VU, int info )
{
//SysPrintf ("recVUMI_MULA \n");
recVUMI_MUL_toD(VU, EEREC_ACC, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MULA_iq(VURegs *VU, int addr, int info)
{
//SysPrintf ("recVUMI_MULA_iq \n");
recVUMI_MUL_iq_toD(VU, addr, EEREC_ACC, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MULA_xyzw(VURegs *VU, int xyzw, int info)
{
//SysPrintf ("recVUMI_MULA_xyzw \n");
recVUMI_MUL_xyzw_toD(VU, xyzw, EEREC_ACC, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
@ -1237,6 +1250,7 @@ void recVUMI_MULAw(VURegs *VU, int info) { recVUMI_MULA_xyzw(VU, 3, info); }
//------------------------------------------------------------------
void recVUMI_MADD_toD(VURegs *VU, int regd, int info)
{
//SysPrintf ("recVUMI_MADD_toD \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat( info, EEREC_S, _X_Y_Z_W);
vuFloat( info, EEREC_T, _X_Y_Z_W);
@ -1303,6 +1317,7 @@ void recVUMI_MADD_toD(VURegs *VU, int regd, int info)
void recVUMI_MADD_iq_toD(VURegs *VU, uptr addr, int regd, int info)
{
//SysPrintf ("recVUMI_MADD_iq_toD \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat3(addr);
vuFloat( info, EEREC_S, _X_Y_Z_W);
@ -1390,6 +1405,7 @@ void recVUMI_MADD_iq_toD(VURegs *VU, uptr addr, int regd, int info)
void recVUMI_MADD_xyzw_toD(VURegs *VU, int xyzw, int regd, int info)
{
//SysPrintf ("recVUMI_MADD_xyzw_toD \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat( info, EEREC_T, ( 1 << (3 - xyzw) ) );
vuFloat( info, EEREC_ACC, _X_Y_Z_W);
@ -1502,6 +1518,7 @@ void recVUMI_MADD_xyzw_toD(VURegs *VU, int xyzw, int regd, int info)
void recVUMI_MADD(VURegs *VU, int info)
{
//SysPrintf ("recVUMI_MADD \n");
if( !_Fd_ ) info |= PROCESS_EE_SET_D(EEREC_TEMP);
recVUMI_MADD_toD(VU, EEREC_D, info);
recUpdateFlags(VU, EEREC_D, info);
@ -1509,6 +1526,7 @@ void recVUMI_MADD(VURegs *VU, int info)
void recVUMI_MADD_iq(VURegs *VU, int addr, int info)
{
//SysPrintf ("recVUMI_MADD_iq \n");
if( !_Fd_ ) info |= PROCESS_EE_SET_D(EEREC_TEMP);
recVUMI_MADD_iq_toD(VU, addr, EEREC_D, info);
recUpdateFlags(VU, EEREC_D, info);
@ -1516,6 +1534,7 @@ void recVUMI_MADD_iq(VURegs *VU, int addr, int info)
void recVUMI_MADD_xyzw(VURegs *VU, int xyzw, int info)
{
//SysPrintf ("recVUMI_MADD_xyzw \n");
if( !_Fd_ ) info |= PROCESS_EE_SET_D(EEREC_TEMP);
recVUMI_MADD_xyzw_toD(VU, xyzw, EEREC_D, info);
recUpdateFlags(VU, EEREC_D, info);
@ -1536,42 +1555,49 @@ void recVUMI_MADDw(VURegs *VU, int info) { recVUMI_MADD_xyzw(VU, 3, info); }
//------------------------------------------------------------------
void recVUMI_MADDA( VURegs *VU, int info )
{
//SysPrintf ("recVUMI_MADDA \n");
recVUMI_MADD_toD(VU, EEREC_ACC, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MADDAi( VURegs *VU , int info)
{
//SysPrintf ("recVUMI_MADDAi \n");
recVUMI_MADD_iq_toD( VU, VU_VI_ADDR(REG_I, 1), EEREC_ACC, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MADDAq( VURegs *VU , int info)
{
//SysPrintf ("recVUMI_MADDAq \n");
recVUMI_MADD_iq_toD( VU, VU_REGQ_ADDR, EEREC_ACC, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MADDAx( VURegs *VU , int info)
{
//SysPrintf ("recVUMI_MADDAx \n");
recVUMI_MADD_xyzw_toD(VU, 0, EEREC_ACC, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MADDAy( VURegs *VU , int info)
{
//SysPrintf ("recVUMI_MADDAy \n");
recVUMI_MADD_xyzw_toD(VU, 1, EEREC_ACC, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MADDAz( VURegs *VU , int info)
{
//SysPrintf ("recVUMI_MADDAz \n");
recVUMI_MADD_xyzw_toD(VU, 2, EEREC_ACC, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MADDAw( VURegs *VU , int info)
{
//SysPrintf ("recVUMI_MADDAw \n");
recVUMI_MADD_xyzw_toD(VU, 3, EEREC_ACC, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
@ -1583,6 +1609,7 @@ void recVUMI_MADDAw( VURegs *VU , int info)
//------------------------------------------------------------------
void recVUMI_MSUB_toD(VURegs *VU, int regd, int info)
{
//SysPrintf ("recVUMI_MSUB_toD \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat( info, EEREC_S, _X_Y_Z_W);
vuFloat( info, EEREC_T, _X_Y_Z_W);
@ -1643,6 +1670,7 @@ void recVUMI_MSUB_toD(VURegs *VU, int regd, int info)
void recVUMI_MSUB_temp_toD(VURegs *VU, int regd, int info)
{
//SysPrintf ("recVUMI_MSUB_temp_toD \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat( info, EEREC_S, _X_Y_Z_W);
vuFloat( info, EEREC_ACC, _X_Y_Z_W);
@ -1699,6 +1727,7 @@ void recVUMI_MSUB_temp_toD(VURegs *VU, int regd, int info)
void recVUMI_MSUB_iq_toD(VURegs *VU, int regd, int addr, int info)
{
//SysPrintf ("recVUMI_MSUB_iq_toD \n");
SSE_MOVSS_M32_to_XMM(EEREC_TEMP, addr);
SSE_SHUFPS_XMM_to_XMM(EEREC_TEMP, EEREC_TEMP, 0x00);
recVUMI_MSUB_temp_toD(VU, regd, info);
@ -1706,12 +1735,14 @@ void recVUMI_MSUB_iq_toD(VURegs *VU, int regd, int addr, int info)
void recVUMI_MSUB_xyzw_toD(VURegs *VU, int regd, int xyzw, int info)
{
//SysPrintf ("recVUMI_MSUB_xyzw_toD \n");
_unpackVF_xyzw(EEREC_TEMP, EEREC_T, xyzw);
recVUMI_MSUB_temp_toD(VU, regd, info);
}
void recVUMI_MSUB(VURegs *VU, int info)
{
//SysPrintf ("recVUMI_MSUB \n");
if( !_Fd_ ) info |= PROCESS_EE_SET_D(EEREC_TEMP);
recVUMI_MSUB_toD(VU, EEREC_D, info);
recUpdateFlags(VU, EEREC_D, info);
@ -1719,6 +1750,7 @@ void recVUMI_MSUB(VURegs *VU, int info)
void recVUMI_MSUB_iq(VURegs *VU, int addr, int info)
{
//SysPrintf ("recVUMI_MSUB_iq \n");
if( !_Fd_ ) info |= PROCESS_EE_SET_D(EEREC_TEMP);
recVUMI_MSUB_iq_toD(VU, EEREC_D, addr, info);
recUpdateFlags(VU, EEREC_D, info);
@ -1728,6 +1760,7 @@ void recVUMI_MSUBi(VURegs *VU, int info) { recVUMI_MSUB_iq(VU, VU_VI_ADDR(REG_I,
void recVUMI_MSUBq(VURegs *VU, int info) { recVUMI_MSUB_iq(VU, VU_REGQ_ADDR, info); }
void recVUMI_MSUBx(VURegs *VU, int info)
{
//SysPrintf ("recVUMI_MSUBx \n");
if( !_Fd_ ) info |= PROCESS_EE_SET_D(EEREC_TEMP);
recVUMI_MSUB_xyzw_toD(VU, EEREC_D, 0, info);
recUpdateFlags(VU, EEREC_D, info);
@ -1735,6 +1768,7 @@ void recVUMI_MSUBx(VURegs *VU, int info)
void recVUMI_MSUBy(VURegs *VU, int info)
{
//SysPrintf ("recVUMI_MSUBy \n");
if( !_Fd_ ) info |= PROCESS_EE_SET_D(EEREC_TEMP);
recVUMI_MSUB_xyzw_toD(VU, EEREC_D, 1, info);
recUpdateFlags(VU, EEREC_D, info);
@ -1742,6 +1776,7 @@ void recVUMI_MSUBy(VURegs *VU, int info)
void recVUMI_MSUBz(VURegs *VU, int info)
{
//SysPrintf ("recVUMI_MSUBz \n");
if( !_Fd_ ) info |= PROCESS_EE_SET_D(EEREC_TEMP);
recVUMI_MSUB_xyzw_toD(VU, EEREC_D, 2, info);
recUpdateFlags(VU, EEREC_D, info);
@ -1749,6 +1784,7 @@ void recVUMI_MSUBz(VURegs *VU, int info)
void recVUMI_MSUBw(VURegs *VU, int info)
{
//SysPrintf ("recVUMI_MSUBw \n");
if( !_Fd_ ) info |= PROCESS_EE_SET_D(EEREC_TEMP);
recVUMI_MSUB_xyzw_toD(VU, EEREC_D, 3, info);
recUpdateFlags(VU, EEREC_D, info);
@ -1761,42 +1797,49 @@ void recVUMI_MSUBw(VURegs *VU, int info)
//------------------------------------------------------------------
void recVUMI_MSUBA( VURegs *VU, int info )
{
//SysPrintf ("recVUMI_MSUBA \n");
recVUMI_MSUB_toD(VU, EEREC_ACC, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MSUBAi( VURegs *VU, int info )
{
//SysPrintf ("recVUMI_MSUBAi \n");
recVUMI_MSUB_iq_toD( VU, EEREC_ACC, VU_VI_ADDR(REG_I, 1), info );
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MSUBAq( VURegs *VU, int info )
{
//SysPrintf ("recVUMI_MSUBAq \n");
recVUMI_MSUB_iq_toD( VU, EEREC_ACC, VU_REGQ_ADDR, info );
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MSUBAx( VURegs *VU, int info )
{
//SysPrintf ("recVUMI_MSUBAx \n");
recVUMI_MSUB_xyzw_toD(VU, EEREC_ACC, 0, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MSUBAy( VURegs *VU, int info )
{
//SysPrintf ("recVUMI_MSUBAy \n");
recVUMI_MSUB_xyzw_toD(VU, EEREC_ACC, 1, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MSUBAz( VURegs *VU, int info )
{
//SysPrintf ("recVUMI_MSUBAz \n");
recVUMI_MSUB_xyzw_toD(VU, EEREC_ACC, 2, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
void recVUMI_MSUBAw( VURegs *VU, int info )
{
//SysPrintf ("recVUMI_MSUBAw \n");
recVUMI_MSUB_xyzw_toD(VU, EEREC_ACC, 3, info);
recUpdateFlags(VU, EEREC_ACC, info);
}
@ -1809,6 +1852,8 @@ void recVUMI_MSUBAw( VURegs *VU, int info )
void recVUMI_MAX(VURegs *VU, int info)
{
if ( _Fd_ == 0 ) return;
//SysPrintf ("recVUMI_MAX \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat5( EEREC_S, EEREC_TEMP, _X_Y_Z_W);
vuFloat5( EEREC_T, EEREC_TEMP, _X_Y_Z_W);
@ -1841,6 +1886,8 @@ void recVUMI_MAX(VURegs *VU, int info)
void recVUMI_MAX_iq(VURegs *VU, uptr addr, int info)
{
if ( _Fd_ == 0 ) return;
//SysPrintf ("recVUMI_MAX_iq \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat( info, EEREC_S, _X_Y_Z_W);
vuFloat3(addr);
@ -1899,6 +1946,8 @@ void recVUMI_MAX_iq(VURegs *VU, uptr addr, int info)
void recVUMI_MAX_xyzw(VURegs *VU, int xyzw, int info)
{
if ( _Fd_ == 0 ) return;
//SysPrintf ("recVUMI_MAX_xyzw \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat( info, EEREC_S, _X_Y_Z_W);
vuFloat( info, EEREC_T, ( 1 << (3 - xyzw) ) );
@ -1978,6 +2027,7 @@ void recVUMI_MINI(VURegs *VU, int info)
{
if ( _Fd_ == 0 ) return;
//SysPrintf ("recVUMI_MINI \n");
if( _X_Y_Z_W == 8 ) {
if (CHECK_VU_EXTRA_OVERFLOW) { vuFloat5( EEREC_S, EEREC_TEMP, 8); vuFloat5( EEREC_T, EEREC_TEMP, 8); }
if (EEREC_D == EEREC_S) SSE_MINSS_XMM_to_XMM(EEREC_D, EEREC_T);
@ -2014,6 +2064,8 @@ void recVUMI_MINI(VURegs *VU, int info)
void recVUMI_MINI_iq(VURegs *VU, uptr addr, int info)
{
if ( _Fd_ == 0 ) return;
//SysPrintf ("recVUMI_MINI_iq \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat( info, EEREC_S, _X_Y_Z_W);
vuFloat3(addr);
@ -2072,6 +2124,8 @@ void recVUMI_MINI_iq(VURegs *VU, uptr addr, int info)
void recVUMI_MINI_xyzw(VURegs *VU, int xyzw, int info)
{
if ( _Fd_ == 0 ) return;
//SysPrintf ("recVUMI_MINI_xyzw \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat( info, EEREC_S, _X_Y_Z_W);
vuFloat( info, EEREC_T, ( 1 << (3 - xyzw) ) );
@ -2122,6 +2176,7 @@ void recVUMI_MINIw(VURegs *VU, int info) { recVUMI_MINI_xyzw(VU, 3, info); }
//------------------------------------------------------------------
void recVUMI_OPMULA( VURegs *VU, int info )
{
//SysPrintf ("recVUMI_OPMULA \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat5( EEREC_S, EEREC_TEMP, 0xE);
vuFloat5( EEREC_T, EEREC_TEMP, 0xE);
@ -2148,6 +2203,7 @@ void recVUMI_OPMULA( VURegs *VU, int info )
//------------------------------------------------------------------
void recVUMI_OPMSUB( VURegs *VU, int info )
{
//SysPrintf ("recVUMI_OPMSUB \n");
if (CHECK_VU_EXTRA_OVERFLOW) {
vuFloat5( EEREC_S, EEREC_TEMP, 0xE);
vuFloat5( EEREC_T, EEREC_TEMP, 0xE);
@ -2177,6 +2233,7 @@ void recVUMI_OPMSUB( VURegs *VU, int info )
//------------------------------------------------------------------
void recVUMI_NOP( VURegs *VU, int info )
{
//SysPrintf ("recVUMI_NOP \n");
}
//------------------------------------------------------------------
@ -2188,6 +2245,7 @@ static const PCSX2_ALIGNED16(int rec_const_0x8000000[4]) = { 0x80000000, 0x80000
void recVUMI_FTOI_Saturate(int rec_s, int rec_t, int rec_tmp1, int rec_tmp2)
{
//SysPrintf ("recVUMI_FTOI_Saturate \n");
//Duplicate the xor'd sign bit to the whole value
//FFFF FFFF for positive, 0 for negative
SSE_MOVAPS_XMM_to_XMM(rec_tmp1, rec_s);
@ -2222,7 +2280,7 @@ void recVUMI_FTOI0(VURegs *VU, int info)
if ( _Ft_ == 0 ) return;
//SysPrintf("recVUMI_FTOI0()\n");
//SysPrintf ("recVUMI_FTOI0 \n");
if (_X_Y_Z_W != 0xf) {
SSE_MOVAPS_XMM_to_XMM(EEREC_TEMP, EEREC_S);
@ -2323,8 +2381,7 @@ void recVUMI_FTOIX(VURegs *VU, int addr, int info)
if ( _Ft_ == 0 ) return;
//SysPrintf("recVUMI_FTOIX()\n");
//SysPrintf ("recVUMI_FTOIX \n");
if (_X_Y_Z_W != 0xf) {
SSE_MOVAPS_XMM_to_XMM(EEREC_TEMP, EEREC_S);
SSE_MULPS_M128_to_XMM(EEREC_TEMP, addr);
@ -2434,6 +2491,7 @@ void recVUMI_ITOF0( VURegs *VU, int info )
{
if ( _Ft_ == 0 ) return;
//SysPrintf ("recVUMI_ITOF0 \n");
if (_X_Y_Z_W != 0xf) {
SSE2_CVTDQ2PS_XMM_to_XMM(EEREC_TEMP, EEREC_S);
vuFloat( info, EEREC_TEMP, 15); // Clamp infinities
@ -2450,6 +2508,7 @@ void recVUMI_ITOFX(VURegs *VU, int addr, int info)
{
if ( _Ft_ == 0 ) return;
//SysPrintf ("recVUMI_ITOFX \n");
if (_X_Y_Z_W != 0xf) {
SSE2_CVTDQ2PS_XMM_to_XMM(EEREC_TEMP, EEREC_S);
SSE_MULPS_M128_to_XMM(EEREC_TEMP, addr);
@ -2482,6 +2541,8 @@ void recVUMI_CLIP(VURegs *VU, int info)
u32 clipaddr = VU_VI_ADDR(REG_CLIP_FLAG, 0);
u32 prevclipaddr = VU_VI_ADDR(REG_CLIP_FLAG, 2);
//SysPrintf ("recVUMI_CLIP \n");
if( clipaddr == 0 ) { // battle star has a clip right before fcset
SysPrintf("skipping vu clip\n");
return;