mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-12 14:41:05 +00:00
[AsmParser] Support GAS's .print directive
Differential Revision: https://reviews.llvm.org/D38448 llvm-svn: 314674
This commit is contained in:
parent
8182f649b2
commit
a794bbd4af
@ -538,6 +538,7 @@ private:
|
||||
DK_ERR,
|
||||
DK_ERROR,
|
||||
DK_WARNING,
|
||||
DK_PRINT,
|
||||
DK_END
|
||||
};
|
||||
|
||||
@ -682,6 +683,9 @@ private:
|
||||
// ".warning"
|
||||
bool parseDirectiveWarning(SMLoc DirectiveLoc);
|
||||
|
||||
// .print <double-quotes-string>
|
||||
bool parseDirectivePrint(SMLoc DirectiveLoc);
|
||||
|
||||
void initializeDirectiveKindMap();
|
||||
};
|
||||
|
||||
@ -2130,6 +2134,8 @@ bool AsmParser::parseStatement(ParseStatementInfo &Info,
|
||||
case DK_DS_P:
|
||||
case DK_DS_X:
|
||||
return parseDirectiveDS(IDVal, 12);
|
||||
case DK_PRINT:
|
||||
return parseDirectivePrint(IDLoc);
|
||||
}
|
||||
|
||||
return Error(IDLoc, "unknown directive");
|
||||
@ -5228,6 +5234,7 @@ void AsmParser::initializeDirectiveKindMap() {
|
||||
DirectiveKindMap[".ds.s"] = DK_DS_S;
|
||||
DirectiveKindMap[".ds.w"] = DK_DS_W;
|
||||
DirectiveKindMap[".ds.x"] = DK_DS_X;
|
||||
DirectiveKindMap[".print"] = DK_PRINT;
|
||||
}
|
||||
|
||||
MCAsmMacro *AsmParser::parseMacroLikeBody(SMLoc DirectiveLoc) {
|
||||
@ -5456,6 +5463,17 @@ bool AsmParser::parseDirectiveMSAlign(SMLoc IDLoc, ParseStatementInfo &Info) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool AsmParser::parseDirectivePrint(SMLoc DirectiveLoc) {
|
||||
const AsmToken StrTok = getTok();
|
||||
Lex();
|
||||
if (StrTok.isNot(AsmToken::String) || StrTok.getString().front() != '"')
|
||||
return Error(DirectiveLoc, "expected double quoted string after .print");
|
||||
if (parseToken(AsmToken::EndOfStatement, "expected end of statement"))
|
||||
return true;
|
||||
llvm::outs() << StrTok.getStringContents() << '\n';
|
||||
return false;
|
||||
}
|
||||
|
||||
// We are comparing pointers, but the pointers are relative to a single string.
|
||||
// Thus, this should always be deterministic.
|
||||
static int rewritesSort(const AsmRewrite *AsmRewriteA,
|
||||
|
18
test/MC/AsmParser/directive_print.s
Normal file
18
test/MC/AsmParser/directive_print.s
Normal file
@ -0,0 +1,18 @@
|
||||
# RUN: not llvm-mc -triple i386-linux-gnu %s 2> %t.err | FileCheck %s
|
||||
# RUN: FileCheck < %t.err %s --check-prefix=CHECK-ERR
|
||||
|
||||
T1:
|
||||
# CHECK: e
|
||||
# CHECK: 2.718281828459045235
|
||||
.print "e"
|
||||
.print "2.718281828459045235"
|
||||
|
||||
T2:
|
||||
# CHECK-ERR: expected double quoted string after .print
|
||||
.altmacro
|
||||
.print <pi>
|
||||
.noaltmacro
|
||||
|
||||
T3:
|
||||
# CHECK-ERR: expected end of statement
|
||||
.print "a" "misplaced-string"
|
Loading…
x
Reference in New Issue
Block a user