Remove unused 'targetWordSize'
[ghc.git] / compiler / nativeGen / TargetReg.hs
1
2 {-# OPTIONS -fno-warn-tabs #-}
3 -- The above warning supression flag is a temporary kludge.
4 -- While working on this module you are encouraged to remove it and
5 -- detab the module (please do the detabbing in a separate patch). See
6 --     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#TabsvsSpaces
7 -- for details
8
9 -- | Hard wired things related to registers.
10 --      This is module is preventing the native code generator being able to 
11 --      emit code for non-host architectures.
12 --
13 --      TODO: Do a better job of the overloading, and eliminate this module.
14 --      We'd probably do better with a Register type class, and hook this to 
15 --      Instruction somehow.
16 --
17 --      TODO: We should also make arch specific versions of RegAlloc.Graph.TrivColorable
18
19 module TargetReg (
20         targetVirtualRegSqueeze,
21         targetRealRegSqueeze,
22         targetClassOfRealReg,
23         targetMkVirtualReg,
24         targetRegDotColor,
25         targetClassOfReg
26 )
27
28 where
29
30 #include "HsVersions.h"
31
32 import Reg
33 import RegClass
34 import Size
35
36 import Outputable
37 import Unique
38 import FastTypes
39 import Platform
40
41 import qualified X86.Regs       as X86
42 import qualified X86.RegInfo    as X86
43
44 import qualified PPC.Regs       as PPC
45
46 import qualified SPARC.Regs     as SPARC
47
48 targetVirtualRegSqueeze :: Platform -> RegClass -> VirtualReg -> FastInt
49 targetVirtualRegSqueeze platform
50     = case platformArch platform of
51       ArchX86       -> X86.virtualRegSqueeze
52       ArchX86_64    -> X86.virtualRegSqueeze
53       ArchPPC       -> PPC.virtualRegSqueeze
54       ArchSPARC     -> SPARC.virtualRegSqueeze
55       ArchPPC_64    -> panic "targetVirtualRegSqueeze ArchPPC_64"
56       ArchARM _ _ _ -> panic "targetVirtualRegSqueeze ArchARM"
57       ArchUnknown   -> panic "targetVirtualRegSqueeze ArchUnknown"
58
59 targetRealRegSqueeze :: Platform -> RegClass -> RealReg -> FastInt
60 targetRealRegSqueeze platform
61     = case platformArch platform of
62       ArchX86       -> X86.realRegSqueeze
63       ArchX86_64    -> X86.realRegSqueeze
64       ArchPPC       -> PPC.realRegSqueeze
65       ArchSPARC     -> SPARC.realRegSqueeze
66       ArchPPC_64    -> panic "targetRealRegSqueeze ArchPPC_64"
67       ArchARM _ _ _ -> panic "targetRealRegSqueeze ArchARM"
68       ArchUnknown   -> panic "targetRealRegSqueeze ArchUnknown"
69
70 targetClassOfRealReg :: Platform -> RealReg -> RegClass
71 targetClassOfRealReg platform
72     = case platformArch platform of
73       ArchX86       -> X86.classOfRealReg platform
74       ArchX86_64    -> X86.classOfRealReg platform
75       ArchPPC       -> PPC.classOfRealReg
76       ArchSPARC     -> SPARC.classOfRealReg
77       ArchPPC_64    -> panic "targetClassOfRealReg ArchPPC_64"
78       ArchARM _ _ _ -> panic "targetClassOfRealReg ArchARM"
79       ArchUnknown   -> panic "targetClassOfRealReg ArchUnknown"
80
81 targetMkVirtualReg :: Platform -> Unique -> Size -> VirtualReg
82 targetMkVirtualReg platform
83     = case platformArch platform of
84       ArchX86       -> X86.mkVirtualReg
85       ArchX86_64    -> X86.mkVirtualReg
86       ArchPPC       -> PPC.mkVirtualReg
87       ArchSPARC     -> SPARC.mkVirtualReg
88       ArchPPC_64    -> panic "targetMkVirtualReg ArchPPC_64"
89       ArchARM _ _ _ -> panic "targetMkVirtualReg ArchARM"
90       ArchUnknown   -> panic "targetMkVirtualReg ArchUnknown"
91
92 targetRegDotColor :: Platform -> RealReg -> SDoc
93 targetRegDotColor platform
94     = case platformArch platform of
95       ArchX86       -> X86.regDotColor platform
96       ArchX86_64    -> X86.regDotColor platform
97       ArchPPC       -> PPC.regDotColor
98       ArchSPARC     -> SPARC.regDotColor
99       ArchPPC_64    -> panic "targetRegDotColor ArchPPC_64"
100       ArchARM _ _ _ -> panic "targetRegDotColor ArchARM"
101       ArchUnknown   -> panic "targetRegDotColor ArchUnknown"
102
103
104 targetClassOfReg :: Platform -> Reg -> RegClass
105 targetClassOfReg platform reg
106  = case reg of
107    RegVirtual vr -> classOfVirtualReg vr
108    RegReal rr -> targetClassOfRealReg platform rr
109
110