diff options
author | Tanner Gooding <tagoo@outlook.com> | 2018-07-09 18:42:01 -0700 |
---|---|---|
committer | Tanner Gooding <tagoo@outlook.com> | 2018-07-10 08:51:20 -0700 |
commit | 6de41e2f4ffd8971d767e2aadb195f8c51286479 (patch) | |
tree | a30ee4805394b8c52c1a3c00ddd55d29ae55f01a /tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs | |
parent | 2d7baf26bcb149610f261b7eeee5d59c19cfc1be (diff) | |
download | coreclr-6de41e2f4ffd8971d767e2aadb195f8c51286479.tar.gz coreclr-6de41e2f4ffd8971d767e2aadb195f8c51286479.tar.bz2 coreclr-6de41e2f4ffd8971d767e2aadb195f8c51286479.zip |
Regenerating the x86 HWIntrinsic tests to cover struct field scenarios
Diffstat (limited to 'tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs')
-rw-r--r-- | tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs | 70 |
1 files changed, 59 insertions, 11 deletions
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs index 5383285413..8a22c33eb9 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs +++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs @@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86 { private static void ExtractVector128UInt321Store() { - var test = new SimpleUnaryOpTest__ExtractVector128UInt321Store(); + var test = new ExtractStoreTest__ExtractVector128UInt321(); if (test.IsSupported) { @@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86 test.RunLclVarScenario_LoadAligned(); } - // Validates passing the field of a local works - test.RunLclFldScenario(); + // Validates passing the field of a local class works + test.RunClassLclFldScenario(); - // Validates passing an instance member works - test.RunFldScenario(); + // Validates passing an instance member of a class works + test.RunClassFldScenario(); + + // Validates passing the field of a local struct works + test.RunStructLclFldScenario(); + + // Validates passing an instance member of a struct works + test.RunStructFldScenario(); } else { @@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86 } } - public sealed unsafe class SimpleUnaryOpTest__ExtractVector128UInt321Store + public sealed unsafe class ExtractStoreTest__ExtractVector128UInt321 { + private struct TestStruct + { + public Vector256<UInt32> _fld; + + public static TestStruct Create() + { + var testStruct = new TestStruct(); + var random = new Random(); + + for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); } + Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>()); + + return testStruct; + } + + public void RunStructFldScenario(ExtractStoreTest__ExtractVector128UInt321 testClass) + { + Avx2.ExtractVector128((UInt32*)testClass._dataTable.outArrayPtr, _fld, 1); + testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr); + } + } + private static readonly int LargestVectorSize = 32; private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32); @@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86 private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable; - static SimpleUnaryOpTest__ExtractVector128UInt321Store() + static ExtractStoreTest__ExtractVector128UInt321() { var random = new Random(); @@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86 Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>()); } - public SimpleUnaryOpTest__ExtractVector128UInt321Store() + public ExtractStoreTest__ExtractVector128UInt321() { Succeeded = true; @@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86 _clsVar, 1 ); + + ValidateResult(_clsVar, _dataTable.outArrayPtr); } public void RunLclVarScenario_UnsafeRead() { var firstOp = Unsafe.Read<Vector256<UInt32>>(_dataTable.inArrayPtr); Avx2.ExtractVector128((UInt32*)_dataTable.outArrayPtr, firstOp, 1); + ValidateResult(firstOp, _dataTable.outArrayPtr); } public void RunLclVarScenario_Load() { var firstOp = Avx.LoadVector256((UInt32*)(_dataTable.inArrayPtr)); Avx2.ExtractVector128((UInt32*)_dataTable.outArrayPtr, firstOp, 1); + ValidateResult(firstOp, _dataTable.outArrayPtr); } public void RunLclVarScenario_LoadAligned() { var firstOp = Avx.LoadAlignedVector256((UInt32*)(_dataTable.inArrayPtr)); Avx2.ExtractVector128((UInt32*)_dataTable.outArrayPtr, firstOp, 1); + ValidateResult(firstOp, _dataTable.outArrayPtr); } - public void RunLclFldScenario() + public void RunClassLclFldScenario() { - var test = new SimpleUnaryOpTest__ExtractVector128UInt321Store(); + var test = new ExtractStoreTest__ExtractVector128UInt321(); Avx2.ExtractVector128((UInt32*)_dataTable.outArrayPtr, test._fld, 1); + ValidateResult(test._fld, _dataTable.outArrayPtr); } - public void RunFldScenario() + public void RunClassFldScenario() { Avx2.ExtractVector128((UInt32*)_dataTable.outArrayPtr, _fld, 1); + ValidateResult(_fld, _dataTable.outArrayPtr); + } + + public void RunStructLclFldScenario() + { + var test = TestStruct.Create(); + Avx2.ExtractVector128((UInt32*)_dataTable.outArrayPtr, test._fld, 1); + ValidateResult(test._fld, _dataTable.outArrayPtr); + } + + public void RunStructFldScenario() + { + var test = TestStruct.Create(); + test.RunStructFldScenario(this); } public void RunUnsupportedScenario() |