Concatenate elements from two vectors
This instruction concatenates every second element from each of the first and second source vectors and places them in the corresponding elements of the two destination vectors.
This instruction is unpredicated.
Variants: FEAT_SME2 (ARMv9.3)
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | ||||||||||||||||
| size | Zm | Zn | Zd | op | |||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
UZP { <Zd1>.<T>-<Zd2>.<T> }, <Zn>.<T>, <Zm>.<T>
if !IsFeatureImplemented(FEAT_SME2) then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer n = UInt(Zn); constant integer m = UInt(Zm); constant integer d = UInt(Zd:'0');
Variants: FEAT_SME2 (ARMv9.3)
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | ||||||||||||||
| Zm | Zn | Zd | op | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
UZP { <Zd1>.Q-<Zd2>.Q }, <Zn>.Q, <Zm>.Q
if !IsFeatureImplemented(FEAT_SME2) then EndOfDecode(Decode_UNDEF); if MaxImplementedSVL() < 256 then EndOfDecode(Decode_UNDEF); constant integer esize = 128; constant integer n = UInt(Zn); constant integer m = UInt(Zm); constant integer d = UInt(Zd:'0');
CheckStreamingSVEEnabled(); constant integer VL = CurrentVL; if VL < esize * 2 then EndOfDecode(Decode_UNDEF); constant integer pairs = VL DIV (esize * 2); bits(VL) result0; bits(VL) result1; for r = 0 to 1 constant integer base = r * pairs; constant bits(VL) operand = if r == 0 then Z[n, VL] else Z[m, VL]; for p = 0 to pairs-1 Elem[result0, base+p, esize] = Elem[operand, 2*p+0, esize]; Elem[result1, base+p, esize] = Elem[operand, 2*p+1, esize]; Z[d+0, VL] = result0; Z[d+1, VL] = result1;
If PSTATE.DIT is 1: