All instructions

04 SME · slice store

ZA store

W12 picks a horizontal slice of the ZA tile; its active elements walk out to memory at x0.

Instruction
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]

0,02
0,10
0,23
0,31
1,01
1,14
1,20
1,32
2,00
2,11
2,25
2,33
3,03
3,12
3,21
3,30

mem

[x0]8
[x0,#4]3
[x0,#8]6
[x0,#12]1
[x0,#16]7

mem[x0, 4] ← ZA[w12]

Ready. Memory still holds the values it had before this store.

Arrow keys step, space plays or pauses.

Reading the picture

  1. 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.

  2. 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.

  3. 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}.