Remove delay slot table
This commit is contained in:
parent
977631bfd8
commit
95e2b17796
|
@ -2,8 +2,7 @@
|
||||||
|
|
||||||
CFunctionMap::CFunctionMap() :
|
CFunctionMap::CFunctionMap() :
|
||||||
m_JumpTable(NULL),
|
m_JumpTable(NULL),
|
||||||
m_FunctionTable(NULL),
|
m_FunctionTable(NULL)
|
||||||
m_DelaySlotTable(NULL)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,16 +25,6 @@ bool CFunctionMap::AllocateMemory()
|
||||||
}
|
}
|
||||||
memset(m_FunctionTable,0,0xFFFFF * sizeof(CCompiledFunc *));
|
memset(m_FunctionTable,0,0xFFFFF * sizeof(CCompiledFunc *));
|
||||||
}
|
}
|
||||||
if (m_DelaySlotTable == NULL)
|
|
||||||
{
|
|
||||||
m_DelaySlotTable = (BYTE **)VirtualAlloc(NULL,0xFFFFF * sizeof(BYTE *),MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);
|
|
||||||
if (m_DelaySlotTable == NULL) {
|
|
||||||
WriteTrace(TraceError,"CFunctionMap::AllocateMemory: failed to allocate delay slot table");
|
|
||||||
_Notify->FatalError(MSG_MEM_ALLOC_ERROR);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
memset(m_DelaySlotTable,0,0xFFFFF * sizeof(BYTE *));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (_Recompiler->LookUpMode() == FuncFind_PhysicalLookup)
|
if (_Recompiler->LookUpMode() == FuncFind_PhysicalLookup)
|
||||||
{
|
{
|
||||||
|
@ -46,14 +35,6 @@ bool CFunctionMap::AllocateMemory()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
memset(m_JumpTable,0,(_MMU->RdramSize() >> 2) * sizeof(PCCompiledFunc));
|
memset(m_JumpTable,0,(_MMU->RdramSize() >> 2) * sizeof(PCCompiledFunc));
|
||||||
|
|
||||||
m_DelaySlotTable = (BYTE **)VirtualAlloc(NULL,(_MMU->RdramSize() >> 0xC) * sizeof(BYTE *),MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);
|
|
||||||
if (m_DelaySlotTable == NULL) {
|
|
||||||
WriteTrace(TraceError,"CFunctionMap::AllocateMemory: failed to allocate delay slot table");
|
|
||||||
_Notify->FatalError(MSG_MEM_ALLOC_ERROR);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
memset(m_DelaySlotTable,0,(_MMU->RdramSize() >> 0xC) * sizeof(BYTE *));
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -72,11 +53,6 @@ void CFunctionMap::CleanBuffers ( void )
|
||||||
VirtualFree( m_FunctionTable, 0 , MEM_RELEASE);
|
VirtualFree( m_FunctionTable, 0 , MEM_RELEASE);
|
||||||
m_FunctionTable = NULL;
|
m_FunctionTable = NULL;
|
||||||
}
|
}
|
||||||
if (m_DelaySlotTable)
|
|
||||||
{
|
|
||||||
VirtualFree( m_DelaySlotTable, 0 , MEM_RELEASE);
|
|
||||||
m_DelaySlotTable = NULL;
|
|
||||||
}
|
|
||||||
if (m_JumpTable)
|
if (m_JumpTable)
|
||||||
{
|
{
|
||||||
delete [] m_JumpTable;
|
delete [] m_JumpTable;
|
||||||
|
|
|
@ -13,12 +13,10 @@ protected:
|
||||||
public:
|
public:
|
||||||
inline PCCompiledFunc_TABLE * FunctionTable ( void ) const { return m_FunctionTable; }
|
inline PCCompiledFunc_TABLE * FunctionTable ( void ) const { return m_FunctionTable; }
|
||||||
inline PCCompiledFunc * JumpTable ( void ) const { return m_JumpTable; }
|
inline PCCompiledFunc * JumpTable ( void ) const { return m_JumpTable; }
|
||||||
inline BYTE ** DelaySlotTable ( void ) const { return m_DelaySlotTable; }
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void CleanBuffers ( void );
|
void CleanBuffers ( void );
|
||||||
|
|
||||||
PCCompiledFunc * m_JumpTable;
|
PCCompiledFunc * m_JumpTable;
|
||||||
PCCompiledFunc_TABLE * m_FunctionTable;
|
PCCompiledFunc_TABLE * m_FunctionTable;
|
||||||
BYTE ** m_DelaySlotTable;
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -915,14 +915,6 @@ void CRecompiler::ClearRecompCode_Virt(DWORD Address, int length,REMOVE_REASON R
|
||||||
bool bUnProtect = false;
|
bool bUnProtect = false;
|
||||||
length = ((length + 3) & ~0x3);
|
length = ((length + 3) & ~0x3);
|
||||||
|
|
||||||
BYTE ** DelaySlotFuncs = DelaySlotTable();
|
|
||||||
|
|
||||||
if (WriteStart == 0 && DelaySlotFuncs[AddressIndex] != NULL)
|
|
||||||
{
|
|
||||||
DelaySlotFuncs[AddressIndex] = NULL;
|
|
||||||
_MMU->UnProtectMemory(Address,Address+ 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
int DataInBlock = 0x1000 - WriteStart;
|
int DataInBlock = 0x1000 - WriteStart;
|
||||||
int DataToWrite = length < DataInBlock ? length : DataInBlock;
|
int DataToWrite = length < DataInBlock ? length : DataInBlock;
|
||||||
int DataLeft = length - DataToWrite;
|
int DataLeft = length - DataToWrite;
|
||||||
|
|
Loading…
Reference in New Issue