2008-01-15 20:27:44 +00:00
|
|
|
#include "ArgumentIterator.h"
|
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
CCallArgumentIterator::CCallArgumentIterator(CMIPS& context)
|
|
|
|
: m_context(context)
|
|
|
|
, m_current(0)
|
2008-01-15 20:27:44 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2016-05-29 16:41:31 -04:00
|
|
|
uint32 CCallArgumentIterator::GetNext()
|
2016-05-27 16:46:31 +01:00
|
|
|
{
|
2016-05-29 16:41:31 -04:00
|
|
|
if(m_current > 3)
|
|
|
|
{
|
|
|
|
uint32 address = m_context.m_State.nGPR[CMIPS::SP].nV0 + (m_current++ - 4) * 4 + 0x10;
|
|
|
|
return m_context.m_pMemoryMap->GetWord(address);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return m_context.m_State.nGPR[CMIPS::A0 + m_current++].nV[0];
|
|
|
|
}
|
2016-05-27 16:46:31 +01:00
|
|
|
}
|
|
|
|
|
2016-05-29 16:41:31 -04:00
|
|
|
CValistArgumentIterator::CValistArgumentIterator(CMIPS& context, uint32 argsPtr)
|
2018-04-30 21:01:23 +01:00
|
|
|
: m_context(context)
|
|
|
|
, m_argsPtr(argsPtr)
|
2008-01-15 20:27:44 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2016-05-29 16:41:31 -04:00
|
|
|
uint32 CValistArgumentIterator::GetNext()
|
2008-01-15 20:27:44 +00:00
|
|
|
{
|
2016-05-29 16:41:31 -04:00
|
|
|
uint32 arg = m_context.m_pMemoryMap->GetWord(m_argsPtr);
|
|
|
|
m_argsPtr += 4;
|
|
|
|
return arg;
|
2008-01-15 20:27:44 +00:00
|
|
|
}
|