[commit: ghc] master: Remove CPP from nativeGen/TargetReg.hs (a87ffbd)
Ian Lynagh
igloo at earth.li
Tue May 31 14:33:13 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/ghc
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/a87ffbd2eba9a4e351814d35ce1a7cfdeb2d53af
>---------------------------------------------------------------
commit a87ffbd2eba9a4e351814d35ce1a7cfdeb2d53af
Author: Ian Lynagh <igloo at earth.li>
Date: Mon May 30 21:47:01 2011 +0100
Remove CPP from nativeGen/TargetReg.hs
It's still not quite right: It assumes it is compiling for
defaultTargetPlatform instead of targetPlatform. But it's a
step in the right direction, and fixes the build on arches
without a NCG.
>---------------------------------------------------------------
compiler/nativeGen/TargetReg.hs | 103 +++++++++++++++++++++------------------
1 files changed, 55 insertions(+), 48 deletions(-)
diff --git a/compiler/nativeGen/TargetReg.hs b/compiler/nativeGen/TargetReg.hs
index 35b49d1..9c15a77 100644
--- a/compiler/nativeGen/TargetReg.hs
+++ b/compiler/nativeGen/TargetReg.hs
@@ -31,60 +31,67 @@ import CmmType (wordWidth)
import Outputable
import Unique
import FastTypes
+import Platform
+import qualified X86.Regs as X86
+import qualified X86.RegInfo as X86
-#if i386_TARGET_ARCH || x86_64_TARGET_ARCH
-import qualified X86.Regs as X86
-import qualified X86.RegInfo as X86
+import qualified PPC.Regs as PPC
-#elif powerpc_TARGET_ARCH
-import qualified PPC.Regs as PPC
+import qualified SPARC.Regs as SPARC
-#elif sparc_TARGET_ARCH
-import qualified SPARC.Regs as SPARC
-
-#else
-#error "RegAlloc.Graph.TargetReg: not defined"
-#endif
+-- TODO: We shouldn't be using defaultTargetPlatform here.
+-- We should be passing DynFlags in instead, and looking at
+-- its targetPlatform.
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
+targetVirtualRegSqueeze
+ = case platformArch defaultTargetPlatform of
+ ArchX86 -> X86.virtualRegSqueeze
+ ArchX86_64 -> X86.virtualRegSqueeze
+ ArchPPC -> PPC.virtualRegSqueeze
+ ArchSPARC -> SPARC.virtualRegSqueeze
+ ArchPPC_64 -> panic "targetVirtualRegSqueeze ArchPPC_64"
+
+targetRealRegSqueeze :: RegClass -> RealReg -> FastInt
+targetRealRegSqueeze
+ = case platformArch defaultTargetPlatform of
+ ArchX86 -> X86.realRegSqueeze
+ ArchX86_64 -> X86.realRegSqueeze
+ ArchPPC -> PPC.realRegSqueeze
+ ArchSPARC -> SPARC.realRegSqueeze
+ ArchPPC_64 -> panic "targetRealRegSqueeze ArchPPC_64"
+
+targetClassOfRealReg :: RealReg -> RegClass
+targetClassOfRealReg
+ = case platformArch defaultTargetPlatform of
+ ArchX86 -> X86.classOfRealReg
+ ArchX86_64 -> X86.classOfRealReg
+ ArchPPC -> PPC.classOfRealReg
+ ArchSPARC -> SPARC.classOfRealReg
+ ArchPPC_64 -> panic "targetClassOfRealReg ArchPPC_64"
+
+-- TODO: This should look at targetPlatform too
+targetWordSize :: Size
+targetWordSize = intSize wordWidth
+
+targetMkVirtualReg :: Unique -> Size -> VirtualReg
+targetMkVirtualReg
+ = case platformArch defaultTargetPlatform of
+ ArchX86 -> X86.mkVirtualReg
+ ArchX86_64 -> X86.mkVirtualReg
+ ArchPPC -> PPC.mkVirtualReg
+ ArchSPARC -> SPARC.mkVirtualReg
+ ArchPPC_64 -> panic "targetMkVirtualReg ArchPPC_64"
+
+targetRegDotColor :: RealReg -> SDoc
+targetRegDotColor
+ = case platformArch defaultTargetPlatform of
+ ArchX86 -> X86.regDotColor
+ ArchX86_64 -> X86.regDotColor
+ ArchPPC -> PPC.regDotColor
+ ArchSPARC -> SPARC.regDotColor
+ ArchPPC_64 -> panic "targetRegDotColor ArchPPC_64"
targetClassOfReg :: Reg -> RegClass
More information about the Cvs-ghc
mailing list