2 -- | Hard wired things related to registers.
3 -- This is module is preventing the native code generator being able to
4 -- emit code for non-host architectures.
6 -- TODO: Do a better job of the overloading, and eliminate this module.
7 -- We'd probably do better with a Register type class, and hook this to
8 -- Instruction somehow.
10 -- TODO: We should also make arch specific versions of RegAlloc.Graph.TrivColorable
13 targetVirtualRegSqueeze,
24 #include "HsVersions.h"
30 import CmmExpr (wordWidth)
36 #if i386_TARGET_ARCH || x86_64_TARGET_ARCH
37 import qualified X86.Regs as X86
38 import qualified X86.RegInfo as X86
40 #elif powerpc_TARGET_ARCH
41 import qualified PPC.Regs as PPC
42 import qualified PPC.RegInfo as PPC
44 #elif sparc_TARGET_ARCH
45 import qualified SPARC.Regs as SPARC
48 #error "RegAlloc.Graph.TargetReg: not defined"
51 targetVirtualRegSqueeze :: RegClass -> VirtualReg -> FastInt
52 targetRealRegSqueeze :: RegClass -> RealReg -> FastInt
53 targetClassOfRealReg :: RealReg -> RegClass
54 targetWordSize :: Size
55 targetMkVirtualReg :: Unique -> Size -> VirtualReg
56 targetRegDotColor :: RealReg -> SDoc
58 -- x86 -------------------------------------------------------------------------
59 #if i386_TARGET_ARCH || x86_64_TARGET_ARCH
60 targetVirtualRegSqueeze = X86.virtualRegSqueeze
61 targetRealRegSqueeze = X86.realRegSqueeze
62 targetClassOfRealReg = X86.classOfRealReg
63 targetWordSize = intSize wordWidth
64 targetMkVirtualReg = X86.mkVirtualReg
65 targetRegDotColor = X86.regDotColor
67 -- ppc -------------------------------------------------------------------------
68 #elif powerpc_TARGET_ARCH
69 targetVirtualRegSqueeze = PPC.virtualRegSqueeze
70 targetRealRegSqueeze = PPC.realRegSqueeze
71 targetClassOfRealReg = PPC.classOfRealReg
72 targetWordSize = intSize wordWidth
73 targetMkVirtualReg = PPC.mkVirtualReg
74 targetRegDotColor = PPC.regDotColor
76 -- sparc -----------------------------------------------------------------------
77 #elif sparc_TARGET_ARCH
78 targetVirtualRegSqueeze = SPARC.virtualRegSqueeze
79 targetRealRegSqueeze = SPARC.realRegSqueeze
80 targetClassOfRealReg = SPARC.classOfRealReg
81 targetWordSize = intSize wordWidth
82 targetMkVirtualReg = SPARC.mkVirtualReg
83 targetRegDotColor = SPARC.regDotColor
85 --------------------------------------------------------------------------------
87 #error "RegAlloc.Graph.TargetReg: not defined"
91 targetClassOfReg :: Reg -> RegClass
94 RegVirtual vr -> classOfVirtualReg vr
95 RegReal rr -> targetClassOfRealReg rr