[llvm-commits] [llvm] r83477 - /llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp

Kevin Enderby enderby at apple.com
Wed Oct 7 11:01:35 PDT 2009


Author: enderby
Date: Wed Oct  7 13:01:35 2009
New Revision: 83477

URL: http://llvm.org/viewvc/llvm-project?rev=83477&view=rev
Log:
Add another bit of the ARM target assembler to llvm-mc to parse registers
with writeback, things like "sp!", etc.  Also added some more stuff to the
temporarily hacked methods ARMAsmParser::MatchRegisterName and
ARMAsmParser::MatchInstruction to allow more parser testing.

Modified:
    llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp

Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=83477&r1=83476&r2=83477&view=diff

==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Wed Oct  7 13:01:35 2009
@@ -100,6 +100,7 @@
 
     struct {
       unsigned RegNum;
+      bool Writeback;
     } Reg;
 
     // This is for all forms of ARM address expressions
@@ -146,10 +147,11 @@
     return Res;
   }
 
-  static ARMOperand CreateReg(unsigned RegNum) {
+  static ARMOperand CreateReg(unsigned RegNum, bool Writeback) {
     ARMOperand Res;
     Res.Kind = Register;
     Res.Reg.RegNum = RegNum;
+    Res.Reg.Writeback = Writeback;
     return Res;
   }
 
@@ -193,10 +195,17 @@
   RegNum = MatchRegisterName(Tok.getString());
   if (RegNum == 0)
     return true;
-
-  Op = ARMOperand::CreateReg(RegNum);
   getLexer().Lex(); // Eat identifier token.
 
+  bool Writeback = false;
+  const AsmToken &ExclaimTok = getLexer().getTok();
+  if (ExclaimTok.is(AsmToken::Exclaim)) {
+    Writeback = true;
+    getLexer().Lex(); // Eat exclaim token
+  }
+
+  Op = ARMOperand::CreateReg(RegNum, Writeback);
+
   return false;
 }
 
@@ -396,6 +405,8 @@
     return 2;
   else if (Name == "r3")
     return 3;
+  else if (Name == "sp")
+    return 13;
   return 0;
 }
 
@@ -406,6 +417,9 @@
   assert(Op0.Kind == ARMOperand::Token && "First operand not a Token");
   const StringRef &Mnemonic = Op0.getToken();
   if (Mnemonic == "add" ||
+      Mnemonic == "stmfd" ||
+      Mnemonic == "str" ||
+      Mnemonic == "ldmfd" ||
       Mnemonic == "ldr")
     return false;
 





More information about the llvm-commits mailing list