[project @ 2001-12-17 16:01:44 by simonmar]
[ghc-hetmet.git] / ghc / compiler / absCSyn / MachOp.hs
1
2 module MachOp   ( MachOp(..), pprMachOp,
3                   isDefinitelyInlineMachOp, 
4                   isCommutableMachOp,
5                   isComparisonMachOp,
6                   resultRepsOfMachOp
7                  )
8 where
9
10 #include "HsVersions.h"
11
12 import PrimRep          ( PrimRep(..) )
13 import Outputable
14
15
16 {- Machine-level primops; ones which we can reasonably delegate to the
17    native code generators to handle.  Basically contains C's primops
18    and no others.
19
20    Nomenclature: all ops indicate width and signedness, where
21    appropriate.  Widths: 8/16/32/64 means the given size, obviously.
22    Nat means the operation works on STG word sized objects.
23    Signedness: S means signed, U means unsigned.  For operations where
24    signedness is irrelevant or makes no difference (for example
25    integer add), the signedness component is omitted.
26
27    An exception: NatP is a ptr-typed native word.  From the point of
28    view of the native code generators this distinction is irrelevant,
29    but the C code generator sometimes needs this info to emit the
30    right casts.  
31 -}
32
33 data MachOp
34
35   -- OPS at the native word size
36   = MO_Nat_Add          -- +
37   | MO_Nat_Sub          -- -
38   | MO_Nat_Eq
39   | MO_Nat_Ne
40
41   | MO_NatS_Ge
42   | MO_NatS_Le
43   | MO_NatS_Gt
44   | MO_NatS_Lt
45
46   | MO_NatU_Ge
47   | MO_NatU_Le
48   | MO_NatU_Gt
49   | MO_NatU_Lt
50
51   | MO_NatS_Mul         -- low word of signed *
52   | MO_NatS_MulMayOflo  -- nonzero if high word of signed * might contain useful info
53   | MO_NatS_Quot        -- signed / (same semantics as IntQuotOp)
54   | MO_NatS_Rem         -- signed % (same semantics as IntRemOp)
55   | MO_NatS_Neg         -- unary -
56
57   | MO_NatU_Mul         -- low word of unsigned *
58   | MO_NatU_Quot        -- unsigned / (same semantics as WordQuotOp)
59   | MO_NatU_Rem         -- unsigned % (same semantics as WordRemOp)
60
61   | MO_Nat_And
62   | MO_Nat_Or
63   | MO_Nat_Xor
64   | MO_Nat_Not
65   | MO_Nat_Shl
66   | MO_Nat_Shr
67   | MO_Nat_Sar
68
69   -- OPS at 32 bits regardless of word size
70   | MO_32U_Eq
71   | MO_32U_Ne
72   | MO_32U_Ge
73   | MO_32U_Le
74   | MO_32U_Gt
75   | MO_32U_Lt
76
77   -- IEEE754 Double ops
78   | MO_Dbl_Eq
79   | MO_Dbl_Ne
80   | MO_Dbl_Ge
81   | MO_Dbl_Le
82   | MO_Dbl_Gt
83   | MO_Dbl_Lt
84
85   | MO_Dbl_Add
86   | MO_Dbl_Sub
87   | MO_Dbl_Mul
88   | MO_Dbl_Div
89   | MO_Dbl_Pwr
90
91   | MO_Dbl_Sin
92   | MO_Dbl_Cos
93   | MO_Dbl_Tan
94   | MO_Dbl_Sinh
95   | MO_Dbl_Cosh
96   | MO_Dbl_Tanh
97   | MO_Dbl_Asin
98   | MO_Dbl_Acos
99   | MO_Dbl_Atan
100   | MO_Dbl_Log
101   | MO_Dbl_Exp
102   | MO_Dbl_Sqrt
103   | MO_Dbl_Neg
104
105   -- IEEE754 Float ops
106   | MO_Flt_Add
107   | MO_Flt_Sub
108   | MO_Flt_Mul
109   | MO_Flt_Div
110   | MO_Flt_Pwr
111
112   | MO_Flt_Eq
113   | MO_Flt_Ne
114   | MO_Flt_Ge
115   | MO_Flt_Le
116   | MO_Flt_Gt
117   | MO_Flt_Lt
118
119   | MO_Flt_Sin
120   | MO_Flt_Cos
121   | MO_Flt_Tan
122   | MO_Flt_Sinh
123   | MO_Flt_Cosh
124   | MO_Flt_Tanh
125   | MO_Flt_Asin
126   | MO_Flt_Acos
127   | MO_Flt_Atan
128   | MO_Flt_Log
129   | MO_Flt_Exp
130   | MO_Flt_Neg
131   | MO_Flt_Sqrt
132
133   -- Conversions.  Some of these are NOPs, in which case they
134   -- are here usually to placate the C code generator.
135   | MO_32U_to_NatS
136   | MO_NatS_to_32U
137
138   | MO_NatS_to_Dbl
139   | MO_Dbl_to_NatS
140
141   | MO_NatS_to_Flt
142   | MO_Flt_to_NatS
143
144   | MO_NatS_to_NatU
145   | MO_NatU_to_NatS
146
147   | MO_NatS_to_NatP
148   | MO_NatP_to_NatS
149   | MO_NatU_to_NatP
150   | MO_NatP_to_NatU
151
152   | MO_Dbl_to_Flt
153   | MO_Flt_to_Dbl
154
155   | MO_8S_to_NatS
156   | MO_16S_to_NatS
157   | MO_32S_to_NatS
158   | MO_8U_to_NatU
159   | MO_16U_to_NatU
160   | MO_32U_to_NatU
161
162   -- Reading/writing arrays
163   | MO_ReadOSBI Int PrimRep   -- args: [base_ptr, index_value]
164   | MO_WriteOSBI Int PrimRep  -- args: [base_ptr, index_value, value_to_write]
165     -- Read/write a value :: the PrimRep
166     -- at byte address 
167     --    sizeof(machine_word)*Int + base_ptr + sizeof(PrimRep)*index_value
168     deriving Eq
169
170
171
172 -- Almost, but not quite == text . derived show
173 pprMachOp :: MachOp -> SDoc
174
175 pprMachOp MO_Nat_Add       = text "MO_Nat_Add"
176 pprMachOp MO_Nat_Sub       = text "MO_Nat_Sub"
177 pprMachOp MO_Nat_Eq        = text "MO_Nat_Eq"
178 pprMachOp MO_Nat_Ne        = text "MO_Nat_Ne"
179
180 pprMachOp MO_NatS_Ge       = text "MO_NatS_Ge"
181 pprMachOp MO_NatS_Le       = text "MO_NatS_Le"
182 pprMachOp MO_NatS_Gt       = text "MO_NatS_Gt"
183 pprMachOp MO_NatS_Lt       = text "MO_NatS_Lt"
184
185 pprMachOp MO_NatU_Ge       = text "MO_NatU_Ge"
186 pprMachOp MO_NatU_Le       = text "MO_NatU_Le"
187 pprMachOp MO_NatU_Gt       = text "MO_NatU_Gt"
188 pprMachOp MO_NatU_Lt       = text "MO_NatU_Lt"
189
190 pprMachOp MO_NatS_Mul      = text "MO_NatS_Mul"
191 pprMachOp MO_NatS_MulMayOflo = text "MO_NatS_MulMayOflo"
192 pprMachOp MO_NatS_Quot     = text "MO_NatS_Quot"
193 pprMachOp MO_NatS_Rem      = text "MO_NatS_Rem"
194 pprMachOp MO_NatS_Neg      = text "MO_NatS_Neg"
195
196 pprMachOp MO_NatU_Mul      = text "MO_NatU_Mul"
197 pprMachOp MO_NatU_Quot     = text "MO_NatU_Quot"
198 pprMachOp MO_NatU_Rem      = text "MO_NatU_Rem"
199
200 pprMachOp MO_Nat_And       = text "MO_Nat_And"
201 pprMachOp MO_Nat_Or        = text "MO_Nat_Or"
202 pprMachOp MO_Nat_Xor       = text "MO_Nat_Xor"
203 pprMachOp MO_Nat_Not       = text "MO_Nat_Not"
204 pprMachOp MO_Nat_Shl       = text "MO_Nat_Shl"
205 pprMachOp MO_Nat_Shr       = text "MO_Nat_Shr"
206 pprMachOp MO_Nat_Sar       = text "MO_Nat_Sar"
207
208 pprMachOp MO_32U_Eq        = text "MO_32U_Eq"
209 pprMachOp MO_32U_Ne        = text "MO_32U_Ne"
210 pprMachOp MO_32U_Ge        = text "MO_32U_Ge"
211 pprMachOp MO_32U_Le        = text "MO_32U_Le"
212 pprMachOp MO_32U_Gt        = text "MO_32U_Gt"
213 pprMachOp MO_32U_Lt        = text "MO_32U_Lt"
214
215 pprMachOp MO_Dbl_Eq        = text "MO_Dbl_Eq"
216 pprMachOp MO_Dbl_Ne        = text "MO_Dbl_Ne"
217 pprMachOp MO_Dbl_Ge        = text "MO_Dbl_Ge"
218 pprMachOp MO_Dbl_Le        = text "MO_Dbl_Le"
219 pprMachOp MO_Dbl_Gt        = text "MO_Dbl_Gt"
220 pprMachOp MO_Dbl_Lt        = text "MO_Dbl_Lt"
221
222 pprMachOp MO_Dbl_Add       = text "MO_Dbl_Add"
223 pprMachOp MO_Dbl_Sub       = text "MO_Dbl_Sub"
224 pprMachOp MO_Dbl_Mul       = text "MO_Dbl_Mul"
225 pprMachOp MO_Dbl_Div       = text "MO_Dbl_Div"
226 pprMachOp MO_Dbl_Pwr       = text "MO_Dbl_Pwr"
227
228 pprMachOp MO_Dbl_Sin       = text "MO_Dbl_Sin"
229 pprMachOp MO_Dbl_Cos       = text "MO_Dbl_Cos"
230 pprMachOp MO_Dbl_Tan       = text "MO_Dbl_Tan"
231 pprMachOp MO_Dbl_Sinh      = text "MO_Dbl_Sinh"
232 pprMachOp MO_Dbl_Cosh      = text "MO_Dbl_Cosh"
233 pprMachOp MO_Dbl_Tanh      = text "MO_Dbl_Tanh"
234 pprMachOp MO_Dbl_Asin      = text "MO_Dbl_Asin"
235 pprMachOp MO_Dbl_Acos      = text "MO_Dbl_Acos"
236 pprMachOp MO_Dbl_Atan      = text "MO_Dbl_Atan"
237 pprMachOp MO_Dbl_Log       = text "MO_Dbl_Log"
238 pprMachOp MO_Dbl_Exp       = text "MO_Dbl_Exp"
239 pprMachOp MO_Dbl_Sqrt      = text "MO_Dbl_Sqrt"
240 pprMachOp MO_Dbl_Neg       = text "MO_Dbl_Neg"
241
242 pprMachOp MO_Flt_Add       = text "MO_Flt_Add"
243 pprMachOp MO_Flt_Sub       = text "MO_Flt_Sub"
244 pprMachOp MO_Flt_Mul       = text "MO_Flt_Mul"
245 pprMachOp MO_Flt_Div       = text "MO_Flt_Div"
246 pprMachOp MO_Flt_Pwr       = text "MO_Flt_Pwr"
247
248 pprMachOp MO_Flt_Eq        = text "MO_Flt_Eq"
249 pprMachOp MO_Flt_Ne        = text "MO_Flt_Ne"
250 pprMachOp MO_Flt_Ge        = text "MO_Flt_Ge"
251 pprMachOp MO_Flt_Le        = text "MO_Flt_Le"
252 pprMachOp MO_Flt_Gt        = text "MO_Flt_Gt"
253 pprMachOp MO_Flt_Lt        = text "MO_Flt_Lt"
254
255 pprMachOp MO_Flt_Sin       = text "MO_Flt_Sin"
256 pprMachOp MO_Flt_Cos       = text "MO_Flt_Cos"
257 pprMachOp MO_Flt_Tan       = text "MO_Flt_Tan"
258 pprMachOp MO_Flt_Sinh      = text "MO_Flt_Sinh"
259 pprMachOp MO_Flt_Cosh      = text "MO_Flt_Cosh"
260 pprMachOp MO_Flt_Tanh      = text "MO_Flt_Tanh"
261 pprMachOp MO_Flt_Asin      = text "MO_Flt_Asin"
262 pprMachOp MO_Flt_Acos      = text "MO_Flt_Acos"
263 pprMachOp MO_Flt_Atan      = text "MO_Flt_Atan"
264 pprMachOp MO_Flt_Log       = text "MO_Flt_Log"
265 pprMachOp MO_Flt_Exp       = text "MO_Flt_Exp"
266 pprMachOp MO_Flt_Sqrt      = text "MO_Flt_Sqrt"
267 pprMachOp MO_Flt_Neg       = text "MO_Flt_Neg"
268
269 pprMachOp MO_32U_to_NatS   = text "MO_32U_to_NatS"
270 pprMachOp MO_NatS_to_32U   = text "MO_NatS_to_32U"
271
272 pprMachOp MO_NatS_to_Dbl   = text "MO_NatS_to_Dbl"
273 pprMachOp MO_Dbl_to_NatS   = text "MO_Dbl_to_NatS"
274
275 pprMachOp MO_NatS_to_Flt   = text "MO_NatS_to_Flt"
276 pprMachOp MO_Flt_to_NatS   = text "MO_Flt_to_NatS"
277
278 pprMachOp MO_NatS_to_NatU  = text "MO_NatS_to_NatU"
279 pprMachOp MO_NatU_to_NatS  = text "MO_NatU_to_NatS"
280
281 pprMachOp MO_NatS_to_NatP  = text "MO_NatS_to_NatP"
282 pprMachOp MO_NatP_to_NatS  = text "MO_NatP_to_NatS"
283 pprMachOp MO_NatU_to_NatP  = text "MO_NatU_to_NatP"
284 pprMachOp MO_NatP_to_NatU  = text "MO_NatP_to_NatU"
285
286 pprMachOp MO_Dbl_to_Flt    = text "MO_Dbl_to_Flt"
287 pprMachOp MO_Flt_to_Dbl    = text "MO_Flt_to_Dbl"
288
289 pprMachOp MO_8S_to_NatS    = text "MO_8S_to_NatS"
290 pprMachOp MO_16S_to_NatS   = text "MO_16S_to_NatS"
291 pprMachOp MO_32S_to_NatS   = text "MO_32S_to_NatS"
292
293 pprMachOp MO_8U_to_NatU    = text "MO_8U_to_NatU"
294 pprMachOp MO_16U_to_NatU   = text "MO_16U_to_NatU"
295 pprMachOp MO_32U_to_NatU   = text "MO_32U_to_NatU"
296
297 pprMachOp (MO_ReadOSBI offset rep)
298    = text "MO_ReadOSBI" <> parens (int offset <> comma <> ppr rep)
299 pprMachOp (MO_WriteOSBI offset rep)
300    = text "MO_WriteOSBI" <> parens (int offset <> comma <> ppr rep)
301
302
303
304 -- Non-exported helper enumeration:
305 data MO_Prop 
306    = MO_Commutable 
307    | MO_DefinitelyInline 
308    | MO_Comparison
309      deriving Eq
310
311 comm   = MO_Commutable
312 inline = MO_DefinitelyInline
313 comp   = MO_Comparison
314
315
316 -- If in doubt, return False.  This generates worse code on the
317 -- via-C route, but has no effect on the native code routes.
318 -- Remember that claims about definitely inline have to be true
319 -- regardless of what the C compiler does, so we need to be 
320 -- careful about boundary cases like sqrt which are sometimes
321 -- implemented in software and sometimes in hardware.
322 isDefinitelyInlineMachOp :: MachOp -> Bool
323 isDefinitelyInlineMachOp mop = inline `elem` snd (machOpProps mop)
324
325 -- If in doubt, return False.  This generates worse code on the
326 -- native routes, but is otherwise harmless.
327 isCommutableMachOp :: MachOp -> Bool
328 isCommutableMachOp mop = comm `elem` snd (machOpProps mop)
329
330 -- If in doubt, return False.  This generates worse code on the
331 -- native routes, but is otherwise harmless.
332 isComparisonMachOp :: MachOp -> Bool
333 isComparisonMachOp mop = comp `elem` snd (machOpProps mop)
334
335 -- Find the PrimReps for the returned value(s) of the MachOp.
336 resultRepsOfMachOp :: MachOp -> Maybe PrimRep
337 resultRepsOfMachOp mop = fst (machOpProps mop)
338
339 -- This bit does the real work.
340 machOpProps :: MachOp -> (Maybe PrimRep, [MO_Prop])
341
342 machOpProps MO_Nat_Add       = (Just IntRep, [inline, comm])
343 machOpProps MO_Nat_Sub       = (Just IntRep, [inline])
344 machOpProps MO_Nat_Eq        = (Just IntRep, [inline, comp, comm])
345 machOpProps MO_Nat_Ne        = (Just IntRep, [inline, comp, comm])
346
347 machOpProps MO_NatS_Ge       = (Just IntRep, [inline, comp])
348 machOpProps MO_NatS_Le       = (Just IntRep, [inline, comp])
349 machOpProps MO_NatS_Gt       = (Just IntRep, [inline, comp])
350 machOpProps MO_NatS_Lt       = (Just IntRep, [inline, comp])
351
352 machOpProps MO_NatU_Ge       = (Just IntRep, [inline, comp])
353 machOpProps MO_NatU_Le       = (Just IntRep, [inline, comp])
354 machOpProps MO_NatU_Gt       = (Just IntRep, [inline, comp])
355 machOpProps MO_NatU_Lt       = (Just IntRep, [inline, comp])
356
357 machOpProps MO_NatS_Mul      = (Just IntRep, [inline, comm])
358 machOpProps MO_NatS_MulMayOflo = (Just IntRep, [inline, comm])
359 machOpProps MO_NatS_Quot     = (Just IntRep, [inline])
360 machOpProps MO_NatS_Rem      = (Just IntRep, [inline])
361 machOpProps MO_NatS_Neg      = (Just IntRep, [inline])
362
363 machOpProps MO_NatU_Mul      = (Just WordRep, [inline, comm])
364 machOpProps MO_NatU_Quot     = (Just WordRep, [inline])
365 machOpProps MO_NatU_Rem      = (Just WordRep, [inline])
366
367 machOpProps MO_Nat_And       = (Just IntRep, [inline, comm])
368 machOpProps MO_Nat_Or        = (Just IntRep, [inline, comm])
369 machOpProps MO_Nat_Xor       = (Just IntRep, [inline, comm])
370 machOpProps MO_Nat_Not       = (Just IntRep, [inline])
371 machOpProps MO_Nat_Shl       = (Just IntRep, [inline])
372 machOpProps MO_Nat_Shr       = (Just IntRep, [inline])
373 machOpProps MO_Nat_Sar       = (Just IntRep, [inline])
374
375 machOpProps MO_32U_Eq        = (Just IntRep, [inline, comp, comm])
376 machOpProps MO_32U_Ne        = (Just IntRep, [inline, comp, comm])
377 machOpProps MO_32U_Ge        = (Just IntRep, [inline, comp])
378 machOpProps MO_32U_Le        = (Just IntRep, [inline, comp])
379 machOpProps MO_32U_Gt        = (Just IntRep, [inline, comp])
380 machOpProps MO_32U_Lt        = (Just IntRep, [inline, comp])
381
382 machOpProps MO_Dbl_Eq        = (Just IntRep, [inline, comp, comm])
383 machOpProps MO_Dbl_Ne        = (Just IntRep, [inline, comp, comm])
384 machOpProps MO_Dbl_Ge        = (Just IntRep, [inline, comp])
385 machOpProps MO_Dbl_Le        = (Just IntRep, [inline, comp])
386 machOpProps MO_Dbl_Gt        = (Just IntRep, [inline, comp])
387 machOpProps MO_Dbl_Lt        = (Just IntRep, [inline, comp])
388
389 machOpProps MO_Dbl_Add       = (Just DoubleRep, [inline, comm])
390 machOpProps MO_Dbl_Sub       = (Just DoubleRep, [inline])
391 machOpProps MO_Dbl_Mul       = (Just DoubleRep, [inline, comm])
392 machOpProps MO_Dbl_Div       = (Just DoubleRep, [inline])
393 machOpProps MO_Dbl_Pwr       = (Just DoubleRep, [])
394
395 machOpProps MO_Dbl_Sin       = (Just DoubleRep, [])
396 machOpProps MO_Dbl_Cos       = (Just DoubleRep, [])
397 machOpProps MO_Dbl_Tan       = (Just DoubleRep, [])
398 machOpProps MO_Dbl_Sinh      = (Just DoubleRep, [])
399 machOpProps MO_Dbl_Cosh      = (Just DoubleRep, [])
400 machOpProps MO_Dbl_Tanh      = (Just DoubleRep, [])
401 machOpProps MO_Dbl_Asin      = (Just DoubleRep, [])
402 machOpProps MO_Dbl_Acos      = (Just DoubleRep, [])
403 machOpProps MO_Dbl_Atan      = (Just DoubleRep, [])
404 machOpProps MO_Dbl_Log       = (Just DoubleRep, [])
405 machOpProps MO_Dbl_Exp       = (Just DoubleRep, [])
406 machOpProps MO_Dbl_Sqrt      = (Just DoubleRep, [])
407 machOpProps MO_Dbl_Neg       = (Just DoubleRep, [inline])
408
409 machOpProps MO_Flt_Add       = (Just FloatRep, [inline, comm])
410 machOpProps MO_Flt_Sub       = (Just FloatRep, [inline])
411 machOpProps MO_Flt_Mul       = (Just FloatRep, [inline, comm])
412 machOpProps MO_Flt_Div       = (Just FloatRep, [inline])
413 machOpProps MO_Flt_Pwr       = (Just FloatRep, [])
414
415 machOpProps MO_Flt_Eq        = (Just IntRep, [inline, comp, comm])
416 machOpProps MO_Flt_Ne        = (Just IntRep, [inline, comp, comm])
417 machOpProps MO_Flt_Ge        = (Just IntRep, [inline, comp])
418 machOpProps MO_Flt_Le        = (Just IntRep, [inline, comp])
419 machOpProps MO_Flt_Gt        = (Just IntRep, [inline, comp])
420 machOpProps MO_Flt_Lt        = (Just IntRep, [inline, comp])
421
422 machOpProps MO_Flt_Sin       = (Just FloatRep, [])
423 machOpProps MO_Flt_Cos       = (Just FloatRep, [])
424 machOpProps MO_Flt_Tan       = (Just FloatRep, [])
425 machOpProps MO_Flt_Sinh      = (Just FloatRep, [])
426 machOpProps MO_Flt_Cosh      = (Just FloatRep, [])
427 machOpProps MO_Flt_Tanh      = (Just FloatRep, [])
428 machOpProps MO_Flt_Asin      = (Just FloatRep, [])
429 machOpProps MO_Flt_Acos      = (Just FloatRep, [])
430 machOpProps MO_Flt_Atan      = (Just FloatRep, [])
431 machOpProps MO_Flt_Log       = (Just FloatRep, [])
432 machOpProps MO_Flt_Exp       = (Just FloatRep, [])
433 machOpProps MO_Flt_Sqrt      = (Just FloatRep, [])
434 machOpProps MO_Flt_Neg       = (Just FloatRep, [inline])
435
436 machOpProps MO_32U_to_NatS   = (Just IntRep, [inline])
437 machOpProps MO_NatS_to_32U   = (Just WordRep, [inline])
438
439 machOpProps MO_NatS_to_Dbl   = (Just DoubleRep, [inline])
440 machOpProps MO_Dbl_to_NatS   = (Just IntRep, [inline])
441
442 machOpProps MO_NatS_to_Flt   = (Just FloatRep, [inline])
443 machOpProps MO_Flt_to_NatS   = (Just IntRep, [inline])
444
445 machOpProps MO_NatS_to_NatU  = (Just WordRep, [inline])
446 machOpProps MO_NatU_to_NatS  = (Just IntRep, [inline])
447
448 machOpProps MO_NatS_to_NatP  = (Just PtrRep, [inline])
449 machOpProps MO_NatP_to_NatS  = (Just IntRep, [inline])
450 machOpProps MO_NatU_to_NatP  = (Just PtrRep, [inline])
451 machOpProps MO_NatP_to_NatU  = (Just WordRep, [inline])
452
453 machOpProps MO_Dbl_to_Flt    = (Just FloatRep, [inline])
454 machOpProps MO_Flt_to_Dbl    = (Just DoubleRep, [inline])
455
456 machOpProps MO_8S_to_NatS    = (Just IntRep, [inline])
457 machOpProps MO_16S_to_NatS   = (Just IntRep, [inline])
458 machOpProps MO_32S_to_NatS   = (Just IntRep, [inline])
459
460 machOpProps MO_8U_to_NatU    = (Just WordRep, [inline])
461 machOpProps MO_16U_to_NatU   = (Just WordRep, [inline])
462 machOpProps MO_32U_to_NatU   = (Just WordRep, [inline])
463
464 machOpProps (MO_ReadOSBI offset rep)  = (Just rep, [inline])
465 machOpProps (MO_WriteOSBI offset rep) = (Nothing, [inline])
466
467
468