using Kalk.Core.Modules.HardwareIntrinsics;
namespace Kalk.Core.Modules
{
///
/// Module with CPU Hardware intrinsics.
///
[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();
}
if (System.Runtime.Intrinsics.X86.Sse.X64.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Sse2.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Sse2.X64.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Sse3.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Ssse3.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Sse41.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Sse41.X64.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Sse42.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Sse42.X64.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Avx.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Avx2.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Aes.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Bmi1.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Bmi1.X64.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Bmi2.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.X86.Bmi2.X64.IsSupported)
{
DynamicRegister();
}
// Arm
if (System.Runtime.Intrinsics.Arm.AdvSimd.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.Arm.AdvSimd.Arm64.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.Arm.Aes.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.Arm.Crc32.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.Arm.Crc32.Arm64.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.Arm.Sha1.IsSupported)
{
DynamicRegister();
}
if (System.Runtime.Intrinsics.Arm.Sha256.IsSupported)
{
DynamicRegister();
}
}
private void DynamicRegister() where TModule : IntrinsicsModuleBase, new()
{
var module = new TModule();
module.Initialize(Engine);
module.InternalImport();
}
}
}