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,
18 mIN_SIZE_NonUpdHeapObject,
26 rESERVED_C_STACK_BYTES,
34 mAX_FAMILY_SIZE_FOR_VEC_RETURNS,
45 gRAN_SEQ_FRAME_SIZE, -- HWL
59 mAX_INTLIKE, mIN_INTLIKE,
60 mAX_CHARLIKE, mIN_CHARLIKE,
75 -- This magical #include brings in all the everybody-knows-these magic
76 -- constants unfortunately, we need to be *explicit* about which one
77 -- we want; if we just hope a -I... will get the right one, we could
80 #include "HsVersions.h"
81 #include "../includes/config.h"
82 #include "../includes/MachRegs.h"
83 #include "../includes/Constants.h"
84 #include "../includes/MachDeps.h"
85 #include "../includes/DerivedConstants.h"
93 mAX_TUPLE_SIZE = (37 :: Int)
94 mAX_CONTEXT_REDUCTION_DEPTH = (20 :: Int)
99 -- specialised fun/thunk/constr closure types
100 mAX_SPEC_THUNK_SIZE = (MAX_SPEC_THUNK_SIZE :: Int)
101 mAX_SPEC_FUN_SIZE = (MAX_SPEC_FUN_SIZE :: Int)
102 mAX_SPEC_CONSTR_SIZE = (MAX_SPEC_CONSTR_SIZE :: Int)
104 -- pre-compiled thunk types
105 mAX_SPEC_SELECTEE_SIZE = (MAX_SPEC_SELECTEE_SIZE :: Int)
106 mAX_SPEC_AP_SIZE = (MAX_SPEC_AP_SIZE :: Int)
108 -- closure sizes: these do NOT include the header (see below for header sizes)
109 mIN_UPD_SIZE = (MIN_UPD_SIZE::Int)
110 mIN_SIZE_NonUpdHeapObject = (MIN_NONUPD_SIZE::Int)
113 Constants for semi-tagging; the tags associated with the data
114 constructors will start at 0 and go up.
117 oTHER_TAG = (INFO_OTHER_TAG :: Integer) -- (-1) unevaluated, probably
121 mIN_INTLIKE, mAX_INTLIKE :: Integer -- Only used to compare with (MachInt Integer)
122 mIN_INTLIKE = MIN_INTLIKE
123 mAX_INTLIKE = MAX_INTLIKE
125 mIN_CHARLIKE, mAX_CHARLIKE :: Int -- Only used to compare with (MachChar Int)
126 mIN_CHARLIKE = MIN_CHARLIKE
127 mAX_CHARLIKE = MAX_CHARLIKE
130 A little function that abstracts the stack direction. Note that most
131 of the code generator is dependent on the stack direction anyway, so
132 changing this on its own spells certain doom. ToDo: remove?
135 -- THIS IS DIRECTION SENSITIVE!
137 -- stack grows down, positive virtual offsets correspond to negative
138 -- additions to the stack pointer.
140 spRelToInt :: Int{-VirtualSpOffset-} -> Int{-VirtualSpOffset-} -> Int
141 spRelToInt sp off = sp - off
144 A section of code-generator-related MAGIC CONSTANTS.
147 mAX_FAMILY_SIZE_FOR_VEC_RETURNS = (MAX_VECTORED_RTN::Int) -- pretty arbitrary
148 -- If you change this, you may need to change runtimes/standard/Update.lhc
150 -- The update frame sizes
151 uF_SIZE = (STD_UF_SIZE::Int)
153 -- Same again, with profiling
154 pROF_UF_SIZE = (PROF_UF_SIZE::Int)
156 -- Same again, with gransim
157 gRAN_UF_SIZE = (GRAN_UF_SIZE::Int)
159 -- Offsets in an update frame. They don't change with profiling!
160 uF_RET = (UF_RET::Int)
162 uF_UPDATEE = (UF_UPDATEE::Int)
168 sEQ_FRAME_SIZE = (STD_SEQ_FRAME_SIZE::Int)
169 pROF_SEQ_FRAME_SIZE = (PROF_SEQ_FRAME_SIZE::Int)
170 gRAN_SEQ_FRAME_SIZE = (GRAN_SEQ_FRAME_SIZE::Int)
174 mAX_Vanilla_REG = (MAX_VANILLA_REG :: Int)
175 mAX_Float_REG = (MAX_FLOAT_REG :: Int)
176 mAX_Double_REG = (MAX_DOUBLE_REG :: Int)
177 mAX_Long_REG = (MAX_LONG_REG :: Int)
179 mAX_Real_Vanilla_REG = (MAX_REAL_VANILLA_REG :: Int)
180 mAX_Real_Float_REG = (MAX_REAL_FLOAT_REG :: Int)
181 mAX_Real_Double_REG = (MAX_REAL_DOUBLE_REG :: Int)
182 #ifdef MAX_REAL_LONG_REG
183 mAX_Real_Long_REG = (MAX_REAL_LONG_REG :: Int)
185 mAX_Real_Long_REG = (0::Int)
189 Closure header sizes.
192 sTD_HDR_SIZE = (STD_HDR_SIZE :: Int)
193 pROF_HDR_SIZE = (PROF_HDR_SIZE :: Int)
194 gRAN_HDR_SIZE = (GRAN_HDR_SIZE :: Int)
195 tICKY_HDR_SIZE = (TICKY_HDR_SIZE :: Int)
196 aRR_WORDS_HDR_SIZE = (ARR_WORDS_HDR_SIZE :: Int)
197 aRR_PTRS_HDR_SIZE = (ARR_PTRS_HDR_SIZE :: Int)
203 sTD_ITBL_SIZE = (STD_ITBL_SIZE :: Int)
204 pROF_ITBL_SIZE = (PROF_ITBL_SIZE :: Int)
205 gRAN_ITBL_SIZE = (GRAN_ITBL_SIZE :: Int)
206 tICKY_ITBL_SIZE = (TICKY_ITBL_SIZE :: Int)
209 Size of a double in StgWords.
212 dOUBLE_SIZE = (SIZEOF_DOUBLE `quot` SIZEOF_HSWORD :: Int)
213 wORD64_SIZE = (8 `quot` SIZEOF_HSWORD :: Int)
214 iNT64_SIZE = wORD64_SIZE
217 This tells the native code generator the size of the spill
218 area is has available.
221 rESERVED_C_STACK_BYTES = (RESERVED_C_STACK_BYTES :: Int)
224 The amount of (Haskell) stack to leave free for saving registers when
225 returning to the scheduler.
228 rESERVED_STACK_WORDS = (RESERVED_STACK_WORDS :: Int)
231 Size of a word, in bytes
234 wORD_SIZE = (SIZEOF_HSWORD :: Int)
237 Size of a storage manager block (in bytes).
240 bLOCK_SIZE = (BLOCK_SIZE :: Int)
241 bLOCK_SIZE_W = (bLOCK_SIZE `div` wORD_SIZE :: Int)