X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FStgMacros.h;h=444a5c29fb025a8f1d02854af9e63e9dfcf07007;hb=ebf2c80221ccf11aeb7a0a2be27bfc72529855a5;hp=1cd755959ac4923eb5aa3254db5c2f82e1895e06;hpb=c7979ff102f38349df882448b7279ce473a4c465;p=ghc-hetmet.git diff --git a/ghc/includes/StgMacros.h b/ghc/includes/StgMacros.h index 1cd7559..444a5c2 100644 --- a/ghc/includes/StgMacros.h +++ b/ghc/includes/StgMacros.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: StgMacros.h,v 1.26 2000/06/08 12:54:29 simonmar Exp $ + * $Id: StgMacros.h,v 1.37 2000/12/04 12:31:20 simonmar Exp $ * * (c) The GHC Team, 1998-1999 * @@ -47,8 +47,9 @@ #define EF_(f) extern F_ f(void) #define EDF_(f) extern DLLIMPORT F_ f(void) +#define EXTINFO_RTS extern DLL_IMPORT_RTS INFO_TBL_CONST StgInfoTable #define ED_ extern -#define EDD_ extern DLLIMPORT +#define EDD_ extern DLLIMPORT #define ED_RO_ extern const #define ID_ static #define ID_RO_ static const @@ -293,7 +294,7 @@ static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; } #define HP_CHK_GEN(headroom,liveness,reentry,tag_assts) \ if ((Hp += (headroom)) > HpLim ) { \ - EF_(stg_gen_chk); \ + EXTFUN_RTS(stg_gen_chk); \ tag_assts \ R9.w = (W_)LIVENESS_MASK(liveness); \ R10.w = (W_)reentry; \ @@ -306,7 +307,7 @@ static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; } #define STK_CHK_GEN(headroom,liveness,reentry,tag_assts) \ if ((Sp - (headroom)) < SpLim) { \ - EF_(stg_gen_chk); \ + EXTFUN_RTS(stg_gen_chk); \ tag_assts \ R9.w = (W_)LIVENESS_MASK(liveness); \ R10.w = (W_)reentry; \ @@ -315,7 +316,7 @@ static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; } #define MAYBE_GC(liveness,reentry) \ if (doYouWantToGC()) { \ - EF_(stg_gen_hp); \ + EXTFUN_RTS(stg_gen_hp); \ R9.w = (W_)LIVENESS_MASK(liveness); \ R10.w = (W_)reentry; \ JMP_(stg_gen_hp); \ @@ -328,8 +329,8 @@ static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; } out to be slowing us down we can make specialised ones. -------------------------------------------------------------------------- */ -EF_(stg_gen_yield); -EF_(stg_gen_block); +EXTFUN_RTS(stg_gen_yield); +EXTFUN_RTS(stg_gen_block); #define YIELD(liveness,reentry) \ { \ @@ -347,7 +348,7 @@ EF_(stg_gen_block); #define BLOCK_NP(ptrs) \ { \ - EF_(stg_block_##ptrs); \ + EXTFUN_RTS(stg_block_##ptrs); \ JMP_(stg_block_##ptrs); \ } @@ -377,11 +378,8 @@ EF_(stg_gen_block); We use a RET_DYN frame the same as for a dynamic heap check. ------------------------------------------------------------------------- */ -#if COMPILING_RTS -EI_(stg_gen_chk_info); -#else -EDI_(stg_gen_chk_info); -#endif +EXTINFO_RTS(stg_gen_chk_info); + /* ----------------------------------------------------------------------------- Vectored Returns @@ -424,7 +422,7 @@ EDI_(stg_gen_chk_info); } \ } \ } \ - SET_INFO(R1.cl,&BLACKHOLE_info) + SET_INFO(R1.cl,&stg_BLACKHOLE_info) # define UPD_BH_SINGLE_ENTRY(info) \ TICK_UPD_BH_SINGLE_ENTRY(); \ { \ @@ -438,21 +436,21 @@ EDI_(stg_gen_chk_info); } \ } \ } \ - SET_INFO(R1.cl,&BLACKHOLE_info) + SET_INFO(R1.cl,&stg_BLACKHOLE_info) # else # define UPD_BH_UPDATABLE(info) \ TICK_UPD_BH_UPDATABLE(); \ - SET_INFO(R1.cl,&BLACKHOLE_info) + SET_INFO(R1.cl,&stg_BLACKHOLE_info) # define UPD_BH_SINGLE_ENTRY(info) \ TICK_UPD_BH_SINGLE_ENTRY(); \ - SET_INFO(R1.cl,&SE_BLACKHOLE_info) + SET_INFO(R1.cl,&stg_SE_BLACKHOLE_info) # endif #else /* !EAGER_BLACKHOLING */ # define UPD_BH_UPDATABLE(thunk) /* nothing */ # define UPD_BH_SINGLE_ENTRY(thunk) /* nothing */ #endif /* EAGER_BLACKHOLING */ -#define UPD_FRAME_UPDATEE(p) (((StgUpdateFrame *)(p))->updatee) +#define UPD_FRAME_UPDATEE(p) ((P_)(((StgUpdateFrame *)(p))->updatee)) #define UPDATE_SU_FROM_UPD_FRAME(p) (Su=((StgUpdateFrame *)(p))->link) /* ----------------------------------------------------------------------------- @@ -619,7 +617,7 @@ static inline StgInt64 PK_Int64(W_ p_src[]) Catch frames -------------------------------------------------------------------------- */ -extern DLL_IMPORT_DATA const StgPolyInfoTable catch_frame_info; +extern DLL_IMPORT_RTS const StgPolyInfoTable stg_catch_frame_info; /* ----------------------------------------------------------------------------- Seq frames @@ -628,14 +626,14 @@ extern DLL_IMPORT_DATA const StgPolyInfoTable catch_frame_info; an update... -------------------------------------------------------------------------- */ -extern DLL_IMPORT_DATA const StgPolyInfoTable seq_frame_info; +extern DLL_IMPORT_RTS const StgPolyInfoTable stg_seq_frame_info; #define PUSH_SEQ_FRAME(sp) \ { \ StgSeqFrame *__frame; \ TICK_SEQF_PUSHED(); \ __frame = (StgSeqFrame *)(sp); \ - SET_HDR_(__frame,&seq_frame_info,CCCS); \ + SET_HDR_(__frame,&stg_seq_frame_info,CCCS); \ __frame->link = Su; \ Su = (StgUpdateFrame *)__frame; \ } @@ -645,7 +643,11 @@ extern DLL_IMPORT_DATA const StgPolyInfoTable seq_frame_info; -------------------------------------------------------------------------- */ #if defined(USE_SPLIT_MARKERS) +#if defined(cygwin32_TARGET_OS) || defined(mingw32_TARGET_OS) +#define __STG_SPLIT_MARKER __asm__("\n___stg_split_marker:"); +#else #define __STG_SPLIT_MARKER __asm__("\n__stg_split_marker:"); +#endif #else #define __STG_SPLIT_MARKER /* nothing */ #endif @@ -686,7 +688,6 @@ SaveThreadState(void) tso = CurrentTSO; tso->sp = Sp; tso->su = Su; - tso->splim = SpLim; CloseNursery(Hp); #ifdef REG_CurrentTSO @@ -712,7 +713,7 @@ LoadThreadState (void) tso = CurrentTSO; Sp = tso->sp; Su = tso->su; - SpLim = tso->splim; + SpLim = (P_)&(tso->stack) + RESERVED_STACK_WORDS; OpenNursery(Hp,HpLim); #ifdef REG_CurrentNursery @@ -748,10 +749,8 @@ LoadThreadState (void) STGCALL1(getStablePtr,reg_fe_binder) #define REGISTER_IMPORT(reg_mod_name) \ - do { EF_(reg_mod_name); \ - PUSH_INIT_STACK(reg_mod_name) ; \ - } while (0) - + PUSH_INIT_STACK(reg_mod_name) + #define END_MOD_INIT() \ }}; \ JMP_(POP_INIT_STACK()); \