From f137821d9c82f2913af92202613462a09a8379e1 Mon Sep 17 00:00:00 2001 From: cottonvibes Date: Sat, 20 Dec 2008 07:04:20 +0000 Subject: [PATCH] minor FPU min/max opcode fix. minor VU Clip opcode fix. git-svn-id: http://pcsx2-playground.googlecode.com/svn/trunk@463 a6443dda-0b58-4228-96e9-037be469359c --- pcsx2/x86/iFPU.c | 14 +++++++------- pcsx2/x86/iVUmicroUpper.cpp | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pcsx2/x86/iFPU.c b/pcsx2/x86/iFPU.c index c043aec7c1..34ac1585a1 100644 --- a/pcsx2/x86/iFPU.c +++ b/pcsx2/x86/iFPU.c @@ -744,35 +744,35 @@ int recCommutativeOp(int info, int regd, int op) case PROCESS_EE_S: if (regd == EEREC_S) { SSE_MOVSS_M32_to_XMM(t0reg, (uptr)&fpuRegs.fpr[_Ft_]); - if (CHECK_FPU_EXTRA_OVERFLOW && /*!CHECK_FPUCLAMPHACK &&*/ (op < 2)) { fpuFloat2(regd); fpuFloat2(t0reg); } + if (CHECK_FPU_EXTRA_OVERFLOW /*&& !CHECK_FPUCLAMPHACK */ || (op >= 2)) { fpuFloat2(regd); fpuFloat2(t0reg); } recComOpXMM_to_XMM[op](regd, t0reg); } else { SSE_MOVSS_M32_to_XMM(regd, (uptr)&fpuRegs.fpr[_Ft_]); - if (CHECK_FPU_EXTRA_OVERFLOW && (op < 2)) { fpuFloat2(regd); fpuFloat2(EEREC_S); } + if (CHECK_FPU_EXTRA_OVERFLOW || (op >= 2)) { fpuFloat2(regd); fpuFloat2(EEREC_S); } recComOpXMM_to_XMM[op](regd, EEREC_S); } break; case PROCESS_EE_T: if (regd == EEREC_T) { SSE_MOVSS_M32_to_XMM(t0reg, (uptr)&fpuRegs.fpr[_Fs_]); - if (CHECK_FPU_EXTRA_OVERFLOW && (op < 2)) { fpuFloat2(regd); fpuFloat2(t0reg); } + if (CHECK_FPU_EXTRA_OVERFLOW || (op >= 2)) { fpuFloat2(regd); fpuFloat2(t0reg); } recComOpXMM_to_XMM[op](regd, t0reg); } else { SSE_MOVSS_M32_to_XMM(regd, (uptr)&fpuRegs.fpr[_Fs_]); - if (CHECK_FPU_EXTRA_OVERFLOW && (op < 2)) { fpuFloat2(regd); fpuFloat2(EEREC_T); } + if (CHECK_FPU_EXTRA_OVERFLOW || (op >= 2)) { fpuFloat2(regd); fpuFloat2(EEREC_T); } recComOpXMM_to_XMM[op](regd, EEREC_T); } break; case (PROCESS_EE_S|PROCESS_EE_T): if (regd == EEREC_T) { - if (CHECK_FPU_EXTRA_OVERFLOW && (op < 2)) { fpuFloat2(regd); fpuFloat2(EEREC_S); } + if (CHECK_FPU_EXTRA_OVERFLOW || (op >= 2)) { fpuFloat2(regd); fpuFloat2(EEREC_S); } recComOpXMM_to_XMM[op](regd, EEREC_S); } else { if (regd != EEREC_S) SSE_MOVSS_XMM_to_XMM(regd, EEREC_S); - if (CHECK_FPU_EXTRA_OVERFLOW && (op < 2)) { fpuFloat2(regd); fpuFloat2(EEREC_T); } + if (CHECK_FPU_EXTRA_OVERFLOW || (op >= 2)) { fpuFloat2(regd); fpuFloat2(EEREC_T); } recComOpXMM_to_XMM[op](regd, EEREC_T); } break; @@ -780,7 +780,7 @@ int recCommutativeOp(int info, int regd, int op) SysPrintf("FPU: recCommutativeOp case 4\n"); SSE_MOVSS_M32_to_XMM(regd, (uptr)&fpuRegs.fpr[_Fs_]); SSE_MOVSS_M32_to_XMM(t0reg, (uptr)&fpuRegs.fpr[_Ft_]); - if (CHECK_FPU_EXTRA_OVERFLOW && (op < 2)) { fpuFloat2(regd); fpuFloat2(t0reg); } + if (CHECK_FPU_EXTRA_OVERFLOW || (op >= 2)) { fpuFloat2(regd); fpuFloat2(t0reg); } recComOpXMM_to_XMM[op](regd, t0reg); break; } diff --git a/pcsx2/x86/iVUmicroUpper.cpp b/pcsx2/x86/iVUmicroUpper.cpp index 0187182e82..00f93c4c9b 100644 --- a/pcsx2/x86/iVUmicroUpper.cpp +++ b/pcsx2/x86/iVUmicroUpper.cpp @@ -2564,6 +2564,9 @@ void recVUMI_CLIP(VURegs *VU, int info) //if ( (x86temp1 == 0) || (x86temp2 == 0) ) SysPrintf("VU CLIP Allocation Error: EAX being allocated! \n"); + _freeXMMreg(t1reg); // These should have been freed at allocation in eeVURecompileCode() + _freeXMMreg(t2reg); // but if they've been used since then, then free them. (just doing this incase :p (cottonvibes)) + if( _Ft_ == 0 ) { SSE_MOVAPS_M128_to_XMM(EEREC_TEMP, (uptr)&s_fones[0]); // all 1s SSE_MOVAPS_M128_to_XMM(t1reg, (uptr)&s_fones[4]); @@ -2601,9 +2604,6 @@ void recVUMI_CLIP(VURegs *VU, int info) if ( ( CHECK_VUCLIPHACK ) || ( !(info & (PROCESS_VU_SUPER|PROCESS_VU_COP2)) ) ) MOV32RtoM((uptr)&VU->VI[REG_CLIP_FLAG], EAX); - _freeXMMreg(t1reg); - _freeXMMreg(t2reg); - _freeX86reg(x86temp1); _freeX86reg(x86temp2); }