/* -----------------------------------------------------------------------------
- * $Id: PrimOps.h,v 1.2 1998/12/02 13:21:18 simonm Exp $
+ * $Id: PrimOps.h,v 1.8 1999/01/21 10:31:42 simonm Exp $
*
* Macros for primitive operations in STG-ish C code.
*
c = z.i[C]; \
}
+
+
#define subWithCarryZh(r,c,a,b) \
{ long_long_u z; \
z.l = a + b; \
arg2._mp_size = (s2); \
arg2._mp_d = (unsigned long int *) (BYTE_ARR_CTS(d2)); \
\
- (r) = RET_PRIM_STGCALL2(I_,mpz_cmp,&arg1,&arg2); \
+ (r) = RET_PRIM_STGCALL2(I_,mpz_cmp,&arg1,&arg2); \
}
/* A glorious hack: calling mpz_neg would entail allocation and
* about increasing the alignment requirements.
*/
#define REAL_BYTE_ARR_CTS(a) ((void *) (((StgArrWords *)(a))->payload))
-#define REAL_PTRS_ARR_CTS(a) ((P_) (((StgArrPtrs *)(a))->payload))
+#define REAL_PTRS_ARR_CTS(a) ((P_) (((StgMutArrPtrs *)(a))->payload))
#ifdef DEBUG
-#define BYTE_ARR_CTS(a) \
- ({ ASSERT(GET_INFO(a) == &ARR_WORDS_info); \
+#define BYTE_ARR_CTS(a) \
+ ({ ASSERT((GET_INFO(a) == &ARR_WORDS_info) \
+ || (GET_INFO(a) == &MUT_ARR_WORDS_info)); \
REAL_BYTE_ARR_CTS(a); })
-#define PTRS_ARR_CTS(a) \
- ({ ASSERT((GET_INFO(a) == &ARR_PTRS_info) \
- || (GET_INFO(a) == &MUT_ARR_PTRS_info));\
+#define PTRS_ARR_CTS(a) \
+ ({ ASSERT((GET_INFO(a) == &ARR_PTRS_info) \
+ || (GET_INFO(a) == &MUT_ARR_PTRS_info)); \
REAL_PTRS_ARR_CTS(a); })
#else
#define BYTE_ARR_CTS(a) REAL_BYTE_ARR_CTS(a)
#define PTRS_ARR_CTS(a) REAL_PTRS_ARR_CTS(a)
#endif
-/* Todo: define... */
extern I_ genSymZh(void);
extern I_ resetGenSymZh(void);
-extern I_ incSeqWorldZh(void);
/*--- everything except new*Array is done inline: */
-------------------------------------------------------------------------- */
#define sameMVarZh(r,a,b) r=(I_)((a)==(b))
+
+/* Assume external decl of EMPTY_MVAR_info is in scope by now */
+#define isEmptyMVarZh(r,a) r=(I_)((GET_INFO((StgMVar*)(a))) == &EMPTY_MVAR_info )
EF_(newMVarZh_fast);
EF_(takeMVarZh_fast);
EF_(putMVarZh_fast);