diff --git a/src/Maths/Silk.NET.Maths.Benchmarks/Silk.NET.Maths.Benchmarks.csproj b/src/Maths/Silk.NET.Maths.Benchmarks/Silk.NET.Maths.Benchmarks.csproj
index e929226e71..c56324c1af 100644
--- a/src/Maths/Silk.NET.Maths.Benchmarks/Silk.NET.Maths.Benchmarks.csproj
+++ b/src/Maths/Silk.NET.Maths.Benchmarks/Silk.NET.Maths.Benchmarks.csproj
@@ -17,21 +17,21 @@
-
+
TextTemplatingFileGenerator
- SimdBenchmarkDissasm.cs
+ SimdBenchmarks.cs
-
+
True
True
- SimdBenchmarkDissasm.tt
+ SimdBenchmarks.tt
-
+
TextTemplatingFileGenerator
- SimdBenchmarkDissasm.cs
+ SimdBenchmarks.cs
diff --git a/src/Maths/Silk.NET.Maths.Benchmarks/SimdBenchmarkDissasm.cs b/src/Maths/Silk.NET.Maths.Benchmarks/SimdBenchmarkDissasm.cs
deleted file mode 100644
index acb0a16994..0000000000
--- a/src/Maths/Silk.NET.Maths.Benchmarks/SimdBenchmarkDissasm.cs
+++ /dev/null
@@ -1,2204 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-#if NET5_0_OR_GREATER
-
-using System;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-using BenchmarkDotNet.Attributes;
-using BenchmarkDotNet.Engines;
-using BenchmarkDotNet.Jobs;
-using System.Runtime.Intrinsics;
-
-
-namespace Silk.NET.Maths.Benchmark
-{
- [SimpleJob(RuntimeMoniker.Net50, launchCount: 1, warmupCount: 3, targetCount: 3)]
- [DisassemblyDiagnoser(exportHtml: true)]
- public unsafe class SIMDDisasm
- {
- const int IterCount = 30;
- void* a;
- void* b;
- void* c;
-
- [GlobalSetup]
- public void Setup()
- {
- // native memory is not a thing on .net 5
- var byteCount = 256/*bits*/ / 8 * IterCount;
- a = (void*)Marshal.AllocHGlobal(byteCount);
- b = (void*)Marshal.AllocHGlobal(byteCount);
- c = (void*)Marshal.AllocHGlobal(byteCount);
- var rand = new Random();
- for (int i = 0; i < byteCount; i++)
- {
- *(byte*)a = (byte)rand.Next(1, 255);
- *(byte*)b = (byte)rand.Next(1, 255);
- }
- }
-
- [Benchmark]
- public void Simd64GreaterThan_byte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.GreaterThan(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64LessThan_byte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.LessThan(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64GreaterThanOrEqual_byte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.GreaterThanOrEqual(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64LessThanOrEqual_byte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.LessThanOrEqual(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Add_byte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Add(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Subtract_byte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Subtract(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Multiply_byte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Multiply(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Divide_byte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Divide(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Min_byte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Min(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Max_byte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Max(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Equal_byte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Equal(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64NotEqual_byte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.NotEqual(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd128GreaterThan_byte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.GreaterThan(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128LessThan_byte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.LessThan(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128GreaterThanOrEqual_byte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.GreaterThanOrEqual(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128LessThanOrEqual_byte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.LessThanOrEqual(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Add_byte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Add(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Subtract_byte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Subtract(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Multiply_byte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Multiply(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Divide_byte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Divide(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Min_byte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Min(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Max_byte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Max(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Equal_byte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Equal(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128NotEqual_byte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.NotEqual(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd256GreaterThan_byte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.GreaterThan(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256LessThan_byte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.LessThan(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256GreaterThanOrEqual_byte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.GreaterThanOrEqual(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256LessThanOrEqual_byte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.LessThanOrEqual(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Add_byte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Add(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Subtract_byte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Subtract(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Multiply_byte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Multiply(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Divide_byte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Divide(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Min_byte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Min(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Max_byte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Max(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Equal_byte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Equal(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256NotEqual_byte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.NotEqual(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd64GreaterThan_sbyte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.GreaterThan(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64LessThan_sbyte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.LessThan(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64GreaterThanOrEqual_sbyte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.GreaterThanOrEqual(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64LessThanOrEqual_sbyte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.LessThanOrEqual(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Add_sbyte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Add(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Subtract_sbyte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Subtract(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Multiply_sbyte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Multiply(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Divide_sbyte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Divide(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Min_sbyte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Min(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Max_sbyte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Max(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Equal_sbyte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Equal(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64NotEqual_sbyte()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.NotEqual(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd128GreaterThan_sbyte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.GreaterThan(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128LessThan_sbyte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.LessThan(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128GreaterThanOrEqual_sbyte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.GreaterThanOrEqual(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128LessThanOrEqual_sbyte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.LessThanOrEqual(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Add_sbyte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Add(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Subtract_sbyte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Subtract(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Multiply_sbyte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Multiply(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Divide_sbyte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Divide(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Min_sbyte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Min(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Max_sbyte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Max(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128Equal_sbyte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.Equal(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd128NotEqual_sbyte()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.NotEqual(*((Vector128*)a + i), *((Vector128*)b + i));
- }
- [Benchmark]
- public void Simd256GreaterThan_sbyte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.GreaterThan(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256LessThan_sbyte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.LessThan(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256GreaterThanOrEqual_sbyte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.GreaterThanOrEqual(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256LessThanOrEqual_sbyte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.LessThanOrEqual(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Add_sbyte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Add(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Subtract_sbyte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Subtract(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Multiply_sbyte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Multiply(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Divide_sbyte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Divide(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Min_sbyte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Min(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Max_sbyte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Max(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256Equal_sbyte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.Equal(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd256NotEqual_sbyte()
- {
- for (int i = 0; i < IterCount * (1); i++)
- *((Vector256*)c + i) = Simd256.NotEqual(*((Vector256*)a + i), *((Vector256*)b + i));
- }
- [Benchmark]
- public void Simd64GreaterThan_ushort()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.GreaterThan(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64LessThan_ushort()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.LessThan(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64GreaterThanOrEqual_ushort()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.GreaterThanOrEqual(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64LessThanOrEqual_ushort()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.LessThanOrEqual(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Add_ushort()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Add(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Subtract_ushort()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Subtract(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Multiply_ushort()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Multiply(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Divide_ushort()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Divide(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Min_ushort()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Min(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Max_ushort()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Max(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64Equal_ushort()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.Equal(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd64NotEqual_ushort()
- {
- for (int i = 0; i < IterCount * (4); i++)
- *((Vector64*)c + i) = Simd64.NotEqual(*((Vector64*)a + i), *((Vector64*)b + i));
- }
- [Benchmark]
- public void Simd128GreaterThan_ushort()
- {
- for (int i = 0; i < IterCount * (2); i++)
- *((Vector128*)c + i) = Simd128.GreaterThan(*((Vector128*)a + i), *((Vector128