Files
FSI.BT.IR.Tools/Kalk/Kalk.Core/Modules/HardwareIntrinsics/HardwareIntrinsicsModule.cs
Maier Stephan SI b684704bf8 Sicherung
2023-01-20 16:09:00 +01:00

127 lines
5.0 KiB
C#

using Kalk.Core.Modules.HardwareIntrinsics;
namespace Kalk.Core.Modules
{
/// <summary>
/// Module with CPU Hardware intrinsics.
/// </summary>
[KalkExportModule(ModuleName)]
public partial class HardwareIntrinsicsModule : KalkModuleWithFunctions
{
private const string ModuleName = "HardwareIntrinsics";
private const string CategoryIntrinsics = "Vector Hardware Intrinsics";
public HardwareIntrinsicsModule() : base(ModuleName)
{
RegisterDocumentationAuto();
}
protected override void Import()
{
// X86
if (System.Runtime.Intrinsics.X86.Sse.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.SseIntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Sse.X64.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.SseX64IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Sse2.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.Sse2IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Sse2.X64.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.Sse2X64IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Sse3.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.Sse3IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Ssse3.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.Ssse3IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Sse41.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.Sse41IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Sse41.X64.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.Sse41X64IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Sse42.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.Sse42IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Sse42.X64.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.Sse42X64IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Avx.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.AvxIntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Avx2.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.Avx2IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Aes.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.AesIntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Bmi1.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.Bmi1IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Bmi1.X64.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.Bmi1X64IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Bmi2.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.Bmi2IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.X86.Bmi2.X64.IsSupported)
{
DynamicRegister<HardwareIntrinsics.X86.Bmi2X64IntrinsicsModule>();
}
// Arm
if (System.Runtime.Intrinsics.Arm.AdvSimd.IsSupported)
{
DynamicRegister<HardwareIntrinsics.Arm.AdvSimdIntrinsicsModule>();
}
if (System.Runtime.Intrinsics.Arm.AdvSimd.Arm64.IsSupported)
{
DynamicRegister<HardwareIntrinsics.Arm.AdvSimdArm64IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.Arm.Aes.IsSupported)
{
DynamicRegister<HardwareIntrinsics.Arm.AesIntrinsicsModule>();
}
if (System.Runtime.Intrinsics.Arm.Crc32.IsSupported)
{
DynamicRegister<HardwareIntrinsics.Arm.Crc32IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.Arm.Crc32.Arm64.IsSupported)
{
DynamicRegister<HardwareIntrinsics.Arm.Crc32Arm64IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.Arm.Sha1.IsSupported)
{
DynamicRegister<HardwareIntrinsics.Arm.Sha1IntrinsicsModule>();
}
if (System.Runtime.Intrinsics.Arm.Sha256.IsSupported)
{
DynamicRegister<HardwareIntrinsics.Arm.Sha256IntrinsicsModule>();
}
}
private void DynamicRegister<TModule>() where TModule : IntrinsicsModuleBase, new()
{
var module = new TModule();
module.Initialize(Engine);
module.InternalImport();
}
}
}