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