From 09d581217da91a9931247f9fb466dbfb2408fecf Mon Sep 17 00:00:00 2001 From: cottonvibes Date: Mon, 23 Feb 2009 03:42:39 +0000 Subject: [PATCH] - nneeve fixed some bugs when VU extra/extra+sign clamp modes were enabled. - i added paths.h to the vs2008 project file. git-svn-id: http://pcsx2.googlecode.com/svn/trunk@572 96395faa-99c1-11dd-bbfe-3dabce05a288 --- pcsx2/windows/VCprojects/pcsx2_2008.vcproj | 4 ++++ pcsx2/x86/iVUmicroUpper.cpp | 18 ++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/pcsx2/windows/VCprojects/pcsx2_2008.vcproj b/pcsx2/windows/VCprojects/pcsx2_2008.vcproj index 221357d797..7283f46164 100644 --- a/pcsx2/windows/VCprojects/pcsx2_2008.vcproj +++ b/pcsx2/windows/VCprojects/pcsx2_2008.vcproj @@ -2922,6 +2922,10 @@ RelativePath="..\memzero.h" > + + diff --git a/pcsx2/x86/iVUmicroUpper.cpp b/pcsx2/x86/iVUmicroUpper.cpp index 28f20d2d2f..2970f7616c 100644 --- a/pcsx2/x86/iVUmicroUpper.cpp +++ b/pcsx2/x86/iVUmicroUpper.cpp @@ -2095,7 +2095,7 @@ void recVUMI_MSUB_toD(VURegs *VU, int regd, int info) //SysPrintf ("recVUMI_MSUB_toD \n"); if (CHECK_VU_EXTRA_OVERFLOW) { if (_Fs_) vuFloat5_useEAX( EEREC_S, EEREC_TEMP, _X_Y_Z_W ); - if (_Ft_) vuFloat5_useEAX( EEREC_S, EEREC_TEMP, _X_Y_Z_W ); + if (_Ft_) vuFloat5_useEAX( EEREC_T, EEREC_TEMP, _X_Y_Z_W ); vuFloat5_useEAX( EEREC_ACC, EEREC_TEMP, _X_Y_Z_W ); } @@ -2154,10 +2154,6 @@ 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) { - if (_Fs_) vuFloat5_useEAX( EEREC_S, EEREC_TEMP, _X_Y_Z_W ); - vuFloat5_useEAX( EEREC_ACC, EEREC_TEMP, _X_Y_Z_W ); - } if (_X_Y_Z_W != 0xf) { int t1reg = _vuGetTempXMMreg(info); @@ -2210,6 +2206,11 @@ 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"); + if (CHECK_VU_EXTRA_OVERFLOW) { + if (_Fs_) vuFloat5_useEAX( EEREC_S, EEREC_TEMP, _X_Y_Z_W ); + vuFloat5_useEAX( EEREC_ACC, EEREC_TEMP, _X_Y_Z_W ); + vuFloat3(addr); + } 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); @@ -2218,6 +2219,11 @@ 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"); + if (CHECK_VU_EXTRA_OVERFLOW) { + if (_Fs_) vuFloat5_useEAX( EEREC_S, EEREC_TEMP, _X_Y_Z_W ); + if (_Ft_) vuFloat5_useEAX( EEREC_T, EEREC_TEMP, 1 << (3 - xyzw)); + vuFloat5_useEAX( EEREC_ACC, EEREC_TEMP, _X_Y_Z_W ); + } _unpackVF_xyzw(EEREC_TEMP, EEREC_T, xyzw); recVUMI_MSUB_temp_toD(VU, regd, info); } @@ -3210,4 +3216,4 @@ void recVUMI_CLIP(VURegs *VU, int info) _freeX86reg(x86temp1); _freeX86reg(x86temp2); -} \ No newline at end of file +}