80 lines
3.3 KiB
Markdown
80 lines
3.3 KiB
Markdown
# Contributing to stdsimd
|
|
|
|
The `stdsimd` crate is more than willing to accept contributions! First you'll
|
|
probably want to check out the repository and make sure that tests pass for you:
|
|
|
|
```
|
|
$ git clone https://github.com/rust-lang-nursery/stdsimd
|
|
$ cd stdsimd
|
|
$ cargo +nightly test
|
|
```
|
|
|
|
To run codegen tests, run in release mode:
|
|
|
|
```
|
|
$ cargo +nightly test --release -p coresimd
|
|
```
|
|
|
|
Remember that this repository requires the nightly channel of Rust! If any of
|
|
the above steps don't work, [please let us know][new]!
|
|
|
|
Next up you can [find an issue][issues] to help out on, we've selected a few
|
|
with the [`help wanted`][help] and [`impl-period`][impl] tags which could
|
|
particularly use some help. You may be most interested in [#40][vendor],
|
|
implementing all vendor intrinsics on x86. That issue's got some good pointers
|
|
about where to get started!
|
|
|
|
If you've got general questions feel free to [join us on gitter][gitter] and ask
|
|
around! Feel free to ping either @BurntSushi or @alexcrichton with questions.
|
|
|
|
[gitter]: https://gitter.im/rust-impl-period/WG-libs-simd
|
|
|
|
# How to write examples for stdsimd intrinsics
|
|
|
|
There are a few features that must be enabled for the given intrinsic to work
|
|
properly and the example must only be run by `cargo test --doc` when the feature
|
|
is supported by the CPU. As a result, the default `fn main` that is generated by
|
|
`rustdoc` will not work (in most cases). Consider using the following as a guide
|
|
to ensure your example works as expected.
|
|
|
|
```rust
|
|
/// # // We need cfg_target_feature to ensure the example is only
|
|
/// # // run by `cargo test --doc` when the CPU supports the feature
|
|
/// # #![feature(cfg_target_feature)]
|
|
/// # // We need target_feature for the intrinsic to work
|
|
/// # #![feature(target_feature)]
|
|
/// #
|
|
/// # // rustdoc by default uses `extern crate stdsimd`, but we need the
|
|
/// # // `#[macro_use]`
|
|
/// # #[macro_use] extern crate stdsimd;
|
|
/// #
|
|
/// # // The real main function
|
|
/// # fn main() {
|
|
/// # // Only run this if `<target feature>` is supported
|
|
/// # if cfg_feature_enabled!("<target feature>") {
|
|
/// # // Create a `worker` function that will only be run if the target feature
|
|
/// # // is supported and ensure that `target_feature` is enabled for your worker
|
|
/// # // function
|
|
/// # #[target_feature(enable = "<target feature>")]
|
|
/// # unsafe fn worker() {
|
|
///
|
|
/// // Write your example here. Feature specific intrinsics will work here! Go wild!
|
|
///
|
|
/// # }
|
|
/// # unsafe { worker(); }
|
|
/// # }
|
|
/// # }
|
|
```
|
|
|
|
If some of the above syntax does not look familiar, the [Documentation as tests] section
|
|
of the [Rust Book] describes the `rustdoc` syntax quite well. As always, feel free
|
|
to [join us on gitter][gitter] and ask us if you hit any snags, and thank you for helping
|
|
to improve the documentation of `stdsimd`!
|
|
|
|
[new]: https://github.com/rust-lang-nursery/stdsimd/issues/new
|
|
[issues]: https://github.com/rust-lang-nursery/stdsimd/issues
|
|
[help]: https://github.com/rust-lang-nursery/stdsimd/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22
|
|
[impl]: https://github.com/rust-lang-nursery/stdsimd/issues?q=is%3Aissue+is%3Aopen+label%3Aimpl-period
|
|
[vendor]: https://github.com/rust-lang-nursery/stdsimd/issues/40
|
|
[Documentation as tests]: https://doc.rust-lang.org/book/first-edition/documentation.html#documentation-as-tests
|
|
[Rust Book]: https://doc.rust-lang.org/book/first-edition
|