uhc-light-1.1.7.0: src/UHC/Light/Compiler/ConfigDefines.hs
{-# OPTIONS_GHC -cpp #-}
module UHC.Light.Compiler.ConfigDefines
( mkB
, GCVariant (..), gcVariant
, useBoehmGC
, sizeofWord, sizeofWordInBits, sizeofWordAsInteger, sizeofWordInLog
, nodeNeedsForwarding
, magicNumberHI
, mpLib, MPLib (..)
, sizeofFloat, sizeofDouble, sizeofCInt )
where
import UHC.Light.Compiler.Opts.Base
import Data.Word
import Data.Char
{-# LINE 18 "src/ehc/ConfigDefines.chs" #-}
magicNumberHI :: [Word8]
magicNumberHI = map (fromInteger . toInteger . fromEnum) "UHI1"
{-# LINE 27 "src/ehc/ConfigDefines.chs" #-}
mkB :: Int -> Bool
mkB x = if x /= 0 then True else False
{-# LINE 39 "src/ehc/ConfigDefines.chs" #-}
#define USE_BOEHM_GC 0
data GCVariant
= GCVariant_Boehm | GCVariant_Uhc
deriving Eq
gcVariant :: EHCOpts -> GCVariant
gcVariant opts | ehcOptEmitExecBytecode opts = GCVariant_Uhc
| mkB USE_BOEHM_GC = GCVariant_Boehm
| otherwise = GCVariant_Uhc
{-# LINE 56 "src/ehc/ConfigDefines.chs" #-}
useBoehmGC :: EHCOpts -> Bool
useBoehmGC opts = gcVariant opts == GCVariant_Boehm
{-# LINE 61 "src/ehc/ConfigDefines.chs" #-}
#define USE_LTM 1
#define USE_GMP 0
data MPLib
= MPLib_LTM | MPLib_GMP
deriving (Show,Eq)
mpLib :: MPLib
mpLib | mkB USE_GMP = MPLib_GMP
| otherwise = MPLib_LTM
{-# LINE 78 "src/ehc/ConfigDefines.chs" #-}
#define SIZEOF_INTPTR_T 8
{-# LINE 82 "src/ehc/ConfigDefines.chs" #-}
sizeofWord :: Int
sizeofWord = SIZEOF_INTPTR_T
sizeofWordInBits :: Int
sizeofWordInBits = sizeofWord * 8
sizeofWordInLog :: Int
sizeofWordInLog = if sizeofWord == 8 then 3 else 2
sizeofWordAsInteger :: Integer
sizeofWordAsInteger = toInteger sizeofWord
{-# LINE 100 "src/ehc/ConfigDefines.chs" #-}
nodeNeedsForwarding :: EHCOpts -> Bool
nodeNeedsForwarding opts
= case gcVariant opts of
GCVariant_Boehm -> False -- header only
GCVariant_Uhc -> True -- header + 1 fld for forwarding
{-# LINE 112 "src/ehc/ConfigDefines.chs" #-}
#define SIZEOF_FLOAT 4
#define SIZEOF_DOUBLE 8
#define SIZEOF_INT 4
{-# LINE 118 "src/ehc/ConfigDefines.chs" #-}
sizeofFloat :: Int
sizeofFloat = SIZEOF_FLOAT
sizeofDouble :: Int
sizeofDouble = SIZEOF_DOUBLE
sizeofCInt :: Int
sizeofCInt = SIZEOF_INT