#pragma once #include "Types.h" #include "MipsJitter.h" class CMIPS; enum MIPS_REGSIZE { MIPS_REGSIZE_32 = 0, MIPS_REGSIZE_64 = 1, }; enum MIPS_BRANCH_TYPE { MIPS_BRANCH_NONE = 0, MIPS_BRANCH_NORMAL = 1, MIPS_BRANCH_NODELAY = 2, }; class CMIPSInstructionFactory { public: CMIPSInstructionFactory(MIPS_REGSIZE); virtual ~CMIPSInstructionFactory() = default; virtual void CompileInstruction(uint32, CMipsJitter*, CMIPS*) = 0; protected: void ComputeMemAccessAddr(); void Branch(Jitter::CONDITION); void BranchLikely(Jitter::CONDITION); void Illegal(); void SetupQuickVariables(uint32, CMipsJitter*, CMIPS*); CMipsJitter* m_codeGen = nullptr; CMIPS* m_pCtx = nullptr; uint32 m_nOpcode = 0; uint32 m_nAddress = 0; MIPS_REGSIZE m_regSize; };