forked from OSchip/llvm-project
IAS: support .rep as an alias for .rept
The GNU assembler supports .rep as an alias for .rept. This simply creates the alias for it and introduces a test for both .rept and .rep. llvm-svn: 198097
This commit is contained in:
parent
9914a02114
commit
d743d0ab8c
|
@ -453,7 +453,7 @@ private:
|
|||
MCAsmMacro *parseMacroLikeBody(SMLoc DirectiveLoc);
|
||||
void instantiateMacroLikeBody(MCAsmMacro *M, SMLoc DirectiveLoc,
|
||||
raw_svector_ostream &OS);
|
||||
bool parseDirectiveRept(SMLoc DirectiveLoc); // ".rept"
|
||||
bool parseDirectiveRept(SMLoc DirectiveLoc, StringRef Directive);
|
||||
bool parseDirectiveIrp(SMLoc DirectiveLoc); // ".irp"
|
||||
bool parseDirectiveIrpc(SMLoc DirectiveLoc); // ".irpc"
|
||||
bool parseDirectiveEndr(SMLoc DirectiveLoc); // ".endr"
|
||||
|
@ -1438,7 +1438,7 @@ bool AsmParser::parseStatement(ParseStatementInfo &Info) {
|
|||
case DK_CODE16GCC:
|
||||
return TokError(Twine(IDVal) + " not supported yet");
|
||||
case DK_REPT:
|
||||
return parseDirectiveRept(IDLoc);
|
||||
return parseDirectiveRept(IDLoc, IDVal);
|
||||
case DK_IRP:
|
||||
return parseDirectiveIrp(IDLoc);
|
||||
case DK_IRPC:
|
||||
|
@ -3836,6 +3836,7 @@ void AsmParser::initializeDirectiveKindMap() {
|
|||
DirectiveKindMap[".code16"] = DK_CODE16;
|
||||
DirectiveKindMap[".code16gcc"] = DK_CODE16GCC;
|
||||
DirectiveKindMap[".rept"] = DK_REPT;
|
||||
DirectiveKindMap[".rep"] = DK_REPT;
|
||||
DirectiveKindMap[".irp"] = DK_IRP;
|
||||
DirectiveKindMap[".irpc"] = DK_IRPC;
|
||||
DirectiveKindMap[".endr"] = DK_ENDR;
|
||||
|
@ -3954,16 +3955,18 @@ void AsmParser::instantiateMacroLikeBody(MCAsmMacro *M, SMLoc DirectiveLoc,
|
|||
Lex();
|
||||
}
|
||||
|
||||
bool AsmParser::parseDirectiveRept(SMLoc DirectiveLoc) {
|
||||
/// parseDirectiveRept
|
||||
/// ::= .rep | .rept count
|
||||
bool AsmParser::parseDirectiveRept(SMLoc DirectiveLoc, StringRef Dir) {
|
||||
int64_t Count;
|
||||
if (parseAbsoluteExpression(Count))
|
||||
return TokError("unexpected token in '.rept' directive");
|
||||
return TokError("unexpected token in '" + Dir + "' directive");
|
||||
|
||||
if (Count < 0)
|
||||
return TokError("Count is negative");
|
||||
|
||||
if (Lexer.isNot(AsmToken::EndOfStatement))
|
||||
return TokError("unexpected token in '.rept' directive");
|
||||
return TokError("unexpected token in '" + Dir + "' directive");
|
||||
|
||||
// Eat the end of statement.
|
||||
Lex();
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
# RUN: llvm-mc -triple i686-elf -filetype asm -o - %s | FileCheck %s
|
||||
|
||||
.data
|
||||
|
||||
.global two_bad_calls
|
||||
.type two_bad_calls,@function
|
||||
two_bad_calls:
|
||||
.rept 2
|
||||
.long 0xbadca11
|
||||
.endr
|
||||
|
||||
# CHECK-LABEL: two_bad_calls
|
||||
# CHECK: .long 195938833
|
||||
# CHECK: .long 195938833
|
||||
|
||||
.global half_a_dozen_daffodils
|
||||
.type half_a_dozen_daffodils,@function
|
||||
half_a_dozen_daffodils:
|
||||
.rep 6
|
||||
.long 0xdaff0d11
|
||||
.endr
|
||||
|
||||
# CHECK-LABEL: half_a_dozen_daffodils
|
||||
# CHECK: .long 3674148113
|
||||
# CHECK: .long 3674148113
|
||||
# CHECK: .long 3674148113
|
||||
# CHECK: .long 3674148113
|
||||
# CHECK: .long 3674148113
|
||||
# CHECK: .long 3674148113
|
||||
|
Loading…
Reference in New Issue