-
Notifications
You must be signed in to change notification settings - Fork 91
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.
Xerandael, evandrocoan and Pr0methean
Metadata
Metadata
Assignees
Labels
No labels