[project @ 1999-01-26 16:16:19 by simonm]
[ghc-hetmet.git] / ghc / compiler / main / Constants.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[Constants]{Info about this compilation}
5
6 \begin{code}
7 module Constants (
8         uNFOLDING_USE_THRESHOLD,
9         uNFOLDING_CREATION_THRESHOLD,
10         iNTERFACE_UNFOLD_THRESHOLD,
11         lIBERATE_CASE_THRESHOLD,
12         uNFOLDING_CHEAP_OP_COST,
13         uNFOLDING_DEAR_OP_COST,
14         uNFOLDING_NOREP_LIT_COST,
15         uNFOLDING_CON_DISCOUNT_WEIGHT,
16         uNFOLDING_KEENESS_FACTOR,
17
18         mAX_CONTEXT_REDUCTION_DEPTH,
19         mAX_TUPLE_SIZE,
20
21         mAX_SPEC_THUNK_SIZE,
22         mAX_SPEC_FUN_SIZE,
23         mAX_SPEC_CONSTR_SIZE,
24         mAX_SPEC_SELECTEE_SIZE,
25         mAX_SPEC_AP_SIZE,
26
27         tARGET_MIN_INT, tARGET_MAX_INT,
28
29         mIN_UPD_SIZE,
30         mIN_SIZE_NonUpdHeapObject,
31
32         sTD_HDR_SIZE,
33         pROF_HDR_SIZE,
34         gRAN_HDR_SIZE,
35         tICKY_HDR_SIZE,
36         aRR_HDR_SIZE,
37
38         sTD_ITBL_SIZE,
39         pROF_ITBL_SIZE,
40         gRAN_ITBL_SIZE,
41         tICKY_ITBL_SIZE,
42
43         mAX_FAMILY_SIZE_FOR_VEC_RETURNS,
44
45         uF_SIZE,
46         sCC_UF_SIZE,
47         uF_RET,
48         uF_SU,
49         uF_UPDATEE,
50         uF_CCS,
51
52         sEQ_FRAME_SIZE,
53
54         mAX_Vanilla_REG,
55         mAX_Float_REG,
56         mAX_Double_REG,
57         mAX_Long_REG,
58
59         mAX_Real_Vanilla_REG,
60         mAX_Real_Float_REG,
61         mAX_Real_Double_REG,
62         mAX_Real_Long_REG,
63
64         oTHER_TAG,
65
66         mAX_INTLIKE, mIN_INTLIKE,
67
68         spRelToInt,
69
70         dOUBLE_SIZE,
71         iNT64_SIZE,
72         wORD64_SIZE,
73         
74         interfaceFileFormatVersion
75
76     ) where
77
78 -- This magical #include brings in all the everybody-knows-these magic
79 -- constants unfortunately, we need to be *explicit* about which one
80 -- we want; if we just hope a -I... will get the right one, we could
81 -- be in trouble.
82
83 #include "HsVersions.h"
84 #include "../includes/config.h"
85 #include "../includes/MachRegs.h"
86 #include "../includes/Constants.h"
87
88 -- import Util
89 \end{code}
90
91 All pretty arbitrary:
92
93 \begin{code}
94 mAX_TUPLE_SIZE = (37 :: Int)
95 mAX_CONTEXT_REDUCTION_DEPTH = (20 :: Int)
96 \end{code}
97
98 \begin{code}
99 uNFOLDING_USE_THRESHOLD       = ( 8 :: Int)
100 uNFOLDING_CREATION_THRESHOLD  = (30 :: Int)     -- Discounts can be big
101 iNTERFACE_UNFOLD_THRESHOLD    = (30 :: Int)
102 lIBERATE_CASE_THRESHOLD       = (10 :: Int)
103
104 uNFOLDING_CHEAP_OP_COST       = ( 1 :: Int)
105 uNFOLDING_DEAR_OP_COST        = ( 4 :: Int)
106 uNFOLDING_NOREP_LIT_COST      = ( 20 :: Int)    -- Strings can be pretty big
107 uNFOLDING_CON_DISCOUNT_WEIGHT = ( 3 :: Int)
108 uNFOLDING_KEENESS_FACTOR      = ( 2.0 :: Float)
109 \end{code}
110
111 \begin{code}
112
113 -- specialised fun/thunk/constr closure types
114 mAX_SPEC_THUNK_SIZE   = (MAX_SPEC_THUNK_SIZE :: Int)
115 mAX_SPEC_FUN_SIZE     = (MAX_SPEC_FUN_SIZE :: Int)
116 mAX_SPEC_CONSTR_SIZE  = (MAX_SPEC_CONSTR_SIZE :: Int)
117
118 -- pre-compiled thunk types
119 mAX_SPEC_SELECTEE_SIZE  = (MAX_SPEC_SELECTEE_SIZE :: Int)
120 mAX_SPEC_AP_SIZE        = (MAX_SPEC_AP_SIZE :: Int)
121
122 -- closure sizes: these do NOT include the header (see below for header sizes)
123 mIN_UPD_SIZE                    = (MIN_UPD_SIZE::Int)
124 mIN_SIZE_NonUpdHeapObject       = (MIN_NONUPD_SIZE::Int)
125 \end{code}
126
127 \begin{code}
128 tARGET_MIN_INT, tARGET_MAX_INT :: Integer
129 tARGET_MIN_INT = -536870912
130 tARGET_MAX_INT =  536870912
131 \end{code}
132  
133 Constants for semi-tagging; the tags associated with the data
134 constructors will start at 0 and go up.
135
136 \begin{code}
137 oTHER_TAG = (INFO_OTHER_TAG :: Integer) -- (-1) unevaluated, probably
138 \end{code}
139
140 \begin{code}
141 mIN_INTLIKE, mAX_INTLIKE :: Integer     -- Only used to compare with (MachInt Integer)
142 mIN_INTLIKE = MIN_INTLIKE
143 mAX_INTLIKE = MAX_INTLIKE
144 \end{code}
145
146 A little function that abstracts the stack direction.  Note that most
147 of the code generator is dependent on the stack direction anyway, so
148 changing this on its own spells certain doom.  ToDo: remove?
149
150 \begin{code}
151 -- THIS IS DIRECTION SENSITIVE!
152
153 -- stack grows down, positive virtual offsets correspond to negative
154 -- additions to the stack pointer.
155
156 spRelToInt :: Int{-VirtualSpOffset-} -> Int{-VirtualSpOffset-} -> Int
157 spRelToInt sp off = sp - off
158 \end{code}
159
160 A section of code-generator-related MAGIC CONSTANTS.
161
162 \begin{code}
163 mAX_FAMILY_SIZE_FOR_VEC_RETURNS = (MAX_VECTORED_RTN::Int)  -- pretty arbitrary
164 -- If you change this, you may need to change runtimes/standard/Update.lhc
165
166 -- The update frame sizes
167 uF_SIZE = (NOSCC_UF_SIZE::Int)
168
169 -- Same again, with profiling
170 sCC_UF_SIZE = (SCC_UF_SIZE::Int)
171
172 -- Offsets in an update frame.  They don't change with profiling!
173 uF_RET         = (UF_RET::Int)
174 uF_SU          = (UF_SU::Int)
175 uF_UPDATEE     = (UF_UPDATEE::Int)
176 uF_CCS         = (UF_CCS::Int)
177 \end{code}
178
179 \begin{code}
180 sEQ_FRAME_SIZE = (SEQ_FRAME_SIZE::Int)
181 \end{code}
182
183 \begin{code}
184 mAX_Vanilla_REG = (MAX_VANILLA_REG :: Int)
185 mAX_Float_REG   = (MAX_FLOAT_REG :: Int)
186 mAX_Double_REG  = (MAX_DOUBLE_REG :: Int)
187 mAX_Long_REG    = (MAX_LONG_REG  :: Int)
188
189 mAX_Real_Vanilla_REG    = (MAX_REAL_VANILLA_REG :: Int)
190 mAX_Real_Float_REG      = (MAX_REAL_FLOAT_REG :: Int)
191 mAX_Real_Double_REG     = (MAX_REAL_DOUBLE_REG :: Int)
192 #ifdef MAX_REAL_LONG_REG
193 mAX_Real_Long_REG       = (MAX_REAL_LONG_REG :: Int)
194 #else
195 mAX_Real_Long_REG       = (0::Int)
196 #endif
197 \end{code}
198
199 Closure header sizes.
200
201 \begin{code}
202 sTD_HDR_SIZE   = (STD_HDR_SIZE   :: Int)
203 pROF_HDR_SIZE  = (PROF_HDR_SIZE  :: Int)
204 gRAN_HDR_SIZE  = (GRAN_HDR_SIZE  :: Int)
205 tICKY_HDR_SIZE = (TICKY_HDR_SIZE :: Int)
206 aRR_HDR_SIZE   = (ARR_HDR_SIZE   :: Int)
207 \end{code}
208
209 Info Table sizes.
210
211 \begin{code}
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)
216 \end{code}
217
218 Size of a double in StgWords.
219
220 \begin{code}
221 dOUBLE_SIZE    = (DOUBLE_SIZE   :: Int)
222 wORD64_SIZE    = (WORD64_SIZE   :: Int)
223 iNT64_SIZE     = (INT64_SIZE   :: Int)
224 \end{code}
225
226 The version of the interface file format we're
227 using:
228
229 \begin{code}
230 interfaceFileFormatVersion = HscIfaceFileVersion
231 \end{code}