2007-12-06 23:05:38 +00:00
|
|
|
#ifndef _MIPSEXECUTOR_H_
|
|
|
|
#define _MIPSEXECUTOR_H_
|
|
|
|
|
2008-07-29 19:01:20 +00:00
|
|
|
#include <list>
|
2007-12-06 23:05:38 +00:00
|
|
|
#include "MIPS.h"
|
|
|
|
#include "BasicBlock.h"
|
|
|
|
|
|
|
|
class CMipsExecutor
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CMipsExecutor(CMIPS&);
|
|
|
|
virtual ~CMipsExecutor();
|
|
|
|
int Execute(int);
|
|
|
|
bool MustBreak();
|
|
|
|
CBasicBlock* FindBlockAt(uint32);
|
|
|
|
CBasicBlock* FindBlockStartingAt(uint32);
|
2007-12-17 04:08:46 +00:00
|
|
|
void Clear();
|
2007-12-06 23:05:38 +00:00
|
|
|
|
2008-03-24 01:18:20 +00:00
|
|
|
protected:
|
2007-12-06 23:05:38 +00:00
|
|
|
typedef std::list<CBasicBlock*> BlockList;
|
|
|
|
typedef std::map<uint32, CBasicBlock*, std::greater<uint32> > BlockBeginMap;
|
|
|
|
typedef std::map<uint32, CBasicBlock*> BlockEndMap;
|
|
|
|
|
|
|
|
void CreateBlock(uint32, uint32);
|
2008-01-03 07:42:54 +00:00
|
|
|
void DeleteBlock(CBasicBlock*);
|
2008-03-24 01:18:20 +00:00
|
|
|
virtual void PartitionFunction(uint32);
|
2007-12-06 23:05:38 +00:00
|
|
|
|
|
|
|
BlockList m_blocks;
|
|
|
|
BlockBeginMap m_blockBegin;
|
|
|
|
BlockEndMap m_blockEnd;
|
|
|
|
CMIPS& m_context;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|