From 51a1a5984cd5ba84813088cf29781ca42e7a0102 Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Thu, 11 Jan 2018 21:27:38 -0800 Subject: [PATCH] Adding tests for the SSE MoveMask intrinsic --- .../src/JIT/HardwareIntrinsics/X86/Sse/MoveMask.cs | 63 ++++++++++++++++++++++ .../HardwareIntrinsics/X86/Sse/MoveMask_r.csproj | 34 ++++++++++++ .../HardwareIntrinsics/X86/Sse/MoveMask_ro.csproj | 34 ++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 tests/src/JIT/HardwareIntrinsics/X86/Sse/MoveMask.cs create mode 100644 tests/src/JIT/HardwareIntrinsics/X86/Sse/MoveMask_r.csproj create mode 100644 tests/src/JIT/HardwareIntrinsics/X86/Sse/MoveMask_ro.csproj diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/MoveMask.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/MoveMask.cs new file mode 100644 index 0000000..d560701 --- /dev/null +++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/MoveMask.cs @@ -0,0 +1,63 @@ +// 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. +// + +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics.X86; +using System.Runtime.Intrinsics; + +namespace IntelHardwareIntrinsicTest +{ + class Program + { + const int Pass = 100; + const int Fail = 0; + + static unsafe int Main(string[] args) + { + int testResult = Pass; + + if (Sse.IsSupported) + { + using (TestTable floatTable = new TestTable(new float[4] { 1, -5, 100, 0 })) + { + + var vf1 = Unsafe.Read>(floatTable.inArray1Ptr); + var res = Sse.MoveMask(vf1); + + if (res != 0b0010) + { + Console.WriteLine("SSE MoveMask failed on float:"); + Console.WriteLine(res); + testResult = Fail; + } + } + } + + + return testResult; + } + + public unsafe struct TestTable : IDisposable where T : struct + { + public T[] inArray1; + public void* inArray1Ptr => inHandle1.AddrOfPinnedObject().ToPointer(); + GCHandle inHandle1; + + public TestTable(T[] a) + { + this.inArray1 = a; + inHandle1 = GCHandle.Alloc(inArray1, GCHandleType.Pinned); + } + + public void Dispose() + { + inHandle1.Free(); + } + } + + } +} diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/MoveMask_r.csproj b/tests/src/JIT/HardwareIntrinsics/X86/Sse/MoveMask_r.csproj new file mode 100644 index 0000000..d59e785 --- /dev/null +++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/MoveMask_r.csproj @@ -0,0 +1,34 @@ + + + + + Debug + AnyCPU + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + ..\..\ + true + + + + + + + False + + + + None + + + + + + + + + + + diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/MoveMask_ro.csproj b/tests/src/JIT/HardwareIntrinsics/X86/Sse/MoveMask_ro.csproj new file mode 100644 index 0000000..9e772e2 --- /dev/null +++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/MoveMask_ro.csproj @@ -0,0 +1,34 @@ + + + + + Debug + AnyCPU + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + ..\..\ + true + + + + + + + False + + + + None + True + + + + + + + + + + -- 2.7.4