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