basic.isa revision 2686
12089SN/A// -*- mode:c++ -*-
22022SN/A
32022SN/A// Declarations for execute() methods.
42022SN/Adef template BasicExecDeclare {{
52022SN/A        Fault execute(%(CPU_exec_context)s *, Trace::InstRecord *) const;
62022SN/A}};
72022SN/A
82022SN/A// Basic instruction class declaration template.
92022SN/Adef template BasicDeclare {{
102022SN/A        /**
112022SN/A         * Static instruction class for "%(mnemonic)s".
122022SN/A         */
132022SN/A        class %(class_name)s : public %(base_class)s
142022SN/A        {
152686Sksewell@umich.edu          public:
162022SN/A                /// Constructor.
172022SN/A                %(class_name)s(MachInst machInst);
182022SN/A                %(BasicExecDeclare)s
192686Sksewell@umich.edu        };
202022SN/A}};
212022SN/A
222022SN/A// Basic instruction class constructor template.
232022SN/Adef template BasicConstructor {{
242022SN/A        inline %(class_name)s::%(class_name)s(MachInst machInst)  : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s)
252022SN/A        {
262022SN/A                %(constructor)s;
272022SN/A        }
282022SN/A}};
292022SN/A
302686Sksewell@umich.edu
312022SN/A// Basic instruction class execute method template.
322022SN/Adef template BasicExecute {{
332022SN/A        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
342022SN/A        {
352239SN/A                Fault fault = NoFault;
362022SN/A
372022SN/A                %(fp_enable_check)s;
382022SN/A                %(op_decl)s;
392022SN/A                %(op_rd)s;
402022SN/A                %(code)s;
412022SN/A
422239SN/A                if(fault == NoFault)
432022SN/A                {
442104SN/A                    %(op_wb)s;
452022SN/A                }
462022SN/A                return fault;
472022SN/A        }
482022SN/A}};
492022SN/A
502022SN/A// Basic decode template.
512022SN/Adef template BasicDecode {{
522022SN/A        return new %(class_name)s(machInst);
532022SN/A}};
542022SN/A
552022SN/A// Basic decode template, passing mnemonic in as string arg to constructor.
562022SN/Adef template BasicDecodeWithMnemonic {{
572022SN/A        return new %(class_name)s("%(mnemonic)s", machInst);
582022SN/A}};
592022SN/A
602022SN/A// The most basic instruction format... used only for a few misc. insts
612083SN/Adef format BasicOp(code, *flags) {{
622028SN/A        iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), flags)
632022SN/A        header_output = BasicDeclare.subst(iop)
642022SN/A        decoder_output = BasicConstructor.subst(iop)
652022SN/A        decode_block = BasicDecode.subst(iop)
662022SN/A        exec_output = BasicExecute.subst(iop)
672022SN/A}};
68