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