diff options
Diffstat (limited to 'lib/Target/X86/AsmParser/X86AsmParser.cpp')
-rw-r--r-- | lib/Target/X86/AsmParser/X86AsmParser.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp index ab3bdfa03a..31a96721f1 100644 --- a/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -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() { |