2007-12-01 04:08:34 +00:00
|
|
|
#ifndef _MIPSCODEGEN_H_
|
|
|
|
#define _MIPSCODEGEN_H_
|
|
|
|
|
|
|
|
#include "CodeGen.h"
|
|
|
|
|
|
|
|
class CMipsCodeGen : public CCodeGen
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CMipsCodeGen();
|
|
|
|
virtual ~CMipsCodeGen();
|
|
|
|
|
2007-12-27 20:35:09 +00:00
|
|
|
virtual void EndQuota();
|
|
|
|
|
2007-12-01 04:08:34 +00:00
|
|
|
virtual void PushRel(size_t);
|
|
|
|
virtual void PullRel(size_t);
|
|
|
|
|
2008-01-03 07:42:54 +00:00
|
|
|
virtual void FP_PushSingle(size_t);
|
|
|
|
virtual void FP_PushWord(size_t);
|
2008-01-03 22:10:51 +00:00
|
|
|
virtual void FP_PullSingle(size_t);
|
|
|
|
virtual void FP_PullWordTruncate(size_t);
|
2008-01-03 07:42:54 +00:00
|
|
|
|
2008-01-15 20:27:44 +00:00
|
|
|
virtual void MD_PushRel(size_t);
|
2008-02-28 02:16:54 +00:00
|
|
|
virtual void MD_PushRelExpand(size_t);
|
2008-01-15 20:27:44 +00:00
|
|
|
virtual void MD_PullRel(size_t);
|
|
|
|
|
2008-01-17 04:59:27 +00:00
|
|
|
virtual void BeginIf(bool);
|
2007-12-06 21:36:12 +00:00
|
|
|
virtual void EndIf();
|
2008-03-11 11:49:11 +00:00
|
|
|
virtual void BeginIfElse(bool);
|
2007-12-11 07:05:37 +00:00
|
|
|
virtual void BeginIfElseAlt();
|
2007-12-06 21:36:12 +00:00
|
|
|
|
|
|
|
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;
|
|
|
|
|
2008-01-03 07:42:54 +00:00
|
|
|
void DumpVariable(size_t);
|
2008-01-09 06:07:59 +00:00
|
|
|
void DumpAllVariablesAndKeepState();
|
2007-12-01 04:08:34 +00:00
|
|
|
VARIABLESTATUS* GetVariableStatus(size_t);
|
|
|
|
void SetVariableStatus(size_t, const VARIABLESTATUS&);
|
2008-01-09 06:07:59 +00:00
|
|
|
void SaveVariableStatus(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
|