Add generic mask type aliases (mask8xN, mask16xN, etc.)#489
Open
GrigoryEvko wants to merge 1 commit intorust-lang:masterfrom
Open
Add generic mask type aliases (mask8xN, mask16xN, etc.)#489GrigoryEvko wants to merge 1 commit intorust-lang:masterfrom
GrigoryEvko wants to merge 1 commit intorust-lang:masterfrom
Conversation
This completes issue rust-lang#447 by adding missing mask generic aliases and fixing critical undefined behavior in test suite. ## Changes **Added mask generic aliases:** - mask8xN<const N: usize> for i8 masks - mask16xN<const N: usize> for i16 masks - mask32xN<const N: usize> for i32 masks - mask64xN<const N: usize> for i64 masks - masksizexN<const N: usize> for isize masks **Exported in prelude:** All 5 mask aliases now available via `use core::simd::prelude::*` **Fixed critical UB:** Removed unsafe transmute_copy that was reading uninitialized memory for types larger than u8. **Added comprehensive tests (30 tests):** - Maximum lane count (N=64) - Non-power-of-2 lane counts (N=3,5,6,7,9,15,31,63) - Mask interactions (select, any, all) - Turbofish syntax - Trait bounds - Complex generics (Vec, Option) - Const contexts - All edge cases ## API Consistency Before: Had u32xN, f32xN but no mask generic aliases After: Complete API with both vector AND mask generic aliases ## Testing All 15,483 tests passing. Zero clippy warnings. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
f95e718 to
5ad5193
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Completes #447 by adding missing mask generic aliases for API consistency.
Changes
Added 5 mask generic aliases:
mask8xN<const N: usize>for 8-bit masksmask16xN<const N: usize>for 16-bit masksmask32xN<const N: usize>for 32-bit masksmask64xN<const N: usize>for 64-bit masksmasksizexN<const N: usize>for pointer-sized masksExported in prelude: All 5 mask aliases now available via
use core::simd::prelude::*Added comprehensive tests: 12 test functions covering:
Rationale
Issue #447 requested vector generic aliases (u32xN, f32xN, etc.) which already exist. This PR adds the corresponding mask generic aliases for API completeness and consistency.
Before: Vector generics exist, but masks require verbose
Mask<i32, N>syntaxAfter: Both vectors and masks have ergonomic generic aliases
Previously there were concerns about possible ambiguity of naming, discussion can be continued here I believe!