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