basic.isa revision 2083
111308Santhony.gutierrez@amd.com
211308Santhony.gutierrez@amd.com// Declarations for execute() methods.
311308Santhony.gutierrez@amd.comdef template BasicExecDeclare {{
411308Santhony.gutierrez@amd.com        Fault execute(%(CPU_exec_context)s *, Trace::InstRecord *) const;
511308Santhony.gutierrez@amd.com}};
611308Santhony.gutierrez@amd.com
711308Santhony.gutierrez@amd.com// Basic instruction class declaration template.
811308Santhony.gutierrez@amd.comdef template BasicDeclare {{
911308Santhony.gutierrez@amd.com        /**
1011308Santhony.gutierrez@amd.com         * Static instruction class for "%(mnemonic)s".
1111308Santhony.gutierrez@amd.com         */
1211308Santhony.gutierrez@amd.com        class %(class_name)s : public %(base_class)s
1311308Santhony.gutierrez@amd.com        {
1411308Santhony.gutierrez@amd.com        public:
1511308Santhony.gutierrez@amd.com                /// Constructor.
1611308Santhony.gutierrez@amd.com                %(class_name)s(MachInst machInst);
1711308Santhony.gutierrez@amd.com                %(BasicExecDeclare)s
1811308Santhony.gutierrez@amd.com    };
1911308Santhony.gutierrez@amd.com}};
2011308Santhony.gutierrez@amd.com
2111308Santhony.gutierrez@amd.com// Basic instruction class constructor template.
2211308Santhony.gutierrez@amd.comdef template BasicConstructor {{
2311308Santhony.gutierrez@amd.com        inline %(class_name)s::%(class_name)s(MachInst machInst)  : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s)
2411308Santhony.gutierrez@amd.com        {
2511308Santhony.gutierrez@amd.com                %(constructor)s;
2611308Santhony.gutierrez@amd.com        }
2711308Santhony.gutierrez@amd.com}};
2811308Santhony.gutierrez@amd.com
2911308Santhony.gutierrez@amd.com// Basic instruction class execute method template.
3011308Santhony.gutierrez@amd.comdef template BasicExecute {{
3111308Santhony.gutierrez@amd.com        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
3211308Santhony.gutierrez@amd.com        {
3311308Santhony.gutierrez@amd.com                Fault fault = No_Fault;
3411308Santhony.gutierrez@amd.com
3511308Santhony.gutierrez@amd.com                %(fp_enable_check)s;
3611308Santhony.gutierrez@amd.com                %(op_decl)s;
3711308Santhony.gutierrez@amd.com                %(op_rd)s;
3811308Santhony.gutierrez@amd.com                %(code)s;
3911696Santhony.gutierrez@amd.com
4011696Santhony.gutierrez@amd.com                if(fault == No_Fault)
4111696Santhony.gutierrez@amd.com                {
4211308Santhony.gutierrez@amd.com                        %(op_wb)s;
4311308Santhony.gutierrez@amd.com                }
4411308Santhony.gutierrez@amd.com                return fault;
4511308Santhony.gutierrez@amd.com        }
4611308Santhony.gutierrez@amd.com}};
4711308Santhony.gutierrez@amd.com
4811308Santhony.gutierrez@amd.com// Basic decode template.
4911308Santhony.gutierrez@amd.comdef template BasicDecode {{
5011308Santhony.gutierrez@amd.com        return new %(class_name)s(machInst);
5111308Santhony.gutierrez@amd.com}};
5211696Santhony.gutierrez@amd.com
5311696Santhony.gutierrez@amd.com// Basic decode template, passing mnemonic in as string arg to constructor.
5411696Santhony.gutierrez@amd.comdef template BasicDecodeWithMnemonic {{
5511308Santhony.gutierrez@amd.com        return new %(class_name)s("%(mnemonic)s", machInst);
5611308Santhony.gutierrez@amd.com}};
5711308Santhony.gutierrez@amd.com
5811714Santhony.gutierrez@amd.com// The most basic instruction format... used only for a few misc. insts
5911308Santhony.gutierrez@amd.comdef format BasicOp(code, *flags) {{
6011308Santhony.gutierrez@amd.com        iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), flags)
6111308Santhony.gutierrez@amd.com        header_output = BasicDeclare.subst(iop)
62        decoder_output = BasicConstructor.subst(iop)
63        decode_block = BasicDecode.subst(iop)
64        exec_output = BasicExecute.subst(iop)
65}};
66