X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2FnativeGen%2FTargetReg.hs;h=35b49d1809bf98789b5a00554bb234e36a13b83f;hp=471ee21384aa60c0f711b6248883bf93877da0b8;hb=16b9e80dc14db24509f051f294b5b51943285090;hpb=547bf6827f1fc3f2fb31bc6323cc0d33b445f32a diff --git a/compiler/nativeGen/TargetReg.hs b/compiler/nativeGen/TargetReg.hs index 471ee21..35b49d1 100644 --- a/compiler/nativeGen/TargetReg.hs +++ b/compiler/nativeGen/TargetReg.hs @@ -10,10 +10,13 @@ -- 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 @@ -24,9 +27,10 @@ import Reg import RegClass import Size -import CmmExpr (wordWidth) +import CmmType (wordWidth) import Outputable import Unique +import FastTypes #if i386_TARGET_ARCH || x86_64_TARGET_ARCH @@ -35,7 +39,6 @@ import qualified X86.RegInfo as X86 #elif powerpc_TARGET_ARCH import qualified PPC.Regs as PPC -import qualified PPC.RegInfo as PPC #elif sparc_TARGET_ARCH import qualified SPARC.Regs as SPARC @@ -44,51 +47,39 @@ import qualified SPARC.Regs as SPARC #error "RegAlloc.Graph.TargetReg: not defined" #endif +targetVirtualRegSqueeze :: RegClass -> VirtualReg -> FastInt +targetRealRegSqueeze :: RegClass -> RealReg -> FastInt +targetClassOfRealReg :: RealReg -> RegClass +targetWordSize :: Size +targetMkVirtualReg :: Unique -> Size -> VirtualReg +targetRegDotColor :: RealReg -> SDoc + -- x86 ------------------------------------------------------------------------- #if i386_TARGET_ARCH || x86_64_TARGET_ARCH -targetRegClass :: Reg -> RegClass -targetRegClass = X86.regClass - -targetWordSize :: Size -targetWordSize = intSize wordWidth - -targetMkVReg :: Unique -> Size -> Reg -targetMkVReg = X86.mkVReg - -targetRegDotColor :: Reg -> SDoc -targetRegDotColor = X86.regDotColor - +targetVirtualRegSqueeze = X86.virtualRegSqueeze +targetRealRegSqueeze = X86.realRegSqueeze +targetClassOfRealReg = X86.classOfRealReg +targetWordSize = intSize wordWidth +targetMkVirtualReg = X86.mkVirtualReg +targetRegDotColor = X86.regDotColor -- ppc ------------------------------------------------------------------------- #elif powerpc_TARGET_ARCH -targetRegClass :: Reg -> RegClass -targetRegClass = PPC.regClass - -targetWordSize :: Size -targetWordSize = intSize wordWidth - -targetMkVReg :: Unique -> Size -> Reg -targetMkVReg = PPC.mkVReg - -targetRegDotColor :: Reg -> SDoc -targetRegDotColor = PPC.regDotColor - +targetVirtualRegSqueeze = PPC.virtualRegSqueeze +targetRealRegSqueeze = PPC.realRegSqueeze +targetClassOfRealReg = PPC.classOfRealReg +targetWordSize = intSize wordWidth +targetMkVirtualReg = PPC.mkVirtualReg +targetRegDotColor = PPC.regDotColor -- sparc ----------------------------------------------------------------------- #elif sparc_TARGET_ARCH -targetRegClass :: Reg -> RegClass -targetRegClass = SPARC.regClass - --- | 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 - -targetRegDotColor :: Reg -> SDoc -targetRegDotColor = SPARC.regDotColor +targetVirtualRegSqueeze = SPARC.virtualRegSqueeze +targetRealRegSqueeze = SPARC.realRegSqueeze +targetClassOfRealReg = SPARC.classOfRealReg +targetWordSize = intSize wordWidth +targetMkVirtualReg = SPARC.mkVirtualReg +targetRegDotColor = SPARC.regDotColor -------------------------------------------------------------------------------- #else @@ -96,4 +87,10 @@ targetRegDotColor = SPARC.regDotColor #endif +targetClassOfReg :: Reg -> RegClass +targetClassOfReg reg + = case reg of + RegVirtual vr -> classOfVirtualReg vr + RegReal rr -> targetClassOfRealReg rr +