branch.isa revision 2224
12SN/A////////////////////////////////////////////////////////////////////
21762SN/A//
32SN/A// Branch instructions
42SN/A//
52SN/A
62SN/Aoutput header {{
72SN/A        /**
82SN/A         * Base class for integer operations.
92SN/A         */
102SN/A        class Branch : public SparcStaticInst
112SN/A        {
122SN/A          protected:
132SN/A            // Constructor
142SN/A            Branch(const char *mnem, MachInst _machInst, OpClass __opClass) :
152SN/A                SparcStaticInst(mnem, _machInst, __opClass)
162SN/A            {
172SN/A            }
182SN/A
192SN/A            std::string generateDisassembly(Addr pc,
202SN/A                    const SymbolTable *symtab) const;
212SN/A        };
222SN/A}};
232SN/A
242SN/Aoutput decoder {{
252SN/A        std::string Branch::generateDisassembly(Addr pc, const SymbolTable *symtab) const
262SN/A        {
272665Ssaidi@eecs.umich.edu                return "Branch instruction\n";
282665Ssaidi@eecs.umich.edu        }
292SN/A}};
302SN/A
312439SN/Adef template BranchExecute {{
322984Sgblack@eecs.umich.edu        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc,
33146SN/A                Trace::InstRecord *traceData) const
34146SN/A        {
35146SN/A            //Attempt to execute the instruction
36146SN/A            Fault fault = NoFault;
37146SN/A            checkPriv;
38146SN/A
391717SN/A            %(op_decl)s;
40146SN/A            %(op_rd)s;
411717SN/A            %(code)s;
42146SN/A
431977SN/A            if(fault == NoFault)
442623SN/A            {
452683Sktlim@umich.edu                //Write the resulting state to the execution context
461717SN/A                %(op_wb)s;
47146SN/A            }
482683Sktlim@umich.edu
493348Sbinkertn@umich.edu            return fault;
502683Sktlim@umich.edu        }
512036SN/A}};
52146SN/A
5356SN/A// Primary format for integer operate instructions:
5456SN/Adef format Branch(code, *opt_flags) {{
5556SN/A        orig_code = code
56695SN/A        cblk = CodeBlock(code)
572901Ssaidi@eecs.umich.edu        iop = InstObjParams(name, Name, 'SparcStaticInst', cblk, opt_flags)
582SN/A        header_output = BasicDeclare.subst(iop)
591858SN/A        decoder_output = BasicConstructor.subst(iop)
603565Sgblack@eecs.umich.edu        decode_block = BasicDecodeWithMnemonic.subst(iop)
613565Sgblack@eecs.umich.edu        exec_output = BranchExecute.subst(iop)
622171SN/A}};
632170SN/A