{-# LINE 1 "src/System/LibCPUID/CPUID.hsc" #-}
module System.LibCPUID.CPUID
(
CPUID(..)
) where
import Foreign.C.String (peekCString)
import Foreign.C.Types (CInt(..), CUChar(..))
import Foreign.Marshal (advancePtr)
import Foreign.Ptr (castPtr, plusPtr)
import Foreign.Storable (Storable(..))
data CPUID = CPUID
{ vendorString :: String
, brandString :: String
, hasTSC :: Bool
, physicalCores :: Int
, logicalCores :: Int
, totalLogicalCores :: Int
}
instance Storable CPUID where
alignment _ = 8
{-# LINE 46 "src/System/LibCPUID/CPUID.hsc" #-}
sizeOf _ = (432)
{-# LINE 47 "src/System/LibCPUID/CPUID.hsc" #-}
peek ptr = do
vendorString <- peekCString $ plusPtr ptr (0)
{-# LINE 49 "src/System/LibCPUID/CPUID.hsc" #-}
brandString <- peekCString $ plusPtr ptr (16)
{-# LINE 50 "src/System/LibCPUID/CPUID.hsc" #-}
hasTSC <-
let ptr' = advancePtr (castPtr @CPUID @CUChar ptr) 4
{-# LINE 52 "src/System/LibCPUID/CPUID.hsc" #-}
in (/= 0) <$> peekElemOff ptr' (84)
{-# LINE 53 "src/System/LibCPUID/CPUID.hsc" #-}
physicalCores <- fromIntegral @CInt <$> (\hsc_ptr -> peekByteOff hsc_ptr 232) ptr
{-# LINE 54 "src/System/LibCPUID/CPUID.hsc" #-}
logicalCores <- fromIntegral @CInt <$> (\hsc_ptr -> peekByteOff hsc_ptr 236) ptr
{-# LINE 55 "src/System/LibCPUID/CPUID.hsc" #-}
totalLogicalCores <- fromIntegral @CInt <$> (\hsc_ptr -> peekByteOff hsc_ptr 240) ptr
{-# LINE 56 "src/System/LibCPUID/CPUID.hsc" #-}
pure CPUID {..}
poke _ _ = error "CPUID is read-only"