Add {-# OPTIONS_GHC -w #-} and some blurb to all compiler modules
[ghc-hetmet.git] / compiler / cmm / PprC.hs
index 77d337d..7127be3 100644 (file)
 
 -- ToDo: save/restore volatile registers around calls.
 
+{-# OPTIONS_GHC -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/WorkingConventions#Warnings
+-- for details
+
 module PprC (
         writeCs,
         pprStringInCStyle 
@@ -199,7 +206,7 @@ pprStmt stmt = case stmt of
        where
          rep = cmmExprRep src
 
-    CmmCall (CmmForeignCall fn cconv) results args safety ->
+    CmmCall (CmmCallee fn cconv) results args safety _ret ->
        -- Controversial: leave this out for now.
        -- pprUndef fn $$
 
@@ -220,7 +227,7 @@ pprStmt stmt = case stmt of
           ptext SLIT("#undef") <+> pprCLabel lbl
        pprUndef _ = empty
 
-    CmmCall (CmmPrim op) results args safety ->
+    CmmCall (CmmPrim op) results args safety _ret ->
        pprCall ppr_fn CCallConv results args safety
        where
        ppr_fn = pprCallishMachOp_for_C op
@@ -322,8 +329,9 @@ pprExpr e = case e of
        -> char '*' <> pprAsPtrReg r
 
     CmmLoad (CmmRegOff r off) rep
-       | isPtrReg r && rep == wordRep 
+       | isPtrReg r && rep == wordRep && (off `rem` wORD_SIZE == 0)
        -- ToDo: check that the offset is a word multiple?
+        --       (For tagging to work, I had to avoid unaligned loads. --ARY)
        -> pprAsPtrReg r <> brackets (ppr (off `shiftR` wordShift))
 
     CmmLoad expr rep ->
@@ -794,12 +802,8 @@ pprExternDecl in_srt lbl
   | not (needsCDecl lbl) = empty
   | otherwise              = 
        hcat [ visibility, label_type (labelType lbl), 
-              lparen, dyn_wrapper (pprCLabel lbl), text ");" ]
+              lparen, pprCLabel lbl, text ");" ]
  where
-  dyn_wrapper d
-    | in_srt && labelDynamic lbl = text "DLL_IMPORT_DATA_VAR" <> parens d
-    | otherwise                         = d
-
   label_type CodeLabel = ptext SLIT("F_")
   label_type DataLabel = ptext SLIT("I_")
 
@@ -840,7 +844,7 @@ te_Lit _ = return ()
 te_Stmt :: CmmStmt -> TE ()
 te_Stmt (CmmAssign r e)                = te_Reg r >> te_Expr e
 te_Stmt (CmmStore l r)         = te_Expr l >> te_Expr r
-te_Stmt (CmmCall _ rs es _)    = mapM_ (te_temp.fst) rs >>
+te_Stmt (CmmCall _ rs es _ _)  = mapM_ (te_temp.fst) rs >>
                                  mapM_ (te_Expr.fst) es
 te_Stmt (CmmCondBranch e _)    = te_Expr e
 te_Stmt (CmmSwitch e _)                = te_Expr e