MOVT (vector to table)

Move vector register to ZT0

This instruction copies the source vector register to ZT0 at the vector length offset specified by the immediate index. When the index is zero, the instruction writes zeroes to the most significant (512-VL) bits of the ZT0 register. When the index is not zero, the unindexed portions of ZT0 remain unchanged.

This instruction is unpredicated.

Encoding: SME2

Variants: FEAT_SME_LUTv2 (ARMv9.5)

313029282726252423222120191817161514131211109876543210
1100000001001111000011111
off2opcZt

MOVT ZT0{[<offs>, MUL VL]}, <Zt>

Decoding algorithm

if !IsFeatureImplemented(FEAT_SME_LUTv2) then EndOfDecode(Decode_UNDEF);
constant integer t = UInt(Zt);
constant integer imm = UInt(off2);

Operation

CheckStreamingSVEEnabled();
CheckSMEZT0Enabled();
constant integer VL = CurrentVL;
constant integer tsize = if VL <= 512 then VL else 512;
constant integer offset = imm MOD (512 DIV tsize);
bits(512) result = if imm == 0 then Zeros(512) else ZT0[512];

Elem[result, offset, tsize] = Z[t, VL];
ZT0[512] = result;

Explanations

<offs>: Is the vector length offset, in the range 0 to 3, defaulting to 0 when omitted, encoded in the "off2" field.
<Zt>: Is the name of the scalable vector register to be transferred, encoded in the "Zt" field.

Operational Notes

If PSTATE.DIT is 1: