Add support for assembler directives that wrap inline asm
authorChris Lattner <sabre@nondot.org>
Wed, 8 Feb 2006 23:41:56 +0000 (23:41 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 8 Feb 2006 23:41:56 +0000 (23:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26065 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/AsmPrinter.h
lib/CodeGen/AsmPrinter.cpp

index 94c12f7a14750264819da2a0f5a3be4667a2cf0b..956e8864a0d879e46d8079753453a3a58f9f0aca 100644 (file)
@@ -86,6 +86,11 @@ namespace llvm {
     const char *FunctionAddrPrefix;       // Defaults to ""
     const char *FunctionAddrSuffix;       // Defaults to ""
 
+    /// InlineAsmStart/End - If these are nonempty, they contain a directive to
+    /// emit before and after an inline assmebly statement.
+    const char *InlineAsmStart;           // Defaults to "#APP\n"
+    const char *InlineAsmEnd;             // Defaults to "#NO_APP\n"
+    
     //===--- Data Emission Directives -------------------------------------===//
 
     /// ZeroDirective - this should be set to the directive used to get some
index 6fa6623550819049b5eb40fe0b4debe630503e3d..263b35cf4d2bce86175e317bce0d8ad9c1917117 100644 (file)
@@ -32,6 +32,8 @@ AsmPrinter::AsmPrinter(std::ostream &o, TargetMachine &tm)
   GlobalVarAddrSuffix(""),
   FunctionAddrPrefix(""),
   FunctionAddrSuffix(""),
+  InlineAsmStart("#APP\n"),
+  InlineAsmEnd("#NO_APP\n"),
   ZeroDirective("\t.zero\t"),
   AsciiDirective("\t.ascii\t"),
   AscizDirective("\t.asciz\t"),
@@ -482,6 +484,7 @@ void AsmPrinter::EmitGlobalConstant(const Constant *CV) {
 /// printInlineAsm - This method formats and prints the specified machine
 /// instruction that is an inline asm.
 void AsmPrinter::printInlineAsm(const MachineInstr *MI) const {
+  O << InlineAsmStart;
   unsigned NumOperands = MI->getNumOperands();
   
   // Count the number of register definitions.
@@ -613,7 +616,7 @@ void AsmPrinter::printInlineAsm(const MachineInstr *MI) const {
       break;
     }
   }
-  O << "\n";
+  O << "\n" << InlineAsmEnd;
 }
 
 /// PrintAsmOperand - Print the specified operand of MI, an INLINEASM