basic.isa revision 2104
12568SN/A// -*- mode:c++ -*-
28922Swilliam.wang@arm.com
38713Sandreas.hansson@arm.com// Declarations for execute() methods.
48713Sandreas.hansson@arm.comdef template BasicExecDeclare {{
58713Sandreas.hansson@arm.com        Fault execute(%(CPU_exec_context)s *, Trace::InstRecord *) const;
68713Sandreas.hansson@arm.com}};
78713Sandreas.hansson@arm.com
88713Sandreas.hansson@arm.com// Basic instruction class declaration template.
98713Sandreas.hansson@arm.comdef template BasicDeclare {{
108713Sandreas.hansson@arm.com        /**
118713Sandreas.hansson@arm.com         * Static instruction class for "%(mnemonic)s".
128713Sandreas.hansson@arm.com         */
138713Sandreas.hansson@arm.com        class %(class_name)s : public %(base_class)s
142568SN/A        {
152568SN/A        public:
162568SN/A                /// Constructor.
172568SN/A                %(class_name)s(MachInst machInst);
182568SN/A                %(BasicExecDeclare)s
192568SN/A    };
202568SN/A}};
212568SN/A
222568SN/A// Basic instruction class constructor template.
232568SN/Adef template BasicConstructor {{
242568SN/A        inline %(class_name)s::%(class_name)s(MachInst machInst)  : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s)
252568SN/A        {
262568SN/A                %(constructor)s;
272568SN/A        }
282568SN/A}};
292568SN/A
302568SN/A// Basic instruction class execute method template.
312568SN/Adef template BasicExecute {{
322568SN/A        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
332568SN/A        {
342568SN/A                Fault fault = No_Fault;
352568SN/A
362568SN/A                %(fp_enable_check)s;
372568SN/A                %(op_decl)s;
382568SN/A                %(op_rd)s;
392665Ssaidi@eecs.umich.edu                %(code)s;
402665Ssaidi@eecs.umich.edu
412665Ssaidi@eecs.umich.edu                if(fault == No_Fault)
428713Sandreas.hansson@arm.com                {
432568SN/A                    %(op_wb)s;
442568SN/A                }
452568SN/A                return fault;
462982Sstever@eecs.umich.edu        }
478713Sandreas.hansson@arm.com}};
488713Sandreas.hansson@arm.com
492568SN/A// Basic decode template.
502568SN/Adef template BasicDecode {{
512568SN/A        return new %(class_name)s(machInst);
529164Sandreas.hansson@arm.com}};
532568SN/A
544762Snate@binkert.org// Basic decode template, passing mnemonic in as string arg to constructor.
552568SN/Adef template BasicDecodeWithMnemonic {{
569164Sandreas.hansson@arm.com        return new %(class_name)s("%(mnemonic)s", machInst);
579164Sandreas.hansson@arm.com}};
588851Sandreas.hansson@arm.com
599164Sandreas.hansson@arm.com// The most basic instruction format... used only for a few misc. insts
608713Sandreas.hansson@arm.comdef format BasicOp(code, *flags) {{
619164Sandreas.hansson@arm.com        iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), flags)
629164Sandreas.hansson@arm.com        header_output = BasicDeclare.subst(iop)
639164Sandreas.hansson@arm.com        decoder_output = BasicConstructor.subst(iop)
648851Sandreas.hansson@arm.com        decode_block = BasicDecode.subst(iop)
658713Sandreas.hansson@arm.com        exec_output = BasicExecute.subst(iop)
668713Sandreas.hansson@arm.com}};
678713Sandreas.hansson@arm.com