EE: freeMMXreg is a nop because inuse == 0

This commit is contained in:
Gregory Hainaut 2016-02-07 12:56:30 +01:00
parent 6f561d6bd7
commit 45443b48ef
4 changed files with 1 additions and 51 deletions

View File

@ -313,10 +313,8 @@ struct _mmxregs {
void _initMMXregs(); void _initMMXregs();
void _clearNeededMMXregs(); void _clearNeededMMXregs();
void _freeMMXreg(u32 mmxreg);
void _flushMMXregs(); void _flushMMXregs();
u8 _hasFreeMMXreg(); u8 _hasFreeMMXreg();
void _freeMMXregs();
int _getNumMMXwrite(); int _getNumMMXwrite();
// returns new index of reg, lower 32 bits already in mmx // returns new index of reg, lower 32 bits already in mmx

View File

@ -519,30 +519,6 @@ int _getNumMMXwrite()
return num; return num;
} }
void _freeMMXreg(u32 mmxreg)
{
pxAssert( mmxreg < iREGCNT_MMX );
if (!mmxregs[mmxreg].inuse) return;
if (mmxregs[mmxreg].mode & MODE_WRITE ) {
// Not sure if this line is accurate, since if the 32 was 34, it would be MMX_ISGPR.
if ( /*mmxregs[mmxreg].reg >= MMX_GPR &&*/ mmxregs[mmxreg].reg < MMX_GPR+32 ) // Checking if a u32 is >=0 is pointless.
pxAssert( !(g_cpuHasConstReg & (1<<(mmxregs[mmxreg].reg-MMX_GPR))) );
pxAssert( mmxregs[mmxreg].reg != MMX_GPR );
if( MMX_IS32BITS(mmxregs[mmxreg].reg) )
xMOVD(ptr[(_MMXGetAddr(mmxregs[mmxreg].reg))], xRegisterMMX(mmxreg));
else
xMOVQ(ptr[(_MMXGetAddr(mmxregs[mmxreg].reg))], xRegisterMMX(mmxreg));
SetMMXstate();
}
mmxregs[mmxreg].mode &= ~MODE_WRITE;
mmxregs[mmxreg].inuse = 0;
}
// write all active regs // write all active regs
void _flushMMXregs() void _flushMMXregs()
{ {
@ -569,23 +545,7 @@ void _flushMMXregs()
} }
} }
void _freeMMXregs()
{
uint i;
for (i=0; i<iREGCNT_MMX; i++) {
if (mmxregs[i].inuse == 0) continue;
pxAssert( mmxregs[i].reg != MMX_TEMP );
pxAssert( mmxregs[i].mode & MODE_READ );
_freeMMXreg(i);
}
}
void SetFPUstate() { void SetFPUstate() {
_freeMMXreg(6);
_freeMMXreg(7);
if (x86FpuState == MMX_STATE) { if (x86FpuState == MMX_STATE) {
xEMMS(); xEMMS();
x86FpuState = FPU_STATE; x86FpuState = FPU_STATE;

View File

@ -961,9 +961,7 @@ void iFlushCall(int flushtype)
else if( flushtype & FLUSH_FLUSH_XMM) else if( flushtype & FLUSH_FLUSH_XMM)
_flushXMMregs(); _flushXMMregs();
if( flushtype & FLUSH_FREE_MMX ) if( flushtype & FLUSH_FLUSH_MMX)
_freeMMXregs();
else if( flushtype & FLUSH_FLUSH_MMX)
_flushMMXregs(); _flushMMXregs();
if( flushtype & FLUSH_CACHED_REGS ) if( flushtype & FLUSH_CACHED_REGS )
@ -1344,7 +1342,6 @@ void recompileNextInstruction(int delayslot)
#if 0 #if 0
// TODO: Free register ? // TODO: Free register ?
// _freeXMMregs(); // _freeXMMregs();
// _freeMMXregs();
#endif #endif
} }
} }
@ -1369,7 +1366,6 @@ void recompileNextInstruction(int delayslot)
_clearNeededXMMregs(); _clearNeededXMMregs();
// _freeXMMregs(); // _freeXMMregs();
// _freeMMXregs();
// _flushCachedRegs(); // _flushCachedRegs();
// g_cpuHasConstReg = 1; // g_cpuHasConstReg = 1;

View File

@ -17,7 +17,6 @@
#define REC_VUOP(VU, f) { \ #define REC_VUOP(VU, f) { \
_freeXMMregs(/*&VU*/); \ _freeXMMregs(/*&VU*/); \
_freeMMXregs(); \
SetFPUstate();) \ SetFPUstate();) \
xMOV(ptr32[&VU.code], (u32)VU.code); \ xMOV(ptr32[&VU.code], (u32)VU.code); \
xCALL((void*)(uptr)VU##MI_##f); \ xCALL((void*)(uptr)VU##MI_##f); \
@ -25,7 +24,6 @@
#define REC_VUOPs(VU, f) { \ #define REC_VUOPs(VU, f) { \
_freeXMMregs(); \ _freeXMMregs(); \
_freeMMXregs(); \
SetFPUstate();) \ SetFPUstate();) \
if (VU==&VU1) { \ if (VU==&VU1) { \
xMOV(ptr32[&VU1.code], (u32)VU1.code); \ xMOV(ptr32[&VU1.code], (u32)VU1.code); \
@ -39,7 +37,6 @@
#define REC_VUOPFLAGS(VU, f) { \ #define REC_VUOPFLAGS(VU, f) { \
_freeXMMregs(/*&VU*/); \ _freeXMMregs(/*&VU*/); \
_freeMMXregs(); \
SetFPUstate(); \ SetFPUstate(); \
xMOV(ptr32[&VU.code], (u32)VU.code); \ xMOV(ptr32[&VU.code], (u32)VU.code); \
xCALL((void*)(uptr)VU##MI_##f); \ xCALL((void*)(uptr)VU##MI_##f); \
@ -47,7 +44,6 @@
#define REC_VUBRANCH(VU, f) { \ #define REC_VUBRANCH(VU, f) { \
_freeXMMregs(/*&VU*/); \ _freeXMMregs(/*&VU*/); \
_freeMMXregs(); \
SetFPUstate(); \ SetFPUstate(); \
xMOV(ptr32[&VU.code], (u32)VU.code); \ xMOV(ptr32[&VU.code], (u32)VU.code); \
xMOV(ptr32[&VU.VI[REG_TPC].UL], (u32)pc); \ xMOV(ptr32[&VU.VI[REG_TPC].UL], (u32)pc); \