diff options
Diffstat (limited to 'tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs')
-rw-r--r-- | tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs | 67 |
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; |