From ce4b58ba61a8e956747512d7dc909202606a5de0 Mon Sep 17 00:00:00 2001 From: cottonvibes Date: Mon, 15 Jun 2009 22:28:05 +0000 Subject: [PATCH] microVU: - Minor changes git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1370 96395faa-99c1-11dd-bbfe-3dabce05a288 --- pcsx2/x86/microVU_Analyze.inl | 24 +++++++++++------------- pcsx2/x86/microVU_Misc.h | 13 +++++-------- pcsx2/x86/microVU_Misc.inl | 7 +++---- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/pcsx2/x86/microVU_Analyze.inl b/pcsx2/x86/microVU_Analyze.inl index 67169db9ed..abec8bcda8 100644 --- a/pcsx2/x86/microVU_Analyze.inl +++ b/pcsx2/x86/microVU_Analyze.inl @@ -277,21 +277,20 @@ microVUt(void) mVUanalyzeR2(mV, int Ft, bool canBeNOP) { iPC = curPC; \ } - microVUt(void) mVUanalyzeSflag(mV, int It) { + mVUlow.readFlags = 1; + analyzeVIreg2(It, mVUlow.VI_write, 1); if (!It) { mVUlow.isNOP = 1; } else { mVUinfo.swapOps = 1; mVUsFlagHack = 0; // Don't Optimize Out Status Flags for this block - if (mVUcount < 4) { mVUpBlock->pState.needExactMatch |= 0xf /*<< mVUcount*/; } + flagSet(sFLAG.doNonSticky); + if (mVUcount < 4) { mVUpBlock->pState.needExactMatch |= 0xf; } if (mVUcount >= 1) { incPC2(-2); mVUlow.useSflag = 1; incPC2(2); } // Note: useSflag is used for status flag optimizations when a FSSET instruction is called. // Do to stalls, it can only be set one instruction prior to the status flag read instruction // if we were guaranteed no-stalls were to happen, it could be set 4 instruction prior. } - mVUlow.readFlags = 1; - analyzeVIreg2(It, mVUlow.VI_write, 1); - flagSet(sFLAG.doNonSticky); } microVUt(void) mVUanalyzeFSSET(mV) { @@ -304,16 +303,15 @@ microVUt(void) mVUanalyzeFSSET(mV) { //------------------------------------------------------------------ microVUt(void) mVUanalyzeMflag(mV, int Is, int It) { - if (!It) { mVUlow.isNOP = 1; } - else { // Need set _doMac for 4 previous Ops (need to do all 4 because stalls could change the result needed) - mVUinfo.swapOps = 1; - if (mVUcount < 4) { mVUpBlock->pState.needExactMatch |= 0xf << (/*mVUcount +*/ 4); } - - } mVUlow.readFlags = 1; analyzeVIreg1(Is, mVUlow.VI_read[0]); analyzeVIreg2(It, mVUlow.VI_write, 1); - flagSet(mFLAG.doFlag); + if (!It) { mVUlow.isNOP = 1; } + else { // Need set _doMac for 4 previous Ops (need to do all 4 because stalls could change the result needed) + mVUinfo.swapOps = 1; + if (mVUcount < 4) { mVUpBlock->pState.needExactMatch |= 0xf << 4; } + flagSet(mFLAG.doFlag); + } } //------------------------------------------------------------------ @@ -323,7 +321,7 @@ microVUt(void) mVUanalyzeMflag(mV, int Is, int It) { microVUt(void) mVUanalyzeCflag(mV, int It) { mVUinfo.swapOps = 1; mVUlow.readFlags = 1; - if (mVUcount < 4) { mVUpBlock->pState.needExactMatch |= 0xf << (/*mVUcount +*/ 8); } + if (mVUcount < 4) { mVUpBlock->pState.needExactMatch |= 0xf << 8; } analyzeVIreg2(It, mVUlow.VI_write, 1); } diff --git a/pcsx2/x86/microVU_Misc.h b/pcsx2/x86/microVU_Misc.h index 5538fcc26d..4196d35e33 100644 --- a/pcsx2/x86/microVU_Misc.h +++ b/pcsx2/x86/microVU_Misc.h @@ -164,18 +164,15 @@ declareAllVariables // Define mVUquickSearch #ifndef __LINUX__ extern u8 mVUsearchXMM[0x1000]; -#endif - typedef u32 (__fastcall *mVUCall)(void*, void*); -#ifndef __LINUX__ #define mVUquickSearch(dest, src, size) ((((mVUCall)((void*)mVUsearchXMM))(dest, src)) == 0xf) -// Note: If GCC builds crash with above function, it means -// that they're not guaranteeing 16-byte alignment on the structs -// being compared. So use this function instead: +#define mVUemitSearch() { mVUcustomSearch(); } #else -//#define mVUquickSearch(dest, src, size) (!memcmp(dest, src, size)) +// Note: GCC builds crash with custom search function, because +// they're not guaranteeing 16-byte alignment on the structs :( +// #define mVUquickSearch(dest, src, size) (!memcmp(dest, src, size)) #define mVUquickSearch(dest, src, size) (!memcmp_mmx(dest, src, size)) -#define mVUemitSearch() +#define mVUemitSearch() #endif // Misc Macros... diff --git a/pcsx2/x86/microVU_Misc.inl b/pcsx2/x86/microVU_Misc.inl index 9fbd866547..81534987f1 100644 --- a/pcsx2/x86/microVU_Misc.inl +++ b/pcsx2/x86/microVU_Misc.inl @@ -438,11 +438,11 @@ void SSE_ADD2PS_XMM_to_XMM(x86SSERegType to, x86SSERegType from) { // Micro VU - Custom Quick Search //------------------------------------------------------------------ -#ifndef __LINUX__ PCSX2_ALIGNED(0x1000, static u8 mVUsearchXMM[0x1000]); -// Generates a custom optimized block-search function (Note: Structs must be 16-byte aligned!) -void mVUemitSearch() { +// Generates a custom optimized block-search function +// Note: Structs must be 16-byte aligned! (GCC doesn't guarantee this) +void mVUcustomSearch() { using namespace x86Emitter; HostSys::MemProtect(mVUsearchXMM, 0x1000, Protect_ReadWrite, false); memset_8<0xcc,0x1000>(mVUsearchXMM); @@ -491,4 +491,3 @@ void mVUemitSearch() { xRET(); HostSys::MemProtect(mVUsearchXMM, 0x1000, Protect_ReadOnly, true ); } -#endif