X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FPrimOps.h;h=e7d5ff5cb5dafaacb5ddffc7e7fea47cd389e97b;hb=553e90d9a32ee1b1809430f260c401cc4169c6c7;hp=60a2ac6c5dd2bde7a9ca19710953fdef244bc708;hpb=0b7c9ee4d319f10c3b166d7064bb125f6f8add12;p=ghc-hetmet.git diff --git a/ghc/includes/PrimOps.h b/ghc/includes/PrimOps.h index 60a2ac6..e7d5ff5 100644 --- a/ghc/includes/PrimOps.h +++ b/ghc/includes/PrimOps.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: PrimOps.h,v 1.91 2002/03/02 17:51:22 sof Exp $ + * $Id: PrimOps.h,v 1.107 2003/11/12 17:27:01 sof Exp $ * * (c) The GHC Team, 1998-2000 * @@ -48,11 +48,11 @@ #if SIZEOF_VOID_P == 4 #ifdef WORDS_BIGENDIAN -#define C 0 -#define R 1 +#define RTS_CARRY_IDX__ 0 +#define RTS_REM_IDX__ 1 #else -#define C 1 -#define R 0 +#define RTS_CARRY_IDX__ 1 +#define RTS_REM_IDX__ 0 #endif typedef union { @@ -65,8 +65,8 @@ typedef union { StgInt32 r, c; \ long_long_u z; \ z.l = (StgInt64)a * (StgInt64)b; \ - r = z.i[R]; \ - c = z.i[C]; \ + r = z.i[RTS_REM_IDX__]; \ + c = z.i[RTS_CARRY_IDX__]; \ if (c == 0 || c == -1) { \ c = ((StgWord)((a^b) ^ r)) \ >> (BITS_IN (I_) - 1); \ @@ -149,53 +149,6 @@ EXTFUN_RTS(complementIntegerzh_fast); EXTFUN_RTS(int64ToIntegerzh_fast); EXTFUN_RTS(word64ToIntegerzh_fast); -/* The rest are (way!) out of line, implemented in vanilla C. */ -I_ stg_gtWord64 (StgWord64, StgWord64); -I_ stg_geWord64 (StgWord64, StgWord64); -I_ stg_eqWord64 (StgWord64, StgWord64); -I_ stg_neWord64 (StgWord64, StgWord64); -I_ stg_ltWord64 (StgWord64, StgWord64); -I_ stg_leWord64 (StgWord64, StgWord64); - -I_ stg_gtInt64 (StgInt64, StgInt64); -I_ stg_geInt64 (StgInt64, StgInt64); -I_ stg_eqInt64 (StgInt64, StgInt64); -I_ stg_neInt64 (StgInt64, StgInt64); -I_ stg_ltInt64 (StgInt64, StgInt64); -I_ stg_leInt64 (StgInt64, StgInt64); - -LW_ stg_remWord64 (StgWord64, StgWord64); -LW_ stg_quotWord64 (StgWord64, StgWord64); - -LI_ stg_remInt64 (StgInt64, StgInt64); -LI_ stg_quotInt64 (StgInt64, StgInt64); -LI_ stg_negateInt64 (StgInt64); -LI_ stg_plusInt64 (StgInt64, StgInt64); -LI_ stg_minusInt64 (StgInt64, StgInt64); -LI_ stg_timesInt64 (StgInt64, StgInt64); - -LW_ stg_and64 (StgWord64, StgWord64); -LW_ stg_or64 (StgWord64, StgWord64); -LW_ stg_xor64 (StgWord64, StgWord64); -LW_ stg_not64 (StgWord64); - -LW_ stg_uncheckedShiftL64 (StgWord64, StgInt); -LW_ stg_uncheckedShiftRL64 (StgWord64, StgInt); -LI_ stg_uncheckedIShiftL64 (StgInt64, StgInt); -LI_ stg_uncheckedIShiftRL64 (StgInt64, StgInt); -LI_ stg_uncheckedIShiftRA64 (StgInt64, StgInt); - -LI_ stg_intToInt64 (StgInt); -I_ stg_int64ToInt (StgInt64); -LW_ stg_int64ToWord64 (StgInt64); - -LW_ stg_wordToWord64 (StgWord); -W_ stg_word64ToWord (StgWord64); -LI_ stg_word64ToInt64 (StgWord64); - -LI_ stg_integerToInt64 (I_ sa, StgByteArray /* Really: mp_limb_t* */ da); -LW_ stg_integerToWord64 (I_ sa, StgByteArray /* Really: mp_limb_t* */ da); - #endif /* ----------------------------------------------------------------------------- @@ -265,7 +218,7 @@ extern StgInt isFloatNegativeZero(StgFloat f); -------------------------------------------------------------------------- */ EXTFUN_RTS(newMutVarzh_fast); - +EXTFUN_RTS(atomicModifyMutVarzh_fast); /* ----------------------------------------------------------------------------- MVar PrimOps. @@ -288,6 +241,11 @@ EXTFUN_RTS(tryPutMVarzh_fast); EXTFUN_RTS(waitReadzh_fast); EXTFUN_RTS(waitWritezh_fast); EXTFUN_RTS(delayzh_fast); +#ifdef mingw32_TARGET_OS +EXTFUN_RTS(asyncReadzh_fast); +EXTFUN_RTS(asyncWritezh_fast); +EXTFUN_RTS(asyncDoProczh_fast); +#endif /* ----------------------------------------------------------------------------- @@ -296,9 +254,9 @@ EXTFUN_RTS(delayzh_fast); EXTFUN_RTS(catchzh_fast); EXTFUN_RTS(raisezh_fast); +EXTFUN_RTS(raiseIOzh_fast); -extern void stg_exit(I_ n) __attribute__ ((noreturn)); - +extern void stg_exit(int n) GNU_ATTRIBUTE(__noreturn__); /* ----------------------------------------------------------------------------- Stable Name / Stable Pointer PrimOps @@ -320,10 +278,12 @@ EXTFUN_RTS(seqzh_fast); EXTFUN_RTS(blockAsyncExceptionszh_fast); EXTFUN_RTS(unblockAsyncExceptionszh_fast); EXTFUN_RTS(myThreadIdzh_fast); +EXTFUN_RTS(labelThreadzh_fast); +EXTFUN_RTS(isCurrentThreadBoundzh_fast); -extern int cmp_thread(const StgTSO *tso1, const StgTSO *tso2); -extern int rts_getThreadId(const StgTSO *tso); - +extern int cmp_thread(StgPtr tso1, StgPtr tso2); +extern int rts_getThreadId(StgPtr tso); +extern int forkOS_createThread ( HsStablePtr entry ); /* ----------------------------------------------------------------------------- Weak Pointer PrimOps. @@ -360,22 +320,6 @@ EXTFUN_RTS(mkForeignObjzh_fast); EXTFUN_RTS(newBCOzh_fast); EXTFUN_RTS(mkApUpd0zh_fast); - -/* ----------------------------------------------------------------------------- - Signal handling. Not really primops, but called directly from Haskell. - -------------------------------------------------------------------------- */ - -#define STG_SIG_DFL (-1) -#define STG_SIG_IGN (-2) -#define STG_SIG_ERR (-3) -#define STG_SIG_HAN (-4) - -extern StgInt stg_sig_install (StgInt, StgInt, StgStablePtr, sigset_t *); -#define stg_sig_default(sig,mask) stg_sig_install(sig,STG_SIG_DFL,0,(sigset_t *)mask) -#define stg_sig_ignore(sig,mask) stg_sig_install(sig,STG_SIG_IGN,0,(sigset_t *)mask) -#define stg_sig_catch(sig,ptr,mask) stg_sig_install(sig,STG_SIG_HAN,ptr,(sigset_t *)mask) - - /* ------------------------------------------------------------------------ Parallel PrimOps @@ -473,4 +417,5 @@ extern StgInt stg_sig_install (StgInt, StgInt, StgStablePtr, sigset_t *); -------------------------------------------------------------------------- */ #define ForeignObj_CLOSURE_DATA(c) (((StgForeignObj *)c)->data) + #endif /* PRIMOPS_H */