]>
Commit | Line | Data |
---|---|---|
3dfed10e XL |
1 | // Code generation of atomic operations. |
2 | // | |
3 | // compile-flags: -O | |
4 | #![crate_type = "lib"] | |
5 | ||
6 | use std::sync::atomic::{AtomicI32, Ordering::*}; | |
7 | ||
8 | // CHECK-LABEL: @compare_exchange | |
9 | #[no_mangle] | |
10 | pub fn compare_exchange(a: &AtomicI32) { | |
923072b8 | 11 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 10 monotonic monotonic |
3dfed10e XL |
12 | let _ = a.compare_exchange(0, 10, Relaxed, Relaxed); |
13 | ||
923072b8 | 14 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 20 release monotonic |
3dfed10e XL |
15 | let _ = a.compare_exchange(0, 20, Release, Relaxed); |
16 | ||
923072b8 FG |
17 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 30 acquire monotonic |
18 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 31 acquire acquire | |
3dfed10e XL |
19 | let _ = a.compare_exchange(0, 30, Acquire, Relaxed); |
20 | let _ = a.compare_exchange(0, 31, Acquire, Acquire); | |
21 | ||
923072b8 FG |
22 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 40 acq_rel monotonic |
23 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 41 acq_rel acquire | |
3dfed10e XL |
24 | let _ = a.compare_exchange(0, 40, AcqRel, Relaxed); |
25 | let _ = a.compare_exchange(0, 41, AcqRel, Acquire); | |
26 | ||
923072b8 FG |
27 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 50 seq_cst monotonic |
28 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 51 seq_cst acquire | |
29 | // CHECK: cmpxchg {{i32\*|ptr}} %{{.*}}, i32 0, i32 52 seq_cst seq_cst | |
3dfed10e XL |
30 | let _ = a.compare_exchange(0, 50, SeqCst, Relaxed); |
31 | let _ = a.compare_exchange(0, 51, SeqCst, Acquire); | |
32 | let _ = a.compare_exchange(0, 52, SeqCst, SeqCst); | |
33 | } | |
34 | ||
35 | // CHECK-LABEL: @compare_exchange_weak | |
36 | #[no_mangle] | |
37 | pub fn compare_exchange_weak(w: &AtomicI32) { | |
923072b8 | 38 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 10 monotonic monotonic |
3dfed10e XL |
39 | let _ = w.compare_exchange_weak(1, 10, Relaxed, Relaxed); |
40 | ||
923072b8 | 41 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 20 release monotonic |
3dfed10e XL |
42 | let _ = w.compare_exchange_weak(1, 20, Release, Relaxed); |
43 | ||
923072b8 FG |
44 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 30 acquire monotonic |
45 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 31 acquire acquire | |
3dfed10e XL |
46 | let _ = w.compare_exchange_weak(1, 30, Acquire, Relaxed); |
47 | let _ = w.compare_exchange_weak(1, 31, Acquire, Acquire); | |
48 | ||
923072b8 FG |
49 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 40 acq_rel monotonic |
50 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 41 acq_rel acquire | |
3dfed10e XL |
51 | let _ = w.compare_exchange_weak(1, 40, AcqRel, Relaxed); |
52 | let _ = w.compare_exchange_weak(1, 41, AcqRel, Acquire); | |
53 | ||
923072b8 FG |
54 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 50 seq_cst monotonic |
55 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 51 seq_cst acquire | |
56 | // CHECK: cmpxchg weak {{i32\*|ptr}} %{{.*}}, i32 1, i32 52 seq_cst seq_cst | |
3dfed10e XL |
57 | let _ = w.compare_exchange_weak(1, 50, SeqCst, Relaxed); |
58 | let _ = w.compare_exchange_weak(1, 51, SeqCst, Acquire); | |
59 | let _ = w.compare_exchange_weak(1, 52, SeqCst, SeqCst); | |
60 | } |