04 SME · slice store
ZA store
W12 picks a horizontal slice of the ZA tile; its active elements walk out to memory at x0.
st1w { za0h.s[w12, 0] }, p0, [x0]
Types: za0h.s — 32-bit elements (words): st1w moves words regardless of what they hold, hence the plain integers here. 4 elements per slice; w12 picks one of 4 rows. Drawn at SVL = 128 bits, so a slice is 16 bytes; at SVL = 512 there are 16 rows and 64-byte slices.
p0
za0h.s[w12]
mem
mem[x0, 4] ← ZA[w12]
Ready. Memory still holds the values it had before this store.
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
-
Choosing the slice
za0h.s names a horizontal slice of the ZA tile, and W12 says which one: row w12 of za0.s. The selector above changes W12 — watch the highlighted slice move.
-
A store has no /z
p0 alone governs the elements: active ones are written, inactive ones leave memory exactly as it was. There is nothing to zero — memory already holds something. Click a predicate bit to switch an element off and watch memory keep its old word.
-
Closing the loop
Pair this with FMOPA and LD1W: load operands, build a product in ZA, then store one slice of the result back to memory. That is an entire SME kernel in three instructions.
This pass stores row 0 of the tile into memory starting as {8, 3, 6, 1}.