-- | Hard wired things related to registers. -- This is module is preventing the native code generator being able to -- emit code for non-host architectures. -- -- TODO: Do a better job of the overloading, and eliminate this module. -- We'd probably do better with a Register type class, and hook this to -- Instruction somehow. -- -- TODO: We should also make arch specific versions of RegAlloc.Graph.TrivColorable module TargetReg ( targetVirtualRegSqueeze, targetRealRegSqueeze, targetClassOfRealReg, targetMkVirtualReg, targetWordSize, targetRegDotColor, targetClassOfReg ) where #include "HsVersions.h" import Reg import RegClass import Size import CmmExpr (wordWidth) import Outputable import Unique import FastTypes #if i386_TARGET_ARCH || x86_64_TARGET_ARCH import qualified X86.Regs as X86 import qualified X86.RegInfo as X86 #elif powerpc_TARGET_ARCH import qualified PPC.Regs as PPC #elif sparc_TARGET_ARCH import qualified SPARC.Regs as SPARC #else #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 targetVirtualRegSqueeze = X86.virtualRegSqueeze targetRealRegSqueeze = X86.realRegSqueeze targetClassOfRealReg = X86.classOfRealReg targetWordSize = intSize wordWidth targetMkVirtualReg = X86.mkVirtualReg targetRegDotColor = X86.regDotColor -- ppc ------------------------------------------------------------------------- #elif powerpc_TARGET_ARCH targetVirtualRegSqueeze = PPC.virtualRegSqueeze targetRealRegSqueeze = PPC.realRegSqueeze targetClassOfRealReg = PPC.classOfRealReg targetWordSize = intSize wordWidth targetMkVirtualReg = PPC.mkVirtualReg targetRegDotColor = PPC.regDotColor -- sparc ----------------------------------------------------------------------- #elif sparc_TARGET_ARCH targetVirtualRegSqueeze = SPARC.virtualRegSqueeze targetRealRegSqueeze = SPARC.realRegSqueeze targetClassOfRealReg = SPARC.classOfRealReg targetWordSize = intSize wordWidth targetMkVirtualReg = SPARC.mkVirtualReg targetRegDotColor = SPARC.regDotColor -------------------------------------------------------------------------------- #else #error "RegAlloc.Graph.TargetReg: not defined" #endif targetClassOfReg :: Reg -> RegClass targetClassOfReg reg = case reg of RegVirtual vr -> classOfVirtualReg vr RegReal rr -> targetClassOfRealReg rr