SPARC NCG: Make linear allocator use info in SPARC.Regs again
[ghc-hetmet.git] / compiler / nativeGen / RegAlloc / Linear / SPARC / FreeRegs.hs
index d284a45..aa716b5 100644 (file)
@@ -3,14 +3,16 @@
 module RegAlloc.Linear.SPARC.FreeRegs
 where
 
-import MachRegs
+import Regs
 
 import Outputable
+import FastBool
 
 import Data.Word
 import Data.Bits
 import Data.List
 
+
 --------------------------------------------------------------------------------
 -- SPARC is like PPC, except for twinning of floating point regs.
 --     When we allocate a double reg we must take an even numbered
@@ -118,17 +120,12 @@ grabReg r (FreeRegs g f d)
 --
 releaseReg :: RegNo -> FreeRegs -> FreeRegs
 releaseReg r regs@(FreeRegs g f d)
-
-       -- used by STG machine, or otherwise unavailable
-       | r >= 0  && r <= 15    = regs
---     | r >= 3  && r <= 15    = regs
-
-       | r >= 17 && r <= 21    = regs
-       | r >= 24 && r <= 31    = regs
-       | r >= 32 && r <= 41    = regs
-       | r >= 54 && r <= 59    = regs
-
-       -- never release the high part of double regs.
+       -- don't release pinned reg
+       | not $ isFastTrue (freeReg r)
+       = regs
+       
+       -- don't release the high part of double regs
+       --      this prevents them from being allocated as single precison regs.
        | r == 43               = regs
        | r == 45               = regs
        | r == 47               = regs