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:
Saleem Abdulrasool 2013-12-28 05:54:33 +00:00
parent 9914a02114
commit d743d0ab8c
2 changed files with 38 additions and 5 deletions

View File

@ -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();

View File

@ -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