{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE NoFieldSelectors #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_HADDOCK prune #-}

module SDL3.Sys.Bindgen.Cpuinfo.Safe (
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_GetNumLogicalCPUCores,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_GetCPUCacheLineSize,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasAltiVec,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasMMX,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasSSE,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasSSE2,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasSSE3,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasSSE41,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasSSE42,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasAVX,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasAVX2,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasAVX512F,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasARMSIMD,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasNEON,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasLSX,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_HasLASX,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_GetSystemRAM,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_GetSIMDAlignment,
  SDL3.Sys.Bindgen.Cpuinfo.Safe.sDL_GetSystemPageSize,
)
where

import Prelude (IO, fmap)

import HsBindgen.Runtime.LibC qualified
import HsBindgen.Runtime.Support qualified as BG
import HsBindgen.Runtime.Support.CAPI qualified

$( HsBindgen.Runtime.Support.CAPI.addCSource
     ( HsBindgen.Runtime.Support.CAPI.unlines
         [ "#define SDL_MAIN_HANDLED"
         , "#define SDL_SLOW_MEMCPY"
         , "#define SDL_SLOW_MEMMOVE"
         , "#define SDL_SLOW_MEMSET"
         , "#include <SDL3/SDL_cpuinfo.h>"
         , "signed int hs_bindgen_021d38423efa2894 (void)"
         , "{"
         , "  return (SDL_GetNumLogicalCPUCores)();"
         , "}"
         , "signed int hs_bindgen_0ca909a81c077ab1 (void)"
         , "{"
         , "  return (SDL_GetCPUCacheLineSize)();"
         , "}"
         , "_Bool hs_bindgen_12f0f738ad7e36de (void)"
         , "{"
         , "  return (SDL_HasAltiVec)();"
         , "}"
         , "_Bool hs_bindgen_7b773ae3e33864af (void)"
         , "{"
         , "  return (SDL_HasMMX)();"
         , "}"
         , "_Bool hs_bindgen_9fc6d41bd7e06a8c (void)"
         , "{"
         , "  return (SDL_HasSSE)();"
         , "}"
         , "_Bool hs_bindgen_87bc5fc8be1bca92 (void)"
         , "{"
         , "  return (SDL_HasSSE2)();"
         , "}"
         , "_Bool hs_bindgen_8c78b2fb7d6ba035 (void)"
         , "{"
         , "  return (SDL_HasSSE3)();"
         , "}"
         , "_Bool hs_bindgen_ad68eac9c65daa8b (void)"
         , "{"
         , "  return (SDL_HasSSE41)();"
         , "}"
         , "_Bool hs_bindgen_45773d656848547a (void)"
         , "{"
         , "  return (SDL_HasSSE42)();"
         , "}"
         , "_Bool hs_bindgen_09d9c1ee75214203 (void)"
         , "{"
         , "  return (SDL_HasAVX)();"
         , "}"
         , "_Bool hs_bindgen_dccd2628b251a266 (void)"
         , "{"
         , "  return (SDL_HasAVX2)();"
         , "}"
         , "_Bool hs_bindgen_963390989096b612 (void)"
         , "{"
         , "  return (SDL_HasAVX512F)();"
         , "}"
         , "_Bool hs_bindgen_7f5bde151d49ba8f (void)"
         , "{"
         , "  return (SDL_HasARMSIMD)();"
         , "}"
         , "_Bool hs_bindgen_4bb569121e6831a2 (void)"
         , "{"
         , "  return (SDL_HasNEON)();"
         , "}"
         , "_Bool hs_bindgen_56a380fc3630f88f (void)"
         , "{"
         , "  return (SDL_HasLSX)();"
         , "}"
         , "_Bool hs_bindgen_18257ff80297cf49 (void)"
         , "{"
         , "  return (SDL_HasLASX)();"
         , "}"
         , "signed int hs_bindgen_cd53f670bd0bc729 (void)"
         , "{"
         , "  return (SDL_GetSystemRAM)();"
         , "}"
         , "size_t hs_bindgen_db11c36832e4fbf2 (void)"
         , "{"
         , "  return (SDL_GetSIMDAlignment)();"
         , "}"
         , "#include <SDL3/SDL_version.h>"
         , "#include <SDL3/SDL_error.h>"
         , "signed int hs_bindgen_a5c1dbf29e777b88 (void)"
         , "{"
         , "#if SDL_VERSION_ATLEAST(3, 4, 0)"
         , "  return (SDL_GetSystemPageSize)();"
         , "#else"
         , "  SDL_SetError(\"SDL_GetSystemPageSize requires SDL >= 3.4.0\"); return 0;"
         , "#endif"
         , "}"
         ]
     )
 )

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetNumLogicalCPUCores@
foreign import ccall safe "hs_bindgen_021d38423efa2894"
  hs_bindgen_021d38423efa2894_base
    :: IO BG.CInt

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetNumLogicalCPUCores@
hs_bindgen_021d38423efa2894 :: IO BG.CInt
hs_bindgen_021d38423efa2894 :: IO CInt
hs_bindgen_021d38423efa2894 =
  (CInt -> CInt) -> IO CInt -> IO CInt
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> CInt
FFIType CInt -> CInt
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CInt
hs_bindgen_021d38423efa2894_base

-- | Get the number of logical CPU cores available.
--
--     [Returns]: the total number of logical CPU cores. On CPUs that include technologies such as hyperthreading, the number of logical cores may be more than the number of physical cores.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [C declaration]: @SDL_GetNumLogicalCPUCores@, defined at @SDL3\/SDL_cpuinfo.h 73:33@
sDL_GetNumLogicalCPUCores :: IO BG.CInt
sDL_GetNumLogicalCPUCores :: IO CInt
sDL_GetNumLogicalCPUCores =
  IO CInt
hs_bindgen_021d38423efa2894

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetCPUCacheLineSize@
foreign import ccall safe "hs_bindgen_0ca909a81c077ab1"
  hs_bindgen_0ca909a81c077ab1_base
    :: IO BG.CInt

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetCPUCacheLineSize@
hs_bindgen_0ca909a81c077ab1 :: IO BG.CInt
hs_bindgen_0ca909a81c077ab1 :: IO CInt
hs_bindgen_0ca909a81c077ab1 =
  (CInt -> CInt) -> IO CInt -> IO CInt
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> CInt
FFIType CInt -> CInt
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CInt
hs_bindgen_0ca909a81c077ab1_base

-- | Determine the L1 cache line size of the CPU.
--
--     This is useful for determining multi-threaded structure padding or SIMD prefetch sizes.
--
--     [Returns]: the L1 cache line size of the CPU, in bytes.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [C declaration]: @SDL_GetCPUCacheLineSize@, defined at @SDL3\/SDL_cpuinfo.h 87:33@
sDL_GetCPUCacheLineSize :: IO BG.CInt
sDL_GetCPUCacheLineSize :: IO CInt
sDL_GetCPUCacheLineSize = IO CInt
hs_bindgen_0ca909a81c077ab1

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAltiVec@
foreign import ccall safe "hs_bindgen_12f0f738ad7e36de"
  hs_bindgen_12f0f738ad7e36de_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAltiVec@
hs_bindgen_12f0f738ad7e36de :: IO BG.CBool
hs_bindgen_12f0f738ad7e36de :: IO CBool
hs_bindgen_12f0f738ad7e36de =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_12f0f738ad7e36de_base

-- | Determine whether the CPU has AltiVec features.
--
--     This always returns false on CPUs that aren\'t using PowerPC instruction sets.
--
--     [Returns]: true if the CPU has AltiVec features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [C declaration]: @SDL_HasAltiVec@, defined at @SDL3\/SDL_cpuinfo.h 101:34@
sDL_HasAltiVec :: IO BG.CBool
sDL_HasAltiVec :: IO CBool
sDL_HasAltiVec = IO CBool
hs_bindgen_12f0f738ad7e36de

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasMMX@
foreign import ccall safe "hs_bindgen_7b773ae3e33864af"
  hs_bindgen_7b773ae3e33864af_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasMMX@
hs_bindgen_7b773ae3e33864af :: IO BG.CBool
hs_bindgen_7b773ae3e33864af :: IO CBool
hs_bindgen_7b773ae3e33864af =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_7b773ae3e33864af_base

-- | Determine whether the CPU has MMX features.
--
--     This always returns false on CPUs that aren\'t using Intel instruction sets.
--
--     [Returns]: true if the CPU has MMX features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [C declaration]: @SDL_HasMMX@, defined at @SDL3\/SDL_cpuinfo.h 114:34@
sDL_HasMMX :: IO BG.CBool
sDL_HasMMX :: IO CBool
sDL_HasMMX = IO CBool
hs_bindgen_7b773ae3e33864af

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE@
foreign import ccall safe "hs_bindgen_9fc6d41bd7e06a8c"
  hs_bindgen_9fc6d41bd7e06a8c_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE@
hs_bindgen_9fc6d41bd7e06a8c :: IO BG.CBool
hs_bindgen_9fc6d41bd7e06a8c :: IO CBool
hs_bindgen_9fc6d41bd7e06a8c =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_9fc6d41bd7e06a8c_base

-- | Determine whether the CPU has SSE features.
--
--     This always returns false on CPUs that aren\'t using Intel instruction sets.
--
--     [Returns]: true if the CPU has SSE features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_HasSSE2', 'sDL_HasSSE3', 'sDL_HasSSE41', 'sDL_HasSSE42'
--
--     [C declaration]: @SDL_HasSSE@, defined at @SDL3\/SDL_cpuinfo.h 132:34@
sDL_HasSSE :: IO BG.CBool
sDL_HasSSE :: IO CBool
sDL_HasSSE = IO CBool
hs_bindgen_9fc6d41bd7e06a8c

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE2@
foreign import ccall safe "hs_bindgen_87bc5fc8be1bca92"
  hs_bindgen_87bc5fc8be1bca92_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE2@
hs_bindgen_87bc5fc8be1bca92 :: IO BG.CBool
hs_bindgen_87bc5fc8be1bca92 :: IO CBool
hs_bindgen_87bc5fc8be1bca92 =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_87bc5fc8be1bca92_base

-- | Determine whether the CPU has SSE2 features.
--
--     This always returns false on CPUs that aren\'t using Intel instruction sets.
--
--     [Returns]: true if the CPU has SSE2 features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_HasSSE', 'sDL_HasSSE3', 'sDL_HasSSE41', 'sDL_HasSSE42'
--
--     [C declaration]: @SDL_HasSSE2@, defined at @SDL3\/SDL_cpuinfo.h 150:34@
sDL_HasSSE2 :: IO BG.CBool
sDL_HasSSE2 :: IO CBool
sDL_HasSSE2 = IO CBool
hs_bindgen_87bc5fc8be1bca92

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE3@
foreign import ccall safe "hs_bindgen_8c78b2fb7d6ba035"
  hs_bindgen_8c78b2fb7d6ba035_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE3@
hs_bindgen_8c78b2fb7d6ba035 :: IO BG.CBool
hs_bindgen_8c78b2fb7d6ba035 :: IO CBool
hs_bindgen_8c78b2fb7d6ba035 =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_8c78b2fb7d6ba035_base

-- | Determine whether the CPU has SSE3 features.
--
--     This always returns false on CPUs that aren\'t using Intel instruction sets.
--
--     [Returns]: true if the CPU has SSE3 features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_HasSSE', 'sDL_HasSSE2', 'sDL_HasSSE41', 'sDL_HasSSE42'
--
--     [C declaration]: @SDL_HasSSE3@, defined at @SDL3\/SDL_cpuinfo.h 168:34@
sDL_HasSSE3 :: IO BG.CBool
sDL_HasSSE3 :: IO CBool
sDL_HasSSE3 = IO CBool
hs_bindgen_8c78b2fb7d6ba035

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE41@
foreign import ccall safe "hs_bindgen_ad68eac9c65daa8b"
  hs_bindgen_ad68eac9c65daa8b_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE41@
hs_bindgen_ad68eac9c65daa8b :: IO BG.CBool
hs_bindgen_ad68eac9c65daa8b :: IO CBool
hs_bindgen_ad68eac9c65daa8b =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_ad68eac9c65daa8b_base

-- | Determine whether the CPU has SSE4.1 features.
--
--     This always returns false on CPUs that aren\'t using Intel instruction sets.
--
--     [Returns]: true if the CPU has SSE4.1 features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_HasSSE', 'sDL_HasSSE2', 'sDL_HasSSE3', 'sDL_HasSSE42'
--
--     [C declaration]: @SDL_HasSSE41@, defined at @SDL3\/SDL_cpuinfo.h 186:34@
sDL_HasSSE41 :: IO BG.CBool
sDL_HasSSE41 :: IO CBool
sDL_HasSSE41 = IO CBool
hs_bindgen_ad68eac9c65daa8b

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE42@
foreign import ccall safe "hs_bindgen_45773d656848547a"
  hs_bindgen_45773d656848547a_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasSSE42@
hs_bindgen_45773d656848547a :: IO BG.CBool
hs_bindgen_45773d656848547a :: IO CBool
hs_bindgen_45773d656848547a =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_45773d656848547a_base

-- | Determine whether the CPU has SSE4.2 features.
--
--     This always returns false on CPUs that aren\'t using Intel instruction sets.
--
--     [Returns]: true if the CPU has SSE4.2 features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_HasSSE', 'sDL_HasSSE2', 'sDL_HasSSE3', 'sDL_HasSSE41'
--
--     [C declaration]: @SDL_HasSSE42@, defined at @SDL3\/SDL_cpuinfo.h 204:34@
sDL_HasSSE42 :: IO BG.CBool
sDL_HasSSE42 :: IO CBool
sDL_HasSSE42 = IO CBool
hs_bindgen_45773d656848547a

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAVX@
foreign import ccall safe "hs_bindgen_09d9c1ee75214203"
  hs_bindgen_09d9c1ee75214203_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAVX@
hs_bindgen_09d9c1ee75214203 :: IO BG.CBool
hs_bindgen_09d9c1ee75214203 :: IO CBool
hs_bindgen_09d9c1ee75214203 =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_09d9c1ee75214203_base

-- | Determine whether the CPU has AVX features.
--
--     This always returns false on CPUs that aren\'t using Intel instruction sets.
--
--     [Returns]: true if the CPU has AVX features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_HasAVX2', 'sDL_HasAVX512F'
--
--     [C declaration]: @SDL_HasAVX@, defined at @SDL3\/SDL_cpuinfo.h 220:34@
sDL_HasAVX :: IO BG.CBool
sDL_HasAVX :: IO CBool
sDL_HasAVX = IO CBool
hs_bindgen_09d9c1ee75214203

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAVX2@
foreign import ccall safe "hs_bindgen_dccd2628b251a266"
  hs_bindgen_dccd2628b251a266_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAVX2@
hs_bindgen_dccd2628b251a266 :: IO BG.CBool
hs_bindgen_dccd2628b251a266 :: IO CBool
hs_bindgen_dccd2628b251a266 =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_dccd2628b251a266_base

-- | Determine whether the CPU has AVX2 features.
--
--     This always returns false on CPUs that aren\'t using Intel instruction sets.
--
--     [Returns]: true if the CPU has AVX2 features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_HasAVX', 'sDL_HasAVX512F'
--
--     [C declaration]: @SDL_HasAVX2@, defined at @SDL3\/SDL_cpuinfo.h 236:34@
sDL_HasAVX2 :: IO BG.CBool
sDL_HasAVX2 :: IO CBool
sDL_HasAVX2 = IO CBool
hs_bindgen_dccd2628b251a266

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAVX512F@
foreign import ccall safe "hs_bindgen_963390989096b612"
  hs_bindgen_963390989096b612_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasAVX512F@
hs_bindgen_963390989096b612 :: IO BG.CBool
hs_bindgen_963390989096b612 :: IO CBool
hs_bindgen_963390989096b612 =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_963390989096b612_base

-- | Determine whether the CPU has AVX-512F (foundation) features.
--
--     This always returns false on CPUs that aren\'t using Intel instruction sets.
--
--     [Returns]: true if the CPU has AVX-512F features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_HasAVX', 'sDL_HasAVX2'
--
--     [C declaration]: @SDL_HasAVX512F@, defined at @SDL3\/SDL_cpuinfo.h 252:34@
sDL_HasAVX512F :: IO BG.CBool
sDL_HasAVX512F :: IO CBool
sDL_HasAVX512F = IO CBool
hs_bindgen_963390989096b612

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasARMSIMD@
foreign import ccall safe "hs_bindgen_7f5bde151d49ba8f"
  hs_bindgen_7f5bde151d49ba8f_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasARMSIMD@
hs_bindgen_7f5bde151d49ba8f :: IO BG.CBool
hs_bindgen_7f5bde151d49ba8f :: IO CBool
hs_bindgen_7f5bde151d49ba8f =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_7f5bde151d49ba8f_base

-- | Determine whether the CPU has ARM SIMD (ARMv6) features.
--
--     This is different from ARM NEON, which is a different instruction set.
--
--     This always returns false on CPUs that aren\'t using ARM instruction sets.
--
--     [Returns]: true if the CPU has ARM SIMD features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [See also]: 'sDL_HasNEON'
--
--     [C declaration]: @SDL_HasARMSIMD@, defined at @SDL3\/SDL_cpuinfo.h 269:34@
sDL_HasARMSIMD :: IO BG.CBool
sDL_HasARMSIMD :: IO CBool
sDL_HasARMSIMD = IO CBool
hs_bindgen_7f5bde151d49ba8f

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasNEON@
foreign import ccall safe "hs_bindgen_4bb569121e6831a2"
  hs_bindgen_4bb569121e6831a2_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasNEON@
hs_bindgen_4bb569121e6831a2 :: IO BG.CBool
hs_bindgen_4bb569121e6831a2 :: IO CBool
hs_bindgen_4bb569121e6831a2 =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_4bb569121e6831a2_base

-- | Determine whether the CPU has NEON (ARM SIMD) features.
--
--     This always returns false on CPUs that aren\'t using ARM instruction sets.
--
--     [Returns]: true if the CPU has ARM NEON features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [C declaration]: @SDL_HasNEON@, defined at @SDL3\/SDL_cpuinfo.h 282:34@
sDL_HasNEON :: IO BG.CBool
sDL_HasNEON :: IO CBool
sDL_HasNEON = IO CBool
hs_bindgen_4bb569121e6831a2

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasLSX@
foreign import ccall safe "hs_bindgen_56a380fc3630f88f"
  hs_bindgen_56a380fc3630f88f_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasLSX@
hs_bindgen_56a380fc3630f88f :: IO BG.CBool
hs_bindgen_56a380fc3630f88f :: IO CBool
hs_bindgen_56a380fc3630f88f =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_56a380fc3630f88f_base

-- | Determine whether the CPU has LSX (LOONGARCH SIMD) features.
--
--     This always returns false on CPUs that aren\'t using LOONGARCH instruction sets.
--
--     [Returns]: true if the CPU has LOONGARCH LSX features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [C declaration]: @SDL_HasLSX@, defined at @SDL3\/SDL_cpuinfo.h 296:34@
sDL_HasLSX :: IO BG.CBool
sDL_HasLSX :: IO CBool
sDL_HasLSX = IO CBool
hs_bindgen_56a380fc3630f88f

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasLASX@
foreign import ccall safe "hs_bindgen_18257ff80297cf49"
  hs_bindgen_18257ff80297cf49_base
    :: IO BG.CBool

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_HasLASX@
hs_bindgen_18257ff80297cf49 :: IO BG.CBool
hs_bindgen_18257ff80297cf49 :: IO CBool
hs_bindgen_18257ff80297cf49 =
  (CBool -> CBool) -> IO CBool -> IO CBool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CBool -> CBool
FFIType CBool -> CBool
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CBool
hs_bindgen_18257ff80297cf49_base

-- | Determine whether the CPU has LASX (LOONGARCH SIMD) features.
--
--     This always returns false on CPUs that aren\'t using LOONGARCH instruction sets.
--
--     [Returns]: true if the CPU has LOONGARCH LASX features or false if not.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [C declaration]: @SDL_HasLASX@, defined at @SDL3\/SDL_cpuinfo.h 310:34@
sDL_HasLASX :: IO BG.CBool
sDL_HasLASX :: IO CBool
sDL_HasLASX = IO CBool
hs_bindgen_18257ff80297cf49

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetSystemRAM@
foreign import ccall safe "hs_bindgen_cd53f670bd0bc729"
  hs_bindgen_cd53f670bd0bc729_base
    :: IO BG.CInt

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetSystemRAM@
hs_bindgen_cd53f670bd0bc729 :: IO BG.CInt
hs_bindgen_cd53f670bd0bc729 :: IO CInt
hs_bindgen_cd53f670bd0bc729 =
  (CInt -> CInt) -> IO CInt -> IO CInt
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> CInt
FFIType CInt -> CInt
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CInt
hs_bindgen_cd53f670bd0bc729_base

-- | Get the amount of RAM configured in the system.
--
--     [Returns]: the amount of RAM configured in the system in MiB.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [C declaration]: @SDL_GetSystemRAM@, defined at @SDL3\/SDL_cpuinfo.h 321:33@
sDL_GetSystemRAM :: IO BG.CInt
sDL_GetSystemRAM :: IO CInt
sDL_GetSystemRAM = IO CInt
hs_bindgen_cd53f670bd0bc729

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetSIMDAlignment@
foreign import ccall safe "hs_bindgen_db11c36832e4fbf2"
  hs_bindgen_db11c36832e4fbf2_base
    :: IO HsBindgen.Runtime.LibC.CSize

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetSIMDAlignment@
hs_bindgen_db11c36832e4fbf2 :: IO HsBindgen.Runtime.LibC.CSize
hs_bindgen_db11c36832e4fbf2 :: IO CSize
hs_bindgen_db11c36832e4fbf2 =
  (CSize -> CSize) -> IO CSize -> IO CSize
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CSize -> CSize
FFIType CSize -> CSize
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CSize
hs_bindgen_db11c36832e4fbf2_base

-- | Report the alignment this system needs for SIMD allocations.
--
--     This will return the minimum number of bytes to which a pointer must be aligned to be compatible with SIMD instructions on the current machine. For example, if the machine supports SSE only, it will return 16, but if it supports AVX-512F, it\'ll return 64 (etc). This only reports values for instruction sets SDL knows about, so if your SDL build doesn\'t have @SDL_HasAVX512F()@, then it might return 16 for the SSE support it sees and not 64 for the AVX-512 instructions that exist but SDL doesn\'t know about. Plan accordingly.
--
--     [Returns]: the alignment in bytes needed for available, known SIMD instructions.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.2.0
--
--     [See also]: SDL_aligned_alloc, SDL_aligned_free
--
--     [C declaration]: @SDL_GetSIMDAlignment@, defined at @SDL3\/SDL_cpuinfo.h 345:36@
sDL_GetSIMDAlignment :: IO HsBindgen.Runtime.LibC.CSize
sDL_GetSIMDAlignment :: IO CSize
sDL_GetSIMDAlignment = IO CSize
hs_bindgen_db11c36832e4fbf2

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetSystemPageSize@
foreign import ccall safe "hs_bindgen_a5c1dbf29e777b88"
  hs_bindgen_a5c1dbf29e777b88_base
    :: IO BG.CInt

-- __unique:__ @sdl3bindgensys_SDL3.Sys.Bindgen.Cpuinfo_Safe_SDL_GetSystemPageSize@
hs_bindgen_a5c1dbf29e777b88 :: IO BG.CInt
hs_bindgen_a5c1dbf29e777b88 :: IO CInt
hs_bindgen_a5c1dbf29e777b88 =
  (CInt -> CInt) -> IO CInt -> IO CInt
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> CInt
FFIType CInt -> CInt
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType IO CInt
hs_bindgen_a5c1dbf29e777b88_base

-- | Report the size of a page of memory.
--
--     Different platforms might have different memory page sizes. In current times, 4 kilobytes is not unusual, but newer systems are moving to larger page sizes, and esoteric platforms might have any unexpected size.
--
--     Note that this function can return 0, which means SDL can\'t determine the page size on this platform. It will /not/ set an error string to be retrieved with SDL_GetError() in this case! In this case, defaulting to 4096 is often a reasonable option.
--
--     [Returns]: the size of a single page of memory, in bytes, or 0 if SDL can\'t determine this information.
--
--     [Thread safety]: It is safe to call this function from any thread.
--
--     @since 3.4.0
--
--     [C declaration]: @SDL_GetSystemPageSize@, defined at @SDL3\/SDL_cpuinfo.h 366:33@
sDL_GetSystemPageSize :: IO BG.CInt
sDL_GetSystemPageSize :: IO CInt
sDL_GetSystemPageSize = IO CInt
hs_bindgen_a5c1dbf29e777b88