nop.isa revision 2516
110263Satgutier@umich.edu////////////////////////////////////////////////////////////////////
210263Satgutier@umich.edu//
310263Satgutier@umich.edu// Nop instruction
410263Satgutier@umich.edu//
510263Satgutier@umich.edu
610263Satgutier@umich.eduoutput header {{
710263Satgutier@umich.edu        /**
810263Satgutier@umich.edu         * Nop class.
910263Satgutier@umich.edu         */
1010263Satgutier@umich.edu        class Nop : public SparcStaticInst
1110263Satgutier@umich.edu        {
1210263Satgutier@umich.edu          public:
1310263Satgutier@umich.edu            // Constructor
1410263Satgutier@umich.edu            Nop(const char *mnem, ExtMachInst _machInst, OpClass __opClass) :
1510263Satgutier@umich.edu                SparcStaticInst(mnem, _machInst, __opClass)
1610263Satgutier@umich.edu            {
1710263Satgutier@umich.edu            }
1810263Satgutier@umich.edu
1910263Satgutier@umich.edu            // All Nop instructions do the same thing, so this can be
2010263Satgutier@umich.edu            // defined here. Nops can be defined directly, so there needs
2110263Satgutier@umich.edu            // to be a default implementation
2210263Satgutier@umich.edu            Fault execute(%(CPU_exec_context)s *xc,
2310263Satgutier@umich.edu                Trace::InstRecord *traceData) const
2410263Satgutier@umich.edu            {
2510263Satgutier@umich.edu                //Nothing to see here, move along
2610263Satgutier@umich.edu                return NoFault;
2710263Satgutier@umich.edu            }
2810263Satgutier@umich.edu
2910263Satgutier@umich.edu            std::string generateDisassembly(Addr pc,
3010263Satgutier@umich.edu                    const SymbolTable *symtab) const;
3110263Satgutier@umich.edu        };
3210263Satgutier@umich.edu}};
3310263Satgutier@umich.edu
3410263Satgutier@umich.eduoutput decoder {{
3510263Satgutier@umich.edu        std::string Nop::generateDisassembly(Addr pc,
3610263Satgutier@umich.edu                const SymbolTable *symtab) const
3710263Satgutier@umich.edu        {
3810263Satgutier@umich.edu            std::stringstream response;
3910263Satgutier@umich.edu            printMnemonic(response, mnemonic);
4010263Satgutier@umich.edu            return response.str();
4110263Satgutier@umich.edu        }
4210263Satgutier@umich.edu}};
4310263Satgutier@umich.edu
4410263Satgutier@umich.edudef template NopExecute {{
4510263Satgutier@umich.edu        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc,
4610263Satgutier@umich.edu                Trace::InstRecord *traceData) const
4710263Satgutier@umich.edu        {
4810263Satgutier@umich.edu            //Nothing to see here, move along
4910263Satgutier@umich.edu            return NoFault;
5010263Satgutier@umich.edu        }
5110263Satgutier@umich.edu}};
5210263Satgutier@umich.edu
5310263Satgutier@umich.edu// Primary format for integer operate instructions:
5410263Satgutier@umich.edudef format Nop(code, *opt_flags) {{
5510263Satgutier@umich.edu        orig_code = code
5610263Satgutier@umich.edu        cblk = CodeBlock(code)
5710263Satgutier@umich.edu        iop = InstObjParams(name, Name, 'Nop', cblk, opt_flags)
5810263Satgutier@umich.edu        header_output = BasicDeclare.subst(iop)
5910263Satgutier@umich.edu        decoder_output = BasicConstructor.subst(iop)
6010263Satgutier@umich.edu        decode_block = BasicDecode.subst(iop)
6110263Satgutier@umich.edu        exec_output = NopExecute.subst(iop)
6210263Satgutier@umich.edu}};
6310263Satgutier@umich.edu