Index: llvm/trunk/lib/MC/MCParser/AsmParser.cpp =================================================================== --- llvm/trunk/lib/MC/MCParser/AsmParser.cpp +++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp @@ -426,6 +426,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, @@ -1905,6 +1906,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"); @@ -4763,6 +4781,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) { Index: llvm/trunk/test/MC/AsmParser/directive_dc.s =================================================================== --- llvm/trunk/test/MC/AsmParser/directive_dc.s +++ llvm/trunk/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