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