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.
| 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 | 0 | 1 | 0 | 0 | 0 | 0 | vl | 1 | PNn | Rd | ||||||||
| opc | |||||||||||||||||||||||||||||||
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);
| <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
|
| <vl> |
Is the vl specifier,
encoded in
|
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.