2012-06-21 17:01:32 -05:00
|
|
|
#[abi = "rust-intrinsic"]
|
2012-07-03 18:11:00 -05:00
|
|
|
extern mod rusti {
|
2012-06-21 17:01:32 -05:00
|
|
|
fn atomic_xchng(&dst: int, src: int) -> int;
|
|
|
|
fn atomic_xchng_acq(&dst: int, src: int) -> int;
|
|
|
|
fn atomic_xchng_rel(&dst: int, src: int) -> int;
|
|
|
|
|
|
|
|
fn atomic_add(&dst: int, src: int) -> int;
|
|
|
|
fn atomic_add_acq(&dst: int, src: int) -> int;
|
|
|
|
fn atomic_add_rel(&dst: int, src: int) -> int;
|
|
|
|
|
|
|
|
fn atomic_sub(&dst: int, src: int) -> int;
|
|
|
|
fn atomic_sub_acq(&dst: int, src: int) -> int;
|
|
|
|
fn atomic_sub_rel(&dst: int, src: int) -> int;
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let mut x = 1;
|
|
|
|
|
|
|
|
assert rusti::atomic_xchng(x, 0) == 1;
|
|
|
|
assert x == 0;
|
|
|
|
|
|
|
|
assert rusti::atomic_xchng_acq(x, 1) == 0;
|
|
|
|
assert x == 1;
|
|
|
|
|
|
|
|
assert rusti::atomic_xchng_rel(x, 0) == 1;
|
|
|
|
assert x == 0;
|
|
|
|
|
|
|
|
assert rusti::atomic_add(x, 1) == 0;
|
|
|
|
assert rusti::atomic_add_acq(x, 1) == 1;
|
|
|
|
assert rusti::atomic_add_rel(x, 1) == 2;
|
|
|
|
assert x == 3;
|
|
|
|
|
|
|
|
assert rusti::atomic_sub(x, 1) == 3;
|
|
|
|
assert rusti::atomic_sub_acq(x, 1) == 2;
|
|
|
|
assert rusti::atomic_sub_rel(x, 1) == 1;
|
|
|
|
assert x == 0;
|
|
|
|
}
|