[project @ 2001-12-17 18:03:08 by sewardj]
[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   | MO_8U_to_32U        -- zero extend
163   | MO_32U_to_8U        -- mask out all but lowest byte
164
165   -- Reading/writing arrays
166   | MO_ReadOSBI Int PrimRep   -- args: [base_ptr, index_value]
167   | MO_WriteOSBI Int PrimRep  -- args: [base_ptr, index_value, value_to_write]
168     -- Read/write a value :: the PrimRep
169     -- at byte address 
170     --    sizeof(machine_word)*Int + base_ptr + sizeof(PrimRep)*index_value
171     deriving Eq
172
173
174
175 -- Almost, but not quite == text . derived show
176 pprMachOp :: MachOp -> SDoc
177
178 pprMachOp MO_Nat_Add       = text "MO_Nat_Add"
179 pprMachOp MO_Nat_Sub       = text "MO_Nat_Sub"
180 pprMachOp MO_Nat_Eq        = text "MO_Nat_Eq"
181 pprMachOp MO_Nat_Ne        = text "MO_Nat_Ne"
182
183 pprMachOp MO_NatS_Ge       = text "MO_NatS_Ge"
184 pprMachOp MO_NatS_Le       = text "MO_NatS_Le"
185 pprMachOp MO_NatS_Gt       = text "MO_NatS_Gt"
186 pprMachOp MO_NatS_Lt       = text "MO_NatS_Lt"
187
188 pprMachOp MO_NatU_Ge       = text "MO_NatU_Ge"
189 pprMachOp MO_NatU_Le       = text "MO_NatU_Le"
190 pprMachOp MO_NatU_Gt       = text "MO_NatU_Gt"
191 pprMachOp MO_NatU_Lt       = text "MO_NatU_Lt"
192
193 pprMachOp MO_NatS_Mul      = text "MO_NatS_Mul"
194 pprMachOp MO_NatS_MulMayOflo = text "MO_NatS_MulMayOflo"
195 pprMachOp MO_NatS_Quot     = text "MO_NatS_Quot"
196 pprMachOp MO_NatS_Rem      = text "MO_NatS_Rem"
197 pprMachOp MO_NatS_Neg      = text "MO_NatS_Neg"
198
199 pprMachOp MO_NatU_Mul      = text "MO_NatU_Mul"
200 pprMachOp MO_NatU_Quot     = text "MO_NatU_Quot"
201 pprMachOp MO_NatU_Rem      = text "MO_NatU_Rem"
202
203 pprMachOp MO_Nat_And       = text "MO_Nat_And"
204 pprMachOp MO_Nat_Or        = text "MO_Nat_Or"
205 pprMachOp MO_Nat_Xor       = text "MO_Nat_Xor"
206 pprMachOp MO_Nat_Not       = text "MO_Nat_Not"
207 pprMachOp MO_Nat_Shl       = text "MO_Nat_Shl"
208 pprMachOp MO_Nat_Shr       = text "MO_Nat_Shr"
209 pprMachOp MO_Nat_Sar       = text "MO_Nat_Sar"
210
211 pprMachOp MO_32U_Eq        = text "MO_32U_Eq"
212 pprMachOp MO_32U_Ne        = text "MO_32U_Ne"
213 pprMachOp MO_32U_Ge        = text "MO_32U_Ge"
214 pprMachOp MO_32U_Le        = text "MO_32U_Le"
215 pprMachOp MO_32U_Gt        = text "MO_32U_Gt"
216 pprMachOp MO_32U_Lt        = text "MO_32U_Lt"
217
218 pprMachOp MO_Dbl_Eq        = text "MO_Dbl_Eq"
219 pprMachOp MO_Dbl_Ne        = text "MO_Dbl_Ne"
220 pprMachOp MO_Dbl_Ge        = text "MO_Dbl_Ge"
221 pprMachOp MO_Dbl_Le        = text "MO_Dbl_Le"
222 pprMachOp MO_Dbl_Gt        = text "MO_Dbl_Gt"
223 pprMachOp MO_Dbl_Lt        = text "MO_Dbl_Lt"
224
225 pprMachOp MO_Dbl_Add       = text "MO_Dbl_Add"
226 pprMachOp MO_Dbl_Sub       = text "MO_Dbl_Sub"
227 pprMachOp MO_Dbl_Mul       = text "MO_Dbl_Mul"
228 pprMachOp MO_Dbl_Div       = text "MO_Dbl_Div"
229 pprMachOp MO_Dbl_Pwr       = text "MO_Dbl_Pwr"
230
231 pprMachOp MO_Dbl_Sin       = text "MO_Dbl_Sin"
232 pprMachOp MO_Dbl_Cos       = text "MO_Dbl_Cos"
233 pprMachOp MO_Dbl_Tan       = text "MO_Dbl_Tan"
234 pprMachOp MO_Dbl_Sinh      = text "MO_Dbl_Sinh"
235 pprMachOp MO_Dbl_Cosh      = text "MO_Dbl_Cosh"
236 pprMachOp MO_Dbl_Tanh      = text "MO_Dbl_Tanh"
237 pprMachOp MO_Dbl_Asin      = text "MO_Dbl_Asin"
238 pprMachOp MO_Dbl_Acos      = text "MO_Dbl_Acos"
239 pprMachOp MO_Dbl_Atan      = text "MO_Dbl_Atan"
240 pprMachOp MO_Dbl_Log       = text "MO_Dbl_Log"
241 pprMachOp MO_Dbl_Exp       = text "MO_Dbl_Exp"
242 pprMachOp MO_Dbl_Sqrt      = text "MO_Dbl_Sqrt"
243 pprMachOp MO_Dbl_Neg       = text "MO_Dbl_Neg"
244
245 pprMachOp MO_Flt_Add       = text "MO_Flt_Add"
246 pprMachOp MO_Flt_Sub       = text "MO_Flt_Sub"
247 pprMachOp MO_Flt_Mul       = text "MO_Flt_Mul"
248 pprMachOp MO_Flt_Div       = text "MO_Flt_Div"
249 pprMachOp MO_Flt_Pwr       = text "MO_Flt_Pwr"
250
251 pprMachOp MO_Flt_Eq        = text "MO_Flt_Eq"
252 pprMachOp MO_Flt_Ne        = text "MO_Flt_Ne"
253 pprMachOp MO_Flt_Ge        = text "MO_Flt_Ge"
254 pprMachOp MO_Flt_Le        = text "MO_Flt_Le"
255 pprMachOp MO_Flt_Gt        = text "MO_Flt_Gt"
256 pprMachOp MO_Flt_Lt        = text "MO_Flt_Lt"
257
258 pprMachOp MO_Flt_Sin       = text "MO_Flt_Sin"
259 pprMachOp MO_Flt_Cos       = text "MO_Flt_Cos"
260 pprMachOp MO_Flt_Tan       = text "MO_Flt_Tan"
261 pprMachOp MO_Flt_Sinh      = text "MO_Flt_Sinh"
262 pprMachOp MO_Flt_Cosh      = text "MO_Flt_Cosh"
263 pprMachOp MO_Flt_Tanh      = text "MO_Flt_Tanh"
264 pprMachOp MO_Flt_Asin      = text "MO_Flt_Asin"
265 pprMachOp MO_Flt_Acos      = text "MO_Flt_Acos"
266 pprMachOp MO_Flt_Atan      = text "MO_Flt_Atan"
267 pprMachOp MO_Flt_Log       = text "MO_Flt_Log"
268 pprMachOp MO_Flt_Exp       = text "MO_Flt_Exp"
269 pprMachOp MO_Flt_Sqrt      = text "MO_Flt_Sqrt"
270 pprMachOp MO_Flt_Neg       = text "MO_Flt_Neg"
271
272 pprMachOp MO_32U_to_NatS   = text "MO_32U_to_NatS"
273 pprMachOp MO_NatS_to_32U   = text "MO_NatS_to_32U"
274
275 pprMachOp MO_NatS_to_Dbl   = text "MO_NatS_to_Dbl"
276 pprMachOp MO_Dbl_to_NatS   = text "MO_Dbl_to_NatS"
277
278 pprMachOp MO_NatS_to_Flt   = text "MO_NatS_to_Flt"
279 pprMachOp MO_Flt_to_NatS   = text "MO_Flt_to_NatS"
280
281 pprMachOp MO_NatS_to_NatU  = text "MO_NatS_to_NatU"
282 pprMachOp MO_NatU_to_NatS  = text "MO_NatU_to_NatS"
283
284 pprMachOp MO_NatS_to_NatP  = text "MO_NatS_to_NatP"
285 pprMachOp MO_NatP_to_NatS  = text "MO_NatP_to_NatS"
286 pprMachOp MO_NatU_to_NatP  = text "MO_NatU_to_NatP"
287 pprMachOp MO_NatP_to_NatU  = text "MO_NatP_to_NatU"
288
289 pprMachOp MO_Dbl_to_Flt    = text "MO_Dbl_to_Flt"
290 pprMachOp MO_Flt_to_Dbl    = text "MO_Flt_to_Dbl"
291
292 pprMachOp MO_8S_to_NatS    = text "MO_8S_to_NatS"
293 pprMachOp MO_16S_to_NatS   = text "MO_16S_to_NatS"
294 pprMachOp MO_32S_to_NatS   = text "MO_32S_to_NatS"
295
296 pprMachOp MO_8U_to_NatU    = text "MO_8U_to_NatU"
297 pprMachOp MO_16U_to_NatU   = text "MO_16U_to_NatU"
298 pprMachOp MO_32U_to_NatU   = text "MO_32U_to_NatU"
299
300 pprMachOp MO_8U_to_32U     = text "MO_8U_to_32U"
301 pprMachOp MO_32U_to_8U     = text "MO_32U_to_8U"
302
303 pprMachOp (MO_ReadOSBI offset rep)
304    = text "MO_ReadOSBI" <> parens (int offset <> comma <> ppr rep)
305 pprMachOp (MO_WriteOSBI offset rep)
306    = text "MO_WriteOSBI" <> parens (int offset <> comma <> ppr rep)
307
308
309
310 -- Non-exported helper enumeration:
311 data MO_Prop 
312    = MO_Commutable 
313    | MO_DefinitelyInline 
314    | MO_Comparison
315      deriving Eq
316
317 comm   = MO_Commutable
318 inline = MO_DefinitelyInline
319 comp   = MO_Comparison
320
321
322 -- If in doubt, return False.  This generates worse code on the
323 -- via-C route, but has no effect on the native code routes.
324 -- Remember that claims about definitely inline have to be true
325 -- regardless of what the C compiler does, so we need to be 
326 -- careful about boundary cases like sqrt which are sometimes
327 -- implemented in software and sometimes in hardware.
328 isDefinitelyInlineMachOp :: MachOp -> Bool
329 isDefinitelyInlineMachOp mop = inline `elem` snd (machOpProps mop)
330
331 -- If in doubt, return False.  This generates worse code on the
332 -- native routes, but is otherwise harmless.
333 isCommutableMachOp :: MachOp -> Bool
334 isCommutableMachOp mop = comm `elem` snd (machOpProps mop)
335
336 -- If in doubt, return False.  This generates worse code on the
337 -- native routes, but is otherwise harmless.
338 isComparisonMachOp :: MachOp -> Bool
339 isComparisonMachOp mop = comp `elem` snd (machOpProps mop)
340
341 -- Find the PrimReps for the returned value(s) of the MachOp.
342 resultRepsOfMachOp :: MachOp -> Maybe PrimRep
343 resultRepsOfMachOp mop = fst (machOpProps mop)
344
345 -- This bit does the real work.
346 machOpProps :: MachOp -> (Maybe PrimRep, [MO_Prop])
347
348 machOpProps MO_Nat_Add       = (Just IntRep, [inline, comm])
349 machOpProps MO_Nat_Sub       = (Just IntRep, [inline])
350 machOpProps MO_Nat_Eq        = (Just IntRep, [inline, comp, comm])
351 machOpProps MO_Nat_Ne        = (Just IntRep, [inline, comp, comm])
352
353 machOpProps MO_NatS_Ge       = (Just IntRep, [inline, comp])
354 machOpProps MO_NatS_Le       = (Just IntRep, [inline, comp])
355 machOpProps MO_NatS_Gt       = (Just IntRep, [inline, comp])
356 machOpProps MO_NatS_Lt       = (Just IntRep, [inline, comp])
357
358 machOpProps MO_NatU_Ge       = (Just IntRep, [inline, comp])
359 machOpProps MO_NatU_Le       = (Just IntRep, [inline, comp])
360 machOpProps MO_NatU_Gt       = (Just IntRep, [inline, comp])
361 machOpProps MO_NatU_Lt       = (Just IntRep, [inline, comp])
362
363 machOpProps MO_NatS_Mul      = (Just IntRep, [inline, comm])
364 machOpProps MO_NatS_MulMayOflo = (Just IntRep, [inline, comm])
365 machOpProps MO_NatS_Quot     = (Just IntRep, [inline])
366 machOpProps MO_NatS_Rem      = (Just IntRep, [inline])
367 machOpProps MO_NatS_Neg      = (Just IntRep, [inline])
368
369 machOpProps MO_NatU_Mul      = (Just WordRep, [inline, comm])
370 machOpProps MO_NatU_Quot     = (Just WordRep, [inline])
371 machOpProps MO_NatU_Rem      = (Just WordRep, [inline])
372
373 machOpProps MO_Nat_And       = (Just IntRep, [inline, comm])
374 machOpProps MO_Nat_Or        = (Just IntRep, [inline, comm])
375 machOpProps MO_Nat_Xor       = (Just IntRep, [inline, comm])
376 machOpProps MO_Nat_Not       = (Just IntRep, [inline])
377 machOpProps MO_Nat_Shl       = (Just IntRep, [inline])
378 machOpProps MO_Nat_Shr       = (Just IntRep, [inline])
379 machOpProps MO_Nat_Sar       = (Just IntRep, [inline])
380
381 machOpProps MO_32U_Eq        = (Just IntRep, [inline, comp, comm])
382 machOpProps MO_32U_Ne        = (Just IntRep, [inline, comp, comm])
383 machOpProps MO_32U_Ge        = (Just IntRep, [inline, comp])
384 machOpProps MO_32U_Le        = (Just IntRep, [inline, comp])
385 machOpProps MO_32U_Gt        = (Just IntRep, [inline, comp])
386 machOpProps MO_32U_Lt        = (Just IntRep, [inline, comp])
387
388 machOpProps MO_Dbl_Eq        = (Just IntRep, [inline, comp, comm])
389 machOpProps MO_Dbl_Ne        = (Just IntRep, [inline, comp, comm])
390 machOpProps MO_Dbl_Ge        = (Just IntRep, [inline, comp])
391 machOpProps MO_Dbl_Le        = (Just IntRep, [inline, comp])
392 machOpProps MO_Dbl_Gt        = (Just IntRep, [inline, comp])
393 machOpProps MO_Dbl_Lt        = (Just IntRep, [inline, comp])
394
395 machOpProps MO_Dbl_Add       = (Just DoubleRep, [inline, comm])
396 machOpProps MO_Dbl_Sub       = (Just DoubleRep, [inline])
397 machOpProps MO_Dbl_Mul       = (Just DoubleRep, [inline, comm])
398 machOpProps MO_Dbl_Div       = (Just DoubleRep, [inline])
399 machOpProps MO_Dbl_Pwr       = (Just DoubleRep, [])
400
401 machOpProps MO_Dbl_Sin       = (Just DoubleRep, [])
402 machOpProps MO_Dbl_Cos       = (Just DoubleRep, [])
403 machOpProps MO_Dbl_Tan       = (Just DoubleRep, [])
404 machOpProps MO_Dbl_Sinh      = (Just DoubleRep, [])
405 machOpProps MO_Dbl_Cosh      = (Just DoubleRep, [])
406 machOpProps MO_Dbl_Tanh      = (Just DoubleRep, [])
407 machOpProps MO_Dbl_Asin      = (Just DoubleRep, [])
408 machOpProps MO_Dbl_Acos      = (Just DoubleRep, [])
409 machOpProps MO_Dbl_Atan      = (Just DoubleRep, [])
410 machOpProps MO_Dbl_Log       = (Just DoubleRep, [])
411 machOpProps MO_Dbl_Exp       = (Just DoubleRep, [])
412 machOpProps MO_Dbl_Sqrt      = (Just DoubleRep, [])
413 machOpProps MO_Dbl_Neg       = (Just DoubleRep, [inline])
414
415 machOpProps MO_Flt_Add       = (Just FloatRep, [inline, comm])
416 machOpProps MO_Flt_Sub       = (Just FloatRep, [inline])
417 machOpProps MO_Flt_Mul       = (Just FloatRep, [inline, comm])
418 machOpProps MO_Flt_Div       = (Just FloatRep, [inline])
419 machOpProps MO_Flt_Pwr       = (Just FloatRep, [])
420
421 machOpProps MO_Flt_Eq        = (Just IntRep, [inline, comp, comm])
422 machOpProps MO_Flt_Ne        = (Just IntRep, [inline, comp, comm])
423 machOpProps MO_Flt_Ge        = (Just IntRep, [inline, comp])
424 machOpProps MO_Flt_Le        = (Just IntRep, [inline, comp])
425 machOpProps MO_Flt_Gt        = (Just IntRep, [inline, comp])
426 machOpProps MO_Flt_Lt        = (Just IntRep, [inline, comp])
427
428 machOpProps MO_Flt_Sin       = (Just FloatRep, [])
429 machOpProps MO_Flt_Cos       = (Just FloatRep, [])
430 machOpProps MO_Flt_Tan       = (Just FloatRep, [])
431 machOpProps MO_Flt_Sinh      = (Just FloatRep, [])
432 machOpProps MO_Flt_Cosh      = (Just FloatRep, [])
433 machOpProps MO_Flt_Tanh      = (Just FloatRep, [])
434 machOpProps MO_Flt_Asin      = (Just FloatRep, [])
435 machOpProps MO_Flt_Acos      = (Just FloatRep, [])
436 machOpProps MO_Flt_Atan      = (Just FloatRep, [])
437 machOpProps MO_Flt_Log       = (Just FloatRep, [])
438 machOpProps MO_Flt_Exp       = (Just FloatRep, [])
439 machOpProps MO_Flt_Sqrt      = (Just FloatRep, [])
440 machOpProps MO_Flt_Neg       = (Just FloatRep, [inline])
441
442 machOpProps MO_32U_to_NatS   = (Just IntRep, [inline])
443 machOpProps MO_NatS_to_32U   = (Just Word32Rep, [inline])
444
445 machOpProps MO_NatS_to_Dbl   = (Just DoubleRep, [inline])
446 machOpProps MO_Dbl_to_NatS   = (Just IntRep, [inline])
447
448 machOpProps MO_NatS_to_Flt   = (Just FloatRep, [inline])
449 machOpProps MO_Flt_to_NatS   = (Just IntRep, [inline])
450
451 machOpProps MO_NatS_to_NatU  = (Just WordRep, [inline])
452 machOpProps MO_NatU_to_NatS  = (Just IntRep, [inline])
453
454 machOpProps MO_NatS_to_NatP  = (Just PtrRep, [inline])
455 machOpProps MO_NatP_to_NatS  = (Just IntRep, [inline])
456 machOpProps MO_NatU_to_NatP  = (Just PtrRep, [inline])
457 machOpProps MO_NatP_to_NatU  = (Just WordRep, [inline])
458
459 machOpProps MO_Dbl_to_Flt    = (Just FloatRep, [inline])
460 machOpProps MO_Flt_to_Dbl    = (Just DoubleRep, [inline])
461
462 machOpProps MO_8S_to_NatS    = (Just IntRep, [inline])
463 machOpProps MO_16S_to_NatS   = (Just IntRep, [inline])
464 machOpProps MO_32S_to_NatS   = (Just IntRep, [inline])
465
466 machOpProps MO_8U_to_NatU    = (Just WordRep, [inline])
467 machOpProps MO_16U_to_NatU   = (Just WordRep, [inline])
468 machOpProps MO_32U_to_NatU   = (Just WordRep, [inline])
469
470 machOpProps MO_8U_to_32U     = (Just Word32Rep, [inline])
471 machOpProps MO_32U_to_8U     = (Just Word8Rep, [inline])
472
473 machOpProps (MO_ReadOSBI offset rep)  = (Just rep, [inline])
474 machOpProps (MO_WriteOSBI offset rep) = (Nothing, [inline])