CNTP (predicate)
Set scalar to count of true predicate elements
Counts the number of active and true elements in the source predicate and places the scalar result in the destination general-purpose register. Inactive predicate elements are not counted.
Green
True
0
0
1
0
0
1
0
1
1
0
0
0
0
0
1
0
0
CNTP <Xd>, <Pg>, <Pn>.<T>
if !IsFeatureImplemented(FEAT_SVE) && !IsFeatureImplemented(FEAT_SME) then UNDEFINED;
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,
size
<T>
00
B
01
H
10
S
11
D
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];
bits(64) sum = Zeros(64);
for e = 0 to elements-1
if ActivePredicateElement(mask, e, esize) && ActivePredicateElement(operand, e, esize) then
sum = sum + 1;
X[d, 64] = sum;