Skip to content
Snippets Groups Projects
STARSInstruction.h 1.37 KiB
Newer Older
#ifndef STARSInstruction_h
#define STARSInstruction_h

#include <stdint.h>
#include <assert.h>
#include <map>
#include "interfaces/SMPDBInterface.h"

class STARS_Instruction_t
{
	public:
		
		STARS_Instruction_t(const STARS_InstructionID_t& p_id) : m_id(p_id) 
			{ p_id.AddIDToInsnMapping(this);}

		virtual STARS_InstructionID_t GetNextInstructionID(void) = 0;
		virtual STARS_InstructionID_t GetTargetInstructionID(void) = 0;
		virtual bool STARS_GetCmd(void) = 0;
		virtual inline uint32 GetFeatures(void) const = 0;
		virtual inline bool IsRegOpnd(size_t OpndNum) const = 0;

		virtual STARSOpndTypePtr GetOpnd(size_t OpndNum) const = 0;
		virtual STARSOpndTypePtr MakeVoidOpnd(void) = 0;
		virtual STARSOpndTypePtr MakeImmediateOpnd(uintptr_t value) = 0;
		virtual STARSOpndTypePtr MakeRegOpnd(uint16 RegNum) = 0;
		virtual STARSOpndTypePtr MakeFloatingPointRegOpnd(uint16 RegNum) = 0;
		virtual STARSOpndTypePtr MakeMMXRegOpnd(uint16 RegNum) = 0;
		virtual STARSOpndTypePtr MakeXMMRegOpnd(uint16 RegNum) = 0;
		virtual STARSOpndTypePtr MakeYMMRegOpnd(uint16 RegNum) = 0;
		virtual STARSOpndTypePtr MakeMemDisplacementOpnd(uint16 BaseRegNum, uint16 IndexRegNum, uint16_t ScaleFactor, uintptr_t offset) = 0;
		virtual STARSOpndTypePtr MakeMemPhraseOpnd(uint16 BaseRegNum, uint16 IndexRegNum, uint16_t ScaleFactor) = 0;

	protected:
		STARS_InstructionID_t m_id;

};

#endif