mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 15:17:25 +00:00
Reapply r179115, but use parsePrimaryExpression a little more judiciously.
Test cases that regressed due to r179115, plus a few more, were added in r179182. Original commit message below: [ms-inline asm] Use parsePrimaryExpr in lieu of parseExpression if we need to parse an identifier. Otherwise, parseExpression may parse multiple tokens, which makes it impossible to properly compute an immediate displacement. An example of such a case is the source operand (i.e., [Symbol + ImmDisp]) in the below example: __asm mov eax, [Symbol + ImmDisp] Part of rdar://13611297 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179187 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1182,7 +1182,7 @@ X86Operand *X86AsmParser::ParseIntelBracExpression(unsigned SegReg,
|
||||
SM.onRegister(TmpReg);
|
||||
UpdateLocLex = false;
|
||||
break;
|
||||
} else if (!getParser().parseExpression(Disp, End)) {
|
||||
} else if (!getParser().parsePrimaryExpr(Disp, End)) {
|
||||
SM.onDispExpr();
|
||||
UpdateLocLex = false;
|
||||
break;
|
||||
@@ -1401,7 +1401,7 @@ X86Operand *X86AsmParser::ParseIntelOffsetOfOperator() {
|
||||
|
||||
const MCExpr *Val;
|
||||
SMLoc Start = Tok.getLoc(), End;
|
||||
if (getParser().parseExpression(Val, End))
|
||||
if (getParser().parsePrimaryExpr(Val, End))
|
||||
return ErrorOperand(Start, "Unable to parse expression!");
|
||||
|
||||
// Don't emit the offset operator.
|
||||
@@ -1437,7 +1437,7 @@ X86Operand *X86AsmParser::ParseIntelOperator(unsigned OpKind) {
|
||||
|
||||
const MCExpr *Val;
|
||||
SMLoc Start = Tok.getLoc(), End;
|
||||
if (getParser().parseExpression(Val, End))
|
||||
if (getParser().parsePrimaryExpr(Val, End))
|
||||
return 0;
|
||||
|
||||
unsigned Length = 0, Size = 0, Type = 0;
|
||||
|
||||
Reference in New Issue
Block a user