summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/stg/SMP.h35
-rw-r--r--rts/PrimOps.cmm2
-rw-r--r--rts/Timer.c2
-rw-r--r--rts/sm/GC.c2
4 files changed, 11 insertions, 30 deletions
diff --git a/includes/stg/SMP.h b/includes/stg/SMP.h
index bdcaf55d3e..be28911fee 100644
--- a/includes/stg/SMP.h
+++ b/includes/stg/SMP.h
@@ -52,22 +52,13 @@ EXTERN_INLINE StgWord xchg(StgPtr p, StgWord w);
EXTERN_INLINE StgWord cas(StgVolatilePtr p, StgWord o, StgWord n);
/*
- * Atomic increment
- *
- * atomic_inc(p) {
- * return ++(*p);
- * }
- */
-EXTERN_INLINE StgWord atomic_inc(StgVolatilePtr p);
-
-/*
* Atomic addition by the provided quantity
*
- * atomic_inc_by(p, n) {
+ * atomic_inc(p, n) {
* return ((*p) += n);
* }
*/
-EXTERN_INLINE StgWord atomic_inc_by(StgVolatilePtr p, StgWord n);
+EXTERN_INLINE StgWord atomic_inc(StgVolatilePtr p, StgWord n);
/*
@@ -246,9 +237,10 @@ cas(StgVolatilePtr p, StgWord o, StgWord n)
#endif
}
-// RRN: Added to enable general fetch-and-add in Haskell code (fetchAddIntArray#).
+// RRN: Generalized to arbitrary increments to enable fetch-and-add in
+// Haskell code (fetchAddIntArray#).
EXTERN_INLINE StgWord
-atomic_inc_by(StgVolatilePtr p, StgWord incr)
+atomic_inc(StgVolatilePtr p, StgWord incr)
{
#if defined(i386_HOST_ARCH) || defined(x86_64_HOST_ARCH)
StgWord r;
@@ -269,12 +261,6 @@ atomic_inc_by(StgVolatilePtr p, StgWord incr)
}
EXTERN_INLINE StgWord
-atomic_inc(StgVolatilePtr p)
-{
- return atomic_inc_by(p, 1);
-}
-
-EXTERN_INLINE StgWord
atomic_dec(StgVolatilePtr p)
{
#if defined(i386_HOST_ARCH) || defined(x86_64_HOST_ARCH)
@@ -407,14 +393,9 @@ cas(StgVolatilePtr p, StgWord o, StgWord n)
return result;
}
-INLINE_HEADER StgWord
-atomic_inc(StgVolatilePtr p)
-{
- return ++(*p);
-}
-
-INLINE_HEADER StgWord
-atomic_inc_by(StgVolatilePtr p, StgWord incr)
+EXTERN_INLINE StgWord atomic_inc(StgVolatilePtr p, StgWord incr);
+EXTERN_INLINE StgWord
+atomic_inc(StgVolatilePtr p, StgWord incr)
{
return ((*p) += incr);
}
diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm
index b7177ca130..a07c1def97 100644
--- a/rts/PrimOps.cmm
+++ b/rts/PrimOps.cmm
@@ -157,7 +157,7 @@ stg_fetchAddIntArrayzh( gcptr arr, W_ ind, W_ incr )
gcptr p, h;
p = arr + SIZEOF_StgArrWords + WDS(ind);
- (h) = ccall atomic_inc_by(p, incr);
+ (h) = ccall atomic_inc(p, incr);
return(h);
}
diff --git a/rts/Timer.c b/rts/Timer.c
index aa4b8d8fd7..b7762f985c 100644
--- a/rts/Timer.c
+++ b/rts/Timer.c
@@ -119,7 +119,7 @@ startTimer(void)
void
stopTimer(void)
{
- if (atomic_inc(&timer_disabled) == 1) {
+ if (atomic_inc(&timer_disabled, 1) == 1) {
if (RtsFlags.MiscFlags.tickInterval != 0) {
stopTicker();
}
diff --git a/rts/sm/GC.c b/rts/sm/GC.c
index 28593f5c71..d0446281ab 100644
--- a/rts/sm/GC.c
+++ b/rts/sm/GC.c
@@ -919,7 +919,7 @@ static StgWord
inc_running (void)
{
StgWord new;
- new = atomic_inc(&gc_running_threads);
+ new = atomic_inc(&gc_running_threads, 1);
ASSERT(new <= n_gc_threads);
return new;
}