/* -----------------------------------------------------------------------------
- * $Id: PrimOps.h,v 1.23 1999/03/05 10:21:29 sof Exp $
+ * $Id: PrimOps.h,v 1.30 1999/05/10 09:50:49 simonm Exp $
*
* (c) The GHC Team, 1998-1999
*
#define zlzhzh(r,a,b) r=(I_)((a) <(b))
#define zlzezhzh(r,a,b) r=(I_)((a)<=(b))
-/* used by returning comparison primops, defined in Prims.hc. */
-extern DLL_IMPORT_RTS const StgClosure *PrelBase_Bool_closure_tbl[];
-
/* -----------------------------------------------------------------------------
Char# PrimOps.
-------------------------------------------------------------------------- */
/* We can do integer2Int and cmpInteger inline, since they don't need
* to allocate any memory.
+ *
+ * integer2Int# is now modular.
*/
-#define integer2Intzh(r, sa,da) \
-{ MP_INT arg; \
- \
- arg._mp_size = (sa); \
- arg._mp_alloc = ((StgArrWords *)da)->words; \
- arg._mp_d = (unsigned long int *) (BYTE_ARR_CTS(da)); \
- \
- (r) = RET_PRIM_STGCALL1(I_,mpz_get_si,&arg); \
+#define integer2Intzh(r, sa,da) \
+{ StgWord word0 = ((StgWord *)BYTE_ARR_CTS(da))[0]; \
+ int size = sa; \
+ \
+ (r) = \
+ ( size == 0 ) ? \
+ 0 : \
+ ( size < 0 && word0 != 0x8000000 ) ? \
+ -(I_)word0 : \
+ (I_)word0; \
}
#define integer2Wordzh(r, sa,da) \
-------------------------------------------------------------------------- */
EF_(forkzh_fast);
+EF_(yieldzh_fast);
EF_(killThreadzh_fast);
EF_(seqzh_fast);
+#define myThreadIdzh(t) (t = CurrentTSO)
+
/* Hmm, I'll think about these later. */
/* -----------------------------------------------------------------------------
Pointer equality
#endif
/* -----------------------------------------------------------------------------
+ Constructor tags
+ -------------------------------------------------------------------------- */
+
+#define dataToTagzh(r,a) r=(GET_TAG(((StgClosure *)a)->header.info))
+/* tagToEnum# is handled directly by the code generator. */
+
+/* -----------------------------------------------------------------------------
Signal processing. Not really primops, but called directly from
Haskell.
-------------------------------------------------------------------------- */