2015-04-23 02:04:12 -04:00
|
|
|
#pragma once
|
2010-08-11 03:47:19 +00:00
|
|
|
|
|
|
|
#include <map>
|
|
|
|
#include "Jitter.h"
|
|
|
|
|
|
|
|
class CMipsJitter : public Jitter::CJitter
|
|
|
|
{
|
|
|
|
public:
|
2018-04-30 21:01:23 +01:00
|
|
|
CMipsJitter(Jitter::CCodeGen*);
|
2018-07-03 13:12:00 -04:00
|
|
|
virtual ~CMipsJitter() = default;
|
2010-08-11 03:47:19 +00:00
|
|
|
|
2018-07-03 18:59:00 -04:00
|
|
|
void Begin() override;
|
|
|
|
void PushRel(size_t) override;
|
|
|
|
void PushRel64(size_t) override;
|
2010-08-11 03:47:19 +00:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
void SetVariableAsConstant(size_t, uint32);
|
2018-07-03 19:06:25 -04:00
|
|
|
|
2022-11-30 17:25:50 -05:00
|
|
|
LABEL GetFirstBlockLabel();
|
|
|
|
LABEL GetLastBlockLabel();
|
|
|
|
|
|
|
|
void MarkFirstBlockLabel();
|
|
|
|
void MarkLastBlockLabel();
|
2010-08-11 03:47:19 +00:00
|
|
|
|
|
|
|
private:
|
2012-03-11 20:06:14 +00:00
|
|
|
struct VARIABLESTATUS
|
|
|
|
{
|
2018-04-30 21:01:23 +01:00
|
|
|
uint32 operandType;
|
|
|
|
uint32 operandValue;
|
2012-03-11 20:06:14 +00:00
|
|
|
};
|
2010-08-11 03:47:19 +00:00
|
|
|
|
2012-03-11 20:06:14 +00:00
|
|
|
typedef std::map<size_t, VARIABLESTATUS> VariableStatusMap;
|
2010-08-11 03:47:19 +00:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
VARIABLESTATUS* GetVariableStatus(size_t);
|
|
|
|
void SetVariableStatus(size_t, const VARIABLESTATUS&);
|
2010-08-11 03:47:19 +00:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
VariableStatusMap m_variableStatus;
|
2022-11-30 17:25:50 -05:00
|
|
|
LABEL m_firstBlockLabel = -1;
|
|
|
|
LABEL m_lastBlockLabel = -1;
|
2010-08-11 03:47:19 +00:00
|
|
|
};
|