basic.isa revision 2239
17404SAli.Saidi@ARM.com// -*- mode:c++ -*-
211938Snikos.nikoleris@arm.com
37404SAli.Saidi@ARM.com// Declarations for execute() methods.
47404SAli.Saidi@ARM.comdef template BasicExecDeclare {{
57404SAli.Saidi@ARM.com        Fault execute(%(CPU_exec_context)s *, Trace::InstRecord *) const;
67404SAli.Saidi@ARM.com}};
77404SAli.Saidi@ARM.com
87404SAli.Saidi@ARM.com// Basic instruction class declaration template.
97404SAli.Saidi@ARM.comdef template BasicDeclare {{
107404SAli.Saidi@ARM.com        /**
117404SAli.Saidi@ARM.com         * Static instruction class for "%(mnemonic)s".
127404SAli.Saidi@ARM.com         */
137404SAli.Saidi@ARM.com        class %(class_name)s : public %(base_class)s
147404SAli.Saidi@ARM.com        {
157404SAli.Saidi@ARM.com        public:
167404SAli.Saidi@ARM.com                /// Constructor.
177404SAli.Saidi@ARM.com                %(class_name)s(MachInst machInst);
187404SAli.Saidi@ARM.com                %(BasicExecDeclare)s
197404SAli.Saidi@ARM.com    };
207404SAli.Saidi@ARM.com}};
217404SAli.Saidi@ARM.com
227404SAli.Saidi@ARM.com// Basic instruction class constructor template.
237404SAli.Saidi@ARM.comdef template BasicConstructor {{
247404SAli.Saidi@ARM.com        inline %(class_name)s::%(class_name)s(MachInst machInst)  : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s)
257404SAli.Saidi@ARM.com        {
267404SAli.Saidi@ARM.com                %(constructor)s;
277404SAli.Saidi@ARM.com        }
287404SAli.Saidi@ARM.com}};
297404SAli.Saidi@ARM.com
307404SAli.Saidi@ARM.com// Basic instruction class execute method template.
317404SAli.Saidi@ARM.comdef template BasicExecute {{
327404SAli.Saidi@ARM.com        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
337404SAli.Saidi@ARM.com        {
347404SAli.Saidi@ARM.com                Fault fault = NoFault;
357404SAli.Saidi@ARM.com
367404SAli.Saidi@ARM.com                %(fp_enable_check)s;
377404SAli.Saidi@ARM.com                %(op_decl)s;
3810037SARM gem5 Developers                %(op_rd)s;
397404SAli.Saidi@ARM.com                %(code)s;
4010873Sandreas.sandberg@arm.com
417404SAli.Saidi@ARM.com                if(fault == NoFault)
4210474Sandreas.hansson@arm.com                {
4310474Sandreas.hansson@arm.com                    %(op_wb)s;
447404SAli.Saidi@ARM.com                }
4510037SARM gem5 Developers                return fault;
4610037SARM gem5 Developers        }
477404SAli.Saidi@ARM.com}};
487728SAli.Saidi@ARM.com
497404SAli.Saidi@ARM.com// Basic decode template.
508245Snate@binkert.orgdef template BasicDecode {{
519152Satgutier@umich.edu        return new %(class_name)s(machInst);
528245Snate@binkert.org}};
538245Snate@binkert.org
5410873Sandreas.sandberg@arm.com// Basic decode template, passing mnemonic in as string arg to constructor.
557748SAli.Saidi@ARM.comdef template BasicDecodeWithMnemonic {{
567404SAli.Saidi@ARM.com        return new %(class_name)s("%(mnemonic)s", machInst);
577404SAli.Saidi@ARM.com}};
587404SAli.Saidi@ARM.com
597404SAli.Saidi@ARM.com// The most basic instruction format... used only for a few misc. insts
6010913Sandreas.sandberg@arm.comdef format BasicOp(code, *flags) {{
6110717Sandreas.hansson@arm.com        iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), flags)
6210717Sandreas.hansson@arm.com        header_output = BasicDeclare.subst(iop)
6310717Sandreas.hansson@arm.com        decoder_output = BasicConstructor.subst(iop)
649258SAli.Saidi@ARM.com        decode_block = BasicDecode.subst(iop)
6510621SCurtis.Dunham@arm.com        exec_output = BasicExecute.subst(iop)
6610621SCurtis.Dunham@arm.com}};
6712086Sspwilson2@wisc.edu