diff --git a/src/coreclr/jit/hwintrinsiclistarm64sve.h b/src/coreclr/jit/hwintrinsiclistarm64sve.h index bf13fc05b21104..c40ec5a69e7e4f 100644 --- a/src/coreclr/jit/hwintrinsiclistarm64sve.h +++ b/src/coreclr/jit/hwintrinsiclistarm64sve.h @@ -330,12 +330,33 @@ HARDWARE_INTRINSIC(Sve2, ShiftArithmeticRounded, HARDWARE_INTRINSIC(Sve2, ShiftArithmeticRoundedSaturate, -1, -1, {INS_sve_sqrshl, INS_invalid, INS_sve_sqrshl, INS_invalid, INS_sve_sqrshl, INS_invalid, INS_sve_sqrshl, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_LowMaskedOperation) HARDWARE_INTRINSIC(Sve2, ShiftArithmeticSaturate, -1, -1, {INS_sve_sqshl, INS_invalid, INS_sve_sqshl, INS_invalid, INS_sve_sqshl, INS_invalid, INS_sve_sqshl, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_LowMaskedOperation) HARDWARE_INTRINSIC(Sve2, ShiftLeftAndInsert, -1, 3, {INS_sve_sli, INS_sve_sli, INS_sve_sli, INS_sve_sli, INS_sve_sli, INS_sve_sli, INS_sve_sli, INS_sve_sli, INS_invalid, INS_invalid}, HW_Category_ShiftLeftByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) -HARDWARE_INTRINSIC(Sve2, ShiftLeftLogicalSaturate, -1, -1, {INS_invalid, INS_sve_uqshl, INS_invalid, INS_sve_uqshl, INS_invalid, INS_sve_uqshl, INS_invalid, INS_sve_uqshl, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_HasRMWSemantics) -HARDWARE_INTRINSIC(Sve2, ShiftLeftLogicalSaturateUnsigned, -1, -1, {INS_invalid, INS_sve_sqshlu, INS_invalid, INS_sve_sqshlu, INS_invalid, INS_sve_sqshlu, INS_invalid, INS_sve_sqshlu, INS_invalid, INS_invalid}, HW_Category_ShiftLeftByImmediate, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftLeftLogicalSaturate, -1, -1, {INS_invalid, INS_sve_uqshl, INS_invalid, INS_sve_uqshl, INS_invalid, INS_sve_uqshl, INS_invalid, INS_sve_uqshl, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftLeftLogicalSaturateUnsigned, -1, -1, {INS_invalid, INS_sve_sqshlu, INS_invalid, INS_sve_sqshlu, INS_invalid, INS_sve_sqshlu, INS_invalid, INS_sve_sqshlu, INS_invalid, INS_invalid}, HW_Category_ShiftLeftByImmediate, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) HARDWARE_INTRINSIC(Sve2, ShiftLeftLogicalWideningEven, -1, 2, {INS_invalid, INS_invalid, INS_sve_sshllb, INS_sve_ushllb, INS_sve_sshllb, INS_sve_ushllb, INS_sve_sshllb, INS_sve_ushllb, INS_invalid, INS_invalid}, HW_Category_ShiftLeftByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand) HARDWARE_INTRINSIC(Sve2, ShiftLeftLogicalWideningOdd, -1, 2, {INS_invalid, INS_invalid, INS_sve_sshllt, INS_sve_ushllt, INS_sve_sshllt, INS_sve_ushllt, INS_sve_sshllt, INS_sve_ushllt, INS_invalid, INS_invalid}, HW_Category_ShiftLeftByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand) HARDWARE_INTRINSIC(Sve2, ShiftLogicalRounded, -1, -1, {INS_invalid, INS_sve_urshl, INS_invalid, INS_sve_urshl, INS_invalid, INS_sve_urshl, INS_invalid, INS_sve_urshl, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_HasRMWSemantics) HARDWARE_INTRINSIC(Sve2, ShiftLogicalRoundedSaturate, -1, -1, {INS_invalid, INS_sve_uqrshl, INS_invalid, INS_sve_uqrshl, INS_invalid, INS_sve_uqrshl, INS_invalid, INS_sve_uqrshl, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftRightAndInsert, -1, 3, {INS_sve_sri, INS_sve_sri, INS_sve_sri, INS_sve_sri, INS_sve_sri, INS_sve_sri, INS_sve_sri, INS_sve_sri, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftRightArithmeticAdd, -1, 3, {INS_sve_ssra, INS_invalid, INS_sve_ssra, INS_invalid, INS_sve_ssra, INS_invalid, INS_sve_ssra, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftRightArithmeticNarrowingSaturateEven, -1, 2, {INS_sve_sqshrnb, INS_sve_uqshrnb, INS_sve_sqshrnb, INS_sve_uqshrnb, INS_sve_sqshrnb, INS_sve_uqshrnb, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand) +HARDWARE_INTRINSIC(Sve2, ShiftRightArithmeticNarrowingSaturateOdd, -1, 3, {INS_sve_sqshrnt, INS_sve_uqshrnt, INS_sve_sqshrnt, INS_sve_uqshrnt, INS_sve_sqshrnt, INS_sve_uqshrnt, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftRightArithmeticNarrowingSaturateUnsignedEven, -1, 2, {INS_invalid, INS_sve_sqshrunb, INS_invalid, INS_sve_sqshrunb, INS_invalid, INS_sve_sqshrunb, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand) +HARDWARE_INTRINSIC(Sve2, ShiftRightArithmeticNarrowingSaturateUnsignedOdd, -1, 3, {INS_invalid, INS_sve_sqshrunt, INS_invalid, INS_sve_sqshrunt, INS_invalid, INS_sve_sqshrunt, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftRightArithmeticRounded, -1, -1, {INS_sve_srshr, INS_invalid, INS_sve_srshr, INS_invalid, INS_sve_srshr, INS_invalid, INS_sve_srshr, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_HasImmediateOperand) +HARDWARE_INTRINSIC(Sve2, ShiftRightArithmeticRoundedAdd, -1, 3, {INS_sve_srsra, INS_invalid, INS_sve_srsra, INS_invalid, INS_sve_srsra, INS_invalid, INS_sve_srsra, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftRightArithmeticRoundedNarrowingSaturateEven, -1, 2, {INS_sve_sqrshrnb, INS_invalid, INS_sve_sqrshrnb, INS_invalid, INS_sve_sqrshrnb, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand) +HARDWARE_INTRINSIC(Sve2, ShiftRightArithmeticRoundedNarrowingSaturateOdd, -1, 3, {INS_sve_sqrshrnt, INS_invalid, INS_sve_sqrshrnt, INS_invalid, INS_sve_sqrshrnt, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven, -1, 2, {INS_invalid, INS_sve_sqrshrunb, INS_invalid, INS_sve_sqrshrunb, INS_invalid, INS_sve_sqrshrunb, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand) +HARDWARE_INTRINSIC(Sve2, ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd, -1, 3, {INS_invalid, INS_sve_sqrshrunt, INS_invalid, INS_sve_sqrshrunt, INS_invalid, INS_sve_sqrshrunt, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftRightLogicalAdd, -1, 3, {INS_invalid, INS_sve_usra, INS_invalid, INS_sve_usra, INS_invalid, INS_sve_usra, INS_invalid, INS_sve_usra, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftRightLogicalNarrowingEven, -1, 2, {INS_sve_shrnb, INS_sve_shrnb, INS_sve_shrnb, INS_sve_shrnb, INS_sve_shrnb, INS_sve_shrnb, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand) +HARDWARE_INTRINSIC(Sve2, ShiftRightLogicalNarrowingOdd, -1, 3, {INS_sve_shrnt, INS_sve_shrnt, INS_sve_shrnt, INS_sve_shrnt, INS_sve_shrnt, INS_sve_shrnt, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftRightLogicalRounded, -1, -1, {INS_invalid, INS_sve_urshr, INS_invalid, INS_sve_urshr, INS_invalid, INS_sve_urshr, INS_invalid, INS_sve_urshr, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftRightLogicalRoundedAdd, -1, 3, {INS_invalid, INS_sve_ursra, INS_invalid, INS_sve_ursra, INS_invalid, INS_sve_ursra, INS_invalid, INS_sve_ursra, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftRightLogicalRoundedNarrowingEven, -1, 2, {INS_sve_rshrnb, INS_sve_rshrnb, INS_sve_rshrnb, INS_sve_rshrnb, INS_sve_rshrnb, INS_sve_rshrnb, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand) +HARDWARE_INTRINSIC(Sve2, ShiftRightLogicalRoundedNarrowingOdd, -1, 3, {INS_sve_rshrnt, INS_sve_rshrnt, INS_sve_rshrnt, INS_sve_rshrnt, INS_sve_rshrnt, INS_sve_rshrnt, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve2, ShiftRightLogicalRoundedNarrowingSaturateEven, -1, 2, {INS_invalid, INS_sve_uqrshrnb, INS_invalid, INS_sve_uqrshrnb, INS_invalid, INS_sve_uqrshrnb, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand) +HARDWARE_INTRINSIC(Sve2, ShiftRightLogicalRoundedNarrowingSaturateOdd, -1, 3, {INS_invalid, INS_sve_uqrshrnt, INS_invalid, INS_sve_uqrshrnt, INS_invalid, INS_sve_uqrshrnt, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics) HARDWARE_INTRINSIC(Sve2, Xor, -1, 3, {INS_sve_eor3, INS_sve_eor3, INS_sve_eor3, INS_sve_eor3, INS_sve_eor3, INS_sve_eor3, INS_sve_eor3, INS_sve_eor3, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_HasRMWSemantics) HARDWARE_INTRINSIC(Sve2, XorRotateRight, -1, 3, {INS_sve_xar, INS_sve_xar, INS_sve_xar, INS_sve_xar, INS_sve_xar, INS_sve_xar, INS_sve_xar, INS_sve_xar, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_HasRMWSemantics|HW_Flag_HasImmediateOperand) #define LAST_NI_Sve2 NI_Sve2_XorRotateRight 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 0fcf4fe92ec514..7490501c5d6f99 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 @@ -878,6 +878,621 @@ internal Arm64() { } public static Vector ShiftLogicalRoundedSaturate(Vector value, Vector count) { throw new PlatformNotSupportedException(); } + // Shift right and insert + + /// + /// svuint8_t svsri[_n_u8](svuint8_t op1, svuint8_t op2, uint64_t imm3) + /// SRI Ztied1.B, Zop2.B, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) { throw new PlatformNotSupportedException(); } + + /// + /// svint16_t svsri[_n_s16](svint16_t op1, svint16_t op2, uint64_t imm3) + /// SRI Ztied1.H, Zop2.H, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svsri[_n_s32](svint32_t op1, svint32_t op2, uint64_t imm3) + /// SRI Ztied1.S, Zop2.S, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) { throw new PlatformNotSupportedException(); } + + /// + /// svint64_t svsri[_n_s64](svint64_t op1, svint64_t op2, uint64_t imm3) + /// SRI Ztied1.D, Zop2.D, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svsri[_n_s8](svint8_t op1, svint8_t op2, uint64_t imm3) + /// SRI Ztied1.B, Zop2.B, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svsri[_n_u16](svuint16_t op1, svuint16_t op2, uint64_t imm3) + /// SRI Ztied1.H, Zop2.H, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svsri[_n_u32](svuint32_t op1, svuint32_t op2, uint64_t imm3) + /// SRI Ztied1.S, Zop2.S, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) { throw new PlatformNotSupportedException(); } + + /// + /// svuint64_t svsri[_n_u64](svuint64_t op1, svuint64_t op2, uint64_t imm3) + /// SRI Ztied1.D, Zop2.D, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) { throw new PlatformNotSupportedException(); } + + + // Shift right and accumulate + + /// + /// svint16_t svsra[_n_s16](svint16_t op1, svint16_t op2, uint64_t imm3) + /// SSRA Ztied1.H, Zop2.H, #imm3 + /// + public static Vector ShiftRightArithmeticAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svsra[_n_s32](svint32_t op1, svint32_t op2, uint64_t imm3) + /// SSRA Ztied1.S, Zop2.S, #imm3 + /// + public static Vector ShiftRightArithmeticAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint64_t svsra[_n_s64](svint64_t op1, svint64_t op2, uint64_t imm3) + /// SSRA Ztied1.D, Zop2.D, #imm3 + /// + public static Vector ShiftRightArithmeticAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svsra[_n_s8](svint8_t op1, svint8_t op2, uint64_t imm3) + /// SSRA Ztied1.B, Zop2.B, #imm3 + /// + public static Vector ShiftRightArithmeticAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Saturating shift right narrow (bottom) + + /// + /// svuint8_t svqshrnb[_n_u16](svuint16_t op1, uint64_t imm2) + /// UQSHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint16_t svqshrnb[_n_s32](svint32_t op1, uint64_t imm2) + /// SQSHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svqshrnb[_n_s64](svint64_t op1, uint64_t imm2) + /// SQSHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svqshrnb[_n_s16](svint16_t op1, uint64_t imm2) + /// SQSHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svqshrnb[_n_u32](svuint32_t op1, uint64_t imm2) + /// UQSHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svqshrnb[_n_u64](svuint64_t op1, uint64_t imm2) + /// UQSHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Saturating shift right narrow (top) + + /// + /// svuint8_t svqshrnt[_n_u16](svuint8_t even, svuint16_t op1, uint64_t imm2) + /// UQSHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint16_t svqshrnt[_n_s32](svint16_t even, svint32_t op1, uint64_t imm2) + /// SQSHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svqshrnt[_n_s64](svint32_t even, svint64_t op1, uint64_t imm2) + /// SQSHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svqshrnt[_n_s16](svint8_t even, svint16_t op1, uint64_t imm2) + /// SQSHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svqshrnt[_n_u32](svuint16_t even, svuint32_t op1, uint64_t imm2) + /// UQSHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svqshrnt[_n_u64](svuint32_t even, svuint64_t op1, uint64_t imm2) + /// UQSHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Saturating shift right unsigned narrow (bottom) + + /// + /// svuint8_t svqshrunb[_n_s16](svint16_t op1, uint64_t imm2) + /// SQSHRUNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateUnsignedEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svqshrunb[_n_s32](svint32_t op1, uint64_t imm2) + /// SQSHRUNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateUnsignedEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svqshrunb[_n_s64](svint64_t op1, uint64_t imm2) + /// SQSHRUNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateUnsignedEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Saturating shift right unsigned narrow (top) + + /// + /// svuint8_t svqshrunt[_n_s16](svuint8_t even, svint16_t op1, uint64_t imm2) + /// SQSHRUNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateUnsignedOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svqshrunt[_n_s32](svuint16_t even, svint32_t op1, uint64_t imm2) + /// SQSHRUNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateUnsignedOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svqshrunt[_n_s64](svuint32_t even, svint64_t op1, uint64_t imm2) + /// SQSHRUNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateUnsignedOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Rounding shift right + + /// + /// svint16_t svrshr[_n_s16]_m(svbool_t pg, svint16_t op1, uint64_t imm2) + /// SRSHR Ztied1.H, Pg/M, Ztied1.H, #imm2 + /// + public static Vector ShiftRightArithmeticRounded(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svrshr[_n_s32]_m(svbool_t pg, svint32_t op1, uint64_t imm2) + /// SRSHR Ztied1.S, Pg/M, Ztied1.S, #imm2 + /// + public static Vector ShiftRightArithmeticRounded(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint64_t svrshr[_n_s64]_m(svbool_t pg, svint64_t op1, uint64_t imm2) + /// SRSHR Ztied1.D, Pg/M, Ztied1.D, #imm2 + /// + public static Vector ShiftRightArithmeticRounded(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svrshr[_n_s8]_m(svbool_t pg, svint8_t op1, uint64_t imm2) + /// SRSHR Ztied1.B, Pg/M, Ztied1.B, #imm2 + /// + public static Vector ShiftRightArithmeticRounded(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Rounding shift right and accumulate + + /// + /// svint16_t svrsra[_n_s16](svint16_t op1, svint16_t op2, uint64_t imm3) + /// SRSRA Ztied1.H, Zop2.H, #imm3 + /// + public static Vector ShiftRightArithmeticRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svrsra[_n_s32](svint32_t op1, svint32_t op2, uint64_t imm3) + /// SRSRA Ztied1.S, Zop2.S, #imm3 + /// + public static Vector ShiftRightArithmeticRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint64_t svrsra[_n_s64](svint64_t op1, svint64_t op2, uint64_t imm3) + /// SRSRA Ztied1.D, Zop2.D, #imm3 + /// + public static Vector ShiftRightArithmeticRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svrsra[_n_s8](svint8_t op1, svint8_t op2, uint64_t imm3) + /// SRSRA Ztied1.B, Zop2.B, #imm3 + /// + public static Vector ShiftRightArithmeticRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Saturating rounding shift right narrow (bottom) + + /// + /// svint16_t svqrshrnb[_n_s32](svint32_t op1, uint64_t imm2) + /// SQRSHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svqrshrnb[_n_s64](svint64_t op1, uint64_t imm2) + /// SQRSHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svqrshrnb[_n_s16](svint16_t op1, uint64_t imm2) + /// SQRSHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Saturating rounding shift right narrow (top) + + /// + /// svint16_t svqrshrnt[_n_s32](svint16_t even, svint32_t op1, uint64_t imm2) + /// SQRSHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svqrshrnt[_n_s64](svint32_t even, svint64_t op1, uint64_t imm2) + /// SQRSHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svqrshrnt[_n_s16](svint8_t even, svint16_t op1, uint64_t imm2) + /// SQRSHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Saturating rounding shift right unsigned narrow (bottom) + + /// + /// svuint8_t svqrshrunb[_n_s16](svint16_t op1, uint64_t imm2) + /// SQRSHRUNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svqrshrunb[_n_s32](svint32_t op1, uint64_t imm2) + /// SQRSHRUNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svqrshrunb[_n_s64](svint64_t op1, uint64_t imm2) + /// SQRSHRUNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Saturating rounding shift right unsigned narrow (top) + + /// + /// svuint8_t svqrshrunt[_n_s16](svuint8_t even, svint16_t op1, uint64_t imm2) + /// SQRSHRUNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svqrshrunt[_n_s32](svuint16_t even, svint32_t op1, uint64_t imm2) + /// SQRSHRUNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svqrshrunt[_n_s64](svuint32_t even, svint64_t op1, uint64_t imm2) + /// SQRSHRUNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Shift right and accumulate + + /// + /// svuint8_t svsra[_n_u8](svuint8_t op1, svuint8_t op2, uint64_t imm3) + /// USRA Ztied1.B, Zop2.B, #imm3 + /// + public static Vector ShiftRightLogicalAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svsra[_n_u16](svuint16_t op1, svuint16_t op2, uint64_t imm3) + /// USRA Ztied1.H, Zop2.H, #imm3 + /// + public static Vector ShiftRightLogicalAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svsra[_n_u32](svuint32_t op1, svuint32_t op2, uint64_t imm3) + /// USRA Ztied1.S, Zop2.S, #imm3 + /// + public static Vector ShiftRightLogicalAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint64_t svsra[_n_u64](svuint64_t op1, svuint64_t op2, uint64_t imm3) + /// USRA Ztied1.D, Zop2.D, #imm3 + /// + public static Vector ShiftRightLogicalAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Shift right narrow (bottom) + + /// + /// svuint8_t svshrnb[_n_u16](svuint16_t op1, uint64_t imm2) + /// SHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint16_t svshrnb[_n_s32](svint32_t op1, uint64_t imm2) + /// SHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svshrnb[_n_s64](svint64_t op1, uint64_t imm2) + /// SHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svshrnb[_n_s16](svint16_t op1, uint64_t imm2) + /// SHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svshrnb[_n_u32](svuint32_t op1, uint64_t imm2) + /// SHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svshrnb[_n_u64](svuint64_t op1, uint64_t imm2) + /// SHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Shift right narrow (top) + + /// + /// svuint8_t svshrnt[_n_u16](svuint8_t even, svuint16_t op1, uint64_t imm2) + /// SHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint16_t svshrnt[_n_s32](svint16_t even, svint32_t op1, uint64_t imm2) + /// SHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svshrnt[_n_s64](svint32_t even, svint64_t op1, uint64_t imm2) + /// SHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svshrnt[_n_s16](svint8_t even, svint16_t op1, uint64_t imm2) + /// SHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svshrnt[_n_u32](svuint16_t even, svuint32_t op1, uint64_t imm2) + /// SHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svshrnt[_n_u64](svuint32_t even, svuint64_t op1, uint64_t imm2) + /// SHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Rounding shift right + + /// + /// svuint8_t svrshr[_n_u8]_m(svbool_t pg, svuint8_t op1, uint64_t imm2) + /// URSHR Ztied1.B, Pg/M, Ztied1.B, #imm2 + /// + public static Vector ShiftRightLogicalRounded(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svrshr[_n_u16]_m(svbool_t pg, svuint16_t op1, uint64_t imm2) + /// URSHR Ztied1.H, Pg/M, Ztied1.H, #imm2 + /// + public static Vector ShiftRightLogicalRounded(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svrshr[_n_u32]_m(svbool_t pg, svuint32_t op1, uint64_t imm2) + /// URSHR Ztied1.S, Pg/M, Ztied1.S, #imm2 + /// + public static Vector ShiftRightLogicalRounded(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint64_t svrshr[_n_u64]_m(svbool_t pg, svuint64_t op1, uint64_t imm2) + /// URSHR Ztied1.D, Pg/M, Ztied1.D, #imm2 + /// + public static Vector ShiftRightLogicalRounded(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Rounding shift right and accumulate + + /// + /// svuint8_t svrsra[_n_u8](svuint8_t op1, svuint8_t op2, uint64_t imm3) + /// URSRA Ztied1.B, Zop2.B, #imm3 + /// + public static Vector ShiftRightLogicalRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svrsra[_n_u16](svuint16_t op1, svuint16_t op2, uint64_t imm3) + /// URSRA Ztied1.H, Zop2.H, #imm3 + /// + public static Vector ShiftRightLogicalRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svrsra[_n_u32](svuint32_t op1, svuint32_t op2, uint64_t imm3) + /// URSRA Ztied1.S, Zop2.S, #imm3 + /// + public static Vector ShiftRightLogicalRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint64_t svrsra[_n_u64](svuint64_t op1, svuint64_t op2, uint64_t imm3) + /// URSRA Ztied1.D, Zop2.D, #imm3 + /// + public static Vector ShiftRightLogicalRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Rounding shift right narrow (bottom) + + /// + /// svuint8_t svrshrnb[_n_u16](svuint16_t op1, uint64_t imm2) + /// RSHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint16_t svrshrnb[_n_s32](svint32_t op1, uint64_t imm2) + /// RSHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svrshrnb[_n_s64](svint64_t op1, uint64_t imm2) + /// RSHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svrshrnb[_n_s16](svint16_t op1, uint64_t imm2) + /// RSHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svrshrnb[_n_u32](svuint32_t op1, uint64_t imm2) + /// RSHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svrshrnb[_n_u64](svuint64_t op1, uint64_t imm2) + /// RSHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Rounding shift right narrow (top) + + /// + /// svuint8_t svrshrnt[_n_u16](svuint8_t even, svuint16_t op1, uint64_t imm2) + /// RSHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint16_t svrshrnt[_n_s32](svint16_t even, svint32_t op1, uint64_t imm2) + /// RSHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint32_t svrshrnt[_n_s64](svint32_t even, svint64_t op1, uint64_t imm2) + /// RSHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svint8_t svrshrnt[_n_s16](svint8_t even, svint16_t op1, uint64_t imm2) + /// RSHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svrshrnt[_n_u32](svuint16_t even, svuint32_t op1, uint64_t imm2) + /// RSHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svrshrnt[_n_u64](svuint32_t even, svuint64_t op1, uint64_t imm2) + /// RSHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Saturating rounding shift right narrow (bottom) + + /// + /// svuint8_t svqrshrnb[_n_u16](svuint16_t op1, uint64_t imm2) + /// UQRSHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svqrshrnb[_n_u32](svuint32_t op1, uint64_t imm2) + /// UQRSHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svqrshrnb[_n_u64](svuint64_t op1, uint64_t imm2) + /// UQRSHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + + // Saturating rounding shift right narrow (top) + + /// + /// svuint8_t svqrshrnt[_n_u16](svuint8_t even, svuint16_t op1, uint64_t imm2) + /// UQRSHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint16_t svqrshrnt[_n_u32](svuint16_t even, svuint32_t op1, uint64_t imm2) + /// UQRSHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + /// + /// svuint32_t svqrshrnt[_n_u64](svuint32_t even, svuint64_t op1, uint64_t imm2) + /// UQRSHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) { throw new PlatformNotSupportedException(); } + + // Bitwise exclusive OR of three vectors /// 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 c98b797bfb7277..04cd5e9b32e048 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 @@ -878,6 +878,621 @@ internal Arm64() { } public static Vector ShiftLogicalRoundedSaturate(Vector value, Vector count) => ShiftLogicalRoundedSaturate(value, count); + // Shift right and insert + + /// + /// svuint8_t svsri[_n_u8](svuint8_t op1, svuint8_t op2, uint64_t imm3) + /// SRI Ztied1.B, Zop2.B, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) => ShiftRightAndInsert(left, right, shift); + + /// + /// svint16_t svsri[_n_s16](svint16_t op1, svint16_t op2, uint64_t imm3) + /// SRI Ztied1.H, Zop2.H, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) => ShiftRightAndInsert(left, right, shift); + + /// + /// svint32_t svsri[_n_s32](svint32_t op1, svint32_t op2, uint64_t imm3) + /// SRI Ztied1.S, Zop2.S, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) => ShiftRightAndInsert(left, right, shift); + + /// + /// svint64_t svsri[_n_s64](svint64_t op1, svint64_t op2, uint64_t imm3) + /// SRI Ztied1.D, Zop2.D, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) => ShiftRightAndInsert(left, right, shift); + + /// + /// svint8_t svsri[_n_s8](svint8_t op1, svint8_t op2, uint64_t imm3) + /// SRI Ztied1.B, Zop2.B, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) => ShiftRightAndInsert(left, right, shift); + + /// + /// svuint16_t svsri[_n_u16](svuint16_t op1, svuint16_t op2, uint64_t imm3) + /// SRI Ztied1.H, Zop2.H, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) => ShiftRightAndInsert(left, right, shift); + + /// + /// svuint32_t svsri[_n_u32](svuint32_t op1, svuint32_t op2, uint64_t imm3) + /// SRI Ztied1.S, Zop2.S, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) => ShiftRightAndInsert(left, right, shift); + + /// + /// svuint64_t svsri[_n_u64](svuint64_t op1, svuint64_t op2, uint64_t imm3) + /// SRI Ztied1.D, Zop2.D, #imm3 + /// + public static Vector ShiftRightAndInsert(Vector left, Vector right, [ConstantExpected] byte shift) => ShiftRightAndInsert(left, right, shift); + + + // Shift right and accumulate + + /// + /// svint16_t svsra[_n_s16](svint16_t op1, svint16_t op2, uint64_t imm3) + /// SSRA Ztied1.H, Zop2.H, #imm3 + /// + public static Vector ShiftRightArithmeticAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticAdd(addend, value, count); + + /// + /// svint32_t svsra[_n_s32](svint32_t op1, svint32_t op2, uint64_t imm3) + /// SSRA Ztied1.S, Zop2.S, #imm3 + /// + public static Vector ShiftRightArithmeticAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticAdd(addend, value, count); + + /// + /// svint64_t svsra[_n_s64](svint64_t op1, svint64_t op2, uint64_t imm3) + /// SSRA Ztied1.D, Zop2.D, #imm3 + /// + public static Vector ShiftRightArithmeticAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticAdd(addend, value, count); + + /// + /// svint8_t svsra[_n_s8](svint8_t op1, svint8_t op2, uint64_t imm3) + /// SSRA Ztied1.B, Zop2.B, #imm3 + /// + public static Vector ShiftRightArithmeticAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticAdd(addend, value, count); + + + // Saturating shift right narrow (bottom) + + /// + /// svuint8_t svqshrnb[_n_u16](svuint16_t op1, uint64_t imm2) + /// UQSHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateEven(value, count); + + /// + /// svint16_t svqshrnb[_n_s32](svint32_t op1, uint64_t imm2) + /// SQSHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateEven(value, count); + + /// + /// svint32_t svqshrnb[_n_s64](svint64_t op1, uint64_t imm2) + /// SQSHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateEven(value, count); + + /// + /// svint8_t svqshrnb[_n_s16](svint16_t op1, uint64_t imm2) + /// SQSHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateEven(value, count); + + /// + /// svuint16_t svqshrnb[_n_u32](svuint32_t op1, uint64_t imm2) + /// UQSHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateEven(value, count); + + /// + /// svuint32_t svqshrnb[_n_u64](svuint64_t op1, uint64_t imm2) + /// UQSHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateEven(value, count); + + + // Saturating shift right narrow (top) + + /// + /// svuint8_t svqshrnt[_n_u16](svuint8_t even, svuint16_t op1, uint64_t imm2) + /// UQSHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateOdd(even, value, count); + + /// + /// svint16_t svqshrnt[_n_s32](svint16_t even, svint32_t op1, uint64_t imm2) + /// SQSHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateOdd(even, value, count); + + /// + /// svint32_t svqshrnt[_n_s64](svint32_t even, svint64_t op1, uint64_t imm2) + /// SQSHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateOdd(even, value, count); + + /// + /// svint8_t svqshrnt[_n_s16](svint8_t even, svint16_t op1, uint64_t imm2) + /// SQSHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateOdd(even, value, count); + + /// + /// svuint16_t svqshrnt[_n_u32](svuint16_t even, svuint32_t op1, uint64_t imm2) + /// UQSHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateOdd(even, value, count); + + /// + /// svuint32_t svqshrnt[_n_u64](svuint32_t even, svuint64_t op1, uint64_t imm2) + /// UQSHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateOdd(even, value, count); + + + // Saturating shift right unsigned narrow (bottom) + + /// + /// svuint8_t svqshrunb[_n_s16](svint16_t op1, uint64_t imm2) + /// SQSHRUNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateUnsignedEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateUnsignedEven(value, count); + + /// + /// svuint16_t svqshrunb[_n_s32](svint32_t op1, uint64_t imm2) + /// SQSHRUNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateUnsignedEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateUnsignedEven(value, count); + + /// + /// svuint32_t svqshrunb[_n_s64](svint64_t op1, uint64_t imm2) + /// SQSHRUNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateUnsignedEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateUnsignedEven(value, count); + + + // Saturating shift right unsigned narrow (top) + + /// + /// svuint8_t svqshrunt[_n_s16](svuint8_t even, svint16_t op1, uint64_t imm2) + /// SQSHRUNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateUnsignedOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateUnsignedOdd(even, value, count); + + /// + /// svuint16_t svqshrunt[_n_s32](svuint16_t even, svint32_t op1, uint64_t imm2) + /// SQSHRUNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateUnsignedOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateUnsignedOdd(even, value, count); + + /// + /// svuint32_t svqshrunt[_n_s64](svuint32_t even, svint64_t op1, uint64_t imm2) + /// SQSHRUNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticNarrowingSaturateUnsignedOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticNarrowingSaturateUnsignedOdd(even, value, count); + + + // Rounding shift right + + /// + /// svint16_t svrshr[_n_s16]_m(svbool_t pg, svint16_t op1, uint64_t imm2) + /// SRSHR Ztied1.H, Pg/M, Ztied1.H, #imm2 + /// + public static Vector ShiftRightArithmeticRounded(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRounded(value, count); + + /// + /// svint32_t svrshr[_n_s32]_m(svbool_t pg, svint32_t op1, uint64_t imm2) + /// SRSHR Ztied1.S, Pg/M, Ztied1.S, #imm2 + /// + public static Vector ShiftRightArithmeticRounded(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRounded(value, count); + + /// + /// svint64_t svrshr[_n_s64]_m(svbool_t pg, svint64_t op1, uint64_t imm2) + /// SRSHR Ztied1.D, Pg/M, Ztied1.D, #imm2 + /// + public static Vector ShiftRightArithmeticRounded(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRounded(value, count); + + /// + /// svint8_t svrshr[_n_s8]_m(svbool_t pg, svint8_t op1, uint64_t imm2) + /// SRSHR Ztied1.B, Pg/M, Ztied1.B, #imm2 + /// + public static Vector ShiftRightArithmeticRounded(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRounded(value, count); + + + // Rounding shift right and accumulate + + /// + /// svint16_t svrsra[_n_s16](svint16_t op1, svint16_t op2, uint64_t imm3) + /// SRSRA Ztied1.H, Zop2.H, #imm3 + /// + public static Vector ShiftRightArithmeticRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedAdd(addend, value, count); + + /// + /// svint32_t svrsra[_n_s32](svint32_t op1, svint32_t op2, uint64_t imm3) + /// SRSRA Ztied1.S, Zop2.S, #imm3 + /// + public static Vector ShiftRightArithmeticRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedAdd(addend, value, count); + + /// + /// svint64_t svrsra[_n_s64](svint64_t op1, svint64_t op2, uint64_t imm3) + /// SRSRA Ztied1.D, Zop2.D, #imm3 + /// + public static Vector ShiftRightArithmeticRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedAdd(addend, value, count); + + /// + /// svint8_t svrsra[_n_s8](svint8_t op1, svint8_t op2, uint64_t imm3) + /// SRSRA Ztied1.B, Zop2.B, #imm3 + /// + public static Vector ShiftRightArithmeticRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedAdd(addend, value, count); + + + // Saturating rounding shift right narrow (bottom) + + /// + /// svint16_t svqrshrnb[_n_s32](svint32_t op1, uint64_t imm2) + /// SQRSHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedNarrowingSaturateEven(value, count); + + /// + /// svint32_t svqrshrnb[_n_s64](svint64_t op1, uint64_t imm2) + /// SQRSHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedNarrowingSaturateEven(value, count); + + /// + /// svint8_t svqrshrnb[_n_s16](svint16_t op1, uint64_t imm2) + /// SQRSHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedNarrowingSaturateEven(value, count); + + + // Saturating rounding shift right narrow (top) + + /// + /// svint16_t svqrshrnt[_n_s32](svint16_t even, svint32_t op1, uint64_t imm2) + /// SQRSHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedNarrowingSaturateOdd(even, value, count); + + /// + /// svint32_t svqrshrnt[_n_s64](svint32_t even, svint64_t op1, uint64_t imm2) + /// SQRSHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedNarrowingSaturateOdd(even, value, count); + + /// + /// svint8_t svqrshrnt[_n_s16](svint8_t even, svint16_t op1, uint64_t imm2) + /// SQRSHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedNarrowingSaturateOdd(even, value, count); + + + // Saturating rounding shift right unsigned narrow (bottom) + + /// + /// svuint8_t svqrshrunb[_n_s16](svint16_t op1, uint64_t imm2) + /// SQRSHRUNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(value, count); + + /// + /// svuint16_t svqrshrunb[_n_s32](svint32_t op1, uint64_t imm2) + /// SQRSHRUNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(value, count); + + /// + /// svuint32_t svqrshrunb[_n_s64](svint64_t op1, uint64_t imm2) + /// SQRSHRUNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(value, count); + + + // Saturating rounding shift right unsigned narrow (top) + + /// + /// svuint8_t svqrshrunt[_n_s16](svuint8_t even, svint16_t op1, uint64_t imm2) + /// SQRSHRUNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(even, value, count); + + /// + /// svuint16_t svqrshrunt[_n_s32](svuint16_t even, svint32_t op1, uint64_t imm2) + /// SQRSHRUNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(even, value, count); + + /// + /// svuint32_t svqrshrunt[_n_s64](svuint32_t even, svint64_t op1, uint64_t imm2) + /// SQRSHRUNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(even, value, count); + + + // Shift right and accumulate + + /// + /// svuint8_t svsra[_n_u8](svuint8_t op1, svuint8_t op2, uint64_t imm3) + /// USRA Ztied1.B, Zop2.B, #imm3 + /// + public static Vector ShiftRightLogicalAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalAdd(addend, value, count); + + /// + /// svuint16_t svsra[_n_u16](svuint16_t op1, svuint16_t op2, uint64_t imm3) + /// USRA Ztied1.H, Zop2.H, #imm3 + /// + public static Vector ShiftRightLogicalAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalAdd(addend, value, count); + + /// + /// svuint32_t svsra[_n_u32](svuint32_t op1, svuint32_t op2, uint64_t imm3) + /// USRA Ztied1.S, Zop2.S, #imm3 + /// + public static Vector ShiftRightLogicalAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalAdd(addend, value, count); + + /// + /// svuint64_t svsra[_n_u64](svuint64_t op1, svuint64_t op2, uint64_t imm3) + /// USRA Ztied1.D, Zop2.D, #imm3 + /// + public static Vector ShiftRightLogicalAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalAdd(addend, value, count); + + + // Shift right narrow (bottom) + + /// + /// svuint8_t svshrnb[_n_u16](svuint16_t op1, uint64_t imm2) + /// SHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalNarrowingEven(value, count); + + /// + /// svint16_t svshrnb[_n_s32](svint32_t op1, uint64_t imm2) + /// SHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalNarrowingEven(value, count); + + /// + /// svint32_t svshrnb[_n_s64](svint64_t op1, uint64_t imm2) + /// SHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalNarrowingEven(value, count); + + /// + /// svint8_t svshrnb[_n_s16](svint16_t op1, uint64_t imm2) + /// SHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalNarrowingEven(value, count); + + /// + /// svuint16_t svshrnb[_n_u32](svuint32_t op1, uint64_t imm2) + /// SHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalNarrowingEven(value, count); + + /// + /// svuint32_t svshrnb[_n_u64](svuint64_t op1, uint64_t imm2) + /// SHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalNarrowingEven(value, count); + + + // Shift right narrow (top) + + /// + /// svuint8_t svshrnt[_n_u16](svuint8_t even, svuint16_t op1, uint64_t imm2) + /// SHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalNarrowingOdd(even, value, count); + + /// + /// svint16_t svshrnt[_n_s32](svint16_t even, svint32_t op1, uint64_t imm2) + /// SHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalNarrowingOdd(even, value, count); + + /// + /// svint32_t svshrnt[_n_s64](svint32_t even, svint64_t op1, uint64_t imm2) + /// SHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalNarrowingOdd(even, value, count); + + /// + /// svint8_t svshrnt[_n_s16](svint8_t even, svint16_t op1, uint64_t imm2) + /// SHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalNarrowingOdd(even, value, count); + + /// + /// svuint16_t svshrnt[_n_u32](svuint16_t even, svuint32_t op1, uint64_t imm2) + /// SHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalNarrowingOdd(even, value, count); + + /// + /// svuint32_t svshrnt[_n_u64](svuint32_t even, svuint64_t op1, uint64_t imm2) + /// SHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalNarrowingOdd(even, value, count); + + + // Rounding shift right + + /// + /// svuint8_t svrshr[_n_u8]_m(svbool_t pg, svuint8_t op1, uint64_t imm2) + /// URSHR Ztied1.B, Pg/M, Ztied1.B, #imm2 + /// + public static Vector ShiftRightLogicalRounded(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRounded(value, count); + + /// + /// svuint16_t svrshr[_n_u16]_m(svbool_t pg, svuint16_t op1, uint64_t imm2) + /// URSHR Ztied1.H, Pg/M, Ztied1.H, #imm2 + /// + public static Vector ShiftRightLogicalRounded(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRounded(value, count); + + /// + /// svuint32_t svrshr[_n_u32]_m(svbool_t pg, svuint32_t op1, uint64_t imm2) + /// URSHR Ztied1.S, Pg/M, Ztied1.S, #imm2 + /// + public static Vector ShiftRightLogicalRounded(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRounded(value, count); + + /// + /// svuint64_t svrshr[_n_u64]_m(svbool_t pg, svuint64_t op1, uint64_t imm2) + /// URSHR Ztied1.D, Pg/M, Ztied1.D, #imm2 + /// + public static Vector ShiftRightLogicalRounded(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRounded(value, count); + + + // Rounding shift right and accumulate + + /// + /// svuint8_t svrsra[_n_u8](svuint8_t op1, svuint8_t op2, uint64_t imm3) + /// URSRA Ztied1.B, Zop2.B, #imm3 + /// + public static Vector ShiftRightLogicalRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedAdd(addend, value, count); + + /// + /// svuint16_t svrsra[_n_u16](svuint16_t op1, svuint16_t op2, uint64_t imm3) + /// URSRA Ztied1.H, Zop2.H, #imm3 + /// + public static Vector ShiftRightLogicalRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedAdd(addend, value, count); + + /// + /// svuint32_t svrsra[_n_u32](svuint32_t op1, svuint32_t op2, uint64_t imm3) + /// URSRA Ztied1.S, Zop2.S, #imm3 + /// + public static Vector ShiftRightLogicalRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedAdd(addend, value, count); + + /// + /// svuint64_t svrsra[_n_u64](svuint64_t op1, svuint64_t op2, uint64_t imm3) + /// URSRA Ztied1.D, Zop2.D, #imm3 + /// + public static Vector ShiftRightLogicalRoundedAdd(Vector addend, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedAdd(addend, value, count); + + + // Rounding shift right narrow (bottom) + + /// + /// svuint8_t svrshrnb[_n_u16](svuint16_t op1, uint64_t imm2) + /// RSHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingEven(value, count); + + /// + /// svint16_t svrshrnb[_n_s32](svint32_t op1, uint64_t imm2) + /// RSHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingEven(value, count); + + /// + /// svint32_t svrshrnb[_n_s64](svint64_t op1, uint64_t imm2) + /// RSHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingEven(value, count); + + /// + /// svint8_t svrshrnb[_n_s16](svint16_t op1, uint64_t imm2) + /// RSHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingEven(value, count); + + /// + /// svuint16_t svrshrnb[_n_u32](svuint32_t op1, uint64_t imm2) + /// RSHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingEven(value, count); + + /// + /// svuint32_t svrshrnb[_n_u64](svuint64_t op1, uint64_t imm2) + /// RSHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingEven(value, count); + + + // Rounding shift right narrow (top) + + /// + /// svuint8_t svrshrnt[_n_u16](svuint8_t even, svuint16_t op1, uint64_t imm2) + /// RSHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingOdd(even, value, count); + + /// + /// svint16_t svrshrnt[_n_s32](svint16_t even, svint32_t op1, uint64_t imm2) + /// RSHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingOdd(even, value, count); + + /// + /// svint32_t svrshrnt[_n_s64](svint32_t even, svint64_t op1, uint64_t imm2) + /// RSHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingOdd(even, value, count); + + /// + /// svint8_t svrshrnt[_n_s16](svint8_t even, svint16_t op1, uint64_t imm2) + /// RSHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingOdd(even, value, count); + + /// + /// svuint16_t svrshrnt[_n_u32](svuint16_t even, svuint32_t op1, uint64_t imm2) + /// RSHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingOdd(even, value, count); + + /// + /// svuint32_t svrshrnt[_n_u64](svuint32_t even, svuint64_t op1, uint64_t imm2) + /// RSHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingOdd(even, value, count); + + + // Saturating rounding shift right narrow (bottom) + + /// + /// svuint8_t svqrshrnb[_n_u16](svuint16_t op1, uint64_t imm2) + /// UQRSHRNB Zresult.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingSaturateEven(value, count); + + /// + /// svuint16_t svqrshrnb[_n_u32](svuint32_t op1, uint64_t imm2) + /// UQRSHRNB Zresult.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingSaturateEven(value, count); + + /// + /// svuint32_t svqrshrnb[_n_u64](svuint64_t op1, uint64_t imm2) + /// UQRSHRNB Zresult.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingSaturateEven(Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingSaturateEven(value, count); + + + // Saturating rounding shift right narrow (top) + + /// + /// svuint8_t svqrshrnt[_n_u16](svuint8_t even, svuint16_t op1, uint64_t imm2) + /// UQRSHRNT Ztied.B, Zop1.H, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingSaturateOdd(even, value, count); + + /// + /// svuint16_t svqrshrnt[_n_u32](svuint16_t even, svuint32_t op1, uint64_t imm2) + /// UQRSHRNT Ztied.H, Zop1.S, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingSaturateOdd(even, value, count); + + /// + /// svuint32_t svqrshrnt[_n_u64](svuint32_t even, svuint64_t op1, uint64_t imm2) + /// UQRSHRNT Ztied.S, Zop1.D, #imm2 + /// + public static Vector ShiftRightLogicalRoundedNarrowingSaturateOdd(Vector even, Vector value, [ConstantExpected] byte count) => ShiftRightLogicalRoundedNarrowingSaturateOdd(even, value, count); + + // Bitwise exclusive OR of three vectors /// 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 796674616c1992..42be511d6f4213 100644 --- a/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs +++ b/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs @@ -6216,6 +6216,98 @@ internal Arm64() { } public static System.Numerics.Vector ShiftLogicalRoundedSaturate(System.Numerics.Vector value, System.Numerics.Vector count) { throw null; } public static System.Numerics.Vector ShiftLogicalRoundedSaturate(System.Numerics.Vector value, System.Numerics.Vector count) { throw null; } public static System.Numerics.Vector ShiftLogicalRoundedSaturate(System.Numerics.Vector value, System.Numerics.Vector count) { throw null; } + public static System.Numerics.Vector ShiftRightAndInsert(System.Numerics.Vector left, System.Numerics.Vector right, [ConstantExpected] byte shift) { throw null; } + public static System.Numerics.Vector ShiftRightAndInsert(System.Numerics.Vector left, System.Numerics.Vector right, [ConstantExpected] byte shift) { throw null; } + public static System.Numerics.Vector ShiftRightAndInsert(System.Numerics.Vector left, System.Numerics.Vector right, [ConstantExpected] byte shift) { throw null; } + public static System.Numerics.Vector ShiftRightAndInsert(System.Numerics.Vector left, System.Numerics.Vector right, [ConstantExpected] byte shift) { throw null; } + public static System.Numerics.Vector ShiftRightAndInsert(System.Numerics.Vector left, System.Numerics.Vector right, [ConstantExpected] byte shift) { throw null; } + public static System.Numerics.Vector ShiftRightAndInsert(System.Numerics.Vector left, System.Numerics.Vector right, [ConstantExpected] byte shift) { throw null; } + public static System.Numerics.Vector ShiftRightAndInsert(System.Numerics.Vector left, System.Numerics.Vector right, [ConstantExpected] byte shift) { throw null; } + public static System.Numerics.Vector ShiftRightAndInsert(System.Numerics.Vector left, System.Numerics.Vector right, [ConstantExpected] byte shift) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateUnsignedEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateUnsignedEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateUnsignedEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateUnsignedOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateUnsignedOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticNarrowingSaturateUnsignedOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRounded(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRounded(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRounded(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRounded(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedNarrowingSaturateEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedNarrowingSaturateEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedNarrowingSaturateEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedNarrowingSaturateOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedNarrowingSaturateOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedNarrowingSaturateOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalNarrowingEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalNarrowingEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalNarrowingEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalNarrowingEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalNarrowingEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalNarrowingEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRounded(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRounded(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRounded(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRounded(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedAdd(System.Numerics.Vector addend, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingSaturateEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingSaturateEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingSaturateEven(System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingSaturateOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingSaturateOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } + public static System.Numerics.Vector ShiftRightLogicalRoundedNarrowingSaturateOdd(System.Numerics.Vector even, System.Numerics.Vector value, [ConstantExpected] byte count) { throw null; } public static System.Numerics.Vector Xor(System.Numerics.Vector value1, System.Numerics.Vector value2, System.Numerics.Vector value3) { throw null; } public static System.Numerics.Vector Xor(System.Numerics.Vector value1, System.Numerics.Vector value2, System.Numerics.Vector value3) { throw null; } public static System.Numerics.Vector Xor(System.Numerics.Vector value1, System.Numerics.Vector value2, System.Numerics.Vector value3) { throw null; } diff --git a/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs b/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs index 24f138fa67d0bb..5373fce56a16bd 100644 --- a/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs +++ b/src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs @@ -4928,6 +4928,118 @@ ("SveVecBinOpDifferentTypesTest.template", new Dictionary {["TestName"] = "Sve2_ShiftLogicalRoundedSaturate_uint_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftLogicalRoundedSaturate", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ValidateIterResult"] = "result[i] != Helpers.SveShiftLogicalRoundedSaturate(left[i], right[i])", ["GetIterResult"] = "Helpers.SveShiftLogicalRoundedSaturate(left[i], right[i])",}), ("SveVecBinOpDifferentTypesTest.template", new Dictionary {["TestName"] = "Sve2_ShiftLogicalRoundedSaturate_ulong_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftLogicalRoundedSaturate", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["ValidateIterResult"] = "result[i] != Helpers.SveShiftLogicalRoundedSaturate(left[i], right[i])", ["GetIterResult"] = "Helpers.SveShiftLogicalRoundedSaturate(left[i], right[i])",}), + ("SveVecImmBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_ShiftRightAndInsert_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightAndInsert", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["NextValueMask"] = "Helpers.getMaskSByte()", ["Imm"] = "4", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_ShiftRightAndInsert_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightAndInsert", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "15", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_ShiftRightAndInsert_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightAndInsert", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "22", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_ShiftRightAndInsert_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightAndInsert", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "40", ["InvalidImm"] = "65", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_ShiftRightAndInsert_byte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightAndInsert", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["NextValueMask"] = "Helpers.getMaskByte()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_ShiftRightAndInsert_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightAndInsert", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["NextValueMask"] = "Helpers.getMaskUInt16()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_ShiftRightAndInsert_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightAndInsert", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueMask"] = "Helpers.getMaskUInt32()", ["Imm"] = "29", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_ShiftRightAndInsert_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightAndInsert", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueMask"] = "Helpers.getMaskUInt64()", ["Imm"] = "54", ["InvalidImm"] = "65", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightAndInsert(firstOp[i], secondOp[i], Imm)",}), + + ("SveVecImmBinOpTest.template", new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticAdd_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["NextValueMask"] = "Helpers.getMaskSByte()", ["Imm"] = "4", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticAdd(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template", new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticAdd_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "15", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticAdd(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template", new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticAdd_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "22", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticAdd(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template", new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticAdd_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "40", ["InvalidImm"] = "65", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticAdd(firstOp[i], secondOp[i], Imm)",}), + + ("SveVecImmUnOpTest.template", new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateEven_sbyte_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["Imm"] = "4", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template", new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateEven_short_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["Imm"] = "15", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template", new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateEven_int_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["Imm"] = "22", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template", new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateEven_byte_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["Imm"] = "4", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template", new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateEven_ushort_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["Imm"] = "15", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template", new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateEven_uint_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["Imm"] = "22", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateOdd_sbyte_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "4", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateOdd_short_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "15", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateOdd_int_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "22", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateOdd_byte_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["NextValueMask"] = "Helpers.getMaskUInt16()", ["Imm"] = "4", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateOdd_ushort_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueMask"] = "Helpers.getMaskUInt32()", ["Imm"] = "15", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateOdd_uint_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueMask"] = "Helpers.getMaskUInt64()", ["Imm"] = "22", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateUnsignedEven_byte_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateUnsignedEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "4", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateUnsignedEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateUnsignedEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateUnsignedEven_ushort_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateUnsignedEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "12", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateUnsignedEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateUnsignedEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateUnsignedEven_uint_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateUnsignedEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "27", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateUnsignedEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateUnsignedEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateUnsignedOdd_byte_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateUnsignedOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "8", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateUnsignedOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateUnsignedOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateUnsignedOdd_ushort_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateUnsignedOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "15", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateUnsignedOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateUnsignedOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticNarrowingSaturateUnsignedOdd_uint_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticNarrowingSaturateUnsignedOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "12", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticNarrowingSaturateUnsignedOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticNarrowingSaturateUnsignedOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRounded_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRounded", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueMask"] = "Helpers.getMaskSByte()", ["Imm"] = "8", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRounded(firstOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRounded(firstOp[i], Imm)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRounded_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRounded", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "8", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRounded(firstOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRounded(firstOp[i], Imm)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRounded_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRounded", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "15", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRounded(firstOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRounded(firstOp[i], Imm)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRounded_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRounded", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "12", ["InvalidImm"] = "65", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRounded(firstOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRounded(firstOp[i], Imm)",}), + + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedAdd_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["NextValueMask"] = "Helpers.getMaskSByte()", ["Imm"] = "2", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedAdd(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedAdd_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedAdd(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedAdd_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "29", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedAdd(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedAdd_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "64", ["InvalidImm"] = "65", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedAdd(firstOp[i], secondOp[i], Imm)",}), + + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedNarrowingSaturateEven_sbyte_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedNarrowingSaturateEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedNarrowingSaturateEven_short_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedNarrowingSaturateEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedNarrowingSaturateEven_int_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedNarrowingSaturateEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedNarrowingSaturateOdd_sbyte_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedNarrowingSaturateOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedNarrowingSaturateOdd_short_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedNarrowingSaturateOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedNarrowingSaturateOdd_int_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedNarrowingSaturateOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven_byte_short",["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven_ushort_int",["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven_uint_long",["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd_byte_short",["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd_ushort_int",["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd_uint_long",["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + + ("SveVecImmBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_ShiftRightLogicalAdd_byte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["NextValueMask"] = "Helpers.getMaskByte()", ["Imm"] = "2", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightLogicalAdd(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_ShiftRightLogicalAdd_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["NextValueMask"] = "Helpers.getMaskUInt16()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightLogicalAdd(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_ShiftRightLogicalAdd_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueMask"] = "Helpers.getMaskUInt32()", ["Imm"] = "29", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightLogicalAdd(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template", new Dictionary { ["TestName"] = "Sve2_ShiftRightLogicalAdd_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueMask"] = "Helpers.getMaskUInt64()", ["Imm"] = "64", ["InvalidImm"] = "65", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightLogicalAdd(firstOp[i], secondOp[i], Imm)",}), + + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalNarrowingEven_sbyte_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalNarrowingEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalNarrowingEven_short_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalNarrowingEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalNarrowingEven_int_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalNarrowingEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalNarrowingEven_byte_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalNarrowingEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueMask"] = "Helpers.getMaskUInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalNarrowingEven_ushort_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalNarrowingEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueMask"] = "Helpers.getMaskUInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalNarrowingEven_uint_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalNarrowingEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueMask"] = "Helpers.getMaskUInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalNarrowingOdd_sbyte_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalNarrowingOdd_short_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalNarrowingOdd_int_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalNarrowingOdd_byte_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["NextValueMask"] = "Helpers.getMaskUInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalNarrowingOdd_ushort_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueMask"] = "Helpers.getMaskUInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalNarrowingOdd_uint_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueMask"] = "Helpers.getMaskUInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRounded_byte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRounded", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueMask"] = "Helpers.getMaskByte()", ["Imm"] = "2", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRounded(firstOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRounded(firstOp[i], Imm)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRounded_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRounded", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueMask"] = "Helpers.getMaskUInt16()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRounded(firstOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRounded(firstOp[i], Imm)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRounded_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRounded", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueMask"] = "Helpers.getMaskUInt32()", ["Imm"] = "29", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRounded(firstOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRounded(firstOp[i], Imm)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRounded_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRounded", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueMask"] = "Helpers.getMaskUInt64()", ["Imm"] = "64", ["InvalidImm"] = "65", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRounded(firstOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRounded(firstOp[i], Imm)",}), + + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedAdd_byte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["NextValueMask"] = "Helpers.getMaskByte()", ["Imm"] = "2", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedAdd(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedAdd_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["NextValueMask"] = "Helpers.getMaskUInt16()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedAdd(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedAdd_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueMask"] = "Helpers.getMaskUInt32()", ["Imm"] = "29", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedAdd(firstOp[i], secondOp[i], Imm)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedAdd_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedAdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueMask"] = "Helpers.getMaskUInt64()", ["Imm"] = "64", ["InvalidImm"] = "65", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedAdd(firstOp[i], secondOp[i], Imm)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedAdd(firstOp[i], secondOp[i], Imm)",}), + + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingEven_sbyte_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingEven_short_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingEven_int_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingEven_byte_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueMask"] = "Helpers.getMaskUInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingEven_ushort_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueMask"] = "Helpers.getMaskUInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingEven_uint_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueMask"] = "Helpers.getMaskUInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingOdd_sbyte_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["NextValueMask"] = "Helpers.getMaskInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingOdd_short_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["NextValueMask"] = "Helpers.getMaskInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingOdd_int_long", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["NextValueMask"] = "Helpers.getMaskInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingOdd_byte_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["NextValueMask"] = "Helpers.getMaskUInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingOdd_ushort_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueMask"] = "Helpers.getMaskUInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingOdd_uint_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueMask"] = "Helpers.getMaskUInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingSaturateEven_byte_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingSaturateEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueMask"] = "Helpers.getMaskUInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingSaturateEven_ushort_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingSaturateEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueMask"] = "Helpers.getMaskUInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmUnOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingSaturateEven_uint_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingSaturateEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueMask"] = "Helpers.getMaskUInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingSaturateEven(firstOp[Helpers.NarrowIdx(i)], Imm, i)",}), + + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingSaturateOdd_byte_ushort", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingSaturateOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt16()", ["NextValueMask"] = "Helpers.getMaskUInt16()", ["Imm"] = "3", ["InvalidImm"] = "9", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingSaturateOdd_ushort_uint", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingSaturateOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueMask"] = "Helpers.getMaskUInt32()", ["Imm"] = "13", ["InvalidImm"] = "17", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecImmBinOpTest.template",new Dictionary {["TestName"] = "Sve2_ShiftRightLogicalRoundedNarrowingSaturateOdd_uint_ulong", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "ShiftRightLogicalRoundedNarrowingSaturateOdd", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueMask"] = "Helpers.getMaskUInt64()", ["Imm"] = "28", ["InvalidImm"] = "33", ["ValidateIterResult"] = "result[i] != Helpers.ShiftRightLogicalRoundedNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)", ["GetIterResult"] = "Helpers.ShiftRightLogicalRoundedNarrowingSaturateOdd(firstOp[i], secondOp[Helpers.NarrowIdx(i)], Imm, i)",}), + ("SveVecTernOpTest.template", new Dictionary { ["TestName"] = "Sve2_Xor_sbyte", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "Xor", ["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] != Helpers.Xor(firstOp[i], secondOp[i], thirdOp[i])", ["GetIterResult"] = "Helpers.Xor(firstOp[i], secondOp[i], thirdOp[i])",}), ("SveVecTernOpTest.template", new Dictionary { ["TestName"] = "Sve2_Xor_short", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "Xor", ["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] != Helpers.Xor(firstOp[i], secondOp[i], thirdOp[i])", ["GetIterResult"] = "Helpers.Xor(firstOp[i], secondOp[i], thirdOp[i])",}), ("SveVecTernOpTest.template", new Dictionary { ["TestName"] = "Sve2_Xor_int", ["Isa"] = "Sve2", ["LoadIsa"] = "Sve2", ["Method"] = "Xor", ["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] != Helpers.Xor(firstOp[i], secondOp[i], thirdOp[i])", ["GetIterResult"] = "Helpers.Xor(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 0c402194d5b966..7fc22d3f455b45 100644 --- a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs +++ b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs @@ -12,6 +12,7 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Intrinsics.Arm; +using System.Reflection; namespace JIT.HardwareIntrinsics.Arm { @@ -10737,5 +10738,208 @@ public static T XorRotateRight(T op1, T op2, int shift) where T : IBinaryInte public static uint SveShiftLogicalRoundedSaturate(uint op1, int op2) => UnsignedShift(op1, op2, rounding: true, saturating: true, shiftSat: true); public static ulong SveShiftLogicalRoundedSaturate(ulong op1, long op2) => UnsignedShift(op1, op2, rounding: true, saturating: true, shiftSat: true); + + public static int NarrowIdx(int i) + { + return (i - i % 2) / 2; + } + + public static T Even(T val, int idx) where T : IBinaryInteger, new() + { + if (idx % 2 == 0) + { + return val; + } + else + { + return new T(); + } + } + + public static T Odd(T even, T odd, int idx) where T : IBinaryInteger + { + if (idx % 2 != 0) + { + return odd; + } + else + { + return even; + } + } + + public static U ArithmeticShift(T value, int count, bool rounding = false, bool saturate = false) + where T : IBinaryInteger + where U : IBinaryInteger + { + dynamic v = value; + dynamic shifted; + if (count > 0) + { + if (rounding) + { + dynamic bias = 1L << (count - 1); + shifted = v >= 0 ? (v + bias) >> count + : (v - bias) >> count; + } + else + { + shifted = v >> count; + } + } + else if (count < 0) + { + shifted = v << -count; + } + else + { + shifted = v; + } + + if (saturate) + { + dynamic min = typeof(U).GetField("MinValue", BindingFlags.Static | BindingFlags.Public).GetValue(null); + dynamic max = typeof(U).GetField("MaxValue", BindingFlags.Static | BindingFlags.Public).GetValue(null); + if (shifted < min) shifted = min; + if (shifted > max) shifted = max; + } + + return (U)shifted; + } + + public static U LogicalShift(T value, int count, bool rounding = false, bool saturate = false) + where T : IBinaryInteger + where U : IBinaryInteger + { + ulong v = Convert.ToUInt64(value); + dynamic shifted; + if (count > 0) + { + if (rounding) + { + ulong bias = 1UL << (count - 1); + shifted = v >= 0 ? (v + bias) >>> count + : (v - bias) >>> count; + } + else + { + shifted = v >>> count; + } + } + else if (count < 0) + { + shifted = v << -count; + } + else + { + shifted = v; + } + + if (saturate) + { + dynamic max = typeof(U).GetField("MaxValue", BindingFlags.Static | BindingFlags.Public).GetValue(null); + if (shifted > max) shifted = max; + } + + return (U)shifted; + } + + public static U ShiftRightArithmeticNarrowingSaturateEven(T op1, byte op2, int i) + where T : IBinaryInteger + where U : IBinaryInteger, new() + { + return Even(ArithmeticShift(op1, op2, saturate: true), i); + } + + public static U ShiftRightArithmeticNarrowingSaturateOdd(U op0, T op1, byte op2, int i) + where T : IBinaryInteger + where U : IBinaryInteger + { + return Odd(op0, ArithmeticShift(op1, op2, saturate: true), i); + } + + public static U ShiftRightArithmeticNarrowingSaturateUnsignedEven(T op1, byte op2, int i) + where T : IBinaryInteger + where U : IBinaryInteger, new() + { + return ShiftRightArithmeticNarrowingSaturateEven(op1, op2, i); + } + + public static U ShiftRightArithmeticNarrowingSaturateUnsignedOdd(U op0, T op1, byte op2, int i) + where T : IBinaryInteger + where U : IBinaryInteger + { + return ShiftRightArithmeticNarrowingSaturateOdd(op0, op1, op2, i); + } + + public static U ShiftRightArithmeticRoundedNarrowingSaturateEven(T val, byte shift, int i) + where T : IBinaryInteger + where U : IBinaryInteger, new() + { + return Even(ArithmeticShift(val, shift, rounding: true, saturate: true), i); + } + + public static U ShiftRightArithmeticRoundedNarrowingSaturateOdd(U even, T val, byte shift, int i) + where T : IBinaryInteger + where U : IBinaryInteger + { + return Odd(even, ArithmeticShift(val, shift, rounding: true, saturate: true), i); + } + + public static U ShiftRightArithmeticRoundedNarrowingSaturateUnsignedEven(T val, byte shift, int i) + where T : IBinaryInteger + where U : IBinaryInteger, new() + { + return ShiftRightArithmeticRoundedNarrowingSaturateEven(val, shift, i); + } + + public static U ShiftRightArithmeticRoundedNarrowingSaturateUnsignedOdd(U even, T val, byte shift, int i) + where T : IBinaryInteger + where U : IBinaryInteger, new() + { + return ShiftRightArithmeticRoundedNarrowingSaturateOdd(even, val, shift, i); + } + + public static U ShiftRightLogicalNarrowingEven(T val, byte shift, int i) + where T : IBinaryInteger + where U : IBinaryInteger, new() + { + return Even(LogicalShift(val, shift), i); + } + + public static U ShiftRightLogicalNarrowingOdd(U even, T val, byte shift, int i) + where T : IBinaryInteger + where U : IBinaryInteger + { + return Odd(even, LogicalShift(val, shift), i); + } + + public static U ShiftRightLogicalRoundedNarrowingEven(T val, byte shift, int i) + where T : IBinaryInteger + where U : IBinaryInteger, new() + { + return Even(LogicalShift(val, shift, rounding: true), i); + } + + public static U ShiftRightLogicalRoundedNarrowingOdd(U even, T val, byte shift, int i) + where T : IBinaryInteger + where U : IBinaryInteger + { + return Odd(even, LogicalShift(val, shift, rounding: true), i); + } + + public static U ShiftRightLogicalRoundedNarrowingSaturateEven(T val, byte shift, int i) + where T : IBinaryInteger + where U : IBinaryInteger, new() + { + return Even(LogicalShift(val, shift, rounding: true, saturate: true), i); + } + + public static U ShiftRightLogicalRoundedNarrowingSaturateOdd(U even, T val, byte shift, int i) + where T : IBinaryInteger + where U : IBinaryInteger + { + return Odd(even, LogicalShift(val, shift, rounding: true, saturate: true), i); + } } } diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/_SveImmBinaryOpTestTemplate.template b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/_SveImmBinaryOpTestTemplate.template index e3c3957aa01fd6..4708815e3ba0e6 100644 --- a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/_SveImmBinaryOpTestTemplate.template +++ b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/_SveImmBinaryOpTestTemplate.template @@ -94,10 +94,10 @@ namespace JIT.HardwareIntrinsics.Arm private ulong alignment; - public DataTable({Op1BaseType}[] inArray1, {Op1BaseType}[] inArray2, {RetBaseType}[] outArray, int alignment) + public DataTable({Op1BaseType}[] inArray1, {Op2BaseType}[] inArray2, {RetBaseType}[] outArray, int alignment) { int sizeOfinArray1 = inArray1.Length * Unsafe.SizeOf<{Op1BaseType}>(); - int sizeOfinArray2 = inArray2.Length * Unsafe.SizeOf<{Op1BaseType}>(); + int sizeOfinArray2 = inArray2.Length * Unsafe.SizeOf<{Op2BaseType}>(); int sizeOfoutArray = outArray.Length * Unsafe.SizeOf<{RetBaseType}>(); if ((alignment != 64 && alignment != 16 && alignment != 8) || (alignment * 2) < sizeOfinArray1 || (alignment * 2) < sizeOfinArray2 || (alignment * 2) < sizeOfoutArray) { @@ -115,7 +115,7 @@ namespace JIT.HardwareIntrinsics.Arm this.alignment = (ulong)alignment; Unsafe.CopyBlockUnaligned(ref Unsafe.AsRef(inArray1Ptr), ref Unsafe.As<{Op1BaseType}, byte>(ref inArray1[0]), (uint)sizeOfinArray1); - Unsafe.CopyBlockUnaligned(ref Unsafe.AsRef(inArray2Ptr), ref Unsafe.As<{Op1BaseType}, byte>(ref inArray2[0]), (uint)sizeOfinArray2); + Unsafe.CopyBlockUnaligned(ref Unsafe.AsRef(inArray2Ptr), ref Unsafe.As<{Op2BaseType}, byte>(ref inArray2[0]), (uint)sizeOfinArray2); } public void* inArray1Ptr => Align((byte*)(inHandle1.AddrOfPinnedObject().ToPointer()), alignment); @@ -138,7 +138,7 @@ namespace JIT.HardwareIntrinsics.Arm private struct TestStruct { public {Op1VectorType}<{Op1BaseType}> _fld1; - public {Op1VectorType}<{Op1BaseType}> _fld2; + public {Op2VectorType}<{Op2BaseType}> _fld2; public static TestStruct Create() { @@ -146,8 +146,8 @@ namespace JIT.HardwareIntrinsics.Arm for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = {NextValueOp1}; } Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1VectorType}<{Op1BaseType}>, byte>(ref testStruct._fld1), ref Unsafe.As<{Op1BaseType}, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); - for (var i = 0; i < Op1ElementCount; i++) { _data2[i] = {NextValueOp2}; } - Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1VectorType}<{Op1BaseType}>, byte>(ref testStruct._fld2), ref Unsafe.As<{Op1BaseType}, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); + for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = {NextValueOp2}; } + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op2VectorType}<{Op2BaseType}>, byte>(ref testStruct._fld2), ref Unsafe.As<{Op2BaseType}, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<{Op2VectorType}<{Op2BaseType}>>()); return testStruct; } @@ -164,17 +164,20 @@ namespace JIT.HardwareIntrinsics.Arm private static readonly int LargestVectorSize = {LargestVectorSize}; private static readonly int Op1ElementCount = Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>() / sizeof({Op1BaseType}); + private static readonly int Op2ElementCount = Unsafe.SizeOf<{Op2VectorType}<{Op2BaseType}>>() / sizeof({Op2BaseType}); private static readonly int RetElementCount = Unsafe.SizeOf<{RetVectorType}<{RetBaseType}>>() / sizeof({RetBaseType}); private static readonly byte Imm = {Imm}; - private static {Op1BaseType}[] _maskData = new {Op1BaseType}[Op1ElementCount]; + private static {RetBaseType}[] _maskData = new {RetBaseType}[RetElementCount]; private static {Op1BaseType}[] _data1 = new {Op1BaseType}[Op1ElementCount]; - private static {Op1BaseType}[] _data2 = new {Op1BaseType}[Op1ElementCount]; + private static {Op2BaseType}[] _data2 = new {Op2BaseType}[Op2ElementCount]; - private {Op1VectorType}<{Op1BaseType}> _mask; - private {Op1VectorType}<{Op1BaseType}> _fld1; - private {Op1VectorType}<{Op1BaseType}> _fld2; - private {Op1VectorType}<{Op1BaseType}> _falseFld; + private static {RetVectorType}<{RetBaseType}> _mask; + private static {Op1VectorType}<{Op1BaseType}> _fld1; + private static {Op2VectorType}<{Op2BaseType}> _fld2; + + private static {RetVectorType}<{RetBaseType}> _trueFld; + private static {RetVectorType}<{RetBaseType}> _falseFld; private DataTable _dataTable; @@ -186,12 +189,14 @@ namespace JIT.HardwareIntrinsics.Arm Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1VectorType}<{Op1BaseType}>, byte>(ref _mask), ref Unsafe.As<{Op1BaseType}, byte>(ref _maskData[0]), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = {NextValueOp1}; } Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1VectorType}<{Op1BaseType}>, byte>(ref _fld1), ref Unsafe.As<{Op1BaseType}, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); - for (var i = 0; i < Op1ElementCount; i++) { _data2[i] = {NextValueOp2}; } - Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1VectorType}<{Op1BaseType}>, byte>(ref _fld2), ref Unsafe.As<{Op1BaseType}, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); - Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1VectorType}<{Op1BaseType}>, byte>(ref _falseFld), ref Unsafe.As<{Op1BaseType}, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); - + for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = {NextValueOp2}; } + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1VectorType}<{Op2BaseType}>, byte>(ref _fld2), ref Unsafe.As<{Op2BaseType}, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<{Op2VectorType}<{Op2BaseType}>>()); + + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{RetVectorType}<{RetBaseType}>, byte>(ref _falseFld), ref Unsafe.As<{Op2BaseType}, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<{Op2VectorType}<{Op2BaseType}>>()); + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{RetVectorType}<{RetBaseType}>, byte>(ref _trueFld), ref Unsafe.As<{Op1BaseType}, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); + for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = {NextValueOp1}; } - for (var i = 0; i < Op1ElementCount; i++) { _data2[i] = {NextValueOp2}; } + for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = {NextValueOp2}; } _dataTable = new DataTable(_data1, _data2, new {RetBaseType}[RetElementCount], LargestVectorSize); } @@ -205,7 +210,7 @@ namespace JIT.HardwareIntrinsics.Arm var result = {Isa}.{Method}( Unsafe.Read<{Op1VectorType}<{Op1BaseType}>>(_dataTable.inArray1Ptr), - Unsafe.Read<{Op1VectorType}<{Op1BaseType}>>(_dataTable.inArray2Ptr), + Unsafe.Read<{Op2VectorType}<{Op2BaseType}>>(_dataTable.inArray2Ptr), {Imm} ); @@ -222,7 +227,7 @@ namespace JIT.HardwareIntrinsics.Arm { var result = {Isa}.{Method}( Unsafe.Read<{Op1VectorType}<{Op1BaseType}>>(_dataTable.inArray1Ptr), - Unsafe.Read<{Op1VectorType}<{Op1BaseType}>>(_dataTable.inArray2Ptr), + Unsafe.Read<{Op2VectorType}<{Op2BaseType}>>(_dataTable.inArray2Ptr), {InvalidImm} ); Console.WriteLine(result); @@ -242,11 +247,12 @@ namespace JIT.HardwareIntrinsics.Arm { TestLibrary.TestFramework.BeginScenario(nameof(RunBasicScenario_Load)); - {Op1VectorType}<{Op1BaseType}> loadMask = Sve.CreateTrueMask{RetBaseType}(SveMaskPattern.All); + {Op1VectorType}<{Op1BaseType}> loadMask = Sve.CreateTrueMask{Op1BaseType}(SveMaskPattern.All); + {Op2VectorType}<{Op2BaseType}> loadMask2 = Sve.CreateTrueMask{Op2BaseType}(SveMaskPattern.All); var result = {Isa}.{Method}( - {LoadIsa}.Load{Op1VectorType}(loadMask, ({Op1BaseType}*)(_dataTable.inArray1Ptr)), - {LoadIsa}.Load{Op1VectorType}(loadMask, ({Op1BaseType}*)(_dataTable.inArray2Ptr)), + {LoadIsa}.Load{Op1VectorType}(loadMask, ({Op1BaseType}*)(_dataTable.inArray1Ptr)), + {LoadIsa}.Load{Op2VectorType}(loadMask2, ({Op2BaseType}*)(_dataTable.inArray2Ptr)), {Imm} ); @@ -258,10 +264,10 @@ namespace JIT.HardwareIntrinsics.Arm { TestLibrary.TestFramework.BeginScenario(nameof(RunReflectionScenario_UnsafeRead)); - var result = typeof({Isa}).GetMethod(nameof({Isa}.{Method}), new Type[] { typeof({Op1VectorType}<{Op1BaseType}>), typeof({Op1VectorType}<{Op1BaseType}>), typeof(byte) }) + var result = typeof({Isa}).GetMethod(nameof({Isa}.{Method}), new Type[] { typeof({Op1VectorType}<{Op1BaseType}>), typeof({Op2VectorType}<{Op2BaseType}>), typeof(byte) }) .Invoke(null, new object[] { Unsafe.Read<{Op1VectorType}<{Op1BaseType}>>(_dataTable.inArray1Ptr), - Unsafe.Read<{Op1VectorType}<{Op1BaseType}>>(_dataTable.inArray2Ptr), + Unsafe.Read<{Op2VectorType}<{Op2BaseType}>>(_dataTable.inArray2Ptr), (byte){Imm} }); @@ -274,7 +280,7 @@ namespace JIT.HardwareIntrinsics.Arm TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_UnsafeRead)); var op1 = Unsafe.Read<{Op1VectorType}<{Op1BaseType}>>(_dataTable.inArray1Ptr); - var op2 = Unsafe.Read<{Op1VectorType}<{Op1BaseType}>>(_dataTable.inArray2Ptr); + var op2 = Unsafe.Read<{Op2VectorType}<{Op2BaseType}>>(_dataTable.inArray2Ptr); var result = {Isa}.{Method}(op1, op2, {Imm}); Unsafe.Write(_dataTable.outArrayPtr, result); @@ -313,43 +319,43 @@ namespace JIT.HardwareIntrinsics.Arm public void ConditionalSelect_Op1() { TestLibrary.TestFramework.BeginScenario("ConditionalSelect_Op1_mask - operation in TrueValue"); - ConditionalSelectScenario_TrueValue(_mask, _fld1, _fld2, _fld1); + ConditionalSelectScenario_TrueValue(_mask, _fld1, _fld2, _trueFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_Op1_zero - operation in TrueValue"); - ConditionalSelectScenario_TrueValue({Op1VectorType}<{Op1BaseType}>.Zero, _fld1, _fld2, _fld1); + ConditionalSelectScenario_TrueValue({RetVectorType}<{RetBaseType}>.Zero, _fld1, _fld2, _trueFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_Op1_all - operation in TrueValue"); - ConditionalSelectScenario_TrueValue({Op1VectorType}<{Op1BaseType}>.AllBitsSet, _fld1, _fld2, _fld1); + ConditionalSelectScenario_TrueValue({RetVectorType}<{RetBaseType}>.AllBitsSet, _fld1, _fld2, _trueFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_Op1_mask - operation in FalseValue"); - ConditionalSelectScenario_FalseValue(_mask, _fld1, _fld2, _fld1); + ConditionalSelectScenario_FalseValue(_mask, _fld1, _fld2, _trueFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_Op1_zero - operation in FalseValue"); - ConditionalSelectScenario_FalseValue({Op1VectorType}<{Op1BaseType}>.Zero, _fld1, _fld2, _fld1); + ConditionalSelectScenario_FalseValue({RetVectorType}<{RetBaseType}>.Zero, _fld1, _fld2, _trueFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_Op1_all - operation in FalseValue"); - ConditionalSelectScenario_FalseValue({Op1VectorType}<{Op1BaseType}>.AllBitsSet, _fld1, _fld2, _fld1); + ConditionalSelectScenario_FalseValue({RetVectorType}<{RetBaseType}>.AllBitsSet, _fld1, _fld2, _trueFld); } public void ConditionalSelect_Op2() { TestLibrary.TestFramework.BeginScenario("ConditionalSelect_Op2_mask - operation in TrueValue"); - ConditionalSelectScenario_TrueValue(_mask, _fld1, _fld2, _fld2); + ConditionalSelectScenario_TrueValue(_mask, _fld1, _fld2, _falseFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_Op2_zero - operation in TrueValue"); - ConditionalSelectScenario_TrueValue({Op1VectorType}<{Op1BaseType}>.Zero, _fld1, _fld2, _fld2); + ConditionalSelectScenario_TrueValue({RetVectorType}<{RetBaseType}>.Zero, _fld1, _fld2, _falseFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_Op2_all - operation in TrueValue"); - ConditionalSelectScenario_TrueValue({Op1VectorType}<{Op1BaseType}>.AllBitsSet, _fld1, _fld2, _fld2); + ConditionalSelectScenario_TrueValue({RetVectorType}<{RetBaseType}>.AllBitsSet, _fld1, _fld2, _falseFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_Op2_mask - operation in FalseValue"); - ConditionalSelectScenario_FalseValue(_mask, _fld1, _fld2, _fld2); + ConditionalSelectScenario_FalseValue(_mask, _fld1, _fld2, _falseFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_Op2_zero - operation in FalseValue"); - ConditionalSelectScenario_FalseValue({Op1VectorType}<{Op1BaseType}>.Zero, _fld1, _fld2, _fld2); + ConditionalSelectScenario_FalseValue({RetVectorType}<{RetBaseType}>.Zero, _fld1, _fld2, _falseFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_Op2_all - operation in FalseValue"); - ConditionalSelectScenario_FalseValue({Op1VectorType}<{Op1BaseType}>.AllBitsSet, _fld1, _fld2, _fld2); + ConditionalSelectScenario_FalseValue({RetVectorType}<{RetBaseType}>.AllBitsSet, _fld1, _fld2, _falseFld); } public void ConditionalSelect_FalseOp() @@ -358,44 +364,44 @@ namespace JIT.HardwareIntrinsics.Arm ConditionalSelectScenario_TrueValue(_mask, _fld1, _fld2, _falseFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_FalseOp_zero - operation in TrueValue"); - ConditionalSelectScenario_TrueValue({Op1VectorType}<{Op1BaseType}>.Zero, _fld1, _fld2, _falseFld); + ConditionalSelectScenario_TrueValue({RetVectorType}<{RetBaseType}>.Zero, _fld1, _fld2, _falseFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_FalseOp_all - operation in TrueValue"); - ConditionalSelectScenario_TrueValue({Op1VectorType}<{Op1BaseType}>.AllBitsSet, _fld1, _fld2, _falseFld); + ConditionalSelectScenario_TrueValue({RetVectorType}<{RetBaseType}>.AllBitsSet, _fld1, _fld2, _falseFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_FalseOp_mask - operation in FalseValue"); ConditionalSelectScenario_FalseValue(_mask, _fld1, _fld2, _falseFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_FalseOp_zero - operation in FalseValue"); - ConditionalSelectScenario_FalseValue({Op1VectorType}<{Op1BaseType}>.Zero, _fld1, _fld2, _falseFld); + ConditionalSelectScenario_FalseValue({RetVectorType}<{RetBaseType}>.Zero, _fld1, _fld2, _falseFld); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_FalseOp_all - operation in FalseValue"); - ConditionalSelectScenario_FalseValue({Op1VectorType}<{Op1BaseType}>.AllBitsSet, _fld1, _fld2, _falseFld); + ConditionalSelectScenario_FalseValue({RetVectorType}<{RetBaseType}>.AllBitsSet, _fld1, _fld2, _falseFld); } public void ConditionalSelect_ZeroOp() { TestLibrary.TestFramework.BeginScenario("ConditionalSelect_ZeroOp_mask - operation in TrueValue"); - ConditionalSelectScenario_TrueValue(_mask, _fld1, _fld2, {Op1VectorType}<{Op1BaseType}>.Zero); + ConditionalSelectScenario_TrueValue(_mask, _fld1, _fld2, {RetVectorType}<{RetBaseType}>.Zero); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_ZeroOp_zero - operation in TrueValue"); - ConditionalSelectScenario_TrueValue({Op1VectorType}<{Op1BaseType}>.Zero, _fld1, _fld2, {Op1VectorType}<{Op1BaseType}>.Zero); + ConditionalSelectScenario_TrueValue({RetVectorType}<{RetBaseType}>.Zero, _fld1, _fld2, {RetVectorType}<{RetBaseType}>.Zero); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_ZeroOp_all - operation in TrueValue"); - ConditionalSelectScenario_TrueValue({Op1VectorType}<{Op1BaseType}>.AllBitsSet, _fld1, _fld2, {Op1VectorType}<{Op1BaseType}>.Zero); + ConditionalSelectScenario_TrueValue({RetVectorType}<{RetBaseType}>.AllBitsSet, _fld1, _fld2, {RetVectorType}<{RetBaseType}>.Zero); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_ZeroOp_mask - operation in FalseValue"); - ConditionalSelectScenario_FalseValue(_mask, _fld1, _fld2, {Op1VectorType}<{Op1BaseType}>.Zero); + ConditionalSelectScenario_FalseValue(_mask, _fld1, _fld2, {RetVectorType}<{RetBaseType}>.Zero); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_ZeroOp_zero - operation in FalseValue"); - ConditionalSelectScenario_FalseValue({Op1VectorType}<{Op1BaseType}>.Zero, _fld1, _fld2, {Op1VectorType}<{Op1BaseType}>.Zero); + ConditionalSelectScenario_FalseValue({RetVectorType}<{RetBaseType}>.Zero, _fld1, _fld2, {RetVectorType}<{RetBaseType}>.Zero); TestLibrary.TestFramework.BeginScenario("ConditionalSelect_ZeroOp_all - operation in FalseValue"); - ConditionalSelectScenario_FalseValue({Op1VectorType}<{Op1BaseType}>.AllBitsSet, _fld1, _fld2, {Op1VectorType}<{Op1BaseType}>.Zero); + ConditionalSelectScenario_FalseValue({RetVectorType}<{RetBaseType}>.AllBitsSet, _fld1, _fld2, {RetVectorType}<{RetBaseType}>.Zero); } [method: MethodImpl(MethodImplOptions.AggressiveInlining)] - private void ConditionalSelectScenario_TrueValue({Op1VectorType}<{Op1BaseType}> mask, {Op1VectorType}<{Op1BaseType}> op1, {Op1VectorType}<{Op1BaseType}> op2, {Op1VectorType}<{Op1BaseType}> falseOp) + private void ConditionalSelectScenario_TrueValue({RetVectorType}<{RetBaseType}> mask, {Op1VectorType}<{Op1BaseType}> op1, {Op2VectorType}<{Op2BaseType}> op2, {RetVectorType}<{RetBaseType}> falseOp) { var result = Sve.ConditionalSelect(mask, {Isa}.{Method}(op1, op2, {Imm}), falseOp); Unsafe.Write(_dataTable.outArrayPtr, result); @@ -403,7 +409,7 @@ namespace JIT.HardwareIntrinsics.Arm } [method: MethodImpl(MethodImplOptions.AggressiveInlining)] - private void ConditionalSelectScenario_FalseValue({Op1VectorType}<{Op1BaseType}> mask, {Op1VectorType}<{Op1BaseType}> op1, {Op1VectorType}<{Op1BaseType}> op2, {Op1VectorType}<{Op1BaseType}> trueOp) + private void ConditionalSelectScenario_FalseValue({RetVectorType}<{RetBaseType}> mask, {Op1VectorType}<{Op1BaseType}> op1, {Op2VectorType}<{Op2BaseType}> op2, {RetVectorType}<{RetBaseType}> trueOp) { var result = Sve.ConditionalSelect(mask, trueOp, {Isa}.{Method}(op1, op2, {Imm})); Unsafe.Write(_dataTable.outArrayPtr, result); @@ -431,17 +437,17 @@ namespace JIT.HardwareIntrinsics.Arm } } - private void ValidateConditionalSelectResult_TrueValue({Op1VectorType}<{Op1BaseType}> maskOp, {Op1VectorType}<{Op1BaseType}> firstOp, {Op1VectorType}<{Op1BaseType}> secondOp, {Op1VectorType}<{Op1BaseType}> falseOp, void* output, [CallerMemberName] string method = "") + private void ValidateConditionalSelectResult_TrueValue({RetVectorType}<{RetBaseType}> maskOp, {Op1VectorType}<{Op1BaseType}> firstOp, {Op2VectorType}<{Op2BaseType}> secondOp, {RetVectorType}<{RetBaseType}> falseOp, void* output, [CallerMemberName] string method = "") { - {Op1BaseType}[] mask = new {Op1BaseType}[Op1ElementCount]; + {RetBaseType}[] mask = new {RetBaseType}[Op1ElementCount]; {Op1BaseType}[] first = new {Op1BaseType}[Op1ElementCount]; - {Op1BaseType}[] second = new {Op1BaseType}[Op1ElementCount]; - {Op1BaseType}[] falseVal = new {Op1BaseType}[Op1ElementCount]; + {Op2BaseType}[] second = new {Op2BaseType}[Op1ElementCount]; + {RetBaseType}[] falseVal = new {RetBaseType}[Op1ElementCount]; {RetBaseType}[] result = new {RetBaseType}[RetElementCount]; - Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref mask[0]), maskOp); + Unsafe.WriteUnaligned(ref Unsafe.As<{RetBaseType}, byte>(ref mask[0]), maskOp); Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref first[0]), firstOp); - Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref second[0]), secondOp); - Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref falseVal[0]), falseOp); + Unsafe.WriteUnaligned(ref Unsafe.As<{Op2BaseType}, byte>(ref second[0]), secondOp); + Unsafe.WriteUnaligned(ref Unsafe.As<{RetBaseType}, byte>(ref falseVal[0]), falseOp); Unsafe.CopyBlockUnaligned(ref Unsafe.As<{RetBaseType}, byte>(ref result[0]), ref Unsafe.AsRef(output), (uint)Unsafe.SizeOf<{RetVectorType}<{RetBaseType}>>()); bool succeeded = true; {TemplateValidationLogicForCndSel} @@ -458,17 +464,17 @@ namespace JIT.HardwareIntrinsics.Arm } } - private void ValidateConditionalSelectResult_FalseValue({Op1VectorType}<{Op1BaseType}> maskOp, {Op1VectorType}<{Op1BaseType}> firstOp, {Op1VectorType}<{Op1BaseType}> secondOp, {Op1VectorType}<{Op1BaseType}> trueOp, void* output, [CallerMemberName] string method = "") + private void ValidateConditionalSelectResult_FalseValue({RetVectorType}<{RetBaseType}> maskOp, {Op1VectorType}<{Op1BaseType}> firstOp, {Op2VectorType}<{Op2BaseType}> secondOp, {RetVectorType}<{RetBaseType}> trueOp, void* output, [CallerMemberName] string method = "") { - {Op1BaseType}[] mask = new {Op1BaseType}[Op1ElementCount]; + {RetBaseType}[] mask = new {RetBaseType}[Op1ElementCount]; {Op1BaseType}[] first = new {Op1BaseType}[Op1ElementCount]; - {Op1BaseType}[] second = new {Op1BaseType}[Op1ElementCount]; - {Op1BaseType}[] trueVal = new {Op1BaseType}[Op1ElementCount]; + {Op2BaseType}[] second = new {Op2BaseType}[Op1ElementCount]; + {RetBaseType}[] trueVal = new {RetBaseType}[Op1ElementCount]; {RetBaseType}[] result = new {RetBaseType}[RetElementCount]; - Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref mask[0]), maskOp); + Unsafe.WriteUnaligned(ref Unsafe.As<{RetBaseType}, byte>(ref mask[0]), maskOp); Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref first[0]), firstOp); - Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref second[0]), secondOp); - Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref trueVal[0]), trueOp); + Unsafe.WriteUnaligned(ref Unsafe.As<{Op2BaseType}, byte>(ref second[0]), secondOp); + Unsafe.WriteUnaligned(ref Unsafe.As<{RetBaseType}, byte>(ref trueVal[0]), trueOp); Unsafe.CopyBlockUnaligned(ref Unsafe.As<{RetBaseType}, byte>(ref result[0]), ref Unsafe.AsRef(output), (uint)Unsafe.SizeOf<{RetVectorType}<{RetBaseType}>>()); bool succeeded = true; @@ -487,14 +493,14 @@ namespace JIT.HardwareIntrinsics.Arm } } - private void ValidateResult({Op1VectorType}<{Op1BaseType}> op1, {Op1VectorType}<{Op1BaseType}> op2, void* result, [CallerMemberName] string method = "") + private void ValidateResult({Op1VectorType}<{Op1BaseType}> op1, {Op2VectorType}<{Op2BaseType}> op2, void* result, [CallerMemberName] string method = "") { {Op1BaseType}[] inArray1 = new {Op1BaseType}[Op1ElementCount]; - {Op1BaseType}[] inArray2 = new {Op1BaseType}[Op1ElementCount]; + {Op2BaseType}[] inArray2 = new {Op2BaseType}[Op1ElementCount]; {RetBaseType}[] outArray = new {RetBaseType}[RetElementCount]; Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref inArray1[0]), op1); - Unsafe.WriteUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref inArray2[0]), op2); + Unsafe.WriteUnaligned(ref Unsafe.As<{Op2BaseType}, byte>(ref inArray2[0]), op2); Unsafe.CopyBlockUnaligned(ref Unsafe.As<{RetBaseType}, byte>(ref outArray[0]), ref Unsafe.AsRef(result), (uint)Unsafe.SizeOf<{RetVectorType}<{RetBaseType}>>()); ValidateResult(inArray1, inArray2, outArray, method); @@ -503,17 +509,17 @@ namespace JIT.HardwareIntrinsics.Arm private void ValidateResult(void* op1, void* op2, void* result, [CallerMemberName] string method = "") { {Op1BaseType}[] inArray1 = new {Op1BaseType}[Op1ElementCount]; - {Op1BaseType}[] inArray2 = new {Op1BaseType}[Op1ElementCount]; + {Op2BaseType}[] inArray2 = new {Op2BaseType}[Op2ElementCount]; {RetBaseType}[] outArray = new {RetBaseType}[RetElementCount]; Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref inArray1[0]), ref Unsafe.AsRef(op1), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); - Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1BaseType}, byte>(ref inArray2[0]), ref Unsafe.AsRef(op2), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); + Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op2BaseType}, byte>(ref inArray2[0]), ref Unsafe.AsRef(op2), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op2BaseType}>>()); Unsafe.CopyBlockUnaligned(ref Unsafe.As<{RetBaseType}, byte>(ref outArray[0]), ref Unsafe.AsRef(result), (uint)Unsafe.SizeOf<{RetVectorType}<{RetBaseType}>>()); ValidateResult(inArray1, inArray2, outArray, method); } - private void ValidateResult({Op1BaseType}[] firstOp, {Op1BaseType}[] secondOp, {RetBaseType}[] result, [CallerMemberName] string method = "") + private void ValidateResult({Op1BaseType}[] firstOp, {Op2BaseType}[] secondOp, {RetBaseType}[] result, [CallerMemberName] string method = "") { bool succeeded = true; @@ -521,7 +527,7 @@ namespace JIT.HardwareIntrinsics.Arm if (!succeeded) { - TestLibrary.TestFramework.LogInformation($"{nameof({Isa})}.{nameof({Isa}.{Method})}<{RetBaseType}>({Op1VectorType}<{Op1BaseType}>, {Op1VectorType}<{Op1BaseType}>): {method} failed:"); + TestLibrary.TestFramework.LogInformation($"{nameof({Isa})}.{nameof({Isa}.{Method})}<{RetBaseType}>({Op1VectorType}<{Op1BaseType}>, {Op2VectorType}<{Op2BaseType}>): {method} failed:"); TestLibrary.TestFramework.LogInformation($" firstOp: ({string.Join(", ", firstOp)})"); TestLibrary.TestFramework.LogInformation($"secondOp: ({string.Join(", ", secondOp)})"); TestLibrary.TestFramework.LogInformation($" result: ({string.Join(", ", result)})");