The x86 code contains several macros that following this pattern:
```rust
macro_rules! expr {
() => { true; }
}
fn bar(_val: bool) {}
fn main() {
bar(expr!());
}
```
Here, we have a macro `expr!` that expands to tokens sequence with
a trailing semicolon.
Currently, the trailing semicolon is ignored when the macro is invoked
in expression position, due to https://github.com/rust-lang/rust/issues/33953
If this behavior is changed, then a large number of macro invocations in
`stdarch` will stop compiling.
Regardless of whether nor not this change is made, removing the
semicolon more clearly expresses the intent of the code - these macros
are designed to expand to the result of a function call, not ignore its
results (as the `;` would suggest).
core::arch - Rust's core library architecture-specific intrinsics
The core::arch module implements architecture-dependent intrinsics (e.g. SIMD).
Usage
core::arch is available as part of libcore and it is re-exported by
libstd. Prefer using it via core::arch or std::arch than via this crate.
Unstable features are often available in nightly Rust via the
feature(stdsimd).
Using core::arch via this crate requires nightly Rust, and it can (and does)
break often. The only cases in which you should consider using it via this crate
are:
-
if you need to re-compile
core::archyourself, e.g., with particular target-features enabled that are not enabled forlibcore/libstd. Note: if you need to re-compile it for a non-standard target, please prefer usingxargoand re-compilinglibcore/libstdas appropriate instead of using this crate. -
using some features that might not be available even behind unstable Rust features. We try to keep these to a minimum. If you need to use some of these features, please open an issue so that we can expose them in nightly Rust and you can use them from there.
Documentation
- Documentation - i686
- Documentation - x86_64
- Documentation - arm
- Documentation - aarch64
- Documentation - powerpc
- Documentation - powerpc64
- How to get started
- How to help implement intrinsics
License
core_arch is primarily distributed under the terms of both the MIT license and
the Apache License (Version 2.0), with portions covered by various BSD-like
licenses.
See LICENSE-APACHE, and LICENSE-MIT for details.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in core_arch by you, as defined in the Apache-2.0 license,
shall be dual licensed as above, without any additional terms or conditions.