trap.isa

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

ISA
106
字号
//////////////////////////////////////////////////////////////////////// Trap instructions//output header {{        /**         * Base class for trap instructions,         * or instructions that always fault.         */        class Trap : public SparcStaticInst        {          protected:            // Constructor            Trap(const char *mnem, ExtMachInst _machInst, OpClass __opClass) :                SparcStaticInst(mnem, _machInst, __opClass), trapNum(SW_TRAP)            {            }            std::string generateDisassembly(Addr pc,                    const SymbolTable *symtab) const;            int trapNum;        };}};output decoder {{        std::string Trap::generateDisassembly(Addr pc,                const SymbolTable *symtab) const        {            std::stringstream response;            printMnemonic(response, mnemonic);            ccprintf(response, " ");            printReg(response, _srcRegIdx[0]);            ccprintf(response, ", 0x%x", trapNum);            ccprintf(response, ", or ");            printReg(response, _srcRegIdx[1]);            return response.str();        }}};def template TrapExecute {{        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc,                Trace::InstRecord *traceData) const        {            Fault fault = NoFault;            %(op_decl)s;            %(op_rd)s;            %(code)s            return fault;        }}};def template FpUnimplExecute {{        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc,                Trace::InstRecord *traceData) const        {            Fault fault = NoFault;            %(op_decl)s;            %(op_rd)s;            %(code)s            %(op_wb)s;            return fault;        }}};def format Trap(code, *opt_flags) {{        iop = InstObjParams(name, Name, 'Trap', code, opt_flags)        header_output = BasicDeclare.subst(iop)        decoder_output = BasicConstructor.subst(iop)        decode_block = BasicDecode.subst(iop)        exec_output = TrapExecute.subst(iop)}};output header {{        class FpUnimpl : public SparcStaticInst        {          protected:            FpUnimpl(const char *mnem,                    ExtMachInst _machInst, OpClass __opClass)                : SparcStaticInst(mnem, _machInst, __opClass)            {            }            std::string generateDisassembly(Addr pc,                    const SymbolTable *symtab) const            {                return mnemonic;            }        };}};def format FpUnimpl(*flags) {{        fpunimpl_code = '''            Fsr = insertBits(Fsr, 16, 14, 3);            fault = new FpExceptionOther;            '''        iop = InstObjParams(name, Name, 'FpUnimpl', fpunimpl_code, flags)        header_output = BasicDeclare.subst(iop)        decoder_output = BasicConstructor.subst(iop)        decode_block = BasicDecode.subst(iop)        exec_output = FpUnimplExecute.subst(iop)}};

⌨️ 快捷键说明

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