mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-16 14:31:59 +00:00
Thread an MCAsmInfo pointer through the various MC printing APIs,
and fix a few things using << on MCSymbols to use ->print(). No functionality change other than unbreaking my previous patch. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80890 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5c5ce5cef4
commit
684c593d05
@ -14,6 +14,7 @@
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
|
||||
namespace llvm {
|
||||
class MCAsmInfo;
|
||||
class MCContext;
|
||||
class MCSymbol;
|
||||
class MCValue;
|
||||
@ -49,7 +50,7 @@ public:
|
||||
/// @name Utility Methods
|
||||
/// @{
|
||||
|
||||
void print(raw_ostream &OS) const;
|
||||
void print(raw_ostream &OS, const MCAsmInfo *MAI) const;
|
||||
void dump() const;
|
||||
|
||||
/// @}
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
namespace llvm {
|
||||
class raw_ostream;
|
||||
class MCAsmInfo;
|
||||
class MCExpr;
|
||||
|
||||
/// MCOperand - Instances of this class represent operands of the MCInst class.
|
||||
@ -121,7 +122,7 @@ public:
|
||||
return Op;
|
||||
}
|
||||
|
||||
void print(raw_ostream &OS) const;
|
||||
void print(raw_ostream &OS, const MCAsmInfo *MAI) const;
|
||||
void dump() const;
|
||||
};
|
||||
|
||||
@ -147,7 +148,7 @@ public:
|
||||
Operands.push_back(Op);
|
||||
}
|
||||
|
||||
void print(raw_ostream &OS) const;
|
||||
void print(raw_ostream &OS, const MCAsmInfo *MAI) const;
|
||||
void dump() const;
|
||||
};
|
||||
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
|
||||
namespace llvm {
|
||||
class MCAsmInfo;
|
||||
class MCSection;
|
||||
class MCContext;
|
||||
class raw_ostream;
|
||||
@ -106,7 +107,7 @@ namespace llvm {
|
||||
/// @}
|
||||
|
||||
/// print - Print the value to the stream \arg OS.
|
||||
void print(raw_ostream &OS) const;
|
||||
void print(raw_ostream &OS, const MCAsmInfo *MAI) const;
|
||||
|
||||
/// dump - Print the value to stderr.
|
||||
void dump() const;
|
||||
|
@ -55,7 +55,7 @@ public:
|
||||
const MCSection *getAssociatedSection() const;
|
||||
|
||||
/// print - Print the value to the stream \arg OS.
|
||||
void print(raw_ostream &OS) const;
|
||||
void print(raw_ostream &OS, const MCAsmInfo *MAI) const;
|
||||
|
||||
/// dump - Print the value to stderr.
|
||||
void dump() const;
|
||||
|
@ -101,7 +101,8 @@ void MCAsmStreamer::EmitLabel(MCSymbol *Symbol) {
|
||||
assert(Symbol->isUndefined() && "Cannot define a symbol twice!");
|
||||
assert(CurSection && "Cannot emit before setting section!");
|
||||
|
||||
OS << Symbol << ":\n";
|
||||
Symbol->print(OS, &MAI);
|
||||
OS << ":\n";
|
||||
Symbol->setSection(*CurSection);
|
||||
}
|
||||
|
||||
@ -118,8 +119,9 @@ void MCAsmStreamer::EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
|
||||
assert((Symbol->isUndefined() || Symbol->isAbsolute()) &&
|
||||
"Cannot define a symbol twice!");
|
||||
|
||||
OS << Symbol << " = ";
|
||||
Value->print(OS);
|
||||
Symbol->print(OS, &MAI);
|
||||
OS << " = ";
|
||||
Value->print(OS, &MAI);
|
||||
OS << '\n';
|
||||
}
|
||||
|
||||
@ -140,17 +142,22 @@ void MCAsmStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
|
||||
case WeakReference: OS << ".weak_reference"; break;
|
||||
}
|
||||
|
||||
OS << ' ' << Symbol << '\n';
|
||||
OS << ' ';
|
||||
Symbol->print(OS, &MAI);
|
||||
OS << '\n';
|
||||
}
|
||||
|
||||
void MCAsmStreamer::EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) {
|
||||
OS << ".desc" << ' ' << Symbol << ',' << DescValue << '\n';
|
||||
OS << ".desc" << ' ';
|
||||
Symbol->print(OS, &MAI);
|
||||
OS << ',' << DescValue << '\n';
|
||||
}
|
||||
|
||||
void MCAsmStreamer::EmitCommonSymbol(MCSymbol *Symbol, unsigned Size,
|
||||
unsigned ByteAlignment) {
|
||||
OS << ".comm";
|
||||
OS << ' ' << Symbol << ',' << Size;
|
||||
OS << ".comm ";
|
||||
Symbol->print(OS, &MAI);
|
||||
OS << ',' << Size;
|
||||
if (ByteAlignment != 0)
|
||||
OS << ',' << Log2_32(ByteAlignment);
|
||||
OS << '\n';
|
||||
@ -166,7 +173,9 @@ void MCAsmStreamer::EmitZerofill(const MCSection *Section, MCSymbol *Symbol,
|
||||
OS << MOSection->getSegmentName() << "," << MOSection->getSectionName();
|
||||
|
||||
if (Symbol != NULL) {
|
||||
OS << ',' << Symbol << ',' << Size;
|
||||
OS << ',';
|
||||
Symbol->print(OS, &MAI);
|
||||
OS << ',' << Size;
|
||||
if (ByteAlignment != 0)
|
||||
OS << ',' << Log2_32(ByteAlignment);
|
||||
}
|
||||
@ -192,7 +201,7 @@ void MCAsmStreamer::EmitValue(const MCExpr *Value, unsigned Size) {
|
||||
}
|
||||
|
||||
OS << ' ';
|
||||
truncateToSize(Value, Size)->print(OS);
|
||||
truncateToSize(Value, Size)->print(OS, &MAI);
|
||||
OS << '\n';
|
||||
}
|
||||
|
||||
@ -248,7 +257,7 @@ void MCAsmStreamer::EmitValueToOffset(const MCExpr *Offset,
|
||||
unsigned char Value) {
|
||||
// FIXME: Verify that Offset is associated with the current section.
|
||||
OS << ".org ";
|
||||
Offset->print(OS);
|
||||
Offset->print(OS, &MAI);
|
||||
OS << ", " << (unsigned) Value << '\n';
|
||||
}
|
||||
|
||||
@ -281,7 +290,7 @@ void MCAsmStreamer::EmitInstruction(const MCInst &Inst) {
|
||||
|
||||
// Otherwise fall back to a structural printing for now. Eventually we should
|
||||
// always have access to the target specific printer.
|
||||
Inst.print(OS);
|
||||
Inst.print(OS, &MAI);
|
||||
OS << '\n';
|
||||
}
|
||||
|
||||
|
@ -14,14 +14,14 @@
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
using namespace llvm;
|
||||
|
||||
void MCExpr::print(raw_ostream &OS) const {
|
||||
void MCExpr::print(raw_ostream &OS, const MCAsmInfo *MAI) const {
|
||||
switch (getKind()) {
|
||||
case MCExpr::Constant:
|
||||
OS << cast<MCConstantExpr>(*this).getValue();
|
||||
return;
|
||||
|
||||
case MCExpr::SymbolRef:
|
||||
cast<MCSymbolRefExpr>(*this).getSymbol().print(OS);
|
||||
cast<MCSymbolRefExpr>(*this).getSymbol().print(OS, MAI);
|
||||
return;
|
||||
|
||||
case MCExpr::Unary: {
|
||||
@ -33,14 +33,14 @@ void MCExpr::print(raw_ostream &OS) const {
|
||||
case MCUnaryExpr::Not: OS << '~'; break;
|
||||
case MCUnaryExpr::Plus: OS << '+'; break;
|
||||
}
|
||||
UE.getSubExpr()->print(OS);
|
||||
UE.getSubExpr()->print(OS, MAI);
|
||||
return;
|
||||
}
|
||||
|
||||
case MCExpr::Binary: {
|
||||
const MCBinaryExpr &BE = cast<MCBinaryExpr>(*this);
|
||||
OS << '(';
|
||||
BE.getLHS()->print(OS);
|
||||
BE.getLHS()->print(OS, MAI);
|
||||
OS << ' ';
|
||||
switch (BE.getOpcode()) {
|
||||
default: assert(0 && "Invalid opcode!");
|
||||
@ -64,7 +64,7 @@ void MCExpr::print(raw_ostream &OS) const {
|
||||
case MCBinaryExpr::Xor: OS << '^'; break;
|
||||
}
|
||||
OS << ' ';
|
||||
BE.getRHS()->print(OS);
|
||||
BE.getRHS()->print(OS, MAI);
|
||||
OS << ')';
|
||||
return;
|
||||
}
|
||||
@ -74,7 +74,7 @@ void MCExpr::print(raw_ostream &OS) const {
|
||||
}
|
||||
|
||||
void MCExpr::dump() const {
|
||||
print(errs());
|
||||
print(errs(), 0);
|
||||
errs() << '\n';
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
void MCOperand::print(raw_ostream &OS) const {
|
||||
void MCOperand::print(raw_ostream &OS, const MCAsmInfo *MAI) const {
|
||||
OS << "<MCOperand ";
|
||||
if (!isValid())
|
||||
OS << "INVALID";
|
||||
@ -26,7 +26,7 @@ void MCOperand::print(raw_ostream &OS) const {
|
||||
<< getMBBLabelBlock() << ")";
|
||||
else if (isExpr()) {
|
||||
OS << "Expr:(";
|
||||
getExpr()->print(OS);
|
||||
getExpr()->print(OS, MAI);
|
||||
OS << ")";
|
||||
} else
|
||||
OS << "UNDEFINED";
|
||||
@ -34,20 +34,20 @@ void MCOperand::print(raw_ostream &OS) const {
|
||||
}
|
||||
|
||||
void MCOperand::dump() const {
|
||||
print(errs());
|
||||
print(errs(), 0);
|
||||
errs() << "\n";
|
||||
}
|
||||
|
||||
void MCInst::print(raw_ostream &OS) const {
|
||||
void MCInst::print(raw_ostream &OS, const MCAsmInfo *MAI) const {
|
||||
OS << "<MCInst " << getOpcode();
|
||||
for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
|
||||
OS << " ";
|
||||
getOperand(i).print(OS);
|
||||
getOperand(i).print(OS, MAI);
|
||||
}
|
||||
OS << ">";
|
||||
}
|
||||
|
||||
void MCInst::dump() const {
|
||||
print(errs());
|
||||
print(errs(), 0);
|
||||
errs() << "\n";
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ static inline bool NeedsQuoting(const StringRef &Str) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void MCSymbol::print(raw_ostream &OS) const {
|
||||
void MCSymbol::print(raw_ostream &OS, const MCAsmInfo *MAI) const {
|
||||
if (NeedsQuoting(getName()))
|
||||
OS << '"' << getName() << '"';
|
||||
else
|
||||
@ -49,5 +49,5 @@ void MCSymbol::print(raw_ostream &OS) const {
|
||||
}
|
||||
|
||||
void MCSymbol::dump() const {
|
||||
print(errs());
|
||||
print(errs(), 0);
|
||||
}
|
||||
|
@ -12,17 +12,17 @@
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
void MCValue::print(raw_ostream &OS) const {
|
||||
void MCValue::print(raw_ostream &OS, const MCAsmInfo *MAI) const {
|
||||
if (isAbsolute()) {
|
||||
OS << getConstant();
|
||||
return;
|
||||
}
|
||||
|
||||
getSymA()->print(OS);
|
||||
getSymA()->print(OS, MAI);
|
||||
|
||||
if (getSymB()) {
|
||||
OS << " - ";
|
||||
getSymB()->print(OS);
|
||||
getSymB()->print(OS, MAI);
|
||||
}
|
||||
|
||||
if (getConstant())
|
||||
@ -30,5 +30,5 @@ void MCValue::print(raw_ostream &OS) const {
|
||||
}
|
||||
|
||||
void MCValue::dump() const {
|
||||
print(errs());
|
||||
print(errs(), 0);
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ void X86ATTAsmPrinter::print_pcrel_imm(const MCInst *MI, unsigned OpNo) {
|
||||
if (Op.isImm())
|
||||
O << Op.getImm();
|
||||
else if (Op.isExpr())
|
||||
Op.getExpr()->print(O);
|
||||
Op.getExpr()->print(O, MAI);
|
||||
else if (Op.isMBBLabel())
|
||||
// FIXME: Keep in sync with printBasicBlockLabel. printBasicBlockLabel
|
||||
// should eventually call into this code, not the other way around.
|
||||
@ -93,7 +93,7 @@ void X86ATTAsmPrinter::printOperand(const MCInst *MI, unsigned OpNo,
|
||||
return;
|
||||
} else if (Op.isExpr()) {
|
||||
O << '$';
|
||||
Op.getExpr()->print(O);
|
||||
Op.getExpr()->print(O, MAI);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -111,7 +111,7 @@ void X86ATTAsmPrinter::printLeaMemReference(const MCInst *MI, unsigned Op) {
|
||||
if (DispVal || (!IndexReg.getReg() && !BaseReg.getReg()))
|
||||
O << DispVal;
|
||||
} else if (DispSpec.isExpr()) {
|
||||
DispSpec.getExpr()->print(O);
|
||||
DispSpec.getExpr()->print(O, MAI);
|
||||
} else {
|
||||
llvm_unreachable("non-immediate displacement for LEA?");
|
||||
//assert(DispSpec.isGlobal() || DispSpec.isCPI() ||
|
||||
|
Loading…
x
Reference in New Issue
Block a user