2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section[Constants]{Info about this compilation}
8 mAX_CONTEXT_REDUCTION_DEPTH,
14 mAX_SPEC_SELECTEE_SIZE,
17 tARGET_MIN_INT, tARGET_MAX_INT,
20 mIN_SIZE_NonUpdHeapObject,
28 rESERVED_C_STACK_BYTES,
35 mAX_FAMILY_SIZE_FOR_VEC_RETURNS,
47 gRAN_SEQ_FRAME_SIZE, -- HWL
61 mAX_INTLIKE, mIN_INTLIKE,
69 interfaceFileFormatVersion
73 -- This magical #include brings in all the everybody-knows-these magic
74 -- constants unfortunately, we need to be *explicit* about which one
75 -- we want; if we just hope a -I... will get the right one, we could
78 #include "HsVersions.h"
79 #include "../includes/config.h"
80 #include "../includes/MachRegs.h"
81 #include "../includes/Constants.h"
89 mAX_TUPLE_SIZE = (37 :: Int)
90 mAX_CONTEXT_REDUCTION_DEPTH = (20 :: Int)
95 -- specialised fun/thunk/constr closure types
96 mAX_SPEC_THUNK_SIZE = (MAX_SPEC_THUNK_SIZE :: Int)
97 mAX_SPEC_FUN_SIZE = (MAX_SPEC_FUN_SIZE :: Int)
98 mAX_SPEC_CONSTR_SIZE = (MAX_SPEC_CONSTR_SIZE :: Int)
100 -- pre-compiled thunk types
101 mAX_SPEC_SELECTEE_SIZE = (MAX_SPEC_SELECTEE_SIZE :: Int)
102 mAX_SPEC_AP_SIZE = (MAX_SPEC_AP_SIZE :: Int)
104 -- closure sizes: these do NOT include the header (see below for header sizes)
105 mIN_UPD_SIZE = (MIN_UPD_SIZE::Int)
106 mIN_SIZE_NonUpdHeapObject = (MIN_NONUPD_SIZE::Int)
109 If we're compiling with GHC (and we're not cross-compiling), then we
110 know that minBound and maxBound :: Int are the right values for the
111 target architecture. Otherwise, we assume -2^31 and 2^31-1
112 respectively (which will be wrong on a 64-bit machine).
115 tARGET_MIN_INT, tARGET_MAX_INT :: Integer
116 #if __GLASGOW_HASKELL__
117 tARGET_MIN_INT = toInteger (minBound :: Int)
118 tARGET_MAX_INT = toInteger (maxBound :: Int)
120 tARGET_MIN_INT = -2147483648
121 tARGET_MAX_INT = 2147483647
125 Constants for semi-tagging; the tags associated with the data
126 constructors will start at 0 and go up.
129 oTHER_TAG = (INFO_OTHER_TAG :: Integer) -- (-1) unevaluated, probably
133 mIN_INTLIKE, mAX_INTLIKE :: Integer -- Only used to compare with (MachInt Integer)
134 mIN_INTLIKE = MIN_INTLIKE
135 mAX_INTLIKE = MAX_INTLIKE
138 A little function that abstracts the stack direction. Note that most
139 of the code generator is dependent on the stack direction anyway, so
140 changing this on its own spells certain doom. ToDo: remove?
143 -- THIS IS DIRECTION SENSITIVE!
145 -- stack grows down, positive virtual offsets correspond to negative
146 -- additions to the stack pointer.
148 spRelToInt :: Int{-VirtualSpOffset-} -> Int{-VirtualSpOffset-} -> Int
149 spRelToInt sp off = sp - off
152 A section of code-generator-related MAGIC CONSTANTS.
155 mAX_FAMILY_SIZE_FOR_VEC_RETURNS = (MAX_VECTORED_RTN::Int) -- pretty arbitrary
156 -- If you change this, you may need to change runtimes/standard/Update.lhc
158 -- The update frame sizes
159 uF_SIZE = (NOSCC_UF_SIZE::Int)
161 -- Same again, with profiling
162 sCC_UF_SIZE = (SCC_UF_SIZE::Int)
164 -- Same again, with gransim
165 gRAN_UF_SIZE = (GRAN_UF_SIZE::Int)
167 -- Offsets in an update frame. They don't change with profiling!
168 uF_RET = (UF_RET::Int)
170 uF_UPDATEE = (UF_UPDATEE::Int)
171 uF_CCS = (UF_CCS::Int)
177 sEQ_FRAME_SIZE = (NOSCC_SEQ_FRAME_SIZE::Int)
178 sCC_SEQ_FRAME_SIZE = (SCC_SEQ_FRAME_SIZE::Int)
179 gRAN_SEQ_FRAME_SIZE = (GRAN_SEQ_FRAME_SIZE::Int)
183 mAX_Vanilla_REG = (MAX_VANILLA_REG :: Int)
184 mAX_Float_REG = (MAX_FLOAT_REG :: Int)
185 mAX_Double_REG = (MAX_DOUBLE_REG :: Int)
186 mAX_Long_REG = (MAX_LONG_REG :: Int)
188 mAX_Real_Vanilla_REG = (MAX_REAL_VANILLA_REG :: Int)
189 mAX_Real_Float_REG = (MAX_REAL_FLOAT_REG :: Int)
190 mAX_Real_Double_REG = (MAX_REAL_DOUBLE_REG :: Int)
191 #ifdef MAX_REAL_LONG_REG
192 mAX_Real_Long_REG = (MAX_REAL_LONG_REG :: Int)
194 mAX_Real_Long_REG = (0::Int)
198 Closure header sizes.
201 sTD_HDR_SIZE = (STD_HDR_SIZE :: Int)
202 pROF_HDR_SIZE = (PROF_HDR_SIZE :: Int)
203 gRAN_HDR_SIZE = (GRAN_HDR_SIZE :: Int)
204 tICKY_HDR_SIZE = (TICKY_HDR_SIZE :: Int)
205 aRR_WORDS_HDR_SIZE = (ARR_WORDS_HDR_SIZE :: Int)
206 aRR_PTRS_HDR_SIZE = (ARR_PTRS_HDR_SIZE :: Int)
212 sTD_ITBL_SIZE = (STD_ITBL_SIZE :: Int)
213 pROF_ITBL_SIZE = (PROF_ITBL_SIZE :: Int)
214 gRAN_ITBL_SIZE = (GRAN_ITBL_SIZE :: Int)
215 tICKY_ITBL_SIZE = (TICKY_ITBL_SIZE :: Int)
218 Size of a double in StgWords.
221 dOUBLE_SIZE = (DOUBLE_SIZE :: Int)
222 wORD64_SIZE = (WORD64_SIZE :: Int)
223 iNT64_SIZE = (INT64_SIZE :: Int)
226 The version of the interface file format we're
230 interfaceFileFormatVersion :: Int
231 interfaceFileFormatVersion = HscIfaceFileVersion
234 This tells the native code generator the size of the spill
235 area is has available.
238 rESERVED_C_STACK_BYTES = (RESERVED_C_STACK_BYTES :: Int)