summaryrefslogtreecommitdiff
path: root/ghc/compiler/nativeGen
diff options
context:
space:
mode:
authorsewardj <unknown>2000-01-17 10:10:17 +0000
committersewardj <unknown>2000-01-17 10:10:17 +0000
commitd1e36a2fabea3c71a0b6729013a71432a7353a8e (patch)
treeaef1b68f584dab77b4a028abf292a1d140149a4a /ghc/compiler/nativeGen
parentb009c5be607316734874228d4bb144ee3a015e91 (diff)
downloadhaskell-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.lhs18
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