branch.isa revision 2469
112771Sqtt2@cornell.edu//////////////////////////////////////////////////////////////////// 212771Sqtt2@cornell.edu// 312771Sqtt2@cornell.edu// Branch instructions 412771Sqtt2@cornell.edu// 512771Sqtt2@cornell.edu 612771Sqtt2@cornell.eduoutput header {{ 712771Sqtt2@cornell.edu /** 812771Sqtt2@cornell.edu * Base class for integer operations. 912771Sqtt2@cornell.edu */ 1012771Sqtt2@cornell.edu class Branch : public SparcStaticInst 1112771Sqtt2@cornell.edu { 1212771Sqtt2@cornell.edu protected: 1312771Sqtt2@cornell.edu // Constructor 1412771Sqtt2@cornell.edu Branch(const char *mnem, MachInst _machInst, OpClass __opClass) : 1512771Sqtt2@cornell.edu SparcStaticInst(mnem, _machInst, __opClass) 1612771Sqtt2@cornell.edu { 1712771Sqtt2@cornell.edu } 1812771Sqtt2@cornell.edu 1912771Sqtt2@cornell.edu std::string generateDisassembly(Addr pc, 2012771Sqtt2@cornell.edu const SymbolTable *symtab) const; 2112771Sqtt2@cornell.edu }; 2212771Sqtt2@cornell.edu}}; 2312771Sqtt2@cornell.edu 2412771Sqtt2@cornell.eduoutput decoder {{ 2512771Sqtt2@cornell.edu std::string Branch::generateDisassembly(Addr pc, const SymbolTable *symtab) const 2612771Sqtt2@cornell.edu { 2712771Sqtt2@cornell.edu return "Branch instruction\n"; 2812771Sqtt2@cornell.edu } 2912771Sqtt2@cornell.edu}}; 3012771Sqtt2@cornell.edu 3112771Sqtt2@cornell.edudef template BranchExecute {{ 3212771Sqtt2@cornell.edu Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, 3312771Sqtt2@cornell.edu Trace::InstRecord *traceData) const 3412771Sqtt2@cornell.edu { 3512771Sqtt2@cornell.edu //Attempt to execute the instruction 3612771Sqtt2@cornell.edu Fault fault = NoFault; 3712771Sqtt2@cornell.edu 3812771Sqtt2@cornell.edu %(op_decl)s; 3912771Sqtt2@cornell.edu %(op_rd)s; 4012771Sqtt2@cornell.edu %(code)s; 4112771Sqtt2@cornell.edu 4212771Sqtt2@cornell.edu if(fault == NoFault) 4312771Sqtt2@cornell.edu { 4412771Sqtt2@cornell.edu //Write the resulting state to the execution context 4512771Sqtt2@cornell.edu %(op_wb)s; 4612771Sqtt2@cornell.edu } 4712771Sqtt2@cornell.edu 4812771Sqtt2@cornell.edu return fault; 4912771Sqtt2@cornell.edu } 5012771Sqtt2@cornell.edu}}; 5112771Sqtt2@cornell.edu 5212771Sqtt2@cornell.edu// Primary format for integer operate instructions: 5312771Sqtt2@cornell.edudef format Branch(code, *opt_flags) {{ 5412771Sqtt2@cornell.edu orig_code = code 5512771Sqtt2@cornell.edu cblk = CodeBlock(code) 5612771Sqtt2@cornell.edu iop = InstObjParams(name, Name, 'SparcStaticInst', cblk, opt_flags) 5712771Sqtt2@cornell.edu header_output = BasicDeclare.subst(iop) 5812771Sqtt2@cornell.edu decoder_output = BasicConstructor.subst(iop) 5912771Sqtt2@cornell.edu decode_block = BasicDecode.subst(iop) 6012771Sqtt2@cornell.edu exec_output = BranchExecute.subst(iop) 6112771Sqtt2@cornell.edu}}; 6212771Sqtt2@cornell.edu