[PATCH] D23810: [MC] Support .dc directives in assembler parser
Petr Hosek via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 23 11:35:16 PDT 2016
phosek created this revision.
phosek added a subscriber: llvm-commits.
phosek set the repository for this revision to rL LLVM.
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.
Repository:
rL LLVM
https://reviews.llvm.org/D23810
Files:
lib/MC/MCParser/AsmParser.cpp
test/MC/AsmParser/directive_dc.s
Index: test/MC/AsmParser/directive_dc.s
===================================================================
--- /dev/null
+++ test/MC/AsmParser/directive_dc.s
@@ -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
Index: lib/MC/MCParser/AsmParser.cpp
===================================================================
--- lib/MC/MCParser/AsmParser.cpp
+++ lib/MC/MCParser/AsmParser.cpp
@@ -405,6 +405,7 @@
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,
@@ -1886,6 +1887,23 @@
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");
@@ -4742,6 +4760,14 @@
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) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23810.69019.patch
Type: text/x-patch
Size: 2920 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160823/323bcb66/attachment.bin>
More information about the llvm-commits
mailing list