ZERO (tiles)

Zero a list of 64-bit element ZA tiles

This instruction zeroes all bytes within each of the up to eight listed 64-bit element tiles named ZA0.D to ZA7.D, leaving the other 64-bit element tiles unmodified.

This instruction does not require the PE to be in Streaming SVE mode, and it is expected that this instruction will not experience a significant slowdown due to contention with other PEs that are executing in Streaming SVE mode.

For programmer convenience an assembler must also accept the names of 32-bit, 16-bit, and 8-bit element tiles which are converted into the corresponding set of 64-bit element tiles.

In accordance with the architecturally defined mapping between different element size tiles:

  • Zeroing the 8-bit element tile name ZA0.B, or the entire array name ZA, is equivalent to zeroing all eight 64-bit element tiles named ZA0.D to ZA7.D.
  • Zeroing the 16-bit element tile name ZA0.H is equivalent to zeroing 64-bit element tiles named ZA0.D, ZA2.D, ZA4.D, and ZA6.D.
  • Zeroing the 16-bit element tile name ZA1.H is equivalent to zeroing 64-bit element tiles named ZA1.D, ZA3.D, ZA5.D, and ZA7.D.
  • Zeroing the 32-bit element tile name ZA0.S is equivalent to zeroing 64-bit element tiles named ZA0.D and ZA4.D.
  • Zeroing the 32-bit element tile name ZA1.S is equivalent to zeroing 64-bit element tiles named ZA1.D and ZA5.D.
  • Zeroing the 32-bit element tile name ZA2.S is equivalent to zeroing 64-bit element tiles named ZA2.D and ZA6.D.
  • Zeroing the 32-bit element tile name ZA3.S is equivalent to zeroing 64-bit element tiles named ZA3.D and ZA7.D.
  • The preferred disassembly of this instruction uses the shortest list of tile names that represent the encoded immediate mask.

    For example:

  • An immediate which encodes 64-bit element tiles ZA0.D, ZA1.D, ZA4.D, and ZA5.D is disassembled as {ZA0.S, ZA1.S}.
  • An immediate which encodes 64-bit element tiles ZA0.D, ZA2.D, ZA4.D, and ZA6.D is disassembled as {ZA0.H}.
  • An all-ones immediate is disassembled as {ZA}.
  • An all-zeros immediate is disassembled as an empty list { }.
  • Encoding: SME

    Variants: FEAT_SME (PROFILE_A)

    313029282726252423222120191817161514131211109876543210
    110000000000100000000000
    imm8

    ZERO { {<mask>} }

    Decoding algorithm

    if !IsFeatureImplemented(FEAT_SME) then EndOfDecode(Decode_UNDEF);
    constant bits(8) mask = imm8;
    constant integer esize = 64;

    Operation

    CheckSMEAndZAEnabled();
    constant integer SVL = CurrentSVL;
    constant integer dim = SVL DIV esize;
    constant bits(dim*dim*esize) result = Zeros(dim*dim*esize);
    
    if IsFeatureImplemented(FEAT_TME) && TSTATE.depth > 0 then
        FailTransaction(TMFailure_ERR, FALSE);
    
    for i = 0 to 7
        if mask == '1' then ZAtile[i, esize, dim*dim*esize] = result;

    Explanations

    <mask>: Is the optional list of up to eight 64-bit element tile names separated by commas, encoded in the "imm8" field.

    Operational Notes

    If PSTATE.DIT is 1: