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:
-
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
0.3.1 - 2023-10-14
-
Add
as_ptr
andfrom_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)
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
, andfetch_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 exposeraw
module.
0.1.0 - 2022-03-12
Initial release