{-# 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