Skip to content

Commit 2c8a0da

Browse files
SVE2 API for MaxNumberPairwise, MaxPairwise, MinNumberPairwise and MinPairwise (#117711)
1 parent d71abb0 commit 2c8a0da

File tree

6 files changed

+478
-0
lines changed

6 files changed

+478
-0
lines changed

src/coreclr/jit/hwintrinsiclistarm64sve.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,10 @@ HARDWARE_INTRINSIC(Sve2, FusedAddRoundedHalving,
341341
HARDWARE_INTRINSIC(Sve2, FusedSubtractHalving, -1, -1, {INS_sve_shsub, INS_sve_uhsub, INS_sve_shsub, INS_sve_uhsub, INS_sve_shsub, INS_sve_uhsub, INS_sve_shsub, INS_sve_uhsub, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_LowMaskedOperation)
342342
HARDWARE_INTRINSIC(Sve2, InterleavingXorEvenOdd, -1, 3, {INS_sve_eorbt, INS_sve_eorbt, INS_sve_eorbt, INS_sve_eorbt, INS_sve_eorbt, INS_sve_eorbt, INS_sve_eorbt, INS_sve_eorbt, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_HasRMWSemantics)
343343
HARDWARE_INTRINSIC(Sve2, InterleavingXorOddEven, -1, 3, {INS_sve_eortb, INS_sve_eortb, INS_sve_eortb, INS_sve_eortb, INS_sve_eortb, INS_sve_eortb, INS_sve_eortb, INS_sve_eortb, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_HasRMWSemantics)
344+
HARDWARE_INTRINSIC(Sve2, MaxNumberPairwise, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_fmaxnmp, INS_sve_fmaxnmp}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_HasRMWSemantics)
345+
HARDWARE_INTRINSIC(Sve2, MaxPairwise, -1, -1, {INS_sve_smaxp, INS_sve_umaxp, INS_sve_smaxp, INS_sve_umaxp, INS_sve_smaxp, INS_sve_umaxp, INS_sve_smaxp, INS_sve_umaxp, INS_sve_fmaxp, INS_sve_fmaxp}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_ReduceOperation)
346+
HARDWARE_INTRINSIC(Sve2, MinNumberPairwise, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_fminnmp, INS_sve_fminnmp}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_HasRMWSemantics)
347+
HARDWARE_INTRINSIC(Sve2, MinPairwise, -1, -1, {INS_sve_sminp, INS_sve_uminp, INS_sve_sminp, INS_sve_uminp, INS_sve_sminp, INS_sve_uminp, INS_sve_sminp, INS_sve_uminp, INS_sve_fminp, INS_sve_fminp}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_ReduceOperation)
344348
HARDWARE_INTRINSIC(Sve2, MultiplyAddBySelectedScalar, -1, 4, {INS_invalid, INS_invalid, INS_sve_mla, INS_sve_mla, INS_sve_mla, INS_sve_mla, INS_sve_mla, INS_sve_mla, INS_invalid, INS_invalid}, HW_Category_SIMDByIndexedElement, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_LowVectorOperation|HW_Flag_HasRMWSemantics)
345349
HARDWARE_INTRINSIC(Sve2, MultiplyBySelectedScalar, -1, 3, {INS_invalid, INS_invalid, INS_sve_mul, INS_sve_mul, INS_sve_mul, INS_sve_mul, INS_sve_mul, INS_sve_mul, INS_invalid, INS_invalid}, HW_Category_SIMDByIndexedElement, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_LowVectorOperation)
346350
HARDWARE_INTRINSIC(Sve2, MultiplyBySelectedScalarWideningEven, -1, 3, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_smullb, INS_sve_umullb, INS_sve_smullb, INS_sve_umullb, INS_invalid, INS_invalid}, HW_Category_SIMDByIndexedElement, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_LowVectorOperation)

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

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1395,6 +1395,181 @@ internal Arm64() { }
13951395
/// </summary>
13961396
public static Vector<ulong> InterleavingXorOddEven(Vector<ulong> even, Vector<ulong> left, Vector<ulong> right) { throw new PlatformNotSupportedException(); }
13971397

1398+
// Maximum number pairwise
1399+
1400+
/// <summary>
1401+
/// svfloat64_t svmaxnmp[_f64]_m(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1402+
/// svfloat64_t svmaxnmp[_f64]_x(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1403+
/// FMAXNMP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1404+
/// </summary>
1405+
public static Vector<double> MaxNumberPairwise(Vector<double> left, Vector<double> right) { throw new PlatformNotSupportedException(); }
1406+
1407+
/// <summary>
1408+
/// svfloat32_t svmaxnmp[_f32]_m(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1409+
/// svfloat32_t svmaxnmp[_f32]_x(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1410+
/// FMAXNMP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1411+
/// </summary>
1412+
public static Vector<float> MaxNumberPairwise(Vector<float> left, Vector<float> right) { throw new PlatformNotSupportedException(); }
1413+
1414+
// Maximum pairwise
1415+
1416+
/// <summary>
1417+
/// svuint8_t svmaxp[_u8]_m(svbool_t pg, svuint8_t op1, svuint8_t op2)
1418+
/// svuint8_t svmaxp[_u8]_x(svbool_t pg, svuint8_t op1, svuint8_t op2)
1419+
/// UMAXP Ztied1.B, Pg/M, Ztied1.B, Zop2.B
1420+
/// </summary>
1421+
public static Vector<byte> MaxPairwise(Vector<byte> left, Vector<byte> right) { throw new PlatformNotSupportedException(); }
1422+
1423+
/// <summary>
1424+
/// svfloat64_t svmaxp[_f64]_m(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1425+
/// svfloat64_t svmaxp[_f64]_x(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1426+
/// FMAXP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1427+
/// </summary>
1428+
public static Vector<double> MaxPairwise(Vector<double> left, Vector<double> right) { throw new PlatformNotSupportedException(); }
1429+
1430+
/// <summary>
1431+
/// svint16_t svmaxp[_s16]_m(svbool_t pg, svint16_t op1, svint16_t op2)
1432+
/// svint16_t svmaxp[_s16]_x(svbool_t pg, svint16_t op1, svint16_t op2)
1433+
/// SMAXP Ztied1.H, Pg/M, Ztied1.H, Zop2.H
1434+
/// </summary>
1435+
public static Vector<short> MaxPairwise(Vector<short> left, Vector<short> right) { throw new PlatformNotSupportedException(); }
1436+
1437+
/// <summary>
1438+
/// svint32_t svmaxp[_s32]_m(svbool_t pg, svint32_t op1, svint32_t op2)
1439+
/// svint32_t svmaxp[_s32]_x(svbool_t pg, svint32_t op1, svint32_t op2)
1440+
/// SMAXP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1441+
/// </summary>
1442+
public static Vector<int> MaxPairwise(Vector<int> left, Vector<int> right) { throw new PlatformNotSupportedException(); }
1443+
1444+
/// <summary>
1445+
/// svint64_t svmaxp[_s64]_m(svbool_t pg, svint64_t op1, svint64_t op2)
1446+
/// svint64_t svmaxp[_s64]_x(svbool_t pg, svint64_t op1, svint64_t op2)
1447+
/// SMAXP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1448+
/// </summary>
1449+
public static Vector<long> MaxPairwise(Vector<long> left, Vector<long> right) { throw new PlatformNotSupportedException(); }
1450+
1451+
/// <summary>
1452+
/// svint8_t svmaxp[_s8]_m(svbool_t pg, svint8_t op1, svint8_t op2)
1453+
/// svint8_t svmaxp[_s8]_x(svbool_t pg, svint8_t op1, svint8_t op2)
1454+
/// SMAXP Ztied1.B, Pg/M, Ztied1.B, Zop2.B
1455+
/// </summary>
1456+
public static Vector<sbyte> MaxPairwise(Vector<sbyte> left, Vector<sbyte> right) { throw new PlatformNotSupportedException(); }
1457+
1458+
/// <summary>
1459+
/// svfloat32_t svmaxp[_f32]_m(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1460+
/// svfloat32_t svmaxp[_f32]_x(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1461+
/// FMAXP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1462+
/// </summary>
1463+
public static Vector<float> MaxPairwise(Vector<float> left, Vector<float> right) { throw new PlatformNotSupportedException(); }
1464+
1465+
/// <summary>
1466+
/// svuint16_t svmaxp[_u16]_m(svbool_t pg, svuint16_t op1, svuint16_t op2)
1467+
/// svuint16_t svmaxp[_u16]_x(svbool_t pg, svuint16_t op1, svuint16_t op2)
1468+
/// UMAXP Ztied1.H, Pg/M, Ztied1.H, Zop2.H
1469+
/// </summary>
1470+
public static Vector<ushort> MaxPairwise(Vector<ushort> left, Vector<ushort> right) { throw new PlatformNotSupportedException(); }
1471+
1472+
/// <summary>
1473+
/// svuint32_t svmaxp[_u32]_m(svbool_t pg, svuint32_t op1, svuint32_t op2)
1474+
/// svuint32_t svmaxp[_u32]_x(svbool_t pg, svuint32_t op1, svuint32_t op2)
1475+
/// UMAXP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1476+
/// </summary>
1477+
public static Vector<uint> MaxPairwise(Vector<uint> left, Vector<uint> right) { throw new PlatformNotSupportedException(); }
1478+
1479+
/// <summary>
1480+
/// svuint64_t svmaxp[_u64]_m(svbool_t pg, svuint64_t op1, svuint64_t op2)
1481+
/// svuint64_t svmaxp[_u64]_x(svbool_t pg, svuint64_t op1, svuint64_t op2)
1482+
/// UMAXP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1483+
/// </summary>
1484+
public static Vector<ulong> MaxPairwise(Vector<ulong> left, Vector<ulong> right) { throw new PlatformNotSupportedException(); }
1485+
1486+
// Minimum number pairwise
1487+
1488+
/// <summary>
1489+
/// svfloat64_t svminnmp[_f64]_m(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1490+
/// svfloat64_t svminnmp[_f64]_x(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1491+
/// FMINNMP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1492+
/// </summary>
1493+
public static Vector<double> MinNumberPairwise(Vector<double> left, Vector<double> right) { throw new PlatformNotSupportedException(); }
1494+
1495+
/// <summary>
1496+
/// svfloat32_t svminnmp[_f32]_m(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1497+
/// svfloat32_t svminnmp[_f32]_x(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1498+
/// FMINNMP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1499+
/// </summary>
1500+
public static Vector<float> MinNumberPairwise(Vector<float> left, Vector<float> right) { throw new PlatformNotSupportedException(); }
1501+
1502+
// Minimum pairwise
1503+
1504+
/// <summary>
1505+
/// svuint8_t svminp[_u8]_m(svbool_t pg, svuint8_t op1, svuint8_t op2)
1506+
/// svuint8_t svminp[_u8]_x(svbool_t pg, svuint8_t op1, svuint8_t op2)
1507+
/// UMINP Ztied1.B, Pg/M, Ztied1.B, Zop2.B
1508+
/// </summary>
1509+
public static Vector<byte> MinPairwise(Vector<byte> left, Vector<byte> right) { throw new PlatformNotSupportedException(); }
1510+
1511+
/// <summary>
1512+
/// svfloat64_t svminp[_f64]_m(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1513+
/// svfloat64_t svminp[_f64]_x(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1514+
/// FMINP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1515+
/// </summary>
1516+
public static Vector<double> MinPairwise(Vector<double> left, Vector<double> right) { throw new PlatformNotSupportedException(); }
1517+
1518+
/// <summary>
1519+
/// svint16_t svminp[_s16]_m(svbool_t pg, svint16_t op1, svint16_t op2)
1520+
/// svint16_t svminp[_s16]_x(svbool_t pg, svint16_t op1, svint16_t op2)
1521+
/// SMINP Ztied1.H, Pg/M, Ztied1.H, Zop2.H
1522+
/// </summary>
1523+
public static Vector<short> MinPairwise(Vector<short> left, Vector<short> right) { throw new PlatformNotSupportedException(); }
1524+
1525+
/// <summary>
1526+
/// svint32_t svminp[_s32]_m(svbool_t pg, svint32_t op1, svint32_t op2)
1527+
/// svint32_t svminp[_s32]_x(svbool_t pg, svint32_t op1, svint32_t op2)
1528+
/// SMINP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1529+
/// </summary>
1530+
public static Vector<int> MinPairwise(Vector<int> left, Vector<int> right) { throw new PlatformNotSupportedException(); }
1531+
1532+
/// <summary>
1533+
/// svint64_t svminp[_s64]_m(svbool_t pg, svint64_t op1, svint64_t op2)
1534+
/// svint64_t svminp[_s64]_x(svbool_t pg, svint64_t op1, svint64_t op2)
1535+
/// SMINP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1536+
/// </summary>
1537+
public static Vector<long> MinPairwise(Vector<long> left, Vector<long> right) { throw new PlatformNotSupportedException(); }
1538+
1539+
/// <summary>
1540+
/// svint8_t svminp[_s8]_m(svbool_t pg, svint8_t op1, svint8_t op2)
1541+
/// svint8_t svminp[_s8]_x(svbool_t pg, svint8_t op1, svint8_t op2)
1542+
/// SMINP Ztied1.B, Pg/M, Ztied1.B, Zop2.B
1543+
/// </summary>
1544+
public static Vector<sbyte> MinPairwise(Vector<sbyte> left, Vector<sbyte> right) { throw new PlatformNotSupportedException(); }
1545+
1546+
/// <summary>
1547+
/// svfloat32_t svminp[_f32]_m(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1548+
/// svfloat32_t svminp[_f32]_x(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1549+
/// FMINP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1550+
/// </summary>
1551+
public static Vector<float> MinPairwise(Vector<float> left, Vector<float> right) { throw new PlatformNotSupportedException(); }
1552+
1553+
/// <summary>
1554+
/// svuint16_t svminp[_u16]_m(svbool_t pg, svuint16_t op1, svuint16_t op2)
1555+
/// svuint16_t svminp[_u16]_x(svbool_t pg, svuint16_t op1, svuint16_t op2)
1556+
/// UMINP Ztied1.H, Pg/M, Ztied1.H, Zop2.H
1557+
/// </summary>
1558+
public static Vector<ushort> MinPairwise(Vector<ushort> left, Vector<ushort> right) { throw new PlatformNotSupportedException(); }
1559+
1560+
/// <summary>
1561+
/// svuint32_t svminp[_u32]_m(svbool_t pg, svuint32_t op1, svuint32_t op2)
1562+
/// svuint32_t svminp[_u32]_x(svbool_t pg, svuint32_t op1, svuint32_t op2)
1563+
/// UMINP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1564+
/// </summary>
1565+
public static Vector<uint> MinPairwise(Vector<uint> left, Vector<uint> right) { throw new PlatformNotSupportedException(); }
1566+
1567+
/// <summary>
1568+
/// svuint64_t svminp[_u64]_m(svbool_t pg, svuint64_t op1, svuint64_t op2)
1569+
/// svuint64_t svminp[_u64]_x(svbool_t pg, svuint64_t op1, svuint64_t op2)
1570+
/// UMINP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1571+
/// </summary>
1572+
public static Vector<ulong> MinPairwise(Vector<ulong> left, Vector<ulong> right) { throw new PlatformNotSupportedException(); }
13981573

13991574
// Multiply-add, addend first
14001575

0 commit comments

Comments
 (0)