Fix segfault in array copy primops on 32-bit
[ghc-hetmet.git] / compiler / nativeGen / Reg.hs
index 4819d0f..50d179c 100644 (file)
@@ -29,7 +29,6 @@ where
 
 import Outputable
 import Unique
-import Panic
 import RegClass
 import Data.List
 
@@ -56,6 +55,7 @@ data VirtualReg
        | VirtualRegHi {-# UNPACK #-} !Unique  -- High part of 2-word register
        | VirtualRegF  {-# UNPACK #-} !Unique
        | VirtualRegD  {-# UNPACK #-} !Unique
+       | VirtualRegSSE {-# UNPACK #-} !Unique
        deriving (Eq, Show, Ord)
 
 instance Uniquable VirtualReg where
@@ -65,6 +65,7 @@ instance Uniquable VirtualReg where
                VirtualRegHi u  -> u
                VirtualRegF u   -> u
                VirtualRegD u   -> u
+               VirtualRegSSE u -> u
 
 instance Outputable VirtualReg where
        ppr reg
@@ -73,6 +74,7 @@ instance Outputable VirtualReg where
                VirtualRegHi u  -> text "%vHi_" <> pprUnique u
                VirtualRegF  u  -> text "%vF_"  <> pprUnique u
                VirtualRegD  u  -> text "%vD_"  <> pprUnique u
+               VirtualRegSSE u -> text "%vSSE_" <> pprUnique u
 
 
 renameVirtualReg :: Unique -> VirtualReg -> VirtualReg
@@ -82,6 +84,7 @@ renameVirtualReg u r
        VirtualRegHi _  -> VirtualRegHi u
        VirtualRegF _   -> VirtualRegF  u
        VirtualRegD _   -> VirtualRegD  u
+       VirtualRegSSE _ -> VirtualRegSSE u
 
 
 classOfVirtualReg :: VirtualReg -> RegClass
@@ -91,6 +94,7 @@ classOfVirtualReg vr
        VirtualRegHi{}  -> RcInteger
        VirtualRegF{}   -> RcFloat
        VirtualRegD{}   -> RcDouble
+       VirtualRegSSE{} -> RcDoubleSSE
 
 
 -- Determine the upper-half vreg for a 64-bit quantity on a 32-bit platform
@@ -126,8 +130,8 @@ data RealReg
 instance Uniquable RealReg where
        getUnique reg
         = case reg of
-               RealRegSingle i         -> mkUnique 'S' i
-               RealRegPair r1 r2       -> mkUnique 'P' (r1 * 65536 + r2)
+               RealRegSingle i         -> mkRegSingleUnique i
+               RealRegPair r1 r2       -> mkRegPairUnique (r1 * 65536 + r2)
 
 instance Outputable RealReg where
        ppr reg
@@ -149,8 +153,8 @@ realRegsAlias rr1 rr2
 --------------------------------------------------------------------------------
 -- | A register, either virtual or real
 data Reg
-       = RegVirtual {-# UNPACK #-} !VirtualReg
-       | RegReal    {-# UNPACK #-} !RealReg
+       = RegVirtual !VirtualReg
+       | RegReal    !RealReg
        deriving (Eq, Ord)
 
 regSingle :: RegNo -> Reg