{-# LANGUAGE GADTs #-} module Main where import System.CPUFeatures.X86 as X86 import System.CPUFeatures.X86.Cpuid as X86 import System.CPUFeatures.Arm as Arm import System.CPUFeatures.RISCV as RISCV main :: IO () main = do case X86.queryCpuid of Just Dict -> putStrLn $ "X86 Manufacturer: " ++ getManufacturerString Nothing -> putStrLn "Not X86" putStrLn $ "X86.AESNI = " ++ show X86.bAESNI putStrLn $ "X86.AMX_BF16 = " ++ show X86.bAMX_BF16 putStrLn $ "X86.AMX_FP16 = " ++ show X86.bAMX_FP16 putStrLn $ "X86.AMX_INT8 = " ++ show X86.bAMX_INT8 putStrLn $ "X86.AMX_TILE = " ++ show X86.bAMX_TILE putStrLn $ "X86.AVX = " ++ show X86.bAVX putStrLn $ "X86.AVX_VNNI = " ++ show X86.bAVX_VNNI putStrLn $ "X86.AVX10_1 = " ++ show X86.bAVX10_1 putStrLn $ "X86.AVX10_2 = " ++ show X86.bAVX10_2 putStrLn $ "X86.AVX2 = " ++ show X86.bAVX2 putStrLn $ "X86.AVX512_BF16 = " ++ show X86.bAVX512_BF16 putStrLn $ "X86.AVX512_BITALG = " ++ show X86.bAVX512_BITALG putStrLn $ "X86.AVX512_FP16 = " ++ show X86.bAVX512_FP16 putStrLn $ "X86.AVX512_IFMA = " ++ show X86.bAVX512_IFMA putStrLn $ "X86.AVX512_VBMI = " ++ show X86.bAVX512_VBMI putStrLn $ "X86.AVX512_VBMI2 = " ++ show X86.bAVX512_VBMI2 putStrLn $ "X86.AVX512_VNNI = " ++ show X86.bAVX512_VNNI putStrLn $ "X86.AVX512_VPOPCNTDQ = " ++ show X86.bAVX512_VPOPCNTDQ putStrLn $ "X86.AVX512BW = " ++ show X86.bAVX512BW putStrLn $ "X86.AVX512CD = " ++ show X86.bAVX512CD putStrLn $ "X86.AVX512DQ = " ++ show X86.bAVX512DQ putStrLn $ "X86.AVX512F = " ++ show X86.bAVX512F putStrLn $ "X86.AVX512VL = " ++ show X86.bAVX512VL putStrLn $ "X86.BMI1 = " ++ show X86.bBMI1 putStrLn $ "X86.BMI2 = " ++ show X86.bBMI2 putStrLn $ "X86.F16C = " ++ show X86.bF16C putStrLn $ "X86.FMA = " ++ show X86.bFMA putStrLn $ "X86.GFNI = " ++ show X86.bGFNI putStrLn $ "X86.PCLMULQDQ = " ++ show X86.bPCLMULQDQ putStrLn $ "X86.POPCNT = " ++ show X86.bPOPCNT putStrLn $ "X86.RDRAND = " ++ show X86.bRDRAND putStrLn $ "X86.SHA = " ++ show X86.bSHA putStrLn $ "X86.SSE3 = " ++ show X86.bSSE3 putStrLn $ "X86.SSE4_1 = " ++ show X86.bSSE4_1 putStrLn $ "X86.SSE4_2 = " ++ show X86.bSSE4_2 putStrLn $ "X86.SSSE3 = " ++ show X86.bSSSE3 putStrLn $ "X86.VAES = " ++ show X86.bVAES putStrLn $ "X86.VPCLMULQDQ = " ++ show X86.bVPCLMULQDQ putStrLn $ "Arm.FEAT_AES = " ++ show Arm.bFEAT_AES putStrLn $ "Arm.FEAT_AFP = " ++ show Arm.bFEAT_AFP putStrLn $ "Arm.FEAT_BF16 = " ++ show Arm.bFEAT_BF16 putStrLn $ "Arm.FEAT_BTI = " ++ show Arm.bFEAT_BTI putStrLn $ "Arm.FEAT_CSV2 = " ++ show Arm.bFEAT_CSV2 putStrLn $ "Arm.FEAT_CSV3 = " ++ show Arm.bFEAT_CSV3 putStrLn $ "Arm.FEAT_DIT = " ++ show Arm.bFEAT_DIT putStrLn $ "Arm.FEAT_DotProd = " ++ show Arm.bFEAT_DotProd putStrLn $ "Arm.FEAT_DPB = " ++ show Arm.bFEAT_DPB putStrLn $ "Arm.FEAT_DPB2 = " ++ show Arm.bFEAT_DPB2 putStrLn $ "Arm.FEAT_ECV = " ++ show Arm.bFEAT_ECV putStrLn $ "Arm.FEAT_FCMA = " ++ show Arm.bFEAT_FCMA putStrLn $ "Arm.FEAT_FHM = " ++ show Arm.bFEAT_FHM putStrLn $ "Arm.FEAT_FlagM = " ++ show Arm.bFEAT_FlagM putStrLn $ "Arm.FEAT_FlagM2 = " ++ show Arm.bFEAT_FlagM2 putStrLn $ "Arm.FEAT_FP16 = " ++ show Arm.bFEAT_FP16 putStrLn $ "Arm.FEAT_FPAC = " ++ show Arm.bFEAT_FPAC putStrLn $ "Arm.FEAT_FRINTTS = " ++ show Arm.bFEAT_FRINTTS putStrLn $ "Arm.FEAT_I8MM = " ++ show Arm.bFEAT_I8MM putStrLn $ "Arm.FEAT_JSCVT = " ++ show Arm.bFEAT_JSCVT putStrLn $ "Arm.FEAT_LRCPC = " ++ show Arm.bFEAT_LRCPC putStrLn $ "Arm.FEAT_LRCPC2 = " ++ show Arm.bFEAT_LRCPC2 putStrLn $ "Arm.FEAT_LSE = " ++ show Arm.bFEAT_LSE putStrLn $ "Arm.FEAT_LSE2 = " ++ show Arm.bFEAT_LSE2 putStrLn $ "Arm.FEAT_PAuth = " ++ show Arm.bFEAT_PAuth putStrLn $ "Arm.FEAT_PAuth2 = " ++ show Arm.bFEAT_PAuth2 putStrLn $ "Arm.FEAT_PMULL = " ++ show Arm.bFEAT_PMULL putStrLn $ "Arm.FEAT_RDM = " ++ show Arm.bFEAT_RDM putStrLn $ "Arm.FEAT_RPRES = " ++ show Arm.bFEAT_RPRES putStrLn $ "Arm.FEAT_SB = " ++ show Arm.bFEAT_SB putStrLn $ "Arm.FEAT_SHA1 = " ++ show Arm.bFEAT_SHA1 putStrLn $ "Arm.FEAT_SHA256 = " ++ show Arm.bFEAT_SHA256 putStrLn $ "Arm.FEAT_SHA3 = " ++ show Arm.bFEAT_SHA3 putStrLn $ "Arm.FEAT_SHA512 = " ++ show Arm.bFEAT_SHA512 putStrLn $ "Arm.FEAT_SME = " ++ show Arm.bFEAT_SME putStrLn $ "Arm.FEAT_SME_F64F64 = " ++ show Arm.bFEAT_SME_F64F64 putStrLn $ "Arm.FEAT_SME_I16I64 = " ++ show Arm.bFEAT_SME_I16I64 putStrLn $ "Arm.FEAT_SME2 = " ++ show Arm.bFEAT_SME2 putStrLn $ "Arm.FEAT_SPECRES = " ++ show Arm.bFEAT_SPECRES putStrLn $ "Arm.FEAT_SSBS = " ++ show Arm.bFEAT_SSBS putStrLn $ "Arm.FEAT_SVE = " ++ show Arm.bFEAT_SVE putStrLn $ "Arm.FEAT_SVE2 = " ++ show Arm.bFEAT_SVE2 putStrLn $ "Arm.FEAT_WFxT = " ++ show Arm.bFEAT_WFxT putStrLn $ "RISCV.C = " ++ show RISCV.bC putStrLn $ "RISCV.V = " ++ show RISCV.bV putStrLn $ "RISCV.Zba = " ++ show RISCV.bZba putStrLn $ "RISCV.Zbb = " ++ show RISCV.bZbb putStrLn $ "RISCV.Zbs = " ++ show RISCV.bZbs putStrLn $ "RISCV.Zicboz = " ++ show RISCV.bZicboz putStrLn $ "RISCV.Zbc = " ++ show RISCV.bZbc putStrLn $ "RISCV.Zbkb = " ++ show RISCV.bZbkb putStrLn $ "RISCV.Zbkc = " ++ show RISCV.bZbkc putStrLn $ "RISCV.Zbkx = " ++ show RISCV.bZbkx putStrLn $ "RISCV.Zknd = " ++ show RISCV.bZknd putStrLn $ "RISCV.Zkne = " ++ show RISCV.bZkne putStrLn $ "RISCV.Zknh = " ++ show RISCV.bZknh putStrLn $ "RISCV.Zksed = " ++ show RISCV.bZksed putStrLn $ "RISCV.Zksh = " ++ show RISCV.bZksh putStrLn $ "RISCV.Zkt = " ++ show RISCV.bZkt putStrLn $ "RISCV.Zvbb = " ++ show RISCV.bZvbb putStrLn $ "RISCV.Zvbc = " ++ show RISCV.bZvbc putStrLn $ "RISCV.Zvkb = " ++ show RISCV.bZvkb putStrLn $ "RISCV.Zvkg = " ++ show RISCV.bZvkg putStrLn $ "RISCV.Zvkned = " ++ show RISCV.bZvkned putStrLn $ "RISCV.Zvknha = " ++ show RISCV.bZvknha putStrLn $ "RISCV.Zvknhb = " ++ show RISCV.bZvknhb putStrLn $ "RISCV.Zvksed = " ++ show RISCV.bZvksed putStrLn $ "RISCV.Zvksh = " ++ show RISCV.bZvksh putStrLn $ "RISCV.Zvkt = " ++ show RISCV.bZvkt putStrLn $ "RISCV.Zfh = " ++ show RISCV.bZfh putStrLn $ "RISCV.Zfhmin = " ++ show RISCV.bZfhmin putStrLn $ "RISCV.Zihintntl = " ++ show RISCV.bZihintntl putStrLn $ "RISCV.Zvfh = " ++ show RISCV.bZvfh putStrLn $ "RISCV.Zvfhmin = " ++ show RISCV.bZvfhmin putStrLn $ "RISCV.Zfa = " ++ show RISCV.bZfa putStrLn $ "RISCV.Ztso = " ++ show RISCV.bZtso putStrLn $ "RISCV.Zacas = " ++ show RISCV.bZacas putStrLn $ "RISCV.Zicntr = " ++ show RISCV.bZicntr putStrLn $ "RISCV.Zicond = " ++ show RISCV.bZicond putStrLn $ "RISCV.Zihintpause = " ++ show RISCV.bZihintpause putStrLn $ "RISCV.Zihpm = " ++ show RISCV.bZihpm putStrLn $ "RISCV.Zve32x = " ++ show RISCV.bZve32x putStrLn $ "RISCV.Zve32f = " ++ show RISCV.bZve32f putStrLn $ "RISCV.Zve64x = " ++ show RISCV.bZve64x putStrLn $ "RISCV.Zve64f = " ++ show RISCV.bZve64f putStrLn $ "RISCV.Zve64d = " ++ show RISCV.bZve64d putStrLn $ "RISCV.Zimop = " ++ show RISCV.bZimop putStrLn $ "RISCV.Zca = " ++ show RISCV.bZca putStrLn $ "RISCV.Zcb = " ++ show RISCV.bZcb putStrLn $ "RISCV.Zcd = " ++ show RISCV.bZcd putStrLn $ "RISCV.Zcf = " ++ show RISCV.bZcf putStrLn $ "RISCV.Zcmop = " ++ show RISCV.bZcmop putStrLn $ "RISCV.Zawrs = " ++ show RISCV.bZawrs putStrLn $ "RISCV.Zaamo = " ++ show RISCV.bZaamo putStrLn $ "RISCV.Zalrsc = " ++ show RISCV.bZalrsc putStrLn $ "RISCV.Supm = " ++ show RISCV.bSupm putStrLn $ "RISCV.Zfbfmin = " ++ show RISCV.bZfbfmin putStrLn $ "RISCV.Zvfbfmin = " ++ show RISCV.bZvfbfmin putStrLn $ "RISCV.Zvfbfwma = " ++ show RISCV.bZvfbfwma putStrLn $ "RISCV.Zicbom = " ++ show RISCV.bZicbom