import MachRegs
import AbsCSyn ( CStmtMacro(..), MagicId(..), CAddrMode, tagreg,
CCheckMacro(..) )
-import Constants ( uF_RET, uF_SU, uF_UPDATEE, uF_SIZE )
+import Constants ( uF_RET, uF_SU, uF_UPDATEE, uF_SIZE, sEQ_FRAME_SIZE )
import CallConv ( cCallConv )
import OrdList ( OrdList )
import PrimOp ( PrimOp(..) )
(StIndex PtrRep stgSp (StInt (toInteger (-uF_SIZE))))
in
returnUs (\xs -> a1 : a3 : a4 : updSu : xs)
+
+
+macroCode PUSH_SEQ_FRAME args
+ = let [arg_frame] = map amodeToStix args
+ frame n = StInd PtrRep
+ (StIndex PtrRep arg_frame (StInt (toInteger n)))
+ a1 = StAssign PtrRep (frame 0) seq_frame_info
+ a2 = StAssign PtrRep (frame 1) stgSu
+ updSu = StAssign PtrRep stgSu arg_frame
+ in
+ returnUs (\xs -> a1 : a2 : updSu : xs)
\end{code}
-----------------------------------------------------------------------------
case stgReg tagreg of
Always _ -> returnUs id
Save _ -> returnUs (\ xs -> set_tag : xs)
+
\end{code}
+
Do the business for a @HEAP_CHK@, having converted the args to Trees
of StixOp.
bh_info = sStLitLbl SLIT("BLACKHOLE_info")
ind_static_info = sStLitLbl SLIT("IND_STATIC_info")
ind_info = sStLitLbl SLIT("IND_info")
-upd_frame_info = sStLitLbl SLIT("Upd_frame_entry")
+upd_frame_info = sStLitLbl SLIT("Upd_frame_info")
+seq_frame_info = sStLitLbl SLIT("seq_frame_info")
-- Some common call trees