mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-12 23:37:33 +00:00
xchg does not modify FLAGS.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54411 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6da38a05f6
commit
165660e417
@ -1125,7 +1125,8 @@ def LCMPXCHG64 : RI<0xB1, MRMDestMem, (outs), (ins i64mem:$ptr, GR64:$swap),
|
||||
[(X86cas addr:$ptr, GR64:$swap, 8)]>, TB, LOCK;
|
||||
}
|
||||
|
||||
let Constraints = "$val = $dst", Defs = [EFLAGS] in {
|
||||
let Constraints = "$val = $dst" in {
|
||||
let Defs = [EFLAGS] in
|
||||
def LXADD64 : RI<0xC1, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$ptr,GR64:$val),
|
||||
"lock xadd $val, $ptr",
|
||||
[(set GR64:$dst, (atomic_load_add_64 addr:$ptr, GR64:$val))]>,
|
||||
|
@ -2582,7 +2582,7 @@ def EH_RETURN : I<0xC3, RawFrm, (outs), (ins GR32:$addr),
|
||||
|
||||
// Atomic swap. These are just normal xchg instructions. But since a memory
|
||||
// operand is referenced, the atomicity is ensured.
|
||||
let Constraints = "$val = $dst", Defs = [EFLAGS] in {
|
||||
let Constraints = "$val = $dst" in {
|
||||
def XCHG32rm : I<0x87, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$ptr, GR32:$val),
|
||||
"xchg{l}\t{$val, $ptr|$ptr, $val}",
|
||||
[(set GR32:$dst, (atomic_swap_32 addr:$ptr, GR32:$val))]>;
|
||||
|
Loading…
x
Reference in New Issue
Block a user