mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 19:42:54 +02:00
Teach the x86 mc assembler that %dr6 = %db6, this implements
rdar://8013734 llvm-svn: 106725
This commit is contained in:
parent
877cc43dbb
commit
606dc0529b
@ -88,6 +88,8 @@ AsmToken X86AsmLexer::LexTokenATT() {
|
|||||||
if (unsigned regID = MatchRegisterName(nextToken.getString())) {
|
if (unsigned regID = MatchRegisterName(nextToken.getString())) {
|
||||||
lexDefinite();
|
lexDefinite();
|
||||||
|
|
||||||
|
// FIXME: This is completely wrong when there is a space or other
|
||||||
|
// punctuation between the % and the register name.
|
||||||
StringRef regStr(lexedToken.getString().data(),
|
StringRef regStr(lexedToken.getString().data(),
|
||||||
lexedToken.getString().size() +
|
lexedToken.getString().size() +
|
||||||
nextToken.getString().size());
|
nextToken.getString().size());
|
||||||
@ -96,6 +98,36 @@ AsmToken X86AsmLexer::LexTokenATT() {
|
|||||||
static_cast<int64_t>(regID));
|
static_cast<int64_t>(regID));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Match register name failed. If this is "db[0-7]", match it as an alias
|
||||||
|
// for dr[0-7].
|
||||||
|
if (nextToken.getString().size() == 3 &&
|
||||||
|
nextToken.getString().startswith("db")) {
|
||||||
|
int RegNo = -1;
|
||||||
|
switch (nextToken.getString()[2]) {
|
||||||
|
case '0': RegNo = X86::DR0; break;
|
||||||
|
case '1': RegNo = X86::DR1; break;
|
||||||
|
case '2': RegNo = X86::DR2; break;
|
||||||
|
case '3': RegNo = X86::DR3; break;
|
||||||
|
case '4': RegNo = X86::DR4; break;
|
||||||
|
case '5': RegNo = X86::DR5; break;
|
||||||
|
case '6': RegNo = X86::DR6; break;
|
||||||
|
case '7': RegNo = X86::DR7; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RegNo != -1) {
|
||||||
|
lexDefinite();
|
||||||
|
|
||||||
|
// FIXME: This is completely wrong when there is a space or other
|
||||||
|
// punctuation between the % and the register name.
|
||||||
|
StringRef regStr(lexedToken.getString().data(),
|
||||||
|
lexedToken.getString().size() +
|
||||||
|
nextToken.getString().size());
|
||||||
|
return AsmToken(AsmToken::Register, regStr,
|
||||||
|
static_cast<int64_t>(RegNo));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return lexedToken;
|
return lexedToken;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -412,6 +412,28 @@ bool X86ATTAsmParser::ParseRegister(unsigned &RegNo,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If this is "db[0-7]", match it as an alias
|
||||||
|
// for dr[0-7].
|
||||||
|
if (RegNo == 0 && Tok.getString().size() == 3 &&
|
||||||
|
Tok.getString().startswith("db")) {
|
||||||
|
switch (Tok.getString()[2]) {
|
||||||
|
case '0': RegNo = X86::DR0; break;
|
||||||
|
case '1': RegNo = X86::DR1; break;
|
||||||
|
case '2': RegNo = X86::DR2; break;
|
||||||
|
case '3': RegNo = X86::DR3; break;
|
||||||
|
case '4': RegNo = X86::DR4; break;
|
||||||
|
case '5': RegNo = X86::DR5; break;
|
||||||
|
case '6': RegNo = X86::DR6; break;
|
||||||
|
case '7': RegNo = X86::DR7; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RegNo != 0) {
|
||||||
|
EndLoc = Tok.getLoc();
|
||||||
|
Parser.Lex(); // Eat it.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (RegNo == 0)
|
if (RegNo == 0)
|
||||||
return Error(Tok.getLoc(), "invalid register name");
|
return Error(Tok.getLoc(), "invalid register name");
|
||||||
|
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
// FIXME: Actually test that we get the expected results.
|
|
||||||
|
|
||||||
// RUN: llvm-mc -triple x86_64-unknown-unknown %s | FileCheck %s
|
// RUN: llvm-mc -triple x86_64-unknown-unknown %s | FileCheck %s
|
||||||
|
|
||||||
# CHECK: callq a
|
# CHECK: callq a
|
||||||
@ -7,3 +5,11 @@
|
|||||||
|
|
||||||
# CHECK: leaq -40(%rbp), %r15
|
# CHECK: leaq -40(%rbp), %r15
|
||||||
leaq -40(%rbp), %r15
|
leaq -40(%rbp), %r15
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// rdar://8013734 - Alias dr6=db6
|
||||||
|
mov %dr6, %rax
|
||||||
|
mov %db6, %rax
|
||||||
|
# CHECK: movq %dr6, %rax
|
||||||
|
# CHECK: movq %dr6, %rax
|
||||||
|
Loading…
Reference in New Issue
Block a user