packages feed

ghc-lib-0.20200401: compiler/GHC/CmmToAsm/Config.hs

-- | Native code generator configuration
module GHC.CmmToAsm.Config
   ( NCGConfig(..)
   , ncgWordWidth
   , platformWordWidth
   )
where

import GhcPrelude
import GHC.Platform
import GHC.Cmm.Type (Width(..))

-- | Native code generator configuration
data NCGConfig = NCGConfig
   { ncgPlatform            :: !Platform    -- ^ Target platform
   , ncgProcAlignment       :: !(Maybe Int) -- ^ Mandatory proc alignment
   , ncgDebugLevel          :: !Int         -- ^ Debug level
   , ncgExternalDynamicRefs :: !Bool        -- ^ Generate code to link against dynamic libraries
   , ncgPIC                 :: !Bool        -- ^ Enable Position-Independent Code
   , ncgSplitSections       :: !Bool        -- ^ Split sections
   , ncgSpillPreallocSize   :: !Int         -- ^ Size in bytes of the pre-allocated spill space on the C stack
   , ncgRegsIterative       :: !Bool
   , ncgAsmLinting          :: !Bool        -- ^ Perform ASM linting pass
   , ncgDumpRegAllocStages  :: !Bool
   , ncgDumpAsmStats        :: !Bool
   , ncgDumpAsmConflicts    :: !Bool
   }

-- | Return Word size
ncgWordWidth :: NCGConfig -> Width
ncgWordWidth config = platformWordWidth (ncgPlatform config)

-- | Return Word size
platformWordWidth :: Platform -> Width
platformWordWidth platform = case platformWordSize platform of
   PW4 -> W32
   PW8 -> W64