basic.isa

来自「M5,一个功能强大的多处理器系统模拟器.很多针对处理器架构,性能的研究都使用它作」· ISA 代码 · 共 131 行

ISA
131
字号
// Declarations for execute() methods.def template BasicExecDeclare {{        Fault execute(%(CPU_exec_context)s *, Trace::InstRecord *) const;}};// Definitions of execute methods that panic.def template BasicExecPanic {{        Fault execute(%(CPU_exec_context)s *, Trace::InstRecord *) const        {            panic("Execute method called when it shouldn't!");            M5_DUMMY_RETURN        }}};// Basic instruction class declaration template.def template BasicDeclare {{        /**         * Static instruction class for "%(mnemonic)s".         */        class %(class_name)s : public %(base_class)s        {          public:            // Constructor.            %(class_name)s(ExtMachInst machInst);            %(BasicExecDeclare)s        };}};// Basic instruction class declaration template.def template BasicDeclareWithMnemonic {{        /**         * Static instruction class for "%(mnemonic)s".         */        class %(class_name)s : public %(base_class)s        {          public:            // Constructor.            %(class_name)s(const char * mnemonic, ExtMachInst machInst);            %(BasicExecDeclare)s        };}};// Basic instruction class constructor template.def template BasicConstructor {{        inline %(class_name)s::%(class_name)s(ExtMachInst machInst)            : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s)        {                %(constructor)s;        }}};// Basic instruction class constructor template.def template BasicConstructorWithMnemonic {{        inline %(class_name)s::%(class_name)s(const char * mnemonic,                ExtMachInst machInst)            : %(base_class)s(mnemonic, machInst, %(op_class)s)        {                %(constructor)s;        }}};// Basic instruction class execute method template.def template BasicExecute {{        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc,                Trace::InstRecord *traceData) const        {            Fault fault = NoFault;            %(fp_enable_check)s;            %(op_decl)s;            %(op_rd)s;            %(code)s;            if(fault == NoFault)            {                %(op_wb)s;            }            return fault;        }}};// Basic decode template.def template BasicDecode {{        return new %(class_name)s(machInst);}};// Basic decode template, passing mnemonic in as string arg to constructor.def template BasicDecodeWithMnemonic {{    return new %(class_name)s("%(mnemonic)s", machInst);}};// The most basic instruction format... used only for a few misc. instsdef format BasicOperate(code, *flags) {{        code = filterDoubles(code)        iop = InstObjParams(name, Name, 'SparcStaticInst', code, flags)        header_output = BasicDeclare.subst(iop)        decoder_output = BasicConstructor.subst(iop)        decode_block = BasicDecode.subst(iop)        exec_output = BasicExecute.subst(iop)}};def format FpBasic(code, *flags) {{        fp_code = """    Fsr |= bits(Fsr,4,0) << 5;    Fsr = insertBits(Fsr,4,0,0);    int newrnd = M5_FE_TONEAREST;    switch (Fsr<31:30>) {      case 0: newrnd = M5_FE_TONEAREST; break;      case 1: newrnd = M5_FE_TOWARDZERO; break;      case 2: newrnd = M5_FE_UPWARD; break;      case 3: newrnd = M5_FE_DOWNWARD; break;    }    int oldrnd = m5_fegetround();    m5_fesetround(newrnd);"""        fp_code += code        fp_code += """   m5_fesetround(oldrnd);"""        fp_code = filterDoubles(fp_code)        iop = InstObjParams(name, Name, 'SparcStaticInst', fp_code, flags)        header_output = BasicDeclare.subst(iop)        decoder_output = BasicConstructor.subst(iop)        decode_block = BasicDecode.subst(iop)        exec_output = BasicExecute.subst(iop)}};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?