These intrinsics actually are zeroing, so we should be upfront
that these still return a valid value in reality. At most,
we might in the future want to use a "freezing" semantics here.
In any case, they are definitely not returning MaybeUninit,
or any other possibly-poison value.
This is a follow-up to #1345 where these appeared as unstable in the
standard library docs because they are only stabilized for ARM. They
were missed in the original PR.
- Fix a typo in the feature name
- Update docs to reflect changes in behavior on invalid ordering in
stabilized PR: invalid ordering is no longer UB, just causes panic as
well as compare_exchange
This commit adds intrinsics to the `wasm32` to support the [relaxed SIMD
proposal][proposal]. These are added with the same naming conventions of
existing simd-related intrinsics for wasm which is similar to the
instruction name but matches sign in a few places.
This additionally updates Wasmtime to execute tests with support for the
relaxed simd proposal. No release has been made yet so this uses the
`dev` release, and I can make a PR in April when the support in Wasmtime
has been released to an official release. The `wasmprinter` crate is
also updated to understand these instruction opcodes as well.
Documentation has been added for all intrinsics, but tests have only
been added for some of them so far. I hope to follow-up later with more
tests.
[proposal]: https://github.com/WebAssembly/relaxed-simd
```
warning: the feature `cmpxchg16b_target_feature` has been stable since 1.69.0-nightly and no longer requires an attribute to enable
--> crates/core_arch/src/lib.rs:24:5
|
24 | cmpxchg16b_target_feature,
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(stable_features)]` on by default
warning: the feature `target_feature_11` has been stable since 1.69.0-nightly and no longer requires an attribute to enable
--> crates/core_arch/src/lib.rs:34:5
|
34 | target_feature_11,
| ^^^^^^^^^^^^^^^^^
```
f16c_target_feature was recently stabilised.
This fixes a warning that results in a CI failure (due to `-D
stable-features`) with current nightly Rust.
The tests can run if and only if the target_features for the
corresponding intrinsics are detected at run-time, so make sure that the
tests have an appropriate `simd_test()`.
This fixes some failures due to tests running when they shouldn't. For
example, some tests would fail on hardware that lacks "fcma".
"arm" and "aarch64" support different sets of `target_feature` and
`simd_test` arguments, and for "arm", the set of features that can be
dynamically detected is different again. Restructure the generator code
to allow this to be expressed accurately (in future patches).
This implementation preserves the way that target features are specified
for shared intrinsics, because this has an impact on the generated
documentation. In particular, rustdoc cannot look inside
`cfg_attr(target_arch = ...)` tests, so we use unconditional
`target_feature` attributes where possible.