diff options
author | Valentin Popov <valentin@popov.link> | 2024-01-08 00:21:28 +0300 |
---|---|---|
committer | Valentin Popov <valentin@popov.link> | 2024-01-08 00:21:28 +0300 |
commit | 1b6a04ca5504955c571d1c97504fb45ea0befee4 (patch) | |
tree | 7579f518b23313e8a9748a88ab6173d5e030b227 /vendor/crunchy/src | |
parent | 5ecd8cf2cba827454317368b68571df0d13d7842 (diff) | |
download | fparkan-1b6a04ca5504955c571d1c97504fb45ea0befee4.tar.xz fparkan-1b6a04ca5504955c571d1c97504fb45ea0befee4.zip |
Initial vendor packages
Signed-off-by: Valentin Popov <valentin@popov.link>
Diffstat (limited to 'vendor/crunchy/src')
-rw-r--r-- | vendor/crunchy/src/lib.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/vendor/crunchy/src/lib.rs b/vendor/crunchy/src/lib.rs new file mode 100644 index 0000000..6de39e2 --- /dev/null +++ b/vendor/crunchy/src/lib.rs @@ -0,0 +1,36 @@ +//! The crunchy unroller - deterministically unroll constant loops. For number "crunching". +//! +//! The Rust optimizer will unroll constant loops that don't use the loop variable, like this: +//! +//! ```ignore +//! for _ in 0..100 { +//! println!("Hello!"); +//! } +//! ``` +//! +//! However, using the loop variable will cause it to never unroll the loop. This is unfortunate because it means that you can't +//! constant-fold the loop variable, and if you end up stomping on the registers it will have to do a load for each iteration. +//! This crate ensures that your code is unrolled and const-folded. It only works on literals, +//! unfortunately, but there's a work-around: +//! +//! ```ignore +//! debug_assert_eq!(MY_CONSTANT, 100); +//! unroll! { +//! for i in 0..100 { +//! println!("Iteration {}", i); +//! } +//! } +//! ``` +//! This means that your tests will catch if you redefine the constant. +//! +//! To default maximum number of loops to unroll is `64`, but that can be easily increased using the cargo features: +//! +//! * `limit_128` +//! * `limit_256` +//! * `limit_512` +//! * `limit_1024` +//! * `limit_2048` + +#![cfg_attr(not(feature = "std"), no_std)] + +include!(concat!(env!("OUT_DIR"), "/lib.rs")); |