Remove an easy use of EmitRawText from PPC.
authorRafael Espindola <rafael.espindola@gmail.com>
Sat, 25 Jan 2014 02:35:56 +0000 (02:35 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Sat, 25 Jan 2014 02:35:56 +0000 (02:35 +0000)
This makes lib/Target/PowerPC EmitRawText free.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200065 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
lib/Target/PowerPC/PPCAsmPrinter.cpp
lib/Target/PowerPC/PPCTargetStreamer.h

index 0455686599c1c667f21ddcd309f4e1ed2959c1c2..1d8c10cd7b93f445ca1a3c381c0cc1c8bdc144ad 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "MCTargetDesc/PPCMCTargetDesc.h"
 #include "MCTargetDesc/PPCMCExpr.h"
+#include "PPCTargetStreamer.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/SmallVector.h"
@@ -1436,6 +1437,10 @@ bool PPCAsmParser::ParseDirectiveMachine(SMLoc L) {
     Error(L, "unexpected token in directive");
     return false;
   }
+  PPCTargetStreamer &TStreamer =
+      *static_cast<PPCTargetStreamer *>(
+           getParser().getStreamer().getTargetStreamer());
+  TStreamer.emitMachine(CPU);
 
   return false;
 }
index 6a50518401813cbf665632e3131dac867dda31d6..5dea2bf3e07c7b5e1fb659da5f201c223ce51db6 100644 (file)
@@ -120,6 +120,9 @@ public:
     OS << S.getName();
     OS << '\n';
   }
+  virtual void emitMachine(StringRef CPU) {
+    OS << "\t.machine " << CPU << '\n';
+  }
 };
 
 class PPCTargetELFStreamer : public PPCTargetStreamer {
@@ -127,6 +130,10 @@ class PPCTargetELFStreamer : public PPCTargetStreamer {
     // Creates a R_PPC64_TOC relocation
     Streamer->EmitSymbolValue(&S, 8);
   }
+  virtual void emitMachine(StringRef CPU) {
+    // FIXME: Is there anything to do in here or does this directive only
+    // limit the parser?
+  }
 };
 }
 
index 15480d5219a3baa38c722c94048736fd20d50a0d..786c4f9a33446715f7e89512f5406c483141cd18 100644 (file)
@@ -850,13 +850,12 @@ void PPCDarwinAsmPrinter::EmitStartOfAsmFile(Module &M) {
   if (Subtarget.isPPC64() && Directive < PPC::DIR_64)
     Directive = PPC::DIR_64;
   assert(Directive <= PPC::DIR_64 && "Directive out of range.");
-  
-  // FIXME: This is a total hack, finish mc'izing the PPC backend.
-  if (OutStreamer.hasRawTextSupport()) {
-    assert(Directive < array_lengthof(CPUDirectives) &&
-           "CPUDirectives[] might not be up-to-date!");
-    OutStreamer.EmitRawText("\t.machine " + Twine(CPUDirectives[Directive]));
-  }
+
+  assert(Directive < array_lengthof(CPUDirectives) &&
+         "CPUDirectives[] might not be up-to-date!");
+  PPCTargetStreamer &TStreamer =
+      *static_cast<PPCTargetStreamer *>(OutStreamer.getTargetStreamer());
+  TStreamer.emitMachine(CPUDirectives[Directive]);
 
   // Prime text sections so they are adjacent.  This reduces the likelihood a
   // large data or debug section causes a branch to exceed 16M limit.
index e876be16a9b3284bd56339a76d77ca33b5d0b283..6f0125f2a86824dac053f8d59f7dac2f4011c96a 100644 (file)
@@ -17,6 +17,7 @@ class PPCTargetStreamer : public MCTargetStreamer {
 public:
   virtual ~PPCTargetStreamer();
   virtual void emitTCEntry(const MCSymbol &S) = 0;
+  virtual void emitMachine(StringRef CPU) = 0;
 };
 }