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