hhlo-0.1.0.0: src/HHLO/Runtime/PJRT/Types.hs
{-# LANGUAGE ForeignFunctionInterface #-}
module HHLO.Runtime.PJRT.Types
( PJRTApi(..)
, PJRTClient(..)
, PJRTBuffer(..)
, PJRTExecutable(..)
, PJRTError(..)
, PJRTEvent(..)
, PJRTDevice(..)
-- * Buffer type constants
, bufferTypeInvalid
, bufferTypePred
, bufferTypeS8
, bufferTypeS16
, bufferTypeS32
, bufferTypeS64
, bufferTypeU8
, bufferTypeU16
, bufferTypeU32
, bufferTypeU64
, bufferTypeF16
, bufferTypeF32
, bufferTypeF64
, bufferTypeBF16
, bufferTypeC64
, bufferTypeC128
) where
import Foreign.C.Types (CInt(..))
import Foreign.ForeignPtr (ForeignPtr)
import Foreign.Ptr (Ptr)
import System.IO.Unsafe (unsafePerformIO)
newtype PJRTApi = PJRTApi (Ptr PJRTApi)
newtype PJRTClient = PJRTClient (Ptr PJRTClient)
newtype PJRTBuffer = PJRTBuffer (ForeignPtr PJRTBuffer)
newtype PJRTExecutable = PJRTExecutable (ForeignPtr PJRTExecutable)
newtype PJRTError = PJRTError (Ptr PJRTError)
newtype PJRTEvent = PJRTEvent (Ptr PJRTEvent)
newtype PJRTDevice = PJRTDevice (Ptr PJRTDevice)
-- ---------------------------------------------------------------------------
-- Buffer type constants (fetched from C shim at first use)
-- ---------------------------------------------------------------------------
foreign import ccall "pjrt_shim.h hhlo_buffer_type_invalid" c_bufferTypeInvalid :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_pred" c_bufferTypePred :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_s8" c_bufferTypeS8 :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_s16" c_bufferTypeS16 :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_s32" c_bufferTypeS32 :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_s64" c_bufferTypeS64 :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_u8" c_bufferTypeU8 :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_u16" c_bufferTypeU16 :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_u32" c_bufferTypeU32 :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_u64" c_bufferTypeU64 :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_f16" c_bufferTypeF16 :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_f32" c_bufferTypeF32 :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_f64" c_bufferTypeF64 :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_bf16" c_bufferTypeBF16 :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_c64" c_bufferTypeC64 :: IO CInt
foreign import ccall "pjrt_shim.h hhlo_buffer_type_c128" c_bufferTypeC128 :: IO CInt
bufType :: IO CInt -> CInt
bufType action = unsafePerformIO action
{-# NOINLINE bufType #-}
bufferTypeInvalid :: CInt
bufferTypeInvalid = bufType c_bufferTypeInvalid
bufferTypePred :: CInt
bufferTypePred = bufType c_bufferTypePred
bufferTypeS8 :: CInt
bufferTypeS8 = bufType c_bufferTypeS8
bufferTypeS16 :: CInt
bufferTypeS16 = bufType c_bufferTypeS16
bufferTypeS32 :: CInt
bufferTypeS32 = bufType c_bufferTypeS32
bufferTypeS64 :: CInt
bufferTypeS64 = bufType c_bufferTypeS64
bufferTypeU8 :: CInt
bufferTypeU8 = bufType c_bufferTypeU8
bufferTypeU16 :: CInt
bufferTypeU16 = bufType c_bufferTypeU16
bufferTypeU32 :: CInt
bufferTypeU32 = bufType c_bufferTypeU32
bufferTypeU64 :: CInt
bufferTypeU64 = bufType c_bufferTypeU64
bufferTypeF16 :: CInt
bufferTypeF16 = bufType c_bufferTypeF16
bufferTypeF32 :: CInt
bufferTypeF32 = bufType c_bufferTypeF32
bufferTypeF64 :: CInt
bufferTypeF64 = bufType c_bufferTypeF64
bufferTypeBF16 :: CInt
bufferTypeBF16 = bufType c_bufferTypeBF16
bufferTypeC64 :: CInt
bufferTypeC64 = bufType c_bufferTypeC64
bufferTypeC128 :: CInt
bufferTypeC128 = bufType c_bufferTypeC128