-
Couldn't load subscription status.
- Fork 5.2k
Closed
Labels
api-approvedAPI was approved in API review, it can be implementedAPI was approved in API review, it can be implementedarea-System.Runtime.Intrinsicsarm-sveWork related to arm64 SVE/SVE2 supportWork related to arm64 SVE/SVE2 support
Milestone
Description
namespace System.Runtime.Intrinsics.Arm
/// VectorT Summary
public abstract class Sve : AdvSimd /// Feature: FEAT_SVE Category: counting
{
public static unsafe ulong Count16BitElements(); // CNTH
public static unsafe ulong Count16BitElements(enum SveMaskPattern pattern); // CNTH
public static unsafe ulong Count32BitElements(); // CNTW
public static unsafe ulong Count32BitElements(enum SveMaskPattern pattern); // CNTW
public static unsafe ulong Count64BitElements(); // CNTD
public static unsafe ulong Count64BitElements(enum SveMaskPattern pattern); // CNTD
public static unsafe ulong Count8BitElements(); // CNTB
public static unsafe ulong Count8BitElements(enum SveMaskPattern pattern); // CNTB
/// T: byte, ushort, uint, ulong
public static unsafe ulong GetActiveElementCount(Vector<T> mask, Vector<T> from); // CNTP
/// T: [byte, sbyte], [ushort, short], [uint, int], [ulong, long]
public static unsafe Vector<T> LeadingSignCount(Vector<T2> value); // CLS // predicated, MOVPRFX
/// T: [byte, sbyte], [ushort, short], [uint, int], [ulong, long]
public static unsafe Vector<T> LeadingZeroCount(Vector<T2> value); // CLZ // predicated, MOVPRFX
/// T: byte, ushort, uint, ulong
public static unsafe Vector<T> LeadingZeroCount(Vector<T> value); // CLZ // predicated, MOVPRFX
/// T: [uint, float], [ulong, double], [byte, sbyte], [ushort, short], [uint, int], [ulong, long]
public static unsafe Vector<T> PopCount(Vector<T2> value); // CNT // predicated, MOVPRFX
/// T: byte, ushort, uint, ulong
public static unsafe Vector<T> PopCount(Vector<T> value); // CNT // predicated, MOVPRFX
/// T: byte, ushort, uint, ulong
public static unsafe int SaturatingDecrementByActiveElementCount(int op, Vector<T> from); // SQDECP
/// T: byte, ushort, uint, ulong
public static unsafe long SaturatingDecrementByActiveElementCount(long op, Vector<T> from); // SQDECP
/// T: byte, ushort, uint, ulong
public static unsafe uint SaturatingDecrementByActiveElementCount(uint op, Vector<T> from); // UQDECP
/// T: byte, ushort, uint, ulong
public static unsafe ulong SaturatingDecrementByActiveElementCount(ulong op, Vector<T> from); // UQDECP
/// T: short, int, long, ushort, uint, ulong
public static unsafe Vector<T> SaturatingDecrementByActiveElementCount(Vector<T> op, Vector<T> from); // SQDECP or UQDECP // MOVPRFX
public static unsafe int SaturatingDecrementByteElementCount(int op, ulong imm_factor); // SQDECB
public static unsafe long SaturatingDecrementByteElementCount(long op, ulong imm_factor); // SQDECB
public static unsafe uint SaturatingDecrementByteElementCount(uint op, ulong imm_factor); // UQDECB
public static unsafe ulong SaturatingDecrementByteElementCount(ulong op, ulong imm_factor); // UQDECB
public static unsafe int SaturatingDecrementByteElementCount(int op, enum SveMaskPattern pattern, ulong imm_factor); // SQDECB
public static unsafe long SaturatingDecrementByteElementCount(long op, enum SveMaskPattern pattern, ulong imm_factor); // SQDECB
public static unsafe uint SaturatingDecrementByteElementCount(uint op, enum SveMaskPattern pattern, ulong imm_factor); // UQDECB
public static unsafe ulong SaturatingDecrementByteElementCount(ulong op, enum SveMaskPattern pattern, ulong imm_factor); // UQDECB
public static unsafe int SaturatingDecrementInt16ElementCount(int op, ulong imm_factor); // SQDECH
public static unsafe long SaturatingDecrementInt16ElementCount(long op, ulong imm_factor); // SQDECH
public static unsafe uint SaturatingDecrementInt16ElementCount(uint op, ulong imm_factor); // UQDECH
public static unsafe ulong SaturatingDecrementInt16ElementCount(ulong op, ulong imm_factor); // UQDECH
public static unsafe int SaturatingDecrementInt16ElementCount(int op, enum SveMaskPattern pattern, ulong imm_factor); // SQDECH
public static unsafe long SaturatingDecrementInt16ElementCount(long op, enum SveMaskPattern pattern, ulong imm_factor); // SQDECH
public static unsafe uint SaturatingDecrementInt16ElementCount(uint op, enum SveMaskPattern pattern, ulong imm_factor); // UQDECH
public static unsafe ulong SaturatingDecrementInt16ElementCount(ulong op, enum SveMaskPattern pattern, ulong imm_factor); // UQDECH
/// T: short, ushort
public static unsafe Vector<T> SaturatingDecrementInt16ElementCount(Vector<T> op, ulong imm_factor); // SQDECH or UQDECH // MOVPRFX
/// T: short, ushort
public static unsafe Vector<T> SaturatingDecrementInt16ElementCount(Vector<T> op, enum SveMaskPattern pattern, ulong imm_factor); // SQDECH or UQDECH // MOVPRFX
public static unsafe int SaturatingDecrementInt32ElementCount(int op, ulong imm_factor); // SQDECW
public static unsafe long SaturatingDecrementInt32ElementCount(long op, ulong imm_factor); // SQDECW
public static unsafe uint SaturatingDecrementInt32ElementCount(uint op, ulong imm_factor); // UQDECW
public static unsafe ulong SaturatingDecrementInt32ElementCount(ulong op, ulong imm_factor); // UQDECW
public static unsafe int SaturatingDecrementInt32ElementCount(int op, enum SveMaskPattern pattern, ulong imm_factor); // SQDECW
public static unsafe long SaturatingDecrementInt32ElementCount(long op, enum SveMaskPattern pattern, ulong imm_factor); // SQDECW
public static unsafe uint SaturatingDecrementInt32ElementCount(uint op, enum SveMaskPattern pattern, ulong imm_factor); // UQDECW
public static unsafe ulong SaturatingDecrementInt32ElementCount(ulong op, enum SveMaskPattern pattern, ulong imm_factor); // UQDECW
/// T: int, uint
public static unsafe Vector<T> SaturatingDecrementInt32ElementCount(Vector<T> op, ulong imm_factor); // SQDECW or UQDECW // MOVPRFX
/// T: int, uint
public static unsafe Vector<T> SaturatingDecrementInt32ElementCount(Vector<T> op, enum SveMaskPattern pattern, ulong imm_factor); // SQDECW or UQDECW // MOVPRFX
public static unsafe int SaturatingDecrementInt64ElementCount(int op, ulong imm_factor); // SQDECD
public static unsafe long SaturatingDecrementInt64ElementCount(long op, ulong imm_factor); // SQDECD
public static unsafe uint SaturatingDecrementInt64ElementCount(uint op, ulong imm_factor); // UQDECD
public static unsafe ulong SaturatingDecrementInt64ElementCount(ulong op, ulong imm_factor); // UQDECD
public static unsafe int SaturatingDecrementInt64ElementCount(int op, enum SveMaskPattern pattern, ulong imm_factor); // SQDECD
public static unsafe long SaturatingDecrementInt64ElementCount(long op, enum SveMaskPattern pattern, ulong imm_factor); // SQDECD
public static unsafe uint SaturatingDecrementInt64ElementCount(uint op, enum SveMaskPattern pattern, ulong imm_factor); // UQDECD
public static unsafe ulong SaturatingDecrementInt64ElementCount(ulong op, enum SveMaskPattern pattern, ulong imm_factor); // UQDECD
/// T: long, ulong
public static unsafe Vector<T> SaturatingDecrementInt64ElementCount(Vector<T> op, ulong imm_factor); // SQDECD or UQDECD // MOVPRFX
/// T: long, ulong
public static unsafe Vector<T> SaturatingDecrementInt64ElementCount(Vector<T> op, enum SveMaskPattern pattern, ulong imm_factor); // SQDECD or UQDECD // MOVPRFX
/// T: byte, ushort, uint, ulong
public static unsafe int SaturatingIncrementByActiveElementCount(int op, Vector<T> from); // SQINCP
/// T: byte, ushort, uint, ulong
public static unsafe long SaturatingIncrementByActiveElementCount(long op, Vector<T> from); // SQINCP
/// T: byte, ushort, uint, ulong
public static unsafe uint SaturatingIncrementByActiveElementCount(uint op, Vector<T> from); // UQINCP
/// T: byte, ushort, uint, ulong
public static unsafe ulong SaturatingIncrementByActiveElementCount(ulong op, Vector<T> from); // UQINCP
/// T: short, int, long, ushort, uint, ulong
public static unsafe Vector<T> SaturatingIncrementByActiveElementCount(Vector<T> op, Vector<T> from); // SQINCP or UQINCP // MOVPRFX
public static unsafe int SaturatingIncrementByteElementCount(int op, ulong imm_factor); // SQINCB
public static unsafe long SaturatingIncrementByteElementCount(long op, ulong imm_factor); // SQINCB
public static unsafe uint SaturatingIncrementByteElementCount(uint op, ulong imm_factor); // UQINCB
public static unsafe ulong SaturatingIncrementByteElementCount(ulong op, ulong imm_factor); // UQINCB
public static unsafe int SaturatingIncrementByteElementCount(int op, enum SveMaskPattern pattern, ulong imm_factor); // SQINCB
public static unsafe long SaturatingIncrementByteElementCount(long op, enum SveMaskPattern pattern, ulong imm_factor); // SQINCB
public static unsafe uint SaturatingIncrementByteElementCount(uint op, enum SveMaskPattern pattern, ulong imm_factor); // UQINCB
public static unsafe ulong SaturatingIncrementByteElementCount(ulong op, enum SveMaskPattern pattern, ulong imm_factor); // UQINCB
public static unsafe int SaturatingIncrementInt16ElementCount(int op, ulong imm_factor); // SQINCH
public static unsafe long SaturatingIncrementInt16ElementCount(long op, ulong imm_factor); // SQINCH
public static unsafe uint SaturatingIncrementInt16ElementCount(uint op, ulong imm_factor); // UQINCH
public static unsafe ulong SaturatingIncrementInt16ElementCount(ulong op, ulong imm_factor); // UQINCH
public static unsafe int SaturatingIncrementInt16ElementCount(int op, enum SveMaskPattern pattern, ulong imm_factor); // SQINCH
public static unsafe long SaturatingIncrementInt16ElementCount(long op, enum SveMaskPattern pattern, ulong imm_factor); // SQINCH
public static unsafe uint SaturatingIncrementInt16ElementCount(uint op, enum SveMaskPattern pattern, ulong imm_factor); // UQINCH
public static unsafe ulong SaturatingIncrementInt16ElementCount(ulong op, enum SveMaskPattern pattern, ulong imm_factor); // UQINCH
/// T: short, ushort
public static unsafe Vector<T> SaturatingIncrementInt16ElementCount(Vector<T> op, ulong imm_factor); // SQINCH or UQINCH // MOVPRFX
/// T: short, ushort
public static unsafe Vector<T> SaturatingIncrementInt16ElementCount(Vector<T> op, enum SveMaskPattern pattern, ulong imm_factor); // SQINCH or UQINCH // MOVPRFX
public static unsafe int SaturatingIncrementInt32ElementCount(int op, ulong imm_factor); // SQINCW
public static unsafe long SaturatingIncrementInt32ElementCount(long op, ulong imm_factor); // SQINCW
public static unsafe uint SaturatingIncrementInt32ElementCount(uint op, ulong imm_factor); // UQINCW
public static unsafe ulong SaturatingIncrementInt32ElementCount(ulong op, ulong imm_factor); // UQINCW
public static unsafe int SaturatingIncrementInt32ElementCount(int op, enum SveMaskPattern pattern, ulong imm_factor); // SQINCW
public static unsafe long SaturatingIncrementInt32ElementCount(long op, enum SveMaskPattern pattern, ulong imm_factor); // SQINCW
public static unsafe uint SaturatingIncrementInt32ElementCount(uint op, enum SveMaskPattern pattern, ulong imm_factor); // UQINCW
public static unsafe ulong SaturatingIncrementInt32ElementCount(ulong op, enum SveMaskPattern pattern, ulong imm_factor); // UQINCW
/// T: int, uint
public static unsafe Vector<T> SaturatingIncrementInt32ElementCount(Vector<T> op, ulong imm_factor); // SQINCW or UQINCW // MOVPRFX
/// T: int, uint
public static unsafe Vector<T> SaturatingIncrementInt32ElementCount(Vector<T> op, enum SveMaskPattern pattern, ulong imm_factor); // SQINCW or UQINCW // MOVPRFX
public static unsafe int SaturatingIncrementInt64ElementCount(int op, ulong imm_factor); // SQINCD
public static unsafe long SaturatingIncrementInt64ElementCount(long op, ulong imm_factor); // SQINCD
public static unsafe uint SaturatingIncrementInt64ElementCount(uint op, ulong imm_factor); // UQINCD
public static unsafe ulong SaturatingIncrementInt64ElementCount(ulong op, ulong imm_factor); // UQINCD
public static unsafe int SaturatingIncrementInt64ElementCount(int op, enum SveMaskPattern pattern, ulong imm_factor); // SQINCD
public static unsafe long SaturatingIncrementInt64ElementCount(long op, enum SveMaskPattern pattern, ulong imm_factor); // SQINCD
public static unsafe uint SaturatingIncrementInt64ElementCount(uint op, enum SveMaskPattern pattern, ulong imm_factor); // UQINCD
public static unsafe ulong SaturatingIncrementInt64ElementCount(ulong op, enum SveMaskPattern pattern, ulong imm_factor); // UQINCD
/// T: long, ulong
public static unsafe Vector<T> SaturatingIncrementInt64ElementCount(Vector<T> op, ulong imm_factor); // SQINCD or UQINCD // MOVPRFX
/// T: long, ulong
public static unsafe Vector<T> SaturatingIncrementInt64ElementCount(Vector<T> op, enum SveMaskPattern pattern, ulong imm_factor); // SQINCD or UQINCD // MOVPRFX
// All patterns used by PTRUE.
enum SveMaskPattern
{
SV_POW2 = 0, // The largest power of 2.
SV_VL1 = 1, // 1 element.
SV_VL2 = 2, // 2 elements.
SV_VL3 = 3, // 3 elements.
SV_VL4 = 4, // 4 elements.
SV_VL5 = 5, // 5 elements.
SV_VL6 = 6, // 6 elements.
SV_VL7 = 7, // 7 elements.
SV_VL8 = 8, // 8 elements.
SV_VL16 = 9, // 16 elements.
SV_VL32 = 10, // 32 elements.
SV_VL64 = 11, // 64 elements.
SV_VL128 = 12, // 128 elements.
SV_VL256 = 13, // 256 elements.
SV_MUL4 = 29, // The largest multiple of 3.
SV_MUL3 = 30, // The largest multiple of 4.
SV_ALL = 31 // All available (implicitly a multiple of two).
};
/// total method signatures: 100
}Details
CountNBitElements(enum SveMaskPattern pattern)
Set scalar to multiple of predicate constraint element count
Determines the number of active elements implied by pattern, multiplies that by an immediate in the range 1 to 16 inclusive, and then places the result in the scalar destination.
Pattern limits the number of active elements in a single predicate to:
- A fixed number (VL1 to VL256)
- The largest power of two (POW2)
- The largest multiple of three or four (MUL3 or MUL4)
- All available, implicitly a multiple of two (ALL).
CountNBitElements()
Identical to: CountNBitElements(SV_ALL)
Metadata
Metadata
Assignees
Labels
api-approvedAPI was approved in API review, it can be implementedAPI was approved in API review, it can be implementedarea-System.Runtime.Intrinsicsarm-sveWork related to arm64 SVE/SVE2 supportWork related to arm64 SVE/SVE2 support