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