Scalar index of first true predicate element (predicated)
Determines the index of the first active and true element of the source predicate, or minus one if there are no active and true elements, and places the scalar result in the destination general-purpose register.
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 |
0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | size | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | Pg | 0 | Pn | Rd | |||||||||||
opc |
if !IsFeatureImplemented(FEAT_SVE2p2) && !IsFeatureImplemented(FEAT_SME2p2) then EndOfDecode(Decode_UNDEF); constant integer esize = 8 << UInt(size); constant integer g = UInt(Pg); constant integer n = UInt(Pn); constant integer d = UInt(Rd);
<Xd> |
Is the 64-bit name of the destination general-purpose register, encoded in the "Rd" field. |
<Pg> |
Is the name of the governing scalable predicate register, encoded in the "Pg" field. |
<Pn> |
Is the name of the source scalable predicate register, encoded in the "Pn" field. |
<T> |
Is the size specifier,
encoded in
|
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(PL) operand = P[n, PL]; integer index = -1; for e = 0 to elements-1 if (index == -1 && ActivePredicateElement(mask, e, esize) && ActivePredicateElement(operand, e, esize)) then index = e; X[d, 64] = index<63:0>;