portable-atomic

Portable atomic types including support for 128-bit atomics, atomic float, etc.

APACHE-2.0 License

Downloads
39.1M
Stars
107
Committers
7

Bot releases are visible (Hide)

portable-atomic - 1.6.0 Latest Release

Published by github-actions[bot] 11 months ago

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

  • Add cfg_{has,no}_atomic_cas macros to enable code when atomic CAS/RMW implementation is available/unavailable.

  • Improve support for RISC-V targets without atomic CAS.

portable-atomic - 1.5.1

Published by github-actions[bot] 12 months ago

  • Fix bug in i{8,16} fetch_{or,xor} on RISC-V without A-extension where unsafe-assume-single-core and force-amo are enabled.

  • Optimize swap for targets that do not have native atomic CAS instructions.

portable-atomic - 1.5.0

Published by github-actions[bot] 12 months ago

  • Add from_ptr.

  • Add force-amo feature (portable_atomic_force_amo cfg) for single-core RISC-V without A-extension. (#124)

  • Support run-time detection on AArch64 on pre-1.61 rustc. (#98)

    This also solves a compatibility issue with rustc_codegen_cranelift.

  • Support run-time detection of FEAT_LSE2. (#126)

  • Support run-time detection of FEAT_LSE on AArch64 NetBSD. (#66)

  • Acknowledge ESP-IDF targets' 64-bit atomics are not lock-free. See #122 for more.

  • Optimize 128-bit weak CAS on powerpc64.

  • Optimize interrupt disable on no-std pre-v6 ARM where unsafe-assume-single-core and disable-fiq are enabled. (771c45d)

  • Improve detection of Apple hardware. (5c3a43b)

  • Improve compatibility with the future version of Miri.

portable-atomic - 1.4.3

Published by github-actions[bot] about 1 year ago

  • Optimize AArch64 128-bit atomic store/swap/fetch_and/fetch_or when the lse128 target feature is enabled at compile-time. (#68)

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

  • Optimize inline assemblies on ARM, AArch64, and MSP430.

portable-atomic - 1.4.2

Published by github-actions[bot] about 1 year ago

  • Optimize AtomicBool on RISC-V/LoongArch64. This is the same as rust-lang/rust#114034, but is available for all rustc versions.
portable-atomic - 1.4.1

Published by github-actions[bot] over 1 year ago

  • Improve compatibility with the future version of Miri.
portable-atomic - 1.4.0

Published by github-actions[bot] over 1 year ago

  • Allow using embedded-related cfgs as Cargo features. (#94, thanks @Dirbaio)

    Originally, we were providing these as cfgs instead of features, but based on a strong request from the embedded ecosystem, we have agreed to provide them as features as well. See #94 for more.

    cfgs are kept and can be used as aliases for features.

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

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

    See also rust-lang/rust#112150.

  • Optimize 128-bit atomics on aarch64/s390x.

portable-atomic - 1.3.3

Published by github-actions[bot] over 1 year ago

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

  • Optimize 128-bit atomics on s390x.

portable-atomic - 1.3.2

Published by github-actions[bot] over 1 year ago

  • Fix bug in powerpc64/s390x 128-bit atomic RMWs on old nightly.

  • Optimize 128-bit atomics on powerpc64/s390x.

portable-atomic - 1.3.1

Published by github-actions[bot] over 1 year ago

  • Documentation improvements.
portable-atomic - 0.3.20

Published by github-actions[bot] over 1 year ago

The latest version of portable-atomic is 1.x. This release makes portable-atomic 0.3 is built on top of portable-atomic 1.x to make bug fixes and improvements such as support for new targets in 1.x available to the ecosystem that depends on older portable-atomic. portable-atomic 0.3 is still maintained passively, but upgrading to portable-atomic 1.x is recommended. (There are no breaking changes from 0.3, except that a deprecated no-op outline-atomics Cargo feature has been removed.) (#99)

portable-atomic - 1.3.0

Published by github-actions[bot] over 1 year ago

  • Add require-cas feature. (#100)

    If your crate supports no-std environment and requires atomic CAS, enabling this feature will allow the portable-atomic to display helpful error messages to users on targets requiring additional action on the user side to provide atomic CAS.

    [dependencies]
    portable-atomic = { version = "1.3", default-features = false, features = ["require-cas"] }
    

    See #100 for more.

  • Support portable_atomic_unsafe_assume_single_core cfg on Xtensa targets without atomic CAS. (#86)

  • Fix bug in AArch64 128-bit SeqCst load when FEAT_LSE2 is enabled at compile-time. This is the same bug that was fixed in the recently released GCC 13.1. LLVM also has the same bug, which had not yet been fixed when the patch was created; I will open a bug report if necessary after looking into the situation in LLVM. (a29154b)

  • Fix compile error on bpf{eb,el}-unknown-none (tier 3) and mipsel-sony-psx (tier 3) when critical-section feature is disabled.

  • Various optimizations

    • Optimize x86_64 128-bit outline-atomics. This improves performance by up to 15% in concurrent RMW/store for cases where the cmpxchg16b target feature is not available at compile-time. (40c4cd4)
    • Optimize x86_64 128-bit load that uses cmpxchg16b. (40c4cd4)
    • Optimize aarch64 128-bit load that uses FEAT_LSE. (40c4cd4)
    • Optimize pre-ARMv6 Linux/Android atomics. (efacc89)
    • Support outline-atomics for powerpc64 128-bit atomics. This is currently disabled by default, and can be enabled by --cfg portable_atomic_outline_atomics. (#90)
    • Optimize aarch64 outline-atomics on linux-musl. On linux-musl, outline-atomics is enabled by default only when dynamic linking is enabled. When static linking is enabled, this can be enabled by --cfg portable_atomic_outline_atomics. See the atomic128 module's readme for more. (8418235, 31d0862)
portable-atomic - 1.2.0

Published by github-actions[bot] over 1 year ago

  • Make 64-bit atomics lock-free on ARM Linux/Android targets that do not have 64-bit atomics (e.g., armv5te-unknown-linux-gnueabi, arm-linux-androideabi, etc.) when the kernel version is 3.1 or later. (#82)

  • Fix aarch64 128-bit atomics performance regression on Apple hardware. (#89)

  • Optimize 128-bit atomics on aarch64, x86_64, powerpc64, and s390x.

portable-atomic - 1.1.0

Published by github-actions[bot] over 1 year ago

  • Add Atomic{I,U}*::bit_{set,clear,toggle} and AtomicPtr::bit_{set,clear,toggle}. (#72)

    They correspond to x86's lock bt{s,r,c}, and the implementation calls them on x86/x86_64.

  • Add AtomicU*::{fetch_neg,neg} methods. Previously it was only available on AtomicI* and AtomicF*.

  • Add as_ptr method to all atomic types. (#79)

  • Make AtomicF{32,64}::as_bits const on Rust 1.58+. (#79)

  • Relax ordering in Serialize impl to reflect the upstream change.

  • Optimize x86_64 outline-atomics for 128-bit atomics.

    • Support outline-atomics for cmpxchg16b on Rust 1.69+ (i.e., on Rust 1.69+, x86_64 128-bit atomics is lock-free on all Intel chips and almost all AMD chips, even if cmpxchg16b is not available at compile-time.). Previously it was only nightly. (#80)
    • portable-atomic no longer enables outline-atomics on target where run-time feature detection is not available. (#80)
  • Optimize aarch64 outline-atomics for 128-bit atomics.

  • Performance improvements. (#70, #81, 6c189ae, 13c92b0, etc.)

  • Improve support for old nightly. (#73, 872feb9)

  • Documentation improvements.

portable-atomic - 1.0.1

Published by github-actions[bot] almost 2 years ago

  • Optimize Atomic{I,U}*::{fetch_not,not} methods. (#62)
portable-atomic - 1.0.0

Published by github-actions[bot] almost 2 years ago

  • Add critical-section feature to use critical-section on targets where atomic CAS is not natively available. (#51, thanks @Dirbaio)

    This is useful to get atomic CAS when --cfg portable_atomic_unsafe_assume_single_core can't be used, such as multi-core targets, unprivileged code running under some RTOS, or environments where disabling interrupts needs extra care due to e.g. real-time requirements.

    See documentation for more.

  • Remove outline-atomics feature. This was no-op since 0.3.19.

  • Documentation improvements.

portable-atomic - 0.3.19

Published by github-actions[bot] almost 2 years ago

  • Add AtomicI*::{fetch_neg,neg} and AtomicF*::fetch_neg methods. (#54)

    AtomicI*::neg are equivalent to the corresponding fetch_* methods, but do not return the previous value. They are intended for optimization on platforms that have atomic instructions for the corresponding operation, such as x86's lock neg.

    Currently, optimizations by these methods (neg) are only guaranteed for x86.

  • Add Atomic{I,U}*::{fetch_not,not} methods. (#54)

    Atomic{I,U}*::not are equivalent to the corresponding fetch_* methods, but do not return the previous value. They are intended for optimization on platforms that have atomic instructions for the corresponding operation, such as x86's lock not, MSP430's inv.

    Currently, optimizations by these methods (not) are only guaranteed for x86 and MSP430.

    (Note: AtomicBool already has fetch_not and not methods.)

  • Enable outline-atomics for 128-bit atomics by default. (#57) See #57 for more.

  • Improve support for old nightly compilers.

portable-atomic - 0.3.18

Published by github-actions[bot] almost 2 years ago

  • Fix build error when not using portable_atomic_unsafe_assume_single_core cfg on AVR and MSP430 custom targets. (#50)

    Since 0.3.11, atomic CAS was supported without the cfg on AVR and MSP430 builtin targets, but that change was not applied to custom targets.

portable-atomic - 0.3.17

Published by github-actions[bot] almost 2 years ago

  • Optimize x86_64 128-bit atomic load/store on AMD CPU with AVX. (#49)

  • Improve support for custom targets on old rustc.

portable-atomic - 0.3.16

Published by github-actions[bot] almost 2 years ago

  • Add Atomic{I,U}*::{add,sub,and,or,xor} and AtomicBool::{and,or,xor} methods. (#47)

    They are equivalent to the corresponding fetch_* methods, but do not return the previous value. They are intended for optimization on platforms that implement atomics using inline assembly, such as the MSP430.

  • Various improvements to portable_atomic_unsafe_assume_single_core cfg. (#44, #40)

    • Support disabling FIQs on pre-v6 ARM under portable_atomic_disable_fiq cfg.
    • Support RISC-V supervisor mode under portable_atomic_s_mode cfg.
    • Optimize interrupt restore on AVR and MSP430. (#40)
    • Documentation improvements.

    See #44 for more.

Package Rankings
Top 5.23% on Crates.io
Badges
Extracted from project README
crates.io docs.rs license msrv github actions cirrus ci