Skip to content

Commit 3d7e9ac

Browse files
committed
SVE2 API for MaxNumberPairwise, MaxPairwise, MinNumberPairwise and
MinPairwise
1 parent d71c87f commit 3d7e9ac

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
@@ -338,6 +338,10 @@ HARDWARE_INTRINSIC(Sve2, FusedAddHalving,
338338
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)
339339
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)
340340
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)
341+
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)
342+
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)
343+
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)
344+
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)
341345
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)
342346
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)
343347
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
@@ -1264,6 +1264,181 @@ internal Arm64() { }
12641264
/// </summary>
12651265
public static Vector<ulong> InterleavingXorOddEven(Vector<ulong> even, Vector<ulong> left, Vector<ulong> right) { throw new PlatformNotSupportedException(); }
12661266

1267+
// Maximum number pairwise
1268+
1269+
/// <summary>
1270+
/// svfloat64_t svmaxnmp[_f64]_m(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1271+
/// svfloat64_t svmaxnmp[_f64]_x(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1272+
/// FMAXNMP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1273+
/// </summary>
1274+
public static Vector<double> MaxNumberPairwise(Vector<double> left, Vector<double> right) { throw new PlatformNotSupportedException(); }
1275+
1276+
/// <summary>
1277+
/// svfloat32_t svmaxnmp[_f32]_m(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1278+
/// svfloat32_t svmaxnmp[_f32]_x(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1279+
/// FMAXNMP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1280+
/// </summary>
1281+
public static Vector<float> MaxNumberPairwise(Vector<float> left, Vector<float> right) { throw new PlatformNotSupportedException(); }
1282+
1283+
// Maximum pairwise
1284+
1285+
/// <summary>
1286+
/// svuint8_t svmaxp[_u8]_m(svbool_t pg, svuint8_t op1, svuint8_t op2)
1287+
/// svuint8_t svmaxp[_u8]_x(svbool_t pg, svuint8_t op1, svuint8_t op2)
1288+
/// UMAXP Ztied1.B, Pg/M, Ztied1.B, Zop2.B
1289+
/// </summary>
1290+
public static Vector<byte> MaxPairwise(Vector<byte> left, Vector<byte> right) { throw new PlatformNotSupportedException(); }
1291+
1292+
/// <summary>
1293+
/// svfloat64_t svmaxp[_f64]_m(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1294+
/// svfloat64_t svmaxp[_f64]_x(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1295+
/// FMAXP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1296+
/// </summary>
1297+
public static Vector<double> MaxPairwise(Vector<double> left, Vector<double> right) { throw new PlatformNotSupportedException(); }
1298+
1299+
/// <summary>
1300+
/// svint16_t svmaxp[_s16]_m(svbool_t pg, svint16_t op1, svint16_t op2)
1301+
/// svint16_t svmaxp[_s16]_x(svbool_t pg, svint16_t op1, svint16_t op2)
1302+
/// SMAXP Ztied1.H, Pg/M, Ztied1.H, Zop2.H
1303+
/// </summary>
1304+
public static Vector<short> MaxPairwise(Vector<short> left, Vector<short> right) { throw new PlatformNotSupportedException(); }
1305+
1306+
/// <summary>
1307+
/// svint32_t svmaxp[_s32]_m(svbool_t pg, svint32_t op1, svint32_t op2)
1308+
/// svint32_t svmaxp[_s32]_x(svbool_t pg, svint32_t op1, svint32_t op2)
1309+
/// SMAXP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1310+
/// </summary>
1311+
public static Vector<int> MaxPairwise(Vector<int> left, Vector<int> right) { throw new PlatformNotSupportedException(); }
1312+
1313+
/// <summary>
1314+
/// svint64_t svmaxp[_s64]_m(svbool_t pg, svint64_t op1, svint64_t op2)
1315+
/// svint64_t svmaxp[_s64]_x(svbool_t pg, svint64_t op1, svint64_t op2)
1316+
/// SMAXP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1317+
/// </summary>
1318+
public static Vector<long> MaxPairwise(Vector<long> left, Vector<long> right) { throw new PlatformNotSupportedException(); }
1319+
1320+
/// <summary>
1321+
/// svint8_t svmaxp[_s8]_m(svbool_t pg, svint8_t op1, svint8_t op2)
1322+
/// svint8_t svmaxp[_s8]_x(svbool_t pg, svint8_t op1, svint8_t op2)
1323+
/// SMAXP Ztied1.B, Pg/M, Ztied1.B, Zop2.B
1324+
/// </summary>
1325+
public static Vector<sbyte> MaxPairwise(Vector<sbyte> left, Vector<sbyte> right) { throw new PlatformNotSupportedException(); }
1326+
1327+
/// <summary>
1328+
/// svfloat32_t svmaxp[_f32]_m(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1329+
/// svfloat32_t svmaxp[_f32]_x(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1330+
/// FMAXP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1331+
/// </summary>
1332+
public static Vector<float> MaxPairwise(Vector<float> left, Vector<float> right) { throw new PlatformNotSupportedException(); }
1333+
1334+
/// <summary>
1335+
/// svuint16_t svmaxp[_u16]_m(svbool_t pg, svuint16_t op1, svuint16_t op2)
1336+
/// svuint16_t svmaxp[_u16]_x(svbool_t pg, svuint16_t op1, svuint16_t op2)
1337+
/// UMAXP Ztied1.H, Pg/M, Ztied1.H, Zop2.H
1338+
/// </summary>
1339+
public static Vector<ushort> MaxPairwise(Vector<ushort> left, Vector<ushort> right) { throw new PlatformNotSupportedException(); }
1340+
1341+
/// <summary>
1342+
/// svuint32_t svmaxp[_u32]_m(svbool_t pg, svuint32_t op1, svuint32_t op2)
1343+
/// svuint32_t svmaxp[_u32]_x(svbool_t pg, svuint32_t op1, svuint32_t op2)
1344+
/// UMAXP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1345+
/// </summary>
1346+
public static Vector<uint> MaxPairwise(Vector<uint> left, Vector<uint> right) { throw new PlatformNotSupportedException(); }
1347+
1348+
/// <summary>
1349+
/// svuint64_t svmaxp[_u64]_m(svbool_t pg, svuint64_t op1, svuint64_t op2)
1350+
/// svuint64_t svmaxp[_u64]_x(svbool_t pg, svuint64_t op1, svuint64_t op2)
1351+
/// UMAXP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1352+
/// </summary>
1353+
public static Vector<ulong> MaxPairwise(Vector<ulong> left, Vector<ulong> right) { throw new PlatformNotSupportedException(); }
1354+
1355+
// Minimum number pairwise
1356+
1357+
/// <summary>
1358+
/// svfloat64_t svminnmp[_f64]_m(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1359+
/// svfloat64_t svminnmp[_f64]_x(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1360+
/// FMINNMP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1361+
/// </summary>
1362+
public static Vector<double> MinNumberPairwise(Vector<double> left, Vector<double> right) { throw new PlatformNotSupportedException(); }
1363+
1364+
/// <summary>
1365+
/// svfloat32_t svminnmp[_f32]_m(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1366+
/// svfloat32_t svminnmp[_f32]_x(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1367+
/// FMINNMP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1368+
/// </summary>
1369+
public static Vector<float> MinNumberPairwise(Vector<float> left, Vector<float> right) { throw new PlatformNotSupportedException(); }
1370+
1371+
// Minimum pairwise
1372+
1373+
/// <summary>
1374+
/// svuint8_t svminp[_u8]_m(svbool_t pg, svuint8_t op1, svuint8_t op2)
1375+
/// svuint8_t svminp[_u8]_x(svbool_t pg, svuint8_t op1, svuint8_t op2)
1376+
/// UMINP Ztied1.B, Pg/M, Ztied1.B, Zop2.B
1377+
/// </summary>
1378+
public static Vector<byte> MinPairwise(Vector<byte> left, Vector<byte> right) { throw new PlatformNotSupportedException(); }
1379+
1380+
/// <summary>
1381+
/// svfloat64_t svminp[_f64]_m(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1382+
/// svfloat64_t svminp[_f64]_x(svbool_t pg, svfloat64_t op1, svfloat64_t op2)
1383+
/// FMINP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1384+
/// </summary>
1385+
public static Vector<double> MinPairwise(Vector<double> left, Vector<double> right) { throw new PlatformNotSupportedException(); }
1386+
1387+
/// <summary>
1388+
/// svint16_t svminp[_s16]_m(svbool_t pg, svint16_t op1, svint16_t op2)
1389+
/// svint16_t svminp[_s16]_x(svbool_t pg, svint16_t op1, svint16_t op2)
1390+
/// SMINP Ztied1.H, Pg/M, Ztied1.H, Zop2.H
1391+
/// </summary>
1392+
public static Vector<short> MinPairwise(Vector<short> left, Vector<short> right) { throw new PlatformNotSupportedException(); }
1393+
1394+
/// <summary>
1395+
/// svint32_t svminp[_s32]_m(svbool_t pg, svint32_t op1, svint32_t op2)
1396+
/// svint32_t svminp[_s32]_x(svbool_t pg, svint32_t op1, svint32_t op2)
1397+
/// SMINP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1398+
/// </summary>
1399+
public static Vector<int> MinPairwise(Vector<int> left, Vector<int> right) { throw new PlatformNotSupportedException(); }
1400+
1401+
/// <summary>
1402+
/// svint64_t svminp[_s64]_m(svbool_t pg, svint64_t op1, svint64_t op2)
1403+
/// svint64_t svminp[_s64]_x(svbool_t pg, svint64_t op1, svint64_t op2)
1404+
/// SMINP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1405+
/// </summary>
1406+
public static Vector<long> MinPairwise(Vector<long> left, Vector<long> right) { throw new PlatformNotSupportedException(); }
1407+
1408+
/// <summary>
1409+
/// svint8_t svminp[_s8]_m(svbool_t pg, svint8_t op1, svint8_t op2)
1410+
/// svint8_t svminp[_s8]_x(svbool_t pg, svint8_t op1, svint8_t op2)
1411+
/// SMINP Ztied1.B, Pg/M, Ztied1.B, Zop2.B
1412+
/// </summary>
1413+
public static Vector<sbyte> MinPairwise(Vector<sbyte> left, Vector<sbyte> right) { throw new PlatformNotSupportedException(); }
1414+
1415+
/// <summary>
1416+
/// svfloat32_t svminp[_f32]_m(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1417+
/// svfloat32_t svminp[_f32]_x(svbool_t pg, svfloat32_t op1, svfloat32_t op2)
1418+
/// FMINP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1419+
/// </summary>
1420+
public static Vector<float> MinPairwise(Vector<float> left, Vector<float> right) { throw new PlatformNotSupportedException(); }
1421+
1422+
/// <summary>
1423+
/// svuint16_t svminp[_u16]_m(svbool_t pg, svuint16_t op1, svuint16_t op2)
1424+
/// svuint16_t svminp[_u16]_x(svbool_t pg, svuint16_t op1, svuint16_t op2)
1425+
/// UMINP Ztied1.H, Pg/M, Ztied1.H, Zop2.H
1426+
/// </summary>
1427+
public static Vector<ushort> MinPairwise(Vector<ushort> left, Vector<ushort> right) { throw new PlatformNotSupportedException(); }
1428+
1429+
/// <summary>
1430+
/// svuint32_t svminp[_u32]_m(svbool_t pg, svuint32_t op1, svuint32_t op2)
1431+
/// svuint32_t svminp[_u32]_x(svbool_t pg, svuint32_t op1, svuint32_t op2)
1432+
/// UMINP Ztied1.S, Pg/M, Ztied1.S, Zop2.S
1433+
/// </summary>
1434+
public static Vector<uint> MinPairwise(Vector<uint> left, Vector<uint> right) { throw new PlatformNotSupportedException(); }
1435+
1436+
/// <summary>
1437+
/// svuint64_t svminp[_u64]_m(svbool_t pg, svuint64_t op1, svuint64_t op2)
1438+
/// svuint64_t svminp[_u64]_x(svbool_t pg, svuint64_t op1, svuint64_t op2)
1439+
/// UMINP Ztied1.D, Pg/M, Ztied1.D, Zop2.D
1440+
/// </summary>
1441+
public static Vector<ulong> MinPairwise(Vector<ulong> left, Vector<ulong> right) { throw new PlatformNotSupportedException(); }
12671442

12681443
// Multiply-add, addend first
12691444

0 commit comments

Comments
 (0)