[project @ 2000-10-10 13:20:38 by simonmar]
[ghc-hetmet.git] / ghc / compiler / main / Constants.lhs
index 53495da..f0766dc 100644 (file)
@@ -14,8 +14,6 @@ module Constants (
        mAX_SPEC_SELECTEE_SIZE,
        mAX_SPEC_AP_SIZE,
 
-       tARGET_MIN_INT, tARGET_MAX_INT,
-
        mIN_UPD_SIZE,
        mIN_SIZE_NonUpdHeapObject,
 
@@ -26,6 +24,7 @@ module Constants (
        aRR_WORDS_HDR_SIZE,
        aRR_PTRS_HDR_SIZE,
         rESERVED_C_STACK_BYTES,
+        rESERVED_STACK_WORDS,
 
        sTD_ITBL_SIZE,
        pROF_ITBL_SIZE,
@@ -59,6 +58,7 @@ module Constants (
        oTHER_TAG,
 
        mAX_INTLIKE, mIN_INTLIKE,
+       mAX_CHARLIKE, mIN_CHARLIKE,
 
        spRelToInt,
 
@@ -66,6 +66,11 @@ module Constants (
        iNT64_SIZE,
        wORD64_SIZE,
        
+       wORD_SIZE,
+
+       bLOCK_SIZE,
+       bLOCK_SIZE_W,
+
        interfaceFileFormatVersion
 
     ) where
@@ -106,22 +111,6 @@ mIN_UPD_SIZE                       = (MIN_UPD_SIZE::Int)
 mIN_SIZE_NonUpdHeapObject      = (MIN_NONUPD_SIZE::Int)
 \end{code}
 
-If we're compiling with GHC (and we're not cross-compiling), then we
-know that minBound and maxBound :: Int are the right values for the
-target architecture.  Otherwise, we assume -2^31 and 2^31-1
-respectively (which will be wrong on a 64-bit machine).
-
-\begin{code}
-tARGET_MIN_INT, tARGET_MAX_INT :: Integer
-#if __GLASGOW_HASKELL__
-tARGET_MIN_INT = toInteger (minBound :: Int)
-tARGET_MAX_INT = toInteger (maxBound :: Int)
-#else
-tARGET_MIN_INT = -2147483648
-tARGET_MAX_INT =  2147483647
-#endif
-\end{code}
 Constants for semi-tagging; the tags associated with the data
 constructors will start at 0 and go up.
 
@@ -133,6 +122,10 @@ oTHER_TAG = (INFO_OTHER_TAG :: Integer)    -- (-1) unevaluated, probably
 mIN_INTLIKE, mAX_INTLIKE :: Integer    -- Only used to compare with (MachInt Integer)
 mIN_INTLIKE = MIN_INTLIKE
 mAX_INTLIKE = MAX_INTLIKE
+
+mIN_CHARLIKE, mAX_CHARLIKE :: Int      -- Only used to compare with (MachChar Int)
+mIN_CHARLIKE = MIN_CHARLIKE
+mAX_CHARLIKE = MAX_CHARLIKE
 \end{code}
 
 A little function that abstracts the stack direction.  Note that most
@@ -223,8 +216,9 @@ wORD64_SIZE    = (WORD64_SIZE   :: Int)
 iNT64_SIZE     = (INT64_SIZE   :: Int)
 \end{code}
 
-The version of the interface file format we're
-using:
+The version of the interface file format we're using.  It's propagated
+here by a devious route from ghc/mk/version.mk.  See comments
+there for what it means.
 
 \begin{code}
 interfaceFileFormatVersion :: Int
@@ -237,3 +231,23 @@ area is has available.
 \begin{code}
 rESERVED_C_STACK_BYTES = (RESERVED_C_STACK_BYTES :: Int)
 \end{code}
+
+The amount of (Haskell) stack to leave free for saving registers when
+returning to the scheduler.
+
+\begin{code}
+rESERVED_STACK_WORDS = (RESERVED_STACK_WORDS :: Int)
+\end{code}
+
+Size of a word, in bytes
+
+\begin{code}
+wORD_SIZE = (WORD_SIZE :: Int)
+\end{code}
+
+Size of a storage manager block (in bytes).
+
+\begin{code}
+bLOCK_SIZE = (BLOCK_SIZE :: Int)
+bLOCK_SIZE_W = (bLOCK_SIZE `div` wORD_SIZE :: Int)
+\end{code}