mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-03 08:51:43 +00:00
add support for instruction prefixes on the same line as the instruction,
implementing rdar://8033482 and PR7254. llvm-svn: 113348
This commit is contained in:
parent
0e0f9094e9
commit
05818145f8
@ -758,10 +758,19 @@ ParseInstruction(StringRef Name, SMLoc NameLoc,
|
||||
|
||||
if (ExtraImmOp)
|
||||
Operands.push_back(X86Operand::CreateImm(ExtraImmOp, NameLoc, NameLoc));
|
||||
|
||||
|
||||
// This does the actual operand parsing.
|
||||
if (getLexer().isNot(AsmToken::EndOfStatement)) {
|
||||
|
||||
// Determine whether this is an instruction prefix.
|
||||
bool isPrefix =
|
||||
PatchedName == "lock" || PatchedName == "rep" ||
|
||||
PatchedName == "repne";
|
||||
|
||||
|
||||
// This does the actual operand parsing. Don't parse any more if we have a
|
||||
// prefix juxtaposed with an operation like "lock incl 4(%rax)", because we
|
||||
// just want to parse the "lock" as the first instruction and the "incl" as
|
||||
// the next one.
|
||||
if (getLexer().isNot(AsmToken::EndOfStatement) && !isPrefix) {
|
||||
|
||||
// Parse '*' modifier.
|
||||
if (getLexer().is(AsmToken::Star)) {
|
||||
@ -785,11 +794,13 @@ ParseInstruction(StringRef Name, SMLoc NameLoc,
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
if (getLexer().isNot(AsmToken::EndOfStatement))
|
||||
return TokError("unexpected token in argument list");
|
||||
}
|
||||
|
||||
if (getLexer().isNot(AsmToken::EndOfStatement))
|
||||
return TokError("unexpected token in argument list");
|
||||
Parser.Lex(); // Consume the EndOfStatement
|
||||
if (getLexer().is(AsmToken::EndOfStatement))
|
||||
Parser.Lex(); // Consume the EndOfStatement
|
||||
|
||||
// FIXME: Hack to handle recognizing s{hr,ar,hl}? $1.
|
||||
if ((Name.startswith("shr") || Name.startswith("sar") ||
|
||||
|
@ -173,3 +173,15 @@ xchgl 368(%rax),%ecx
|
||||
// CHECK: xchgl %ecx, 368(%rax)
|
||||
xchgl %ecx, 368(%rax)
|
||||
// CHECK: xchgl %ecx, 368(%rax)
|
||||
|
||||
// PR7254
|
||||
lock incl 1(%rsp)
|
||||
// CHECK: lock
|
||||
// CHECK: incl 1(%rsp)
|
||||
|
||||
// rdar://8033482
|
||||
rep movsl
|
||||
// CHECK: rep
|
||||
// CHECK: encoding: [0xf3]
|
||||
// CHECK: movsl
|
||||
// CHECK: encoding: [0xa5]
|
||||
|
Loading…
Reference in New Issue
Block a user