import Data.List ( intersperse, groupBy )
import IO ( Handle )
import Maybe ( isJust )
+import Data.Char ( chr )
pprCmms :: [Cmm] -> SDoc
pprCmms cmms = pprCode CStyle (vcat (intersperse separator $ map ppr cmms))
CmmReg reg -> ppr reg
CmmRegOff reg off -> parens (ppr reg <+> char '+' <+> int off)
CmmMachOp mop args -> genMachOp mop args
- e -> parens (pprExpr e)
genMachOp :: MachOp -> [CmmExpr] -> SDoc
genMachOp mop args
MO_Xor _ -> Just $ char '^'
MO_Not _ -> Just $ char '~'
MO_S_Neg _ -> Just $ char '-' -- there is no unsigned neg :)
- MO_Not _ -> Just $ char '~'
_ -> Nothing
-- --------------------------------------------------------------------------
CmmUninitialised i -> nest 4 $ text "I8" <> brackets (int i)
CmmAlign i -> nest 4 $ text "align" <+> int i
CmmDataLabel clbl -> pprCLabel clbl <> colon
- CmmString s' -> nest 4 $ text "I8[]" <+> doubleQuotes (text s')
+ CmmString s' -> nest 4 $ text "I8[]" <+>
+ doubleQuotes (text (map (chr.fromIntegral) s'))
-- --------------------------------------------------------------------------
-- Registers, whether local (temps) or global
BaseReg -> ptext SLIT("BaseReg")
PicBaseReg -> ptext SLIT("PicBaseReg")
- _ -> panic $ "PprCmm.pprGlobalReg: unknown global reg"
-
-- --------------------------------------------------------------------------
-- data sections
--