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", not(portable_atomic_no_asm))
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(
32                all(
33                    target_os = "linux",
34                    any(
35                        all(
36                            target_env = "gnu",
37                            any(target_endian = "little", not(target_feature = "crt-static")),
38                        ),
39                        all(
40                            any(target_env = "musl", target_env = "ohos", target_env = "uclibc"),
41                            not(target_feature = "crt-static"),
42                        ),
43                        portable_atomic_outline_atomics,
44                    ),
45                ),
46                target_os = "android",
47                target_os = "freebsd",
48                target_os = "openbsd",
49            ),
50            not(any(miri, portable_atomic_sanitize_thread)),
51        ),
52    ),
53))]
54// Use intrinsics.rs on Miri and Sanitizer that do not support inline assembly.
55#[cfg_attr(
56    all(any(miri, portable_atomic_sanitize_thread), not(portable_atomic_pre_llvm_15)),
57    path = "intrinsics.rs"
58)]
59pub(super) mod powerpc64;
60
61// riscv64
62#[cfg(all(
63    target_arch = "riscv64",
64    not(portable_atomic_no_asm),
65    any(
66        target_feature = "experimental-zacas",
67        portable_atomic_target_feature = "experimental-zacas",
68        all(
69            feature = "fallback",
70            not(portable_atomic_no_outline_atomics),
71            any(test, portable_atomic_outline_atomics), // TODO(riscv): currently disabled by default
72            any(target_os = "linux", target_os = "android"),
73            not(any(miri, portable_atomic_sanitize_thread)),
74        ),
75    ),
76))]
77// Use intrinsics.rs on Miri and Sanitizer that do not support inline assembly.
78#[cfg_attr(any(miri, portable_atomic_sanitize_thread), path = "intrinsics.rs")]
79pub(super) mod riscv64;
80
81// s390x
82#[cfg(all(target_arch = "s390x", not(portable_atomic_no_asm)))]
83// Use intrinsics.rs on Miri and Sanitizer that do not support inline assembly.
84#[cfg_attr(any(miri, portable_atomic_sanitize_thread), path = "intrinsics.rs")]
85pub(super) mod s390x;
86
87// x86_64
88#[cfg(all(
89    target_arch = "x86_64",
90    not(all(any(miri, portable_atomic_sanitize_thread), portable_atomic_no_cmpxchg16b_intrinsic)),
91    any(not(portable_atomic_no_asm), portable_atomic_unstable_asm),
92    any(
93        target_feature = "cmpxchg16b",
94        portable_atomic_target_feature = "cmpxchg16b",
95        all(
96            feature = "fallback",
97            not(portable_atomic_no_outline_atomics),
98            not(any(target_env = "sgx", miri)),
99        ),
100    ),
101))]
102// Use intrinsics.rs on Miri and Sanitizer that do not support inline assembly.
103#[cfg_attr(any(miri, portable_atomic_sanitize_thread), path = "intrinsics.rs")]
104pub(super) mod x86_64;