summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-04-03 21:35:55 +0000
committerChris Lattner <sabre@nondot.org>2010-04-03 21:35:55 +0000
commit8a87fb7633476e166cf8e7a2b4432d895a5cd3b7 (patch)
tree9edd3e47fcc1ce51646dec584127b30f902a55d6 /llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
parentfed39fa7b3ec776dbdcd39460b039eeed5b80518 (diff)
downloadbcm5719-llvm-8a87fb7633476e166cf8e7a2b4432d895a5cd3b7.tar.gz
bcm5719-llvm-8a87fb7633476e166cf8e7a2b4432d895a5cd3b7.zip
add a new EmitInlineAsm function to asmprinter to handle inline asm.
If we have an MCAsmStreamer, we continue to emit asm textually, otherwise we (currently) emit an error to errs and ignore it. llvm-svn: 100289
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 2cb4d01574a..0d6a2e2999b 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -125,14 +125,12 @@ bool AsmPrinter::doInitialization(Module &M) {
for (GCModuleInfo::iterator I = MI->begin(), E = MI->end(); I != E; ++I)
if (GCMetadataPrinter *MP = GetOrCreateGCPrinter(*I))
MP->beginAssembly(O, *this, *MAI);
-
+
+ // Emit module-level inline asm if it exists.
if (!M.getModuleInlineAsm().empty()) {
OutStreamer.AddComment("Start of file scope inline assembly");
OutStreamer.AddBlankLine();
- O << M.getModuleInlineAsm();
-
- if (*M.getModuleInlineAsm().rbegin() != '\n')
- OutStreamer.AddBlankLine();
+ EmitInlineAsm(M.getModuleInlineAsm());
OutStreamer.AddComment("End of file scope inline assembly");
OutStreamer.AddBlankLine();
}
@@ -879,6 +877,22 @@ void AsmPrinter::EmitXXStructorList(Constant *List) {
}
}
+/// EmitInlineAsm - Emit a blob of inline asm to the output streamer.
+void AsmPrinter::EmitInlineAsm(StringRef Str) {
+ assert(!Str.empty() && "Can't emit empty inline asm block");
+
+ // If the output streamer is actually a .s file, just emit the blob textually.
+ // This is useful in case the asm parser doesn't handle something but the
+ // system assembler does.
+ if (OutStreamer.hasRawTextSupport()) {
+ OutStreamer.EmitRawText(Str);
+ return;
+ }
+
+ errs() << "Inline asm not supported by this streamer!\n";
+}
+
+
//===--------------------------------------------------------------------===//
// Emission and print routines
//
OpenPOWER on IntegriCloud