trap.isa revision 2469
1////////////////////////////////////////////////////////////////////
2//
3// Trap instructions
4//
5
6output header {{
7        /**
8         * Base class for trap instructions,
9         * or instructions that always fault.
10         */
11        class Trap : public SparcStaticInst
12        {
13          protected:
14
15            // Constructor
16            Trap(const char *mnem, ExtMachInst _machInst, OpClass __opClass) :
17                SparcStaticInst(mnem, _machInst, __opClass)
18            {
19            }
20
21            std::string generateDisassembly(Addr pc,
22                    const SymbolTable *symtab) const;
23        };
24}};
25
26output decoder {{
27        std::string Trap::generateDisassembly(Addr pc,
28                const SymbolTable *symtab) const
29        {
30            return "Trap instruction\n";
31        }
32}};
33
34def template TrapExecute {{
35        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc,
36                Trace::InstRecord *traceData) const
37        {
38            Fault fault = NoFault;
39            %(code)s
40            return fault;
41        }
42}};
43
44def format Trap(code, *opt_flags) {{
45        orig_code = code
46        cblk = CodeBlock(code)
47        iop = InstObjParams(name, Name, 'SparcStaticInst', cblk, opt_flags)
48        header_output = BasicDeclare.subst(iop)
49        decoder_output = BasicConstructor.subst(iop)
50        decode_block = BasicDecode.subst(iop)
51        exec_output = TrapExecute.subst(iop)
52}};
53