Play-/Source/MA_VU.cpp

96 lines
2.2 KiB
C++
Raw Normal View History

#include "MA_VU.h"
#include "MIPS.h"
CCodeGen* CMA_VU::m_codeGen = NULL;
CMIPS* CMA_VU::m_pCtx = NULL;
uint32 CMA_VU::m_nOpcode = 0;
uint32 CMA_VU::m_nAddress = 0;
CMA_VU::CMA_VU(bool maskDataAddress) :
CMIPSArchitecture(MIPS_REGSIZE_64),
m_Lower(maskDataAddress)
{
SetupReflectionTables();
}
CMA_VU::~CMA_VU()
{
}
void CMA_VU::CompileInstruction(uint32 nAddress, CCodeGen* codeGen, CMIPS* pCtx, bool nParent)
{
if(nParent)
{
//SetupQuickVariables(nAddress, pBlock, pCtx);
//TODO: Get rid of static storage...
m_pCtx = pCtx;
m_codeGen = codeGen;
m_nAddress = nAddress;
m_nOpcode = m_pCtx->m_pMemoryMap->GetInstruction(m_nAddress);
}
if(nAddress & 0x04)
{
m_Upper.CompileInstruction(nAddress, codeGen, pCtx, nParent);
}
else
{
m_Lower.CompileInstruction(nAddress, codeGen, pCtx, nParent);
}
}
void CMA_VU::SetupReflectionTables()
{
m_Lower.SetupReflectionTables();
m_Upper.SetupReflectionTables();
}
void CMA_VU::GetInstructionMnemonic(CMIPS* pCtx, uint32 nAddress, uint32 nOpcode, char* sText, unsigned int nCount)
{
if(nAddress & 0x04)
{
m_Upper.GetInstructionMnemonic(pCtx, nAddress, nOpcode, sText, nCount);
}
else
{
m_Lower.GetInstructionMnemonic(pCtx, nAddress, nOpcode, sText, nCount);
}
}
void CMA_VU::GetInstructionOperands(CMIPS* pCtx, uint32 nAddress, uint32 nOpcode, char* sText, unsigned int nCount)
{
if(nAddress & 0x04)
{
m_Upper.GetInstructionOperands(pCtx, nAddress, nOpcode, sText, nCount);
}
else
{
m_Lower.GetInstructionOperands(pCtx, nAddress, nOpcode, sText, nCount);
}
}
bool CMA_VU::IsInstructionBranch(CMIPS* pCtx, uint32 nAddress, uint32 nOpcode)
{
if(nAddress & 0x04)
{
return m_Upper.IsInstructionBranch(pCtx, nAddress, nOpcode);
}
else
{
return m_Lower.IsInstructionBranch(pCtx, nAddress, nOpcode);
}
}
uint32 CMA_VU::GetInstructionEffectiveAddress(CMIPS* pCtx, uint32 nAddress, uint32 nOpcode)
{
if(nAddress & 0x04)
{
return m_Upper.GetInstructionEffectiveAddress(pCtx, nAddress, nOpcode);
}
else
{
return m_Lower.GetInstructionEffectiveAddress(pCtx, nAddress, nOpcode);
}
}