35,128d34
< output header {{
< /**
< * Base class for memory operations.
< */
< class Mem : public SparcStaticInst
< {
< protected:
<
< // Constructor
< Mem(const char *mnem, ExtMachInst _machInst, OpClass __opClass) :
< SparcStaticInst(mnem, _machInst, __opClass)
< {
< }
<
< std::string generateDisassembly(Addr pc,
< const SymbolTable *symtab) const;
< };
<
< /**
< * Class for memory operations which use an immediate offset.
< */
< class MemImm : public Mem
< {
< protected:
<
< // Constructor
< MemImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass) :
< Mem(mnem, _machInst, __opClass), imm(sext<13>(SIMM13))
< {}
<
< std::string generateDisassembly(Addr pc,
< const SymbolTable *symtab) const;
<
< const int32_t imm;
< };
< }};
<
< output decoder {{
< std::string Mem::generateDisassembly(Addr pc,
< const SymbolTable *symtab) const
< {
< std::stringstream response;
< bool load = flags[IsLoad];
< bool save = flags[IsStore];
<
< printMnemonic(response, mnemonic);
< if(save)
< {
< printReg(response, _srcRegIdx[0]);
< ccprintf(response, ", ");
< }
< ccprintf(response, "[ ");
< printReg(response, _srcRegIdx[!save ? 0 : 1]);
< ccprintf(response, " + ");
< printReg(response, _srcRegIdx[!save ? 1 : 2]);
< ccprintf(response, " ]");
< if(load)
< {
< ccprintf(response, ", ");
< printReg(response, _destRegIdx[0]);
< }
<
< return response.str();
< }
<
< std::string MemImm::generateDisassembly(Addr pc,
< const SymbolTable *symtab) const
< {
< std::stringstream response;
< bool load = flags[IsLoad];
< bool save = flags[IsStore];
<
< printMnemonic(response, mnemonic);
< if(save)
< {
< printReg(response, _srcRegIdx[0]);
< ccprintf(response, ", ");
< }
< ccprintf(response, "[ ");
< printReg(response, _srcRegIdx[!save ? 0 : 1]);
< if(imm >= 0)
< ccprintf(response, " + 0x%x ]", imm);
< else
< ccprintf(response, " + -0x%x ]", -imm);
< if(load)
< {
< ccprintf(response, ", ");
< printReg(response, _destRegIdx[0]);
< }
<
< return response.str();
< }
< }};
<