summaryrefslogtreecommitdiff
path: root/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs
diff options
context:
space:
mode:
authorTanner Gooding <tagoo@outlook.com>2018-07-09 18:42:01 -0700
committerTanner Gooding <tagoo@outlook.com>2018-07-10 08:51:20 -0700
commit6de41e2f4ffd8971d767e2aadb195f8c51286479 (patch)
treea30ee4805394b8c52c1a3c00ddd55d29ae55f01a /tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs
parent2d7baf26bcb149610f261b7eeee5d59c19cfc1be (diff)
downloadcoreclr-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.cs70
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()