Open a74nh opened 12 months ago
Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics See info in area-owners.md if you want to be subscribed.
Author: | a74nh |
---|---|
Assignees: | - |
Labels: | `area-System.Runtime.Intrinsics` |
Milestone: | - |
/// Full API
public abstract class Sve : AdvSimd /// Feature: FEAT_SVE2 Category: counting
{
/// CountMatchingElements : Count matching elements
/// svuint32_t svhistcnt[_s32]_z(svbool_t pg, svint32_t op1, svint32_t op2) : "HISTCNT Zresult.S, Pg/Z, Zop1.S, Zop2.S"
public static unsafe Vector<uint> CountMatchingElements(Vector<int> mask, Vector<int> left, Vector<int> right);
/// svuint64_t svhistcnt[_s64]_z(svbool_t pg, svint64_t op1, svint64_t op2) : "HISTCNT Zresult.D, Pg/Z, Zop1.D, Zop2.D"
public static unsafe Vector<ulong> CountMatchingElements(Vector<long> mask, Vector<long> left, Vector<long> right);
/// svuint32_t svhistcnt[_u32]_z(svbool_t pg, svuint32_t op1, svuint32_t op2) : "HISTCNT Zresult.S, Pg/Z, Zop1.S, Zop2.S"
public static unsafe Vector<uint> CountMatchingElements(Vector<uint> mask, Vector<uint> left, Vector<uint> right);
/// svuint64_t svhistcnt[_u64]_z(svbool_t pg, svuint64_t op1, svuint64_t op2) : "HISTCNT Zresult.D, Pg/Z, Zop1.D, Zop2.D"
public static unsafe Vector<ulong> CountMatchingElements(Vector<ulong> mask, Vector<ulong> left, Vector<ulong> right);
/// CountMatchingElementsIn128BitSegments : Count matching elements in 128-bit segments
/// svuint8_t svhistseg[_s8](svint8_t op1, svint8_t op2) : "HISTSEG Zresult.B, Zop1.B, Zop2.B"
public static unsafe Vector<byte> CountMatchingElementsIn128BitSegments(Vector<sbyte> left, Vector<sbyte> right);
/// svuint8_t svhistseg[_u8](svuint8_t op1, svuint8_t op2) : "HISTSEG Zresult.B, Zop1.B, Zop2.B"
public static unsafe Vector<byte> CountMatchingElementsIn128BitSegments(Vector<byte> left, Vector<byte> right);
/// total method signatures: 6
/// total method names: 2
}
/// Total ACLE covered across API: 6
/// Rejected:
/// None yet
This contributes to https://github.com/dotnet/runtime/issues/93095
It covers instructions in FEAT_SVE2 related to counting. They are similar to the SVE counting methods.
This list was auto generated from the C ACLE for SVE, and is in three parts:
The methods list reduced down to Vector versions. All possible varaints of T are given above the method. The complete list of all methods. The corresponding ACLE methods and SVE instructions are given above the method. All rejected ACLE methods. These are methods we have agreed that do not need including in C#. Where possible, existing C# naming conventions have been matched.
Many of the C functions include predicate argument(s), of type svbool_t as the first argument. These are missing from the C# method. It is expected that the Jit will create predicates where required, or combine with uses of conditionalSelect(). For more discussion see https://github.com/dotnet/runtime/issues/88140 comment.
Updated to reflect review comments from other API proposals.
CountMatchingElements
Count matching elements in vector Compares each active element of the
left
with all active elements with an element number less than or equal to its own inright
, and places the count of matching elements in the corresponding element of the destination vector. Inactive elements in the destination vector are set to zero.CountMatchingElementsIn128BitSegments
Count matching elements in vector segments Compares each 8-bit byte element of
left
with all of the elements in the corresponding 128-bit segment ofright
and places the count of matching elements in the corresponding element of the destination vector.