1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00

Intel syntax: Robustify parsing of memory operand's displacement experssion.

llvm-svn: 148737
This commit is contained in:
Devang Patel 2012-01-23 22:35:25 +00:00
parent 0c22143732
commit 327773a25b
2 changed files with 11 additions and 4 deletions

View 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))

View 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