Fix sin/cos/tan on x86; trac #2059
[ghc-hetmet.git] / compiler / nativeGen / MachInstrs.hs
index 6316d94..716a521 100644 (file)
@@ -1,3 +1,10 @@
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
 -----------------------------------------------------------------------------
 --
 -- Machine-dependent assembly language
@@ -52,8 +59,8 @@ import GHC.Exts
 -- Our flavours of the Cmm types
 
 -- Type synonyms for Cmm populated with native code
-type NatCmm        = GenCmm CmmStatic Instr
-type NatCmmTop     = GenCmmTop CmmStatic Instr
+type NatCmm        = GenCmm CmmStatic [CmmStatic] (ListGraph Instr)
+type NatCmmTop     = GenCmmTop CmmStatic [CmmStatic] (ListGraph Instr)
 type NatBasicBlock = GenBasicBlock Instr
 
 -- -----------------------------------------------------------------------------
@@ -226,6 +233,9 @@ data Instr
   | DELTA   Int                 -- specify current stack offset for
                                 -- benefit of subsequent passes
 
+  | SPILL   Reg Int            -- ^ spill this reg to a stack slot
+  | RELOAD  Int Reg            -- ^ reload this reg from a stack slot
+
 -- -----------------------------------------------------------------------------
 -- Alpha instructions
 
@@ -473,9 +483,9 @@ bit or 64 bit precision.
        | GABS        MachRep Reg Reg -- src, dst
        | GNEG        MachRep Reg Reg -- src, dst
        | GSQRT       MachRep Reg Reg -- src, dst
-       | GSIN        MachRep Reg Reg -- src, dst
-       | GCOS        MachRep Reg Reg -- src, dst
-       | GTAN        MachRep Reg Reg -- src, dst
+       | GSIN        MachRep CLabel CLabel Reg Reg -- src, dst
+       | GCOS        MachRep CLabel CLabel Reg Reg -- src, dst
+       | GTAN        MachRep CLabel CLabel Reg Reg -- src, dst
        
         | GFREE         -- do ffree on all x86 regs; an ugly hack
 #endif
@@ -573,7 +583,7 @@ is_G_instr instr
        GSUB _ _ _ _ -> True; GMUL _ _ _ _ -> True
        GCMP _ _ _ -> True; GABS _ _ _ -> True
        GNEG _ _ _ -> True; GSQRT _ _ _ -> True
-        GSIN _ _ _ -> True; GCOS _ _ _ -> True; GTAN _ _ _ -> True
+        GSIN _ _ _ _ _ -> True; GCOS _ _ _ _ _ -> True; GTAN _ _ _ _ _ -> True
         GFREE -> panic "is_G_instr: GFREE (!)"
         other -> False
 #endif /* i386_TARGET_ARCH */