Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
92bfd8a
Initial AVX-512 support. Adds level detection, mask operations, and d…
Shnatsel May 24, 2026
f08f7e6
Add checked_transmute_copy and ban transmute_copy to statically preve…
Shnatsel May 24, 2026
aef1cac
Expand native type conversion test coverage
Shnatsel May 24, 2026
c12a7cc
Rename test: mask_methods.rs -> mask_roundtrip.rs
Shnatsel May 24, 2026
9d9adf8
Check in the new generated AVX-512 file
Shnatsel May 24, 2026
81441cf
Fix build after file rename
Shnatsel May 24, 2026
0d6af5d
Use AVX-512 instructions for f32 -> u32 conversions. Expand test cove…
Shnatsel May 24, 2026
025c172
Optimize load_array/as_array on AVX-512 masks; the initial impl was s…
Shnatsel May 24, 2026
7927383
Split set_mask into a backend method so it could be specialized per b…
Shnatsel May 24, 2026
57de129
Optimize load_interleaved/store_interleaved for AVX-512. Add one more…
Shnatsel May 24, 2026
2630928
Optimize variable shifts for 8-bit and 16-bit types. Expand test cove…
Shnatsel May 24, 2026
f2ba8c9
Optimize floor/ceil/round_ties_even/trunc/approximate_recip for 512-b…
Shnatsel May 24, 2026
9cddbb2
Use AVX-512 rcp14 for smaller vector sizes too; improves precision at…
Shnatsel May 24, 2026
9d02c3a
Optimize slide_within_blocks for AVX-512; verified with exhaustive sl…
Shnatsel May 24, 2026
85b44c9
Remove stale tests for mask slide APIs; they were under #[cfg(false)]…
Shnatsel May 24, 2026
1c558ca
consistent clippy error messages
Shnatsel May 24, 2026
6c8f7d7
satisfy Clippy
Shnatsel May 24, 2026
e475ae1
get rid of useless extra braces
Shnatsel May 24, 2026
6f1081f
KISS the native type mask roundtrip tests
Shnatsel May 24, 2026
1e2a096
cargo fmt
Shnatsel May 24, 2026
7fc16d4
Satisfy clippy some more. Hoisted by my own restriction lint.
Shnatsel May 24, 2026
359650d
Satisfy the toml formatting check
Shnatsel May 24, 2026
37df3e3
Stick an #[expect] onto checked_transmute_copy on wasm32, otherwise w…
Shnatsel May 24, 2026
8825bfb
Suppress an apparently buggy Clippy lint; surfaced only in `cargo cli…
Shnatsel May 24, 2026
cf3ff7d
Satisfy the toml formatter again
Shnatsel May 24, 2026
cb5780f
Add miri out-outs for extra slow tests
Shnatsel May 24, 2026
f55271b
Also enforce that both types are Copy in checked_transmute_copy. We c…
Shnatsel May 25, 2026
cd8192c
Merge branch 'main' into avx512-yes-really
Shnatsel May 25, 2026
15f5ab8
Fix disallowed methods setup that got mangled in the merge
Shnatsel May 25, 2026
6233743
Drop a custom transmute_copy wrapper from tests now that it has the s…
Shnatsel May 25, 2026
88bc247
Optimize min_precise/max_precise for AVX-512, expand test coverage. A…
Shnatsel May 26, 2026
608b53f
Expand interleave/deinterleave test coverage
Shnatsel May 26, 2026
d45b511
Merge main PR #233: remove unsafe loads
Shnatsel May 27, 2026
b03927f
Apply PR #233 load safety pattern to AVX512
Shnatsel May 27, 2026
fa81bb8
Merge main PR #234: replace by-value transmutes
Shnatsel May 27, 2026
b5de7ff
Apply PR #234 transmute pattern to AVX512
Shnatsel May 27, 2026
0c9535b
Merge main PR #235: implement safe reference casts
Shnatsel May 27, 2026
ec42970
Apply PR #235 reference-cast pattern to AVX512
Shnatsel May 27, 2026
a593499
Merge main PR #237: replace NEON unsafe loads
Shnatsel May 27, 2026
9ec500c
Record no branch-specific changes for PR #237
Shnatsel May 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ env:
# version like 1.70. Note that we only specify MAJOR.MINOR and not PATCH so that bugfixes still
# come automatically. If the version specified here is no longer the latest stable version,
# then please feel free to submit a PR that adjusts it along with the potential clippy fixes.
RUST_STABLE_VER: "1.88" # In quotes because otherwise (e.g.) 1.70 would be interpreted as 1.7
RUST_STABLE_VER: "1.89" # In quotes because otherwise (e.g.) 1.70 would be interpreted as 1.7
# The purpose of checking with the minimum supported Rust toolchain is to detect its staleness.
# If the compilation fails, then the version specified here needs to be bumped up to reality.
# Be sure to also update the rust-version property in the workspace Cargo.toml file,
# plus all the README.md files of the affected packages.
RUST_MIN_VER: "1.88"
RUST_MIN_VER: "1.89"
# List of packages that will be checked with the minimum supported Rust version.
# This should be limited to packages that are intended for publishing.
RUST_MIN_VER_PKGS: "-p fearless_simd"
Expand Down Expand Up @@ -268,8 +268,7 @@ jobs:
- name: run tests on CPU with AVX-512
# Github Actions doesn't give us AVX-512 so this is the only way to exercise AVX-512 codepaths on CI.
# -icl stands for Ice Lake. Technically Skylake added AVX-512 first, but it's mostly useless there due to
# downclocking. When we do eventually add explicit AVX-512 support, we'll likely target the Ice Lake feature
# level.
# downclocking, so our explicit AVX-512 level targets Ice Lake.
run: ${SDE_PKG}/sde64 -icl -- cargo test $CARGO_TEST_ARGS

test-aarch64-qemu:
Expand Down
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,15 @@ You can find its changes [documented below](#041-2026-05-16).

## [Unreleased]

This release has an [MSRV][] of 1.88.
This release has an [MSRV][] of 1.89.

### Added

- Added Ice Lake-class AVX-512 support with a generated `Avx512` level and 512-bit native-width vector types.

### Changed

- The MSRV is now Rust 1.89.

## [0.4.1][] (2026-05-16)

Expand Down
5 changes: 3 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ license = "Apache-2.0 OR MIT"
repository = "https://github.com/linebender/fearless_simd"
# Keep in sync with RUST_MIN_VER in .github/workflows/ci.yml, with the relevant README.md files
# and with the MSRV in the `Unreleased` section of CHANGELOG.md.
rust-version = "1.88"
rust-version = "1.89"

[workspace.lints]

Expand Down Expand Up @@ -44,10 +44,11 @@ clippy.collection_is_never_read = "warn"
clippy.default_trait_access = "warn"
clippy.dbg_macro = "warn"
clippy.debug_assert_with_mut_call = "warn"
clippy.disallowed_methods = "deny"
clippy.doc_markdown = "warn"
clippy.fn_to_numeric_cast_any = "warn"
clippy.infinite_loop = "warn"
clippy.large_stack_arrays = "warn"
clippy.large_stack_arrays = "allow" # appears to be buggy as of 1.93, fixed in 1.95. TODO: re-enable
clippy.mismatching_type_param_order = "warn"
clippy.missing_assert_message = "warn"
clippy.missing_fields_in_debug = "warn"
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ It benefited from conversations with Luca Versari, though he is not responsible

## Minimum supported Rust Version (MSRV)

This version of Fearless SIMD has been verified to compile with **Rust 1.88** and later.
This version of Fearless SIMD has been verified to compile with **Rust 1.89** and later.

Future versions of Fearless SIMD might increase the Rust version requirement.
It will not be treated as a breaking change and as such can even happen with small patch releases.
Expand Down
2 changes: 2 additions & 0 deletions check_targets.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ cargo check -p fearless_simd --target aarch64-linux-android --features force_su
cargo check -p fearless_simd --target aarch64-linux-android

# x86_64, at all supported static SIMD levels.
RUSTFLAGS=-Ctarget-cpu=icelake-server cargo check -p fearless_simd --target x86_64-unknown-linux-gnu
RUSTFLAGS=-Ctarget-cpu=icelake-server cargo check -p fearless_simd --target x86_64-unknown-linux-gnu --features force_support_fallback
RUSTFLAGS=-Ctarget-feature=+avx2,+fma cargo check -p fearless_simd --target x86_64-unknown-linux-gnu
RUSTFLAGS=-Ctarget-feature=+avx2,+fma cargo check -p fearless_simd --target x86_64-unknown-linux-gnu --features force_support_fallback
RUSTFLAGS=-Ctarget-feature=+sse4.2 cargo check -p fearless_simd --target x86_64-unknown-linux-gnu
Expand Down
2 changes: 1 addition & 1 deletion fearless_simd/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ At least one of `std` and `libm` is required; `std` overrides `libm`.

## Minimum supported Rust Version (MSRV)

This version of Fearless SIMD has been verified to compile with **Rust 1.88** and later.
This version of Fearless SIMD has been verified to compile with **Rust 1.89** and later.

Future versions of Fearless SIMD might increase the Rust version requirement.
It will not be treated as a breaking change and as such can even happen with small patch releases.
Expand Down
4 changes: 4 additions & 0 deletions fearless_simd/src/generated.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@

#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
mod avx2;
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
mod avx512;
mod fallback;
#[cfg(target_arch = "aarch64")]
mod neon;
Expand All @@ -54,6 +56,8 @@ mod wasm;

#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
pub use avx2::*;
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
pub use avx512::*;
pub use fallback::*;
#[cfg(target_arch = "aarch64")]
pub use neon::*;
Expand Down
Loading
Loading