Skip to content

Commit 6e52445

Browse files
a74nhkunalspathak
andauthored
ARM64-SVE: LeadingSignCount, LeadingZeroCount, PopCount (#102548)
* ARM64-SVE: LeadingSignCount + LeadingZeroCount * Add popcount * Fix PlatformNotSupported * Fix summary headers for popcount * Use SveSimpleVecOpTest for unsigned popcounts * Add HW_Flag_LowMaskedOperation() to LeadingSignCount() and LeadingZeroCount() --------- Co-authored-by: Kunal Pathak <[email protected]>
1 parent a17b872 commit 6e52445

File tree

7 files changed

+876
-14
lines changed

7 files changed

+876
-14
lines changed

src/coreclr/jit/hwintrinsiclistarm64sve.h

+17-14
Large diffs are not rendered by default.

src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.PlatformNotSupported.cs

+186
Original file line numberDiff line numberDiff line change
@@ -1319,6 +1319,109 @@ internal Arm64() { }
13191319
/// </summary>
13201320
public static unsafe Vector<float> FusedMultiplySubtractNegated(Vector<float> minuend, Vector<float> left, Vector<float> right) { throw new PlatformNotSupportedException(); }
13211321

1322+
1323+
/// Count leading sign bits
1324+
1325+
/// <summary>
1326+
/// svuint8_t svcls[_s8]_m(svuint8_t inactive, svbool_t pg, svint8_t op)
1327+
/// svuint8_t svcls[_s8]_x(svbool_t pg, svint8_t op)
1328+
/// svuint8_t svcls[_s8]_z(svbool_t pg, svint8_t op)
1329+
/// CLS Ztied.B, Pg/M, Zop.B
1330+
/// </summary>
1331+
public static unsafe Vector<byte> LeadingSignCount(Vector<sbyte> value){ throw new PlatformNotSupportedException(); }
1332+
1333+
/// <summary>
1334+
/// svuint16_t svcls[_s16]_m(svuint16_t inactive, svbool_t pg, svint16_t op)
1335+
/// svuint16_t svcls[_s16]_x(svbool_t pg, svint16_t op)
1336+
/// svuint16_t svcls[_s16]_z(svbool_t pg, svint16_t op)
1337+
/// CLS Ztied.H, Pg/M, Zop.H
1338+
/// </summary>
1339+
public static unsafe Vector<ushort> LeadingSignCount(Vector<short> value) { throw new PlatformNotSupportedException(); }
1340+
1341+
/// <summary>
1342+
/// svuint32_t svcls[_s32]_m(svuint32_t inactive, svbool_t pg, svint32_t op)
1343+
/// svuint32_t svcls[_s32]_x(svbool_t pg, svint32_t op)
1344+
/// svuint32_t svcls[_s32]_z(svbool_t pg, svint32_t op)
1345+
/// CLS Ztied.S, Pg/M, Zop.S
1346+
/// </summary>
1347+
public static unsafe Vector<uint> LeadingSignCount(Vector<int> value) { throw new PlatformNotSupportedException(); }
1348+
1349+
/// <summary>
1350+
/// svuint64_t svcls[_s64]_m(svuint64_t inactive, svbool_t pg, svint64_t op)
1351+
/// svuint64_t svcls[_s64]_x(svbool_t pg, svint64_t op)
1352+
/// svuint64_t svcls[_s64]_z(svbool_t pg, svint64_t op)
1353+
/// CLS Ztied.D, Pg/M, Zop.D
1354+
/// </summary>
1355+
public static unsafe Vector<ulong> LeadingSignCount(Vector<long> value) { throw new PlatformNotSupportedException(); }
1356+
1357+
1358+
/// Count leading zero bits
1359+
1360+
/// <summary>
1361+
/// svuint8_t svclz[_s8]_m(svuint8_t inactive, svbool_t pg, svint8_t op)
1362+
/// svuint8_t svclz[_s8]_x(svbool_t pg, svint8_t op)
1363+
/// svuint8_t svclz[_s8]_z(svbool_t pg, svint8_t op)
1364+
/// CLZ Ztied.B, Pg/M, Zop.B
1365+
/// </summary>
1366+
public static unsafe Vector<byte> LeadingZeroCount(Vector<sbyte> value) { throw new PlatformNotSupportedException(); }
1367+
1368+
/// <summary>
1369+
/// svuint8_t svclz[_u8]_m(svuint8_t inactive, svbool_t pg, svuint8_t op)
1370+
/// svuint8_t svclz[_u8]_x(svbool_t pg, svuint8_t op)
1371+
/// svuint8_t svclz[_u8]_z(svbool_t pg, svuint8_t op)
1372+
/// CLZ Ztied.B, Pg/M, Zop.B
1373+
/// </summary>
1374+
public static unsafe Vector<byte> LeadingZeroCount(Vector<byte> value) { throw new PlatformNotSupportedException(); }
1375+
1376+
/// <summary>
1377+
/// svuint16_t svclz[_s16]_m(svuint16_t inactive, svbool_t pg, svint16_t op)
1378+
/// svuint16_t svclz[_s16]_x(svbool_t pg, svint16_t op)
1379+
/// svuint16_t svclz[_s16]_z(svbool_t pg, svint16_t op)
1380+
/// CLZ Ztied.H, Pg/M, Zop.H
1381+
/// </summary>
1382+
public static unsafe Vector<ushort> LeadingZeroCount(Vector<short> value) { throw new PlatformNotSupportedException(); }
1383+
1384+
/// <summary>
1385+
/// svuint16_t svclz[_u16]_m(svuint16_t inactive, svbool_t pg, svuint16_t op)
1386+
/// svuint16_t svclz[_u16]_x(svbool_t pg, svuint16_t op)
1387+
/// svuint16_t svclz[_u16]_z(svbool_t pg, svuint16_t op)
1388+
/// CLZ Ztied.H, Pg/M, Zop.H
1389+
/// </summary>
1390+
public static unsafe Vector<ushort> LeadingZeroCount(Vector<ushort> value) { throw new PlatformNotSupportedException(); }
1391+
1392+
/// <summary>
1393+
/// svuint32_t svclz[_s32]_m(svuint32_t inactive, svbool_t pg, svint32_t op)
1394+
/// svuint32_t svclz[_s32]_x(svbool_t pg, svint32_t op)
1395+
/// svuint32_t svclz[_s32]_z(svbool_t pg, svint32_t op)
1396+
/// CLZ Ztied.S, Pg/M, Zop.S
1397+
/// </summary>
1398+
public static unsafe Vector<uint> LeadingZeroCount(Vector<int> value) { throw new PlatformNotSupportedException(); }
1399+
1400+
/// <summary>
1401+
/// svuint32_t svclz[_u32]_m(svuint32_t inactive, svbool_t pg, svuint32_t op)
1402+
/// svuint32_t svclz[_u32]_x(svbool_t pg, svuint32_t op)
1403+
/// svuint32_t svclz[_u32]_z(svbool_t pg, svuint32_t op)
1404+
/// CLZ Ztied.S, Pg/M, Zop.S
1405+
/// </summary>
1406+
public static unsafe Vector<uint> LeadingZeroCount(Vector<uint> value) { throw new PlatformNotSupportedException(); }
1407+
1408+
/// <summary>
1409+
/// svuint64_t svclz[_s64]_m(svuint64_t inactive, svbool_t pg, svint64_t op)
1410+
/// svuint64_t svclz[_s64]_x(svbool_t pg, svint64_t op)
1411+
/// svuint64_t svclz[_s64]_z(svbool_t pg, svint64_t op)
1412+
/// CLZ Ztied.D, Pg/M, Zop.D
1413+
/// </summary>
1414+
public static unsafe Vector<ulong> LeadingZeroCount(Vector<long> value) { throw new PlatformNotSupportedException(); }
1415+
1416+
/// <summary>
1417+
/// svuint64_t svclz[_u64]_m(svuint64_t inactive, svbool_t pg, svuint64_t op)
1418+
/// svuint64_t svclz[_u64]_x(svbool_t pg, svuint64_t op)
1419+
/// svuint64_t svclz[_u64]_z(svbool_t pg, svuint64_t op)
1420+
/// CLZ Ztied.D, Pg/M, Zop.D
1421+
/// </summary>
1422+
public static unsafe Vector<ulong> LeadingZeroCount(Vector<ulong> value) { throw new PlatformNotSupportedException(); }
1423+
1424+
13221425
/// LoadVector : Unextended load
13231426

13241427
/// <summary>
@@ -2490,6 +2593,89 @@ internal Arm64() { }
24902593
public static unsafe Vector<ulong> OrAcross(Vector<ulong> value) { throw new PlatformNotSupportedException(); }
24912594

24922595

2596+
/// Count nonzero bits
2597+
2598+
/// <summary>
2599+
/// svuint8_t svcnt[_s8]_m(svuint8_t inactive, svbool_t pg, svint8_t op)
2600+
/// svuint8_t svcnt[_s8]_x(svbool_t pg, svint8_t op)
2601+
/// svuint8_t svcnt[_s8]_z(svbool_t pg, svint8_t op)
2602+
/// CNT Ztied.B, Pg/M, Zop.B
2603+
/// </summary>
2604+
public static unsafe Vector<byte> PopCount(Vector<sbyte> value) { throw new PlatformNotSupportedException(); }
2605+
2606+
/// <summary>
2607+
/// svuint8_t svcnt[_u8]_m(svuint8_t inactive, svbool_t pg, svuint8_t op)
2608+
/// svuint8_t svcnt[_u8]_x(svbool_t pg, svuint8_t op)
2609+
/// svuint8_t svcnt[_u8]_z(svbool_t pg, svuint8_t op)
2610+
/// CNT Ztied.B, Pg/M, Zop.B
2611+
/// </summary>
2612+
public static unsafe Vector<byte> PopCount(Vector<byte> value) { throw new PlatformNotSupportedException(); }
2613+
2614+
/// <summary>
2615+
/// svuint16_t svcnt[_s16]_m(svuint16_t inactive, svbool_t pg, svint16_t op)
2616+
/// svuint16_t svcnt[_s16]_x(svbool_t pg, svint16_t op)
2617+
/// svuint16_t svcnt[_s16]_z(svbool_t pg, svint16_t op)
2618+
/// CNT Ztied.H, Pg/M, Zop.H
2619+
/// </summary>
2620+
public static unsafe Vector<ushort> PopCount(Vector<short> value) { throw new PlatformNotSupportedException(); }
2621+
2622+
/// <summary>
2623+
/// svuint16_t svcnt[_u16]_m(svuint16_t inactive, svbool_t pg, svuint16_t op)
2624+
/// svuint16_t svcnt[_u16]_x(svbool_t pg, svuint16_t op)
2625+
/// svuint16_t svcnt[_u16]_z(svbool_t pg, svuint16_t op)
2626+
/// CNT Ztied.H, Pg/M, Zop.H
2627+
/// </summary>
2628+
public static unsafe Vector<ushort> PopCount(Vector<ushort> value) { throw new PlatformNotSupportedException(); }
2629+
2630+
/// <summary>
2631+
/// svuint32_t svcnt[_s32]_m(svuint32_t inactive, svbool_t pg, svint32_t op)
2632+
/// svuint32_t svcnt[_s32]_x(svbool_t pg, svint32_t op)
2633+
/// svuint32_t svcnt[_s32]_z(svbool_t pg, svint32_t op)
2634+
/// CNT Ztied.S, Pg/M, Zop.S
2635+
/// </summary>
2636+
public static unsafe Vector<uint> PopCount(Vector<int> value) { throw new PlatformNotSupportedException(); }
2637+
2638+
/// <summary>
2639+
/// svuint32_t svcnt[_f32]_m(svuint32_t inactive, svbool_t pg, svfloat32_t op)
2640+
/// svuint32_t svcnt[_f32]_x(svbool_t pg, svfloat32_t op)
2641+
/// svuint32_t svcnt[_f32]_z(svbool_t pg, svfloat32_t op)
2642+
/// CNT Ztied.S, Pg/M, Zop.S
2643+
/// </summary>
2644+
public static unsafe Vector<uint> PopCount(Vector<float> value) { throw new PlatformNotSupportedException(); }
2645+
2646+
/// <summary>
2647+
/// svuint32_t svcnt[_u32]_m(svuint32_t inactive, svbool_t pg, svuint32_t op)
2648+
/// svuint32_t svcnt[_u32]_x(svbool_t pg, svuint32_t op)
2649+
/// svuint32_t svcnt[_u32]_z(svbool_t pg, svuint32_t op)
2650+
/// CNT Ztied.S, Pg/M, Zop.S
2651+
/// </summary>
2652+
public static unsafe Vector<uint> PopCount(Vector<uint> value) { throw new PlatformNotSupportedException(); }
2653+
2654+
/// <summary>
2655+
/// svuint64_t svcnt[_f64]_m(svuint64_t inactive, svbool_t pg, svfloat64_t op)
2656+
/// svuint64_t svcnt[_f64]_x(svbool_t pg, svfloat64_t op)
2657+
/// svuint64_t svcnt[_f64]_z(svbool_t pg, svfloat64_t op)
2658+
/// CNT Ztied.D, Pg/M, Zop.D
2659+
/// </summary>
2660+
public static unsafe Vector<ulong> PopCount(Vector<double> value) { throw new PlatformNotSupportedException(); }
2661+
2662+
/// <summary>
2663+
/// svuint64_t svcnt[_s64]_m(svuint64_t inactive, svbool_t pg, svint64_t op)
2664+
/// svuint64_t svcnt[_s64]_x(svbool_t pg, svint64_t op)
2665+
/// svuint64_t svcnt[_s64]_z(svbool_t pg, svint64_t op)
2666+
/// CNT Ztied.D, Pg/M, Zop.D
2667+
/// </summary>
2668+
public static unsafe Vector<ulong> PopCount(Vector<long> value) { throw new PlatformNotSupportedException(); }
2669+
2670+
/// <summary>
2671+
/// svuint64_t svcnt[_u64]_m(svuint64_t inactive, svbool_t pg, svuint64_t op)
2672+
/// svuint64_t svcnt[_u64]_x(svbool_t pg, svuint64_t op)
2673+
/// svuint64_t svcnt[_u64]_z(svbool_t pg, svuint64_t op)
2674+
/// CNT Ztied.D, Pg/M, Zop.D
2675+
/// </summary>
2676+
public static unsafe Vector<ulong> PopCount(Vector<ulong> value) { throw new PlatformNotSupportedException(); }
2677+
2678+
24932679
/// SignExtend16 : Sign-extend the low 16 bits
24942680

24952681
/// <summary>

src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.cs

+186
Original file line numberDiff line numberDiff line change
@@ -1375,6 +1375,109 @@ internal Arm64() { }
13751375
/// </summary>
13761376
public static unsafe Vector<float> FusedMultiplySubtractNegated(Vector<float> minuend, Vector<float> left, Vector<float> right) => FusedMultiplySubtractNegated(minuend, left, right);
13771377

1378+
1379+
/// LeadingSignCount : Count leading sign bits
1380+
1381+
/// <summary>
1382+
/// svuint8_t svcls[_s8]_m(svuint8_t inactive, svbool_t pg, svint8_t op)
1383+
/// svuint8_t svcls[_s8]_x(svbool_t pg, svint8_t op)
1384+
/// svuint8_t svcls[_s8]_z(svbool_t pg, svint8_t op)
1385+
/// CLS Ztied.B, Pg/M, Zop.B
1386+
/// </summary>
1387+
public static unsafe Vector<byte> LeadingSignCount(Vector<sbyte> value) => LeadingSignCount(value);
1388+
1389+
/// <summary>
1390+
/// svuint16_t svcls[_s16]_m(svuint16_t inactive, svbool_t pg, svint16_t op)
1391+
/// svuint16_t svcls[_s16]_x(svbool_t pg, svint16_t op)
1392+
/// svuint16_t svcls[_s16]_z(svbool_t pg, svint16_t op)
1393+
/// CLS Ztied.H, Pg/M, Zop.H
1394+
/// </summary>
1395+
public static unsafe Vector<ushort> LeadingSignCount(Vector<short> value) => LeadingSignCount(value);
1396+
1397+
/// <summary>
1398+
/// svuint32_t svcls[_s32]_m(svuint32_t inactive, svbool_t pg, svint32_t op)
1399+
/// svuint32_t svcls[_s32]_x(svbool_t pg, svint32_t op)
1400+
/// svuint32_t svcls[_s32]_z(svbool_t pg, svint32_t op)
1401+
/// CLS Ztied.S, Pg/M, Zop.S
1402+
/// </summary>
1403+
public static unsafe Vector<uint> LeadingSignCount(Vector<int> value) => LeadingSignCount(value);
1404+
1405+
/// <summary>
1406+
/// svuint64_t svcls[_s64]_m(svuint64_t inactive, svbool_t pg, svint64_t op)
1407+
/// svuint64_t svcls[_s64]_x(svbool_t pg, svint64_t op)
1408+
/// svuint64_t svcls[_s64]_z(svbool_t pg, svint64_t op)
1409+
/// CLS Ztied.D, Pg/M, Zop.D
1410+
/// </summary>
1411+
public static unsafe Vector<ulong> LeadingSignCount(Vector<long> value) => LeadingSignCount(value);
1412+
1413+
1414+
/// LeadingZeroCount : Count leading zero bits
1415+
1416+
/// <summary>
1417+
/// svuint8_t svclz[_s8]_m(svuint8_t inactive, svbool_t pg, svint8_t op)
1418+
/// svuint8_t svclz[_s8]_x(svbool_t pg, svint8_t op)
1419+
/// svuint8_t svclz[_s8]_z(svbool_t pg, svint8_t op)
1420+
/// CLZ Ztied.B, Pg/M, Zop.B
1421+
/// </summary>
1422+
public static unsafe Vector<byte> LeadingZeroCount(Vector<sbyte> value) => LeadingZeroCount(value);
1423+
1424+
/// <summary>
1425+
/// svuint8_t svclz[_u8]_m(svuint8_t inactive, svbool_t pg, svuint8_t op)
1426+
/// svuint8_t svclz[_u8]_x(svbool_t pg, svuint8_t op)
1427+
/// svuint8_t svclz[_u8]_z(svbool_t pg, svuint8_t op)
1428+
/// CLZ Ztied.B, Pg/M, Zop.B
1429+
/// </summary>
1430+
public static unsafe Vector<byte> LeadingZeroCount(Vector<byte> value) => LeadingZeroCount(value);
1431+
1432+
/// <summary>
1433+
/// svuint16_t svclz[_s16]_m(svuint16_t inactive, svbool_t pg, svint16_t op)
1434+
/// svuint16_t svclz[_s16]_x(svbool_t pg, svint16_t op)
1435+
/// svuint16_t svclz[_s16]_z(svbool_t pg, svint16_t op)
1436+
/// CLZ Ztied.H, Pg/M, Zop.H
1437+
/// </summary>
1438+
public static unsafe Vector<ushort> LeadingZeroCount(Vector<short> value) => LeadingZeroCount(value);
1439+
1440+
/// <summary>
1441+
/// svuint16_t svclz[_u16]_m(svuint16_t inactive, svbool_t pg, svuint16_t op)
1442+
/// svuint16_t svclz[_u16]_x(svbool_t pg, svuint16_t op)
1443+
/// svuint16_t svclz[_u16]_z(svbool_t pg, svuint16_t op)
1444+
/// CLZ Ztied.H, Pg/M, Zop.H
1445+
/// </summary>
1446+
public static unsafe Vector<ushort> LeadingZeroCount(Vector<ushort> value) => LeadingZeroCount(value);
1447+
1448+
/// <summary>
1449+
/// svuint32_t svclz[_s32]_m(svuint32_t inactive, svbool_t pg, svint32_t op)
1450+
/// svuint32_t svclz[_s32]_x(svbool_t pg, svint32_t op)
1451+
/// svuint32_t svclz[_s32]_z(svbool_t pg, svint32_t op)
1452+
/// CLZ Ztied.S, Pg/M, Zop.S
1453+
/// </summary>
1454+
public static unsafe Vector<uint> LeadingZeroCount(Vector<int> value) => LeadingZeroCount(value);
1455+
1456+
/// <summary>
1457+
/// svuint32_t svclz[_u32]_m(svuint32_t inactive, svbool_t pg, svuint32_t op)
1458+
/// svuint32_t svclz[_u32]_x(svbool_t pg, svuint32_t op)
1459+
/// svuint32_t svclz[_u32]_z(svbool_t pg, svuint32_t op)
1460+
/// CLZ Ztied.S, Pg/M, Zop.S
1461+
/// </summary>
1462+
public static unsafe Vector<uint> LeadingZeroCount(Vector<uint> value) => LeadingZeroCount(value);
1463+
1464+
/// <summary>
1465+
/// svuint64_t svclz[_s64]_m(svuint64_t inactive, svbool_t pg, svint64_t op)
1466+
/// svuint64_t svclz[_s64]_x(svbool_t pg, svint64_t op)
1467+
/// svuint64_t svclz[_s64]_z(svbool_t pg, svint64_t op)
1468+
/// CLZ Ztied.D, Pg/M, Zop.D
1469+
/// </summary>
1470+
public static unsafe Vector<ulong> LeadingZeroCount(Vector<long> value) => LeadingZeroCount(value);
1471+
1472+
/// <summary>
1473+
/// svuint64_t svclz[_u64]_m(svuint64_t inactive, svbool_t pg, svuint64_t op)
1474+
/// svuint64_t svclz[_u64]_x(svbool_t pg, svuint64_t op)
1475+
/// svuint64_t svclz[_u64]_z(svbool_t pg, svuint64_t op)
1476+
/// CLZ Ztied.D, Pg/M, Zop.D
1477+
/// </summary>
1478+
public static unsafe Vector<ulong> LeadingZeroCount(Vector<ulong> value) => LeadingZeroCount(value);
1479+
1480+
13781481
/// LoadVector : Unextended load
13791482

13801483
/// <summary>
@@ -2545,6 +2648,89 @@ internal Arm64() { }
25452648
public static unsafe Vector<ulong> OrAcross(Vector<ulong> value) => OrAcross(value);
25462649

25472650

2651+
/// Count nonzero bits
2652+
2653+
/// <summary>
2654+
/// svuint8_t svcnt[_s8]_m(svuint8_t inactive, svbool_t pg, svint8_t op)
2655+
/// svuint8_t svcnt[_s8]_x(svbool_t pg, svint8_t op)
2656+
/// svuint8_t svcnt[_s8]_z(svbool_t pg, svint8_t op)
2657+
/// CNT Ztied.B, Pg/M, Zop.B
2658+
/// </summary>
2659+
public static unsafe Vector<byte> PopCount(Vector<sbyte> value) => PopCount(value);
2660+
2661+
/// <summary>
2662+
/// svuint8_t svcnt[_u8]_m(svuint8_t inactive, svbool_t pg, svuint8_t op)
2663+
/// svuint8_t svcnt[_u8]_x(svbool_t pg, svuint8_t op)
2664+
/// svuint8_t svcnt[_u8]_z(svbool_t pg, svuint8_t op)
2665+
/// CNT Ztied.B, Pg/M, Zop.B
2666+
/// </summary>
2667+
public static unsafe Vector<byte> PopCount(Vector<byte> value) => PopCount(value);
2668+
2669+
/// <summary>
2670+
/// svuint16_t svcnt[_s16]_m(svuint16_t inactive, svbool_t pg, svint16_t op)
2671+
/// svuint16_t svcnt[_s16]_x(svbool_t pg, svint16_t op)
2672+
/// svuint16_t svcnt[_s16]_z(svbool_t pg, svint16_t op)
2673+
/// CNT Ztied.H, Pg/M, Zop.H
2674+
/// </summary>
2675+
public static unsafe Vector<ushort> PopCount(Vector<short> value) => PopCount(value);
2676+
2677+
/// <summary>
2678+
/// svuint16_t svcnt[_u16]_m(svuint16_t inactive, svbool_t pg, svuint16_t op)
2679+
/// svuint16_t svcnt[_u16]_x(svbool_t pg, svuint16_t op)
2680+
/// svuint16_t svcnt[_u16]_z(svbool_t pg, svuint16_t op)
2681+
/// CNT Ztied.H, Pg/M, Zop.H
2682+
/// </summary>
2683+
public static unsafe Vector<ushort> PopCount(Vector<ushort> value) => PopCount(value);
2684+
2685+
/// <summary>
2686+
/// svuint32_t svcnt[_s32]_m(svuint32_t inactive, svbool_t pg, svint32_t op)
2687+
/// svuint32_t svcnt[_s32]_x(svbool_t pg, svint32_t op)
2688+
/// svuint32_t svcnt[_s32]_z(svbool_t pg, svint32_t op)
2689+
/// CNT Ztied.S, Pg/M, Zop.S
2690+
/// </summary>
2691+
public static unsafe Vector<uint> PopCount(Vector<int> value) => PopCount(value);
2692+
2693+
/// <summary>
2694+
/// svuint32_t svcnt[_f32]_m(svuint32_t inactive, svbool_t pg, svfloat32_t op)
2695+
/// svuint32_t svcnt[_f32]_x(svbool_t pg, svfloat32_t op)
2696+
/// svuint32_t svcnt[_f32]_z(svbool_t pg, svfloat32_t op)
2697+
/// CNT Ztied.S, Pg/M, Zop.S
2698+
/// </summary>
2699+
public static unsafe Vector<uint> PopCount(Vector<float> value) => PopCount(value);
2700+
2701+
/// <summary>
2702+
/// svuint32_t svcnt[_u32]_m(svuint32_t inactive, svbool_t pg, svuint32_t op)
2703+
/// svuint32_t svcnt[_u32]_x(svbool_t pg, svuint32_t op)
2704+
/// svuint32_t svcnt[_u32]_z(svbool_t pg, svuint32_t op)
2705+
/// CNT Ztied.S, Pg/M, Zop.S
2706+
/// </summary>
2707+
public static unsafe Vector<uint> PopCount(Vector<uint> value) => PopCount(value);
2708+
2709+
/// <summary>
2710+
/// svuint64_t svcnt[_f64]_m(svuint64_t inactive, svbool_t pg, svfloat64_t op)
2711+
/// svuint64_t svcnt[_f64]_x(svbool_t pg, svfloat64_t op)
2712+
/// svuint64_t svcnt[_f64]_z(svbool_t pg, svfloat64_t op)
2713+
/// CNT Ztied.D, Pg/M, Zop.D
2714+
/// </summary>
2715+
public static unsafe Vector<ulong> PopCount(Vector<double> value) => PopCount(value);
2716+
2717+
/// <summary>
2718+
/// svuint64_t svcnt[_s64]_m(svuint64_t inactive, svbool_t pg, svint64_t op)
2719+
/// svuint64_t svcnt[_s64]_x(svbool_t pg, svint64_t op)
2720+
/// svuint64_t svcnt[_s64]_z(svbool_t pg, svint64_t op)
2721+
/// CNT Ztied.D, Pg/M, Zop.D
2722+
/// </summary>
2723+
public static unsafe Vector<ulong> PopCount(Vector<long> value) => PopCount(value);
2724+
2725+
/// <summary>
2726+
/// svuint64_t svcnt[_u64]_m(svuint64_t inactive, svbool_t pg, svuint64_t op)
2727+
/// svuint64_t svcnt[_u64]_x(svbool_t pg, svuint64_t op)
2728+
/// svuint64_t svcnt[_u64]_z(svbool_t pg, svuint64_t op)
2729+
/// CNT Ztied.D, Pg/M, Zop.D
2730+
/// </summary>
2731+
public static unsafe Vector<ulong> PopCount(Vector<ulong> value) => PopCount(value);
2732+
2733+
25482734
/// SignExtend16 : Sign-extend the low 16 bits
25492735

25502736
/// <summary>

0 commit comments

Comments
 (0)