X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=ghc%2Fincludes%2FStgRegs.lh;fp=ghc%2Fincludes%2FStgRegs.lh;h=0000000000000000000000000000000000000000;hp=10f447e3dd9e9bc4db24c15e5ab98875231cfcf8;hb=438596897ebbe25a07e1c82085cfbc5bdb00f09e;hpb=967cc47f37cb93a5e2b6df7822c9a646f0428247 diff --git a/ghc/includes/StgRegs.lh b/ghc/includes/StgRegs.lh deleted file mode 100644 index 10f447e..0000000 --- a/ghc/includes/StgRegs.lh +++ /dev/null @@ -1,387 +0,0 @@ -\section[STGRegs]{Macros for saving/restoring STG registers} - -\begin{code} -#ifndef STGREGS_H -#define STGREGS_H -\end{code} - - -%************************************************************************ -%* * -\subsection[saving-restoring-STG-regs]{Saving/restoring STG registers} -%* * -%************************************************************************ - -These routines will fail on the SPARC if they are allowed to drop out-of-line -(the wrong register window will be active). - -\begin{code} - -#if defined(__STG_GCC_REGS__) && defined(MAIN_REG_MAP) - -EXTDATA(STK_STUB_closure); -EXTFUN(STK_STUB_entry); -EXTDATA_RO(vtbl_StdUpdFrame); - -/* Keep -Wmissing-prototypes from complaining */ -void SaveAllStgRegs(STG_NO_ARGS); -#if i386_TARGET_ARCH -void SaveAllStgContext(void * /*return address*/); -#else -void SaveAllStgContext(STG_NO_ARGS); -#endif -void SaveStgStackRegs(STG_NO_ARGS); -void RestoreAllStgRegs(STG_NO_ARGS); -void RestoreStackStgRegs(STG_NO_ARGS); - -extern STG_INLINE -void SaveAllStgRegs(STG_NO_ARGS) -{ -#ifdef REG_Base -# ifdef CONCURRENT - /* I do not think so: CurrentRegTable will not have changed - between entry to and exit from "Haskell land" (WDP 95/12) - */ - /* CurrentRegTable = BaseReg; */ -# endif -#endif -/* Hack!!! slam the current C stack pointer into the reg. table - in the event that we need to copy a chunk of the C stack - before entering Haskell via a stable pointer (contact - for (gruesome) details!) - - Only save this once. - - ToDo: support this across platforms. -*/ -#if 0 && defined(CONCURRENT) && defined(i386_TARGET_ARCH) - if (CurrentTSO != CurrentTSOinC) { - __asm__ volatile (" mov %%esp,%0" : "m=" (CurrentRegTable->rCstkptr)); - } -#endif - -#ifdef REG_R1 - SAVE_R1 = R1; -#endif - -#ifdef REG_R2 - SAVE_R2 = R2; -#endif - -#ifdef REG_R3 - SAVE_R3 = R3; -#endif - -#ifdef REG_R4 - SAVE_R4 = R4; -#endif - -#ifdef REG_R5 - SAVE_R5 = R5; -#endif - -#ifdef REG_R6 - SAVE_R6 = R6; -#endif - -#ifdef REG_R7 - SAVE_R7 = R7; -#endif - -#ifdef REG_R8 - SAVE_R8 = R8; -#endif - -#ifdef REG_Flt1 - SAVE_Flt1 = FltReg1; -#endif - -#ifdef REG_Flt2 - SAVE_Flt2 = FltReg2; -#endif - -#ifdef REG_Flt3 - SAVE_Flt3 = FltReg3; -#endif - -#ifdef REG_Flt4 - SAVE_Flt4 = FltReg4; -#endif - -#ifdef REG_Dbl1 - SAVE_Dbl1 = DblReg1; -#endif - -#ifdef REG_Dbl2 - SAVE_Dbl2 = DblReg2; -#endif - -#ifdef REG_Lng1 - SAVE_Lng1 = LngReg1; -#endif - -#ifdef REG_Lng2 - SAVE_Lng2 = LngReg2; -#endif - -#ifdef REG_Tag - SAVE_Tag = TagReg; -#endif - -#ifdef REG_Ret - SAVE_Ret = RetReg; -#endif - -#if defined(REG_SpA) || defined(CONCURRENT) - SAVE_SpA = SpA; -#endif - -#if defined(REG_SuA) || defined(CONCURRENT) - SAVE_SuA = SuA; -#endif - -#if defined(REG_SpB) || defined(CONCURRENT) - SAVE_SpB = SpB; -#endif - -#if defined(REG_SuB) || defined(CONCURRENT) - SAVE_SuB = SuB; -#endif - - SAVE_Hp = Hp; /* always! */ - SAVE_HpLim = HpLim; /* ditto! */ -} - -extern STG_INLINE -void -#if i386_TARGET_ARCH -SaveAllStgContext(void * ret_addr) -#else -SaveAllStgContext(STG_NO_ARGS) -#endif -{ - SaveAllStgRegs(); -#ifdef CONCURRENT -# if defined(PROFILING) || defined(PAR) - TSO_CCC(CurrentTSO) = CCC; - CCC = (CostCentre)STATIC_CC_REF(CC_MAIN); -# endif -# if i386_TARGET_ARCH - SET_RETADDR(TSO_PC2(CurrentTSO), ret_addr) -# else - SET_RETADDR(TSO_PC2(CurrentTSO)) -# endif -#endif -} - -extern STG_INLINE -void SaveStgStackRegs(STG_NO_ARGS) -{ -#if defined(REG_SpA) || defined(CONCURRENT) - SAVE_SpA = SpA; -#endif - -#if defined(REG_SuA) || defined(CONCURRENT) - SAVE_SuA = SuA; -#endif - -#if defined(REG_SpB) || defined(CONCURRENT) - SAVE_SpB = SpB; -#endif - -#if defined(REG_SuB) || defined(CONCURRENT) - SAVE_SuB = SuB; -#endif -} - -extern STG_INLINE void -RestoreAllStgRegs (STG_NO_ARGS) -{ -#ifdef REG_Base - /* Re-initialise the register table pointer */ -# ifdef CONCURRENT - BaseReg = CurrentRegTable; -# else - BaseReg = &MainRegTable; -# endif -#endif - -#ifdef REG_R1 - R1 = SAVE_R1; -#endif - -#ifdef REG_R2 - R2 = SAVE_R2; -#endif - -#ifdef REG_R3 - R3 = SAVE_R3; -#endif - -#ifdef REG_R4 - R4 = SAVE_R4; -#endif - -#ifdef REG_R5 - R5 = SAVE_R5; -#endif - -#ifdef REG_R6 - R6 = SAVE_R6; -#endif - -#ifdef REG_R7 - R7 = SAVE_R7; -#endif - -#ifdef REG_R8 - R8 = SAVE_R8; -#endif - -#ifdef REG_Flt1 - FltReg1 = SAVE_Flt1; -#endif - -#ifdef REG_Flt2 - FltReg2 = SAVE_Flt2; -#endif - -#ifdef REG_Flt3 - FltReg3 = SAVE_Flt3; -#endif - -#ifdef REG_Flt4 - FltReg4 = SAVE_Flt4; -#endif - -#ifdef REG_Dbl1 - DblReg1 = SAVE_Dbl1; -#endif - -#ifdef REG_Dbl2 - DblReg2 = SAVE_Dbl2; -#endif - -#ifdef REG_Lng1 - LngReg1 = SAVE_Lng1; -#endif - -#ifdef REG_Lng2 - LngReg2 = SAVE_Lng2; -#endif - -#ifdef REG_Tag - TagReg = SAVE_Tag; -#endif - -#ifdef REG_Ret - RetReg = SAVE_Ret; -#endif - -#if defined(REG_StkO) && defined(CONCURRENT) - StkOReg = SAVE_StkO; -#endif - -#if defined(REG_SpA) || defined(CONCURRENT) - SpA = SAVE_SpA; -#endif - -#if defined(REG_SuA) || defined(CONCURRENT) - SuA = SAVE_SuA; -#endif - -#if defined(REG_SpB) || defined(CONCURRENT) - SpB = SAVE_SpB; -#endif - -#if defined(REG_SuB) || defined(CONCURRENT) - SuB = SAVE_SuB; -#endif - - Hp = SAVE_Hp; /* always! */ - HpLim = SAVE_HpLim; /* ditto! */ - -#ifdef REG_StdUpdRetVec - StdUpdRetVecReg = vtbl_StdUpdFrame; -#endif - -#ifdef REG_StkStub - StkStubReg = STK_STUB_closure; -#endif - -#if CONCURRENT -# if defined(PROFILING) || defined(PAR) - CCC = TSO_CCC(CurrentTSO); -# endif -#endif -} - -extern STG_INLINE void -RestoreStackStgRegs (STG_NO_ARGS) -{ -#if defined(REG_SpA) || defined(CONCURRENT) - SpA = SAVE_SpA; -#endif - -#if defined(REG_SuA) || defined(CONCURRENT) - SuA = SAVE_SuA; -#endif - -#if defined(REG_SpB) || defined(CONCURRENT) - SpB = SAVE_SpB; -#endif - -#if defined(REG_SuB) || defined(CONCURRENT) - SuB = SAVE_SuB; -#endif -} - -#else /* For the unwashed and unregisterized */ - -#ifdef CONCURRENT - -#define SaveAllStgRegs() \ - do { \ - SAVE_Hp = Hp; \ - SAVE_HpLim = HpLim; \ - SAVE_SpA = SpA; \ - SAVE_SuA = SuA; \ - SAVE_SpB = SpB; \ - SAVE_SuB = SuB; \ - } while(0) - -#define RestoreAllStgRegs() \ - do { \ - Hp = SAVE_Hp; \ - HpLim = SAVE_HpLim; \ - SpA = SAVE_SpA; \ - SuA = SAVE_SuA; \ - SpB = SAVE_SpB; \ - SuB = SAVE_SuB; \ - } while(0) - -#define RestoreStackStgRegs() \ - do { \ - SpA = SAVE_SpA; \ - SuA = SAVE_SuA; \ - SpB = SAVE_SpB; \ - SuB = SAVE_SuB; \ - } while(0) - -#else - -#define SaveAllStgRegs() do {SAVE_Hp = Hp; SAVE_HpLim = HpLim;} while(0) - -#define RestoreAllStgRegs() do {Hp = SAVE_Hp; HpLim = SAVE_HpLim;} while(0) -#define RestoreStackStgRegs() /* nothing */ - -#endif /* CONCURRENT */ - -#define SaveAllStgContext() SaveAllStgRegs() - -#endif /* __STG_GCC_REGS__ && MAIN_REG_MAP */ - -#endif /* STGREGS_H */ - -\end{code} -