MatchRegisterName() returns 0 if it can't match the register.
[oota-llvm.git] / lib / Target / ARM / AsmParser / ARMAsmParser.cpp
index 2ebea1ac2b4cd6b6ec394c30b7b0fae2d5eaef55..b41b71d4b0a842d9299b24207aa5af7973771fe0 100644 (file)
@@ -387,8 +387,8 @@ int ARMAsmParser::TryParseRegister() {
 
   // FIXME: Validate register for the current architecture; we have to do
   // validation later, so maybe there is no need for this here.
-  int RegNum = MatchRegisterName(Tok.getString());
-  if (RegNum == -1)
+  unsigned RegNum = MatchRegisterName(Tok.getString());
+  if (RegNum == 0)
     return -1;
   Parser.Lex(); // Eat identifier token.
   return RegNum;
@@ -434,13 +434,12 @@ ARMOperand *ARMAsmParser::ParseRegisterList() {
     Error(RegLoc, "register expected");
     return 0;
   }
-  int RegNum = MatchRegisterName(RegTok.getString());
+  int RegNum = TryParseRegister();
   if (RegNum == -1) {
     Error(RegLoc, "register expected");
     return 0;
   }
 
-  Parser.Lex(); // Eat identifier token.
   unsigned RegList = 1 << RegNum;
 
   int HighRegNum = RegNum;
@@ -454,7 +453,7 @@ ARMOperand *ARMAsmParser::ParseRegisterList() {
       Error(RegLoc, "register expected");
       return 0;
     }
-    int RegNum = MatchRegisterName(RegTok.getString());
+    int RegNum = TryParseRegister();
     if (RegNum == -1) {
       Error(RegLoc, "register expected");
       return 0;
@@ -466,8 +465,6 @@ ARMOperand *ARMAsmParser::ParseRegisterList() {
       Warning(RegLoc, "register not in ascending order in register list");
     RegList |= 1 << RegNum;
     HighRegNum = RegNum;
-
-    Parser.Lex(); // Eat identifier token.
   }
   const AsmToken &RCurlyTok = Parser.getTok();
   if (RCurlyTok.isNot(AsmToken::RCurly)) {
@@ -958,8 +955,11 @@ bool ARMAsmParser::ParseDirectiveCode(SMLoc L) {
     return Error(Parser.getTok().getLoc(), "unexpected token in directive");
   Parser.Lex();
 
-  // TODO tell the MC streamer the mode
-  // getParser().getStreamer().Emit???();
+  if (Val == 16)
+    getParser().getStreamer().EmitAssemblerFlag(MCAF_Code16);
+  else
+    getParser().getStreamer().EmitAssemblerFlag(MCAF_Code32);
+
   return false;
 }