aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp18
-rw-r--r--test/CodeGen/X86/ms-inline-asm.ll4
2 files changed, 19 insertions, 3 deletions
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp b/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
index 2dfb73e300..260871d33b 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
+++ b/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
@@ -200,7 +200,15 @@ void AsmPrinter::EmitInlineAsm(const MachineInstr *MI) const {
// The variant of the current asmprinter.
int AsmPrinterVariant = MAI->getAssemblerDialect();
int InlineAsmVariant = MI->getInlineAsmDialect();
-
+
+ // Switch to the inline assembly variant.
+ if (AsmPrinterVariant != InlineAsmVariant) {
+ if (InlineAsmVariant == 0)
+ OS << ".att_syntax\n\t";
+ else
+ OS << ".intel_syntax\n\t";
+ }
+
int CurVariant = -1; // The number of the {.|.|.} region we are in.
const char *LastEmitted = AsmStr; // One past the last character emitted.
@@ -365,6 +373,14 @@ void AsmPrinter::EmitInlineAsm(const MachineInstr *MI) const {
}
}
}
+ // Switch to the AsmPrinter variant.
+ if (AsmPrinterVariant != InlineAsmVariant) {
+ if (AsmPrinterVariant == 0)
+ OS << "\n\t.att_syntax";
+ else
+ OS << "\n\t.intel_syntax";
+ }
+
OS << '\n' << (char)0; // null terminate string.
EmitInlineAsm(OS.str(), LocMD, MI->getInlineAsmDialect());
diff --git a/test/CodeGen/X86/ms-inline-asm.ll b/test/CodeGen/X86/ms-inline-asm.ll
index ea096c7db4..9bebcbde43 100644
--- a/test/CodeGen/X86/ms-inline-asm.ll
+++ b/test/CodeGen/X86/ms-inline-asm.ll
@@ -6,9 +6,9 @@ entry:
ret i32 %0
; CHECK: t1
; CHECK: ## InlineAsm Start
-; FIXME: .intel_syntax
+; CHECK: .intel_syntax
; CHECK: mov eax, ecx
; CHECK: mov ecx, eax
-; FIXME: .att_syntax
+; CHECK: .att_syntax
; CHECK: ## InlineAsm End
}