+ gentopcode stmt@(CSRT lbl closures)
+ = returnUs [ StSegment TextSegment
+ , StLabel lbl
+ , StData DataPtrRep (map mk_StCLbl_for_SRT closures)
+ ]
+ where
+ mk_StCLbl_for_SRT :: CLabel -> StixTree
+ mk_StCLbl_for_SRT label
+ | labelDynamic label
+ = StIndex Int8Rep (StCLbl label) (StInt 1)
+ | otherwise
+ = StCLbl label
+
+ gentopcode stmt@(CBitmap lbl mask)
+ = returnUs [ StSegment TextSegment
+ , StLabel lbl
+ , StData WordRep (StInt (toInteger (length mask)) :
+ map (StInt . toInteger . intBS) mask)
+ ]
+
+ gentopcode stmt@(CClosureTbl tycon)
+ = returnUs [ StSegment TextSegment
+ , StLabel (mkClosureTblLabel tycon)
+ , StData DataPtrRep (map (StCLbl . mkClosureLabel . getName . dataConWrapId)
+ (tyConDataCons tycon) )
+ ]
+
+ gentopcode stmt@(CModuleInitBlock lbl absC)
+ = gencode absC `thenUs` \ code ->
+ getUniqLabelNCG `thenUs` \ tmp_lbl ->
+ getUniqLabelNCG `thenUs` \ flag_lbl ->
+ returnUs ( StSegment DataSegment
+ : StLabel flag_lbl
+ : StData IntRep [StInt 0]
+ : StSegment TextSegment
+ : StLabel lbl
+ : StCondJump tmp_lbl (StPrim IntNeOp
+ [StInd IntRep (StCLbl flag_lbl),
+ StInt 0])
+ : StAssign IntRep (StInd IntRep (StCLbl flag_lbl)) (StInt 1)
+ : code
+ [ StLabel tmp_lbl
+ , StAssign PtrRep stgSp
+ (StIndex PtrRep stgSp (StInt (-1)))
+ , StJump NoDestInfo (StInd WordRep stgSp)
+ ])
+