diff --git a/ghc/compiler/main/Constants.lhs b/ghc/compiler/main/Constants.lhs index 660b99fdded10d5b9bf2985f4f0b947c9b7829e1..f0766dc7c4f88959546c1153280db3f58576b5df 100644 --- a/ghc/compiler/main/Constants.lhs +++ b/ghc/compiler/main/Constants.lhs @@ -24,6 +24,7 @@ module Constants ( aRR_WORDS_HDR_SIZE, aRR_PTRS_HDR_SIZE, rESERVED_C_STACK_BYTES, + rESERVED_STACK_WORDS, sTD_ITBL_SIZE, pROF_ITBL_SIZE, @@ -231,6 +232,13 @@ area is has available. rESERVED_C_STACK_BYTES = (RESERVED_C_STACK_BYTES :: Int) \end{code} +The amount of (Haskell) stack to leave free for saving registers when +returning to the scheduler. + +\begin{code} +rESERVED_STACK_WORDS = (RESERVED_STACK_WORDS :: Int) +\end{code} + Size of a word, in bytes \begin{code} diff --git a/ghc/compiler/nativeGen/StixPrim.lhs b/ghc/compiler/nativeGen/StixPrim.lhs index a78c4d6822077824a920492223c38376cf016d25..6f5e37c2abb6417ff2b8999ee827fb479dd75fce 100644 --- a/ghc/compiler/nativeGen/StixPrim.lhs +++ b/ghc/compiler/nativeGen/StixPrim.lhs @@ -18,7 +18,8 @@ import Literal ( Literal(..), word2IntLit ) import PrimOp ( PrimOp(..), CCall(..), CCallTarget(..) ) import PrimRep ( PrimRep(..), isFloatingRep ) import UniqSupply ( returnUs, thenUs, getUniqueUs, UniqSM ) -import Constants ( mIN_INTLIKE, mIN_CHARLIKE, uF_UPDATEE, bLOCK_SIZE ) +import Constants ( mIN_INTLIKE, mIN_CHARLIKE, uF_UPDATEE, bLOCK_SIZE, + rESERVED_STACK_WORDS ) import CLabel ( mkIntlikeClosureLabel, mkCharlikeClosureLabel, mkMAP_FROZEN_infoLabel, mkForeignLabel ) import Outputable @@ -570,10 +571,6 @@ save_thread_state (StInd PtrRep (StPrim IntAddOp [tso, StInt (toInteger (TSO_SU*BYTES_PER_WORD))])) stgSu : - StAssign PtrRep - (StInd PtrRep (StPrim IntAddOp - [tso, StInt (toInteger (TSO_SPLIM*BYTES_PER_WORD))])) - stgSpLim : StAssign PtrRep (StInd PtrRep (StPrim IntAddOp [stgCurrentNursery, @@ -594,8 +591,9 @@ load_thread_state (StInd PtrRep (StPrim IntAddOp [tso, StInt (toInteger (TSO_SU*BYTES_PER_WORD))])) : StAssign PtrRep stgSpLim - (StInd PtrRep (StPrim IntAddOp - [tso, StInt (toInteger (TSO_SPLIM*BYTES_PER_WORD))])) : + (StPrim IntAddOp [tso, + StInt (toInteger ((TSO_STACK + rESERVED_STACK_WORDS) + *BYTES_PER_WORD))]) : StAssign PtrRep stgHp (StPrim IntSubOp [ StInd PtrRep (StPrim IntAddOp diff --git a/ghc/includes/mkNativeHdr.c b/ghc/includes/mkNativeHdr.c index f89a22dadd45f1ec195a8da6ba83ae14920d0644..282864dddad1877f58b5ec0647bfb28bdddb8f1b 100644 --- a/ghc/includes/mkNativeHdr.c +++ b/ghc/includes/mkNativeHdr.c @@ -1,5 +1,5 @@ /* -------------------------------------------------------------------------- - * $Id: mkNativeHdr.c,v 1.4 2000/05/15 14:44:42 simonmar Exp $ + * $Id: mkNativeHdr.c,v 1.5 2000/08/17 14:30:26 simonmar Exp $ * * (c) The GHC Team, 1992-1998 * @@ -37,8 +37,8 @@ #define OFFSET_CurrentNursery OFFSET(RegTable, RegTable.rCurrentNursery) #define TSO_SP OFFSET(tso, tso.sp) -#define TSO_SPLIM OFFSET(tso, tso.splim) #define TSO_SU OFFSET(tso, tso.su) +#define TSO_STACK OFFSET(tso, tso.stack) #define BDESCR_START OFFSET(bd, bd.start) #define BDESCR_FREE OFFSET(bd, bd.free) @@ -87,7 +87,7 @@ main() printf("#define TSO_SP %d\n", TSO_SP); printf("#define TSO_SU %d\n", TSO_SU); - printf("#define TSO_SPLIM %d\n", TSO_SPLIM); + printf("#define TSO_STACK %d\n", TSO_STACK); printf("\n-- Block descriptor offsets for the Native Code Generator\n");