From c3a34c5ce75d3f38495300325a800bda40c55a42 Mon Sep 17 00:00:00 2001 From: Fei Peng Date: Fri, 28 Sep 2018 15:59:44 -0700 Subject: [PATCH] Add pointer overloads for Avx2.BroadcastScalarToVector256 --- .../Intrinsics/X86/Avx2.PlatformNotSupported.cs | 68 +++++++++++++++++++--- .../shared/System/Runtime/Intrinsics/X86/Avx2.cs | 68 +++++++++++++++++++--- .../JIT/HardwareIntrinsics/X86/Avx2/Avx2_r.csproj | 10 ---- .../JIT/HardwareIntrinsics/X86/Avx2/Avx2_ro.csproj | 10 ---- .../HardwareIntrinsics/X86/Avx2/Program.Avx2.cs | 10 ---- .../X86/Shared/GenerateTests.csx | 10 ---- 6 files changed, 120 insertions(+), 56 deletions(-) diff --git a/src/System.Private.CoreLib/shared/System/Runtime/Intrinsics/X86/Avx2.PlatformNotSupported.cs b/src/System.Private.CoreLib/shared/System/Runtime/Intrinsics/X86/Avx2.PlatformNotSupported.cs index d453e91..4110137 100644 --- a/src/System.Private.CoreLib/shared/System/Runtime/Intrinsics/X86/Avx2.PlatformNotSupported.cs +++ b/src/System.Private.CoreLib/shared/System/Runtime/Intrinsics/X86/Avx2.PlatformNotSupported.cs @@ -409,50 +409,102 @@ namespace System.Runtime.Intrinsics.X86 public static Vector256 BroadcastScalarToVector256(Vector128 value) where T : struct { throw new PlatformNotSupportedException(); } /// + /// __m256i _mm256_broadcastb_epi8 (__m128i a) + /// VPBROADCASTB ymm, m8 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(byte* source) { throw new PlatformNotSupportedException(); } + /// + /// __m256i _mm256_broadcastb_epi8 (__m128i a) + /// VPBROADCASTB ymm, m8 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(sbyte* source) { throw new PlatformNotSupportedException(); } + + /// + /// __m256i _mm256_broadcastw_epi16 (__m128i a) + /// VPBROADCASTW ymm, m16 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(short* source) { throw new PlatformNotSupportedException(); } + /// + /// __m256i _mm256_broadcastw_epi16 (__m128i a) + /// VPBROADCASTW ymm, m16 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(ushort* source) { throw new PlatformNotSupportedException(); } + + /// + /// __m256i _mm256_broadcastd_epi32 (__m128i a) + /// VPBROADCASTD ymm, m32 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(int* source) { throw new PlatformNotSupportedException(); } + /// + /// __m256i _mm256_broadcastd_epi32 (__m128i a) + /// VPBROADCASTD ymm, m32 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(uint* source) { throw new PlatformNotSupportedException(); } + + /// + /// __m256i _mm256_broadcastq_epi64 (__m128i a) + /// VPBROADCASTQ ymm, m64 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(long* source) { throw new PlatformNotSupportedException(); } + /// + /// __m256i _mm256_broadcastq_epi64 (__m128i a) + /// VPBROADCASTQ ymm, m64 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(ulong* source) { throw new PlatformNotSupportedException(); } + + /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m8 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(sbyte* address) { throw new PlatformNotSupportedException(); } /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m8 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(byte* address) { throw new PlatformNotSupportedException(); } /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m16 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(short* address) { throw new PlatformNotSupportedException(); } /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m16 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(ushort* address) { throw new PlatformNotSupportedException(); } /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m32 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(int* address) { throw new PlatformNotSupportedException(); } /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m32 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(uint* address) { throw new PlatformNotSupportedException(); } /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m64 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(long* address) { throw new PlatformNotSupportedException(); } /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m64 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(ulong* address) { throw new PlatformNotSupportedException(); } diff --git a/src/System.Private.CoreLib/shared/System/Runtime/Intrinsics/X86/Avx2.cs b/src/System.Private.CoreLib/shared/System/Runtime/Intrinsics/X86/Avx2.cs index db1ddbb..c0d6146 100644 --- a/src/System.Private.CoreLib/shared/System/Runtime/Intrinsics/X86/Avx2.cs +++ b/src/System.Private.CoreLib/shared/System/Runtime/Intrinsics/X86/Avx2.cs @@ -408,50 +408,102 @@ namespace System.Runtime.Intrinsics.X86 public static Vector256 BroadcastScalarToVector256(Vector128 value) where T : struct => BroadcastScalarToVector256(value); /// + /// __m256i _mm256_broadcastb_epi8 (__m128i a) + /// VPBROADCASTB ymm, m8 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(byte* source) => BroadcastScalarToVector256(source); + /// + /// __m256i _mm256_broadcastb_epi8 (__m128i a) + /// VPBROADCASTB ymm, m8 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(sbyte* source) => BroadcastScalarToVector256(source); + + /// + /// __m256i _mm256_broadcastw_epi16 (__m128i a) + /// VPBROADCASTW ymm, m16 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(short* source) => BroadcastScalarToVector256(source); + /// + /// __m256i _mm256_broadcastw_epi16 (__m128i a) + /// VPBROADCASTW ymm, m16 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(ushort* source) => BroadcastScalarToVector256(source); + + /// + /// __m256i _mm256_broadcastd_epi32 (__m128i a) + /// VPBROADCASTD ymm, m32 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(int* source) => BroadcastScalarToVector256(source); + /// + /// __m256i _mm256_broadcastd_epi32 (__m128i a) + /// VPBROADCASTD ymm, m32 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(uint* source) => BroadcastScalarToVector256(source); + + /// + /// __m256i _mm256_broadcastq_epi64 (__m128i a) + /// VPBROADCASTQ ymm, m64 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(long* source) => BroadcastScalarToVector256(source); + /// + /// __m256i _mm256_broadcastq_epi64 (__m128i a) + /// VPBROADCASTQ ymm, m64 + /// The above native signature does not directly correspond to the managed signature. + /// + public static unsafe Vector256 BroadcastScalarToVector256(ulong* source) => BroadcastScalarToVector256(source); + + /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m8 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(sbyte* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m8 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(byte* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m16 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(short* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m16 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(ushort* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m32 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(int* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m32 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(uint* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m64 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(long* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) - /// VBROADCASTI128 xmm, m64 + /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(ulong* address) => BroadcastVector128ToVector256(address); diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Avx2_r.csproj b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Avx2_r.csproj index 98667b9..ed701dc 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Avx2_r.csproj +++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Avx2_r.csproj @@ -75,16 +75,6 @@ - - - - - - - - - - diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Avx2_ro.csproj b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Avx2_ro.csproj index 8a7a7cc..6c84b37 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Avx2_ro.csproj +++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Avx2_ro.csproj @@ -75,16 +75,6 @@ - - - - - - - - - - diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Program.Avx2.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Program.Avx2.cs index b970cb4..0e5121d 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Program.Avx2.cs +++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Program.Avx2.cs @@ -60,16 +60,6 @@ namespace JIT.HardwareIntrinsics.X86 ["Blend.UInt32.85"] = BlendUInt3285, ["BlendVariable.Byte"] = BlendVariableByte, ["BlendVariable.SByte"] = BlendVariableSByte, - ["BroadcastScalarToVector256.Byte"] = BroadcastScalarToVector256Byte, - ["BroadcastScalarToVector256.SByte"] = BroadcastScalarToVector256SByte, - ["BroadcastScalarToVector256.Int16"] = BroadcastScalarToVector256Int16, - ["BroadcastScalarToVector256.UInt16"] = BroadcastScalarToVector256UInt16, - ["BroadcastScalarToVector256.Int32"] = BroadcastScalarToVector256Int32, - ["BroadcastScalarToVector256.UInt32"] = BroadcastScalarToVector256UInt32, - ["BroadcastScalarToVector256.Int64"] = BroadcastScalarToVector256Int64, - ["BroadcastScalarToVector256.UInt64"] = BroadcastScalarToVector256UInt64, - ["BroadcastScalarToVector256.Single"] = BroadcastScalarToVector256Single, - ["BroadcastScalarToVector256.Double"] = BroadcastScalarToVector256Double, ["CompareEqual.Byte"] = CompareEqualByte, ["CompareEqual.Int16"] = CompareEqualInt16, ["CompareEqual.Int32"] = CompareEqualInt32, diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Shared/GenerateTests.csx b/tests/src/JIT/HardwareIntrinsics/X86/Shared/GenerateTests.csx index 469dddb..bf329d2 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Shared/GenerateTests.csx +++ b/tests/src/JIT/HardwareIntrinsics/X86/Shared/GenerateTests.csx @@ -688,16 +688,6 @@ private static readonly (string templateFileName, Dictionary tem ("ImmBinOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Avx", ["Method"] = "Blend", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector256", ["Op2BaseType"] = "UInt32", ["Imm"] = "85", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt32()", ["ValidateFirstResult"] = "result[0] != (((85 & (1 << 0)) == 0) ? left[0] : right[0])", ["ValidateRemainingResults"] = "result[i] != (((85 & (1 << i)) == 0) ? left[i] : right[i])"}), ("SimpleTernOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Avx", ["Method"] = "BlendVariable", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector256", ["Op2BaseType"] = "Byte", ["Op3VectorType"] = "Vector256", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["NextValueOp3"] = "(byte)(((i % 2) == 0) ? 128 : 1)", ["ValidateFirstResult"] = "((thirdOp[0] >> 7) & 1) == 1 ? secondOp[0] != result[0] : firstOp[0] != result[0]", ["ValidateRemainingResults"] = "((thirdOp[i] >> 7) & 1) == 1 ? secondOp[i] != result[i] : firstOp[i] != result[i]"}), ("SimpleTernOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Avx", ["Method"] = "BlendVariable", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector256", ["Op2BaseType"] = "SByte", ["Op3VectorType"] = "Vector256", ["Op3BaseType"] = "SByte", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetSByte()", ["NextValueOp3"] = "(sbyte)(((i % 2) == 0) ? -128 : 1)", ["ValidateFirstResult"] = "((thirdOp[0] >> 7) & 1) == 1 ? secondOp[0] != result[0] : firstOp[0] != result[0]", ["ValidateRemainingResults"] = "((thirdOp[i] >> 7) & 1) == 1 ? secondOp[i] != result[i] : firstOp[i] != result[i]"}), - ("GenericUnOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Sse2", ["Method"] = "BroadcastScalarToVector256", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Byte", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "firstOp[0] != result[0]", ["ValidateRemainingResults"] = "(firstOp[0] != result[i])"}), - ("GenericUnOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Sse2", ["Method"] = "BroadcastScalarToVector256", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "SByte", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetSByte()", ["ValidateFirstResult"] = "firstOp[0] != result[0]", ["ValidateRemainingResults"] = "(firstOp[0] != result[i])"}), - ("GenericUnOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Sse2", ["Method"] = "BroadcastScalarToVector256", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int16", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "firstOp[0] != result[0]", ["ValidateRemainingResults"] = "(firstOp[0] != result[i])"}), - ("GenericUnOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Sse2", ["Method"] = "BroadcastScalarToVector256", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt16", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt16()", ["ValidateFirstResult"] = "firstOp[0] != result[0]", ["ValidateRemainingResults"] = "(firstOp[0] != result[i])"}), - ("GenericUnOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Sse2", ["Method"] = "BroadcastScalarToVector256", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int32", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "firstOp[0] != result[0]", ["ValidateRemainingResults"] = "(firstOp[0] != result[i])"}), - ("GenericUnOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Sse2", ["Method"] = "BroadcastScalarToVector256", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt32", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["ValidateFirstResult"] = "firstOp[0] != result[0]", ["ValidateRemainingResults"] = "(firstOp[0] != result[i])"}), - ("GenericUnOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Sse2", ["Method"] = "BroadcastScalarToVector256", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Int64", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["ValidateFirstResult"] = "firstOp[0] != result[0]", ["ValidateRemainingResults"] = "(firstOp[0] != result[i])"}), - ("GenericUnOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Sse2", ["Method"] = "BroadcastScalarToVector256", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "UInt64", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["ValidateFirstResult"] = "firstOp[0] != result[0]", ["ValidateRemainingResults"] = "(firstOp[0] != result[i])"}), - ("GenericUnOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Sse", ["Method"] = "BroadcastScalarToVector256", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Single", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetSingle()", ["ValidateFirstResult"] = "BitConverter.SingleToInt32Bits(firstOp[0]) != BitConverter.SingleToInt32Bits(result[0])", ["ValidateRemainingResults"] = "(BitConverter.SingleToInt32Bits(firstOp[0]) != BitConverter.SingleToInt32Bits(result[i]))"}), - ("GenericUnOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Sse2", ["Method"] = "BroadcastScalarToVector256", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector128", ["Op1BaseType"] = "Double", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateFirstResult"] = "BitConverter.DoubleToInt64Bits(firstOp[0]) != BitConverter.DoubleToInt64Bits(result[0])", ["ValidateRemainingResults"] = "(BitConverter.DoubleToInt64Bits(firstOp[0]) != BitConverter.DoubleToInt64Bits(result[i]))"}), ("SimpleBinOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Avx", ["Method"] = "CompareEqual", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector256", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetByte()", ["NextValueOp2"] = "TestLibrary.Generator.GetByte()", ["ValidateFirstResult"] = "result[0] != ((left[0] == right[0]) ? unchecked((byte)(-1)) : 0)", ["ValidateRemainingResults"] = "result[i] != ((left[i] == right[i]) ? unchecked((byte)(-1)) : 0)"}), ("SimpleBinOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Avx", ["Method"] = "CompareEqual", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector256", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetInt16()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt16()", ["ValidateFirstResult"] = "result[0] != ((left[0] == right[0]) ? unchecked((short)(-1)) : 0)", ["ValidateRemainingResults"] = "result[i] != ((left[i] == right[i]) ? unchecked((short)(-1)) : 0)"}), ("SimpleBinOpTest.template", new Dictionary { ["Isa"] = "Avx2", ["LoadIsa"] = "Avx", ["Method"] = "CompareEqual", ["RetVectorType"] = "Vector256", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector256", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector256", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "32", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ValidateFirstResult"] = "result[0] != ((left[0] == right[0]) ? unchecked((int)(-1)) : 0)", ["ValidateRemainingResults"] = "result[i] != ((left[i] == right[i]) ? unchecked((int)(-1)) : 0)"}), -- 2.7.4