implement rdar://8491845 - Gas supports commuted forms of non-commutable instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115061 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2010-09-29 18:39:16 +00:00
parent 69daca59ff
commit a25f933396
2 changed files with 12 additions and 2 deletions

View File

@@ -921,8 +921,10 @@ ParseInstruction(StringRef Name, SMLoc NameLoc,
}
// FIXME: Hack to handle "f{mulp,addp} st(0), $op" the same as
// "f{mulp,addp} $op", since they commute.
if ((Name == "fmulp" || Name == "faddp") && Operands.size() == 3 &&
// "f{mulp,addp} $op", since they commute. We also allow fdivrp/fsubrp even
// though they don't commute, solely because gas does support this.
if ((Name=="fmulp" || Name=="faddp" || Name=="fsubrp" || Name=="fdivrp") &&
Operands.size() == 3 &&
static_cast<X86Operand*>(Operands[1])->isReg() &&
static_cast<X86Operand*>(Operands[1])->getReg() == X86::ST0) {
delete Operands[1];