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