mem.isa revision 2022
111308Santhony.gutierrez@amd.com////////////////////////////////////////////////////////////////////
211308Santhony.gutierrez@amd.com//
311308Santhony.gutierrez@amd.com// Mem instructions
411308Santhony.gutierrez@amd.com//
511308Santhony.gutierrez@amd.com
611308Santhony.gutierrez@amd.comoutput header {{
711308Santhony.gutierrez@amd.com        /**
811308Santhony.gutierrez@amd.com         * Base class for integer operations.
911308Santhony.gutierrez@amd.com         */
1011308Santhony.gutierrez@amd.com        class Mem : public SparcStaticInst
1111308Santhony.gutierrez@amd.com        {
1211308Santhony.gutierrez@amd.com                protected:
1311308Santhony.gutierrez@amd.com
1411308Santhony.gutierrez@amd.com                /// Constructor
1511308Santhony.gutierrez@amd.com                Mem(const char *mnem, MachInst _machInst, OpClass __opClass) : SparcStaticInst(mnem, _machInst, __opClass)
1611308Santhony.gutierrez@amd.com                {
1711308Santhony.gutierrez@amd.com                }
1811308Santhony.gutierrez@amd.com
1911308Santhony.gutierrez@amd.com                std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
2011308Santhony.gutierrez@amd.com        };
2111308Santhony.gutierrez@amd.com}};
2211308Santhony.gutierrez@amd.com
2311308Santhony.gutierrez@amd.comoutput decoder {{
2411308Santhony.gutierrez@amd.com        std::string Mem::generateDisassembly(Addr pc, const SymbolTable *symtab) const
2511308Santhony.gutierrez@amd.com        {
2611308Santhony.gutierrez@amd.com                return "Disassembly of integer instruction\n";
2711308Santhony.gutierrez@amd.com        }
2811308Santhony.gutierrez@amd.com}};
2911308Santhony.gutierrez@amd.com
3011308Santhony.gutierrez@amd.comdef template MemExecute {{
3111308Santhony.gutierrez@amd.com        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
3211308Santhony.gutierrez@amd.com        {
3311308Santhony.gutierrez@amd.com                //Attempt to execute the instruction
3411308Santhony.gutierrez@amd.com                try
3511308Santhony.gutierrez@amd.com                {
3611308Santhony.gutierrez@amd.com
3711308Santhony.gutierrez@amd.com                        %(op_decl)s;
3811308Santhony.gutierrez@amd.com                        %(op_rd)s;
3911308Santhony.gutierrez@amd.com                        ea_code
4011308Santhony.gutierrez@amd.com                        %(code)s;
4111308Santhony.gutierrez@amd.com                }
4211308Santhony.gutierrez@amd.com                //If we have an exception for some reason,
4311308Santhony.gutierrez@amd.com                //deal with it
4411308Santhony.gutierrez@amd.com                catch(SparcException except)
4511308Santhony.gutierrez@amd.com                {
4611308Santhony.gutierrez@amd.com                        //Deal with exception
4711308Santhony.gutierrez@amd.com                        return No_Fault;
4811308Santhony.gutierrez@amd.com                }
4911308Santhony.gutierrez@amd.com
5011308Santhony.gutierrez@amd.com                //Write the resulting state to the execution context
5111308Santhony.gutierrez@amd.com                %(op_wb)s;
5211308Santhony.gutierrez@amd.com
5311308Santhony.gutierrez@amd.com                return No_Fault;
5411308Santhony.gutierrez@amd.com        }
5511308Santhony.gutierrez@amd.com}};
5611308Santhony.gutierrez@amd.com
5711308Santhony.gutierrez@amd.com// Primary format for integer operate instructions:
5811308Santhony.gutierrez@amd.comdef format Mem(code, *opt_flags) {{
5911308Santhony.gutierrez@amd.com        orig_code = code
6011308Santhony.gutierrez@amd.com        cblk = CodeBlock(code)
6111308Santhony.gutierrez@amd.com        iop = InstObjParams(name, Name, 'SparcStaticInst', cblk, opt_flags)
6211308Santhony.gutierrez@amd.com        header_output = BasicDeclare.subst(iop)
6311308Santhony.gutierrez@amd.com        decoder_output = BasicConstructor.subst(iop)
6411308Santhony.gutierrez@amd.com        decode_block = BasicDecodeWithMnemonic.subst(iop)
6511308Santhony.gutierrez@amd.com        exec_output = MemExecute.subst(iop)
6611308Santhony.gutierrez@amd.com        exec_output.replace('ea_code', 'EA = I ? (R1 + SIMM13) : R1 + R2;');
6711308Santhony.gutierrez@amd.com}};
6811308Santhony.gutierrez@amd.com
6911308Santhony.gutierrez@amd.comdef format Cas(code, *opt_flags) {{
7011308Santhony.gutierrez@amd.com        orig_code = code
7111308Santhony.gutierrez@amd.com        cblk = CodeBlock(code)
7211308Santhony.gutierrez@amd.com        iop = InstObjParams(name, Name, 'SparcStaticInst', cblk, opt_flags)
7311308Santhony.gutierrez@amd.com        header_output = BasicDeclare.subst(iop)
7411308Santhony.gutierrez@amd.com        decoder_output = BasicConstructor.subst(iop)
7511308Santhony.gutierrez@amd.com        decode_block = BasicDecodeWithMnemonic.subst(iop)
7611308Santhony.gutierrez@amd.com        exec_output = MemExecute.subst(iop)
7711308Santhony.gutierrez@amd.com        exec_output.replace('ea_code', 'EA = R1;');
7811308Santhony.gutierrez@amd.com}};
7911308Santhony.gutierrez@amd.com