//////////////////////////////////////////////////////////////////// // // Nop instruction // output header {{ /** * Nop class. */ class Nop : public SparcStaticInst { public: // Constructor Nop(const char *mnem, ExtMachInst _machInst, OpClass __opClass) : SparcStaticInst(mnem, _machInst, __opClass) { } // All Nop instructions do the same thing, so this can be // defined here. Nops can be defined directly, so there needs // to be a default implementation Fault execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const { //Nothing to see here, move along return NoFault; } std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; }; }}; output decoder {{ std::string Nop::generateDisassembly(Addr pc, const SymbolTable *symtab) const { std::stringstream response; printMnemonic(response, mnemonic); return response.str(); } }}; def template NopExecute {{ Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const { //Nothing to see here, move along return NoFault; } }}; // Primary format for integer operate instructions: def format Nop(code, *opt_flags) {{ orig_code = code cblk = CodeBlock(code) iop = InstObjParams(name, Name, 'Nop', cblk, opt_flags) header_output = BasicDeclare.subst(iop) decoder_output = BasicConstructor.subst(iop) decode_block = BasicDecode.subst(iop) exec_output = NopExecute.subst(iop) }};