[ms-inline asm] When parsing inline assembly we set the base register to a
authorChad Rosier <mcrosier@apple.com>
Tue, 23 Oct 2012 23:31:33 +0000 (23:31 +0000)
committerChad Rosier <mcrosier@apple.com>
Tue, 23 Oct 2012 23:31:33 +0000 (23:31 +0000)
non-zero value as we don't know the actual value at this point.  This is
necessary to get the matching correct in some cases.  However, the actual value
set as the base register doesn't matter, since we're just matching not emitting.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166523 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/AsmParser/X86AsmParser.cpp

index ab3bdfa03a5c6f5721b9747d942b163c5f53385d..31a96721f1f9f311d7d0a0c4816e637037c73161 100644 (file)
@@ -808,8 +808,15 @@ X86Operand *X86AsmParser::ParseIntelMemOperand(unsigned SegReg, SMLoc Start) {
       NeedSizeDir = Size > 0;
     }
   }
-  return X86Operand::CreateMem(Disp, Start, End, OffsetOfLoc, Size, OffsetOf,
-                               NeedSizeDir);
+  if (!isParsingInlineAsm())
+    return X86Operand::CreateMem(Disp, Start, End, OffsetOfLoc, Size);
+  else
+    // When parsing inline assembly we set the basereg to a non-zero value as we
+    // don't know the actualy value at this time.  This is necessary to get the
+    // matching correct in some cases.
+    return X86Operand::CreateMem(/*SegReg*/0, Disp, /*BaseReg*/1, /*IndexReg*/0,
+                                 /*Scale*/1, Start, End, OffsetOfLoc, Size,
+                                 OffsetOf, NeedSizeDir);
 }
 
 X86Operand *X86AsmParser::ParseIntelOperand() {