ARM LDM/STM system instruction variants.
[oota-llvm.git] / lib / Target / ARM / AsmParser / ARMAsmParser.cpp
index 643ba71ac5cbcd61cc764a33a82457577e84fdf1..745fa897725359a5e81a2bc72a8425e88bc7fdbe 100644 (file)
@@ -2666,7 +2666,15 @@ parseRegisterList(SmallVectorImpl<MCParsedAsmOperand*> &Operands) {
     return Error(E, "'}' expected");
   Parser.Lex(); // Eat '}' token.
 
+  // Push the register list operand.
   Operands.push_back(ARMOperand::CreateRegList(Registers, S, E));
+
+  // The ARM system instruction variants for LDM/STM have a '^' token here.
+  if (Parser.getTok().is(AsmToken::Caret)) {
+    Operands.push_back(ARMOperand::CreateToken("^",Parser.getTok().getLoc()));
+    Parser.Lex(); // Eat '^' token.
+  }
+
   return false;
 }