summaryrefslogtreecommitdiff
path: root/lib/Target/X86/AsmParser/X86AsmParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/X86/AsmParser/X86AsmParser.cpp')
-rw-r--r--lib/Target/X86/AsmParser/X86AsmParser.cpp11
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() {