summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/MC/MCParser/AsmParser.cpp26
-rw-r--r--llvm/test/MC/AsmParser/directive_dc.s41
2 files changed, 67 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index 46696609961..83c845274d8 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -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(ParseStatementInfo &Info,
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::initializeDirectiveKindMap() {
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) {
diff --git a/llvm/test/MC/AsmParser/directive_dc.s b/llvm/test/MC/AsmParser/directive_dc.s
new file mode 100644
index 00000000000..5c6c9aa9529
--- /dev/null
+++ b/llvm/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
OpenPOWER on IntegriCloud