basic.isa revision 2224
1
2// Declarations for execute() methods.
3def template BasicExecDeclare {{
4        Fault execute(%(CPU_exec_context)s *, Trace::InstRecord *) const;
5}};
6
7// Basic instruction class declaration template.
8def template BasicDeclare {{
9        /**
10         * Static instruction class for "%(mnemonic)s".
11         */
12        class %(class_name)s : public %(base_class)s
13        {
14          public:
15            // Constructor.
16            %(class_name)s(MachInst machInst);
17            %(BasicExecDeclare)s
18        };
19}};
20
21// Basic instruction class constructor template.
22def template BasicConstructor {{
23        inline %(class_name)s::%(class_name)s(MachInst machInst)
24            : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s)
25        {
26                %(constructor)s;
27        }
28}};
29
30// Basic instruction class execute method template.
31def template BasicExecute {{
32        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc,
33                Trace::InstRecord *traceData) const
34        {
35            Fault fault = NoFault;
36
37            %(fp_enable_check)s;
38            %(op_decl)s;
39            %(op_rd)s;
40            %(code)s;
41
42            if(fault == NoFault)
43            {
44                %(op_wb)s;
45            }
46            return fault;
47        }
48}};
49
50// Basic decode template.
51def template BasicDecode {{
52        return new %(class_name)s(machInst);
53}};
54
55// Basic decode template, passing mnemonic in as string arg to constructor.
56def template BasicDecodeWithMnemonic {{
57        return new %(class_name)s("%(mnemonic)s", machInst);
58}};
59
60// The most basic instruction format... used only for a few misc. insts
61def format BasicOperate(code, *flags) {{
62        iop = InstObjParams(name, Name, 'SparcStaticInst',
63                CodeBlock(code), flags)
64        header_output = BasicDeclare.subst(iop)
65        decoder_output = BasicConstructor.subst(iop)
66        decode_block = BasicDecode.subst(iop)
67        exec_output = BasicExecute.subst(iop)
68}};
69