mAX_SPEC_SELECTEE_SIZE,
mAX_SPEC_AP_SIZE,
- tARGET_MIN_INT, tARGET_MAX_INT,
-
mIN_UPD_SIZE,
mIN_SIZE_NonUpdHeapObject,
sTD_HDR_SIZE,
pROF_HDR_SIZE,
gRAN_HDR_SIZE,
- tICKY_HDR_SIZE,
- aRR_HDR_SIZE,
+ aRR_WORDS_HDR_SIZE,
+ aRR_PTRS_HDR_SIZE,
+ rESERVED_C_STACK_BYTES,
+ rESERVED_STACK_WORDS,
sTD_ITBL_SIZE,
+ rET_ITBL_SIZE,
pROF_ITBL_SIZE,
gRAN_ITBL_SIZE,
tICKY_ITBL_SIZE,
mAX_FAMILY_SIZE_FOR_VEC_RETURNS,
uF_SIZE,
- sCC_UF_SIZE,
+ pROF_UF_SIZE,
+ gRAN_UF_SIZE, -- HWL
uF_RET,
- uF_SU,
uF_UPDATEE,
- uF_CCS,
-
- sEQ_FRAME_SIZE,
- sCC_SEQ_FRAME_SIZE,
mAX_Vanilla_REG,
mAX_Float_REG,
oTHER_TAG,
mAX_INTLIKE, mIN_INTLIKE,
+ mAX_CHARLIKE, mIN_CHARLIKE,
spRelToInt,
iNT64_SIZE,
wORD64_SIZE,
- interfaceFileFormatVersion
+ wORD_SIZE,
+ wORD_SIZE_IN_BITS,
+ bLOCK_SIZE,
+ bLOCK_SIZE_W,
+
+ bITMAP_BITS_SHIFT,
) where
-- This magical #include brings in all the everybody-knows-these magic
#include "../includes/config.h"
#include "../includes/MachRegs.h"
#include "../includes/Constants.h"
+#include "../includes/MachDeps.h"
+#include "../includes/DerivedConstants.h"
-- import Util
\end{code}
All pretty arbitrary:
\begin{code}
-mAX_TUPLE_SIZE = (37 :: Int)
+mAX_TUPLE_SIZE = (62 :: Int) -- Should really match the number
+ -- of decls in Data.Tuple
mAX_CONTEXT_REDUCTION_DEPTH = (20 :: Int)
\end{code}
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.
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
-- If you change this, you may need to change runtimes/standard/Update.lhc
-- The update frame sizes
-uF_SIZE = (NOSCC_UF_SIZE::Int)
+uF_SIZE = (STD_UF_SIZE::Int)
-- Same again, with profiling
-sCC_UF_SIZE = (SCC_UF_SIZE::Int)
+pROF_UF_SIZE = (PROF_UF_SIZE::Int)
+
+-- Same again, with gransim
+gRAN_UF_SIZE = (GRAN_UF_SIZE::Int)
-- Offsets in an update frame. They don't change with profiling!
uF_RET = (UF_RET::Int)
-uF_SU = (UF_SU::Int)
uF_UPDATEE = (UF_UPDATEE::Int)
-uF_CCS = (UF_CCS::Int)
-\end{code}
-
-Seq frame sizes.
-
-\begin{code}
-sEQ_FRAME_SIZE = (NOSCC_SEQ_FRAME_SIZE::Int)
-sCC_SEQ_FRAME_SIZE = (SCC_SEQ_FRAME_SIZE::Int)
\end{code}
\begin{code}
Closure header sizes.
\begin{code}
-sTD_HDR_SIZE = (STD_HDR_SIZE :: Int)
-pROF_HDR_SIZE = (PROF_HDR_SIZE :: Int)
-gRAN_HDR_SIZE = (GRAN_HDR_SIZE :: Int)
-tICKY_HDR_SIZE = (TICKY_HDR_SIZE :: Int)
-aRR_HDR_SIZE = (ARR_HDR_SIZE :: Int)
+sTD_HDR_SIZE = (STD_HDR_SIZE :: Int)
+pROF_HDR_SIZE = (PROF_HDR_SIZE :: Int)
+gRAN_HDR_SIZE = (GRAN_HDR_SIZE :: Int)
+aRR_WORDS_HDR_SIZE = (ARR_WORDS_HDR_SIZE :: Int)
+aRR_PTRS_HDR_SIZE = (ARR_PTRS_HDR_SIZE :: Int)
\end{code}
Info Table sizes.
\begin{code}
sTD_ITBL_SIZE = (STD_ITBL_SIZE :: Int)
+rET_ITBL_SIZE = (RET_ITBL_SIZE :: Int)
pROF_ITBL_SIZE = (PROF_ITBL_SIZE :: Int)
gRAN_ITBL_SIZE = (GRAN_ITBL_SIZE :: Int)
tICKY_ITBL_SIZE = (TICKY_ITBL_SIZE :: Int)
Size of a double in StgWords.
\begin{code}
-dOUBLE_SIZE = (DOUBLE_SIZE :: Int)
-wORD64_SIZE = (WORD64_SIZE :: Int)
-iNT64_SIZE = (INT64_SIZE :: Int)
+dOUBLE_SIZE = (SIZEOF_DOUBLE `quot` SIZEOF_HSWORD :: Int)
+wORD64_SIZE = (8 `quot` SIZEOF_HSWORD :: Int)
+iNT64_SIZE = wORD64_SIZE
+\end{code}
+
+This tells the native code generator the size of the spill
+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 = (SIZEOF_HSWORD :: Int)
+wORD_SIZE_IN_BITS = wORD_SIZE * 8 :: 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}
-The version of the interface file format we're
-using:
+Number of bits to shift a bitfield left by in an info table.
\begin{code}
-interfaceFileFormatVersion :: Int
-interfaceFileFormatVersion = HscIfaceFileVersion
+bITMAP_BITS_SHIFT = (BITMAP_BITS_SHIFT :: Int)
\end{code}