07 SVE · deinterleave
UZP1
Elements 0 and 2 of each source walk into the destination — even lanes only.
uzp1 z0.s, z1.s, z2.s
Types: z0.s, z1.s, z2.s — 32-bit float, 4 lanes each. Drawn at SVL = 128 bits; at SVL = 512 one uzp1 still fills a whole vector: 8 + 8 even elements.
z1.s
z2.s
z0.s
z0 ← evens of z1, then evens of z2
Ready. z0.s will be rebuilt from the even elements.
Arrow keys step, space plays or pauses.
This browser prefers reduced motion. Play still runs the instruction and jumps straight to the result.
Reading the picture
-
Even and odd
uzp1 takes elements 0 and 2 of each source — the dimmed odd lanes never move. uzp2 takes 1 and 3 instead; together they split one interleaved stream into two.
-
Why deinterleave
Stereo audio, colour planes, interleaved captures: memory often arrives interleaved, while SIMD wants contiguous lanes of one kind. uzp is that bridge — and zip1 interleaves back.
-
No predicate here
uzp moves whole vectors, so there is no p0. Every element is data being shuffled, not work being masked — TBL and FMLAL are the other unpredicated instruction pages here.
This pass unpacks z1.s = {1, 9, 3, 8} and z2.s = {5, 7, 2, 6}.