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(); } } }