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