From ed87dcd45fce9416ee96250bc046773ba950f62b Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 8 Feb 2006 23:41:56 +0000 Subject: [PATCH] Add support for assembler directives that wrap inline asm llvm-svn: 26065 --- llvm/include/llvm/CodeGen/AsmPrinter.h | 5 +++++ llvm/lib/CodeGen/AsmPrinter.cpp | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/CodeGen/AsmPrinter.h b/llvm/include/llvm/CodeGen/AsmPrinter.h index 94c12f7a1475..956e8864a0d8 100644 --- a/llvm/include/llvm/CodeGen/AsmPrinter.h +++ b/llvm/include/llvm/CodeGen/AsmPrinter.h @@ -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 diff --git a/llvm/lib/CodeGen/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter.cpp index 6fa662355081..263b35cf4d2b 100644 --- a/llvm/lib/CodeGen/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter.cpp @@ -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