2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section[Constants]{Info about this compilation}
7 module Constants (module Constants) where
9 import Data.Bits (shiftL)
11 -- This magical #include brings in all the everybody-knows-these magic
12 -- constants unfortunately, we need to be *explicit* about which one
13 -- we want; if we just hope a -I... will get the right one, we could
16 #include "HsVersions.h"
17 #include "../includes/MachRegs.h"
18 #include "../includes/Constants.h"
19 #include "../includes/MachDeps.h"
20 #include "../includes/DerivedConstants.h"
28 mAX_TUPLE_SIZE = (62 :: Int) -- Should really match the number
29 -- of decls in Data.Tuple
30 mAX_CONTEXT_REDUCTION_DEPTH = (20 :: Int)
35 -- specialised fun/thunk/constr closure types
36 mAX_SPEC_THUNK_SIZE = (MAX_SPEC_THUNK_SIZE :: Int)
37 mAX_SPEC_FUN_SIZE = (MAX_SPEC_FUN_SIZE :: Int)
38 mAX_SPEC_CONSTR_SIZE = (MAX_SPEC_CONSTR_SIZE :: Int)
40 -- pre-compiled thunk types
41 mAX_SPEC_SELECTEE_SIZE = (MAX_SPEC_SELECTEE_SIZE :: Int)
42 mAX_SPEC_AP_SIZE = (MAX_SPEC_AP_SIZE :: Int)
44 -- closure sizes: these do NOT include the header (see below for header sizes)
45 mIN_PAYLOAD_SIZE = (MIN_PAYLOAD_SIZE::Int)
49 mIN_INTLIKE, mAX_INTLIKE :: Int
50 mIN_INTLIKE = MIN_INTLIKE
51 mAX_INTLIKE = MAX_INTLIKE
53 mIN_CHARLIKE, mAX_CHARLIKE :: Int
54 mIN_CHARLIKE = MIN_CHARLIKE
55 mAX_CHARLIKE = MAX_CHARLIKE
58 A section of code-generator-related MAGIC CONSTANTS.
61 mAX_Vanilla_REG = (MAX_VANILLA_REG :: Int)
62 mAX_Float_REG = (MAX_FLOAT_REG :: Int)
63 mAX_Double_REG = (MAX_DOUBLE_REG :: Int)
64 mAX_Long_REG = (MAX_LONG_REG :: Int)
66 mAX_Real_Vanilla_REG = (MAX_REAL_VANILLA_REG :: Int)
67 mAX_Real_Float_REG = (MAX_REAL_FLOAT_REG :: Int)
68 mAX_Real_Double_REG = (MAX_REAL_DOUBLE_REG :: Int)
69 #ifdef MAX_REAL_LONG_REG
70 mAX_Real_Long_REG = (MAX_REAL_LONG_REG :: Int)
72 mAX_Real_Long_REG = (0::Int)
79 sTD_HDR_SIZE = (STD_HDR_SIZE :: Int)
80 pROF_HDR_SIZE = (PROF_HDR_SIZE :: Int)
81 gRAN_HDR_SIZE = (GRAN_HDR_SIZE :: Int)
84 Size of a double in StgWords.
87 dOUBLE_SIZE = SIZEOF_DOUBLE :: Int
88 wORD64_SIZE = 8 :: Int
89 iNT64_SIZE = wORD64_SIZE
92 This tells the native code generator the size of the spill
93 area is has available.
96 rESERVED_C_STACK_BYTES = (RESERVED_C_STACK_BYTES :: Int)
99 The amount of (Haskell) stack to leave free for saving registers when
100 returning to the scheduler.
103 rESERVED_STACK_WORDS = (RESERVED_STACK_WORDS :: Int)
106 Size of a word, in bytes
109 wORD_SIZE = (SIZEOF_HSWORD :: Int)
110 wORD_SIZE_IN_BITS = wORD_SIZE * 8 :: Int
113 Amount of pointer bits used for semi-tagging constructor closures
116 tAG_BITS = (TAG_BITS :: Int)
117 tAG_MASK = ((1 `shiftL` tAG_BITS) - 1) :: Int
118 mAX_PTR_TAG = tAG_MASK :: Int
121 Size of a C int, in bytes. May be smaller than wORD_SIZE.
124 cINT_SIZE = (SIZEOF_INT :: Int)
127 Size of a storage manager block (in bytes).
130 bLOCK_SIZE = (BLOCK_SIZE :: Int)
131 bLOCK_SIZE_W = (bLOCK_SIZE `quot` wORD_SIZE :: Int)
134 Number of bits to shift a bitfield left by in an info table.
137 bITMAP_BITS_SHIFT = (BITMAP_BITS_SHIFT :: Int)
140 Constants derived from headers in ghc/includes, generated by the program
141 ../includes/mkDerivedConstants.c.
144 #include "../includes/GHCConstants.h"