X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fcmm%2FPprCmm.hs;h=f5c5a49b926804e36579b00f4f1f9913326423ae;hp=a9e00fc0aed9347fc5872490fddcd8f598e02bfa;hb=83d563cb9ede0ba792836e529b1e2929db926355;hpb=e6243a818496aad82b6f47511d3bd9bc800f747d diff --git a/compiler/cmm/PprCmm.hs b/compiler/cmm/PprCmm.hs index a9e00fc..f5c5a49 100644 --- a/compiler/cmm/PprCmm.hs +++ b/compiler/cmm/PprCmm.hs @@ -42,6 +42,7 @@ import BlockId import Cmm import CmmUtils import CLabel +import BasicTypes import ForeignCall @@ -55,7 +56,7 @@ import Data.Maybe -- Temp Jan08 import SMRep import ClosureInfo -#include "../includes/StgFun.h" +#include "../includes/rts/storage/FunTypes.h" pprCmms :: (Outputable info, Outputable g) => [GenCmm CmmStatic info g] -> SDoc @@ -114,7 +115,7 @@ instance Outputable CmmInfo where ----------------------------------------------------------------------------- pprCmm :: (Outputable d, Outputable info, Outputable g) => GenCmm d info g -> SDoc -pprCmm (Cmm tops) = vcat $ intersperse (text "") $ map pprTop tops +pprCmm (Cmm tops) = vcat $ intersperse blankLine $ map pprTop tops -- -------------------------------------------------------------------------- -- Top level `procedure' blocks. @@ -142,6 +143,7 @@ pprTop (CmmData section ds) = instance Outputable CmmSafety where ppr CmmUnsafe = ptext (sLit "_unsafe_call_") ppr (CmmSafe srt) = ppr srt + ppr CmmInterruptible = ptext (sLit "_interruptible_call_") -- -------------------------------------------------------------------------- -- Info tables. The current pretty printer needs refinement @@ -264,6 +266,8 @@ pprStmt stmt = case stmt of pp_lhs | null results = empty | otherwise = commafy (map ppr_ar results) <+> equals -- Don't print the hints on a native C-- call + + ppr_ar :: Outputable a => CmmHinted a -> SDoc ppr_ar (CmmHinted ar k) = case cconv of CmmCallConv -> ppr ar _ -> ppr (ar,k) @@ -271,11 +275,16 @@ pprStmt stmt = case stmt of CmmCallConv -> empty _ -> ptext (sLit("foreign")) <+> doubleQuotes (ppr cconv) + -- Call a CallishMachOp, like sin or cos that might be implemented as a library call. CmmCall (CmmPrim op) results args safety ret -> pprStmt (CmmCall (CmmCallee (CmmLit lbl) CCallConv) results args safety ret) where - lbl = CmmLabel (mkForeignLabel (mkFastString (show op)) Nothing False) + -- HACK: A CallishMachOp doesn't really correspond to a ForeignLabel, but we + -- use one to get the label printed. + lbl = CmmLabel (mkForeignLabel + (mkFastString (show op)) + Nothing ForeignLabelInThisPackage IsFunction) CmmBranch ident -> genBranch ident CmmCondBranch expr ident -> genCondBranch expr ident @@ -505,9 +514,8 @@ pprLit :: CmmLit -> SDoc pprLit lit = case lit of CmmInt i rep -> hcat [ (if i < 0 then parens else id)(integer i) - , (if rep == wordWidth - then empty - else space <> dcolon <+> ppr rep) ] + , ppUnless (rep == wordWidth) $ + space <> dcolon <+> ppr rep ] CmmFloat f rep -> hsep [ rational f, dcolon, ppr rep ] CmmLabel clbl -> pprCLabel clbl