branch.isa revision 2022
12391SN/A//////////////////////////////////////////////////////////////////// 28931Sandreas.hansson@arm.com// 37733SN/A// Branch instructions 47733SN/A// 57733SN/A 67733SN/Aoutput header {{ 77733SN/A /** 87733SN/A * Base class for integer operations. 97733SN/A */ 107733SN/A class Branch : public SparcStaticInst 117733SN/A { 127733SN/A protected: 137733SN/A 142391SN/A /// Constructor 152391SN/A Branch(const char *mnem, MachInst _machInst, OpClass __opClass) : SparcStaticInst(mnem, _machInst, __opClass) 162391SN/A { 172391SN/A } 182391SN/A 192391SN/A std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 202391SN/A }; 212391SN/A}}; 222391SN/A 232391SN/Aoutput decoder {{ 242391SN/A std::string Branch::generateDisassembly(Addr pc, const SymbolTable *symtab) const 252391SN/A { 262391SN/A return "Disassembly of integer instruction\n"; 272391SN/A } 282391SN/A}}; 292391SN/A 302391SN/Adef template BranchExecute {{ 312391SN/A Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const 322391SN/A { 332391SN/A //Attempt to execute the instruction 342391SN/A try 352391SN/A { 362391SN/A checkPriv; 372391SN/A 382391SN/A %(op_decl)s; 392665SN/A %(op_rd)s; 402665SN/A %(code)s; 412914SN/A } 428931Sandreas.hansson@arm.com //If we have an exception for some reason, 432391SN/A //deal with it 442391SN/A catch(SparcException except) 4510466Sandreas.hansson@arm.com { 4610466Sandreas.hansson@arm.com //Deal with exception 4710102Sali.saidi@arm.com return No_Fault; 4810102Sali.saidi@arm.com } 498232SN/A 508232SN/A //Write the resulting state to the execution context 518931Sandreas.hansson@arm.com %(op_wb)s; 523879SN/A 539053Sdam.sunwoo@arm.com return No_Fault; 542394SN/A } 552391SN/A}}; 562391SN/A 578931Sandreas.hansson@arm.com// Primary format for integer operate instructions: 588931Sandreas.hansson@arm.comdef format Branch(code, *opt_flags) {{ 599053Sdam.sunwoo@arm.com orig_code = code 609053Sdam.sunwoo@arm.com cblk = CodeBlock(code) 612391SN/A iop = InstObjParams(name, Name, 'SparcStaticInst', cblk, opt_flags) 6210466Sandreas.hansson@arm.com header_output = BasicDeclare.subst(iop) 6310466Sandreas.hansson@arm.com decoder_output = BasicConstructor.subst(iop) 6410466Sandreas.hansson@arm.com decode_block = BasicDecodeWithMnemonic.subst(iop) 6510466Sandreas.hansson@arm.com exec_output = BranchExecute.subst(iop) 6610466Sandreas.hansson@arm.com}}; 6710466Sandreas.hansson@arm.com