• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: Apache-2.0 OR MIT
2 
3 /*
4 64-bit atomic implementations on 32-bit architectures
5 
6 See README.md for details.
7 */
8 
9 // pre-v6 Arm Linux
10 #[cfg(feature = "fallback")]
11 // Miri and Sanitizer do not support inline assembly.
12 #[cfg(all(
13     target_arch = "arm",
14     not(any(miri, portable_atomic_sanitize_thread)),
15     any(not(portable_atomic_no_asm), portable_atomic_unstable_asm),
16     any(target_os = "linux", target_os = "android"),
17     not(any(target_feature = "v6", portable_atomic_target_feature = "v6")),
18     not(portable_atomic_no_outline_atomics),
19 ))]
20 #[cfg_attr(portable_atomic_no_cfg_target_has_atomic, cfg(portable_atomic_no_atomic_64))]
21 #[cfg_attr(not(portable_atomic_no_cfg_target_has_atomic), cfg(not(target_has_atomic = "64")))]
22 pub(super) mod arm_linux;
23 
24 // riscv32
25 // Miri and Sanitizer do not support inline assembly.
26 #[cfg(all(
27     target_arch = "riscv32",
28     not(any(miri, portable_atomic_sanitize_thread)),
29     not(portable_atomic_no_asm),
30     not(portable_atomic_pre_llvm_19),
31     any(
32         target_feature = "experimental-zacas",
33         portable_atomic_target_feature = "experimental-zacas",
34         all(
35             feature = "fallback",
36             not(portable_atomic_no_outline_atomics),
37             any(test, portable_atomic_outline_atomics), // TODO(riscv): currently disabled by default
38             any(target_os = "linux", target_os = "android"),
39         ),
40     ),
41 ))]
42 pub(super) mod riscv32;
43