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