enable Atomic*.{load,store} for ARMv6-M / MSP430
closes #45085
this commit adds an `atomic_cas` target option and an unstable `#[cfg(target_has_atomic_cas)]`
attribute to enable a subset of the `Atomic*` API on architectures that don't support atomic CAS
natively, like MSP430 and ARMv6-M.
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index f97e11e..93bfe1f 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -1367,6 +1367,7 @@
let vendor = &sess.target.target.target_vendor;
let min_atomic_width = sess.target.target.min_atomic_width();
let max_atomic_width = sess.target.target.max_atomic_width();
+ let atomic_cas = sess.target.target.options.atomic_cas;
let mut ret = HashSet::new();
// Target bindings.
@@ -1406,6 +1407,9 @@
}
}
}
+ if atomic_cas {
+ ret.insert((Symbol::intern("target_has_atomic_cas"), None));
+ }
if sess.opts.debug_assertions {
ret.insert((Symbol::intern("debug_assertions"), None));
}