/* -----------------------------------------------------------------------------
- * $Id: PrimOps.h,v 1.75 2001/02/28 00:01:03 qrczak Exp $
+ * $Id: PrimOps.h,v 1.79 2001/07/24 06:31:35 ken Exp $
*
* (c) The GHC Team, 1998-2000
*
* plugging into a new J#.
*/
#define addIntCzh(r,c,a,b) \
-{ r = a + b; \
- c = ((StgWord)(~(a^b) & (a^r))) \
+{ r = (I_)a + (I_)b; \
+ c = ((StgWord)(~((I_)a^(I_)b) & ((I_)a^r))) \
>> (BITS_IN (I_) - 1); \
}
#else
-#define HALF_INT (1 << (BITS_IN (I_) / 2))
+#define HALF_INT (1LL << (BITS_IN (I_) / 2))
#define stg_abs(a) ((a) < 0 ? -(a) : (a))
#define mulIntCzh(r,c,a,b) \
{ \
- if (stg_abs(a) >= HALF_INT \
+ if (stg_abs(a) >= HALF_INT || \
stg_abs(b) >= HALF_INT) { \
c = 1; \
} else { \
Stable Name / Stable Pointer PrimOps
-------------------------------------------------------------------------- */
-#ifndef PAR
-
EXTFUN_RTS(makeStableNamezh_fast);
#define stableNameToIntzh(r,s) (r = ((StgStableName *)s)->sn)
#define eqStablePtrzh(r,sp1,sp2) \
(r = ((stgCast(StgWord,sp1) & ~STABLEPTR_WEIGHT_MASK) == (stgCast(StgWord,sp2) & ~STABLEPTR_WEIGHT_MASK)))
-#endif
-
/* -----------------------------------------------------------------------------
Concurrency/Exception PrimOps.
-------------------------------------------------------------------------- */
#if defined(GRAN)
//@cindex _par_
-#define parzh(r,node) PAR(r,node,1,0,0,0,0,0)
+#define parzh(r,node) parAny(r,node,1,0,0,0,0,0)
//@cindex _parAt_
#define parAtzh(r,node,where,identifier,gran_info,size_info,par_info,rest) \
//@cindex _parLocal_
#define parLocalzh(r,node,identifier,gran_info,size_info,par_info,rest) \
- PAR(r,node,rest,identifier,gran_info,size_info,par_info,1)
+ parAny(r,node,rest,identifier,gran_info,size_info,par_info,1)
//@cindex _parGlobal_
#define parGlobalzh(r,node,identifier,gran_info,size_info,par_info,rest) \
- PAR(r,node,rest,identifier,gran_info,size_info,par_info,0)
+ parAny(r,node,rest,identifier,gran_info,size_info,par_info,0)
-#define PAR(r,node,rest,identifier,gran_info,size_info,par_info,local) \
+#define parAny(r,node,rest,identifier,gran_info,size_info,par_info,local) \
{ \
if (closure_SHOULD_SPARK((StgClosure*)node)) { \
rtsSpark *result; \
Weak Pointer PrimOps.
-------------------------------------------------------------------------- */
-#ifndef PAR
-
EXTFUN_RTS(mkWeakzh_fast);
EXTFUN_RTS(finalizzeWeakzh_fast);
#define sameWeakzh(w1,w2) ((w1)==(w2))
-#endif
/* -----------------------------------------------------------------------------
Foreign Object PrimOps.
-------------------------------------------------------------------------- */
-#ifndef PAR
-
#define ForeignObj_CLOSURE_DATA(c) (((StgForeignObj *)c)->data)
#define foreignObjToAddrzh(r,fo) r=ForeignObj_CLOSURE_DATA(fo)
#define writeForeignObjzh(res,datum) \
(ForeignObj_CLOSURE_DATA(res) = (P_)(datum))
-#define eqForeignObj(f1,f2) ((f1)==(f2))
-
+#define eqForeignObjzh(r,f1,f2) r=(f1)==(f2)
#define indexCharOffForeignObjzh(r,fo,i) indexCharOffAddrzh(r,ForeignObj_CLOSURE_DATA(fo),i)
#define indexWideCharOffForeignObjzh(r,fo,i) indexWideCharOffAddrzh(r,ForeignObj_CLOSURE_DATA(fo),i)
#define indexIntOffForeignObjzh(r,fo,i) indexIntOffAddrzh(r,ForeignObj_CLOSURE_DATA(fo),i)
#define indexWord64OffForeignObjzh(r,fo,i) indexWord64OffAddrzh(r,ForeignObj_CLOSURE_DATA(fo),i)
#endif
-#endif
-
-
/* -----------------------------------------------------------------------------
Constructor tags
-------------------------------------------------------------------------- */