CNTP (predicate as counter) Set scalar to count from predicate-as-counter Counts the number of true elements in the source predicate and places the scalar result in the destination general-purpose register. Green False 0 0 1 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 1 CNTP <Xd>, <PNn>.<T>, <vl> if !IsFeatureImplemented(FEAT_SME2) && !IsFeatureImplemented(FEAT_SVE2p1) then UNDEFINED; constant integer esize = 8 << UInt(size); constant integer n = UInt(PNn); constant integer d = UInt(Rd); constant integer width = 2 << UInt(vl); <Xd> Is the 64-bit name of the destination general-purpose register, encoded in the "Rd" field. <PNn> Is the name of the first source scalable predicate register, with predicate-as-counter encoding, encoded in the "PNn" field. <T> Is the size specifier, size <T> 00 B 01 H 10 S 11 D
<vl> Is the vl specifier, vl <vl> 0 VLx2 1 VLx4
if IsFeatureImplemented(FEAT_SVE2p1) then CheckSVEEnabled(); else CheckStreamingSVEEnabled(); constant integer VL = CurrentVL; constant integer PL = VL DIV 8; constant integer elements = VL DIV esize; constant bits(PL) pred = P[n, PL]; constant bits(PL*4) mask = CounterToPredicate(pred<15:0>, PL*4); bits(64) sum = Zeros(64); constant integer limit = elements * width; for e = 0 to limit-1 if ActivePredicateElement(mask, e, esize) then sum = sum + 1; X[d, 64] = sum;