Skip to content

Latest commit

 

History

History
315 lines (181 loc) · 14.8 KB

CHANGELOG.md

File metadata and controls

315 lines (181 loc) · 14.8 KB

Changelog

All notable changes to this project will be documented in this file.

This project adheres to Semantic Versioning.

Releases may yanked if there is a security bug, a soundness bug, or a regression.

0.3.5 - 2024-11-23

  • Documentation improvements.

0.3.4 - 2024-11-19

This release includes improvements to platform support, various optimizations, significant improvements to code comments, etc.

  • Improvements to platform support:

    • Support SPARC/SPARC64 (experimental). (#31)
    • Support M68k (experimental). (#27, #28)
    • Support Xtensa (experimental). (#26, #29)
    • Support swap/CAS on MSP430 (experimental). (4fb09a7)
  • Update to stabilized s390x and Arm64EC inline assembly. (c9d7286, 3a85789)

  • Make from_ptr const fn on Rust 1.83+. (align to the std atomic change in Rust 1.84) (c8ef5c4)

  • Various optimizations:

    • AArch64: Optimize 128-bit SeqCst load when FEAT_LRCPC3 enabled and 128-bit SeqCst store when FEAT_LRCPC3 enabled and FEAT_LSE128 is disabled. (#30)
    • pre-v6 Arm Linux/Android: Optimize {8,16,32}-bit swap/CAS and all 64-bit atomics. (#30)
    • PowerPC: Optimize {8,16}-bit swap/CAS (#30), all Acquire/AcqRel/SeqCst swap/CAS, all CAS with Relaxed failure ordering, and {8,16}-bit weak CAS (18aadd2).
    • s390x: Optimize {8,16,128}-bit swap. (#30)
    • RISC-V, MIPS, LoongArch64, Hexagon: Optimize {8,16}-bit swap/CAS. (#30)
    • AVR: Optimize 8-bit load/store. (18aadd2)
  • Respect RUSTC_BOOTSTRAP=-1 recently added in nightly in rustc version detection. (07f64d5)

0.3.3 - 2024-10-14

  • Make get_mut const fn on Rust 1.83+. (484a32f)

  • Work around LLVM pre-20 bug. (#25)

  • Support atomic swap on RISC-V without A-extension when Zaamo extension enabled. (34d37b9)

  • Optimize RISC-V {8,16}-bit atomic swap when Zabha is enabled. (34d37b9)

  • Strengthen RISC-V SeqCst store to improve compatibility with code that uses atomic instruction mapping that differs from LLVM and GCC. (836d3fe)

  • Optimize x86_32 64-bit load/store when SSE is not available. (c6f914b)

  • Improve compile-time detection of AArch64 FEAT_LSE2/FEAT_LRCPC3/FEAT_LSE128. (959477b)

  • Improve compile-time detection of powerpc64 partword-atomics/quadword-atomics. (e1a1596)

0.3.2 - 2024-07-10

  • Support Arm64EC (experimental). (4d94b3c)

  • Support swap/CAS on AVR (experimental). (71b9a5f)

  • Make into_inner const fn on Rust 1.61+. (align to the std atomic change in Rust 1.79) (9c253dc)

  • Improve loongarch64 support. (358360c)

  • Make rustc version detection robust for custom toolchains. (c034611)

  • Respect RUSTC_WRAPPER in rustc version detection.

  • Our build script is now less likely to be re-run unnecessarily in versions where the cargo bug fix is available (cargo 1.79+). (91ec716)

  • Various optimizations

    • Optimize x86_32 64-bit load/store when SSE is not available. (75ca334)
    • Optimize PowerPC32 Acquire/SeqCst load. (f5ce83b)
    • Optimize x86 inline assembly. (adaf3a9, 3ba37e9, fcc0bf8)
    • Optimize s390x inline assembly. (9ee7f57)

0.3.1 - 2023-10-14

  • Add as_ptr and from_ptr.

  • Optimize weak CAS on PowerPC.

  • Optimize {8,16}-bit CAS on AArch64.

0.3.0 - 2023-10-01

  • Optimize inline assemblies using MaybeUninit input/output of inline assembly implemented by rust-lang/rust#114790, where it is available. This greatly improves performance and is almost equivalent to std atomic types. (#19)

0.2.22 - 2023-08-15

  • Add cfg_{has,no}_atomic_{8,16,32,64,128,ptr} macros to enable code when the corresponding atomic implementation is available/unavailable. (#9)

  • Add cfg_{has,no}_atomic_cas macros to enable code when atomic swap/CAS implementation is available/unavailable. (#9)

  • Documentation improvements. (#17, #18, thanks @RalfJung)

0.2.21 - 2023-08-10

  • Fix AVR 16-bit atomic load/store.

  • Optimize AArch64 128-bit atomic store/swap when the lse128 target feature is enabled at compile-time.

  • Optimize AArch64 128-bit atomic load/store when the rcpc3 target feature is enabled at compile-time.

0.2.20 - 2023-08-02

  • Support pre-v6 Arm Linux/Android (e.g., armv5te-unknown-linux-gnueabi, arm-linux-androideabi, etc.).

  • Support Hexagon (experimental).

  • Support AVR atomic load/store (experimental).

  • Improve {8,16}-bit atomic implementations on RISC-V, PowerPC, MIPS, s390x, LoongArch64.

0.2.19 - 2023-07-27

  • Support LoongArch64.

  • Fix build error on MIPS32r6 and MIPS64r6 (both tier 3) since nightly-2023-07-19's target_arch change.

  • Fix build error on big endian Armv8 AArch32 (tier 3).

  • Acknowledge all x86_64 Apple targets support 128-bit atomics.

    Our code already recognizes this via cfg(target_feature), so this only affects users using pre-1.69 stable rustc.

    See also rust-lang/rust#112150.

  • Optimize inline assemblies.

0.2.18 - 2023-05-31

  • Fix build error on AArch64 ILP32 ABI targets (tier 3).

  • Optimize inline assemblies on PowerPC and s390x.

0.2.17 - 2023-05-09

  • Fix bug in s390x atomic RMWs on old nightly.

  • Optimize inline assemblies on RISC-V, PowerPC, s390x, and MSP430.

0.2.16 - 2023-04-30

Note: This release has been yanked due to a bug fixed in 0.2.17.

  • Support 64-bit atomics on Armv7-R and Armv8-R.

  • Fix bug in AArch64 16-bit compare_exchange_weak.

  • Fix bug in AArch64 128-bit SeqCst load when FEAT_LSE2 is enabled at compile-time.

  • Optimize AArch64 atomic load when the rcpc target feature is enabled at compile-time.

  • Optimize PowerPC atomic RMWs.

0.2.15 - 2022-12-25

Note: This release has been yanked due to a bug fixed in 0.2.16.

  • Improve support for Armv8 AArch32.

  • Optimize inline assemblies on x86.

  • Documentation improvements.

0.2.14 - 2022-09-04

Note: This release has been yanked due to a bug fixed in 0.2.16.

  • Support pre-power8 powerpc64le. powerpc64le's default cpu version is power8, but you can technically compile it for the old cpu using the unsafe -C target-cpu rustc flag.

0.2.13 - 2022-08-17

Note: This release has been yanked due to a bug fixed in 0.2.16.

  • Support MSP430 atomic load/store.

  • Use track_caller when debug assertions are enabled.

0.2.12 - 2022-08-03

Note: This release has been yanked due to a bug fixed in 0.2.16.

  • Optimize AArch64 128-bit atomic load when the lse target feature is enabled at compile-time.

0.2.11 - 2022-07-31

Note: This release has been yanked due to a bug fixed in 0.2.16.

  • Optimize inline assemblies on x86, Arm, AArch64, and RISC-V.

0.2.10 - 2022-07-16

Note: This release has been yanked due to a bug fixed in 0.2.16.

  • Support Armv6.

0.2.9 - 2022-06-30

Note: This release has been yanked due to a bug fixed in 0.2.16.

  • Add compare_exchange, compare_exchange_weak, and fetch_update. (#7)

  • Support x86_64 128-bit atomics when the cmpxchg16b target feature is enabled at compile-time.

  • Support x86 64-bit atomics.

0.2.8 - 2022-06-21

Note: This release has been yanked due to a bug fixed in 0.2.16.

  • Fix bug in powerpc64 128-bit atomics.

  • Documentation improvements.

0.2.7 - 2022-06-19

Note: This release has been yanked due to a bug fixed in 0.2.8.

  • Fix bug in powerpc64 SeqCst atomic load.

0.2.6 - 2022-06-16

Note: This release has been yanked due to a bug fixed in 0.2.7.

  • Support PowerPC.

  • Support s390x.

  • Implement RISC-V 8-bit and 16-bit swap.

  • Implement MIPS32r2 8-bit and 16-bit swap.

  • Implement MIPS64r2 8-bit and 16-bit swap.

0.2.5 - 2022-05-30

Note: This release has been yanked due to a bug fixed in 0.2.16.

  • Support Armv6-M.

  • Optimize AArch64 128-bit atomic load/store when the lse2 target feature is enabled at compile-time.

0.2.4 - 2022-03-20

  • Implement MIPS32r2 32-bit swap.

  • Implement MIPS64r2 32-bit and 64-bit swap.

0.2.3 - 2022-03-19

  • Support MIPS32r2 and MIPS64r2.

  • Add #[must_use] to constructors.

0.2.2 - 2022-03-16

  • Support Armv7-A, Armv7-R, Armv7-M, and Armv8-M.

0.2.1 - 2022-03-14

  • Optimize AArch64 atomic swap when the lse target feature is enabled at compile-time.

  • Document safety requirements of functions in raw module.

0.2.0 - 2022-03-13

  • Support AArch64.

  • Support X32 ABI.

  • Remove raw feature and always expose raw module.

0.1.0 - 2022-03-12

Initial release