# 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 `` is supported /// # if cfg_feature_enabled!("") { /// # // 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 = "")] /// # 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