X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FStgMacros.h;h=da3a42548b90f0238b282200e5c2cb5e25e6ef3b;hb=124690e9ad1111c4e73ba63b9d991fd014c8f645;hp=a8b3faab8021a1fce21c268fa38e875c729d4ddc;hpb=f5448f5c5efe0630cb865ee0d21691a23ea932d3;p=ghc-hetmet.git diff --git a/ghc/includes/StgMacros.h b/ghc/includes/StgMacros.h index a8b3faa..da3a425 100644 --- a/ghc/includes/StgMacros.h +++ b/ghc/includes/StgMacros.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: StgMacros.h,v 1.35 2000/11/07 10:42:56 simonmar Exp $ + * $Id: StgMacros.h,v 1.41 2001/11/08 16:37:54 simonmar Exp $ * * (c) The GHC Team, 1998-1999 * @@ -132,7 +132,6 @@ static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; } #define STK_CHK(headroom,ret,r,layout,tag_assts) \ if (Sp - headroom < SpLim) { \ - EXTFUN_RTS(stg_chk_##layout); \ tag_assts \ (r) = (P_)ret; \ JMP_(stg_chk_##layout); \ @@ -141,7 +140,7 @@ static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; } #define HP_CHK(headroom,ret,r,layout,tag_assts) \ DO_GRAN_ALLOCATE(headroom) \ if ((Hp += headroom) > HpLim) { \ - EXTFUN_RTS(stg_chk_##layout); \ + HpAlloc = (headroom); \ tag_assts \ (r) = (P_)ret; \ JMP_(stg_chk_##layout); \ @@ -150,7 +149,7 @@ static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; } #define HP_STK_CHK(stk_headroom,hp_headroom,ret,r,layout,tag_assts) \ DO_GRAN_ALLOCATE(hp_headroom) \ if (Sp - stk_headroom < SpLim || (Hp += hp_headroom) > HpLim) { \ - EXTFUN_RTS(stg_chk_##layout); \ + HpAlloc = (hp_headroom); \ tag_assts \ (r) = (P_)ret; \ JMP_(stg_chk_##layout); \ @@ -177,7 +176,6 @@ static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; } #define STK_CHK_NP(headroom,ptrs,tag_assts) \ if ((Sp - (headroom)) < SpLim) { \ - EXTFUN_RTS(stg_gc_enter_##ptrs); \ tag_assts \ JMP_(stg_gc_enter_##ptrs); \ } @@ -185,7 +183,7 @@ static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; } #define HP_CHK_NP(headroom,ptrs,tag_assts) \ DO_GRAN_ALLOCATE(headroom) \ if ((Hp += (headroom)) > HpLim) { \ - EXTFUN_RTS(stg_gc_enter_##ptrs); \ + HpAlloc = (headroom); \ tag_assts \ JMP_(stg_gc_enter_##ptrs); \ } @@ -193,7 +191,7 @@ static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; } #define HP_CHK_SEQ_NP(headroom,ptrs,tag_assts) \ DO_GRAN_ALLOCATE(headroom) \ if ((Hp += (headroom)) > HpLim) { \ - EXTFUN_RTS(stg_gc_seq_##ptrs); \ + HpAlloc = (headroom); \ tag_assts \ JMP_(stg_gc_seq_##ptrs); \ } @@ -201,7 +199,7 @@ static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; } #define HP_STK_CHK_NP(stk_headroom, hp_headroom, ptrs, tag_assts) \ DO_GRAN_ALLOCATE(hp_headroom) \ if ((Sp - (stk_headroom)) < SpLim || (Hp += (hp_headroom)) > HpLim) { \ - EXTFUN_RTS(stg_gc_enter_##ptrs); \ + HpAlloc = (hp_headroom); \ tag_assts \ JMP_(stg_gc_enter_##ptrs); \ } @@ -213,6 +211,7 @@ static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; } DO_GRAN_ALLOCATE(headroom) \ if ((Hp += (headroom)) > HpLim) { \ EXTFUN_RTS(lbl); \ + HpAlloc = (headroom); \ tag_assts \ JMP_(lbl); \ } @@ -294,7 +293,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 ) { \ - EXTFUN_RTS(stg_gen_chk); \ + HpAlloc = (headroom); \ tag_assts \ R9.w = (W_)LIVENESS_MASK(liveness); \ R10.w = (W_)reentry; \ @@ -307,7 +306,6 @@ 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) { \ - EXTFUN_RTS(stg_gen_chk); \ tag_assts \ R9.w = (W_)LIVENESS_MASK(liveness); \ R10.w = (W_)reentry; \ @@ -316,7 +314,6 @@ static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; } #define MAYBE_GC(liveness,reentry) \ if (doYouWantToGC()) { \ - EXTFUN_RTS(stg_gen_hp); \ R9.w = (W_)LIVENESS_MASK(liveness); \ R10.w = (W_)reentry; \ JMP_(stg_gen_hp); \ @@ -422,7 +419,7 @@ EXTINFO_RTS(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(); \ { \ @@ -436,14 +433,14 @@ EXTINFO_RTS(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 */ @@ -611,13 +608,36 @@ static inline StgInt64 PK_Int64(W_ p_src[]) y.iu.dlo = p_src[1]; return(y.i); } + +#elif SIZEOF_VOID_P == 8 + +static inline void ASSIGN_Word64(W_ p_dest[], StgWord64 src) +{ + p_dest[0] = src; +} + +static inline StgWord64 PK_Word64(W_ p_src[]) +{ + return p_src[0]; +} + +static inline void ASSIGN_Int64(W_ p_dest[], StgInt64 src) +{ + p_dest[0] = src; +} + +static inline StgInt64 PK_Int64(W_ p_src[]) +{ + return p_src[0]; +} + #endif /* ----------------------------------------------------------------------------- Catch frames -------------------------------------------------------------------------- */ -extern DLL_IMPORT_RTS const StgPolyInfoTable catch_frame_info; +extern DLL_IMPORT_RTS const StgPolyInfoTable stg_catch_frame_info; /* ----------------------------------------------------------------------------- Seq frames @@ -626,14 +646,14 @@ extern DLL_IMPORT_RTS const StgPolyInfoTable catch_frame_info; an update... -------------------------------------------------------------------------- */ -extern DLL_IMPORT_RTS 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; \ } @@ -764,7 +784,7 @@ LoadThreadState (void) * Suspending/resuming threads for doing external C-calls (_ccall_GC). * These functions are defined in rts/Schedule.c. */ -StgInt suspendThread ( StgRegTable *cap ); +StgInt suspendThread ( StgRegTable * ); StgRegTable * resumeThread ( StgInt ); #define SUSPEND_THREAD(token) \ @@ -772,9 +792,9 @@ StgRegTable * resumeThread ( StgInt ); token = suspendThread(BaseReg); #ifdef SMP -#define RESUME_THREAD(token) \ - BaseReg = resumeThread(token); \ - LoadThreadState(); +#define RESUME_THREAD(token) \ + BaseReg = resumeThread(token); \ + LoadThreadState(); #else #define RESUME_THREAD(token) \ (void)resumeThread(token); \