X86: Move the function that prints memory args into the inst base class.
This commit is contained in:
parent
9e24d8c599
commit
8cab1805f9
3 changed files with 43 additions and 27 deletions
|
@ -64,7 +64,6 @@ namespace X86ISA
|
|||
const SymbolTable *symtab) const
|
||||
{
|
||||
std::stringstream response;
|
||||
bool someAddr = false;
|
||||
|
||||
printMnemonic(response, instMnem, mnemonic);
|
||||
if(flags[IsLoad])
|
||||
|
@ -72,32 +71,8 @@ namespace X86ISA
|
|||
else
|
||||
printSrcReg(response, 2, dataSize);
|
||||
response << ", ";
|
||||
printSegment(response, segment);
|
||||
response << ":[";
|
||||
if(scale != 0 && _srcRegIdx[0] != ZeroReg)
|
||||
{
|
||||
if(scale != 1)
|
||||
ccprintf(response, "%d*", scale);
|
||||
printSrcReg(response, 0, addressSize);
|
||||
someAddr = true;
|
||||
}
|
||||
if(_srcRegIdx[1] != ZeroReg)
|
||||
{
|
||||
if(someAddr)
|
||||
response << " + ";
|
||||
printSrcReg(response, 1, addressSize);
|
||||
someAddr = true;
|
||||
}
|
||||
if(disp != 0)
|
||||
{
|
||||
if(someAddr)
|
||||
response << " + ";
|
||||
ccprintf(response, "%#x", disp);
|
||||
someAddr = true;
|
||||
}
|
||||
if(!someAddr)
|
||||
response << "0";
|
||||
response << "]";
|
||||
printMem(response, segment, scale, index, base, disp,
|
||||
addressSize, false);
|
||||
return response.str();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -240,6 +240,44 @@ namespace X86ISA
|
|||
}
|
||||
}
|
||||
|
||||
void X86StaticInst::printMem(std::ostream &os, uint8_t segment,
|
||||
uint8_t scale, RegIndex index, RegIndex base,
|
||||
uint64_t disp, uint8_t addressSize, bool rip) const
|
||||
{
|
||||
bool someAddr = false;
|
||||
printSegment(os, segment);
|
||||
os << ":[";
|
||||
if (rip) {
|
||||
os << "rip";
|
||||
someAddr = true;
|
||||
} else {
|
||||
if (scale != 0 && index != ZeroReg)
|
||||
{
|
||||
if(scale != 1)
|
||||
ccprintf(os, "%d*", scale);
|
||||
printReg(os, index, addressSize);
|
||||
someAddr = true;
|
||||
}
|
||||
if (base != ZeroReg)
|
||||
{
|
||||
if(someAddr)
|
||||
os << " + ";
|
||||
printReg(os, base, addressSize);
|
||||
someAddr = true;
|
||||
}
|
||||
}
|
||||
if (disp != 0)
|
||||
{
|
||||
if(someAddr)
|
||||
os << " + ";
|
||||
ccprintf(os, "%#x", disp);
|
||||
someAddr = true;
|
||||
}
|
||||
if (!someAddr)
|
||||
os << "0";
|
||||
os << "]";
|
||||
}
|
||||
|
||||
std::string X86StaticInst::generateDisassembly(Addr pc,
|
||||
const SymbolTable *symtab) const
|
||||
{
|
||||
|
|
|
@ -89,6 +89,9 @@ namespace X86ISA
|
|||
void printReg(std::ostream &os, int reg, int size) const;
|
||||
void printSrcReg(std::ostream &os, int reg, int size) const;
|
||||
void printDestReg(std::ostream &os, int reg, int size) const;
|
||||
void printMem(std::ostream &os, uint8_t segment,
|
||||
uint8_t scale, RegIndex index, RegIndex base,
|
||||
uint64_t disp, uint8_t addressSize, bool rip) const;
|
||||
|
||||
inline uint64_t merge(uint64_t into, uint64_t val, int size) const
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue