diff --git a/src/coreclr/jit/gentree.cpp b/src/coreclr/jit/gentree.cpp index a5f5f9fda75aed..f60798b813ba36 100644 --- a/src/coreclr/jit/gentree.cpp +++ b/src/coreclr/jit/gentree.cpp @@ -28524,6 +28524,14 @@ bool GenTreeHWIntrinsic::OperIsMemoryStore(GenTree** pAddr) const case NI_Sve_Scatter8BitNarrowing: case NI_Sve_Scatter8BitWithByteOffsetsNarrowing: case NI_Sve_ScatterWithByteOffsets: + case NI_Sve2_Scatter16BitNarrowingNonTemporal: + case NI_Sve2_Scatter16BitWithByteOffsetsNarrowingNonTemporal: + case NI_Sve2_Scatter32BitNarrowingNonTemporal: + case NI_Sve2_Scatter32BitWithByteOffsetsNarrowingNonTemporal: + case NI_Sve2_Scatter8BitNarrowingNonTemporal: + case NI_Sve2_Scatter8BitWithByteOffsetsNarrowingNonTemporal: + case NI_Sve2_ScatterNonTemporal: + case NI_Sve2_ScatterWithByteOffsetsNonTemporal: addr = Op(2); break; #endif // TARGET_ARM64 diff --git a/src/coreclr/jit/hwintrinsiccodegenarm64.cpp b/src/coreclr/jit/hwintrinsiccodegenarm64.cpp index 9e90f6e182e7f5..3bad1d69ffd30a 100644 --- a/src/coreclr/jit/hwintrinsiccodegenarm64.cpp +++ b/src/coreclr/jit/hwintrinsiccodegenarm64.cpp @@ -2391,6 +2391,49 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node) break; } + case NI_Sve2_Scatter16BitNarrowingNonTemporal: + case NI_Sve2_Scatter16BitWithByteOffsetsNarrowingNonTemporal: + case NI_Sve2_Scatter32BitNarrowingNonTemporal: + case NI_Sve2_Scatter32BitWithByteOffsetsNarrowingNonTemporal: + case NI_Sve2_Scatter8BitNarrowingNonTemporal: + case NI_Sve2_Scatter8BitWithByteOffsetsNarrowingNonTemporal: + case NI_Sve2_ScatterNonTemporal: + case NI_Sve2_ScatterWithByteOffsetsNonTemporal: + { + if (!varTypeIsSIMD(intrin.op2->gtType)) + { + // Scatter...(Vector mask, T* address, Vector offsets, Vector data) + + assert(intrin.numOperands == 4); + + // Calculate the byte offsets if using indices. + if (intrin.id == NI_Sve2_Scatter16BitNarrowingNonTemporal) + { + GetEmitter()->emitIns_R_R_I(INS_sve_lsl, emitSize, op3Reg, op3Reg, 1, opt); + } + else if (intrin.id == NI_Sve2_Scatter32BitNarrowingNonTemporal) + { + GetEmitter()->emitIns_R_R_I(INS_sve_lsl, emitSize, op3Reg, op3Reg, 2, opt); + } + else if (intrin.id == NI_Sve2_ScatterNonTemporal) + { + assert(emitActualTypeSize(intrin.baseType) == 8); + GetEmitter()->emitIns_R_R_I(INS_sve_lsl, emitSize, op3Reg, op3Reg, 3, opt); + } + + // op2Reg and op3Reg are swapped + GetEmitter()->emitIns_R_R_R_R(ins, emitSize, op4Reg, op1Reg, op3Reg, op2Reg, opt); + } + else + { + // Scatter...(Vector mask, Vector addresses, Vector data) + + assert(intrin.numOperands == 3); + GetEmitter()->emitIns_R_R_R_R(ins, emitSize, op3Reg, op1Reg, op2Reg, REG_ZR, opt); + } + break; + } + case NI_Sve_StoreNarrowing: opt = emitter::optGetSveInsOpt(emitTypeSize(intrin.baseType)); GetEmitter()->emitIns_R_R_R_I(ins, emitSize, op3Reg, op1Reg, op2Reg, 0, opt); diff --git a/src/coreclr/jit/hwintrinsiclistarm64sve.h b/src/coreclr/jit/hwintrinsiclistarm64sve.h index 75e9603c8946ea..fa6b66777b5dde 100644 --- a/src/coreclr/jit/hwintrinsiclistarm64sve.h +++ b/src/coreclr/jit/hwintrinsiclistarm64sve.h @@ -403,6 +403,14 @@ HARDWARE_INTRINSIC(Sve2, PolynomialMultiplyWideningEven, HARDWARE_INTRINSIC(Sve2, PolynomialMultiplyWideningOdd, -1, 2, {INS_invalid, INS_invalid, INS_invalid, INS_sve_pmullt, INS_invalid, INS_invalid, INS_invalid, INS_sve_pmullt, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable) HARDWARE_INTRINSIC(Sve2, ReciprocalEstimate, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_urecpe, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation) HARDWARE_INTRINSIC(Sve2, ReciprocalSqrtEstimate, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_ursqrte, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation) +HARDWARE_INTRINSIC(Sve2, Scatter16BitNarrowingNonTemporal, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_stnt1h, INS_sve_stnt1h, INS_sve_stnt1h, INS_sve_stnt1h, INS_invalid, INS_invalid}, HW_Category_MemoryStore, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation) +HARDWARE_INTRINSIC(Sve2, Scatter16BitWithByteOffsetsNarrowingNonTemporal, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_stnt1h, INS_sve_stnt1h, INS_sve_stnt1h, INS_sve_stnt1h, INS_invalid, INS_invalid}, HW_Category_MemoryStore, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation) +HARDWARE_INTRINSIC(Sve2, Scatter32BitNarrowingNonTemporal, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_stnt1w, INS_sve_stnt1w, INS_invalid, INS_invalid}, HW_Category_MemoryStore, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation) +HARDWARE_INTRINSIC(Sve2, Scatter32BitWithByteOffsetsNarrowingNonTemporal, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_stnt1w, INS_sve_stnt1w, INS_invalid, INS_invalid}, HW_Category_MemoryStore, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation) +HARDWARE_INTRINSIC(Sve2, Scatter8BitNarrowingNonTemporal, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_stnt1b, INS_sve_stnt1b, INS_sve_stnt1b, INS_sve_stnt1b, INS_invalid, INS_invalid}, HW_Category_MemoryStore, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation) +HARDWARE_INTRINSIC(Sve2, Scatter8BitWithByteOffsetsNarrowingNonTemporal, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_stnt1b, INS_sve_stnt1b, INS_sve_stnt1b, INS_sve_stnt1b, INS_invalid, INS_invalid}, HW_Category_MemoryStore, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation) +HARDWARE_INTRINSIC(Sve2, ScatterNonTemporal, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_stnt1w, INS_sve_stnt1w, INS_sve_stnt1d, INS_sve_stnt1d, INS_sve_stnt1w, INS_sve_stnt1d}, HW_Category_MemoryStore, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation) +HARDWARE_INTRINSIC(Sve2, ScatterWithByteOffsetsNonTemporal, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_stnt1w, INS_sve_stnt1w, INS_sve_stnt1d, INS_sve_stnt1d, INS_sve_stnt1w, INS_sve_stnt1d}, HW_Category_MemoryStore, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation) HARDWARE_INTRINSIC(Sve2, ShiftArithmeticRounded, -1, -1, {INS_sve_srshl, INS_invalid, INS_sve_srshl, INS_invalid, INS_sve_srshl, INS_invalid, INS_sve_srshl, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_LowMaskedOperation) 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) 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 9722d809c321c7..7f30e5516ad10c 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 @@ -2937,6 +2937,368 @@ internal Arm64() { } /// public static Vector ReciprocalSqrtEstimate(Vector value) { throw new PlatformNotSupportedException(); } + + // Truncate to 16 bits and store, non-temporal + + // + // void svstnt1h_scatter[_u32base_s32](svbool_t pg, svuint32_t bases, svint32_t data) + // STNT1H Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1h_scatter[_u64base_s64](svbool_t pg, svuint64_t bases, svint64_t data) + /// STNT1H Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + // + // void svstnt1h_scatter[_u32base_u32](svbool_t pg, svuint32_t bases, svuint32_t data) + // STNT1H Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1h_scatter[_u64base_u64](svbool_t pg, svuint64_t bases, svuint64_t data) + /// STNT1H Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1h_scatter_[s64]index[_s64](svbool_t pg, int16_t *base, svint64_t indices, svint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, short* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1h_scatter_[u64]index[_s64](svbool_t pg, int16_t *base, svuint64_t indices, svint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, short* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1h_scatter_[s64]index[_u64](svbool_t pg, uint16_t *base, svint64_t indices, svuint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, ushort* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1h_scatter_[u64]index[_u64](svbool_t pg, uint16_t *base, svuint64_t indices, svuint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, ushort* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + + // Truncate to 16 bits and store, non-temporal + + /// + /// void svstnt1h_scatter_[u32]offset[_s32](svbool_t pg, int16_t *base, svuint32_t offsets, svint32_t data) + /// STNT1H Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(Vector mask, short* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1h_scatter_[s64]offset[_s64](svbool_t pg, int16_t *base, svint64_t offsets, svint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(Vector mask, short* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1h_scatter_[u64]offset[_s64](svbool_t pg, int16_t *base, svuint64_t offsets, svint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(Vector mask, short* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1h_scatter_[u32]offset[_u32](svbool_t pg, uint16_t *base, svuint32_t offsets, svuint32_t data) + /// STNT1H Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(Vector mask, ushort* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1h_scatter_[s64]offset[_u64](svbool_t pg, uint16_t *base, svint64_t offsets, svuint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(Vector mask, ushort* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1h_scatter_[u64]offset[_u64](svbool_t pg, uint16_t *base, svuint64_t offsets, svuint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(Vector mask, ushort* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + + // Truncate to 32 bits and store, non-temporal + + /// + /// void svstnt1w_scatter[_u64base_s64](svbool_t pg, svuint64_t bases, svint64_t data) + /// STNT1W Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void Scatter32BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1w_scatter[_u64base_u64](svbool_t pg, svuint64_t bases, svuint64_t data) + /// STNT1W Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void Scatter32BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1w_scatter_[s64]index[_s64](svbool_t pg, int32_t *base, svint64_t indices, svint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitNarrowingNonTemporal(Vector mask, int* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1w_scatter_[u64]index[_s64](svbool_t pg, int32_t *base, svuint64_t indices, svint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitNarrowingNonTemporal(Vector mask, int* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1w_scatter_[s64]index[_u64](svbool_t pg, uint32_t *base, svint64_t indices, svuint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitNarrowingNonTemporal(Vector mask, uint* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1w_scatter_[u64]index[_u64](svbool_t pg, uint32_t *base, svuint64_t indices, svuint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitNarrowingNonTemporal(Vector mask, uint* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + + // Truncate to 32 bits and store, non-temporal + + /// + /// void svstnt1w_scatter_[s64]offset[_s64](svbool_t pg, int32_t *base, svint64_t offsets, svint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitWithByteOffsetsNarrowingNonTemporal(Vector mask, int* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1w_scatter_[u64]offset[_s64](svbool_t pg, int32_t *base, svuint64_t offsets, svint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitWithByteOffsetsNarrowingNonTemporal(Vector mask, int* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1w_scatter_[s64]offset[_u64](svbool_t pg, uint32_t *base, svint64_t offsets, svuint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitWithByteOffsetsNarrowingNonTemporal(Vector mask, uint* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1w_scatter_[u64]offset[_u64](svbool_t pg, uint32_t *base, svuint64_t offsets, svuint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitWithByteOffsetsNarrowingNonTemporal(Vector mask, uint* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + + // Truncate to 8 bits and store, non-temporal + + // + // void svstnt1b_scatter[_u32base_s32](svbool_t pg, svuint32_t bases, svint32_t data) + // STNT1B Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void Scatter8BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1b_scatter[_u64base_s64](svbool_t pg, svuint64_t bases, svint64_t data) + /// STNT1B Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void Scatter8BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + // + // void svstnt1b_scatter[_u32base_u32](svbool_t pg, svuint32_t bases, svuint32_t data) + // STNT1B Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void Scatter8BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1b_scatter[_u64base_u64](svbool_t pg, svuint64_t bases, svuint64_t data) + /// STNT1B Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void Scatter8BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + + // Truncate to 8 bits and store, non-temporal + + /// + /// void svstnt1b_scatter_[u32]offset[_s32](svbool_t pg, int8_t *base, svuint32_t offsets, svint32_t data) + /// STNT1B Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(Vector mask, sbyte* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1b_scatter_[s64]offset[_s64](svbool_t pg, int8_t *base, svint64_t offsets, svint64_t data) + /// STNT1B Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(Vector mask, sbyte* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1b_scatter_[u64]offset[_s64](svbool_t pg, int8_t *base, svuint64_t offsets, svint64_t data) + /// STNT1B Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(Vector mask, sbyte* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1b_scatter_[u32]offset[_u32](svbool_t pg, uint8_t *base, svuint32_t offsets, svuint32_t data) + /// STNT1B Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(Vector mask, byte* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1b_scatter_[s64]offset[_u64](svbool_t pg, uint8_t *base, svint64_t offsets, svuint64_t data) + /// STNT1B Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(Vector mask, byte* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1b_scatter_[u64]offset[_u64](svbool_t pg, uint8_t *base, svuint64_t offsets, svuint64_t data) + /// STNT1B Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(Vector mask, byte* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + + // Non-truncating store, non-temporal + + /// + /// void svstnt1_scatter[_u64base_f64](svbool_t pg, svuint64_t bases, svfloat64_t data) + /// STNT1D Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void ScatterNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + // + // void svstnt1_scatter[_u32base_s32](svbool_t pg, svuint32_t bases, svint32_t data) + // STNT1W Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void ScatterNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter[_u64base_s64](svbool_t pg, svuint64_t bases, svint64_t data) + /// STNT1D Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void ScatterNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + // + // void svstnt1_scatter[_u32base_f32](svbool_t pg, svuint32_t bases, svfloat32_t data) + // STNT1W Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void ScatterNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + // + // void svstnt1_scatter[_u32base_u32](svbool_t pg, svuint32_t bases, svuint32_t data) + // STNT1W Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void ScatterNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter[_u64base_u64](svbool_t pg, svuint64_t bases, svuint64_t data) + /// STNT1D Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void ScatterNonTemporal(Vector mask, Vector addresses, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[s64]index[_f64](svbool_t pg, float64_t *base, svint64_t indices, svfloat64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterNonTemporal(Vector mask, double* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[u64]index[_f64](svbool_t pg, float64_t *base, svuint64_t indices, svfloat64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterNonTemporal(Vector mask, double* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[s64]index[_s64](svbool_t pg, int64_t *base, svint64_t indices, svint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterNonTemporal(Vector mask, long* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[u64]index[_s64](svbool_t pg, int64_t *base, svuint64_t indices, svint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterNonTemporal(Vector mask, long* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[s64]index[_u64](svbool_t pg, uint64_t *base, svint64_t indices, svuint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterNonTemporal(Vector mask, ulong* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[u64]index[_u64](svbool_t pg, uint64_t *base, svuint64_t indices, svuint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterNonTemporal(Vector mask, ulong* address, Vector indices, Vector data) { throw new PlatformNotSupportedException(); } + + + // Non-truncating store, non-temporal + + /// + /// void svstnt1_scatter_[s64]offset[_f64](svbool_t pg, float64_t *base, svint64_t offsets, svfloat64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, double* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[u64]offset[_f64](svbool_t pg, float64_t *base, svuint64_t offsets, svfloat64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, double* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[u32]offset[_s32](svbool_t pg, int32_t *base, svuint32_t offsets, svint32_t data) + /// STNT1W Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, int* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[s64]offset[_s64](svbool_t pg, int64_t *base, svint64_t offsets, svint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, long* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[u64]offset[_s64](svbool_t pg, int64_t *base, svuint64_t offsets, svint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, long* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[u32]offset[_f32](svbool_t pg, float32_t *base, svuint32_t offsets, svfloat32_t data) + /// STNT1W Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, float* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[u32]offset[_u32](svbool_t pg, uint32_t *base, svuint32_t offsets, svuint32_t data) + /// STNT1W Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, uint* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[s64]offset[_u64](svbool_t pg, uint64_t *base, svint64_t offsets, svuint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, ulong* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + /// + /// void svstnt1_scatter_[u64]offset[_u64](svbool_t pg, uint64_t *base, svuint64_t offsets, svuint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, ulong* address, Vector offsets, Vector data) { throw new PlatformNotSupportedException(); } + + // Rounding shift left /// 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 904ce01689efbb..a9ecbaa3c3e3a8 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 @@ -2961,6 +2961,368 @@ internal Arm64() { } /// public static Vector ReciprocalSqrtEstimate(Vector value) => ReciprocalSqrtEstimate(value); + + // Truncate to 16 bits and store, non-temporal + + // + // void svstnt1h_scatter[_u32base_s32](svbool_t pg, svuint32_t bases, svint32_t data) + // STNT1H Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) => Scatter16BitNarrowingNonTemporal(mask, addresses, data); + + /// + /// void svstnt1h_scatter[_u64base_s64](svbool_t pg, svuint64_t bases, svint64_t data) + /// STNT1H Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) => Scatter16BitNarrowingNonTemporal(mask, addresses, data); + + // + // void svstnt1h_scatter[_u32base_u32](svbool_t pg, svuint32_t bases, svuint32_t data) + // STNT1H Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) => Scatter16BitNarrowingNonTemporal(mask, addresses, data); + + /// + /// void svstnt1h_scatter[_u64base_u64](svbool_t pg, svuint64_t bases, svuint64_t data) + /// STNT1H Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) => Scatter16BitNarrowingNonTemporal(mask, addresses, data); + + /// + /// void svstnt1h_scatter_[s64]index[_s64](svbool_t pg, int16_t *base, svint64_t indices, svint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, short* address, Vector indices, Vector data) => Scatter16BitNarrowingNonTemporal(mask, address, indices, data); + + /// + /// void svstnt1h_scatter_[u64]index[_s64](svbool_t pg, int16_t *base, svuint64_t indices, svint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, short* address, Vector indices, Vector data) => Scatter16BitNarrowingNonTemporal(mask, address, indices, data); + + /// + /// void svstnt1h_scatter_[s64]index[_u64](svbool_t pg, uint16_t *base, svint64_t indices, svuint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, ushort* address, Vector indices, Vector data) => Scatter16BitNarrowingNonTemporal(mask, address, indices, data); + + /// + /// void svstnt1h_scatter_[u64]index[_u64](svbool_t pg, uint16_t *base, svuint64_t indices, svuint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitNarrowingNonTemporal(Vector mask, ushort* address, Vector indices, Vector data) => Scatter16BitNarrowingNonTemporal(mask, address, indices, data); + + + // Truncate to 16 bits and store, non-temporal + + /// + /// void svstnt1h_scatter_[u32]offset[_s32](svbool_t pg, int16_t *base, svuint32_t offsets, svint32_t data) + /// STNT1H Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(Vector mask, short* address, Vector offsets, Vector data) => Scatter16BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1h_scatter_[s64]offset[_s64](svbool_t pg, int16_t *base, svint64_t offsets, svint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(Vector mask, short* address, Vector offsets, Vector data) => Scatter16BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1h_scatter_[u64]offset[_s64](svbool_t pg, int16_t *base, svuint64_t offsets, svint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(Vector mask, short* address, Vector offsets, Vector data) => Scatter16BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1h_scatter_[u32]offset[_u32](svbool_t pg, uint16_t *base, svuint32_t offsets, svuint32_t data) + /// STNT1H Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(Vector mask, ushort* address, Vector offsets, Vector data) => Scatter16BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1h_scatter_[s64]offset[_u64](svbool_t pg, uint16_t *base, svint64_t offsets, svuint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(Vector mask, ushort* address, Vector offsets, Vector data) => Scatter16BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1h_scatter_[u64]offset[_u64](svbool_t pg, uint16_t *base, svuint64_t offsets, svuint64_t data) + /// STNT1H Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(Vector mask, ushort* address, Vector offsets, Vector data) => Scatter16BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + + // Truncate to 32 bits and store, non-temporal + + /// + /// void svstnt1w_scatter[_u64base_s64](svbool_t pg, svuint64_t bases, svint64_t data) + /// STNT1W Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void Scatter32BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) => Scatter32BitNarrowingNonTemporal(mask, addresses, data); + + /// + /// void svstnt1w_scatter[_u64base_u64](svbool_t pg, svuint64_t bases, svuint64_t data) + /// STNT1W Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void Scatter32BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) => Scatter32BitNarrowingNonTemporal(mask, addresses, data); + + /// + /// void svstnt1w_scatter_[s64]index[_s64](svbool_t pg, int32_t *base, svint64_t indices, svint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitNarrowingNonTemporal(Vector mask, int* address, Vector indices, Vector data) => Scatter32BitNarrowingNonTemporal(mask, address, indices, data); + + /// + /// void svstnt1w_scatter_[u64]index[_s64](svbool_t pg, int32_t *base, svuint64_t indices, svint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitNarrowingNonTemporal(Vector mask, int* address, Vector indices, Vector data) => Scatter32BitNarrowingNonTemporal(mask, address, indices, data); + + /// + /// void svstnt1w_scatter_[s64]index[_u64](svbool_t pg, uint32_t *base, svint64_t indices, svuint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitNarrowingNonTemporal(Vector mask, uint* address, Vector indices, Vector data) => Scatter32BitNarrowingNonTemporal(mask, address, indices, data); + + /// + /// void svstnt1w_scatter_[u64]index[_u64](svbool_t pg, uint32_t *base, svuint64_t indices, svuint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitNarrowingNonTemporal(Vector mask, uint* address, Vector indices, Vector data) => Scatter32BitNarrowingNonTemporal(mask, address, indices, data); + + + // Truncate to 32 bits and store, non-temporal + + /// + /// void svstnt1w_scatter_[s64]offset[_s64](svbool_t pg, int32_t *base, svint64_t offsets, svint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitWithByteOffsetsNarrowingNonTemporal(Vector mask, int* address, Vector offsets, Vector data) => Scatter32BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1w_scatter_[u64]offset[_s64](svbool_t pg, int32_t *base, svuint64_t offsets, svint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitWithByteOffsetsNarrowingNonTemporal(Vector mask, int* address, Vector offsets, Vector data) => Scatter32BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1w_scatter_[s64]offset[_u64](svbool_t pg, uint32_t *base, svint64_t offsets, svuint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitWithByteOffsetsNarrowingNonTemporal(Vector mask, uint* address, Vector offsets, Vector data) => Scatter32BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1w_scatter_[u64]offset[_u64](svbool_t pg, uint32_t *base, svuint64_t offsets, svuint64_t data) + /// STNT1W Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter32BitWithByteOffsetsNarrowingNonTemporal(Vector mask, uint* address, Vector offsets, Vector data) => Scatter32BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + + // Truncate to 8 bits and store, non-temporal + + // + // void svstnt1b_scatter[_u32base_s32](svbool_t pg, svuint32_t bases, svint32_t data) + // STNT1B Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void Scatter8BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) => Scatter8BitNarrowingNonTemporal(mask, addresses, data); + + /// + /// void svstnt1b_scatter[_u64base_s64](svbool_t pg, svuint64_t bases, svint64_t data) + /// STNT1B Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void Scatter8BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) => Scatter8BitNarrowingNonTemporal(mask, addresses, data); + + // + // void svstnt1b_scatter[_u32base_u32](svbool_t pg, svuint32_t bases, svuint32_t data) + // STNT1B Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void Scatter8BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) => Scatter8BitNarrowingNonTemporal(mask, addresses, data); + + /// + /// void svstnt1b_scatter[_u64base_u64](svbool_t pg, svuint64_t bases, svuint64_t data) + /// STNT1B Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void Scatter8BitNarrowingNonTemporal(Vector mask, Vector addresses, Vector data) => Scatter8BitNarrowingNonTemporal(mask, addresses, data); + + + // Truncate to 8 bits and store, non-temporal + + /// + /// void svstnt1b_scatter_[u32]offset[_s32](svbool_t pg, int8_t *base, svuint32_t offsets, svint32_t data) + /// STNT1B Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(Vector mask, sbyte* address, Vector offsets, Vector data) => Scatter8BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1b_scatter_[s64]offset[_s64](svbool_t pg, int8_t *base, svint64_t offsets, svint64_t data) + /// STNT1B Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(Vector mask, sbyte* address, Vector offsets, Vector data) => Scatter8BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1b_scatter_[u64]offset[_s64](svbool_t pg, int8_t *base, svuint64_t offsets, svint64_t data) + /// STNT1B Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(Vector mask, sbyte* address, Vector offsets, Vector data) => Scatter8BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1b_scatter_[u32]offset[_u32](svbool_t pg, uint8_t *base, svuint32_t offsets, svuint32_t data) + /// STNT1B Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(Vector mask, byte* address, Vector offsets, Vector data) => Scatter8BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1b_scatter_[s64]offset[_u64](svbool_t pg, uint8_t *base, svint64_t offsets, svuint64_t data) + /// STNT1B Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(Vector mask, byte* address, Vector offsets, Vector data) => Scatter8BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1b_scatter_[u64]offset[_u64](svbool_t pg, uint8_t *base, svuint64_t offsets, svuint64_t data) + /// STNT1B Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(Vector mask, byte* address, Vector offsets, Vector data) => Scatter8BitWithByteOffsetsNarrowingNonTemporal(mask, address, offsets, data); + + + // Non-truncating store, non-temporal + + /// + /// void svstnt1_scatter[_u64base_f64](svbool_t pg, svuint64_t bases, svfloat64_t data) + /// STNT1D Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void ScatterNonTemporal(Vector mask, Vector addresses, Vector data) => ScatterNonTemporal(mask, addresses, data); + + // + // void svstnt1_scatter[_u32base_s32](svbool_t pg, svuint32_t bases, svint32_t data) + // STNT1W Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void ScatterNonTemporal(Vector mask, Vector addresses, Vector data) => ScatterNonTemporal(mask, addresses, data); + + /// + /// void svstnt1_scatter[_u64base_s64](svbool_t pg, svuint64_t bases, svint64_t data) + /// STNT1D Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void ScatterNonTemporal(Vector mask, Vector addresses, Vector data) => ScatterNonTemporal(mask, addresses, data); + + // + // void svstnt1_scatter[_u32base_f32](svbool_t pg, svuint32_t bases, svfloat32_t data) + // STNT1W Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void ScatterNonTemporal(Vector mask, Vector addresses, Vector data) => ScatterNonTemporal(mask, addresses, data); + + // + // void svstnt1_scatter[_u32base_u32](svbool_t pg, svuint32_t bases, svuint32_t data) + // STNT1W Zdata.S, Pg, [Zbases.S, XZR] + // + // Removed as per #103297 + // public static unsafe void ScatterNonTemporal(Vector mask, Vector addresses, Vector data) => ScatterNonTemporal(mask, addresses, data); + + /// + /// void svstnt1_scatter[_u64base_u64](svbool_t pg, svuint64_t bases, svuint64_t data) + /// STNT1D Zdata.D, Pg, [Zbases.D, XZR] + /// + public static unsafe void ScatterNonTemporal(Vector mask, Vector addresses, Vector data) => ScatterNonTemporal(mask, addresses, data); + + /// + /// void svstnt1_scatter_[s64]index[_f64](svbool_t pg, float64_t *base, svint64_t indices, svfloat64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterNonTemporal(Vector mask, double* address, Vector indices, Vector data) => ScatterNonTemporal(mask, address, indices, data); + + /// + /// void svstnt1_scatter_[u64]index[_f64](svbool_t pg, float64_t *base, svuint64_t indices, svfloat64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterNonTemporal(Vector mask, double* address, Vector indices, Vector data) => ScatterNonTemporal(mask, address, indices, data); + + /// + /// void svstnt1_scatter_[s64]index[_s64](svbool_t pg, int64_t *base, svint64_t indices, svint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterNonTemporal(Vector mask, long* address, Vector indices, Vector data) => ScatterNonTemporal(mask, address, indices, data); + + /// + /// void svstnt1_scatter_[u64]index[_s64](svbool_t pg, int64_t *base, svuint64_t indices, svint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterNonTemporal(Vector mask, long* address, Vector indices, Vector data) => ScatterNonTemporal(mask, address, indices, data); + + /// + /// void svstnt1_scatter_[s64]index[_u64](svbool_t pg, uint64_t *base, svint64_t indices, svuint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterNonTemporal(Vector mask, ulong* address, Vector indices, Vector data) => ScatterNonTemporal(mask, address, indices, data); + + /// + /// void svstnt1_scatter_[u64]index[_u64](svbool_t pg, uint64_t *base, svuint64_t indices, svuint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterNonTemporal(Vector mask, ulong* address, Vector indices, Vector data) => ScatterNonTemporal(mask, address, indices, data); + + + // Non-truncating store, non-temporal + + /// + /// void svstnt1_scatter_[s64]offset[_f64](svbool_t pg, float64_t *base, svint64_t offsets, svfloat64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, double* address, Vector offsets, Vector data) => ScatterWithByteOffsetsNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1_scatter_[u64]offset[_f64](svbool_t pg, float64_t *base, svuint64_t offsets, svfloat64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, double* address, Vector offsets, Vector data) => ScatterWithByteOffsetsNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1_scatter_[u32]offset[_s32](svbool_t pg, int32_t *base, svuint32_t offsets, svint32_t data) + /// STNT1W Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, int* address, Vector offsets, Vector data) => ScatterWithByteOffsetsNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1_scatter_[s64]offset[_s64](svbool_t pg, int64_t *base, svint64_t offsets, svint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, long* address, Vector offsets, Vector data) => ScatterWithByteOffsetsNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1_scatter_[u64]offset[_s64](svbool_t pg, int64_t *base, svuint64_t offsets, svint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, long* address, Vector offsets, Vector data) => ScatterWithByteOffsetsNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1_scatter_[u32]offset[_f32](svbool_t pg, float32_t *base, svuint32_t offsets, svfloat32_t data) + /// STNT1W Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, float* address, Vector offsets, Vector data) => ScatterWithByteOffsetsNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1_scatter_[u32]offset[_u32](svbool_t pg, uint32_t *base, svuint32_t offsets, svuint32_t data) + /// STNT1W Zdata.S, Pg, [Zoffsets.S, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, uint* address, Vector offsets, Vector data) => ScatterWithByteOffsetsNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1_scatter_[s64]offset[_u64](svbool_t pg, uint64_t *base, svint64_t offsets, svuint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, ulong* address, Vector offsets, Vector data) => ScatterWithByteOffsetsNonTemporal(mask, address, offsets, data); + + /// + /// void svstnt1_scatter_[u64]offset[_u64](svbool_t pg, uint64_t *base, svuint64_t offsets, svuint64_t data) + /// STNT1D Zdata.D, Pg, [Zoffsets.D, Xbase] + /// + public static unsafe void ScatterWithByteOffsetsNonTemporal(Vector mask, ulong* address, Vector offsets, Vector data) => ScatterWithByteOffsetsNonTemporal(mask, address, offsets, data); + + // Rounding shift left /// 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 479501776f2a19..446fe932c0afda 100644 --- a/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs +++ b/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs @@ -6598,6 +6598,61 @@ internal Arm64() { } public static System.Numerics.Vector PolynomialMultiplyWideningOdd(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector ReciprocalEstimate(System.Numerics.Vector value) { throw null; } public static System.Numerics.Vector ReciprocalSqrtEstimate(System.Numerics.Vector value) { throw null; } + // public static unsafe void Scatter16BitNarrowingNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter16BitNarrowingNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + // public static unsafe void Scatter16BitNarrowingNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter16BitNarrowingNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter16BitNarrowingNonTemporal(System.Numerics.Vector mask, short* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter16BitNarrowingNonTemporal(System.Numerics.Vector mask, short* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter16BitNarrowingNonTemporal(System.Numerics.Vector mask, ushort* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter16BitNarrowingNonTemporal(System.Numerics.Vector mask, ushort* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, short* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, short* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, short* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, ushort* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, ushort* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter16BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, ushort* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter32BitNarrowingNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter32BitNarrowingNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter32BitNarrowingNonTemporal(System.Numerics.Vector mask, int* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter32BitNarrowingNonTemporal(System.Numerics.Vector mask, int* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter32BitNarrowingNonTemporal(System.Numerics.Vector mask, uint* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter32BitNarrowingNonTemporal(System.Numerics.Vector mask, uint* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter32BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, int* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter32BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, int* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter32BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, uint* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter32BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, uint* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + // public static unsafe void Scatter8BitNarrowingNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter8BitNarrowingNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + // public static unsafe void Scatter8BitNarrowingNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter8BitNarrowingNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, sbyte* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, sbyte* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, sbyte* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, byte* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, byte* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void Scatter8BitWithByteOffsetsNarrowingNonTemporal(System.Numerics.Vector mask, byte* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + // public static unsafe void ScatterNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + // public static unsafe void ScatterNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + // public static unsafe void ScatterNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterNonTemporal(System.Numerics.Vector mask, System.Numerics.Vector addresses, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterNonTemporal(System.Numerics.Vector mask, double* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterNonTemporal(System.Numerics.Vector mask, double* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterNonTemporal(System.Numerics.Vector mask, long* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterNonTemporal(System.Numerics.Vector mask, long* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterNonTemporal(System.Numerics.Vector mask, ulong* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterNonTemporal(System.Numerics.Vector mask, ulong* address, System.Numerics.Vector indices, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterWithByteOffsetsNonTemporal(System.Numerics.Vector mask, double* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterWithByteOffsetsNonTemporal(System.Numerics.Vector mask, double* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterWithByteOffsetsNonTemporal(System.Numerics.Vector mask, int* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterWithByteOffsetsNonTemporal(System.Numerics.Vector mask, long* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterWithByteOffsetsNonTemporal(System.Numerics.Vector mask, long* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterWithByteOffsetsNonTemporal(System.Numerics.Vector mask, float* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterWithByteOffsetsNonTemporal(System.Numerics.Vector mask, uint* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterWithByteOffsetsNonTemporal(System.Numerics.Vector mask, ulong* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static unsafe void ScatterWithByteOffsetsNonTemporal(System.Numerics.Vector mask, ulong* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } public static System.Numerics.Vector ShiftArithmeticRounded(System.Numerics.Vector value, System.Numerics.Vector count) { throw null; } public static System.Numerics.Vector ShiftArithmeticRounded(System.Numerics.Vector value, System.Numerics.Vector count) { throw null; } public static System.Numerics.Vector ShiftArithmeticRounded(System.Numerics.Vector value, System.Numerics.Vector count) { throw null; } diff --git a/src/tests/Common/GenerateHWIntrinsicTests/Arm/Sve2Tests.cs b/src/tests/Common/GenerateHWIntrinsicTests/Arm/Sve2Tests.cs index 2bba9e4521cc8c..e05fb65fb11541 100644 --- a/src/tests/Common/GenerateHWIntrinsicTests/Arm/Sve2Tests.cs +++ b/src/tests/Common/GenerateHWIntrinsicTests/Arm/Sve2Tests.cs @@ -673,6 +673,69 @@ static class Sve2Tests (Templates.SveSimpleVecOpTest, new Dictionary { ["TestName"] = "Sve2_ReciprocalEstimate_uint", ["Method"] = "ReciprocalEstimate", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.UnsignedReciprocalEstimate(firstOp[i]) != result[i]", ["GetIterResult"] = "Helpers.UnsignedReciprocalEstimate(leftOp[i])"}), (Templates.SveSimpleVecOpTest, new Dictionary { ["TestName"] = "Sve2_ReciprocalSqrtEstimate_uint", ["Method"] = "ReciprocalSqrtEstimate", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "Helpers.UnsignedReciprocalSqrtEstimate(firstOp[i]) != result[i]", ["GetIterResult"] = "Helpers.UnsignedReciprocalSqrtEstimate(leftOp[i])"}), + // (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_Scatter16BitNarrowingNonTemporal_Bases_int_uint", ["Method"] = "Scatter16BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int32", ["NarrowingType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt32()"}), + (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_Scatter16BitNarrowingNonTemporal_Bases_long_ulong", ["Method"] = "Scatter16BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["NarrowingType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()"}), + // (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_Scatter16BitNarrowingNonTemporal_Bases_uint_uint", ["Method"] = "Scatter16BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt32", ["NarrowingType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt32()"}), + (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_Scatter16BitNarrowingNonTemporal_Bases_ulong_ulong", ["Method"] = "Scatter16BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["NarrowingType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter16BitNarrowingNonTemporal_Indices_long_long", ["Method"] = "Scatter16BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int16", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "true"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter16BitNarrowingNonTemporal_Indices_long_ulong", ["Method"] = "Scatter16BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int16", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "true"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter16BitNarrowingNonTemporal_Indices_ulong_long", ["Method"] = "Scatter16BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "UInt16", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "true"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter16BitNarrowingNonTemporal_Indices_ulong_ulong", ["Method"] = "Scatter16BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "UInt16", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "true"}), + + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter16BitWithByteOffsetsNarrowingNonTemporal_int_uint", ["Method"] = "Scatter16BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2BaseType"] = "Int16", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt32", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt32()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter16BitWithByteOffsetsNarrowingNonTemporal_long_long", ["Method"] = "Scatter16BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int16", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter16BitWithByteOffsetsNarrowingNonTemporal_long_ulong", ["Method"] = "Scatter16BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int16", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter16BitWithByteOffsetsNarrowingNonTemporal_uint_uint", ["Method"] = "Scatter16BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2BaseType"] = "UInt16", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt32", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt32()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter16BitWithByteOffsetsNarrowingNonTemporal_ulong_long", ["Method"] = "Scatter16BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "UInt16", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter16BitWithByteOffsetsNarrowingNonTemporal_ulong_ulong", ["Method"] = "Scatter16BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "UInt16", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "false"}), + + (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_Scatter32BitNarrowingNonTemporal_Bases_long_ulong", ["Method"] = "Scatter32BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["NarrowingType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()"}), + (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_Scatter32BitNarrowingNonTemporal_Bases_ulong_ulong", ["Method"] = "Scatter32BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["NarrowingType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter32BitNarrowingNonTemporal_Indices_long_long", ["Method"] = "Scatter32BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "true"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter32BitNarrowingNonTemporal_Indices_long_ulong", ["Method"] = "Scatter32BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "true"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter32BitNarrowingNonTemporal_Indices_ulong_long", ["Method"] = "Scatter32BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "true"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter32BitNarrowingNonTemporal_Indices_ulong_ulong", ["Method"] = "Scatter32BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "true"}), + + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter32BitWithByteOffsetsNarrowingNonTemporal_long_long", ["Method"] = "Scatter32BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter32BitWithByteOffsetsNarrowingNonTemporal_long_ulong", ["Method"] = "Scatter32BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter32BitWithByteOffsetsNarrowingNonTemporal_ulong_long", ["Method"] = "Scatter32BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter32BitWithByteOffsetsNarrowingNonTemporal_ulong_ulong", ["Method"] = "Scatter32BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "false"}), + + // (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_Scatter8BitNarrowingNonTemporal_Bases_int_uint", ["Method"] = "Scatter8BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int32", ["NarrowingType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt32()"}), + (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_Scatter8BitNarrowingNonTemporal_Bases_long_ulong", ["Method"] = "Scatter8BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["NarrowingType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()"}), + // (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_Scatter8BitNarrowingNonTemporal_Bases_uint_uint", ["Method"] = "Scatter8BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt32", ["NarrowingType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt32()"}), + (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_Scatter8BitNarrowingNonTemporal_Bases_ulong_ulong", ["Method"] = "Scatter8BitNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["NarrowingType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()"}), + + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter8BitWithByteOffsetsNarrowingNonTemporal_int_uint", ["Method"] = "Scatter8BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2BaseType"] = "SByte", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt32", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt32()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter8BitWithByteOffsetsNarrowingNonTemporal_long_long", ["Method"] = "Scatter8BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "SByte", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter8BitWithByteOffsetsNarrowingNonTemporal_long_ulong", ["Method"] = "Scatter8BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "SByte", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter8BitWithByteOffsetsNarrowingNonTemporal_uint_uint", ["Method"] = "Scatter8BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2BaseType"] = "Byte", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt32", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt32()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter8BitWithByteOffsetsNarrowingNonTemporal_ulong_long", ["Method"] = "Scatter8BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "Byte", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_Scatter8BitWithByteOffsetsNarrowingNonTemporal_ulong_ulong", ["Method"] = "Scatter8BitWithByteOffsetsNarrowingNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "Byte", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "false"}), + + (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_ScatterNonTemporal_Bases_double_ulong", ["Method"] = "ScatterNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Double", ["NarrowingType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskDouble()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetDouble()"}), + // (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_ScatterNonTemporal_Bases_int_uint", ["Method"] = "ScatterNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int32", ["NarrowingType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt32()"}), + (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_ScatterNonTemporal_Bases_long_ulong", ["Method"] = "ScatterNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["NarrowingType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()"}), + // (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_ScatterNonTemporal_Bases_float_uint", ["Method"] = "ScatterNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Single", ["NarrowingType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskSingle()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetSingle()"}), + // (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_ScatterNonTemporal_Bases_uint_uint", ["Method"] = "ScatterNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt32", ["NarrowingType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt32()"}), + (Templates.SveScatterVectorBases, new Dictionary { ["TestName"] = "Sve2_ScatterNonTemporal_Bases_ulong_ulong", ["Method"] = "ScatterNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["NarrowingType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterNonTemporal_Indices_double_long", ["Method"] = "ScatterNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["Op2BaseType"] = "Double", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskDouble()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetDouble()", ["isScatterIndices"] = "true"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterNonTemporal_Indices_double_ulong", ["Method"] = "ScatterNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["Op2BaseType"] = "Double", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskDouble()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetDouble()", ["isScatterIndices"] = "true"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterNonTemporal_Indices_long_long", ["Method"] = "ScatterNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "true"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterNonTemporal_Indices_long_ulong", ["Method"] = "ScatterNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "true"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterNonTemporal_Indices_ulong_long", ["Method"] = "ScatterNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "true"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterNonTemporal_Indices_ulong_ulong", ["Method"] = "ScatterNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "true"}), + + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterWithByteOffsetsNonTemporal_double_long", ["Method"] = "ScatterWithByteOffsetsNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["Op2BaseType"] = "Double", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskDouble()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetDouble()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterWithByteOffsetsNonTemporal_double_ulong", ["Method"] = "ScatterWithByteOffsetsNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["Op2BaseType"] = "Double", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskDouble()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetDouble()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterWithByteOffsetsNonTemporal_int_uint", ["Method"] = "ScatterWithByteOffsetsNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2BaseType"] = "Int32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt32", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt32()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterWithByteOffsetsNonTemporal_long_long", ["Method"] = "ScatterWithByteOffsetsNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterWithByteOffsetsNonTemporal_long_ulong", ["Method"] = "ScatterWithByteOffsetsNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetInt64()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterWithByteOffsetsNonTemporal_float_uint", ["Method"] = "ScatterWithByteOffsetsNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2BaseType"] = "Single", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt32", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskSingle()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp4"] = "TestLibrary.Generator.GetSingle()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterWithByteOffsetsNonTemporal_uint_uint", ["Method"] = "ScatterWithByteOffsetsNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2BaseType"] = "UInt32", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt32", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt32()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt32()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterWithByteOffsetsNonTemporal_ulong_long", ["Method"] = "ScatterWithByteOffsetsNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "Int64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "false"}), + (Templates.SveScatterVector, new Dictionary { ["TestName"] = "Sve2_ScatterWithByteOffsetsNonTemporal_ulong_ulong", ["Method"] = "ScatterWithByteOffsetsNonTemporal", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2BaseType"] = "UInt64", ["Op3VectorType"] = "Vector", ["Op3BaseType"] = "UInt64", ["Op4VectorType"] = "Vector", ["Op4BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp3"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp4"] = "TestLibrary.Generator.GetUInt64()", ["isScatterIndices"] = "false"}), + (Templates.SveVecBinOpTest, new Dictionary { ["TestName"] = "Sve2_ShiftArithmeticRounded_sbyte", ["Method"] = "ShiftArithmeticRounded", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != (sbyte)Helpers.SveShiftArithmeticRounded(left[i], right[i])", ["GetIterResult"] = "(sbyte)Helpers.SveShiftArithmeticRounded(leftOp[i], rightOp[i])"}), (Templates.SveVecBinOpTest, new Dictionary { ["TestName"] = "Sve2_ShiftArithmeticRounded_short", ["Method"] = "ShiftArithmeticRounded", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != (short)Helpers.SveShiftArithmeticRounded(left[i], right[i])", ["GetIterResult"] = "(short)Helpers.SveShiftArithmeticRounded(leftOp[i], rightOp[i])"}), (Templates.SveVecBinOpTest, new Dictionary { ["TestName"] = "Sve2_ShiftArithmeticRounded_int", ["Method"] = "ShiftArithmeticRounded", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ConvertFunc"] = "", ["ValidateIterResult"] = "result[i] != (int) Helpers.SveShiftArithmeticRounded(left[i], right[i])", ["GetIterResult"] = "(int) Helpers.SveShiftArithmeticRounded(leftOp[i], rightOp[i])"}), diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/SveScatterVectorBases.template b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/SveScatterVectorBases.template index 0e7054c5fbd268..6812875cff6c54 100644 --- a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/SveScatterVectorBases.template +++ b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/SveScatterVectorBases.template @@ -338,7 +338,7 @@ namespace {Namespace}._Sve _dataTable.ResetOutArray(); - typeof(Sve).GetMethod(nameof({Isa}.{Method}), new Type[] { typeof({Op1VectorType}<{Op1BaseType}>), typeof({Op2VectorType}<{Op2BaseType}>), typeof({Op1VectorType}<{Op1BaseType}>) }) + typeof({Isa}).GetMethod(nameof({Isa}.{Method}), new Type[] { typeof({Op1VectorType}<{Op1BaseType}>), typeof({Op2VectorType}<{Op2BaseType}>), typeof({Op1VectorType}<{Op1BaseType}>) }) .Invoke(null, new object[] { Unsafe.Read<{Op1VectorType}<{Op1BaseType}>>(_dataTable.inMaskArrayPtr), Unsafe.Read<{Op2VectorType}<{Op2BaseType}>>(_dataTable.inAddressArrayPtr),