implement parser support for '*' operands, as in "call *%eax".
authorChris Lattner <sabre@nondot.org>
Mon, 22 Jun 2009 06:02:13 +0000 (06:02 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 22 Jun 2009 06:02:13 +0000 (06:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73876 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-mc/AsmParser.cpp

index fc226a5c9a79244f4d18c4167fe878af6bc5d741..c9583549bdf26067c71adfeeb096c022eeae6b24 100644 (file)
@@ -108,7 +108,7 @@ bool AsmParser::ParseX86Operand(X86Operand &Op) {
     // FIXME: Decode reg #.
     // FIXME: if a segment register, this could either be just the seg reg, or
     // the start of a memory operand.
-    Op = X86Operand::CreateReg(0);
+    Op = X86Operand::CreateReg(123);
     Lexer.Lex(); // Eat register.
     return false;
   case asmtok::Dollar: {
@@ -119,12 +119,19 @@ bool AsmParser::ParseX86Operand(X86Operand &Op) {
       return TokError("expected integer constant");
     Op = X86Operand::CreateReg(Val);
     return false;
+  case asmtok::Star:
+    Lexer.Lex(); // Eat the star.
+    
+    if (Lexer.is(asmtok::Register)) {
+      Op = X86Operand::CreateReg(123);
+      Lexer.Lex(); // Eat register.
+    } else if (ParseX86MemOperand(Op))
+      return true;
+
+    // FIXME: Note that these are 'dereferenced' so that clients know the '*' is
+    // there.
+    return false;
   }
-      
-  //case asmtok::Star:
-  // * %eax
-  // * <memaddress>
-  // Note that these are both "dereferenced".
   }
 }