mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Annotate the rest of X86InstrInfo.td with SchedRW lists.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178048 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
af4c7300b9
commit
cdf7625960
@ -760,7 +760,7 @@ def trunc_su : PatFrag<(ops node:$src), (trunc node:$src), [{
|
||||
//
|
||||
|
||||
// Nop
|
||||
let neverHasSideEffects = 1 in {
|
||||
let neverHasSideEffects = 1, SchedRW = [WriteZero] in {
|
||||
def NOOP : I<0x90, RawFrm, (outs), (ins), "nop", [], IIC_NOP>;
|
||||
def NOOPW : I<0x1f, MRM0m, (outs), (ins i16mem:$zero),
|
||||
"nop{w}\t$zero", [], IIC_NOP>, TB, OpSize;
|
||||
@ -771,8 +771,9 @@ let neverHasSideEffects = 1 in {
|
||||
|
||||
// Constructing a stack frame.
|
||||
def ENTER : Ii16<0xC8, RawFrmImm8, (outs), (ins i16imm:$len, i8imm:$lvl),
|
||||
"enter\t$len, $lvl", [], IIC_ENTER>;
|
||||
"enter\t$len, $lvl", [], IIC_ENTER>, Sched<[WriteMicrocoded]>;
|
||||
|
||||
let SchedRW = [WriteALU] in {
|
||||
let Defs = [EBP, ESP], Uses = [EBP, ESP], mayLoad = 1, neverHasSideEffects=1 in
|
||||
def LEAVE : I<0xC9, RawFrm,
|
||||
(outs), (ins), "leave", [], IIC_LEAVE>,
|
||||
@ -782,6 +783,7 @@ let Defs = [RBP,RSP], Uses = [RBP,RSP], mayLoad = 1, neverHasSideEffects = 1 in
|
||||
def LEAVE64 : I<0xC9, RawFrm,
|
||||
(outs), (ins), "leave", [], IIC_LEAVE>,
|
||||
Requires<[In64BitMode]>;
|
||||
} // SchedRW
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Miscellaneous Instructions.
|
||||
@ -868,10 +870,10 @@ def PUSH64i32 : Ii32<0x68, RawFrm, (outs), (ins i64i32imm:$imm),
|
||||
|
||||
let Defs = [RSP, EFLAGS], Uses = [RSP], mayLoad = 1, neverHasSideEffects=1 in
|
||||
def POPF64 : I<0x9D, RawFrm, (outs), (ins), "popfq", [], IIC_POP_FD>,
|
||||
Requires<[In64BitMode]>;
|
||||
Requires<[In64BitMode]>, Sched<[WriteLoad]>;
|
||||
let Defs = [RSP], Uses = [RSP, EFLAGS], mayStore = 1, neverHasSideEffects=1 in
|
||||
def PUSHF64 : I<0x9C, RawFrm, (outs), (ins), "pushfq", [], IIC_PUSH_F>,
|
||||
Requires<[In64BitMode]>;
|
||||
Requires<[In64BitMode]>, Sched<[WriteStore]>;
|
||||
|
||||
let Defs = [EDI, ESI, EBP, EBX, EDX, ECX, EAX, ESP], Uses = [ESP],
|
||||
mayLoad = 1, neverHasSideEffects = 1, SchedRW = [WriteLoad] in {
|
||||
@ -901,53 +903,56 @@ let Defs = [EFLAGS] in {
|
||||
def BSF16rr : I<0xBC, MRMSrcReg, (outs GR16:$dst), (ins GR16:$src),
|
||||
"bsf{w}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR16:$dst, EFLAGS, (X86bsf GR16:$src))],
|
||||
IIC_BSF>, TB, OpSize;
|
||||
IIC_BSF>, TB, OpSize, Sched<[WriteShift]>;
|
||||
def BSF16rm : I<0xBC, MRMSrcMem, (outs GR16:$dst), (ins i16mem:$src),
|
||||
"bsf{w}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR16:$dst, EFLAGS, (X86bsf (loadi16 addr:$src)))],
|
||||
IIC_BSF>, TB, OpSize;
|
||||
IIC_BSF>, TB, OpSize, Sched<[WriteShiftLd]>;
|
||||
def BSF32rr : I<0xBC, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src),
|
||||
"bsf{l}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR32:$dst, EFLAGS, (X86bsf GR32:$src))], IIC_BSF>, TB;
|
||||
[(set GR32:$dst, EFLAGS, (X86bsf GR32:$src))], IIC_BSF>, TB,
|
||||
Sched<[WriteShift]>;
|
||||
def BSF32rm : I<0xBC, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
|
||||
"bsf{l}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR32:$dst, EFLAGS, (X86bsf (loadi32 addr:$src)))],
|
||||
IIC_BSF>, TB;
|
||||
IIC_BSF>, TB, Sched<[WriteShiftLd]>;
|
||||
def BSF64rr : RI<0xBC, MRMSrcReg, (outs GR64:$dst), (ins GR64:$src),
|
||||
"bsf{q}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR64:$dst, EFLAGS, (X86bsf GR64:$src))],
|
||||
IIC_BSF>, TB;
|
||||
IIC_BSF>, TB, Sched<[WriteShift]>;
|
||||
def BSF64rm : RI<0xBC, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src),
|
||||
"bsf{q}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR64:$dst, EFLAGS, (X86bsf (loadi64 addr:$src)))],
|
||||
IIC_BSF>, TB;
|
||||
IIC_BSF>, TB, Sched<[WriteShiftLd]>;
|
||||
|
||||
def BSR16rr : I<0xBD, MRMSrcReg, (outs GR16:$dst), (ins GR16:$src),
|
||||
"bsr{w}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR16:$dst, EFLAGS, (X86bsr GR16:$src))], IIC_BSR>,
|
||||
TB, OpSize;
|
||||
TB, OpSize, Sched<[WriteShift]>;
|
||||
def BSR16rm : I<0xBD, MRMSrcMem, (outs GR16:$dst), (ins i16mem:$src),
|
||||
"bsr{w}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR16:$dst, EFLAGS, (X86bsr (loadi16 addr:$src)))],
|
||||
IIC_BSR>, TB,
|
||||
OpSize;
|
||||
OpSize, Sched<[WriteShiftLd]>;
|
||||
def BSR32rr : I<0xBD, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src),
|
||||
"bsr{l}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR32:$dst, EFLAGS, (X86bsr GR32:$src))], IIC_BSR>, TB;
|
||||
[(set GR32:$dst, EFLAGS, (X86bsr GR32:$src))], IIC_BSR>, TB,
|
||||
Sched<[WriteShift]>;
|
||||
def BSR32rm : I<0xBD, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
|
||||
"bsr{l}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR32:$dst, EFLAGS, (X86bsr (loadi32 addr:$src)))],
|
||||
IIC_BSR>, TB;
|
||||
IIC_BSR>, TB, Sched<[WriteShiftLd]>;
|
||||
def BSR64rr : RI<0xBD, MRMSrcReg, (outs GR64:$dst), (ins GR64:$src),
|
||||
"bsr{q}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR64:$dst, EFLAGS, (X86bsr GR64:$src))], IIC_BSR>, TB;
|
||||
[(set GR64:$dst, EFLAGS, (X86bsr GR64:$src))], IIC_BSR>, TB,
|
||||
Sched<[WriteShift]>;
|
||||
def BSR64rm : RI<0xBD, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src),
|
||||
"bsr{q}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR64:$dst, EFLAGS, (X86bsr (loadi64 addr:$src)))],
|
||||
IIC_BSR>, TB;
|
||||
IIC_BSR>, TB, Sched<[WriteShiftLd]>;
|
||||
} // Defs = [EFLAGS]
|
||||
|
||||
|
||||
let SchedRW = [WriteMicrocoded] in {
|
||||
// These uses the DF flag in the EFLAGS register to inc or dec EDI and ESI
|
||||
let Defs = [EDI,ESI], Uses = [EDI,ESI,EFLAGS] in {
|
||||
def MOVSB : I<0xA4, RawFrm, (outs), (ins), "movsb", [], IIC_MOVS>;
|
||||
@ -975,7 +980,7 @@ def CMPS8 : I<0xA6, RawFrm, (outs), (ins), "cmpsb", [], IIC_CMPS>;
|
||||
def CMPS16 : I<0xA7, RawFrm, (outs), (ins), "cmpsw", [], IIC_CMPS>, OpSize;
|
||||
def CMPS32 : I<0xA7, RawFrm, (outs), (ins), "cmps{l|d}", [], IIC_CMPS>;
|
||||
def CMPS64 : RI<0xA7, RawFrm, (outs), (ins), "cmpsq", [], IIC_CMPS>;
|
||||
|
||||
} // SchedRW
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Move Instructions.
|
||||
@ -1226,7 +1231,7 @@ def BTC64rr : RI<0xBB, MRMDestReg, (outs), (ins GR64:$src1, GR64:$src2),
|
||||
"btc{q}\t{$src2, $src1|$src1, $src2}", [], IIC_BTX_RR>, TB;
|
||||
} // SchedRW
|
||||
|
||||
let mayLoad = 1, mayStore = 1, SchedRW = [WriteALULd] in {
|
||||
let mayLoad = 1, mayStore = 1, SchedRW = [WriteALULd, WriteRMW] in {
|
||||
def BTC16mr : I<0xBB, MRMDestMem, (outs), (ins i16mem:$src1, GR16:$src2),
|
||||
"btc{w}\t{$src2, $src1|$src1, $src2}", [], IIC_BTX_MR>,
|
||||
OpSize, TB;
|
||||
@ -1266,7 +1271,7 @@ def BTR64rr : RI<0xB3, MRMDestReg, (outs), (ins GR64:$src1, GR64:$src2),
|
||||
"btr{q}\t{$src2, $src1|$src1, $src2}", []>, TB;
|
||||
} // SchedRW
|
||||
|
||||
let mayLoad = 1, mayStore = 1 in {
|
||||
let mayLoad = 1, mayStore = 1, SchedRW = [WriteALULd, WriteRMW] in {
|
||||
def BTR16mr : I<0xB3, MRMDestMem, (outs), (ins i16mem:$src1, GR16:$src2),
|
||||
"btr{w}\t{$src2, $src1|$src1, $src2}", [], IIC_BTX_MR>,
|
||||
OpSize, TB;
|
||||
@ -1347,7 +1352,7 @@ def BTS64mi8 : RIi8<0xBA, MRM5m, (outs), (ins i64mem:$src1, i64i8imm:$src2),
|
||||
// operand is referenced, the atomicity is ensured.
|
||||
multiclass ATOMIC_SWAP<bits<8> opc8, bits<8> opc, string mnemonic, string frag,
|
||||
InstrItinClass itin> {
|
||||
let Constraints = "$val = $dst" in {
|
||||
let Constraints = "$val = $dst", SchedRW = [WriteALULd, WriteRMW] in {
|
||||
def NAME#8rm : I<opc8, MRMSrcMem, (outs GR8:$dst),
|
||||
(ins GR8:$val, i8mem:$ptr),
|
||||
!strconcat(mnemonic, "{b}\t{$val, $ptr|$ptr, $val}"),
|
||||
@ -1382,6 +1387,7 @@ multiclass ATOMIC_SWAP<bits<8> opc8, bits<8> opc, string mnemonic, string frag,
|
||||
defm XCHG : ATOMIC_SWAP<0x86, 0x87, "xchg", "atomic_swap", IIC_XCHG_MEM>;
|
||||
|
||||
// Swap between registers.
|
||||
let SchedRW = [WriteALU] in {
|
||||
let Constraints = "$val = $dst" in {
|
||||
def XCHG8rr : I<0x86, MRMSrcReg, (outs GR8:$dst), (ins GR8:$val, GR8:$src),
|
||||
"xchg{b}\t{$val, $src|$src, $val}", [], IIC_XCHG_REG>;
|
||||
@ -1406,9 +1412,9 @@ def XCHG32ar64 : I<0x90, AddRegFrm, (outs), (ins GR32_NOAX:$src),
|
||||
Requires<[In64BitMode]>;
|
||||
def XCHG64ar : RI<0x90, AddRegFrm, (outs), (ins GR64:$src),
|
||||
"xchg{q}\t{$src, %rax|RAX, $src}", [], IIC_XCHG_REG>;
|
||||
} // SchedRW
|
||||
|
||||
|
||||
|
||||
let SchedRW = [WriteALU] in {
|
||||
def XADD8rr : I<0xC0, MRMDestReg, (outs GR8:$dst), (ins GR8:$src),
|
||||
"xadd{b}\t{$src, $dst|$dst, $src}", [], IIC_XADD_REG>, TB;
|
||||
def XADD16rr : I<0xC1, MRMDestReg, (outs GR16:$dst), (ins GR16:$src),
|
||||
@ -1418,8 +1424,9 @@ def XADD32rr : I<0xC1, MRMDestReg, (outs GR32:$dst), (ins GR32:$src),
|
||||
"xadd{l}\t{$src, $dst|$dst, $src}", [], IIC_XADD_REG>, TB;
|
||||
def XADD64rr : RI<0xC1, MRMDestReg, (outs GR64:$dst), (ins GR64:$src),
|
||||
"xadd{q}\t{$src, $dst|$dst, $src}", [], IIC_XADD_REG>, TB;
|
||||
} // SchedRW
|
||||
|
||||
let mayLoad = 1, mayStore = 1 in {
|
||||
let mayLoad = 1, mayStore = 1, SchedRW = [WriteALULd, WriteRMW] in {
|
||||
def XADD8rm : I<0xC0, MRMDestMem, (outs), (ins i8mem:$dst, GR8:$src),
|
||||
"xadd{b}\t{$src, $dst|$dst, $src}", [], IIC_XADD_MEM>, TB;
|
||||
def XADD16rm : I<0xC1, MRMDestMem, (outs), (ins i16mem:$dst, GR16:$src),
|
||||
@ -1432,6 +1439,7 @@ def XADD64rm : RI<0xC1, MRMDestMem, (outs), (ins i64mem:$dst, GR64:$src),
|
||||
|
||||
}
|
||||
|
||||
let SchedRW = [WriteALU] in {
|
||||
def CMPXCHG8rr : I<0xB0, MRMDestReg, (outs GR8:$dst), (ins GR8:$src),
|
||||
"cmpxchg{b}\t{$src, $dst|$dst, $src}", [],
|
||||
IIC_CMPXCHG_REG8>, TB;
|
||||
@ -1444,7 +1452,9 @@ def CMPXCHG32rr : I<0xB1, MRMDestReg, (outs GR32:$dst), (ins GR32:$src),
|
||||
def CMPXCHG64rr : RI<0xB1, MRMDestReg, (outs GR64:$dst), (ins GR64:$src),
|
||||
"cmpxchg{q}\t{$src, $dst|$dst, $src}", [],
|
||||
IIC_CMPXCHG_REG>, TB;
|
||||
} // SchedRW
|
||||
|
||||
let SchedRW = [WriteALULd, WriteRMW] in {
|
||||
let mayLoad = 1, mayStore = 1 in {
|
||||
def CMPXCHG8rm : I<0xB0, MRMDestMem, (outs), (ins i8mem:$dst, GR8:$src),
|
||||
"cmpxchg{b}\t{$src, $dst|$dst, $src}", [],
|
||||
@ -1468,7 +1478,7 @@ let Defs = [RAX, RDX, EFLAGS], Uses = [RAX, RBX, RCX, RDX] in
|
||||
def CMPXCHG16B : RI<0xC7, MRM1m, (outs), (ins i128mem:$dst),
|
||||
"cmpxchg16b\t$dst", [], IIC_CMPXCHG_16B>,
|
||||
TB, Requires<[HasCmpxchg16b]>;
|
||||
|
||||
} // SchedRW
|
||||
|
||||
|
||||
// Lock instruction prefix
|
||||
@ -1491,17 +1501,21 @@ def REPNE_PREFIX : I<0xF2, RawFrm, (outs), (ins), "repne", []>;
|
||||
|
||||
|
||||
// String manipulation instructions
|
||||
let SchedRW = [WriteMicrocoded] in {
|
||||
def LODSB : I<0xAC, RawFrm, (outs), (ins), "lodsb", [], IIC_LODS>;
|
||||
def LODSW : I<0xAD, RawFrm, (outs), (ins), "lodsw", [], IIC_LODS>, OpSize;
|
||||
def LODSD : I<0xAD, RawFrm, (outs), (ins), "lods{l|d}", [], IIC_LODS>;
|
||||
def LODSQ : RI<0xAD, RawFrm, (outs), (ins), "lodsq", [], IIC_LODS>;
|
||||
}
|
||||
|
||||
let SchedRW = [WriteSystem] in {
|
||||
def OUTSB : I<0x6E, RawFrm, (outs), (ins), "outsb", [], IIC_OUTS>;
|
||||
def OUTSW : I<0x6F, RawFrm, (outs), (ins), "outsw", [], IIC_OUTS>, OpSize;
|
||||
def OUTSD : I<0x6F, RawFrm, (outs), (ins), "outs{l|d}", [], IIC_OUTS>;
|
||||
|
||||
}
|
||||
|
||||
// Flag instructions
|
||||
let SchedRW = [WriteALU] in {
|
||||
def CLC : I<0xF8, RawFrm, (outs), (ins), "clc", [], IIC_CLC>;
|
||||
def STC : I<0xF9, RawFrm, (outs), (ins), "stc", [], IIC_STC>;
|
||||
def CLI : I<0xFA, RawFrm, (outs), (ins), "cli", [], IIC_CLI>;
|
||||
@ -1511,9 +1525,11 @@ def STD : I<0xFD, RawFrm, (outs), (ins), "std", [], IIC_STD>;
|
||||
def CMC : I<0xF5, RawFrm, (outs), (ins), "cmc", [], IIC_CMC>;
|
||||
|
||||
def CLTS : I<0x06, RawFrm, (outs), (ins), "clts", [], IIC_CLTS>, TB;
|
||||
}
|
||||
|
||||
// Table lookup instructions
|
||||
def XLAT : I<0xD7, RawFrm, (outs), (ins), "xlatb", [], IIC_XLAT>;
|
||||
def XLAT : I<0xD7, RawFrm, (outs), (ins), "xlatb", [], IIC_XLAT>,
|
||||
Sched<[WriteLoad]>;
|
||||
|
||||
let SchedRW = [WriteMicrocoded] in {
|
||||
// ASCII Adjust After Addition
|
||||
|
Loading…
Reference in New Issue
Block a user