ref: e841ef7c45f5ed30368c5070d52e1cf5912a1a41
dir: /lib/thread/atomic.myr/
use std
pkg thread =
trait atomic @a::(integral,numeric) =
xget : (p : @a# -> @a)
xset : (p : @a#, v : @a -> void)
xadd : (p : @a#, v : @a -> @a)
xsub : (p : @a#, v : @a -> @a)
xcas : (p : @a#, old : @a, new : @a -> bool)
;;
impl atomic int32
impl atomic int64
impl atomic uint32
impl atomic uint64
;;
impl atomic int32 =
xget = {p; -> xget32(p castto(uint32#)) castto(int32)}
xset = {p, v; xset32(p castto(uint32#), v castto(uint32))}
xadd = {p, v; -> xadd32(p castto(uint32#), v castto(uint32)) castto(int32)}
xsub = {p, v; -> xsub32(p castto(uint32#), v castto(uint32)) castto(int32)}
xcas = {p, old, new; -> xcas32(p castto(uint32#), old castto(uint32), new castto(uint32))}
;;
impl atomic int64 =
xget = {p; -> xget64(p castto(uint64#)) castto(int64)}
xset = {p, v; xset64(p castto(uint64#), v castto(uint64))}
xadd = {p, v; -> xadd64(p castto(uint64#), v castto(uint64)) castto(int64)}
xsub = {p, v; -> xsub64(p castto(uint64#), v castto(uint64)) castto(int64)}
xcas = {p, old, new; -> xcas64(p castto(uint64#), old castto(uint64), new castto(uint64))}
;;
impl atomic uint32 =
xget = {p; -> xget32(p)}
xset = {p, v; xset32(p, v)}
xadd = {p, v; -> xadd32(p, v)}
xsub = {p, v; -> xsub32(p, v)}
xcas = {p, old, new; -> xcas32(p, old, new)}
;;
impl atomic uint64 =
xget = {p; -> xget64(p)}
xset = {p, v; xset64(p, v)}
xadd = {p, v; -> xadd64(p, v)}
xsub = {p, v; -> xsub64(p, v)}
xcas = {p, old, new; -> xcas64(p, old, new)}
;;
extern const xget32 : (p : uint32# -> uint32)
extern const xget64 : (p : uint64# -> uint64)
extern const xset32 : (p : uint32#, v : uint32 -> void)
extern const xset64 : (p : uint64#, v : uint64 -> void)
extern const xadd32 : (p : uint32#, v : uint32 -> uint32)
extern const xadd64 : (p : uint64#, v : uint64 -> uint64)
extern const xsub32 : (p : uint32#, v : uint32 -> uint32)
extern const xsub64 : (p : uint64#, v : uint64 -> uint64)
extern const xcas32 : (p : uint32#, old: uint32, new : uint32 -> bool)
extern const xcas64 : (p : uint64#, old: uint64, new : uint64 -> bool)