REVD
Reverse 64-bit doublewords in elements (predicated)
Reverse the order of 64-bit doublewords within each active element of the source vector, and place the results in the corresponding elements of the destination vector. Inactive elements in the destination vector register remain unmodified.
Green
True
True
0
0
0
0
0
1
0
1
0
0
1
0
1
1
1
0
1
0
0
REVD <Zd>.Q, <Pg>/M, <Zn>.Q
if !IsFeatureImplemented(FEAT_SME) && !IsFeatureImplemented(FEAT_SVE2p1) then UNDEFINED;
constant integer esize = 128;
constant integer g = UInt(Pg);
constant integer n = UInt(Zn);
constant integer d = UInt(Zd);
constant integer swsize = 64;
<Zd>
Is the name of the destination scalable vector register, encoded in the "Zd" field.
<Pg>
Is the name of the governing scalable predicate register P0-P7, encoded in the "Pg" field.
<Zn>
Is the name of the source scalable vector register, encoded in the "Zn" field.
CheckSVEEnabled();
constant integer VL = CurrentVL;
constant integer PL = VL DIV 8;
constant integer elements = VL DIV esize;
constant bits(PL) mask = P[g, PL];
constant bits(VL) operand = if AnyActiveElement(mask, esize) then Z[n, VL] else Zeros(VL);
bits(VL) result = Z[d, VL];
for e = 0 to elements-1
if ActivePredicateElement(mask, e, esize) then
constant bits(esize) element = Elem[operand, e, esize];
Elem[result, e, esize] = Reverse(element, swsize);
Z[d, VL] = result;