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 + -
显示快捷键?