2007-12-01 04:08:34 +00:00
|
|
|
#ifndef _MIPSCODEGEN_H_
|
|
|
|
#define _MIPSCODEGEN_H_
|
|
|
|
|
|
|
|
#include "CodeGen.h"
|
|
|
|
|
|
|
|
class CVariableStatusInfo
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
class CMipsCodeGen : public CCodeGen
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CMipsCodeGen();
|
|
|
|
virtual ~CMipsCodeGen();
|
|
|
|
|
|
|
|
virtual void PushRel(size_t);
|
|
|
|
virtual void PullRel(size_t);
|
|
|
|
|
2007-12-06 21:36:12 +00:00
|
|
|
virtual void EndIf();
|
|
|
|
|
|
|
|
virtual void Call(void*, unsigned int, bool);
|
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
void SetVariableAsConstant(size_t, uint32);
|
2007-12-06 21:36:12 +00:00
|
|
|
void DumpVariables(unsigned int);
|
2007-12-01 04:08:34 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
struct VARIABLESTATUS
|
|
|
|
{
|
|
|
|
uint32 operandType;
|
|
|
|
uint32 operandValue;
|
|
|
|
bool isDirty;
|
2007-12-06 21:36:12 +00:00
|
|
|
unsigned int ifStackLevel;
|
2007-12-01 04:08:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef std::map< size_t, VARIABLESTATUS > VariableStatusMap;
|
|
|
|
|
|
|
|
VARIABLESTATUS* GetVariableStatus(size_t);
|
|
|
|
void SetVariableStatus(size_t, const VARIABLESTATUS&);
|
2007-12-06 21:36:12 +00:00
|
|
|
void InvalidateVariableStatus(size_t);
|
2007-12-01 04:08:34 +00:00
|
|
|
|
|
|
|
VariableStatusMap m_variableStatus;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|