Avoid casting lvalues; gcc 3.4 issues warnings for it.
(op,off') | off >= 0 = (char '+', off1)
| otherwise = (char '-', -off1)
(op,off') | off >= 0 = (char '+', off1)
| otherwise = (char '-', -off1)
--- dest is a reg, rhs is anything
+-- dest is a reg, rhs is anything.
+-- We can't cast the lvalue, so we have to cast the rhs if necessary. Casting
+-- the lvalue elicits a warning from new GCC versions (3.4+).
- = pprCastReg r1 <+> equals <+> pprExpr r2 <> semi
+ | isPtrReg r1
+ = pprAsPtrReg r1 <> ptext SLIT(" = ") <> mkP_ <> pprExpr1 r2 <> semi
+ | Just ty <- strangeRegType r1
+ = pprReg r1 <> ptext SLIT(" = ") <> parens ty <> pprExpr1 r2 <> semi
+ | otherwise
+ = pprReg r1 <> ptext SLIT(" = ") <> pprExpr r2 <> semi
-- ---------------------------------------------------------------------
-- Registers
-- ---------------------------------------------------------------------
-- Registers
isStrangeTypeGlobal CurrentNursery = True
isStrangeTypeGlobal r = isPtrGlobalReg r
isStrangeTypeGlobal CurrentNursery = True
isStrangeTypeGlobal r = isPtrGlobalReg r
+strangeRegType :: CmmReg -> Maybe SDoc
+strangeRegType (CmmGlobal CurrentTSO) = Just (ptext SLIT("struct StgTSO_ *"))
+strangeRegType (CmmGlobal CurrentNursery) = Just (ptext SLIT("struct bdescr_ *"))
+strangeRegType _ = Nothing
-- pprReg just prints the register name.
--
-- pprReg just prints the register name.
--
restore vols
where
ppr_results [] = empty
restore vols
where
ppr_results [] = empty
- ppr_results [(one,hint)] = pprArg (CmmReg one,hint) <> ptext SLIT(" = ")
+ ppr_results [(one,hint)]
+ = pprExpr (CmmReg one) <> ptext SLIT(" = ") <> pprUnHint hint
ppr_results _other = panic "pprCall: multiple results"
pprArg (expr, PtrHint)
ppr_results _other = panic "pprCall: multiple results"
pprArg (expr, PtrHint)
pprArg (expr, _other)
= pprExpr expr
pprArg (expr, _other)
= pprExpr expr
+ pprUnHint PtrHint = mkW_
+ pprUnHint SignedHint = mkW_
+ pprUnHint _ = empty
+
save = save_restore SLIT("CALLER_SAVE")
restore = save_restore SLIT("CALLER_RESTORE")
save = save_restore SLIT("CALLER_SAVE")
restore = save_restore SLIT("CALLER_RESTORE")