mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-05 18:37:17 +00:00
Fix some column padding bugs, reorganize things as suggested by Chris
and eliminate complexity. Yay! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78243 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cafbdc5c09
commit
a5bb59f856
@ -327,6 +327,12 @@ namespace llvm {
|
|||||||
void EmitComments(const MCInst &MI) const;
|
void EmitComments(const MCInst &MI) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
/// getOperandColumn - Return the output column number (zero-based)
|
||||||
|
/// for operand % "operand." If TargetAsmInfo has FirstOperandColumn
|
||||||
|
/// == 0 or MaxOperandLength == 0, return 0, meaning column alignment
|
||||||
|
/// is disabled.
|
||||||
|
unsigned getOperandColumn(int operand) const;
|
||||||
|
|
||||||
/// PadToColumn - This gets called every time a tab is emitted. If
|
/// PadToColumn - This gets called every time a tab is emitted. If
|
||||||
/// column padding is turned on, we replace the tab with the
|
/// column padding is turned on, we replace the tab with the
|
||||||
/// appropriate amount of padding. If not, we replace the tab with a
|
/// appropriate amount of padding. If not, we replace the tab with a
|
||||||
|
@ -361,8 +361,11 @@ namespace llvm {
|
|||||||
const char *getCommentString() const {
|
const char *getCommentString() const {
|
||||||
return CommentString;
|
return CommentString;
|
||||||
}
|
}
|
||||||
unsigned getOperandColumn(int operand) const {
|
unsigned getFirstOperandColumn() const {
|
||||||
return FirstOperandColumn + (MaxOperandLength+1)*(operand-1);
|
return FirstOperandColumn;
|
||||||
|
}
|
||||||
|
unsigned getMaxOperandLength() const {
|
||||||
|
return MaxOperandLength;
|
||||||
}
|
}
|
||||||
const char *getGlobalPrefix() const {
|
const char *getGlobalPrefix() const {
|
||||||
return GlobalPrefix;
|
return GlobalPrefix;
|
||||||
|
@ -782,6 +782,20 @@ void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue *GV,
|
|||||||
}
|
}
|
||||||
O << '\n';
|
O << '\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// getOperandColumn - Return the output column number (zero-based)
|
||||||
|
/// for operand % "operand." If TargetAsmInfo has FirstOperandColumn
|
||||||
|
/// == 0 or MaxOperandLength == 0, return 0, meaning column alignment
|
||||||
|
/// is disabled.
|
||||||
|
unsigned AsmPrinter::getOperandColumn(int operand) const {
|
||||||
|
if (TAI->getFirstOperandColumn() > 0 && TAI->getMaxOperandLength() > 0) {
|
||||||
|
return TAI->getFirstOperandColumn()
|
||||||
|
+ (TAI->getMaxOperandLength()+1)*(operand-1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// PadToColumn - This gets called every time a tab is emitted. If
|
/// PadToColumn - This gets called every time a tab is emitted. If
|
||||||
/// column padding is turned on, we replace the tab with the
|
/// column padding is turned on, we replace the tab with the
|
||||||
@ -789,8 +803,8 @@ void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue *GV,
|
|||||||
/// space, except for the first operand so that initial operands are
|
/// space, except for the first operand so that initial operands are
|
||||||
/// always lined up by tabs.
|
/// always lined up by tabs.
|
||||||
void AsmPrinter::PadToColumn(unsigned Operand) const {
|
void AsmPrinter::PadToColumn(unsigned Operand) const {
|
||||||
if (TAI->getOperandColumn(Operand) > 0) {
|
if (getOperandColumn(Operand) > 0) {
|
||||||
O.PadToColumn(TAI->getOperandColumn(Operand), 1);
|
O.PadToColumn(getOperandColumn(Operand), 1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (Operand == 1) {
|
if (Operand == 1) {
|
||||||
|
@ -148,8 +148,6 @@ AsmWriterInst::AsmWriterInst(const CodeGenInstruction &CGI, unsigned Variant) {
|
|||||||
|
|
||||||
// Emit a constant string fragment.
|
// Emit a constant string fragment.
|
||||||
|
|
||||||
// TODO: Recognize an operand separator to determine when to pad
|
|
||||||
// to the next operator.
|
|
||||||
if (DollarPos != LastEmitted) {
|
if (DollarPos != LastEmitted) {
|
||||||
if (CurVariant == Variant || CurVariant == ~0U) {
|
if (CurVariant == Variant || CurVariant == ~0U) {
|
||||||
for (; LastEmitted != DollarPos; ++LastEmitted)
|
for (; LastEmitted != DollarPos; ++LastEmitted)
|
||||||
@ -727,30 +725,10 @@ void AsmWriterEmitter::run(raw_ostream &O) {
|
|||||||
|
|
||||||
O << " // Emit the opcode for the instruction.\n"
|
O << " // Emit the opcode for the instruction.\n"
|
||||||
<< " unsigned Bits = OpInfo[MI->getOpcode()];\n"
|
<< " unsigned Bits = OpInfo[MI->getOpcode()];\n"
|
||||||
<< " if (Bits == 0) return false;\n\n";
|
<< " if (Bits == 0) return false;\n"
|
||||||
|
<< " O << AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << ");\n\n";
|
||||||
O << " unsigned OperandColumn = 1;\n\n"
|
|
||||||
<< " if (TAI->getOperandColumn(1) > 0) {\n"
|
O << " unsigned OperandColumn = 1;\n\n";
|
||||||
<< " // Don't emit trailing whitespace, let the column padding do it. This\n"
|
|
||||||
<< " // guarantees that a stray long opcode + tab won't upset the alignment.\n"
|
|
||||||
<< " // We need to handle this special case here because sometimes the initial\n"
|
|
||||||
<< " // mnemonic string includes a tab or space and sometimes it doesn't.\n"
|
|
||||||
<< " unsigned OpLength = std::strlen(AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << "));\n"
|
|
||||||
<< " if (OpLength > 0 &&\n"
|
|
||||||
<< " ((AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << "))[OpLength-1] == ' ' ||\n"
|
|
||||||
<< " (AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << "))[OpLength-1] == '\\t')) {\n"
|
|
||||||
<< " do {\n"
|
|
||||||
<< " --OpLength;\n"
|
|
||||||
<< " } while ((AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << "))[OpLength-1] == ' ' ||\n"
|
|
||||||
<< " (AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << "))[OpLength-1] == '\\t');\n"
|
|
||||||
<< " for (unsigned Idx = 0; Idx < OpLength; ++Idx)\n"
|
|
||||||
<< " O << (AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << "))[Idx];\n"
|
|
||||||
<< " O.PadToColumn(TAI->getOperandColumn(OperandColumn++), 1);\n"
|
|
||||||
<< " }\n"
|
|
||||||
<< " } else {\n"
|
|
||||||
<< " O << AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << ");\n"
|
|
||||||
<< " }\n\n";
|
|
||||||
|
|
||||||
|
|
||||||
// Output the table driven operand information.
|
// Output the table driven operand information.
|
||||||
BitsLeft = 32-AsmStrBits;
|
BitsLeft = 32-AsmStrBits;
|
||||||
|
Loading…
Reference in New Issue
Block a user