mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-11 00:39:36 +00:00
Define instructions for cmovo and cmovno.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61836 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
653456c351
commit
305fceb56c
@ -1004,6 +1004,16 @@ def CMOVNP64rr : RI<0x4B, MRMSrcReg, // if !parity, GR64 = GR64
|
||||
"cmovnp\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR64:$dst, (X86cmov GR64:$src1, GR64:$src2,
|
||||
X86_COND_NP, EFLAGS))]>, TB;
|
||||
def CMOVO64rr : RI<0x40, MRMSrcReg, // if overflow, GR64 = GR64
|
||||
(outs GR64:$dst), (ins GR64:$src1, GR64:$src2),
|
||||
"cmovo\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR64:$dst, (X86cmov GR64:$src1, GR64:$src2,
|
||||
X86_COND_O, EFLAGS))]>, TB;
|
||||
def CMOVNO64rr : RI<0x41, MRMSrcReg, // if !overflow, GR64 = GR64
|
||||
(outs GR64:$dst), (ins GR64:$src1, GR64:$src2),
|
||||
"cmovno\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR64:$dst, (X86cmov GR64:$src1, GR64:$src2,
|
||||
X86_COND_NO, EFLAGS))]>, TB;
|
||||
} // isCommutable = 1
|
||||
|
||||
def CMOVB64rm : RI<0x42, MRMSrcMem, // if <u, GR64 = [mem64]
|
||||
@ -1076,6 +1086,16 @@ def CMOVNP64rm : RI<0x4B, MRMSrcMem, // if !parity, GR64 = [mem64]
|
||||
"cmovnp\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR64:$dst, (X86cmov GR64:$src1, (loadi64 addr:$src2),
|
||||
X86_COND_NP, EFLAGS))]>, TB;
|
||||
def CMOVO64rm : RI<0x40, MRMSrcMem, // if overflow, GR64 = [mem64]
|
||||
(outs GR64:$dst), (ins GR64:$src1, i64mem:$src2),
|
||||
"cmovo\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR64:$dst, (X86cmov GR64:$src1, (loadi64 addr:$src2),
|
||||
X86_COND_O, EFLAGS))]>, TB;
|
||||
def CMOVNO64rm : RI<0x41, MRMSrcMem, // if !overflow, GR64 = [mem64]
|
||||
(outs GR64:$dst), (ins GR64:$src1, i64mem:$src2),
|
||||
"cmovno\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR64:$dst, (X86cmov GR64:$src1, (loadi64 addr:$src2),
|
||||
X86_COND_NO, EFLAGS))]>, TB;
|
||||
} // isTwoAddress
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -499,6 +499,9 @@ X86InstrInfo::X86InstrInfo(X86TargetMachine &tm)
|
||||
{ X86::CMOVNS16rr, X86::CMOVNS16rm },
|
||||
{ X86::CMOVNS32rr, X86::CMOVNS32rm },
|
||||
{ X86::CMOVNS64rr, X86::CMOVNS64rm },
|
||||
{ X86::CMOVO16rr, X86::CMOVO16rm },
|
||||
{ X86::CMOVO32rr, X86::CMOVO32rm },
|
||||
{ X86::CMOVO64rr, X86::CMOVO64rm },
|
||||
{ X86::CMOVP16rr, X86::CMOVP16rm },
|
||||
{ X86::CMOVP32rr, X86::CMOVP32rm },
|
||||
{ X86::CMOVP64rr, X86::CMOVP64rm },
|
||||
@ -1308,7 +1311,13 @@ X86InstrInfo::commuteInstruction(MachineInstr *MI, bool NewMI) const {
|
||||
case X86::CMOVP64rr:
|
||||
case X86::CMOVNP16rr:
|
||||
case X86::CMOVNP32rr:
|
||||
case X86::CMOVNP64rr: {
|
||||
case X86::CMOVNP64rr:
|
||||
case X86::CMOVO16rr:
|
||||
case X86::CMOVO32rr:
|
||||
case X86::CMOVO64rr:
|
||||
case X86::CMOVNO16rr:
|
||||
case X86::CMOVNO32rr:
|
||||
case X86::CMOVNO64rr: {
|
||||
unsigned Opc = 0;
|
||||
switch (MI->getOpcode()) {
|
||||
default: break;
|
||||
@ -1354,6 +1363,12 @@ X86InstrInfo::commuteInstruction(MachineInstr *MI, bool NewMI) const {
|
||||
case X86::CMOVNP16rr: Opc = X86::CMOVP16rr; break;
|
||||
case X86::CMOVNP32rr: Opc = X86::CMOVP32rr; break;
|
||||
case X86::CMOVNP64rr: Opc = X86::CMOVP64rr; break;
|
||||
case X86::CMOVO16rr: Opc = X86::CMOVNO16rr; break;
|
||||
case X86::CMOVO32rr: Opc = X86::CMOVNO32rr; break;
|
||||
case X86::CMOVO64rr: Opc = X86::CMOVNO32rr; break;
|
||||
case X86::CMOVNO16rr: Opc = X86::CMOVO16rr; break;
|
||||
case X86::CMOVNO32rr: Opc = X86::CMOVO32rr; break;
|
||||
case X86::CMOVNO64rr: Opc = X86::CMOVO64rr; break;
|
||||
}
|
||||
if (NewMI) {
|
||||
MachineFunction &MF = *MI->getParent()->getParent();
|
||||
|
@ -838,7 +838,6 @@ def CMOVB32rr : I<0x42, MRMSrcReg, // if <u, GR32 = GR32
|
||||
[(set GR32:$dst, (X86cmov GR32:$src1, GR32:$src2,
|
||||
X86_COND_B, EFLAGS))]>,
|
||||
TB;
|
||||
|
||||
def CMOVAE16rr: I<0x43, MRMSrcReg, // if >=u, GR16 = GR16
|
||||
(outs GR16:$dst), (ins GR16:$src1, GR16:$src2),
|
||||
"cmovae\t{$src2, $dst|$dst, $src2}",
|
||||
@ -995,14 +994,31 @@ def CMOVNP32rr : I<0x4B, MRMSrcReg, // if !parity, GR32 = GR32
|
||||
[(set GR32:$dst, (X86cmov GR32:$src1, GR32:$src2,
|
||||
X86_COND_NP, EFLAGS))]>,
|
||||
TB;
|
||||
} // isCommutable = 1
|
||||
|
||||
def CMOVNP32rm : I<0x4B, MRMSrcMem, // if !parity, GR32 = [mem32]
|
||||
(outs GR32:$dst), (ins GR32:$src1, i32mem:$src2),
|
||||
"cmovnp\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR32:$dst, (X86cmov GR32:$src1, (loadi32 addr:$src2),
|
||||
X86_COND_NP, EFLAGS))]>,
|
||||
def CMOVO16rr : I<0x40, MRMSrcReg, // if overflow, GR16 = GR16
|
||||
(outs GR16:$dst), (ins GR16:$src1, GR16:$src2),
|
||||
"cmovo\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR16:$dst, (X86cmov GR16:$src1, GR16:$src2,
|
||||
X86_COND_O, EFLAGS))]>,
|
||||
TB, OpSize;
|
||||
def CMOVO32rr : I<0x40, MRMSrcReg, // if overflow, GR32 = GR32
|
||||
(outs GR32:$dst), (ins GR32:$src1, GR32:$src2),
|
||||
"cmovo\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR32:$dst, (X86cmov GR32:$src1, GR32:$src2,
|
||||
X86_COND_O, EFLAGS))]>,
|
||||
TB;
|
||||
def CMOVNO16rr : I<0x41, MRMSrcReg, // if !overflow, GR16 = GR16
|
||||
(outs GR16:$dst), (ins GR16:$src1, GR16:$src2),
|
||||
"cmovno\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR16:$dst, (X86cmov GR16:$src1, GR16:$src2,
|
||||
X86_COND_NO, EFLAGS))]>,
|
||||
TB, OpSize;
|
||||
def CMOVNO32rr : I<0x41, MRMSrcReg, // if !overflow, GR32 = GR32
|
||||
(outs GR32:$dst), (ins GR32:$src1, GR32:$src2),
|
||||
"cmovno\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR32:$dst, (X86cmov GR32:$src1, GR32:$src2,
|
||||
X86_COND_NO, EFLAGS))]>,
|
||||
TB;
|
||||
} // isCommutable = 1
|
||||
|
||||
def CMOVB16rm : I<0x42, MRMSrcMem, // if <u, GR16 = [mem16]
|
||||
(outs GR16:$dst), (ins GR16:$src1, i16mem:$src2),
|
||||
@ -1166,6 +1182,36 @@ def CMOVNP16rm : I<0x4B, MRMSrcMem, // if !parity, GR16 = [mem16]
|
||||
[(set GR16:$dst, (X86cmov GR16:$src1, (loadi16 addr:$src2),
|
||||
X86_COND_NP, EFLAGS))]>,
|
||||
TB, OpSize;
|
||||
def CMOVNP32rm : I<0x4B, MRMSrcMem, // if !parity, GR32 = [mem32]
|
||||
(outs GR32:$dst), (ins GR32:$src1, i32mem:$src2),
|
||||
"cmovnp\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR32:$dst, (X86cmov GR32:$src1, (loadi32 addr:$src2),
|
||||
X86_COND_NP, EFLAGS))]>,
|
||||
TB;
|
||||
def CMOVO16rm : I<0x40, MRMSrcMem, // if overflow, GR16 = [mem16]
|
||||
(outs GR16:$dst), (ins GR16:$src1, i16mem:$src2),
|
||||
"cmovo\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR16:$dst, (X86cmov GR16:$src1, (loadi16 addr:$src2),
|
||||
X86_COND_O, EFLAGS))]>,
|
||||
TB, OpSize;
|
||||
def CMOVO32rm : I<0x40, MRMSrcMem, // if overflow, GR32 = [mem32]
|
||||
(outs GR32:$dst), (ins GR32:$src1, i32mem:$src2),
|
||||
"cmovo\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR32:$dst, (X86cmov GR32:$src1, (loadi32 addr:$src2),
|
||||
X86_COND_O, EFLAGS))]>,
|
||||
TB;
|
||||
def CMOVNO16rm : I<0x41, MRMSrcMem, // if !overflow, GR16 = [mem16]
|
||||
(outs GR16:$dst), (ins GR16:$src1, i16mem:$src2),
|
||||
"cmovno\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR16:$dst, (X86cmov GR16:$src1, (loadi16 addr:$src2),
|
||||
X86_COND_NO, EFLAGS))]>,
|
||||
TB, OpSize;
|
||||
def CMOVNO32rm : I<0x41, MRMSrcMem, // if !overflow, GR32 = [mem32]
|
||||
(outs GR32:$dst), (ins GR32:$src1, i32mem:$src2),
|
||||
"cmovno\t{$src2, $dst|$dst, $src2}",
|
||||
[(set GR32:$dst, (X86cmov GR32:$src1, (loadi32 addr:$src2),
|
||||
X86_COND_NO, EFLAGS))]>,
|
||||
TB;
|
||||
} // Uses = [EFLAGS]
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user