Intel syntax: Robustify parsing of memory operand's displacement experssion.
authorDevang Patel <dpatel@apple.com>
Mon, 23 Jan 2012 22:35:25 +0000 (22:35 +0000)
committerDevang Patel <dpatel@apple.com>
Mon, 23 Jan 2012 22:35:25 +0000 (22:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148737 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/AsmParser/X86AsmParser.cpp
test/MC/X86/intel-syntax.s

index 29e26eddc8691bfd373bb7dd16200ee24b700999..d0d3328720da46519be50c371324458a24d3f29f 100644 (file)
@@ -655,8 +655,13 @@ X86Operand *X86AsmParser::ParseIntelBracExpression(unsigned SegReg,
         Disp = isPlus ? ValExpr : MCConstantExpr::Create(0-Val, getContext());
       } else
         return ErrorOperand(PlusLoc, "unexpected token after +");
-    } else if (getLexer().is(AsmToken::Identifier))
-      ParseRegister(IndexReg, Start, End);
+    } else if (getLexer().is(AsmToken::Identifier)) {
+      // This could be an index registor or a displacement expression.
+      End = Parser.getTok().getLoc();
+      if (!IndexReg)
+        ParseRegister(IndexReg, Start, End);
+      else if (getParser().ParseExpression(Disp, End)) return 0;        
+    }
   }
 
   if (getLexer().isNot(AsmToken::RBrac))
index a06907085771dedd79ff2811710bea5e13bb79d9..2c69280711ea659352c729a28975ec5515533e48 100644 (file)
@@ -56,7 +56,9 @@ _main:
 // CHECK:      fld     %st(0)
        fld     ST(0)
 // CHECK:      movl    %fs:(%rdi), %eax
-mov     EAX, DWORD PTR FS:[RDI]
+        mov     EAX, DWORD PTR FS:[RDI]
 // CHECK:      leal    (,%rdi,4), %r8d
-lea     R8D, DWORD PTR [4*RDI]        
+        lea     R8D, DWORD PTR [4*RDI]
+// CHECK:        movl    _fnan(,%ecx,4), %ecx
+        mov     ECX, DWORD PTR [4*ECX + _fnan]
        ret