summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp3
-rw-r--r--llvm/lib/MC/MCAsmStreamer.cpp16
-rw-r--r--llvm/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp16
3 files changed, 26 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index fca4b8008a9..6249cda695b 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -56,7 +56,8 @@ AsmPrinter::AsmPrinter(formatted_raw_ostream &o, TargetMachine &tm,
TM(tm), MAI(T), TRI(tm.getRegisterInfo()),
OutContext(*new MCContext()),
- OutStreamer(*createAsmStreamer(OutContext, O, *T, this)),
+ // FIXME: Pass instprinter to streamer.
+ OutStreamer(*createAsmStreamer(OutContext, O, *T, 0)),
LastMI(0), LastFn(0), Counter(~0U),
PrevDLT(0, ~0U, ~0U) {
diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index f07514c7298..e56e968380f 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -9,12 +9,12 @@
#include "llvm/MC/MCStreamer.h"
#include "llvm/ADT/SmallString.h"
-#include "llvm/CodeGen/AsmPrinter.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCCodeEmitter.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCInst.h"
+#include "llvm/MC/MCInstPrinter.h"
#include "llvm/MC/MCSectionMachO.h"
#include "llvm/MC/MCSymbol.h"
#include "llvm/Support/ErrorHandling.h"
@@ -28,12 +28,12 @@ namespace {
class MCAsmStreamer : public MCStreamer {
raw_ostream &OS;
const MCAsmInfo &MAI;
- AsmPrinter *Printer;
+ MCInstPrinter *InstPrinter;
MCCodeEmitter *Emitter;
public:
MCAsmStreamer(MCContext &Context, raw_ostream &_OS, const MCAsmInfo &tai,
- AsmPrinter *_Printer, MCCodeEmitter *_Emitter)
- : MCStreamer(Context), OS(_OS), MAI(tai), Printer(_Printer),
+ MCInstPrinter *_Printer, MCCodeEmitter *_Emitter)
+ : MCStreamer(Context), OS(_OS), MAI(tai), InstPrinter(_Printer),
Emitter(_Emitter) {}
~MCAsmStreamer() {}
@@ -265,8 +265,8 @@ void MCAsmStreamer::EmitInstruction(const MCInst &Inst) {
assert(CurSection && "Cannot emit contents before setting section!");
// If we have an AsmPrinter, use that to print.
- if (Printer) {
- Printer->printMCInst(&Inst);
+ if (InstPrinter) {
+ InstPrinter->printInst(&Inst);
OS << '\n';
// Show the encoding if we have a code emitter.
@@ -300,7 +300,7 @@ void MCAsmStreamer::Finish() {
}
MCStreamer *llvm::createAsmStreamer(MCContext &Context, raw_ostream &OS,
- const MCAsmInfo &MAI, AsmPrinter *AP,
+ const MCAsmInfo &MAI, MCInstPrinter *IP,
MCCodeEmitter *CE) {
- return new MCAsmStreamer(Context, OS, MAI, AP, CE);
+ return new MCAsmStreamer(Context, OS, MAI, IP, CE);
}
diff --git a/llvm/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp b/llvm/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
index 3ca35c50da9..6b2da9ef8cf 100644
--- a/llvm/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
+++ b/llvm/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
@@ -17,6 +17,7 @@
#include "X86.h"
#include "X86ATTAsmPrinter.h"
#include "X86IntelAsmPrinter.h"
+#include "X86ATTInstPrinter.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/Target/TargetRegistry.h"
using namespace llvm;
@@ -34,8 +35,23 @@ static AsmPrinter *createX86CodePrinterPass(formatted_raw_ostream &o,
return new X86ATTAsmPrinter(o, tm, tai, verbose);
}
+
+static MCInstPrinter *createX86MCInstPrinter(const Target &T,
+ unsigned SyntaxVariant,
+ const MCAsmInfo &MAI,
+ raw_ostream &O) {
+ if (SyntaxVariant == 0)
+ return new X86ATTInstPrinter(O, MAI);
+
+ // Don't support intel syntax instprinter yet.
+ return 0;
+}
+
// Force static initialization.
extern "C" void LLVMInitializeX86AsmPrinter() {
TargetRegistry::RegisterAsmPrinter(TheX86_32Target, createX86CodePrinterPass);
TargetRegistry::RegisterAsmPrinter(TheX86_64Target, createX86CodePrinterPass);
+
+ TargetRegistry::RegisterMCInstPrinter(TheX86_32Target,createX86MCInstPrinter);
+ TargetRegistry::RegisterMCInstPrinter(TheX86_64Target,createX86MCInstPrinter);
}
OpenPOWER on IntegriCloud