mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-28 22:24:28 +00:00
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:
@ -921,8 +921,10 @@ ParseInstruction(StringRef Name, SMLoc NameLoc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Hack to handle "f{mulp,addp} st(0), $op" the same as
|
// FIXME: Hack to handle "f{mulp,addp} st(0), $op" the same as
|
||||||
// "f{mulp,addp} $op", since they commute.
|
// "f{mulp,addp} $op", since they commute. We also allow fdivrp/fsubrp even
|
||||||
if ((Name == "fmulp" || Name == "faddp") && Operands.size() == 3 &&
|
// 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])->isReg() &&
|
||||||
static_cast<X86Operand*>(Operands[1])->getReg() == X86::ST0) {
|
static_cast<X86Operand*>(Operands[1])->getReg() == X86::ST0) {
|
||||||
delete Operands[1];
|
delete Operands[1];
|
||||||
|
@ -466,3 +466,11 @@ movmskpd %xmm6, %rax
|
|||||||
movmskpd %xmm6, %eax
|
movmskpd %xmm6, %eax
|
||||||
// CHECK: movmskpd %xmm6, %eax
|
// CHECK: movmskpd %xmm6, %eax
|
||||||
// CHECK: encoding: [0x66,0x0f,0x50,0xc6]
|
// CHECK: encoding: [0x66,0x0f,0x50,0xc6]
|
||||||
|
|
||||||
|
// rdar://8491845 - Gas supports commuted forms of non-commutable instructions.
|
||||||
|
fdivrp %st(0), %st(1) // CHECK: encoding: [0xde,0xf9]
|
||||||
|
fdivrp %st(1), %st(0) // CHECK: encoding: [0xde,0xf9]
|
||||||
|
|
||||||
|
fsubrp %ST(0), %ST(1) // CHECK: encoding: [0xde,0xe9]
|
||||||
|
fsubrp %ST(1), %ST(0) // CHECK: encoding: [0xde,0xe9]
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user