macroCode PUSH_SEQ_FRAME args
= let [arg_frame] = map amodeToStix args
frame n = StInd PtrRep
- (StIndex PtrRep arg_frame (StInt (toInteger n)))
+ (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)
+
+
+macroCode UPDATE_SU_FROM_UPD_FRAME args
+ = let [arg_frame] = map amodeToStix args
+ frame n = StInd PtrRep
+ (StIndex PtrRep arg_frame (StInt (toInteger n)))
+ updSu
+ = StAssign PtrRep stgSu (frame uF_SU)
+ in
+ returnUs (\xs -> updSu : xs)
\end{code}
-----------------------------------------------------------------------------
Always _ -> returnUs id
Save _ -> returnUs (\ xs -> set_tag : xs)
+macroCode other args
+ = case other of
+ ARGS_CHK -> error "foobarxyzzy1"
+ ARGS_CHK_LOAD_NODE -> error "foobarxyzzy2"
+ UPD_CAF -> error "foobarxyzzy3"
+ UPD_BH_UPDATABLE -> error "foobarxyzzy4"
+ UPD_BH_SINGLE_ENTRY -> error "foobarxyzzy5"
+ PUSH_UPD_FRAME -> error "foobarxyzzy6"
+ PUSH_SEQ_FRAME -> error "foobarxyzzy7"
+ UPDATE_SU_FROM_UPD_FRAME -> error "foobarxyzzy8"
+ SET_TAG -> error "foobarxyzzy9"
+
\end{code}
import AbsCSyn hiding ( spRel )
import AbsCUtils ( getAmodeRep, mixedTypeLocn )
+import Constants ( uF_UPDATEE )
import SMRep ( fixedHdrSize )
import Const ( Literal(..) )
import CallConv ( cCallConv )
[StInd WordRep (StPrim IntSubOp [amodeToStix arg,
StInt 1]),
StInt 16]
-
+ UPD_FRAME_UPDATEE
+ -> StInd PtrRep (StIndex PtrRep (amodeToStix arg)
+ (StInt (toInteger uF_UPDATEE)))
-- XXX!!!
-- GET_TAG(info_ptr) is supposed to be get_itbl(info_ptr)->srt_len,
-- which we've had to hand-code here.