forked from OSchip/llvm-project
[x86] Correct the operand structure of the ADOX instruction.
This also moves to define it in the same way as ADCX which seems to use constraints a bit better. This is pulled out of the review for reducing the use of popf for restoring EFLAGS, but is independent. There are still more problems with our definitions for these instructions that Craig is going to look at but this is at least less broken and he can start from this to improve them more fully. Thanks to Craig for the review here. llvm-svn: 328945
This commit is contained in:
parent
06b343c6ed
commit
4244625c51
|
@ -1334,7 +1334,7 @@ let Predicates = [HasBMI2] in {
|
|||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ADCX Instruction
|
||||
// ADCX and ADOX Instructions
|
||||
//
|
||||
let Predicates = [HasADX], Defs = [EFLAGS], Uses = [EFLAGS],
|
||||
Constraints = "$src0 = $dst", AddedComplexity = 10 in {
|
||||
|
@ -1349,6 +1349,13 @@ let Predicates = [HasADX], Defs = [EFLAGS], Uses = [EFLAGS],
|
|||
[(set GR64:$dst, EFLAGS,
|
||||
(X86adc_flag GR64:$src0, GR64:$src, EFLAGS))],
|
||||
IIC_BIN_CARRY_NONMEM>, T8PD;
|
||||
|
||||
// We don't have patterns for ADOX yet.
|
||||
def ADOX32rr : I<0xF6, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src0, GR32:$src),
|
||||
"adox{l}\t{$src, $dst|$dst, $src}", [], IIC_BIN_NONMEM>, T8XS;
|
||||
|
||||
def ADOX64rr : RI<0xF6, MRMSrcReg, (outs GR64:$dst), (ins GR64:$src0, GR64:$src),
|
||||
"adox{q}\t{$src, $dst|$dst, $src}", [], IIC_BIN_NONMEM>, T8XS;
|
||||
} // SchedRW
|
||||
|
||||
let mayLoad = 1, SchedRW = [WriteALULd] in {
|
||||
|
@ -1363,27 +1370,12 @@ let Predicates = [HasADX], Defs = [EFLAGS], Uses = [EFLAGS],
|
|||
[(set GR64:$dst, EFLAGS,
|
||||
(X86adc_flag GR64:$src0, (loadi64 addr:$src), EFLAGS))],
|
||||
IIC_BIN_CARRY_MEM>, T8PD;
|
||||
}
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ADOX Instruction
|
||||
//
|
||||
let Predicates = [HasADX], hasSideEffects = 0, Defs = [EFLAGS],
|
||||
Uses = [EFLAGS] in {
|
||||
let SchedRW = [WriteALU] in {
|
||||
def ADOX32rr : I<0xF6, MRMSrcReg, (outs GR32:$dst), (ins GR32:$src),
|
||||
"adox{l}\t{$src, $dst|$dst, $src}", [], IIC_BIN_NONMEM>, T8XS;
|
||||
|
||||
def ADOX64rr : RI<0xF6, MRMSrcReg, (outs GR64:$dst), (ins GR64:$src),
|
||||
"adox{q}\t{$src, $dst|$dst, $src}", [], IIC_BIN_NONMEM>, T8XS;
|
||||
} // SchedRW
|
||||
|
||||
let mayLoad = 1, SchedRW = [WriteALULd] in {
|
||||
def ADOX32rm : I<0xF6, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
|
||||
// We don't have patterns for ADOX yet.
|
||||
def ADOX32rm : I<0xF6, MRMSrcMem, (outs GR32:$dst), (ins GR32:$src0, i32mem:$src),
|
||||
"adox{l}\t{$src, $dst|$dst, $src}", [], IIC_BIN_MEM>, T8XS;
|
||||
|
||||
def ADOX64rm : RI<0xF6, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src),
|
||||
def ADOX64rm : RI<0xF6, MRMSrcMem, (outs GR64:$dst), (ins GR64:$src0, i64mem:$src),
|
||||
"adox{q}\t{$src, $dst|$dst, $src}", [], IIC_BIN_MEM>, T8XS;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue