-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[API Proposal]: Arm64: FEAT_SVE2: counting #94017
Comments
Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics Issue Detailsnamespace System.Runtime.Intrinsics.Arm
/// VectorT Summary
public abstract class Sve : AdvSimd /// Feature: FEAT_SVE2 Category: counting
{
/// T: [uint, int], [ulong, long]
public static unsafe Vector<T> CountMatchingElements(Vector<T2> left, Vector<T2> right); // HISTCNT
/// T: uint, ulong
public static unsafe Vector<T> CountMatchingElements(Vector<T> left, Vector<T> right); // HISTCNT
public static unsafe Vector<byte> CountMatchingElementsIn128BitSegments(Vector<sbyte> left, Vector<sbyte> right);
public static unsafe Vector<byte> CountMatchingElementsIn128BitSegments(Vector<byte> left, Vector<byte> right);
/// total method signatures: 4
}
|
/// 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 #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. 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 #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.The text was updated successfully, but these errors were encountered: