summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2013-12-28 05:54:33 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2013-12-28 05:54:33 +0000
commitd743d0ab8c52c28331473486c929839d0607eb40 (patch)
treef33b855c043c7fbbf9648ec38e224b59877fef9a
parent9914a02114c6008104b4749dbfe52eb4c558d5a1 (diff)
downloadbcm5719-llvm-d743d0ab8c52c28331473486c929839d0607eb40.tar.gz
bcm5719-llvm-d743d0ab8c52c28331473486c929839d0607eb40.zip
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
-rw-r--r--llvm/lib/MC/MCParser/AsmParser.cpp13
-rw-r--r--llvm/test/MC/AsmParser/directive_rept.s30
2 files changed, 38 insertions, 5 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index 5de10a7ba37..b4c5f50a99f 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -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();
diff --git a/llvm/test/MC/AsmParser/directive_rept.s b/llvm/test/MC/AsmParser/directive_rept.s
new file mode 100644
index 00000000000..4f8ed7c0b80
--- /dev/null
+++ b/llvm/test/MC/AsmParser/directive_rept.s
@@ -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
+
OpenPOWER on IntegriCloud