Open
Description
A "shuffle", in SIMD terms, takes a SIMD vector (or possibly two vectors) and a pattern of source lane indexes (usually as an immediate), and then produces a new SIMD vector where the output is the source lane values in the pattern given.
Example (pseudo-code):
let a = simd(5, 6, 7, 8);
assert_eq!(shuffle(a, [2, 2, 1, 0]), simd(7, 7, 6, 5));
Shuffles are very important for particular SIMD tasks, but the requirement that the input be a compile time constant complicates the API:
- Rust doesn't have a stable way for users to express this, so they never expect it.
- Rather than just having a const-required arg (which totally works) a lot of people have said "you should use const generics for that!" (which actually doesn't work as well on current rust).
Still, min_const_generics
is aimed to be stable by the end of the year and most likely that'll be enough to do shuffle basics on stable.
Metadata
Metadata
Assignees
Labels
No labels