[llvm] r279577 - [MC] Support .dc directives in assembler parser

Petr Hosek via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 23 14:34:54 PDT 2016


Author: phosek
Date: Tue Aug 23 16:34:53 2016
New Revision: 279577

URL: http://llvm.org/viewvc/llvm-project?rev=279577&view=rev
Log:
[MC] Support .dc directives in assembler parser

While these directives are mostly aliases for the existing integer
and float value directives, some of them like .dc.a have no direct
equivalents and are sometimes being used for convenience.

Differential Revision: https://reviews.llvm.org/D23810

Added:
    llvm/trunk/test/MC/AsmParser/directive_dc.s
Modified:
    llvm/trunk/lib/MC/MCParser/AsmParser.cpp

Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=279577&r1=279576&r2=279577&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Tue Aug 23 16:34:53 2016
@@ -426,6 +426,7 @@ private:
     DK_SET, DK_EQU, DK_EQUIV, DK_ASCII, DK_ASCIZ, DK_STRING, DK_BYTE, DK_SHORT,
     DK_RELOC,
     DK_VALUE, DK_2BYTE, DK_LONG, DK_INT, DK_4BYTE, DK_QUAD, DK_8BYTE, DK_OCTA,
+    DK_DC, DK_DC_A, DK_DC_B, DK_DC_D, DK_DC_L, DK_DC_S, DK_DC_W, DK_DC_X,
     DK_SINGLE, DK_FLOAT, DK_DOUBLE, DK_ALIGN, DK_ALIGN32, DK_BALIGN, DK_BALIGNW,
     DK_BALIGNL, DK_P2ALIGN, DK_P2ALIGNW, DK_P2ALIGNL, DK_ORG, DK_FILL, DK_ENDR,
     DK_BUNDLE_ALIGN_MODE, DK_BUNDLE_LOCK, DK_BUNDLE_UNLOCK,
@@ -1905,6 +1906,23 @@ bool AsmParser::parseStatement(ParseStat
       return parseDirectiveWarning(IDLoc);
     case DK_RELOC:
       return parseDirectiveReloc(IDLoc);
+    case DK_DC:
+      return parseDirectiveValue(2);
+    case DK_DC_A:
+      return parseDirectiveValue(getContext().getAsmInfo()->getPointerSize());
+    case DK_DC_B:
+      return parseDirectiveValue(1);
+    case DK_DC_D:
+      return parseDirectiveRealValue(APFloat::IEEEdouble);
+    case DK_DC_L:
+      return parseDirectiveValue(4);
+    case DK_DC_S:
+      return parseDirectiveRealValue(APFloat::IEEEsingle);
+    case DK_DC_W:
+      return parseDirectiveValue(2);
+    case DK_DC_X:
+      return TokError(Twine(IDVal) +
+                      " not currently supported for this target");
     }
 
     return Error(IDLoc, "unknown directive");
@@ -4763,6 +4781,14 @@ void AsmParser::initializeDirectiveKindM
   DirectiveKindMap[".error"] = DK_ERROR;
   DirectiveKindMap[".warning"] = DK_WARNING;
   DirectiveKindMap[".reloc"] = DK_RELOC;
+  DirectiveKindMap[".dc"] = DK_DC;
+  DirectiveKindMap[".dc.a"] = DK_DC_A;
+  DirectiveKindMap[".dc.b"] = DK_DC_B;
+  DirectiveKindMap[".dc.d"] = DK_DC_D;
+  DirectiveKindMap[".dc.l"] = DK_DC_L;
+  DirectiveKindMap[".dc.s"] = DK_DC_S;
+  DirectiveKindMap[".dc.w"] = DK_DC_W;
+  DirectiveKindMap[".dc.x"] = DK_DC_X;
 }
 
 MCAsmMacro *AsmParser::parseMacroLikeBody(SMLoc DirectiveLoc) {

Added: llvm/trunk/test/MC/AsmParser/directive_dc.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AsmParser/directive_dc.s?rev=279577&view=auto
==============================================================================
--- llvm/trunk/test/MC/AsmParser/directive_dc.s (added)
+++ llvm/trunk/test/MC/AsmParser/directive_dc.s Tue Aug 23 16:34:53 2016
@@ -0,0 +1,41 @@
+# RUN: not llvm-mc -triple i386-unknown-unknown %s | FileCheck %s
+# RUN: not llvm-mc -triple i386-unknown-unknown %s 2>&1 > /dev/null| FileCheck %s --check-prefix=CHECK-ERROR
+
+# CHECK: TEST0:
+# CHECK: .byte 0
+TEST0:
+        .dc.b 0
+
+# CHECK: TEST1:
+# CHECK: .short 3
+TEST1:
+        .dc 3
+
+# CHECK: TEST2:
+# CHECK: .short 3
+TEST2:
+        .dc.w 3
+
+# CHECK: TEST3:
+# CHECK: .long 8
+TEST3:
+        .dc.l 8
+
+# CHECK: TEST4:
+# CHECK: .long 8
+TEST4:
+        .dc.a 8
+
+# CHECK: TEST5
+# CHECK: .long	1067412619
+TEST5:
+        .dc.s 1.2455
+
+# CHECK: TEST6
+# CHECK: .quad	4597526701198935065
+TEST6:
+        .dc.d .232
+
+# CHECK-ERROR: error: .dc.x not currently supported for this target
+TEST7:
+        .dc.x 1.2e3




More information about the llvm-commits mailing list