PackageTrack
Sign in Get early access

cmov

Conditional move CPU intrinsics which are guaranteed on major platforms (ARM32/ARM64, x86/x86_64, RISC-V) to execute in constant-time and not be rewritten as branches by the compiler. Provides wrappers for the CMOV family of instructions on x86/x86_64 and CSEL on AArch64, along with a portable "best-effort" pure Rust fallback implementation.

0.5.4 54M downloads/mo #1168 most downloaded on crates.io RustCrypto/utils

What this package is like to depend on

Last release 2 months ago

28 May 2026

Ships unpredictably

gaps range from 8 days to 1.9 years

Nearly every release is documented

notes for 6 of 6 stable releases

12 versions withdrawn

withdrawn after publishing

5 years old

21 releases · first in 2022

15 releases in the last 12 months

see the full history below

Release timeline

21 releases · Feb 2022 to May 2026
2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 21
  1. 0.5.4 28 May 2026
    Release notes

    Security

    Open source →
    Release notes

    Security

    Open source →
  2. 0.5.3 02 Apr 2026
    Release notes

    Added

    • Impl Cmov/CmovEq for NonZeroUsize/NonZeroIsize (#1415)

    Changed

    • Avoid using asm! under cfg(miri) (#1436)
    Open source →
    Release notes

    Added

    • Impl Cmov/CmovEq for NonZeroUsize/NonZeroIsize (#1415)

    Changed

    • Avoid using asm! under cfg(miri) (#1436)
    Open source →
  3. 0.5.2 20 Jan 2026
    Release notes

    Fixed

    • Cmov impl for isize/usize (#1412)
    Open source →
  4. 0.5.1 19 Jan 2026 withdrawn
    Release notes

    Added

    • riscv32 optimised mask generation (#1396)
    • riscv64 optimised mask generation (#1397)
    • Support for core::num::NonZero* and core::cmp::Ordering (#1404)
    Open source →
  5. 0.5.0 18 Jan 2026 withdrawn
    Release notes

    Added

    • Optimized CmovEq for [u8] (#1356)
    • Optimized CmovEq for [u16] (#1370)
    • Impl Cmov/CmovEq for slices of unsigned integers (#1370, #1372)
    • Impl Cmov/CmovEq for slices of signed integers (#1373)
    • Impl Cmov/CmovEq for isize/usize (#1375)

    Changed

    • Impls of Cmov/CmovEq for [T; N] are now bounded on [T]: Cmov(Eq) (#1372)

    Removed

    • Generic impl of CmovEq for [T] where T: CmovEq in favor of specialized impls (#1356)
    Open source →
  6. 0.5.0-pre.2 17 Jan 2026 pre-release

    Nothing published for this version

  7. 0.5.0-pre.1 17 Jan 2026 pre-release

    Nothing published for this version

  8. 0.5.0-pre.0 16 Jan 2026 pre-release

    Nothing published for this version

  9. 0.4.6 16 Jan 2026
    Release notes

    Added

    • Optimized Cmov for [u8; N] (#1350)
    • Optimized CmovEq for [u8; N] (#1353)
    • Optimized Cmov for [u8] (#1354)

    Fixed

    • Provided Cmov::cmovz impl (#1351)
    Open source →
  10. 0.4.5 15 Jan 2026
    Release notes

    Changed

    • Introduce small ARM32 asm! optimization which also guarantees constant-time operation (#1336, #1346)
    Open source →
  11. 0.4.4 14 Jan 2026
    Release notes

    Security

    • Fix non-constant-time assembly being emitted from portable backend on thumbv6m-none-eabi (#1332)
    Open source →
  12. 0.4.3 28 Dec 2025 withdrawn
    Release notes

    Fixed

    • aarch64 ASM bug (#1299)
    • Truncation bug in portable implementation (#1300)
    Open source →
  13. 0.4.2 27 Dec 2025 withdrawn
    Release notes

    Added

    • Signed integer support (#1280)
    Open source →
  14. 0.4.1 20 Dec 2025 withdrawn
    Release notes

    Changed

    • Use black_box in portable impl (#1255)
    Open source →
  15. 0.4.0 10 Sep 2025 withdrawn
    Release notes

    Changed

    • Edition changed to 2024 and MSRV bumped to 1.85 (#1149)
    Open source →
  16. 0.3.1 14 Oct 2023 withdrawn
    Release notes

    Added

    • CmovEq impl for slices (#954)

    Changed

    • Use #[inline] instead of #[inline(always)] (#924)
    • CmovEq now invokes XOR within the ASM block (#925)
    Open source →
  17. 0.3.0 03 Apr 2023 withdrawn
    Release notes

    Added

    • miri support by forcing the portable backend (#864)
    • Constant-time equality comparisons (#873)

    Changed

    • Make Cmov::cmovz a provided method (#871)

    Fixed

    • Builds on x86 (32-bit) targets (#863)
    Open source →
  18. 0.2.0 26 Feb 2023 withdrawn
    Release notes

    Added

    • Condition alias for u8 (#830)

    Changed

    • Redesigned trait-based API (#830)
      • Built around a Cmov trait
      • Trait is impl'd for u8, u16, u32, u64, u128
      • Accepts a Condition (i.e. u8) as a predicate
    • MSRV 1.60 (#839)
    Open source →
  19. 0.1.1 02 Mar 2022 withdrawn
    Release notes

    Added

    • cmovz/cmovnz-alike support for AArch64 targets (#744)
    Open source →
  20. 0.1.0 27 Feb 2022 withdrawn
    Release notes
    • Initial release
    Open source →
  21. 0.0.0 11 Feb 2022 withdrawn

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive