mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-24 22:40:36 +00:00
[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 llvm-svn: 279577
This commit is contained in:
parent
54cea79c7b
commit
46d79cf83a
@ -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) {
|
||||
|
41
test/MC/AsmParser/directive_dc.s
Normal file
41
test/MC/AsmParser/directive_dc.s
Normal file
@ -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
|
Loading…
x
Reference in New Issue
Block a user