portable_atomic/imp/atomic128/
mod.rs

1// SPDX-License-Identifier: Apache-2.0 OR MIT
2
3/*
4128-bit atomic implementations on 64-bit architectures
5
6See README.md for details.
7*/
8
9// AArch64
10#[cfg(any(
11    all(target_arch = "aarch64", any(not(portable_atomic_no_asm), portable_atomic_unstable_asm)),
12    all(target_arch = "arm64ec", portable_atomic_unstable_asm_experimental_arch)
13))]
14// Use intrinsics.rs on Miri and Sanitizer that do not support inline assembly.
15#[cfg_attr(
16    all(any(miri, portable_atomic_sanitize_thread), portable_atomic_new_atomic_intrinsics),
17    path = "intrinsics.rs"
18)]
19pub(super) mod aarch64;
20
21// powerpc64
22#[cfg(all(
23    target_arch = "powerpc64",
24    portable_atomic_unstable_asm_experimental_arch,
25    any(
26        target_feature = "quadword-atomics",
27        portable_atomic_target_feature = "quadword-atomics",
28        all(
29            feature = "fallback",
30            not(portable_atomic_no_outline_atomics),
31            any(test, portable_atomic_outline_atomics), // TODO(powerpc64): currently disabled by default
32            any(
33                all(
34                    target_os = "linux",
35                    any(
36                        target_env = "gnu",
37                        all(
38                            any(target_env = "musl", target_env = "ohos"),
39                            not(target_feature = "crt-static"),
40                        ),
41                        portable_atomic_outline_atomics,
42                    ),
43                ),
44                target_os = "android",
45                target_os = "freebsd",
46                all(target_os = "openbsd", portable_atomic_outline_atomics),
47            ),
48            not(any(miri, portable_atomic_sanitize_thread)),
49        ),
50    ),
51))]
52// Use intrinsics.rs on Miri and Sanitizer that do not support inline assembly.
53#[cfg_attr(
54    all(any(miri, portable_atomic_sanitize_thread), not(portable_atomic_pre_llvm_15)),
55    path = "intrinsics.rs"
56)]
57pub(super) mod powerpc64;
58
59// riscv64
60#[cfg(all(
61    target_arch = "riscv64",
62    not(portable_atomic_no_asm),
63    not(portable_atomic_pre_llvm_19),
64    any(
65        target_feature = "experimental-zacas",
66        portable_atomic_target_feature = "experimental-zacas",
67        all(
68            feature = "fallback",
69            not(portable_atomic_no_outline_atomics),
70            any(test, portable_atomic_outline_atomics), // TODO(riscv): currently disabled by default
71            any(target_os = "linux", target_os = "android"),
72            not(any(miri, portable_atomic_sanitize_thread)),
73        ),
74    ),
75))]
76// Use intrinsics.rs on Miri and Sanitizer that do not support inline assembly.
77#[cfg_attr(any(miri, portable_atomic_sanitize_thread), path = "intrinsics.rs")]
78pub(super) mod riscv64;
79
80// s390x
81#[cfg(all(target_arch = "s390x", portable_atomic_unstable_asm_experimental_arch))]
82// Use intrinsics.rs on Miri and Sanitizer that do not support inline assembly.
83#[cfg_attr(any(miri, portable_atomic_sanitize_thread), path = "intrinsics.rs")]
84pub(super) mod s390x;
85
86// x86_64
87#[cfg(all(
88    target_arch = "x86_64",
89    not(all(any(miri, portable_atomic_sanitize_thread), portable_atomic_no_cmpxchg16b_intrinsic)),
90    any(not(portable_atomic_no_asm), portable_atomic_unstable_asm),
91    any(
92        target_feature = "cmpxchg16b",
93        portable_atomic_target_feature = "cmpxchg16b",
94        all(
95            feature = "fallback",
96            not(portable_atomic_no_outline_atomics),
97            not(any(target_env = "sgx", miri)),
98        ),
99    ),
100))]
101// Use intrinsics.rs on Miri and Sanitizer that do not support inline assembly.
102#[cfg_attr(any(miri, portable_atomic_sanitize_thread), path = "intrinsics.rs")]
103pub(super) mod x86_64;