CNTP (predicate as counter)

Set scalar to count from predicate-as-counter

This instruction determines the number of true elements in the source predicate, up to the total number of elements in two or four vectors, and places the scalar result in the destination general-purpose register.

SVE2
(FEAT_SME2 || FEAT_SVE2p1)

313029282726252423222120191817161514131211109876543210
00100101size10000010000vl1PNnRd
opc

Encoding

CNTP <Xd>, <PNn>.<T>, <vl>

Decode for this encoding

if !IsFeatureImplemented(FEAT_SME2) && !IsFeatureImplemented(FEAT_SVE2p1) then EndOfDecode(Decode_UNDEF); end; let esize : integer{} = 8 << UInt(size); let n : integer = UInt(PNn); let d : integer = UInt(Rd); let width : integer = 2 << UInt(vl);

Assembler Symbols

<Xd>

Is the 64-bit name of the destination general-purpose register, encoded in the "Rd" field.

<PNn>

Is the name of the source scalable predicate register, with predicate-as-counter encoding, encoded in the "PNn" field.

<T>

Is the size specifier, encoded in size:

size <T>
00 B
01 H
10 S
11 D
<vl>

Is the vl specifier, encoded in vl:

vl <vl>
0 VLx2
1 VLx4

Operation

if IsFeatureImplemented(FEAT_SVE2p1) then CheckSVEEnabled(); else CheckStreamingSVEEnabled(); end; let VL : integer{} = CurrentVL(); let PL : integer{} = VL DIV 8; let elements : integer = VL DIV esize; let pred : bits(PL) = P{}(n); let mask : bits(PL*4) = CounterToPredicate{}(pred[15:0]); var sum : bits(64) = Zeros{}; let maxelements : integer = elements * width; for e = 0 to maxelements-1 do if ActivePredicateElement{PL*4}(mask, e, esize) then sum = sum + 1; end; end; X{64}(d) = sum;


2026-03_rel 2026-03-26 20:48:11

Copyright © 2010-2026 Arm Limited or its affiliates. All rights reserved. This document is Non-Confidential.