trap.isa revision 2239
19651SAndreas.Sandberg@ARM.com//////////////////////////////////////////////////////////////////// 29651SAndreas.Sandberg@ARM.com// 39651SAndreas.Sandberg@ARM.com// Trap instructions 49651SAndreas.Sandberg@ARM.com// 59651SAndreas.Sandberg@ARM.com 69651SAndreas.Sandberg@ARM.comoutput header {{ 79651SAndreas.Sandberg@ARM.com /** 89651SAndreas.Sandberg@ARM.com * Base class for integer operations. 99651SAndreas.Sandberg@ARM.com */ 109651SAndreas.Sandberg@ARM.com class Trap : public MipsStaticInst 119651SAndreas.Sandberg@ARM.com { 129651SAndreas.Sandberg@ARM.com protected: 139651SAndreas.Sandberg@ARM.com 149651SAndreas.Sandberg@ARM.com /// Constructor 159651SAndreas.Sandberg@ARM.com Trap(const char *mnem, MachInst _machInst, OpClass __opClass) : MipsStaticInst(mnem, _machInst, __opClass) 169651SAndreas.Sandberg@ARM.com { 179651SAndreas.Sandberg@ARM.com } 189651SAndreas.Sandberg@ARM.com 199651SAndreas.Sandberg@ARM.com std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 209651SAndreas.Sandberg@ARM.com }; 219651SAndreas.Sandberg@ARM.com}}; 229651SAndreas.Sandberg@ARM.com 239651SAndreas.Sandberg@ARM.comoutput decoder {{ 249651SAndreas.Sandberg@ARM.com std::string Trap::generateDisassembly(Addr pc, const SymbolTable *symtab) const 259651SAndreas.Sandberg@ARM.com { 269651SAndreas.Sandberg@ARM.com return "Disassembly of integer instruction\n"; 279651SAndreas.Sandberg@ARM.com } 289651SAndreas.Sandberg@ARM.com}}; 299651SAndreas.Sandberg@ARM.com 309651SAndreas.Sandberg@ARM.comdef template TrapExecute {{ 319651SAndreas.Sandberg@ARM.com Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const 329651SAndreas.Sandberg@ARM.com { 339651SAndreas.Sandberg@ARM.com //Call into the trap handler with the appropriate fault 349651SAndreas.Sandberg@ARM.com return No_Fault; 359651SAndreas.Sandberg@ARM.com } 369651SAndreas.Sandberg@ARM.com 379651SAndreas.Sandberg@ARM.com //Write the resulting state to the execution context 389651SAndreas.Sandberg@ARM.com %(op_wb)s; 399651SAndreas.Sandberg@ARM.com 409651SAndreas.Sandberg@ARM.com return No_Fault; 419651SAndreas.Sandberg@ARM.com } 429651SAndreas.Sandberg@ARM.com}}; 439651SAndreas.Sandberg@ARM.com 449651SAndreas.Sandberg@ARM.com// Primary format for integer operate instructions: 459651SAndreas.Sandberg@ARM.comdef format Trap(code, *flags) {{ 469651SAndreas.Sandberg@ARM.com code = 'bool cond;\n' + code; 479651SAndreas.Sandberg@ARM.com iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), flags) 489651SAndreas.Sandberg@ARM.com header_output = BasicDeclare.subst(iop) 499651SAndreas.Sandberg@ARM.com decoder_output = BasicConstructor.subst(iop) 509651SAndreas.Sandberg@ARM.com decode_block = BasicDecode.subst(iop) 519651SAndreas.Sandberg@ARM.com exec_output = BasicExecute.subst(iop) 529651SAndreas.Sandberg@ARM.com}}; 539651SAndreas.Sandberg@ARM.com