-- TODO: We should also make arch specific versions of RegAlloc.Graph.TrivColorable
module TargetReg (
- targetRegClass,
- targetMkVReg,
+ targetVirtualRegSqueeze,
+ targetRealRegSqueeze,
+ targetClassOfRealReg,
+ targetMkVirtualReg,
targetWordSize,
- targetRegDotColor
+ targetRegDotColor,
+ targetClassOfReg
)
where
import CmmExpr (wordWidth)
import Outputable
import Unique
+import FastTypes
#if i386_TARGET_ARCH || x86_64_TARGET_ARCH
-- x86 -------------------------------------------------------------------------
#if i386_TARGET_ARCH || x86_64_TARGET_ARCH
-targetRegClass :: Reg -> RegClass
-targetRegClass = X86.regClass
+targetRegClasses :: Reg -> [RegClass]
+targetRegClasses = X86.regClasses
+
+targetRegSupportsClass :: Reg -> RegClass -> Bool
+targetRegSupportsClass = X86.regSupportsClass
targetWordSize :: Size
targetWordSize = intSize wordWidth
-- ppc -------------------------------------------------------------------------
#elif powerpc_TARGET_ARCH
-targetRegClass :: Reg -> RegClass
-targetRegClass = PPC.regClass
+targetRegClasses :: Reg -> [RegClass]
+targetRegClasses = PPC.regClasses
+
+targetRegSupportsClass :: Reg -> RegClass -> Bool
+targetRegSupportsClass = PPC.regSupportsClass
targetWordSize :: Size
targetWordSize = intSize wordWidth
-- sparc -----------------------------------------------------------------------
#elif sparc_TARGET_ARCH
-targetRegClass :: Reg -> RegClass
-targetRegClass = SPARC.regClass
+
+targetVirtualRegSqueeze :: RegClass -> VirtualReg -> FastInt
+targetVirtualRegSqueeze = SPARC.virtualRegSqueeze
+
+targetRealRegSqueeze :: RegClass -> RealReg -> FastInt
+targetRealRegSqueeze = SPARC.realRegSqueeze
+
+targetClassOfRealReg :: RealReg -> RegClass
+targetClassOfRealReg = SPARC.classOfRealReg
-- | Size of a machine word.
-- This is big enough to hold a pointer.
targetWordSize :: Size
targetWordSize = intSize wordWidth
-targetMkVReg :: Unique -> Size -> Reg
-targetMkVReg = SPARC.mkVReg
+targetMkVirtualReg :: Unique -> Size -> VirtualReg
+targetMkVirtualReg = SPARC.mkVirtualReg
-targetRegDotColor :: Reg -> SDoc
+targetRegDotColor :: RealReg -> SDoc
targetRegDotColor = SPARC.regDotColor
--------------------------------------------------------------------------------
#endif
+targetClassOfReg :: Reg -> RegClass
+targetClassOfReg reg
+ = case reg of
+ RegVirtual vr -> classOfVirtualReg vr
+ RegReal rr -> targetClassOfRealReg rr
+