{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
{- |
Description: RISC-V features as type-level booleans

This module provides the type-level interface to detect CPU features.
You can mark your function with @\<FEATURE NAME\> ~ True =>@ to indicate that
it requires a specific CPU feature.
You can detect the availability and get the constraint @\<FEATURE NAME\> ~ True@
by pattern-matching on the variable @s\<FEATURE NAME\>@.

Example:

> -- This function requires the Vector extension
> someFunction :: V ~ True => ...
>
> case sV of
>   STrue -> {- In this branch, V is True -} someFunction
>   SFalse -> {- In this branch, V is False -} error "Vector extension not available"
-}
module System.CPUFeatures.RISCV.TypeBool
  (C, sC
  ,V, sV
  ,Zba, sZba
  ,Zbb, sZbb
  ,Zbs, sZbs
  ,Zicboz, sZicboz
  ,Zbc, sZbc
  ,Zbkb, sZbkb
  ,Zbkc, sZbkc
  ,Zbkx, sZbkx
  ,Zknd, sZknd
  ,Zkne, sZkne
  ,Zknh, sZknh
  ,Zksed, sZksed
  ,Zksh, sZksh
  ,Zkt, sZkt
  ,Zvbb, sZvbb
  ,Zvbc, sZvbc
  ,Zvkb, sZvkb
  ,Zvkg, sZvkg
  ,Zvkned, sZvkned
  ,Zvknha, sZvknha
  ,Zvknhb, sZvknhb
  ,Zvksed, sZvksed
  ,Zvksh, sZvksh
  ,Zvkt, sZvkt
  ,Zfh, sZfh
  ,Zfhmin, sZfhmin
  ,Zihintntl, sZihintntl
  ,Zvfh, sZvfh
  ,Zvfhmin, sZvfhmin
  ,Zfa, sZfa
  ,Ztso, sZtso
  ,Zacas, sZacas
  ,Zicntr, sZicntr
  ,Zicond, sZicond
  ,Zihintpause, sZihintpause
  ,Zihpm, sZihpm
  ,Zve32x, sZve32x
  ,Zve32f, sZve32f
  ,Zve64x, sZve64x
  ,Zve64f, sZve64f
  ,Zve64d, sZve64d
  ,Zimop, sZimop
  ,Zca, sZca
  ,Zcb, sZcb
  ,Zcd, sZcd
  ,Zcf, sZcf
  ,Zcmop, sZcmop
  ,Zawrs, sZawrs
  ,Zaamo, sZaamo
  ,Zalrsc, sZalrsc
  ,Supm, sSupm
  ,Zfbfmin, sZfbfmin
  ,Zvfbfmin, sZvfbfmin
  ,Zvfbfwma, sZvfbfwma
  ,Zicbom, sZicbom
  ,SBool(..)
  ) where
import System.CPUFeatures.RISCV.Bool
import System.CPUFeatures.Util

type family C :: Bool
type family V :: Bool
type family Zba :: Bool
type family Zbb :: Bool
type family Zbs :: Bool
type family Zicboz :: Bool
type family Zbc :: Bool
type family Zbkb :: Bool
type family Zbkc :: Bool
type family Zbkx :: Bool
type family Zknd :: Bool
type family Zkne :: Bool
type family Zknh :: Bool
type family Zksed :: Bool
type family Zksh :: Bool
type family Zkt :: Bool
type family Zvbb :: Bool
type family Zvbc :: Bool
type family Zvkb :: Bool
type family Zvkg :: Bool
type family Zvkned :: Bool
type family Zvknha :: Bool
type family Zvknhb :: Bool
type family Zvksed :: Bool
type family Zvksh :: Bool
type family Zvkt :: Bool
type family Zfh :: Bool
type family Zfhmin :: Bool
type family Zihintntl :: Bool
type family Zvfh :: Bool
type family Zvfhmin :: Bool
type family Zfa :: Bool
type family Ztso :: Bool
type family Zacas :: Bool
type family Zicntr :: Bool
type family Zicond :: Bool
type family Zihintpause :: Bool
type family Zihpm :: Bool
type family Zve32x :: Bool
type family Zve32f :: Bool
type family Zve64x :: Bool
type family Zve64f :: Bool
type family Zve64d :: Bool
type family Zimop :: Bool
type family Zca :: Bool
type family Zcb :: Bool
type family Zcd :: Bool
type family Zcf :: Bool
type family Zcmop :: Bool
type family Zawrs :: Bool
type family Zaamo :: Bool
type family Zalrsc :: Bool
type family Supm :: Bool
type family Zfbfmin :: Bool
type family Zvfbfmin :: Bool
type family Zvfbfwma :: Bool
type family Zicbom :: Bool

sC :: SBool C
sC :: SBool C
sC = Bool -> SBool C
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bC

sV :: SBool V
sV :: SBool V
sV = Bool -> SBool V
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bV

sZba :: SBool Zba
sZba :: SBool Zba
sZba = Bool -> SBool Zba
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZba

sZbb :: SBool Zbb
sZbb :: SBool Zbb
sZbb = Bool -> SBool Zbb
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZbb

sZbs :: SBool Zbs
sZbs :: SBool Zbs
sZbs = Bool -> SBool Zbs
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZbs

sZicboz :: SBool Zicboz
sZicboz :: SBool Zicboz
sZicboz = Bool -> SBool Zicboz
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZicboz

sZbc :: SBool Zbc
sZbc :: SBool Zbc
sZbc = Bool -> SBool Zbc
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZbc

sZbkb :: SBool Zbkb
sZbkb :: SBool Zbkb
sZbkb = Bool -> SBool Zbkb
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZbkb

sZbkc :: SBool Zbkc
sZbkc :: SBool Zbkc
sZbkc = Bool -> SBool Zbkc
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZbkc

sZbkx :: SBool Zbkx
sZbkx :: SBool Zbkx
sZbkx = Bool -> SBool Zbkx
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZbkx

sZknd :: SBool Zknd
sZknd :: SBool Zknd
sZknd = Bool -> SBool Zknd
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZknd

sZkne :: SBool Zkne
sZkne :: SBool Zkne
sZkne = Bool -> SBool Zkne
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZkne

sZknh :: SBool Zknh
sZknh :: SBool Zknh
sZknh = Bool -> SBool Zknh
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZknh

sZksed :: SBool Zksed
sZksed :: SBool Zksed
sZksed = Bool -> SBool Zksed
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZksed

sZksh :: SBool Zksh
sZksh :: SBool Zksh
sZksh = Bool -> SBool Zksh
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZksh

sZkt :: SBool Zkt
sZkt :: SBool Zkt
sZkt = Bool -> SBool Zkt
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZkt

sZvbb :: SBool Zvbb
sZvbb :: SBool Zvbb
sZvbb = Bool -> SBool Zvbb
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvbb

sZvbc :: SBool Zvbc
sZvbc :: SBool Zvbc
sZvbc = Bool -> SBool Zvbc
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvbc

sZvkb :: SBool Zvkb
sZvkb :: SBool Zvkb
sZvkb = Bool -> SBool Zvkb
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvkb

sZvkg :: SBool Zvkg
sZvkg :: SBool Zvkg
sZvkg = Bool -> SBool Zvkg
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvkg

sZvkned :: SBool Zvkned
sZvkned :: SBool Zvkned
sZvkned = Bool -> SBool Zvkned
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvkned

sZvknha :: SBool Zvknha
sZvknha :: SBool Zvknha
sZvknha = Bool -> SBool Zvknha
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvknha

sZvknhb :: SBool Zvknhb
sZvknhb :: SBool Zvknhb
sZvknhb = Bool -> SBool Zvknhb
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvknhb

sZvksed :: SBool Zvksed
sZvksed :: SBool Zvksed
sZvksed = Bool -> SBool Zvksed
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvksed

sZvksh :: SBool Zvksh
sZvksh :: SBool Zvksh
sZvksh = Bool -> SBool Zvksh
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvksh

sZvkt :: SBool Zvkt
sZvkt :: SBool Zvkt
sZvkt = Bool -> SBool Zvkt
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvkt

sZfh :: SBool Zfh
sZfh :: SBool Zfh
sZfh = Bool -> SBool Zfh
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZfh

sZfhmin :: SBool Zfhmin
sZfhmin :: SBool Zfhmin
sZfhmin = Bool -> SBool Zfhmin
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZfhmin

sZihintntl :: SBool Zihintntl
sZihintntl :: SBool Zihintntl
sZihintntl = Bool -> SBool Zihintntl
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZihintntl

sZvfh :: SBool Zvfh
sZvfh :: SBool Zvfh
sZvfh = Bool -> SBool Zvfh
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvfh

sZvfhmin :: SBool Zvfhmin
sZvfhmin :: SBool Zvfhmin
sZvfhmin = Bool -> SBool Zvfhmin
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvfhmin

sZfa :: SBool Zfa
sZfa :: SBool Zfa
sZfa = Bool -> SBool Zfa
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZfa

sZtso :: SBool Ztso
sZtso :: SBool Ztso
sZtso = Bool -> SBool Ztso
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZtso

sZacas :: SBool Zacas
sZacas :: SBool Zacas
sZacas = Bool -> SBool Zacas
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZacas

sZicntr :: SBool Zicntr
sZicntr :: SBool Zicntr
sZicntr = Bool -> SBool Zicntr
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZicntr

sZicond :: SBool Zicond
sZicond :: SBool Zicond
sZicond = Bool -> SBool Zicond
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZicond

sZihintpause :: SBool Zihintpause
sZihintpause :: SBool Zihintpause
sZihintpause = Bool -> SBool Zihintpause
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZihintpause

sZihpm :: SBool Zihpm
sZihpm :: SBool Zihpm
sZihpm = Bool -> SBool Zihpm
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZihpm

sZve32x :: SBool Zve32x
sZve32x :: SBool Zve32x
sZve32x = Bool -> SBool Zve32x
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZve32x

sZve32f :: SBool Zve32f
sZve32f :: SBool Zve32f
sZve32f = Bool -> SBool Zve32f
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZve32f

sZve64x :: SBool Zve64x
sZve64x :: SBool Zve64x
sZve64x = Bool -> SBool Zve64x
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZve64x

sZve64f :: SBool Zve64f
sZve64f :: SBool Zve64f
sZve64f = Bool -> SBool Zve64f
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZve64f

sZve64d :: SBool Zve64d
sZve64d :: SBool Zve64d
sZve64d = Bool -> SBool Zve64d
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZve64d

sZimop :: SBool Zimop
sZimop :: SBool Zimop
sZimop = Bool -> SBool Zimop
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZimop

sZca :: SBool Zca
sZca :: SBool Zca
sZca = Bool -> SBool Zca
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZca

sZcb :: SBool Zcb
sZcb :: SBool Zcb
sZcb = Bool -> SBool Zcb
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZcb

sZcd :: SBool Zcd
sZcd :: SBool Zcd
sZcd = Bool -> SBool Zcd
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZcd

sZcf :: SBool Zcf
sZcf :: SBool Zcf
sZcf = Bool -> SBool Zcf
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZcf

sZcmop :: SBool Zcmop
sZcmop :: SBool Zcmop
sZcmop = Bool -> SBool Zcmop
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZcmop

sZawrs :: SBool Zawrs
sZawrs :: SBool Zawrs
sZawrs = Bool -> SBool Zawrs
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZawrs

sZaamo :: SBool Zaamo
sZaamo :: SBool Zaamo
sZaamo = Bool -> SBool Zaamo
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZaamo

sZalrsc :: SBool Zalrsc
sZalrsc :: SBool Zalrsc
sZalrsc = Bool -> SBool Zalrsc
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZalrsc

sSupm :: SBool Supm
sSupm :: SBool Supm
sSupm = Bool -> SBool Supm
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bSupm

sZfbfmin :: SBool Zfbfmin
sZfbfmin :: SBool Zfbfmin
sZfbfmin = Bool -> SBool Zfbfmin
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZfbfmin

sZvfbfmin :: SBool Zvfbfmin
sZvfbfmin :: SBool Zvfbfmin
sZvfbfmin = Bool -> SBool Zvfbfmin
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvfbfmin

sZvfbfwma :: SBool Zvfbfwma
sZvfbfwma :: SBool Zvfbfwma
sZvfbfwma = Bool -> SBool Zvfbfwma
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZvfbfwma

sZicbom :: SBool Zicbom
sZicbom :: SBool Zicbom
sZicbom = Bool -> SBool Zicbom
forall (a :: Bool). Bool -> SBool a
unsafeBoolToSBool Bool
bZicbom