MC X86: Accept ".att_syntax prefix" and diagnose noprefix
authorReid Kleckner <reid@kleckner.net>
Wed, 6 Aug 2014 23:21:13 +0000 (23:21 +0000)
committerReid Kleckner <reid@kleckner.net>
Wed, 6 Aug 2014 23:21:13 +0000 (23:21 +0000)
Fixes PR18916.  I don't think we need to implement support for either
hybrid syntax.  Nobody should write Intel assembly with '%' prefixes on
their registers or AT&T assembly without them.

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

lib/Target/X86/AsmParser/X86AsmParser.cpp
test/MC/X86/intel-syntax-2.s

index e504f2705529497605d814cae08d7ebb489998a5..17aca81d3758033b5b577902866c9202023def82 100644 (file)
@@ -2528,14 +2528,25 @@ bool X86AsmParser::ParseDirective(AsmToken DirectiveID) {
   else if (IDVal.startswith(".code"))
     return ParseDirectiveCode(IDVal, DirectiveID.getLoc());
   else if (IDVal.startswith(".att_syntax")) {
+    if (getLexer().isNot(AsmToken::EndOfStatement)) {
+      if (Parser.getTok().getString() == "prefix")
+        Parser.Lex();
+      else if (Parser.getTok().getString() == "noprefix")
+        return Error(DirectiveID.getLoc(), "'.att_syntax noprefix' is not "
+                                           "supported: registers must have a "
+                                           "'%' prefix in .att_syntax");
+    }
     getParser().setAssemblerDialect(0);
     return false;
   } else if (IDVal.startswith(".intel_syntax")) {
     getParser().setAssemblerDialect(1);
     if (getLexer().isNot(AsmToken::EndOfStatement)) {
-      // FIXME: Handle noprefix
       if (Parser.getTok().getString() == "noprefix")
         Parser.Lex();
+      else if (Parser.getTok().getString() == "prefix")
+        return Error(DirectiveID.getLoc(), "'.intel_syntax prefix' is not "
+                                           "supported: registers must not have "
+                                           "a '%' prefix in .intel_syntax");
     }
     return false;
   }
index d6dbe152cd5808e8b89e03a5a4f969f4ccfb7d39..f7bdaf92dbb5d0b6a49cfdfd15d5405deba2434c 100644 (file)
@@ -7,3 +7,11 @@ _test:
     .att_syntax
 // CHECK:      movl    $257, -4(%rsp)
     movl $257, -4(%rsp)
+
+_test2:
+.intel_syntax noprefix
+       mov     DWORD PTR [RSP - 4], 255
+// CHECK:      movl    $255, -4(%rsp)
+.att_syntax prefix
+       movl $255, -4(%rsp)
+// CHECK:      movl    $255, -4(%rsp)