[project @ 2001-06-28 14:41:19 by simonmar]
[ghc-hetmet.git] / ghc / compiler / nativeGen / AbsCStixGen.lhs
index 150d5ea..dcaba25 100644 (file)
@@ -31,11 +31,12 @@ import ClosureInfo  ( infoTableLabelFromCI, entryLabelFromCI,
                        )
 import Literal         ( Literal(..), word2IntLit )
 import Maybes          ( maybeToBool )
+import StgSyn          ( StgOp(..) )
 import PrimOp          ( primOpNeedsWrapper, PrimOp(..) )
 import PrimRep         ( isFloatingRep, PrimRep(..) )
 import StixInfo                ( genCodeInfoTable, genBitmapInfoTable )
 import StixMacro       ( macroCode, checkCode )
-import StixPrim                ( primCode, amodeToStix, amodeToStix' )
+import StixPrim                ( primCode, foreignCallCode, amodeToStix, amodeToStix' )
 import Outputable       ( pprPanic, ppr )
 import UniqSupply      ( returnUs, thenUs, mapUs, getUniqueUs, UniqSM )
 import Util            ( naturalMergeSortLe )
@@ -45,6 +46,7 @@ import DataCon                ( dataConWrapId )
 import BitSet          ( intBS )
 import Name             ( NamedThing(..) )
 import CmdLineOpts     ( opt_Static, opt_EnsureSplittableC )
+import Outputable      ( assertPanic )
 \end{code}
 
 For each independent chunk of AbstractC code, we generate a list of
@@ -371,12 +373,15 @@ which varies depending on whether we're profiling etc.
 Now the PrimOps, some of which may need caller-saves register wrappers.
 
 \begin{code}
+ gencode (COpStmt results (StgFCallOp fcall _) args vols)
+  = ASSERT( null vols )
+    foreignCallCode (nonVoid results) fcall (nonVoid args)
 
- gencode (COpStmt results op args vols)
+ gencode (COpStmt results (StgPrimOp op) args vols)
   -- ToDo (ADR?): use that liveness mask
   | primOpNeedsWrapper op
   = let
-       saves = volsaves vols
+       saves    = volsaves vols
        restores = volrestores vols
     in
        p2stix (nonVoid results) op (nonVoid args)
@@ -384,9 +389,6 @@ Now the PrimOps, some of which may need caller-saves register wrappers.
        returnUs (\xs -> saves ++ code (restores ++ xs))
 
   | otherwise = p2stix (nonVoid results) op (nonVoid args)
-    where
-       nonVoid = filter ((/= VoidRep) . getAmodeRep)
-
 \end{code}
 
 Now the dreaded conditional jump.
@@ -461,6 +463,8 @@ Finally, all of the disgusting AbstractC macros.
 
  gencode other
   = pprPanic "AbsCStixGen.gencode" (dumpRealC other)
+
+ nonVoid = filter ((/= VoidRep) . getAmodeRep)
 \end{code}
 
 Here, we generate a jump table if there are more than four (integer)