diff options
Diffstat (limited to 'tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.SByte.cs')
-rw-r--r-- | tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.SByte.cs | 552 |
1 files changed, 0 insertions, 552 deletions
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.SByte.cs deleted file mode 100644 index 7502291f20..0000000000 --- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.SByte.cs +++ /dev/null @@ -1,552 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -/****************************************************************************** - * This file is auto-generated from a template file by the GenerateTests.csx * - * script in tests\src\JIT\HardwareIntrinsics\X86\Shared. In order to make * - * changes, please update the corresponding template and run according to the * - * directions listed in the file. * - ******************************************************************************/ - -using System; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Runtime.Intrinsics; -using System.Runtime.Intrinsics.X86; - -namespace JIT.HardwareIntrinsics.X86 -{ - public static partial class Program - { - private static void TestMixOnesZerosSByte() - { - var test = new BooleanBinaryOpTest__TestMixOnesZerosSByte(); - - if (test.IsSupported) - { - // Validates basic functionality works, using Unsafe.Read - test.RunBasicScenario_UnsafeRead(); - - if (Sse2.IsSupported) - { - // Validates basic functionality works, using Load - test.RunBasicScenario_Load(); - - // Validates basic functionality works, using LoadAligned - test.RunBasicScenario_LoadAligned(); - } - - // Validates calling via reflection works, using Unsafe.Read - test.RunReflectionScenario_UnsafeRead(); - - if (Sse2.IsSupported) - { - // Validates calling via reflection works, using Load - test.RunReflectionScenario_Load(); - - // Validates calling via reflection works, using LoadAligned - test.RunReflectionScenario_LoadAligned(); - } - - // Validates passing a static member works - test.RunClsVarScenario(); - - if (Sse2.IsSupported) - { - // Validates passing a static member works, using pinning and Load - test.RunClsVarScenario_Load(); - } - - // Validates passing a local works, using Unsafe.Read - test.RunLclVarScenario_UnsafeRead(); - - if (Sse2.IsSupported) - { - // Validates passing a local works, using Load - test.RunLclVarScenario_Load(); - - // Validates passing a local works, using LoadAligned - test.RunLclVarScenario_LoadAligned(); - } - - // Validates passing the field of a local class works - test.RunClassLclFldScenario(); - - if (Sse2.IsSupported) - { - // Validates passing the field of a local class works, using pinning and Load - test.RunClassLclFldScenario_Load(); - } - - // Validates passing an instance member of a class works - test.RunClassFldScenario(); - - if (Sse2.IsSupported) - { - // Validates passing an instance member of a class works, using pinning and Load - test.RunClassFldScenario_Load(); - } - - // Validates passing the field of a local struct works - test.RunStructLclFldScenario(); - - if (Sse2.IsSupported) - { - // Validates passing the field of a local struct works, using pinning and Load - test.RunStructLclFldScenario_Load(); - } - - // Validates passing an instance member of a struct works - test.RunStructFldScenario(); - - if (Sse2.IsSupported) - { - // Validates passing an instance member of a struct works, using pinning and Load - test.RunStructFldScenario_Load(); - } - } - else - { - // Validates we throw on unsupported hardware - test.RunUnsupportedScenario(); - } - - if (!test.Succeeded) - { - throw new Exception("One or more scenarios did not complete as expected."); - } - } - } - - public sealed unsafe class BooleanBinaryOpTest__TestMixOnesZerosSByte - { - private struct DataTable - { - private byte[] inArray1; - private byte[] inArray2; - - private GCHandle inHandle1; - private GCHandle inHandle2; - - private ulong alignment; - - public DataTable(SByte[] inArray1, SByte[] inArray2, int alignment) - { - int sizeOfinArray1 = inArray1.Length * Unsafe.SizeOf<SByte>(); - int sizeOfinArray2 = inArray2.Length * Unsafe.SizeOf<SByte>(); - if ((alignment != 32 && alignment != 16) || (alignment * 2) < sizeOfinArray1 || (alignment * 2) < sizeOfinArray2) - { - throw new ArgumentException("Invalid value of alignment"); - } - - this.inArray1 = new byte[alignment * 2]; - this.inArray2 = new byte[alignment * 2]; - - this.inHandle1 = GCHandle.Alloc(this.inArray1, GCHandleType.Pinned); - this.inHandle2 = GCHandle.Alloc(this.inArray2, GCHandleType.Pinned); - - this.alignment = (ulong)alignment; - - Unsafe.CopyBlockUnaligned(ref Unsafe.AsRef<byte>(inArray1Ptr), ref Unsafe.As<SByte, byte>(ref inArray1[0]), (uint)sizeOfinArray1); - Unsafe.CopyBlockUnaligned(ref Unsafe.AsRef<byte>(inArray2Ptr), ref Unsafe.As<SByte, byte>(ref inArray2[0]), (uint)sizeOfinArray2); - } - - public void* inArray1Ptr => Align((byte*)(inHandle1.AddrOfPinnedObject().ToPointer()), alignment); - public void* inArray2Ptr => Align((byte*)(inHandle2.AddrOfPinnedObject().ToPointer()), alignment); - - public void Dispose() - { - inHandle1.Free(); - inHandle2.Free(); - } - - private static unsafe void* Align(byte* buffer, ulong expectedAlignment) - { - return (void*)(((ulong)buffer + expectedAlignment - 1) & ~(expectedAlignment - 1)); - } - } - - private struct TestStruct - { - public Vector128<SByte> _fld1; - public Vector128<SByte> _fld2; - - public static TestStruct Create() - { - var testStruct = new TestStruct(); - - for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = TestLibrary.Generator.GetSByte(); } - Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>()); - for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = TestLibrary.Generator.GetSByte(); } - Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>()); - - return testStruct; - } - - public void RunStructFldScenario(BooleanBinaryOpTest__TestMixOnesZerosSByte testClass) - { - var result = Sse41.TestMixOnesZeros(_fld1, _fld2); - testClass.ValidateResult(_fld1, _fld2, result); - } - - public void RunStructFldScenario_Load(BooleanBinaryOpTest__TestMixOnesZerosSByte testClass) - { - fixed (Vector128<SByte>* pFld1 = &_fld1) - fixed (Vector128<SByte>* pFld2 = &_fld2) - { - var result = Sse41.TestMixOnesZeros( - Sse2.LoadVector128((SByte*)(pFld1)), - Sse2.LoadVector128((SByte*)(pFld2)) - ); - - testClass.ValidateResult(_fld1, _fld2, result); - } - } - } - - private static readonly int LargestVectorSize = 16; - - private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte); - private static readonly int Op2ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte); - - private static SByte[] _data1 = new SByte[Op1ElementCount]; - private static SByte[] _data2 = new SByte[Op2ElementCount]; - - private static Vector128<SByte> _clsVar1; - private static Vector128<SByte> _clsVar2; - - private Vector128<SByte> _fld1; - private Vector128<SByte> _fld2; - - private DataTable _dataTable; - - static BooleanBinaryOpTest__TestMixOnesZerosSByte() - { - for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = TestLibrary.Generator.GetSByte(); } - Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>()); - for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = TestLibrary.Generator.GetSByte(); } - Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>()); - } - - public BooleanBinaryOpTest__TestMixOnesZerosSByte() - { - Succeeded = true; - - for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = TestLibrary.Generator.GetSByte(); } - Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>()); - for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = TestLibrary.Generator.GetSByte(); } - Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>()); - - for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = TestLibrary.Generator.GetSByte(); } - for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = TestLibrary.Generator.GetSByte(); } - _dataTable = new DataTable(_data1, _data2, LargestVectorSize); - } - - public bool IsSupported => Sse41.IsSupported; - - public bool Succeeded { get; set; } - - public void RunBasicScenario_UnsafeRead() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunBasicScenario_UnsafeRead)); - - var result = Sse41.TestMixOnesZeros( - Unsafe.Read<Vector128<SByte>>(_dataTable.inArray1Ptr), - Unsafe.Read<Vector128<SByte>>(_dataTable.inArray2Ptr) - ); - - ValidateResult(_dataTable.inArray1Ptr, _dataTable.inArray2Ptr, result); - } - - public void RunBasicScenario_Load() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunBasicScenario_Load)); - - var result = Sse41.TestMixOnesZeros( - Sse2.LoadVector128((SByte*)(_dataTable.inArray1Ptr)), - Sse2.LoadVector128((SByte*)(_dataTable.inArray2Ptr)) - ); - - ValidateResult(_dataTable.inArray1Ptr, _dataTable.inArray2Ptr, result); - } - - public void RunBasicScenario_LoadAligned() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunBasicScenario_LoadAligned)); - - var result = Sse41.TestMixOnesZeros( - Sse2.LoadAlignedVector128((SByte*)(_dataTable.inArray1Ptr)), - Sse2.LoadAlignedVector128((SByte*)(_dataTable.inArray2Ptr)) - ); - - ValidateResult(_dataTable.inArray1Ptr, _dataTable.inArray2Ptr, result); - } - - public void RunReflectionScenario_UnsafeRead() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunReflectionScenario_UnsafeRead)); - - var result = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) }) - .Invoke(null, new object[] { - Unsafe.Read<Vector128<SByte>>(_dataTable.inArray1Ptr), - Unsafe.Read<Vector128<SByte>>(_dataTable.inArray2Ptr) - }); - - ValidateResult(_dataTable.inArray1Ptr, _dataTable.inArray2Ptr, (bool)(result)); - } - - public void RunReflectionScenario_Load() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunReflectionScenario_Load)); - - var result = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) }) - .Invoke(null, new object[] { - Sse2.LoadVector128((SByte*)(_dataTable.inArray1Ptr)), - Sse2.LoadVector128((SByte*)(_dataTable.inArray2Ptr)) - }); - - ValidateResult(_dataTable.inArray1Ptr, _dataTable.inArray2Ptr, (bool)(result)); - } - - public void RunReflectionScenario_LoadAligned() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunReflectionScenario_LoadAligned)); - - var result = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) }) - .Invoke(null, new object[] { - Sse2.LoadAlignedVector128((SByte*)(_dataTable.inArray1Ptr)), - Sse2.LoadAlignedVector128((SByte*)(_dataTable.inArray2Ptr)) - }); - - ValidateResult(_dataTable.inArray1Ptr, _dataTable.inArray2Ptr, (bool)(result)); - } - - public void RunClsVarScenario() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunClsVarScenario)); - - var result = Sse41.TestMixOnesZeros( - _clsVar1, - _clsVar2 - ); - - ValidateResult(_clsVar1, _clsVar2, result); - } - - public void RunClsVarScenario_Load() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunClsVarScenario_Load)); - - fixed (Vector128<SByte>* pClsVar1 = &_clsVar1) - fixed (Vector128<SByte>* pClsVar2 = &_clsVar2) - { - var result = Sse41.TestMixOnesZeros( - Sse2.LoadVector128((SByte*)(pClsVar1)), - Sse2.LoadVector128((SByte*)(pClsVar2)) - ); - - ValidateResult(_clsVar1, _clsVar2, result); - } - } - - public void RunLclVarScenario_UnsafeRead() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_UnsafeRead)); - - var op1 = Unsafe.Read<Vector128<SByte>>(_dataTable.inArray1Ptr); - var op2 = Unsafe.Read<Vector128<SByte>>(_dataTable.inArray2Ptr); - var result = Sse41.TestMixOnesZeros(op1, op2); - - ValidateResult(op1, op2, result); - } - - public void RunLclVarScenario_Load() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_Load)); - - var op1 = Sse2.LoadVector128((SByte*)(_dataTable.inArray1Ptr)); - var op2 = Sse2.LoadVector128((SByte*)(_dataTable.inArray2Ptr)); - var result = Sse41.TestMixOnesZeros(op1, op2); - - ValidateResult(op1, op2, result); - } - - public void RunLclVarScenario_LoadAligned() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_LoadAligned)); - - var op1 = Sse2.LoadAlignedVector128((SByte*)(_dataTable.inArray1Ptr)); - var op2 = Sse2.LoadAlignedVector128((SByte*)(_dataTable.inArray2Ptr)); - var result = Sse41.TestMixOnesZeros(op1, op2); - - ValidateResult(op1, op2, result); - } - - public void RunClassLclFldScenario() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario)); - - var test = new BooleanBinaryOpTest__TestMixOnesZerosSByte(); - var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2); - - ValidateResult(test._fld1, test._fld2, result); - } - - public void RunClassLclFldScenario_Load() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario_Load)); - - var test = new BooleanBinaryOpTest__TestMixOnesZerosSByte(); - - fixed (Vector128<SByte>* pFld1 = &test._fld1) - fixed (Vector128<SByte>* pFld2 = &test._fld2) - { - var result = Sse41.TestMixOnesZeros( - Sse2.LoadVector128((SByte*)(pFld1)), - Sse2.LoadVector128((SByte*)(pFld2)) - ); - - ValidateResult(test._fld1, test._fld2, result); - } - } - - public void RunClassFldScenario() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); - - var result = Sse41.TestMixOnesZeros(_fld1, _fld2); - - ValidateResult(_fld1, _fld2, result); - } - - public void RunClassFldScenario_Load() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario_Load)); - - fixed (Vector128<SByte>* pFld1 = &_fld1) - fixed (Vector128<SByte>* pFld2 = &_fld2) - { - var result = Sse41.TestMixOnesZeros( - Sse2.LoadVector128((SByte*)(pFld1)), - Sse2.LoadVector128((SByte*)(pFld2)) - ); - - ValidateResult(_fld1, _fld2, result); - } - } - - public void RunStructLclFldScenario() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); - - var test = TestStruct.Create(); - var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2); - ValidateResult(test._fld1, test._fld2, result); - } - - public void RunStructLclFldScenario_Load() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario_Load)); - - var test = TestStruct.Create(); - var result = Sse41.TestMixOnesZeros( - Sse2.LoadVector128((SByte*)(&test._fld1)), - Sse2.LoadVector128((SByte*)(&test._fld2)) - ); - - ValidateResult(test._fld1, test._fld2, result); - } - - public void RunStructFldScenario() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario)); - - var test = TestStruct.Create(); - test.RunStructFldScenario(this); - } - - public void RunStructFldScenario_Load() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario_Load)); - - var test = TestStruct.Create(); - test.RunStructFldScenario_Load(this); - } - - public void RunUnsupportedScenario() - { - TestLibrary.TestFramework.BeginScenario(nameof(RunUnsupportedScenario)); - - bool succeeded = false; - - try - { - RunBasicScenario_UnsafeRead(); - } - catch (PlatformNotSupportedException) - { - succeeded = true; - } - - if (!succeeded) - { - Succeeded = false; - } - } - - private void ValidateResult(Vector128<SByte> op1, Vector128<SByte> op2, bool result, [CallerMemberName] string method = "") - { - SByte[] inArray1 = new SByte[Op1ElementCount]; - SByte[] inArray2 = new SByte[Op2ElementCount]; - - Unsafe.WriteUnaligned(ref Unsafe.As<SByte, byte>(ref inArray1[0]), op1); - Unsafe.WriteUnaligned(ref Unsafe.As<SByte, byte>(ref inArray2[0]), op2); - - ValidateResult(inArray1, inArray2, result, method); - } - - private void ValidateResult(void* op1, void* op2, bool result, [CallerMemberName] string method = "") - { - SByte[] inArray1 = new SByte[Op1ElementCount]; - SByte[] inArray2 = new SByte[Op2ElementCount]; - - Unsafe.CopyBlockUnaligned(ref Unsafe.As<SByte, byte>(ref inArray1[0]), ref Unsafe.AsRef<byte>(op1), (uint)Unsafe.SizeOf<Vector128<SByte>>()); - Unsafe.CopyBlockUnaligned(ref Unsafe.As<SByte, byte>(ref inArray2[0]), ref Unsafe.AsRef<byte>(op2), (uint)Unsafe.SizeOf<Vector128<SByte>>()); - - ValidateResult(inArray1, inArray2, result, method); - } - - private void ValidateResult(SByte[] left, SByte[] right, bool result, [CallerMemberName] string method = "") - { - bool succeeded = true; - - var expectedResult1 = true; - - for (var i = 0; i < Op1ElementCount; i++) - { - expectedResult1 &= (((left[i] & right[i]) == 0)); - } - - var expectedResult2 = true; - - for (var i = 0; i < Op1ElementCount; i++) - { - expectedResult2 &= (((~left[i] & right[i]) == 0)); - } - - succeeded = (((expectedResult1 == false) && (expectedResult2 == false)) == result); - - if (!succeeded) - { - TestLibrary.TestFramework.LogInformation($"{nameof(Sse41)}.{nameof(Sse41.TestMixOnesZeros)}<SByte>(Vector128<SByte>, Vector128<SByte>): {method} failed:"); - TestLibrary.TestFramework.LogInformation($" left: ({string.Join(", ", left)})"); - TestLibrary.TestFramework.LogInformation($" right: ({string.Join(", ", right)})"); - TestLibrary.TestFramework.LogInformation($" result: ({result})"); - TestLibrary.TestFramework.LogInformation(string.Empty); - - Succeeded = false; - } - } - } -} |