[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