namespace llvm {
class MCInst;
class raw_ostream;
+class MCAsmInfo;
+
/// MCInstPrinter - This is an instance of a target assembly language printer
/// that converts an MCInst to valid target assembly syntax.
class MCInstPrinter {
+protected:
raw_ostream &O;
+ const MCAsmInfo &MAI;
public:
- MCInstPrinter(raw_ostream &o) : O(o) {}
+ MCInstPrinter(raw_ostream &o, const MCAsmInfo &mai) : O(o), MAI(mai) {}
virtual ~MCInstPrinter();
//===----------------------------------------------------------------------===//
void X86ATTAsmPrinter::printMCInst(const MCInst *MI) {
- X86ATTInstPrinter(O, MAI).printInstruction(MI);
+ X86ATTInstPrinter(O, *MAI).printInstruction(MI);
}
void X86ATTAsmPrinter::PrintPICBaseSymbol() const {
#include "X86GenAsmWriter.inc"
#undef MachineInstr
+void X86ATTInstPrinter::printInst(const MCInst *MI) { printInstruction(MI); }
+
void X86ATTInstPrinter::printSSECC(const MCInst *MI, unsigned Op) {
switch (MI->getOperand(Op).getImm()) {
default: llvm_unreachable("Invalid ssecc argument!");
O << Op.getImm();
else {
assert(Op.isExpr() && "unknown pcrel immediate operand");
- Op.getExpr()->print(O, MAI);
+ Op.getExpr()->print(O, &MAI);
}
}
} else {
assert(Op.isExpr() && "unknown operand kind in printOperand");
O << '$';
- Op.getExpr()->print(O, MAI);
+ Op.getExpr()->print(O, &MAI);
}
}
O << DispVal;
} else {
assert(DispSpec.isExpr() && "non-immediate displacement for LEA?");
- DispSpec.getExpr()->print(O, MAI);
+ DispSpec.getExpr()->print(O, &MAI);
}
if (IndexReg.getReg() || BaseReg.getReg()) {
#ifndef X86_ATT_INST_PRINTER_H
#define X86_ATT_INST_PRINTER_H
+#include "llvm/MC/MCInstPrinter.h"
+
namespace llvm {
- class MCAsmInfo;
- class MCInst;
class MCOperand;
- class raw_ostream;
-class X86ATTInstPrinter {
- raw_ostream &O;
- const MCAsmInfo *MAI;
+class X86ATTInstPrinter : public MCInstPrinter {
public:
- X86ATTInstPrinter(raw_ostream &o, const MCAsmInfo *mai) : O(o), MAI(mai) {}
+ X86ATTInstPrinter(raw_ostream &O, const MCAsmInfo &MAI)
+ : MCInstPrinter(O, MAI) {}
+
+ virtual void printInst(const MCInst *MI);
+
// Autogenerated by tblgen.
void printInstruction(const MCInst *MI);
static const char *getRegisterName(unsigned RegNo);