Fix the Align() utility which tries to align the raw disassembly with the edis'ed disassembly

so that both the opcode and the operands are aligned with the rest of output.

Comment out the code related to force_raw mode when disassembling arm or thumb for now.
It testing goes ok, we will remove the section of code related to force_raw.

llvm-svn: 131910
This commit is contained in:
Johnny Chen 2011-05-23 18:00:40 +00:00
parent 9987d3098b
commit feb961b86a
1 changed files with 10 additions and 4 deletions

View File

@ -109,11 +109,15 @@ StripSpaces(llvm::StringRef &Str)
Str = Str.substr(0, Str.size()-1); Str = Str.substr(0, Str.size()-1);
} }
static void static void
Align(Stream *s, const char *str) Align(Stream *s, const char *str, size_t opcodeColWidth, size_t operandColWidth)
{ {
llvm::StringRef raw_disasm(str); llvm::StringRef raw_disasm(str);
StripSpaces(raw_disasm); StripSpaces(raw_disasm);
s->PutCString(raw_disasm.str().c_str()); // Split the raw disassembly into opcode and operands.
std::pair<llvm::StringRef, llvm::StringRef> p = raw_disasm.split('\t');
PadString(s, p.first, opcodeColWidth);
if (!p.second.empty())
PadString(s, p.second, operandColWidth);
} }
void void
@ -173,10 +177,12 @@ InstructionLLVM::Dump
// FIXME!!! // FIXME!!!
/* Remove the following section of code related to force_raw .... */ /* Remove the following section of code related to force_raw .... */
/*
bool force_raw = m_arch_type == llvm::Triple::arm || bool force_raw = m_arch_type == llvm::Triple::arm ||
m_arch_type == llvm::Triple::thumb; m_arch_type == llvm::Triple::thumb;
if (!raw) if (!raw)
raw = force_raw; raw = force_raw;
*/
/* .... when we fix the edis for arm/thumb. */ /* .... when we fix the edis for arm/thumb. */
if (!raw) if (!raw)
@ -349,7 +355,7 @@ InstructionLLVM::Dump
if (EDGetInstString(&str, m_inst)) if (EDGetInstString(&str, m_inst))
return; return;
Align(s, str); Align(s, str, opcodeColumnWidth, operandColumnWidth);
} }
else else
{ {
@ -380,7 +386,7 @@ InstructionLLVM::Dump
{ {
// EDis fails to parse the tokens of this inst. Need to align this // EDis fails to parse the tokens of this inst. Need to align this
// raw disassembly's opcode with the rest of output. // raw disassembly's opcode with the rest of output.
Align(s, str); Align(s, str, opcodeColumnWidth, operandColumnWidth);
} }
} }
} }