mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 21:32:39 +00:00
Fix rdar://8468087 - llvm-mc commutes fmul (and friend) operands.
My previous fix for rdar://8456371 should only apply to fmulp/faddp, not to fmul/fadd. Instruction set orthogonality is overrated or something. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114818 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8048ebe91d
commit
cb296ec0b6
@ -910,11 +910,10 @@ ParseInstruction(StringRef Name, SMLoc NameLoc,
|
||||
delete Operands[2];
|
||||
Operands.erase(Operands.begin() + 2);
|
||||
}
|
||||
|
||||
// FIXME: Hack to handle "f{mul*,add*} st(0), $op" the same as
|
||||
// "f{mul*,add*} $op", since they commute.
|
||||
if ((Name.startswith("fmul") || Name.startswith("fadd")) &&
|
||||
Operands.size() == 3 &&
|
||||
|
||||
// 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 &&
|
||||
static_cast<X86Operand*>(Operands[1])->isReg() &&
|
||||
static_cast<X86Operand*>(Operands[1])->getReg() == X86::ST0) {
|
||||
delete Operands[1];
|
||||
|
@ -360,6 +360,22 @@ mov %rdx, %cr15
|
||||
faddp %st, %st(1)
|
||||
fmulp %st, %st(2)
|
||||
|
||||
// rdar://8468087 - Encode these accurately, they are not synonyms.
|
||||
// CHECK: fmul %st(0), %st(1)
|
||||
// CHECK: encoding: [0xdc,0xc9]
|
||||
// CHECK: fmul %st(1)
|
||||
// CHECK: encoding: [0xd8,0xc9]
|
||||
fmul %st, %st(1)
|
||||
fmul %st(1), %st
|
||||
|
||||
// CHECK: fadd %st(0), %st(1)
|
||||
// CHECK: encoding: [0xdc,0xc1]
|
||||
// CHECK: fadd %st(1)
|
||||
// CHECK: encoding: [0xd8,0xc1]
|
||||
fadd %st, %st(1)
|
||||
fadd %st(1), %st
|
||||
|
||||
|
||||
// rdar://8416805
|
||||
// CHECK: xorb %al, %al
|
||||
// CHECK: encoding: [0x30,0xc0]
|
||||
|
Loading…
x
Reference in New Issue
Block a user