[llvm-commits] [llvm] r74218 - in /llvm/trunk: test/MC/AsmParser/directive_org.s tools/llvm-mc/AsmParser.cpp tools/llvm-mc/AsmParser.h
Daniel Dunbar
daniel at zuster.org
Thu Jun 25 15:44:52 PDT 2009
Author: ddunbar
Date: Thu Jun 25 17:44:51 2009
New Revision: 74218
URL: http://llvm.org/viewvc/llvm-project?rev=74218&view=rev
Log:
MC: Parse .org directives.
Added:
llvm/trunk/test/MC/AsmParser/directive_org.s
Modified:
llvm/trunk/tools/llvm-mc/AsmParser.cpp
llvm/trunk/tools/llvm-mc/AsmParser.h
Added: llvm/trunk/test/MC/AsmParser/directive_org.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AsmParser/directive_org.s?rev=74218&view=auto
==============================================================================
--- llvm/trunk/test/MC/AsmParser/directive_org.s (added)
+++ llvm/trunk/test/MC/AsmParser/directive_org.s Thu Jun 25 17:44:51 2009
@@ -0,0 +1,11 @@
+# RUN: llvm-mc %s > %t
+
+# RUN: grep -A 2 TEST0 %t > %t2
+# RUN: grep ".org 1, 0" %t2 | count 1
+TEST0:
+ .org 1
+
+# RUN: grep -A 2 TEST1 %t > %t2
+# RUN: grep ".org 1, 3" %t2 | count 1
+TEST1:
+ .org 1, 3
Modified: llvm/trunk/tools/llvm-mc/AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mc/AsmParser.cpp?rev=74218&r1=74217&r2=74218&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mc/AsmParser.cpp (original)
+++ llvm/trunk/tools/llvm-mc/AsmParser.cpp Thu Jun 25 17:44:51 2009
@@ -324,6 +324,8 @@
return ParseDirectiveValue(8);
if (!strcmp(IDVal, ".fill"))
return ParseDirectiveFill();
+ if (!strcmp(IDVal, ".org"))
+ return ParseDirectiveOrg();
if (!strcmp(IDVal, ".space"))
return ParseDirectiveSpace();
@@ -332,7 +334,6 @@
return false;
}
-
MCInst Inst;
if (ParseX86InstOperands(Inst))
return true;
@@ -558,3 +559,31 @@
return false;
}
+
+/// ParseDirectiveOrg
+/// ::= .org expression [ , expression ]
+bool AsmParser::ParseDirectiveOrg() {
+ int64_t Offset;
+ if (ParseExpression(Offset))
+ return true;
+
+ // Parse optional fill expression.
+ int64_t FillExpr = 0;
+ if (Lexer.isNot(asmtok::EndOfStatement)) {
+ if (Lexer.isNot(asmtok::Comma))
+ return TokError("unexpected token in '.org' directive");
+ Lexer.Lex();
+
+ if (ParseExpression(FillExpr))
+ return true;
+
+ if (Lexer.isNot(asmtok::EndOfStatement))
+ return TokError("unexpected token in '.org' directive");
+ }
+
+ Lexer.Lex();
+
+ Out.EmitValueToOffset(MCValue::get(Offset), FillExpr);
+
+ return false;
+}
Modified: llvm/trunk/tools/llvm-mc/AsmParser.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mc/AsmParser.h?rev=74218&r1=74217&r2=74218&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-mc/AsmParser.h (original)
+++ llvm/trunk/tools/llvm-mc/AsmParser.h Thu Jun 25 17:44:51 2009
@@ -63,6 +63,7 @@
bool ParseDirectiveFill(); // ".fill"
bool ParseDirectiveSpace(); // ".space"
bool ParseDirectiveSet(); // ".set"
+ bool ParseDirectiveOrg(); // ".org"
};
More information about the llvm-commits
mailing list