diff options
author | sewardj <unknown> | 2000-01-17 10:10:17 +0000 |
---|---|---|
committer | sewardj <unknown> | 2000-01-17 10:10:17 +0000 |
commit | d1e36a2fabea3c71a0b6729013a71432a7353a8e (patch) | |
tree | aef1b68f584dab77b4a028abf292a1d140149a4a /ghc/compiler/nativeGen | |
parent | b009c5be607316734874228d4bb144ee3a015e91 (diff) | |
download | haskell-d1e36a2fabea3c71a0b6729013a71432a7353a8e.tar.gz |
[project @ 2000-01-17 10:10:17 by sewardj]
macroCode: implement PUSH_SEQ_FRAME
Diffstat (limited to 'ghc/compiler/nativeGen')
-rw-r--r-- | ghc/compiler/nativeGen/StixMacro.lhs | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/ghc/compiler/nativeGen/StixMacro.lhs b/ghc/compiler/nativeGen/StixMacro.lhs index 02fef7fc2b..44aead000e 100644 --- a/ghc/compiler/nativeGen/StixMacro.lhs +++ b/ghc/compiler/nativeGen/StixMacro.lhs @@ -13,7 +13,7 @@ import MachMisc 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(..) ) @@ -131,6 +131,17 @@ macroCode PUSH_UPD_FRAME args (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} ----------------------------------------------------------------------------- @@ -145,8 +156,10 @@ macroCode SET_TAG [tag] 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. @@ -161,7 +174,8 @@ bh_info, ind_static_info, ind_info :: StixTree 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 |