From b0f4b029389d730f6fc28f5cb6944edea4a400f5 Mon Sep 17 00:00:00 2001 From: Jacob Crawley Date: Tue, 17 Jun 2025 14:36:06 +0000 Subject: [PATCH] SVE2 API for AddPairwise, AddPairwiseWidening, AddSaturate, AddWide and AddWidening --- src/coreclr/jit/hwintrinsiclistarm64sve.h | 10 + .../Arm/Sve2.PlatformNotSupported.cs | 468 +++++++++++++++++ .../src/System/Runtime/Intrinsics/Arm/Sve2.cs | 469 ++++++++++++++++++ .../ref/System.Runtime.Intrinsics.cs | 62 +++ .../GenerateHWIntrinsicTests_Arm.cs | 69 +++ .../HardwareIntrinsics/Arm/Shared/Helpers.cs | 131 +++++ ...aryOpDifferentRetTypeTestTemplate.template | 12 +- 7 files changed, 1215 insertions(+), 6 deletions(-) diff --git a/src/coreclr/jit/hwintrinsiclistarm64sve.h b/src/coreclr/jit/hwintrinsiclistarm64sve.h index 79cd12ac3eafc8..2ebcbc7710721d 100644 --- a/src/coreclr/jit/hwintrinsiclistarm64sve.h +++ b/src/coreclr/jit/hwintrinsiclistarm64sve.h @@ -322,6 +322,16 @@ HARDWARE_INTRINSIC(Sve2, AddCarryWideningLower, HARDWARE_INTRINSIC(Sve2, AddCarryWideningUpper, -1, 3, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_adclt, INS_invalid, INS_sve_adclt, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_HasRMWSemantics|HW_Flag_SpecialCodeGen) HARDWARE_INTRINSIC(Sve2, AddHighNarrowingEven, -1, 2, {INS_sve_addhnb, INS_sve_addhnb, INS_sve_addhnb, INS_sve_addhnb, INS_sve_addhnb, INS_sve_addhnb, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable) HARDWARE_INTRINSIC(Sve2, AddHighNarrowingOdd, -1, 3, {INS_sve_addhnt, INS_sve_addhnt, INS_sve_addhnt, INS_sve_addhnt, INS_sve_addhnt, INS_sve_addhnt, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, AddPairwise, -1, -1, {INS_sve_addp, INS_sve_addp, INS_sve_addp, INS_sve_addp, INS_sve_addp, INS_sve_addp, INS_sve_addp, INS_sve_addp, INS_sve_faddp, INS_sve_faddp}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_LowMaskedOperation|HW_Flag_ReduceOperation) +HARDWARE_INTRINSIC(Sve2, AddPairwiseWidening, -1, -1, {INS_invalid, INS_invalid, INS_sve_sadalp, INS_sve_uadalp, INS_sve_sadalp, INS_sve_uadalp, INS_sve_sadalp, INS_sve_uadalp, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_LowMaskedOperation) +HARDWARE_INTRINSIC(Sve2, AddSaturate, -1, -1, {INS_sve_sqadd, INS_sve_uqadd, INS_sve_sqadd, INS_sve_uqadd, INS_sve_sqadd, INS_sve_uqadd, INS_sve_sqadd, INS_sve_uqadd, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_OptionalEmbeddedMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_LowMaskedOperation) +HARDWARE_INTRINSIC(Sve2, AddSaturateWithSignedAddend, -1, -1, {INS_invalid, INS_sve_usqadd, INS_invalid, INS_sve_usqadd, INS_invalid, INS_sve_usqadd, INS_invalid, INS_sve_usqadd, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_LowMaskedOperation) +HARDWARE_INTRINSIC(Sve2, AddSaturateWithUnsignedAddend, -1, -1, {INS_sve_suqadd, INS_invalid, INS_sve_suqadd, INS_invalid, INS_sve_suqadd, INS_invalid, INS_sve_suqadd, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_LowMaskedOperation) +HARDWARE_INTRINSIC(Sve2, AddWideLower, -1, 2, {INS_invalid, INS_invalid, INS_sve_saddwb, INS_sve_uaddwb, INS_sve_saddwb, INS_sve_uaddwb, INS_sve_saddwb, INS_sve_uaddwb, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg) +HARDWARE_INTRINSIC(Sve2, AddWideUpper, -1, 2, {INS_invalid, INS_invalid, INS_sve_saddwt, INS_sve_uaddwt, INS_sve_saddwt, INS_sve_uaddwt, INS_sve_saddwt, INS_sve_uaddwt, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg) +HARDWARE_INTRINSIC(Sve2, AddWideningLower, -1, 2, {INS_invalid, INS_invalid, INS_sve_saddlb, INS_sve_uaddlb, INS_sve_saddlb, INS_sve_uaddlb, INS_sve_saddlb, INS_sve_uaddlb, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable) +HARDWARE_INTRINSIC(Sve2, AddWideningLowerUpper, -1, 2, {INS_invalid, INS_invalid, INS_sve_saddlbt, INS_invalid, INS_sve_saddlbt, INS_invalid, INS_sve_saddlbt, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable) +HARDWARE_INTRINSIC(Sve2, AddWideningUpper, -1, 2, {INS_invalid, INS_invalid, INS_sve_saddlt, INS_sve_uaddlt, INS_sve_saddlt, INS_sve_uaddlt, INS_sve_saddlt, INS_sve_uaddlt, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable) HARDWARE_INTRINSIC(Sve2, BitwiseClearXor, -1, 3, {INS_sve_bcax, INS_sve_bcax, INS_sve_bcax, INS_sve_bcax, INS_sve_bcax, INS_sve_bcax, INS_sve_bcax, INS_sve_bcax, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_HasRMWSemantics) HARDWARE_INTRINSIC(Sve2, BitwiseSelect, -1, 3, {INS_sve_bsl, INS_sve_bsl, INS_sve_bsl, INS_sve_bsl, INS_sve_bsl, INS_sve_bsl, INS_sve_bsl, INS_sve_bsl, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_HasRMWSemantics) HARDWARE_INTRINSIC(Sve2, BitwiseSelectLeftInverted, -1, 3, {INS_sve_bsl1n, INS_sve_bsl1n, INS_sve_bsl1n, INS_sve_bsl1n, INS_sve_bsl1n, INS_sve_bsl1n, INS_sve_bsl1n, INS_sve_bsl1n, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_HasRMWSemantics) diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve2.PlatformNotSupported.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve2.PlatformNotSupported.cs index b8f0adf43c63a0..47f019aab9c19f 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve2.PlatformNotSupported.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve2.PlatformNotSupported.cs @@ -335,6 +335,474 @@ internal Arm64() { } public static unsafe Vector AddHighNarrowingOdd(Vector even, Vector left, Vector right) { throw new PlatformNotSupportedException(); } + // Add pairwise + + /// + /// svuint8_t svaddp[_u8]_m(svbool_t pg, svuint8_t op1, svuint8_t op2) + /// svuint8_t svaddp[_u8]_x(svbool_t pg, svuint8_t op1, svuint8_t op2) + /// ADDP Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// ADDP Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// + public static Vector AddPairwise(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svfloat64_t svaddp[_f64]_m(svbool_t pg, svfloat64_t op1, svfloat64_t op2) + /// svfloat64_t svaddp[_f64]_x(svbool_t pg, svfloat64_t op1, svfloat64_t op2) + /// FADDP Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// FADDP Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// + public static Vector AddPairwise(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint16_t svaddp[_s16]_m(svbool_t pg, svint16_t op1, svint16_t op2) + /// svint16_t svaddp[_s16]_x(svbool_t pg, svint16_t op1, svint16_t op2) + /// ADDP Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// ADDP Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// + public static Vector AddPairwise(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svaddp[_s32]_m(svbool_t pg, svint32_t op1, svint32_t op2) + /// svint32_t svaddp[_s32]_x(svbool_t pg, svint32_t op1, svint32_t op2) + /// ADDP Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// ADDP Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// + public static Vector AddPairwise(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint64_t svaddp[_s64]_m(svbool_t pg, svint64_t op1, svint64_t op2) + /// svint64_t svaddp[_s64]_x(svbool_t pg, svint64_t op1, svint64_t op2) + /// ADDP Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// ADDP Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// + public static Vector AddPairwise(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svaddp[_s8]_m(svbool_t pg, svint8_t op1, svint8_t op2) + /// svint8_t svaddp[_s8]_x(svbool_t pg, svint8_t op1, svint8_t op2) + /// ADDP Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// ADDP Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// + public static Vector AddPairwise(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svfloat32_t svaddp[_f32]_m(svbool_t pg, svfloat32_t op1, svfloat32_t op2) + /// svfloat32_t svaddp[_f32]_x(svbool_t pg, svfloat32_t op1, svfloat32_t op2) + /// FADDP Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// FADDP Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// + public static Vector AddPairwise(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svaddp[_u16]_m(svbool_t pg, svuint16_t op1, svuint16_t op2) + /// svuint16_t svaddp[_u16]_x(svbool_t pg, svuint16_t op1, svuint16_t op2) + /// ADDP Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// ADDP Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// + public static Vector AddPairwise(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svaddp[_u32]_m(svbool_t pg, svuint32_t op1, svuint32_t op2) + /// svuint32_t svaddp[_u32]_x(svbool_t pg, svuint32_t op1, svuint32_t op2) + /// ADDP Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// ADDP Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// + public static Vector AddPairwise(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint64_t svaddp[_u64]_m(svbool_t pg, svuint64_t op1, svuint64_t op2) + /// svuint64_t svaddp[_u64]_x(svbool_t pg, svuint64_t op1, svuint64_t op2) + /// ADDP Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// ADDP Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// + public static Vector AddPairwise(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + // Add and accumulate long pairwise + + /// + /// svint16_t svadalp[_s16]_m(svbool_t pg, svint16_t op1, svint8_t op2) + /// svint16_t svadalp[_s16]_x(svbool_t pg, svint16_t op1, svint8_t op2) + /// svint16_t svadalp[_s16]_z(svbool_t pg, svint16_t op1, svint8_t op2) + /// SADALP Ztied1.H, Pg/M, Zop2.B + /// SADALP Ztied1.H, Pg/M, Zop2.B + /// + public static Vector AddPairwiseWidening(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svadalp[_s32]_m(svbool_t pg, svint32_t op1, svint16_t op2) + /// svint32_t svadalp[_s32]_x(svbool_t pg, svint32_t op1, svint16_t op2) + /// svint32_t svadalp[_s32]_z(svbool_t pg, svint32_t op1, svint16_t op2) + /// SADALP Ztied1.S, Pg/M, Zop2.H + /// SADALP Ztied1.S, Pg/M, Zop2.H + /// + public static Vector AddPairwiseWidening(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint64_t svadalp[_s64]_m(svbool_t pg, svint64_t op1, svint32_t op2) + /// svint64_t svadalp[_s64]_x(svbool_t pg, svint64_t op1, svint32_t op2) + /// svint64_t svadalp[_s64]_z(svbool_t pg, svint64_t op1, svint32_t op2) + /// SADALP Ztied1.D, Pg/M, Zop2.S + /// SADALP Ztied1.D, Pg/M, Zop2.S + /// + public static Vector AddPairwiseWidening(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svadalp[_u16]_m(svbool_t pg, svuint16_t op1, svuint8_t op2) + /// svuint16_t svadalp[_u16]_x(svbool_t pg, svuint16_t op1, svuint8_t op2) + /// svuint16_t svadalp[_u16]_z(svbool_t pg, svuint16_t op1, svuint8_t op2) + /// UADALP Ztied1.H, Pg/M, Zop2.B + /// UADALP Ztied1.H, Pg/M, Zop2.B + /// + public static Vector AddPairwiseWidening(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svadalp[_u32]_m(svbool_t pg, svuint32_t op1, svuint16_t op2) + /// svuint32_t svadalp[_u32]_x(svbool_t pg, svuint32_t op1, svuint16_t op2) + /// svuint32_t svadalp[_u32]_z(svbool_t pg, svuint32_t op1, svuint16_t op2) + /// UADALP Ztied1.S, Pg/M, Zop2.H + /// UADALP Ztied1.S, Pg/M, Zop2.H + /// + public static Vector AddPairwiseWidening(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint64_t svadalp[_u64]_m(svbool_t pg, svuint64_t op1, svuint32_t op2) + /// svuint64_t svadalp[_u64]_x(svbool_t pg, svuint64_t op1, svuint32_t op2) + /// svuint64_t svadalp[_u64]_z(svbool_t pg, svuint64_t op1, svuint32_t op2) + /// UADALP Ztied1.D, Pg/M, Zop2.S + /// UADALP Ztied1.D, Pg/M, Zop2.S + /// + public static Vector AddPairwiseWidening(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + // Saturating add + + /// + /// svuint8_t svqadd[_u8]_m(svbool_t pg, svuint8_t op1, svuint8_t op2) + /// svuint8_t svqadd[_u8]_x(svbool_t pg, svuint8_t op1, svuint8_t op2) + /// svuint8_t svqadd[_u8]_z(svbool_t pg, svuint8_t op1, svuint8_t op2) + /// UQADD Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// UQADD Ztied2.B, Pg/M, Ztied2.B, Zop1.B + /// UQADD Zresult.B, Zop1.B, Zop2.B + /// + public static new Vector AddSaturate(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint16_t svqadd[_s16]_m(svbool_t pg, svint16_t op1, svint16_t op2) + /// svint16_t svqadd[_s16]_x(svbool_t pg, svint16_t op1, svint16_t op2) + /// svint16_t svqadd[_s16]_z(svbool_t pg, svint16_t op1, svint16_t op2) + /// SQADD Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// SQADD Ztied2.H, Pg/M, Ztied2.H, Zop1.H + /// SQADD Zresult.H, Zop1.H, Zop2.H + /// + public static new Vector AddSaturate(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svqadd[_s32]_m(svbool_t pg, svint32_t op1, svint32_t op2) + /// svint32_t svqadd[_s32]_x(svbool_t pg, svint32_t op1, svint32_t op2) + /// svint32_t svqadd[_s32]_z(svbool_t pg, svint32_t op1, svint32_t op2) + /// SQADD Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// SQADD Ztied2.S, Pg/M, Ztied2.S, Zop1.S + /// SQADD Zresult.S, Zop1.S, Zop2.S + /// + public static new Vector AddSaturate(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint64_t svqadd[_s64]_m(svbool_t pg, svint64_t op1, svint64_t op2) + /// svint64_t svqadd[_s64]_x(svbool_t pg, svint64_t op1, svint64_t op2) + /// svint64_t svqadd[_s64]_z(svbool_t pg, svint64_t op1, svint64_t op2) + /// SQADD Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// SQADD Ztied2.D, Pg/M, Ztied2.D, Zop1.D + /// SQADD Zresult.D, Zop1.D, Zop2.D + /// + public static new Vector AddSaturate(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svqadd[_s8]_m(svbool_t pg, svint8_t op1, svint8_t op2) + /// svint8_t svqadd[_s8]_x(svbool_t pg, svint8_t op1, svint8_t op2) + /// svint8_t svqadd[_s8]_z(svbool_t pg, svint8_t op1, svint8_t op2) + /// SQADD Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// SQADD Ztied2.B, Pg/M, Ztied2.B, Zop1.B + /// SQADD Zresult.B, Zop1.B, Zop2.B + /// + public static new Vector AddSaturate(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svqadd[_u16]_m(svbool_t pg, svuint16_t op1, svuint16_t op2) + /// svuint16_t svqadd[_u16]_x(svbool_t pg, svuint16_t op1, svuint16_t op2) + /// svuint16_t svqadd[_u16]_z(svbool_t pg, svuint16_t op1, svuint16_t op2) + /// UQADD Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// UQADD Ztied2.H, Pg/M, Ztied2.H, Zop1.H + /// UQADD Zresult.H, Zop1.H, Zop2.H + /// + public static new Vector AddSaturate(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svqadd[_u32]_m(svbool_t pg, svuint32_t op1, svuint32_t op2) + /// svuint32_t svqadd[_u32]_x(svbool_t pg, svuint32_t op1, svuint32_t op2) + /// svuint32_t svqadd[_u32]_z(svbool_t pg, svuint32_t op1, svuint32_t op2) + /// UQADD Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// UQADD Ztied2.S, Pg/M, Ztied2.S, Zop1.S + /// UQADD Zresult.S, Zop1.S, Zop2.S + /// + public static new Vector AddSaturate(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint64_t svqadd[_u64]_m(svbool_t pg, svuint64_t op1, svuint64_t op2) + /// svuint64_t svqadd[_u64]_x(svbool_t pg, svuint64_t op1, svuint64_t op2) + /// svuint64_t svqadd[_u64]_z(svbool_t pg, svuint64_t op1, svuint64_t op2) + /// UQADD Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// UQADD Ztied2.D, Pg/M, Ztied2.D, Zop1.D + /// UQADD Zresult.D, Zop1.D, Zop2.D + /// + public static new Vector AddSaturate(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + // Saturating add with signed addend + + /// + /// svuint8_t svsqadd[_u8]_m(svbool_t pg, svuint8_t op1, svint8_t op2) + /// svuint8_t svsqadd[_u8]_x(svbool_t pg, svuint8_t op1, svint8_t op2) + /// svuint8_t svsqadd[_u8]_z(svbool_t pg, svuint8_t op1, svint8_t op2) + /// USQADD Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// USQADD Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// + public static Vector AddSaturateWithSignedAddend(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svsqadd[_u16]_m(svbool_t pg, svuint16_t op1, svint16_t op2) + /// svuint16_t svsqadd[_u16]_x(svbool_t pg, svuint16_t op1, svint16_t op2) + /// svuint16_t svsqadd[_u16]_z(svbool_t pg, svuint16_t op1, svint16_t op2) + /// USQADD Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// USQADD Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// + public static Vector AddSaturateWithSignedAddend(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svsqadd[_u32]_m(svbool_t pg, svuint32_t op1, svint32_t op2) + /// svuint32_t svsqadd[_u32]_x(svbool_t pg, svuint32_t op1, svint32_t op2) + /// svuint32_t svsqadd[_u32]_z(svbool_t pg, svuint32_t op1, svint32_t op2) + /// USQADD Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// USQADD Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// + public static Vector AddSaturateWithSignedAddend(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint64_t svsqadd[_u64]_m(svbool_t pg, svuint64_t op1, svint64_t op2) + /// svuint64_t svsqadd[_u64]_x(svbool_t pg, svuint64_t op1, svint64_t op2) + /// svuint64_t svsqadd[_u64]_z(svbool_t pg, svuint64_t op1, svint64_t op2) + /// USQADD Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// USQADD Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// + public static Vector AddSaturateWithSignedAddend(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + // Saturating add with unsigned addend + + /// + /// svint8_t svuqadd[_s8]_m(svbool_t pg, svint8_t op1, svuint8_t op2) + /// svint8_t svuqadd[_s8]_x(svbool_t pg, svint8_t op1, svuint8_t op2) + /// svint8_t svuqadd[_s8]_z(svbool_t pg, svint8_t op1, svuint8_t op2) + /// SUQADD Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// SUQADD Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// + public static Vector AddSaturateWithUnsignedAddend(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint16_t svuqadd[_s16]_m(svbool_t pg, svint16_t op1, svuint16_t op2) + /// svint16_t svuqadd[_s16]_x(svbool_t pg, svint16_t op1, svuint16_t op2) + /// svint16_t svuqadd[_s16]_z(svbool_t pg, svint16_t op1, svuint16_t op2) + /// SUQADD Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// SUQADD Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// + public static Vector AddSaturateWithUnsignedAddend(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svuqadd[_s32]_m(svbool_t pg, svint32_t op1, svuint32_t op2) + /// svint32_t svuqadd[_s32]_x(svbool_t pg, svint32_t op1, svuint32_t op2) + /// svint32_t svuqadd[_s32]_z(svbool_t pg, svint32_t op1, svuint32_t op2) + /// SUQADD Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// SUQADD Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// + public static Vector AddSaturateWithUnsignedAddend(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint64_t svuqadd[_s64]_m(svbool_t pg, svint64_t op1, svuint64_t op2) + /// svint64_t svuqadd[_s64]_x(svbool_t pg, svint64_t op1, svuint64_t op2) + /// svint64_t svuqadd[_s64]_z(svbool_t pg, svint64_t op1, svuint64_t op2) + /// SUQADD Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// SUQADD Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// + public static Vector AddSaturateWithUnsignedAddend(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + // Add wide (bottom) + + /// + /// svint16_t svaddwb[_s16](svint16_t op1, svint8_t op2) + /// SADDWB Zresult.H, Zop1.H, Zop2.B + /// + public static Vector AddWideLower(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svaddwb[_s32](svint32_t op1, svint16_t op2) + /// SADDWB Zresult.S, Zop1.S, Zop2.H + /// + public static Vector AddWideLower(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint64_t svaddwb[_s64](svint64_t op1, svint32_t op2) + /// SADDWB Zresult.D, Zop1.D, Zop2.S + /// + public static Vector AddWideLower(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svaddwb[_u16](svuint16_t op1, svuint8_t op2) + /// UADDWB Zresult.H, Zop1.H, Zop2.B + /// + public static Vector AddWideLower(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svaddwb[_u32](svuint32_t op1, svuint16_t op2) + /// UADDWB Zresult.S, Zop1.S, Zop2.H + /// + public static Vector AddWideLower(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint64_t svaddwb[_u64](svuint64_t op1, svuint32_t op2) + /// UADDWB Zresult.D, Zop1.D, Zop2.S + /// + public static Vector AddWideLower(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + // Add wide (top) + + /// + /// svint16_t svaddwt[_s16](svint16_t op1, svint8_t op2) + /// SADDWT Zresult.H, Zop1.H, Zop2.B + /// + public static Vector AddWideUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svaddwt[_s32](svint32_t op1, svint16_t op2) + /// SADDWT Zresult.S, Zop1.S, Zop2.H + /// + public static Vector AddWideUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint64_t svaddwt[_s64](svint64_t op1, svint32_t op2) + /// SADDWT Zresult.D, Zop1.D, Zop2.S + /// + public static Vector AddWideUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svaddwt[_u16](svuint16_t op1, svuint8_t op2) + /// UADDWT Zresult.H, Zop1.H, Zop2.B + /// + public static Vector AddWideUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svaddwt[_u32](svuint32_t op1, svuint16_t op2) + /// UADDWT Zresult.S, Zop1.S, Zop2.H + /// + public static Vector AddWideUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint64_t svaddwt[_u64](svuint64_t op1, svuint32_t op2) + /// UADDWT Zresult.D, Zop1.D, Zop2.S + /// + public static Vector AddWideUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + // Add long (bottom) + + /// + /// svint16_t svaddlb[_s16](svint8_t op1, svint8_t op2) + /// SADDLB Zresult.H, Zop1.B, Zop2.B + /// + public static Vector AddWideningLower(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svaddlb[_s32](svint16_t op1, svint16_t op2) + /// SADDLB Zresult.S, Zop1.H, Zop2.H + /// + public static Vector AddWideningLower(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint64_t svaddlb[_s64](svint32_t op1, svint32_t op2) + /// SADDLB Zresult.D, Zop1.S, Zop2.S + /// + public static Vector AddWideningLower(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svaddlb[_u16](svuint8_t op1, svuint8_t op2) + /// UADDLB Zresult.H, Zop1.B, Zop2.B + /// + public static Vector AddWideningLower(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svaddlb[_u32](svuint16_t op1, svuint16_t op2) + /// UADDLB Zresult.S, Zop1.H, Zop2.H + /// + public static Vector AddWideningLower(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint64_t svaddlb[_u64](svuint32_t op1, svuint32_t op2) + /// UADDLB Zresult.D, Zop1.S, Zop2.S + /// + public static Vector AddWideningLower(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + // Add long (bottom + top) + + /// + /// svint16_t svaddlbt[_s16](svint8_t op1, svint8_t op2) + /// SADDLBT Zresult.H, Zop1.B, Zop2.B + /// + public static Vector AddWideningLowerUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svaddlbt[_s32](svint16_t op1, svint16_t op2) + /// SADDLBT Zresult.S, Zop1.H, Zop2.H + /// + public static Vector AddWideningLowerUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint64_t svaddlbt[_s64](svint32_t op1, svint32_t op2) + /// SADDLBT Zresult.D, Zop1.S, Zop2.S + /// + public static Vector AddWideningLowerUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + // Add long (top) + + /// + /// svint16_t svaddlt[_s16](svint8_t op1, svint8_t op2) + /// SADDLT Zresult.H, Zop1.B, Zop2.B + /// + public static Vector AddWideningUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svaddlt[_s32](svint16_t op1, svint16_t op2) + /// SADDLT Zresult.S, Zop1.H, Zop2.H + /// + public static Vector AddWideningUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svint64_t svaddlt[_s64](svint32_t op1, svint32_t op2) + /// SADDLT Zresult.D, Zop1.S, Zop2.S + /// + public static Vector AddWideningUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svaddlt[_u16](svuint8_t op1, svuint8_t op2) + /// UADDLT Zresult.H, Zop1.B, Zop2.B + /// + public static Vector AddWideningUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svaddlt[_u32](svuint16_t op1, svuint16_t op2) + /// UADDLT Zresult.S, Zop1.H, Zop2.H + /// + public static Vector AddWideningUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + + /// + /// svuint64_t svaddlt[_u64](svuint32_t op1, svuint32_t op2) + /// UADDLT Zresult.D, Zop1.S, Zop2.S + /// + public static Vector AddWideningUpper(Vector left, Vector right) { throw new PlatformNotSupportedException(); } + // Bitwise clear and exclusive OR /// diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve2.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve2.cs index 9faf69c97d1db5..ab4c4cb1f4cee7 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve2.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve2.cs @@ -334,6 +334,475 @@ internal Arm64() { } /// public static unsafe Vector AddHighNarrowingOdd(Vector even, Vector left, Vector right) => AddHighNarrowingOdd(even, left, right); + // Add pairwise + + /// + /// svuint8_t svaddp[_u8]_m(svbool_t pg, svuint8_t op1, svuint8_t op2) + /// svuint8_t svaddp[_u8]_x(svbool_t pg, svuint8_t op1, svuint8_t op2) + /// ADDP Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// ADDP Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// + public static Vector AddPairwise(Vector left, Vector right) => AddPairwise(left, right); + + /// + /// svfloat64_t svaddp[_f64]_m(svbool_t pg, svfloat64_t op1, svfloat64_t op2) + /// svfloat64_t svaddp[_f64]_x(svbool_t pg, svfloat64_t op1, svfloat64_t op2) + /// FADDP Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// FADDP Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// + public static Vector AddPairwise(Vector left, Vector right) => AddPairwise(left, right); + + /// + /// svint16_t svaddp[_s16]_m(svbool_t pg, svint16_t op1, svint16_t op2) + /// svint16_t svaddp[_s16]_x(svbool_t pg, svint16_t op1, svint16_t op2) + /// ADDP Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// ADDP Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// + public static Vector AddPairwise(Vector left, Vector right) => AddPairwise(left, right); + + /// + /// svint32_t svaddp[_s32]_m(svbool_t pg, svint32_t op1, svint32_t op2) + /// svint32_t svaddp[_s32]_x(svbool_t pg, svint32_t op1, svint32_t op2) + /// ADDP Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// ADDP Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// + public static Vector AddPairwise(Vector left, Vector right) => AddPairwise(left, right); + + /// + /// svint64_t svaddp[_s64]_m(svbool_t pg, svint64_t op1, svint64_t op2) + /// svint64_t svaddp[_s64]_x(svbool_t pg, svint64_t op1, svint64_t op2) + /// ADDP Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// ADDP Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// + public static Vector AddPairwise(Vector left, Vector right) => AddPairwise(left, right); + + /// + /// svint8_t svaddp[_s8]_m(svbool_t pg, svint8_t op1, svint8_t op2) + /// svint8_t svaddp[_s8]_x(svbool_t pg, svint8_t op1, svint8_t op2) + /// ADDP Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// ADDP Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// + public static Vector AddPairwise(Vector left, Vector right) => AddPairwise(left, right); + + /// + /// svfloat32_t svaddp[_f32]_m(svbool_t pg, svfloat32_t op1, svfloat32_t op2) + /// svfloat32_t svaddp[_f32]_x(svbool_t pg, svfloat32_t op1, svfloat32_t op2) + /// FADDP Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// FADDP Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// + public static Vector AddPairwise(Vector left, Vector right) => AddPairwise(left, right); + + /// + /// svuint16_t svaddp[_u16]_m(svbool_t pg, svuint16_t op1, svuint16_t op2) + /// svuint16_t svaddp[_u16]_x(svbool_t pg, svuint16_t op1, svuint16_t op2) + /// ADDP Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// ADDP Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// + public static Vector AddPairwise(Vector left, Vector right) => AddPairwise(left, right); + + /// + /// svuint32_t svaddp[_u32]_m(svbool_t pg, svuint32_t op1, svuint32_t op2) + /// svuint32_t svaddp[_u32]_x(svbool_t pg, svuint32_t op1, svuint32_t op2) + /// ADDP Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// ADDP Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// + public static Vector AddPairwise(Vector left, Vector right) => AddPairwise(left, right); + + /// + /// svuint64_t svaddp[_u64]_m(svbool_t pg, svuint64_t op1, svuint64_t op2) + /// svuint64_t svaddp[_u64]_x(svbool_t pg, svuint64_t op1, svuint64_t op2) + /// ADDP Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// ADDP Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// + public static Vector AddPairwise(Vector left, Vector right) => AddPairwise(left, right); + + // Add and accumulate long pairwise + + /// + /// svint16_t svadalp[_s16]_m(svbool_t pg, svint16_t op1, svint8_t op2) + /// svint16_t svadalp[_s16]_x(svbool_t pg, svint16_t op1, svint8_t op2) + /// svint16_t svadalp[_s16]_z(svbool_t pg, svint16_t op1, svint8_t op2) + /// SADALP Ztied1.H, Pg/M, Zop2.B + /// SADALP Ztied1.H, Pg/M, Zop2.B + /// + public static Vector AddPairwiseWidening(Vector left, Vector right) => AddPairwiseWidening(left, right); + + /// + /// svint32_t svadalp[_s32]_m(svbool_t pg, svint32_t op1, svint16_t op2) + /// svint32_t svadalp[_s32]_x(svbool_t pg, svint32_t op1, svint16_t op2) + /// svint32_t svadalp[_s32]_z(svbool_t pg, svint32_t op1, svint16_t op2) + /// SADALP Ztied1.S, Pg/M, Zop2.H + /// SADALP Ztied1.S, Pg/M, Zop2.H + /// + public static Vector AddPairwiseWidening(Vector left, Vector right) => AddPairwiseWidening(left, right); + + /// + /// svint64_t svadalp[_s64]_m(svbool_t pg, svint64_t op1, svint32_t op2) + /// svint64_t svadalp[_s64]_x(svbool_t pg, svint64_t op1, svint32_t op2) + /// svint64_t svadalp[_s64]_z(svbool_t pg, svint64_t op1, svint32_t op2) + /// SADALP Ztied1.D, Pg/M, Zop2.S + /// SADALP Ztied1.D, Pg/M, Zop2.S + /// + public static Vector AddPairwiseWidening(Vector left, Vector right) => AddPairwiseWidening(left, right); + + /// + /// svuint16_t svadalp[_u16]_m(svbool_t pg, svuint16_t op1, svuint8_t op2) + /// svuint16_t svadalp[_u16]_x(svbool_t pg, svuint16_t op1, svuint8_t op2) + /// svuint16_t svadalp[_u16]_z(svbool_t pg, svuint16_t op1, svuint8_t op2) + /// UADALP Ztied1.H, Pg/M, Zop2.B + /// UADALP Ztied1.H, Pg/M, Zop2.B + /// + public static Vector AddPairwiseWidening(Vector left, Vector right) => AddPairwiseWidening(left, right); + + /// + /// svuint32_t svadalp[_u32]_m(svbool_t pg, svuint32_t op1, svuint16_t op2) + /// svuint32_t svadalp[_u32]_x(svbool_t pg, svuint32_t op1, svuint16_t op2) + /// svuint32_t svadalp[_u32]_z(svbool_t pg, svuint32_t op1, svuint16_t op2) + /// UADALP Ztied1.S, Pg/M, Zop2.H + /// UADALP Ztied1.S, Pg/M, Zop2.H + /// + public static Vector AddPairwiseWidening(Vector left, Vector right) => AddPairwiseWidening(left, right); + + /// + /// svuint64_t svadalp[_u64]_m(svbool_t pg, svuint64_t op1, svuint32_t op2) + /// svuint64_t svadalp[_u64]_x(svbool_t pg, svuint64_t op1, svuint32_t op2) + /// svuint64_t svadalp[_u64]_z(svbool_t pg, svuint64_t op1, svuint32_t op2) + /// UADALP Ztied1.D, Pg/M, Zop2.S + /// UADALP Ztied1.D, Pg/M, Zop2.S + /// + public static Vector AddPairwiseWidening(Vector left, Vector right) => AddPairwiseWidening(left, right); + + + // Saturating add + + /// + /// svuint8_t svqadd[_u8]_m(svbool_t pg, svuint8_t op1, svuint8_t op2) + /// svuint8_t svqadd[_u8]_x(svbool_t pg, svuint8_t op1, svuint8_t op2) + /// svuint8_t svqadd[_u8]_z(svbool_t pg, svuint8_t op1, svuint8_t op2) + /// UQADD Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// UQADD Ztied2.B, Pg/M, Ztied2.B, Zop1.B + /// UQADD Zresult.B, Zop1.B, Zop2.B + /// + public static new Vector AddSaturate(Vector left, Vector right) => AddSaturate(left, right); + + /// + /// svint16_t svqadd[_s16]_m(svbool_t pg, svint16_t op1, svint16_t op2) + /// svint16_t svqadd[_s16]_x(svbool_t pg, svint16_t op1, svint16_t op2) + /// svint16_t svqadd[_s16]_z(svbool_t pg, svint16_t op1, svint16_t op2) + /// SQADD Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// SQADD Ztied2.H, Pg/M, Ztied2.H, Zop1.H + /// SQADD Zresult.H, Zop1.H, Zop2.H + /// + public static new Vector AddSaturate(Vector left, Vector right) => AddSaturate(left, right); + + /// + /// svint32_t svqadd[_s32]_m(svbool_t pg, svint32_t op1, svint32_t op2) + /// svint32_t svqadd[_s32]_x(svbool_t pg, svint32_t op1, svint32_t op2) + /// svint32_t svqadd[_s32]_z(svbool_t pg, svint32_t op1, svint32_t op2) + /// SQADD Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// SQADD Ztied2.S, Pg/M, Ztied2.S, Zop1.S + /// SQADD Zresult.S, Zop1.S, Zop2.S + /// + public static new Vector AddSaturate(Vector left, Vector right) => AddSaturate(left, right); + + /// + /// svint64_t svqadd[_s64]_m(svbool_t pg, svint64_t op1, svint64_t op2) + /// svint64_t svqadd[_s64]_x(svbool_t pg, svint64_t op1, svint64_t op2) + /// svint64_t svqadd[_s64]_z(svbool_t pg, svint64_t op1, svint64_t op2) + /// SQADD Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// SQADD Ztied2.D, Pg/M, Ztied2.D, Zop1.D + /// SQADD Zresult.D, Zop1.D, Zop2.D + /// + public static new Vector AddSaturate(Vector left, Vector right) => AddSaturate(left, right); + + /// + /// svint8_t svqadd[_s8]_m(svbool_t pg, svint8_t op1, svint8_t op2) + /// svint8_t svqadd[_s8]_x(svbool_t pg, svint8_t op1, svint8_t op2) + /// svint8_t svqadd[_s8]_z(svbool_t pg, svint8_t op1, svint8_t op2) + /// SQADD Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// SQADD Ztied2.B, Pg/M, Ztied2.B, Zop1.B + /// SQADD Zresult.B, Zop1.B, Zop2.B + /// + public static new Vector AddSaturate(Vector left, Vector right) => AddSaturate(left, right); + + /// + /// svuint16_t svqadd[_u16]_m(svbool_t pg, svuint16_t op1, svuint16_t op2) + /// svuint16_t svqadd[_u16]_x(svbool_t pg, svuint16_t op1, svuint16_t op2) + /// svuint16_t svqadd[_u16]_z(svbool_t pg, svuint16_t op1, svuint16_t op2) + /// UQADD Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// UQADD Ztied2.H, Pg/M, Ztied2.H, Zop1.H + /// UQADD Zresult.H, Zop1.H, Zop2.H + /// + public static new Vector AddSaturate(Vector left, Vector right) => AddSaturate(left, right); + + /// + /// svuint32_t svqadd[_u32]_m(svbool_t pg, svuint32_t op1, svuint32_t op2) + /// svuint32_t svqadd[_u32]_x(svbool_t pg, svuint32_t op1, svuint32_t op2) + /// svuint32_t svqadd[_u32]_z(svbool_t pg, svuint32_t op1, svuint32_t op2) + /// UQADD Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// UQADD Ztied2.S, Pg/M, Ztied2.S, Zop1.S + /// UQADD Zresult.S, Zop1.S, Zop2.S + /// + public static new Vector AddSaturate(Vector left, Vector right) => AddSaturate(left, right); + + /// + /// svuint64_t svqadd[_u64]_m(svbool_t pg, svuint64_t op1, svuint64_t op2) + /// svuint64_t svqadd[_u64]_x(svbool_t pg, svuint64_t op1, svuint64_t op2) + /// svuint64_t svqadd[_u64]_z(svbool_t pg, svuint64_t op1, svuint64_t op2) + /// UQADD Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// UQADD Ztied2.D, Pg/M, Ztied2.D, Zop1.D + /// UQADD Zresult.D, Zop1.D, Zop2.D + /// + public static new Vector AddSaturate(Vector left, Vector right) => AddSaturate(left, right); + + // Saturating add with signed addend + + /// + /// svuint8_t svsqadd[_u8]_m(svbool_t pg, svuint8_t op1, svint8_t op2) + /// svuint8_t svsqadd[_u8]_x(svbool_t pg, svuint8_t op1, svint8_t op2) + /// svuint8_t svsqadd[_u8]_z(svbool_t pg, svuint8_t op1, svint8_t op2) + /// USQADD Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// USQADD Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// + public static Vector AddSaturateWithSignedAddend(Vector left, Vector right) => AddSaturateWithSignedAddend(left, right); + + /// + /// svuint16_t svsqadd[_u16]_m(svbool_t pg, svuint16_t op1, svint16_t op2) + /// svuint16_t svsqadd[_u16]_x(svbool_t pg, svuint16_t op1, svint16_t op2) + /// svuint16_t svsqadd[_u16]_z(svbool_t pg, svuint16_t op1, svint16_t op2) + /// USQADD Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// USQADD Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// + public static Vector AddSaturateWithSignedAddend(Vector left, Vector right) => AddSaturateWithSignedAddend(left, right); + + /// + /// svuint32_t svsqadd[_u32]_m(svbool_t pg, svuint32_t op1, svint32_t op2) + /// svuint32_t svsqadd[_u32]_x(svbool_t pg, svuint32_t op1, svint32_t op2) + /// svuint32_t svsqadd[_u32]_z(svbool_t pg, svuint32_t op1, svint32_t op2) + /// USQADD Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// USQADD Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// + public static Vector AddSaturateWithSignedAddend(Vector left, Vector right) => AddSaturateWithSignedAddend(left, right); + + /// + /// svuint64_t svsqadd[_u64]_m(svbool_t pg, svuint64_t op1, svint64_t op2) + /// svuint64_t svsqadd[_u64]_x(svbool_t pg, svuint64_t op1, svint64_t op2) + /// svuint64_t svsqadd[_u64]_z(svbool_t pg, svuint64_t op1, svint64_t op2) + /// USQADD Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// USQADD Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// + public static Vector AddSaturateWithSignedAddend(Vector left, Vector right) => AddSaturateWithSignedAddend(left, right); + + // Saturating add with unsigned addend + + /// + /// svint16_t svuqadd[_s16]_m(svbool_t pg, svint16_t op1, svuint16_t op2) + /// svint16_t svuqadd[_s16]_x(svbool_t pg, svint16_t op1, svuint16_t op2) + /// svint16_t svuqadd[_s16]_z(svbool_t pg, svint16_t op1, svuint16_t op2) + /// SUQADD Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// SUQADD Ztied1.H, Pg/M, Ztied1.H, Zop2.H + /// + public static unsafe Vector AddSaturateWithUnsignedAddend(Vector left, Vector right) => AddSaturateWithUnsignedAddend(left, right); + + /// + /// svint32_t svuqadd[_s32]_m(svbool_t pg, svint32_t op1, svuint32_t op2) + /// svint32_t svuqadd[_s32]_x(svbool_t pg, svint32_t op1, svuint32_t op2) + /// svint32_t svuqadd[_s32]_z(svbool_t pg, svint32_t op1, svuint32_t op2) + /// SUQADD Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// SUQADD Ztied1.S, Pg/M, Ztied1.S, Zop2.S + /// + public static unsafe Vector AddSaturateWithUnsignedAddend(Vector left, Vector right) => AddSaturateWithUnsignedAddend(left, right); + + /// + /// svint64_t svuqadd[_s64]_m(svbool_t pg, svint64_t op1, svuint64_t op2) + /// svint64_t svuqadd[_s64]_x(svbool_t pg, svint64_t op1, svuint64_t op2) + /// svint64_t svuqadd[_s64]_z(svbool_t pg, svint64_t op1, svuint64_t op2) + /// SUQADD Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// SUQADD Ztied1.D, Pg/M, Ztied1.D, Zop2.D + /// + public static unsafe Vector AddSaturateWithUnsignedAddend(Vector left, Vector right) => AddSaturateWithUnsignedAddend(left, right); + + /// + /// svint8_t svuqadd[_s8]_m(svbool_t pg, svint8_t op1, svuint8_t op2) + /// svint8_t svuqadd[_s8]_x(svbool_t pg, svint8_t op1, svuint8_t op2) + /// svint8_t svuqadd[_s8]_z(svbool_t pg, svint8_t op1, svuint8_t op2) + /// SUQADD Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// SUQADD Ztied1.B, Pg/M, Ztied1.B, Zop2.B + /// + public static unsafe Vector AddSaturateWithUnsignedAddend(Vector left, Vector right) => AddSaturateWithUnsignedAddend(left, right); + + // Add wide (bottom) + + /// + /// svint16_t svaddwb[_s16](svint16_t op1, svint8_t op2) + /// SADDWB Zresult.H, Zop1.H, Zop2.B + /// + public static Vector AddWideLower(Vector left, Vector right) => AddWideLower(left, right); + + /// + /// svint32_t svaddwb[_s32](svint32_t op1, svint16_t op2) + /// SADDWB Zresult.S, Zop1.S, Zop2.H + /// + public static Vector AddWideLower(Vector left, Vector right) => AddWideLower(left, right); + + /// + /// svint64_t svaddwb[_s64](svint64_t op1, svint32_t op2) + /// SADDWB Zresult.D, Zop1.D, Zop2.S + /// + public static Vector AddWideLower(Vector left, Vector right) => AddWideLower(left, right); + + /// + /// svuint16_t svaddwb[_u16](svuint16_t op1, svuint8_t op2) + /// UADDWB Zresult.H, Zop1.H, Zop2.B + /// + public static Vector AddWideLower(Vector left, Vector right) => AddWideLower(left, right); + + /// + /// svuint32_t svaddwb[_u32](svuint32_t op1, svuint16_t op2) + /// UADDWB Zresult.S, Zop1.S, Zop2.H + /// + public static Vector AddWideLower(Vector left, Vector right) => AddWideLower(left, right); + + /// + /// svuint64_t svaddwb[_u64](svuint64_t op1, svuint32_t op2) + /// UADDWB Zresult.D, Zop1.D, Zop2.S + /// + public static Vector AddWideLower(Vector left, Vector right) => AddWideLower(left, right); + + // Add wide (top) + + /// + /// svint16_t svaddwt[_s16](svint16_t op1, svint8_t op2) + /// SADDWT Zresult.H, Zop1.H, Zop2.B + /// + public static Vector AddWideUpper(Vector left, Vector right) => AddWideUpper(left, right); + + /// + /// svint32_t svaddwt[_s32](svint32_t op1, svint16_t op2) + /// SADDWT Zresult.S, Zop1.S, Zop2.H + /// + public static Vector AddWideUpper(Vector left, Vector right) => AddWideUpper(left, right); + + /// + /// svint64_t svaddwt[_s64](svint64_t op1, svint32_t op2) + /// SADDWT Zresult.D, Zop1.D, Zop2.S + /// + public static Vector AddWideUpper(Vector left, Vector right) => AddWideUpper(left, right); + + /// + /// svuint16_t svaddwt[_u16](svuint16_t op1, svuint8_t op2) + /// UADDWT Zresult.H, Zop1.H, Zop2.B + /// + public static Vector AddWideUpper(Vector left, Vector right) => AddWideUpper(left, right); + + /// + /// svuint32_t svaddwt[_u32](svuint32_t op1, svuint16_t op2) + /// UADDWT Zresult.S, Zop1.S, Zop2.H + /// + public static Vector AddWideUpper(Vector left, Vector right) => AddWideUpper(left, right); + + /// + /// svuint64_t svaddwt[_u64](svuint64_t op1, svuint32_t op2) + /// UADDWT Zresult.D, Zop1.D, Zop2.S + /// + public static Vector AddWideUpper(Vector left, Vector right) => AddWideUpper(left, right); + + // Add long (bottom) + + /// + /// svint16_t svaddlb[_s16](svint8_t op1, svint8_t op2) + /// SADDLB Zresult.H, Zop1.B, Zop2.B + /// + public static Vector AddWideningLower(Vector left, Vector right) => AddWideningLower(left, right); + + /// + /// svint32_t svaddlb[_s32](svint16_t op1, svint16_t op2) + /// SADDLB Zresult.S, Zop1.H, Zop2.H + /// + public static Vector AddWideningLower(Vector left, Vector right) => AddWideningLower(left, right); + + /// + /// svint64_t svaddlb[_s64](svint32_t op1, svint32_t op2) + /// SADDLB Zresult.D, Zop1.S, Zop2.S + /// + public static Vector AddWideningLower(Vector left, Vector right) => AddWideningLower(left, right); + + /// + /// svuint16_t svaddlb[_u16](svuint8_t op1, svuint8_t op2) + /// UADDLB Zresult.H, Zop1.B, Zop2.B + /// + public static Vector AddWideningLower(Vector left, Vector right) => AddWideningLower(left, right); + + /// + /// svuint32_t svaddlb[_u32](svuint16_t op1, svuint16_t op2) + /// UADDLB Zresult.S, Zop1.H, Zop2.H + /// + public static Vector AddWideningLower(Vector left, Vector right) => AddWideningLower(left, right); + + /// + /// svuint64_t svaddlb[_u64](svuint32_t op1, svuint32_t op2) + /// UADDLB Zresult.D, Zop1.S, Zop2.S + /// + public static Vector AddWideningLower(Vector left, Vector right) => AddWideningLower(left, right); + + // Add long (bottom + top) + + /// + /// svint16_t svaddlbt[_s16](svint8_t op1, svint8_t op2) + /// SADDLBT Zresult.H, Zop1.B, Zop2.B + /// + public static Vector AddWideningLowerUpper(Vector left, Vector right) => AddWideningLowerUpper(left, right); + + /// + /// svint32_t svaddlbt[_s32](svint16_t op1, svint16_t op2) + /// SADDLBT Zresult.S, Zop1.H, Zop2.H + /// + public static Vector AddWideningLowerUpper(Vector left, Vector right) => AddWideningLowerUpper(left, right); + + /// + /// svint64_t svaddlbt[_s64](svint32_t op1, svint32_t op2) + /// SADDLBT Zresult.D, Zop1.S, Zop2.S + /// + public static Vector AddWideningLowerUpper(Vector left, Vector right) => AddWideningLowerUpper(left, right); + + // Add long (top) + + /// + /// svint16_t svaddlt[_s16](svint8_t op1, svint8_t op2) + /// SADDLT Zresult.H, Zop1.B, Zop2.B + /// + public static Vector AddWideningUpper(Vector left, Vector right) => AddWideningUpper(left, right); + + /// + /// svint32_t svaddlt[_s32](svint16_t op1, svint16_t op2) + /// SADDLT Zresult.S, Zop1.H, Zop2.H + /// + public static Vector AddWideningUpper(Vector left, Vector right) => AddWideningUpper(left, right); + + /// + /// svint64_t svaddlt[_s64](svint32_t op1, svint32_t op2) + /// SADDLT Zresult.D, Zop1.S, Zop2.S + /// + public static Vector AddWideningUpper(Vector left, Vector right) => AddWideningUpper(left, right); + + /// + /// svuint16_t svaddlt[_u16](svuint8_t op1, svuint8_t op2) + /// UADDLT Zresult.H, Zop1.B, Zop2.B + /// + public static Vector AddWideningUpper(Vector left, Vector right) => AddWideningUpper(left, right); + + /// + /// svuint32_t svaddlt[_u32](svuint16_t op1, svuint16_t op2) + /// UADDLT Zresult.S, Zop1.H, Zop2.H + /// + public static Vector AddWideningUpper(Vector left, Vector right) => AddWideningUpper(left, right); + + /// + /// svuint64_t svaddlt[_u64](svuint32_t op1, svuint32_t op2) + /// UADDLT Zresult.D, Zop1.S, Zop2.S + /// + public static Vector AddWideningUpper(Vector left, Vector right) => AddWideningUpper(left, right); + // Bitwise clear and exclusive OR /// diff --git a/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs b/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs index ceaf84a7ff0af3..05f9d0c186b946 100644 --- a/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs +++ b/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs @@ -6135,6 +6135,68 @@ internal Arm64() { } public static System.Numerics.Vector AddHighNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector AddHighNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + + public static System.Numerics.Vector AddPairwise(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwise(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwise(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwise(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwise(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwise(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwise(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwise(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwise(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwise(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + + public static System.Numerics.Vector AddPairwiseWidening(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwiseWidening(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwiseWidening(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwiseWidening(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwiseWidening(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddPairwiseWidening(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + + public static new System.Numerics.Vector AddSaturate(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static new System.Numerics.Vector AddSaturate(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static new System.Numerics.Vector AddSaturate(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static new System.Numerics.Vector AddSaturate(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static new System.Numerics.Vector AddSaturate(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static new System.Numerics.Vector AddSaturate(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static new System.Numerics.Vector AddSaturate(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static new System.Numerics.Vector AddSaturate(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddSaturateWithSignedAddend(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddSaturateWithSignedAddend(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddSaturateWithSignedAddend(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddSaturateWithSignedAddend(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddSaturateWithUnsignedAddend(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddSaturateWithUnsignedAddend(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddSaturateWithUnsignedAddend(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddSaturateWithUnsignedAddend(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideLower(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideLower(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideLower(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideLower(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideLower(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideLower(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningLower(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningLower(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningLower(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningLower(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningLower(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningLower(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningLowerUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningLowerUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningLowerUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector AddWideningUpper(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector BitwiseClearXor(System.Numerics.Vector xor, System.Numerics.Vector value, System.Numerics.Vector mask) { throw null; } public static System.Numerics.Vector BitwiseClearXor(System.Numerics.Vector xor, System.Numerics.Vector value, System.Numerics.Vector mask) { throw null; } public static System.Numerics.Vector BitwiseClearXor(System.Numerics.Vector xor, System.Numerics.Vector value, System.Numerics.Vector mask) { throw null; } diff --git a/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs b/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs index fa84799390c7f1..8ae2d9d8f15c47 100644 --- a/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs +++ b/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs @@ -4836,6 +4836,75 @@ ("SveVecTernOpFirstArgTest.template", new Dictionary { ["TestName"] = "Sve2_AddHighNarrowingOdd_ushort_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddHighNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddHighNarrowingOdd(first, second, third, i) != result[i]", ["GetIterResult"] = "(UInt16) Helpers.AddHighNarrowingOdd(first, second, third, i)"}), ("SveVecTernOpFirstArgTest.template", new Dictionary { ["TestName"] = "Sve2_AddHighNarrowingOdd_uint_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddHighNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddHighNarrowingOdd(first, second, third, i) != result[i]", ["GetIterResult"] = "(UInt32) Helpers.AddHighNarrowingOdd(first, second, third, i)"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddPairwise_float", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwise", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSingle()", ["NextValueOp2"] = "TestLibrary.Generator.GetSingle()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseSve(left, right, i) != result[i]", ["GetIterResult"] = "(Single) Helpers.AddPairwiseSve(left, right, i)"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddPairwise_double", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwise", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["NextValueOp2"] = "TestLibrary.Generator.GetDouble()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseSve(left, right, i) != result[i]", ["GetIterResult"] = "(Double) Helpers.AddPairwiseSve(left, right, i)"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddPairwise_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwise", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseSve(left, right, i) != result[i]", ["GetIterResult"] = "(SByte) Helpers.AddPairwiseSve(left, right, i)"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddPairwise_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwise", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseSve(left, right, i) != result[i]", ["GetIterResult"] = "(Int16) Helpers.AddPairwiseSve(left, right, i)"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddPairwise_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwise", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseSve(left, right, i) != result[i]", ["GetIterResult"] = "(Int32) Helpers.AddPairwiseSve(left, right, i)"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddPairwise_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwise", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseSve(left, right, i) != result[i]", ["GetIterResult"] = "(Int64) Helpers.AddPairwiseSve(left, right, i)"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddPairwise_byte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwise", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseSve(left, right, i) != result[i]", ["GetIterResult"] = "(Byte) Helpers.AddPairwiseSve(left, right, i)"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddPairwise_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwise", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseSve(left, right, i) != result[i]", ["GetIterResult"] = "(UInt16) Helpers.AddPairwiseSve(left, right, i)"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddPairwise_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwise", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseSve(left, right, i) != result[i]", ["GetIterResult"] = "(UInt32) Helpers.AddPairwiseSve(left, right, i)"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddPairwise_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwise", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseSve(left, right, i) != result[i]", ["GetIterResult"] = "(UInt64) Helpers.AddPairwiseSve(left, right, i)"}), + + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddPairwiseWidening_short_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwiseWidening", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseWidening(left, right, i) != result[i]", ["GetIterResult"] = "(Int16) Helpers.AddPairwiseWidening(left, right, i)"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddPairwiseWidening_int_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwiseWidening", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseWidening(left, right, i) != result[i]", ["GetIterResult"] = "(Int32) Helpers.AddPairwiseWidening(left, right, i)"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddPairwiseWidening_long_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwiseWidening", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseWidening(left, right, i) != result[i]", ["GetIterResult"] = "(Int64) Helpers.AddPairwiseWidening(left, right, i)"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddPairwiseWidening_ushort_byte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwiseWidening", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseWidening(left, right, i) != result[i]", ["GetIterResult"] = "(UInt16) Helpers.AddPairwiseWidening(left, right, i)"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddPairwiseWidening_uint_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwiseWidening", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseWidening(left, right, i) != result[i]", ["GetIterResult"] = "(UInt32) Helpers.AddPairwiseWidening(left, right, i)"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddPairwiseWidening_ulong_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddPairwiseWidening", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddPairwiseWidening(left, right, i) != result[i]", ["GetIterResult"] = "(UInt64) Helpers.AddPairwiseWidening(left, right, i)"}), + + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddSaturate_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturate", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(SByte) Helpers.AddSaturate(left[i], right[i])"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddSaturate_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturate", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(Int16) Helpers.AddSaturate(left[i], right[i])"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddSaturate_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturate", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(Int32) Helpers.AddSaturate(left[i], right[i])"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddSaturate_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturate", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(Int64) Helpers.AddSaturate(left[i], right[i])"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddSaturate_byte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturate", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(Byte) Helpers.AddSaturate(left[i], right[i])"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddSaturate_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturate", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(UInt16) Helpers.AddSaturate(left[i], right[i])"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddSaturate_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturate", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(UInt32) Helpers.AddSaturate(left[i], right[i])"}), + ("SveVecBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_AddSaturate_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturate", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(UInt64) Helpers.AddSaturate(left[i], right[i])"}), + + ("SveVecBinOpDifferentRetType.template", new Dictionary {["TestName"] = "Sve2_AddSaturateWithSignedAddend_byte_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturateWithSignedAddend", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(Byte) Helpers.AddSaturate(left[i], right[i])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary {["TestName"] = "Sve2_AddSaturateWithSignedAddend_ushort_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturateWithSignedAddend", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(UInt16) Helpers.AddSaturate(left[i], right[i])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary {["TestName"] = "Sve2_AddSaturateWithSignedAddend_uint_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturateWithSignedAddend", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(UInt32) Helpers.AddSaturate(left[i], right[i])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary {["TestName"] = "Sve2_AddSaturateWithSignedAddend_ulong_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturateWithSignedAddend", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(UInt64) Helpers.AddSaturate(left[i], right[i])"}), + + ("SveVecBinOpDifferentRetType.template", new Dictionary {["TestName"] = "Sve2_AddSaturateWithUnsignedAddend_sbyte_byte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturateWithUnsignedAddend", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(SByte) Helpers.AddSaturate(left[i], right[i])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary {["TestName"] = "Sve2_AddSaturateWithUnsignedAddend_short_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturateWithUnsignedAddend", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(Int16) Helpers.AddSaturate(left[i], right[i])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary {["TestName"] = "Sve2_AddSaturateWithUnsignedAddend_int_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturateWithUnsignedAddend", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(Int32) Helpers.AddSaturate(left[i], right[i])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary {["TestName"] = "Sve2_AddSaturateWithUnsignedAddend_long_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddSaturateWithUnsignedAddend", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddSaturate(left[i], right[i]) != result[i]", ["GetIterResult"] = "(Int64) Helpers.AddSaturate(left[i], right[i])"}), + + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideLower_short_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideLower", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i], right[i * 2]) != result[i]", ["GetIterResult"] = "(Int16) Helpers.AddWidening(left[i], right[i * 2])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideLower_int_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideLower", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i], right[i * 2]) != result[i]", ["GetIterResult"] = "(Int32) Helpers.AddWidening(left[i], right[i * 2])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideLower_long_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideLower", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i], right[i * 2]) != result[i]", ["GetIterResult"] = "(Int64) Helpers.AddWidening(left[i], right[i * 2])",}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideLower_ushort_byte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideLower", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i], right[i * 2])!= result[i]", ["GetIterResult"] = "(UInt16) Helpers.AddWidening(left[i], right[i * 2])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideLower_uint_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideLower", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i], right[i * 2]) != result[i]", ["GetIterResult"] = "(UInt32) Helpers.AddWidening(left[i], right[i * 2])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideLower_ulong_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideLower", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i], right[i * 2]) != result[i]", ["GetIterResult"] = "(UInt64) Helpers.AddWidening(left[i], right[i * 2])"}), + + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideUpper_short_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(Int16) Helpers.AddWidening(left[i], right[i * 2 + 1])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideUpper_int_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(Int32) Helpers.AddWidening(left[i], right[i * 2 + 1])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideUpper_long_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(Int64) Helpers.AddWidening(left[i], right[i * 2 + 1])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideUpper_ushort_byte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(UInt16) Helpers.AddWidening(left[i], right[i * 2 + 1])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideUpper_uint_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(UInt32) Helpers.AddWidening(left[i], right[i * 2 + 1])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideUpper_ulong_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(UInt64) Helpers.AddWidening(left[i], right[i * 2 + 1])"}), + + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningLower_short_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningLower", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2], right[i * 2]) != result[i]", ["GetIterResult"] = "(Int16) Helpers.AddWidening(left[i * 2], right[i * 2])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningLower_int_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningLower", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2], right[i * 2]) != result[i]", ["GetIterResult"] = "(Int32) Helpers.AddWidening(left[i * 2], right[i * 2])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningLower_long_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningLower", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2], right[i * 2]) != result[i]", ["GetIterResult"] = "(Int64) Helpers.AddWidening(left[i * 2], right[i * 2])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningLower_ushort_byte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningLower", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2], right[i * 2]) != result[i]", ["GetIterResult"] = "(UInt16) Helpers.AddWidening(left[i * 2], right[i * 2])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningLower_uint_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningLower", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2], right[i * 2]) != result[i]", ["GetIterResult"] = "(UInt32) Helpers.AddWidening(left[i * 2], right[i * 2])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningLower_ulong_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningLower", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2], right[i * 2]) != result[i]", ["GetIterResult"] = "(UInt64) Helpers.AddWidening(left[i * 2], right[i * 2])"}), + + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningLowerUpper_short_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningLowerUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(Int16) Helpers.AddWidening(left[i * 2], right[i * 2 + 1])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningLowerUpper_int_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningLowerUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(Int32) Helpers.AddWidening(left[i * 2], right[i * 2 + 1])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningLowerUpper_long_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningLowerUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(Int64) Helpers.AddWidening(left[i * 2], right[i * 2 + 1])"}), + + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningUpper_short_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2 + 1], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(Int16) Helpers.AddWidening(left[i * 2 + 1], right[i * 2 + 1])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningUpper_int_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2 + 1], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(Int32) Helpers.AddWidening(left[i * 2 + 1], right[i * 2 + 1])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningUpper_long_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2 + 1], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(Int64) Helpers.AddWidening(left[i * 2 + 1], right[i * 2 + 1])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningUpper_ushort_byte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2 + 1], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(UInt16) Helpers.AddWidening(left[i * 2 + 1], right[i * 2 + 1])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningUpper_uint_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2 + 1], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(UInt32) Helpers.AddWidening(left[i * 2 + 1], right[i * 2 + 1])"}), + ("SveVecBinOpDifferentRetType.template", new Dictionary { ["TestName"] = "Sve2_AddWideningUpper_ulong_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "AddWideningUpper", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.AddWidening(left[i * 2 + 1], right[i * 2 + 1]) != result[i]", ["GetIterResult"] = "(UInt64) Helpers.AddWidening(left[i * 2 + 1], right[i * 2 + 1])"}), + ("SveVecTernOpTest.template", new Dictionary { ["TestName"] = "Sve2_BitwiseClearXor_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "BitwiseClearXor", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp3"] = "TestLibrary.Generator.GetSByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != (firstOp[i] ^ (secondOp[i] &~ thirdOp[i]))", ["GetIterResult"] = "(SByte) (firstOp[i] ^ (secondOp[i] &~ thirdOp[i]))"}), ("SveVecTernOpTest.template", new Dictionary { ["TestName"] = "Sve2_BitwiseClearXor_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "BitwiseClearXor", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != (firstOp[i] ^ (secondOp[i] &~ thirdOp[i]))", ["GetIterResult"] = "(Int16) (firstOp[i] ^ (secondOp[i] &~ thirdOp[i]))"}), ("SveVecTernOpTest.template", new Dictionary { ["TestName"] = "Sve2_BitwiseClearXor_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "BitwiseClearXor", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != (firstOp[i] ^ (secondOp[i] &~ thirdOp[i]))", ["GetIterResult"] = "(Int32) (firstOp[i] ^ (secondOp[i] &~ thirdOp[i]))"}), diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs index afbb50de796f7f..113cf09a85a2be 100644 --- a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs +++ b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs @@ -6108,6 +6108,18 @@ public static uint UnsignedReciprocalSqrtEstimate(uint op1) public static sbyte AddPairwise(sbyte[] op1, sbyte[] op2, int i) => Pairwise(Add, op1, op2, i); + public static sbyte AddPairwiseSve(sbyte[] op1, sbyte[] op2, int i) + { + if (i % 2 == 0) + { + return (sbyte)(op1[i] + op1[i + 1]); + } + else + { + return (sbyte)(op2[i - 1] + op2[i]); + } + } + public static sbyte Max(sbyte op1, sbyte op2) => Math.Max(op1, op2); public static sbyte MaxPairwise(sbyte[] op1, int i) => Pairwise(Max, op1, i); @@ -6158,6 +6170,17 @@ private static sbyte Pairwise(Func pairOp, sbyte[] op1, sby public static byte AddPairwise(byte[] op1, byte[] op2, int i) => Pairwise(Add, op1, op2, i); + public static byte AddPairwiseSve(byte[] op1, byte[] op2, int i) + { + if (i % 2 == 0) + { + return (byte)(op1[i] + op1[i + 1]); + } + else + { + return (byte)(op2[i - 1] + op2[i]); + } + } public static byte Max(byte op1, byte op2) => Math.Max(op1, op2); public static byte MaxPairwise(byte[] op1, int i) => Pairwise(Max, op1, i); @@ -6208,6 +6231,20 @@ private static byte Pairwise(Func pairOp, byte[] op1, byte[] o public static short AddPairwise(short[] op1, short[] op2, int i) => Pairwise(Add, op1, op2, i); + public static short AddPairwiseSve(short[] op1, short[] op2, int i) + { + if (i % 2 == 0) + { + return (short)(op1[i] + op1[i + 1]); + } + else + { + return (short)(op2[i - 1] + op2[i]); + } + } + + public static short AddPairwiseWidening(short[] op1, sbyte[] op2, int i) => (short)(op1[i] + (short)op2[i * 2] + (short)op2[i * 2 + 1]); + public static short Max(short op1, short op2) => Math.Max(op1, op2); public static short MaxPairwise(short[] op1, int i) => Pairwise(Max, op1, i); @@ -6258,6 +6295,20 @@ private static short Pairwise(Func pairOp, short[] op1, sho public static ushort AddPairwise(ushort[] op1, ushort[] op2, int i) => Pairwise(Add, op1, op2, i); + public static ushort AddPairwiseSve(ushort[] op1, ushort[] op2, int i) + { + if (i % 2 == 0) + { + return (ushort)(op1[i] + op1[i + 1]); + } + else + { + return (ushort)(op2[i - 1] + op2[i]); + } + } + + public static ushort AddPairwiseWidening(ushort[] op1, byte[] op2, int i) => (ushort)(op1[i] + (ushort)op2[i * 2] + (ushort)op2[i * 2 + 1]); + public static ushort Max(ushort op1, ushort op2) => Math.Max(op1, op2); public static ushort MaxPairwise(ushort[] op1, int i) => Pairwise(Max, op1, i); @@ -6308,6 +6359,20 @@ private static ushort Pairwise(Func pairOp, ushort[] op1 public static int AddPairwise(int[] op1, int[] op2, int i) => Pairwise(Add, op1, op2, i); + public static int AddPairwiseSve(int[] op1, int[] op2, int i) + { + if (i % 2 == 0) + { + return (int)(op1[i] + op1[i + 1]); + } + else + { + return (int)(op2[i - 1] + op2[i]); + } + } + + public static int AddPairwiseWidening(int[] op1, short[] op2, int i) => op1[i] + (int)op2[i * 2] + (int)op2[i * 2 + 1]; + public static int Max(int op1, int op2) => Math.Max(op1, op2); public static int MaxPairwise(int[] op1, int i) => Pairwise(Max, op1, i); @@ -6358,6 +6423,20 @@ private static int Pairwise(Func pairOp, int[] op1, int[] op2, in public static uint AddPairwise(uint[] op1, uint[] op2, int i) => Pairwise(Add, op1, op2, i); + public static uint AddPairwiseSve(uint[] op1, uint[] op2, int i) + { + if (i % 2 == 0) + { + return (uint)(op1[i] + op1[i + 1]); + } + else + { + return (uint)(op2[i - 1] + op2[i]); + } + } + + public static uint AddPairwiseWidening(uint[] op1, ushort[] op2, int i) => op1[i] + (uint)op2[i * 2] + (uint)op2[i * 2 + 1]; + public static uint Max(uint op1, uint op2) => Math.Max(op1, op2); public static uint MaxPairwise(uint[] op1, int i) => Pairwise(Max, op1, i); @@ -6408,6 +6487,20 @@ private static uint Pairwise(Func pairOp, uint[] op1, uint[] o public static long AddPairwise(long[] op1, long[] op2, int i) => Pairwise(Add, op1, op2, i); + public static long AddPairwiseSve(long[] op1, long[] op2, int i) + { + if (i % 2 == 0) + { + return (long)(op1[i] + op1[i + 1]); + } + else + { + return (long)(op2[i - 1] + op2[i]); + } + } + + public static long AddPairwiseWidening(long[] op1, int[] op2, int i) => op1[i] + (int)op2[i * 2] + (int)op2[i * 2 + 1]; + public static long Max(long op1, long op2) => Math.Max(op1, op2); public static long MaxPairwise(long[] op1, int i) => Pairwise(Max, op1, i); @@ -6458,6 +6551,20 @@ private static long Pairwise(Func pairOp, long[] op1, long[] o public static ulong AddPairwise(ulong[] op1, ulong[] op2, int i) => Pairwise(Add, op1, op2, i); + public static ulong AddPairwiseSve(ulong[] op1, ulong[] op2, int i) + { + if (i % 2 == 0) + { + return (ulong)(op1[i] + op1[i + 1]); + } + else + { + return (ulong)(op2[i - 1] + op2[i]); + } + } + + public static ulong AddPairwiseWidening(ulong[] op1, uint[] op2, int i) => op1[i] + (ulong)op2[i * 2] + (ulong)op2[i * 2 + 1]; + public static ulong Max(ulong op1, ulong op2) => Math.Max(op1, op2); public static ulong MaxPairwise(ulong[] op1, int i) => Pairwise(Max, op1, i); @@ -6508,6 +6615,18 @@ private static ulong Pairwise(Func pairOp, ulong[] op1, ulo public static float AddPairwise(float[] op1, float[] op2, int i) => Pairwise(Add, op1, op2, i); + public static float AddPairwiseSve(float[] op1, float[] op2, int i) + { + if (i % 2 == 0) + { + return (float)(op1[i] + op1[i + 1]); + } + else + { + return (float)(op2[i - 1] + op2[i]); + } + } + public static float[] AddRotateComplex(float[] op1, float[] op2, byte rot) { for (int i = 0; i < op1.Length; i += 2) @@ -6580,6 +6699,18 @@ private static float Pairwise(Func pairOp, float[] op1, flo public static double AddPairwise(double[] op1, double[] op2, int i) => Pairwise(Add, op1, op2, i); + public static double AddPairwiseSve(double[] op1, double[] op2, int i) + { + if (i % 2 == 0) + { + return (double)(op1[i] + op1[i + 1]); + } + else + { + return (double)(op2[i - 1] + op2[i]); + } + } + public static double[] AddRotateComplex(double[] op1, double[] op2, byte rot) { for (int i = 0; i < op1.Length; i += 2) diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/_SveBinaryOpDifferentRetTypeTestTemplate.template b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/_SveBinaryOpDifferentRetTypeTestTemplate.template index 085cadd1e9569f..2d2df308eb2e8e 100644 --- a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/_SveBinaryOpDifferentRetTypeTestTemplate.template +++ b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/_SveBinaryOpDifferentRetTypeTestTemplate.template @@ -202,7 +202,6 @@ namespace JIT.HardwareIntrinsics.Arm _dataTable = new DataTable(_data1, _data2, new {RetBaseType}[RetElementCount], LargestVectorSize); } - public bool IsSupported => {Isa}.IsSupported; public bool Succeeded { get; set; } @@ -267,9 +266,8 @@ namespace JIT.HardwareIntrinsics.Arm { TestLibrary.TestFramework.BeginScenario(nameof(RunSameLclVarScenario_UnsafeRead)); - var op = Unsafe.Read<{Op1VectorType}<{Op1BaseType}>>(_dataTable.inArray1Ptr); - var op1 = op; - var op2 = op; + var op1 = Unsafe.Read<{Op1VectorType}<{Op1BaseType}>>(_dataTable.inArray1Ptr); + var op2 = Unsafe.Read<{Op2VectorType}<{Op2BaseType}>>(_dataTable.inArray1Ptr); var result = {Isa}.{Method}(op1, op2); Unsafe.Write(_dataTable.outArrayPtr, result); @@ -290,10 +288,12 @@ namespace JIT.HardwareIntrinsics.Arm { TestLibrary.TestFramework.BeginScenario(nameof(RunSameClassFldScenario)); - var result = {Isa}.{Method}(_fld1, _fld1); + var _fld1_op2Base = Unsafe.As<{Op1VectorType}<{Op1BaseType}>, {Op2VectorType}<{Op2BaseType}>>(ref _fld1); + + var result = {Isa}.{Method}(_fld1, _fld1_op2Base); Unsafe.Write(_dataTable.outArrayPtr, result); - ValidateResult(_fld1, _fld1, _dataTable.outArrayPtr); + ValidateResult(_fld1, _fld1_op2Base, _dataTable.outArrayPtr); } public void RunStructLclFldScenario()