summaryrefslogtreecommitdiff
path: root/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs')
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs67
1 files changed, 56 insertions, 11 deletions
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs
index 6cf303e86d..885d034c87 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector128UInt32()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128UInt32();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128UInt32();
if (test.IsSupported)
{
@@ -64,11 +64,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
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector128UInt32
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector128UInt32
{
+ private struct TestStruct
+ {
+ public Vector128<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<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector128UInt32 testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector128<UInt32>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector128UInt32()
+ static GenericUnaryOpTest__BroadcastScalarToVector128UInt32()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector128UInt32()
+ public GenericUnaryOpTest__BroadcastScalarToVector128UInt32()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128UInt32();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128UInt32();
var result = Avx2.BroadcastScalarToVector128<UInt32>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector128<UInt32>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;