trap.isa revision 2561
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), trapNum(SW_TRAP)
18            {
19            }
20
21            std::string generateDisassembly(Addr pc,
22                    const SymbolTable *symtab) const;
23
24            int trapNum;
25        };
26}};
27
28output decoder {{
29        std::string Trap::generateDisassembly(Addr pc,
30                const SymbolTable *symtab) const
31        {
32            std::stringstream response;
33
34            printMnemonic(response, mnemonic);
35            ccprintf(response, " ");
36            printReg(response, _srcRegIdx[0]);
37            ccprintf(response, ", 0x%x", trapNum);
38            ccprintf(response, ", or ");
39            printReg(response, _srcRegIdx[1]);
40            return response.str();
41        }
42}};
43
44def template TrapExecute {{
45        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc,
46                Trace::InstRecord *traceData) const
47        {
48            Fault fault = NoFault;
49            %(op_decl)s;
50            %(op_rd)s;
51            %(code)s
52            return fault;
53        }
54}};
55
56def format Trap(code, *opt_flags) {{
57        orig_code = code
58        cblk = CodeBlock(code)
59        iop = InstObjParams(name, Name, 'Trap', cblk, opt_flags)
60        header_output = BasicDeclare.subst(iop)
61        decoder_output = BasicConstructor.subst(iop)
62        decode_block = BasicDecode.subst(iop)
63        exec_output = TrapExecute.subst(iop)
64}};
65