[project @ 1999-01-21 20:15:30 by sof]
[ghc-hetmet.git] / ghc / includes / PrimOps.h
index ef1a19f..58f2df0 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $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.
  *
@@ -109,6 +109,8 @@ typedef union {
   c = z.i[C];                                  \
 }
 
+
+
 #define subWithCarryZh(r,c,a,b)                        \
 { long_long_u z;                               \
   z.l = a + b;                                 \
@@ -276,7 +278,7 @@ typedef union {
   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
@@ -407,25 +409,24 @@ LI_ stg_word64ToInt64 (StgNat64);
  * 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: */
 
@@ -606,6 +607,9 @@ EF_(newMutVarZh_fast);
    -------------------------------------------------------------------------- */
 
 #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);